[glade/glade-3-36] GladeGtkWindow: Fix CSD support



commit 347fe7505f448a78cf8435d918ea3ca8be922b12
Author: Juan Pablo Ugarte <juanpablougarte gmail com>
Date:   Mon Jun 22 20:04:24 2020 -0300

    GladeGtkWindow: Fix CSD support
    
    GladeWidget: make sure hidden placeholder are never serialized
    
    https://gitlab.gnome.org/GNOME/glade/-/issues/447

 gladeui/glade-widget.c          |  3 ++-
 plugins/gtk+/glade-gtk-window.c | 20 ++++++++++++++++----
 2 files changed, 18 insertions(+), 5 deletions(-)
---
diff --git a/gladeui/glade-widget.c b/gladeui/glade-widget.c
index 3e6206e4..640fe1ae 100644
--- a/gladeui/glade-widget.c
+++ b/gladeui/glade-widget.c
@@ -4437,7 +4437,8 @@ glade_widget_write (GladeWidget     *widget,
 
           if (child)
             glade_widget_write_child (widget, child, context, widget_node);
-          else if (GLADE_IS_PLACEHOLDER (l->data))
+          /* Only write visible placeholder, since the plugins could use invisible ones for convenience */
+          else if (GLADE_IS_PLACEHOLDER (l->data) && gtk_widget_get_visible (l->data))
             glade_widget_write_placeholder (widget,
                                             G_OBJECT (l->data),
                                             context, widget_node);
diff --git a/plugins/gtk+/glade-gtk-window.c b/plugins/gtk+/glade-gtk-window.c
index 5daa30b6..86198222 100644
--- a/plugins/gtk+/glade-gtk-window.c
+++ b/plugins/gtk+/glade-gtk-window.c
@@ -43,7 +43,8 @@ glade_gtk_window_parse_finished (GladeProject *project, GObject *object)
 {
   GtkWidget *titlebar = gtk_window_get_titlebar(GTK_WINDOW (object));
   glade_widget_property_set (glade_widget_get_from_gobject (object), "use-csd",
-                             titlebar && gtk_widget_get_visible (titlebar));
+                             titlebar && gtk_widget_get_visible (titlebar) &&
+                             !GLADE_IS_PLACEHOLDER (titlebar));
 }
 
 static void
@@ -205,7 +206,7 @@ glade_gtk_window_write_widget (GladeWidgetAdaptor *adaptor,
         glade_xml_node_verify_silent (node, GLADE_XML_TAG_TEMPLATE)))
     return;
 
-  /* First chain up and read in all the normal properties.. */
+  /* First chain up and write in all the normal properties.. */
   GWA_GET_CLASS (GTK_TYPE_WIDGET)->write_widget (adaptor, widget, context,
                                                  node);
 
@@ -282,8 +283,19 @@ glade_gtk_window_set_property (GladeWidgetAdaptor *adaptor,
         }
       else
         {
-          /* Set a hidden placeholder as the titlebar */
-          glade_gtk_window_ensure_titlebar_placeholder (object);
+          if (GLADE_IS_PLACEHOLDER (titlebar))
+            gtk_widget_hide (titlebar);
+          else
+            {
+              GList this_widget = { 0, };
+
+              /* Remove titlebar widget */
+              this_widget.data = glade_widget_get_from_gobject (titlebar);
+              glade_command_delete (&this_widget);
+
+              /* Set a hidden placeholder as the titlebar */
+              glade_gtk_window_ensure_titlebar_placeholder (object);
+            }
 
           glade_widget_property_set_sensitive (gwidget, "title", TRUE, NULL);
           glade_widget_property_set_sensitive (gwidget, "decorated", TRUE, NULL);


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