From 66b079666da632151501c43ec32f8c3e5a868618 Mon Sep 17 00:00:00 2001 From: Tristan Van Berkom Date: Wed, 7 Jun 2006 18:00:32 +0000 Subject: [PATCH] o Reverting the simplification of gtkbox, the regression was that the box * src/glade-gtk.c, widgets/gtk+.xml.in: o Reverting the simplification of gtkbox, the regression was that the box placeholders were not adjusting properly on undo/redo of create/delete/cut/paste commands. o Fixing GtkFixed/GtkLayout to not call glade_gtk_container_add/remove_child for its children. * src/glade-command.c: Slight simplifications made. --- ChangeLog | 11 ++++++++ src/glade-command.c | 19 ++++++------- src/glade-gtk.c | 67 +++++++++++++++++++++++++++++++++++++++++++++ widgets/gtk+.xml.in | 18 ++++++++++++ 4 files changed, 104 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 94fdd17c..e78552d2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2006-06-07 Tristan Van Berkom + + * src/glade-gtk.c, widgets/gtk+.xml.in: + o Reverting the simplification of gtkbox, the regression was that the box + placeholders were not adjusting properly on undo/redo of create/delete/cut/paste + commands. + o Fixing GtkFixed/GtkLayout to not call glade_gtk_container_add/remove_child for + its children. + + * src/glade-command.c: Slight simplifications made. + 2006-06-06 Tristan Van Berkom * src/glade-command.c: fixed double free in glade_command_add_signal_finalize() diff --git a/src/glade-command.c b/src/glade-command.c index 96491cf1..88ff5510 100644 --- a/src/glade-command.c +++ b/src/glade-command.c @@ -854,14 +854,12 @@ glade_command_create_execute (GladeCommandCreateDelete *me) } else { - glade_widget_set_parent (cdata->widget, cdata->parent); - glade_widget_class_container_add (cdata->parent->widget_class, cdata->parent->object, cdata->widget->object); - glade_widget_set_packing_properties (cdata->widget, cdata->parent); + glade_widget_set_parent (cdata->widget, cdata->parent); } /* Now that we've added, apply any packing props if nescisary. */ @@ -1251,10 +1249,6 @@ glade_command_paste_execute (GladeCommandCutCopyPaste *me) (cdata->parent, G_OBJECT (cdata->placeholder), cdata->widget->object); - - /* Hmmm XXX should we record initial paste - * packing props here ? - */ } else if (cdata->parent->manager != NULL) /* Paste at mouse position only once */ @@ -1262,15 +1256,18 @@ glade_command_paste_execute (GladeCommandCutCopyPaste *me) cdata->props_recorded == FALSE); else { - glade_widget_set_parent (cdata->widget, - cdata->parent); +/* glade_widget_set_parent (cdata->widget, */ +/* cdata->parent); */ glade_widget_class_container_add (cdata->parent->widget_class, cdata->parent->object, cdata->widget->object); - glade_widget_set_packing_properties (cdata->widget, cdata->parent); + glade_widget_set_parent (cdata->widget, + cdata->parent); + +/* glade_widget_set_packing_properties (cdata->widget, cdata->parent); */ } /* Now that we've added, apply any packing props if nescisary. */ @@ -1358,7 +1355,7 @@ glade_command_cut_execute (GladeCommandCutCopyPaste *me) (cdata->parent, cdata->widget->object, G_OBJECT (cdata->placeholder)); - else if (cdata->parent->manager != NULL) + else if (cdata->parent->manager != NULL) glade_fixed_manager_remove_child (cdata->parent->manager, cdata->widget); else diff --git a/src/glade-gtk.c b/src/glade-gtk.c index f53a727f..bb110a72 100644 --- a/src/glade-gtk.c +++ b/src/glade-gtk.c @@ -198,6 +198,38 @@ glade_gtk_spin_button_set_adjustment (GObject *object, GValue *value) /* GtkBox */ +void GLADEGTK_API +glade_gtk_box_set_child_property (GObject *container, + GObject *child, + const gchar *property_name, + GValue *value) +{ + GladeWidget *gbox; + + g_return_if_fail (GTK_IS_BOX (container)); + g_return_if_fail (GTK_IS_WIDGET (child)); + gbox = glade_widget_get_from_gobject (container); + g_return_if_fail (GLADE_IS_WIDGET (gbox)); + g_return_if_fail (property_name != NULL || value != NULL); + + /* Chain Up */ + gtk_container_child_set_property (GTK_CONTAINER (container), + GTK_WIDGET (child), + property_name, + value); + + if (strcmp (property_name, "position") == 0) + { + gint position, size; + + position = g_value_get_int (value) + 1; + glade_widget_property_get (gbox, "size", &size); + + if (size < position) + glade_widget_property_set (gbox, "size", position); + } +} + void GLADEGTK_API glade_gtk_box_get_size (GObject *object, GValue *value) { @@ -317,6 +349,25 @@ glade_gtk_box_add_child (GObject *object, GObject *child) gbox = glade_widget_get_from_gobject (object); project = glade_widget_get_project (gbox); + /* + Try to remove the last placeholder if any, this way GtkBox`s size + will not be changed. + */ + if (!GLADE_IS_PLACEHOLDER (child)) + { + GList *l; + GtkBox *box = GTK_BOX (object); + + for (l = g_list_last (box->children); l; l = g_list_previous (l)) + { + GtkWidget *child_widget = ((GtkBoxChild *) (l->data))->widget; + if (GLADE_IS_PLACEHOLDER (child_widget)) + { + gtk_container_remove (GTK_CONTAINER (box), child_widget); + break; + } + } + } gtk_container_add (GTK_CONTAINER (object), GTK_WIDGET (child)); @@ -360,6 +411,22 @@ glade_gtk_box_get_internal_child (GObject *object, g_list_free (children); } +void GLADEGTK_API +glade_gtk_box_remove_child (GObject *object, GObject *child) +{ + GladeWidget *gbox; + gint size; + + g_return_if_fail (GTK_IS_BOX (object)); + g_return_if_fail (GTK_IS_WIDGET (child)); + + gbox = glade_widget_get_from_gobject (object); + + gtk_container_remove (GTK_CONTAINER (object), GTK_WIDGET (child)); + + glade_widget_property_get (gbox, "size", &size); + glade_widget_property_set (gbox, "size", size); +} /* GtkToolBar */ void GLADEGTK_API diff --git a/widgets/gtk+.xml.in b/widgets/gtk+.xml.in index cd4082a4..1e7c6b75 100644 --- a/widgets/gtk+.xml.in +++ b/widgets/gtk+.xml.in @@ -111,6 +111,8 @@ GtkWidget glade_gtk_box_add_child + glade_gtk_box_remove_child + glade_gtk_box_set_child_property @@ -987,10 +989,26 @@ + + + + GtkWidget + gtk_container_add + gtk_container_remove + + glade_gtk_fixed_layout_post_create + + + + GtkWidget + gtk_container_add + gtk_container_remove + +