Closed
Bug 528852
Opened 15 years ago
Closed 15 years ago
seams when scrolling with position:fixed and GTK+2.18
Categories
(Core :: Widget: Gtk, defect)
Tracking
()
RESOLVED
FIXED
mozilla1.9.3a1
Tracking | Status | |
---|---|---|
status1.9.2 | --- | beta5-fixed |
People
(Reporter: karlt, Assigned: karlt)
References
Details
Attachments
(5 files, 1 obsolete file)
With GTK+-2.18.3, gdk_window_move_region copies the invalid region from the source but doesn't subtract the invalid region at the destination. Combine this with the invalidation of source regions of previous gdk_window_move_region operations, and moving to cover an adjacent source region leaves it invalid. Further, on gdk_window_process_updates removes any invalid regions from pending moves, and so no move covers any previous source region. This leaves seams between each rectangle moved until they are repainted.
Assignee | ||
Comment 1•15 years ago
|
||
Assignee: nobody → mozbugz
Assignee | ||
Comment 2•15 years ago
|
||
Assignee | ||
Comment 3•15 years ago
|
||
This is the expected situation before the invalid areas are painted. Obtained with GTK+-2.16.6.
Assignee | ||
Comment 4•15 years ago
|
||
Assignee | ||
Comment 5•15 years ago
|
||
Actual results with GTK+2.18.3. These lines only flicker briefly, but you know they are there.
Attachment #412527 -
Attachment is obsolete: true
Comment 6•15 years ago
|
||
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.3a1pre) Gecko/20091116 Minefield/3.7a1pre I see aso seems on Windows. Not sure if it is the same, but possible. Not reproducible with Firefox 2.
Assignee | ||
Comment 7•15 years ago
|
||
Thanks for checking Windows NT. I filed bug 529092 for that. It will need its own fix.
No longer blocks: 529092
Assignee | ||
Comment 8•15 years ago
|
||
We can fix this by operating on the GdkWindow's update area ourselves. A variation on some code that roc wrote here would work: https://bugzilla.mozilla.org/attachment.cgi?id=386202&action=diff#a/widget/src/gtk2/nsWindow.cpp_sec1
Assignee | ||
Comment 9•15 years ago
|
||
Attachment #414662 -
Flags: review?(roc)
+ gdk_region_union(updateChanges, newUpdates); Shouldn't this be gdk_region_intersect? You want to keep the newUpdates that are in the destination rect and throw away the rest. I wonder if it's worth hoisting some of this temporary region creation and destruction out of the loop.
Assignee | ||
Comment 11•15 years ago
|
||
(In reply to comment #10) > + gdk_region_union(updateChanges, newUpdates); > > Shouldn't this be gdk_region_intersect? You want to keep the newUpdates that > are in the destination rect and throw away the rest. At this point, updateChanges is portion of the old invalid area that has moved, and newUpdates are additional updates due to other windows. We need them both (union). We don't want to throw away what is outside the destination rect (unless and until it is covered by another move). This was my attempt at explaining: + // The parts of source regions not covered by their destination get marked + // invalid (by GDK). This is necessary (until covered by another blit) + // because GDK translates any pending expose events to the destination, + // and so doesn't know whether an expose event might have been due on the + // source. > I wonder if it's worth hoisting some of this temporary region creation and > destruction out of the loop. Possible, if fairly ugly and less clear. It might save some slice allocations (haven't checked). We could create an empty region outside the loop, so that we could create an assignment operator by intersecting with the empty region then unioning with the new region or rect. The other possibility is to have two paths: 1) GDK 2.16 or earlier - no need for messing with invalid regions. 2) GDK 2.18 or later - rects can be gathered into fewer regions. However, I wasn't so keen on having to test two paths.
Attachment #414662 -
Flags: review?(roc) → review+
Assignee | ||
Comment 12•15 years ago
|
||
Requesting approval to land this on m-c. The equivalent bug on NT (Bug 529092) was a blocker. With GTK it only affects people with the latest branch of GTK, so I don't think this needs to be a blocker. That group of people does include those on the latest Ubuntu 9.10 ("Karmic Koala"), though. It's very hard to automatically test this because it's all about interactions with GTK and I don't know a good way to test GTK's response. I think we'll want this on 1.9.2 at some stage, because GTK+-2.18 will be more widely used, so I think it's worth getting this on m-c ASAP. (There isn't really a bug in GTK; GTK just isn't doing things as nicely for our situation as it used to.)
Flags: blocking1.9.2?
Flags: blocking1.9.2? → blocking1.9.2+
Assignee | ||
Comment 13•15 years ago
|
||
http://hg.mozilla.org/mozilla-central/rev/bc9963f9a495
Status: NEW → RESOLVED
Closed: 15 years ago
Resolution: --- → FIXED
Whiteboard: [needs 192 landing]
Target Milestone: --- → mozilla1.9.3a1
Assignee | ||
Comment 14•15 years ago
|
||
http://hg.mozilla.org/releases/mozilla-1.9.2/rev/f520e15d6791
status1.9.2:
--- → final-fixed
Whiteboard: [needs 192 landing]
You need to log in
before you can comment on or make changes to this bug.
Description
•