[gtk+] GtkDialog: rejigger headerbar handling



commit 7b407145412aa236e0a5efe5a9be4f6d4ce1fd0d
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu Jul 17 12:49:57 2014 -0400

    GtkDialog: rejigger headerbar handling
    
    We can't avoid calling set_titlebar in buildable_add_child, since
    GtkBuilder assumes that it can e.g. call grab_default at the end,
    which only works if the widget is inside a toplevel at that point.
    
    Instead, drop the titlebar and clean up priv->headerbar in constructed
    if we find that we don't want a headerbar.

 gtk/gtkdialog.c |   21 +++++++++------------
 1 files changed, 9 insertions(+), 12 deletions(-)
---
diff --git a/gtk/gtkdialog.c b/gtk/gtkdialog.c
index ac7849a..edd8702 100644
--- a/gtk/gtkdialog.c
+++ b/gtk/gtkdialog.c
@@ -458,12 +458,6 @@ gtk_dialog_constructed (GObject *object)
   if (priv->use_header_bar)
     {
       GList *children, *l;
-      gchar *title;
-
-      title = g_strdup (gtk_window_get_title (GTK_WINDOW (dialog)));
-      gtk_window_set_titlebar (GTK_WINDOW (dialog), priv->headerbar);
-      gtk_window_set_title (GTK_WINDOW (dialog), title);
-      g_free (title);
 
       children = gtk_container_get_children (GTK_CONTAINER (priv->action_area));
       for (l = children; l != NULL; l = l->next)
@@ -491,8 +485,12 @@ gtk_dialog_constructed (GObject *object)
 
       g_signal_connect (priv->action_area, "add", G_CALLBACK (add_cb), dialog);
     }
+  else
+    {
+      gtk_window_set_titlebar (GTK_WINDOW (dialog), NULL);
+      priv->headerbar = NULL;
+    }
 
-  gtk_widget_set_visible (priv->headerbar, priv->use_header_bar);
   gtk_widget_set_visible (priv->action_box, !priv->use_header_bar);
 }
 
@@ -1874,12 +1872,11 @@ gtk_dialog_buildable_add_child (GtkBuildable  *buildable,
 
   if (type == NULL)
     gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child));
-
-  /* Don't call gtk_window_set_titlebar() until we know whether we want
-   * traditional titlebars or header bars.
-   */
   else if (g_str_equal (type, "titlebar"))
-    priv->headerbar = GTK_WIDGET (child);
+    {
+      priv->headerbar = GTK_WIDGET (child);
+      gtk_window_set_titlebar (GTK_WINDOW (buildable), priv->headerbar);
+    }
   else if (g_strcmp0 (type, "action") == 0)
     gtk_dialog_add_action_widget (GTK_DIALOG (buildable), GTK_WIDGET (child), GTK_RESPONSE_NONE);
   else


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