[glade3] * plugins/gtk+/glade-gtk.c: Fixed glade_gtk_frame_add_child() to remove any previous placeholder



commit b1a1a26e703c0d5717343c34929fe53c324e441b
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Thu Aug 26 13:09:23 2010 +0900

    	* plugins/gtk+/glade-gtk.c: Fixed glade_gtk_frame_add_child() to remove any previous
    	  placeholders.

 ChangeLog                |    5 +++++
 plugins/gtk+/glade-gtk.c |   19 ++++++++++++++++++-
 2 files changed, 23 insertions(+), 1 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 8bc72b9..4a7f19a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2010-08-26  Tristan Van Berkom <tvb gnome org>
+
+	* plugins/gtk+/glade-gtk.c: Fixed glade_gtk_frame_add_child() to remove any previous
+	  placeholders.
+
 2010-06-15  Tristan Van Berkom <tvb gnome org>
 
 	* configure.ac: Require GTK+ 3.0 and change package domain from glade3 -> glade
diff --git a/plugins/gtk+/glade-gtk.c b/plugins/gtk+/glade-gtk.c
index b4dcddb..9463cdf 100644
--- a/plugins/gtk+/glade-gtk.c
+++ b/plugins/gtk+/glade-gtk.c
@@ -1345,7 +1345,10 @@ glade_gtk_container_add_child (GladeWidgetAdaptor *adaptor,
 			       GtkWidget          *container,
 			       GtkWidget          *child)
 {
-	GtkWidget *container_child = gtk_bin_get_child (GTK_BIN (container));
+	GtkWidget *container_child = NULL;
+
+	if (GTK_IS_BIN (container)) 
+		container_child = gtk_bin_get_child (GTK_BIN (container));
 
 	/* Get a placeholder out of the way before adding the child if its a GtkBin
 	 */
@@ -3384,6 +3387,7 @@ glade_gtk_frame_add_child (GladeWidgetAdaptor *adaptor,
 			   GObject            *object, 
 			   GObject            *child)
 {
+	GtkWidget *bin_child;
 	gchar *special_child_type;
 
 	special_child_type = g_object_get_data (child, "special-child-type");
@@ -3404,6 +3408,19 @@ glade_gtk_frame_add_child (GladeWidgetAdaptor *adaptor,
 	}
 	else
 	{
+		/* Get a placeholder out of the way before adding the child
+		 */
+		bin_child = gtk_bin_get_child (GTK_BIN (object));
+		if (bin_child)
+		{
+			if (GLADE_IS_PLACEHOLDER (bin_child))
+				gtk_container_remove (GTK_CONTAINER (object), bin_child);
+			else
+			{
+				g_critical ("Cant add more than one widget to a GtkFrame");
+				return;
+			}
+		}
 		gtk_container_add (GTK_CONTAINER (object),
 				   GTK_WIDGET (child));
 	}



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