[gnumeric] win32: attempt to patch-up GtkEntry redraw problem.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] win32: attempt to patch-up GtkEntry redraw problem.
- Date: Tue, 6 Apr 2010 02:10:43 +0000 (UTC)
commit a644e2690f144015e04d0e31c095593f4e243b28
Author: Morten Welinder <terra gnome org>
Date: Mon Apr 5 21:56:03 2010 -0400
win32: attempt to patch-up GtkEntry redraw problem.
tools/win32/moduleset.in | 9 ++-
tools/win32/patches/gtk-gdk-expose-order.patch | 81 ++++++++++++++++++++++++
2 files changed, 86 insertions(+), 4 deletions(-)
---
diff --git a/tools/win32/moduleset.in b/tools/win32/moduleset.in
index 0364ae1..f115c98 100644
--- a/tools/win32/moduleset.in
+++ b/tools/win32/moduleset.in
@@ -198,6 +198,7 @@
version="2.18.5">
<patch file="&patch_dir;gtk-disable-demo.patch"/>
<patch file="&patch_dir;gtk-use-wine-to-cross-compile.patch"/>
+ <patch file="&patch_dir;gtk-gdk-expose-order.patch" strip="1"/>
</branch>
<dependencies>
<dep package="glib"/>
@@ -353,7 +354,7 @@
<dep package="pcre"/>
<dep package="libxml2"/>
<dep package="pango"/>
- <dep package="lasem"/>
+ <!-- <dep package="lasem"/> -->
</dependencies>
</autotools>
<autotools id="gnumeric">
@@ -363,9 +364,9 @@
<dep package="libglade"/>
</dependencies>
<suggests>
- <dep package="libgda"/>
- <dep package="lp_solve"/>
- <dep package="psiconv"/>
+ <!-- <dep package="libgda"/> -->
+ <!-- <dep package="lp_solve"/> -->
+ <!-- <dep package="psiconv"/> -->
<dep package="pxlib"/>
<dep package="pygobject"/>
</suggests>
diff --git a/tools/win32/patches/gtk-gdk-expose-order.patch b/tools/win32/patches/gtk-gdk-expose-order.patch
new file mode 100644
index 0000000..4494cfe
--- /dev/null
+++ b/tools/win32/patches/gtk-gdk-expose-order.patch
@@ -0,0 +1,81 @@
+diff -ur gtk+-2.18.5/gdk/gdkwindow.c gtk+-2.18.5.new/gdk/gdkwindow.c
+--- gtk+-2.18.5/gdk/gdkwindow.c 2009-12-08 10:13:05.000000000 -0500
++++ gtk+-2.18.5.new/gdk/gdkwindow.c 2010-04-05 18:38:41.000000000 -0400
+@@ -4569,7 +4569,7 @@
+ region = gdk_region_rectangle (&rect);
+ gdk_window_clear_region_internal (window,
+ region,
+- FALSE);
++ send_expose);
+ gdk_region_destroy (region);
+
+ }
+@@ -5008,7 +5008,7 @@
+ /* if "window" has an ancestor in the list and tmp is one of
+ * "window's" children, insert "window" before tmp
+ */
+- if (has_ancestor_in_list && gdk_window_is_ancestor (tmp->data, window))
++ if (gdk_window_is_ancestor (tmp->data, window))
+ {
+ tmp = g_slist_prepend (tmp, window);
+
+@@ -5086,6 +5086,7 @@
+ GdkRegion *child_region;
+ GdkRectangle r;
+ GList *l, *children;
++ GList *csw_children = NULL, *csw_regions = NULL;
+
+ if (gdk_region_empty (expose_region))
+ return;
+@@ -5127,19 +5128,20 @@
+ gdk_region_intersect (child_region, expose_region);
+ gdk_region_subtract (expose_region, child_region);
+ gdk_region_offset (child_region, -child->x, -child->y);
+- _gdk_window_process_updates_recurse ((GdkWindow *)child, child_region);
++
++ csw_children = g_list_prepend (csw_children, child);
++ csw_regions = g_list_prepend (csw_regions, child_region);
++ child_region = NULL;
+ }
+ else
+ {
+ /* Native child, just remove area from expose region */
+ gdk_region_subtract (expose_region, child_region);
+ }
+- gdk_region_destroy (child_region);
++ if (child_region)
++ gdk_region_destroy (child_region);
+ }
+
+- g_list_foreach (children, (GFunc)g_object_unref, NULL);
+- g_list_free (children);
+-
+ if (!gdk_region_empty (expose_region) &&
+ !private->destroyed)
+ {
+@@ -5177,6 +5179,25 @@
+ gdk_window_end_paint (window);
+ }
+ }
++
++ csw_children = g_list_reverse (csw_children);
++ csw_regions = g_list_reverse (csw_regions);
++ while (csw_children)
++ {
++ child = csw_children->data;
++ child_region = csw_regions->data;
++
++ _gdk_window_process_updates_recurse ((GdkWindow *)child, child_region);
++
++ gdk_region_destroy (child_region);
++
++ csw_children = g_list_delete_link (csw_children, csw_children);
++ csw_regions = g_list_delete_link (csw_regions, csw_regions);
++ }
++
++
++ g_list_foreach (children, (GFunc)g_object_unref, NULL);
++ g_list_free (children);
+ }
+
+ /* Process and remove any invalid area on the native window by creating
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]