]> Pileus Git - ~andy/gtk/commitdiff
Don't chain up to the container's expose event. Instead call
authorJoe Shaw <joe@ximian.com>
Wed, 13 Feb 2002 22:49:40 +0000 (22:49 +0000)
committerJoe Shaw <joeshaw@src.gnome.org>
Wed, 13 Feb 2002 22:49:40 +0000 (22:49 +0000)
2002-02-13  Joe Shaw  <joe@ximian.com>

* gtk/gtktreeitem.c (gtk_tree_item_expose): Don't chain up to the
container's expose event.  Instead call
gtk_tree_item_expose_child() on each child.  Avoids a failed
g_assert() in gtk_container_propagate_expose().
(gtk_tree_item_expose_child): Added.  Synthesize an expose event
for our children.  Basically gtk_container_propagate_expose()
minus the g_assert().  (#71396)

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtktreeitem.c

index 183c1ccca60d3da4c4c986558ab5b87a588f964b..3be78ccf6508cf0453da268b991aa2d01a3f64fb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2002-02-13  Joe Shaw  <joe@ximian.com>
+
+       * gtk/gtktreeitem.c (gtk_tree_item_expose): Don't chain up to the
+       container's expose event.  Instead call
+       gtk_tree_item_expose_child() on each child.  Avoids a failed
+       g_assert() in gtk_container_propagate_expose().
+       (gtk_tree_item_expose_child): Added.  Synthesize an expose event
+       for our children.  Basically gtk_container_propagate_expose()
+       minus the g_assert().  (#71396)
+
 2002-02-13  Tor Lillqvist  <tml@iki.fi>
 
        * gdk/gdkinternals.h: Add some more GdkDebugFlags, for more
index 183c1ccca60d3da4c4c986558ab5b87a588f964b..3be78ccf6508cf0453da268b991aa2d01a3f64fb 100644 (file)
@@ -1,3 +1,13 @@
+2002-02-13  Joe Shaw  <joe@ximian.com>
+
+       * gtk/gtktreeitem.c (gtk_tree_item_expose): Don't chain up to the
+       container's expose event.  Instead call
+       gtk_tree_item_expose_child() on each child.  Avoids a failed
+       g_assert() in gtk_container_propagate_expose().
+       (gtk_tree_item_expose_child): Added.  Synthesize an expose event
+       for our children.  Basically gtk_container_propagate_expose()
+       minus the g_assert().  (#71396)
+
 2002-02-13  Tor Lillqvist  <tml@iki.fi>
 
        * gdk/gdkinternals.h: Add some more GdkDebugFlags, for more
index 183c1ccca60d3da4c4c986558ab5b87a588f964b..3be78ccf6508cf0453da268b991aa2d01a3f64fb 100644 (file)
@@ -1,3 +1,13 @@
+2002-02-13  Joe Shaw  <joe@ximian.com>
+
+       * gtk/gtktreeitem.c (gtk_tree_item_expose): Don't chain up to the
+       container's expose event.  Instead call
+       gtk_tree_item_expose_child() on each child.  Avoids a failed
+       g_assert() in gtk_container_propagate_expose().
+       (gtk_tree_item_expose_child): Added.  Synthesize an expose event
+       for our children.  Basically gtk_container_propagate_expose()
+       minus the g_assert().  (#71396)
+
 2002-02-13  Tor Lillqvist  <tml@iki.fi>
 
        * gdk/gdkinternals.h: Add some more GdkDebugFlags, for more
index 183c1ccca60d3da4c4c986558ab5b87a588f964b..3be78ccf6508cf0453da268b991aa2d01a3f64fb 100644 (file)
@@ -1,3 +1,13 @@
+2002-02-13  Joe Shaw  <joe@ximian.com>
+
+       * gtk/gtktreeitem.c (gtk_tree_item_expose): Don't chain up to the
+       container's expose event.  Instead call
+       gtk_tree_item_expose_child() on each child.  Avoids a failed
+       g_assert() in gtk_container_propagate_expose().
+       (gtk_tree_item_expose_child): Added.  Synthesize an expose event
+       for our children.  Basically gtk_container_propagate_expose()
+       minus the g_assert().  (#71396)
+
 2002-02-13  Tor Lillqvist  <tml@iki.fi>
 
        * gdk/gdkinternals.h: Add some more GdkDebugFlags, for more
index 183c1ccca60d3da4c4c986558ab5b87a588f964b..3be78ccf6508cf0453da268b991aa2d01a3f64fb 100644 (file)
@@ -1,3 +1,13 @@
+2002-02-13  Joe Shaw  <joe@ximian.com>
+
+       * gtk/gtktreeitem.c (gtk_tree_item_expose): Don't chain up to the
+       container's expose event.  Instead call
+       gtk_tree_item_expose_child() on each child.  Avoids a failed
+       g_assert() in gtk_container_propagate_expose().
+       (gtk_tree_item_expose_child): Added.  Synthesize an expose event
+       for our children.  Basically gtk_container_propagate_expose()
+       minus the g_assert().  (#71396)
+
 2002-02-13  Tor Lillqvist  <tml@iki.fi>
 
        * gdk/gdkinternals.h: Add some more GdkDebugFlags, for more
index 183c1ccca60d3da4c4c986558ab5b87a588f964b..3be78ccf6508cf0453da268b991aa2d01a3f64fb 100644 (file)
@@ -1,3 +1,13 @@
+2002-02-13  Joe Shaw  <joe@ximian.com>
+
+       * gtk/gtktreeitem.c (gtk_tree_item_expose): Don't chain up to the
+       container's expose event.  Instead call
+       gtk_tree_item_expose_child() on each child.  Avoids a failed
+       g_assert() in gtk_container_propagate_expose().
+       (gtk_tree_item_expose_child): Added.  Synthesize an expose event
+       for our children.  Basically gtk_container_propagate_expose()
+       minus the g_assert().  (#71396)
+
 2002-02-13  Tor Lillqvist  <tml@iki.fi>
 
        * gdk/gdkinternals.h: Add some more GdkDebugFlags, for more
index 183c1ccca60d3da4c4c986558ab5b87a588f964b..3be78ccf6508cf0453da268b991aa2d01a3f64fb 100644 (file)
@@ -1,3 +1,13 @@
+2002-02-13  Joe Shaw  <joe@ximian.com>
+
+       * gtk/gtktreeitem.c (gtk_tree_item_expose): Don't chain up to the
+       container's expose event.  Instead call
+       gtk_tree_item_expose_child() on each child.  Avoids a failed
+       g_assert() in gtk_container_propagate_expose().
+       (gtk_tree_item_expose_child): Added.  Synthesize an expose event
+       for our children.  Basically gtk_container_propagate_expose()
+       minus the g_assert().  (#71396)
+
 2002-02-13  Tor Lillqvist  <tml@iki.fi>
 
        * gdk/gdkinternals.h: Add some more GdkDebugFlags, for more
index ba1fe88a078b2d8dae92d4735ce80f4f8c8969a8..f3a8cb673c8ff0b341a9dd0f83f9b43fe95fdc46 100644 (file)
@@ -689,10 +689,42 @@ gtk_tree_item_button_press (GtkWidget      *widget,
   return (event->type == GDK_BUTTON_PRESS && GTK_WIDGET_IS_SENSITIVE(widget));
 }
 
+static void
+gtk_tree_item_expose_child (GtkWidget *child,
+                            gpointer   client_data)
+{
+  struct {
+    GtkWidget *container;
+    GdkEventExpose *event;
+  } *data = client_data;
+  GdkEventExpose child_event;
+
+  if (GTK_WIDGET_DRAWABLE (child) &&
+      GTK_WIDGET_NO_WINDOW (child) &&
+      (child->window == data->event->window))
+    {
+      child_event = *data->event;
+
+      child_event.region = gtk_widget_region_intersect (child,
+                                                        data->event->region);
+      if (!gdk_region_empty (child_event.region))
+        {
+          gdk_region_get_clipbox (child_event.region, &child_event.area);
+          gtk_widget_send_expose (child, (GdkEvent *) &child_event);
+       }
+      gdk_region_destroy (child_event.region);
+    }
+}
+
 static gint
 gtk_tree_item_expose (GtkWidget      *widget,
                      GdkEventExpose *event)
 {
+  struct {
+    GtkWidget *container;
+    GdkEventExpose *event;
+  } data;
+  
   g_return_val_if_fail (GTK_IS_TREE_ITEM (widget), FALSE);
   g_return_val_if_fail (event != NULL, FALSE);
 
@@ -700,7 +732,12 @@ gtk_tree_item_expose (GtkWidget      *widget,
     {
       gtk_tree_item_paint (widget, &event->area);
 
-      (* GTK_WIDGET_CLASS (parent_class)->expose_event) (widget, event);
+      data.container = widget;
+      data.event = event;
+
+      gtk_container_forall (GTK_CONTAINER (widget),
+                            gtk_tree_item_expose_child,
+                            &data);
    }
 
   return FALSE;