GNOME Bugzilla – Bug 703124
[regression] Scrolling results in upper part of spreadsheet being obscured
Last modified: 2013-08-20 13:37:21 UTC
Created attachment 247826 [details] Screenshot showing the problem I'm running 1.12.3 of gnumeric, 0.10.3 of goffice, 0.37.3 of glib, and gtk+ 3.9.6. When I start gnumeric, I get what is expected; however, on scrolling the upper part of the spreadsheet becomes obscured (I'll attach a screenshot). Remapping the window fixes this until the next time I scroll.
This looks like a gtk bug to me.
David, can you replicate this with a release version of gtk+, i.e. 3.8.2? Otherwise you should really file this against gtk+.
*** Bug 704684 has been marked as a duplicate of this bug. ***
David, did you ever get to try this with a stable release of gtk+?
Unfortunately not. I'm trying to keep the garnome build system running, and build at the cutting edge. If I revert gtk+ lots of stuff breaks.
@Morten, Jean is using gtk 3.8.2 and is not seeing this problem. (Of course there may really be additional differences.)
*** Bug 705894 has been marked as a duplicate of this bug. ***
Some local bisecting on rawhide points to https://git.gnome.org/browse/gtk+/commit/?id=d22fd7223c75f4720ddb982c659efb0d8d7543c4 Thats between gtk+ 3.9.0 and gtk+ 3.9.2
So we're missing expose events after a large expose-events related commit. That's going to be unpleasant to debug, :-(
Adding alexl@redhat.com for comments. commit d22fd7223c75f4720ddb982c659efb0d8d7543c4 Author: Alexander Larsson <alexl@redhat.com> Date: Wed Apr 17 20:55:26 2013 +0200 Only handle exposes on native window, propagate to children via draw()
The problem appears in GocCanvas during expose events. It does: GdkEventExpose *event = (GdkEventExpose *) gtk_get_current_event (); if (event && event->type == GDK_EXPOSE) { Look at event->area to minimize drawn area... But, in the new world the current event is the expose event on the toplevel, rather than the one on the inner widget because we do all propagation recursively from the toplevel down on the same cairo_t. The proper fix for GocCanvas is to use cairo_clip_extents() to find the extents of where to draw, but we should perhaps try to add fake GdkEvents to handle this..
Created attachment 252374 [details] [review] canvas: Look at cairo clip region rather than current expose event This fixes redraw issues with latest Gtk+ which only sends expose events for the actual toplevel windows rather than each GdkWindow.
Yanko: can you confirm that this patch resolves the issue in your setup?
Yes it works for me. rawhide, goffice 0.10.5 + patch, gnumeric 1.25.5
sorry, meant gnumeric 1.12.5 not 1.25.5
This problem has been fixed in our software repository. The fix will go into the next software release. Thank you for your bug report.