summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <matthiasc@src.gnome.org>2009-02-28 05:24:07 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2009-02-28 05:24:07 +0000
commitd0e7f5889e558a704543dbf74fe138d796037edc (patch)
tree2a0ad8f37eed4f9fdf42f9dddda67f7cf125deb8
parent3a8c0e370b7a71d65642d14b680a111090172688 (diff)
downloadgdk-pixbuf-d0e7f5889e558a704543dbf74fe138d796037edc.tar.gz
Bug 573069 – Gdk-CRITICAL warnings with Gtk 2.14 when dragging
GtkNotebook tabs * gtk/gtkwidget.c (_gtk_widget_synthesize_crossing): Be a little more careful when navigating up the parent chain. * gdk/gdkwindow.c (_gdk_window_destroy_hierarchy): Reset the pointer window thats stored on the screen when it is destroyed. svn path=/trunk/; revision=22420
-rw-r--r--ChangeLog11
-rw-r--r--gdk/gdkwindow.c21
-rw-r--r--gtk/gtkwidget.c30
3 files changed, 38 insertions, 24 deletions
diff --git a/ChangeLog b/ChangeLog
index fbcc03037..06f21f81e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2009-02-28 Matthias Clasen <mclasen@redhat.com>
+
+ Bug 573069 – Gdk-CRITICAL warnings with Gtk 2.14 when dragging
+ GtkNotebook tabs
+
+ * gtk/gtkwidget.c (_gtk_widget_synthesize_crossing): Be a little
+ more careful when navigating up the parent chain.
+
+ * gdk/gdkwindow.c (_gdk_window_destroy_hierarchy): Reset the
+ pointer window thats stored on the screen when it is destroyed.
+
2009-02-27 Matthias Clasen <mclasen@redhat.com>
Bug 572996 – crash in Home Folder: Trying to open the sidebar
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index a7cd74ce7..d7e0e685e 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -283,6 +283,8 @@ gdk_window_init (GdkWindowObject *window)
window->state = GDK_WINDOW_STATE_WITHDRAWN;
}
+static GQuark quark_pointer_window = 0;
+
static void
gdk_window_class_init (GdkWindowObjectClass *klass)
{
@@ -319,6 +321,8 @@ gdk_window_class_init (GdkWindowObjectClass *klass)
drawable_class->get_clip_region = gdk_window_get_clip_region;
drawable_class->get_visible_region = gdk_window_get_visible_region;
drawable_class->get_composite_drawable = gdk_window_get_composite_drawable;
+
+ quark_pointer_window = g_quark_from_static_string ("gtk-pointer-window");
}
static void
@@ -490,10 +494,14 @@ _gdk_window_destroy_hierarchy (GdkWindow *window,
if (GDK_WINDOW_DESTROYED (window))
return;
+ screen = gdk_drawable_get_screen (GDK_DRAWABLE (window));
+ temp_window = g_object_get_qdata (G_OBJECT (screen), quark_pointer_window);
+ if (temp_window == window)
+ g_object_set_qdata (G_OBJECT (screen), quark_pointer_window, NULL);
+
switch (GDK_WINDOW_TYPE (window))
{
case GDK_WINDOW_ROOT:
- screen = gdk_drawable_get_screen (GDK_DRAWABLE (window));
if (!screen->closed)
{
g_error ("attempted to destroy root window");
@@ -2108,17 +2116,16 @@ gdk_window_clear_backing_rect_redirect (GdkWindow *window,
if (GDK_WINDOW_DESTROYED (window))
return;
- paint.x_offset = x_offset;
- paint.y_offset = y_offset;
- paint.pixmap = redirect->pixmap;
- paint.surface = _gdk_drawable_ref_cairo_surface (redirect->pixmap);
-
clip_region = _gdk_window_calculate_full_clip_region (window,
GDK_WINDOW (redirect->redirected),
NULL, TRUE,
&x_offset, &y_offset);
-
+ paint.x_offset = x_offset;
+ paint.y_offset = y_offset;
+ paint.pixmap = redirect->pixmap;
+ paint.surface = _gdk_drawable_ref_cairo_surface (redirect->pixmap);
+
method.cr = NULL;
method.gc = NULL;
setup_backing_rect_method (&method, window, &paint, 0, 0);
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 25c8620b1..e85d9f1f7 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -8246,13 +8246,10 @@ _gtk_widget_synthesize_crossing (GtkWidget *from,
while (from_ancestor != NULL)
{
- if (from_ancestor != NULL)
- {
- from_ancestor = gdk_window_get_parent (from_ancestor);
- if (from_ancestor == NULL)
- break;
- from_ancestors = g_list_prepend (from_ancestors, from_ancestor);
- }
+ from_ancestor = gdk_window_get_parent (from_ancestor);
+ if (from_ancestor == NULL)
+ break;
+ from_ancestors = g_list_prepend (from_ancestors, from_ancestor);
}
synth_crossing (from, GDK_LEAVE_NOTIFY, from_window,
@@ -8274,14 +8271,11 @@ _gtk_widget_synthesize_crossing (GtkWidget *from,
while (to_ancestor != NULL)
{
- if (to_ancestor != NULL)
- {
- to_ancestor = gdk_window_get_parent (to_ancestor);
- if (to_ancestor == NULL)
- break;
- to_ancestors = g_list_prepend (to_ancestors, to_ancestor);
- }
- }
+ to_ancestor = gdk_window_get_parent (to_ancestor);
+ if (to_ancestor == NULL)
+ break;
+ to_ancestors = g_list_prepend (to_ancestors, to_ancestor);
+ }
/* XXX: leave/inferior on root window? */
@@ -8309,14 +8303,16 @@ _gtk_widget_synthesize_crossing (GtkWidget *from,
from_ancestor = gdk_window_get_parent (from_ancestor);
if (from_ancestor == to_window)
break;
- from_ancestors = g_list_prepend (from_ancestors, from_ancestor);
+ if (from_ancestor)
+ from_ancestors = g_list_prepend (from_ancestors, from_ancestor);
}
if (to_ancestor != NULL)
{
to_ancestor = gdk_window_get_parent (to_ancestor);
if (to_ancestor == from_window)
break;
- to_ancestors = g_list_prepend (to_ancestors, to_ancestor);
+ if (to_ancestor)
+ to_ancestors = g_list_prepend (to_ancestors, to_ancestor);
}
}
if (to_ancestor == from_window)