Red Hat Bugzilla – Bug 209336
Breaks scrolling in firefox
Last modified: 2014-03-16 23:02:56 EDT
Description of problem:
Go to http://developer.gnome.org/doc/API/2.0/glib/glib-String-Utility-Functions.html
Page down scrolls normally. Page Up (or wheel mouse) causes the header on the
top of the page to be reprinted across the screen.
This works normally with metacity.
Version-Release number of selected component (if applicable):
Created attachment 137760 [details]
Example of the scrolling corruption
Created attachment 137776 [details]
This program reproduces the problem outside of mozilla. What it does:
- create a toplevel window
- create two children (siblings) of the toplevel
- one is the same size as the toplevel
- the other is smaller and on top of the first child
- Use XCopyArea() to scroll the big sibling
Under metacity a GraphicsExpose event is generated. Under compiz a NoExpose is
So this is a bug in the X server.
Just to be clear: sending GraphicsExpose is the correct behavior since the
pixels under the second child are not available.
This bug (missing GraphicsExpose) should be fixed in xorg-x11-server-1.1.1-47.fc6.
However, if you turn off smooth scrolling you can produce similar symptoms by
holding down the up arrow. This is a separate bug, where firefox somehow gets
confused by getting keypresses faster than it can redraw. For me, this shows
under compiz since repainting is slower there than under metacity, but it can
also be reproduced under metacity by these steps:
- run firefox, display one of the glib API pages scrolled down some
- turn off smooth scrolling in about:config
- log in from another computer and attach gdb to firefox
- press 'up arrow' 16 times in the firefox window, while firefox is still
stopped due to gdb
- 'continue' in gdb
This produces corruption even when there is no compositing going on.
One thing that might cause this (and this is pure speculation) is using CopyArea
to scroll a window, and then not translating expose events correctly. Eg.
- X server generates an expose event for the rectangle R
- client sends CopyArea that copies R somewhere else
- client sees expose event for (old position of) R
At this point the client needs translate the rectangle in the expose event to
take into account the fact that the exposed area was moved _after_ the event was
I filed the second bug as https://bugzilla.mozilla.org/show_bug.cgi?id=355745