[gtk+/gtk-3-10] fixed: Fix drawing order



commit 9b5183a9ce5b46eaca2198514c2fe14521d82502
Author: Benjamin Otte <otte redhat com>
Date:   Tue Feb 25 14:51:16 2014 +0100

    fixed: Fix drawing order
    
    Restore the drawing order in GtkFixed to what it was in 3.8. With the
    GDK drawing changes this will not be correct in some cases (un-windowed
    children can now overlap windowed children and native children overlap
    everything), but fixes Eclipse drawing.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=725089

 gtk/gtkfixed.c |   27 +++++++++++++++++++++++++++
 1 files changed, 27 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkfixed.c b/gtk/gtkfixed.c
index ec3467f..80c3522 100644
--- a/gtk/gtkfixed.c
+++ b/gtk/gtkfixed.c
@@ -99,6 +99,8 @@ static void gtk_fixed_get_preferred_height (GtkWidget *widget,
                                             gint      *natural);
 static void gtk_fixed_size_allocate (GtkWidget        *widget,
                                      GtkAllocation    *allocation);
+static gboolean gtk_fixed_draw      (GtkWidget        *widget,
+                                     cairo_t          *cr);
 static void gtk_fixed_add           (GtkContainer     *container,
                                      GtkWidget        *widget);
 static void gtk_fixed_remove        (GtkContainer     *container,
@@ -135,6 +137,7 @@ gtk_fixed_class_init (GtkFixedClass *class)
   widget_class->get_preferred_width = gtk_fixed_get_preferred_width;
   widget_class->get_preferred_height = gtk_fixed_get_preferred_height;
   widget_class->size_allocate = gtk_fixed_size_allocate;
+  widget_class->draw = gtk_fixed_draw;
 
   container_class->add = gtk_fixed_add;
   container_class->remove = gtk_fixed_remove;
@@ -545,3 +548,27 @@ gtk_fixed_forall (GtkContainer *container,
       (* callback) (child->widget, callback_data);
     }
 }
+
+static gboolean
+gtk_fixed_draw (GtkWidget *widget,
+                cairo_t   *cr)
+{
+  GtkFixed *fixed = GTK_FIXED (widget);
+  GtkFixedPrivate *priv = fixed->priv;
+  GtkFixedChild *child;
+  GList *list;
+
+  for (list = priv->children;
+       list;
+       list = list->next)
+    {
+      child = list->data;
+
+      gtk_container_propagate_draw (GTK_CONTAINER (fixed),
+                                    child->widget,
+                                    cr);
+    }
+  
+  return FALSE;
+}
+


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]