[glade] GladeGtkGrid: improve _add() method



commit f46fa6d9b36160a866cf19fbdbe95c806f944555
Author: Juan Pablo Ugarte <juanpablougarte gmail com>
Date:   Fri Sep 18 21:37:08 2020 -0300

    GladeGtkGrid: improve _add() method
    
    Add child to the first placeholder

 plugins/gtk+/glade-gtk-grid.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)
---
diff --git a/plugins/gtk+/glade-gtk-grid.c b/plugins/gtk+/glade-gtk-grid.c
index 27f069d9..fc80d758 100644
--- a/plugins/gtk+/glade-gtk-grid.c
+++ b/plugins/gtk+/glade-gtk-grid.c
@@ -287,7 +287,31 @@ glade_gtk_grid_add_child (GladeWidgetAdaptor *adaptor,
   g_return_if_fail (GTK_IS_GRID (object));
   g_return_if_fail (GTK_IS_WIDGET (child));
 
-  gtk_container_add (GTK_CONTAINER (object), GTK_WIDGET (child));
+  if (!glade_widget_superuser () && !GLADE_IS_PLACEHOLDER (child))
+    {
+      GladeWidget *widget = glade_widget_get_from_gobject (object);
+      GtkGrid *grid = GTK_GRID (object);
+      gint n_columns, n_rows;
+      gint x, y;
+
+      glade_widget_property_get (widget, "n-columns", &n_columns);
+      glade_widget_property_get (widget, "n-rows", &n_rows);
+
+      for (x = 0; x < n_columns; x++)
+        for (y = 0; y < n_rows; y++)
+          {
+            GtkWidget *child_widget = gtk_grid_get_child_at (grid, x, y);
+
+            if (GLADE_IS_PLACEHOLDER (child_widget))
+              {
+                gtk_container_remove (GTK_CONTAINER (grid), child_widget);
+                gtk_grid_attach (grid, GTK_WIDGET (child), x, y, 1, 1);
+                break;
+              }
+          }
+    }
+  else
+    gtk_container_add (GTK_CONTAINER (object), GTK_WIDGET (child));
 
   glade_gtk_grid_refresh_placeholders (GTK_GRID (object), FALSE);
 }


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