diff options
author | Juan Pablo Ugarte <jpu@src.gnome.org> | 2006-08-28 21:46:05 +0000 |
---|---|---|
committer | Juan Pablo Ugarte <jpu@src.gnome.org> | 2006-08-28 21:46:05 +0000 |
commit | 98febc5aab35ebaec2d35dfba0c88ea00adf90e2 (patch) | |
tree | 8b8ce514c074413c23bae864178fc6544174a0fe | |
parent | 43dee6b3fcddf5c134f90823fa6ee52e33f696f8 (diff) | |
download | glade-98febc5aab35ebaec2d35dfba0c88ea00adf90e2.tar.gz |
Fixed bug 345075 "GtkPaned is invisible on load". added new functions
* src/glade-gtk.c: Fixed bug 345075 "GtkPaned is invisible on load".
added new functions glade_gtk_paned_set_child_property() and
glade_gtk_paned_get_child_property().
* src/glade-editor.c: do not load invisible packing properties in
glade_editor_load_packing_page().
* widgets/gtk+.xml.in: GtkPaned support improved.
o Added new virtual child property "first".
o Added child-set-property-function and child-get-property-function
* src/glade-utils.[ch]: added convenience function
glade_util_object_is_loading()
* src/glade-editor-property.c: Fixed bug 352825 "segmentation fault when
saving after adding multiple accelerators to buttons"
set ACCEL_COLUMN_REAL_SIGNAL in key_edited() when a new slot is
appended and free string allocated by gtk_tree_model_get().
-rw-r--r-- | ChangeLog | 21 | ||||
-rw-r--r-- | TODO | 4 | ||||
-rw-r--r-- | src/glade-editor-property.c | 75 | ||||
-rw-r--r-- | src/glade-editor.c | 4 | ||||
-rw-r--r-- | src/glade-gtk.c | 110 | ||||
-rw-r--r-- | src/glade-utils.c | 23 | ||||
-rw-r--r-- | src/glade-utils.h | 3 | ||||
-rw-r--r-- | widgets/gtk+.xml.in | 9 |
8 files changed, 195 insertions, 54 deletions
@@ -1,3 +1,24 @@ +2006-08-28 Juan Pablo Ugarte <juanpablougarte@gmail.com> + + * src/glade-gtk.c: Fixed bug 345075 "GtkPaned is invisible on load". + added new functions glade_gtk_paned_set_child_property() and + glade_gtk_paned_get_child_property(). + + * src/glade-editor.c: do not load invisible packing properties in + glade_editor_load_packing_page(). + + * widgets/gtk+.xml.in: GtkPaned support improved. + o Added new virtual child property "first". + o Added child-set-property-function and child-get-property-function + + * src/glade-utils.[ch]: added convenience function + glade_util_object_is_loading() + + * src/glade-editor-property.c: Fixed bug 352825 "segmentation fault when + saving after adding multiple accelerators to buttons" + set ACCEL_COLUMN_REAL_SIGNAL in key_edited() when a new slot is + appended and free string allocated by gtk_tree_model_get(). + 2006-08-24 Vincent Geddes <vincent.geddes@gmail.com> * src/glade-utils.[ch]: Remove glade_util_uri_list_parse(). @@ -1,6 +1,4 @@ -3.0.1 Bugfix release menu: +3.0.2 Bugfix release menu: ========================== - - Interface signals - Need to order properties in the editor (part of bug 345893) - - SHIFT-click on palette items should make them "stick" (bug 303679) diff --git a/src/glade-editor-property.c b/src/glade-editor-property.c index 7da9717e..81020e75 100644 --- a/src/glade-editor-property.c +++ b/src/glade-editor-property.c @@ -3203,7 +3203,6 @@ key_edited (GtkCellRendererText *cell, { GladeEPropAccel *eprop_accel = GLADE_EPROP_ACCEL (eprop); gboolean key_was_set; - gchar *signal; const gchar *text; GtkTreeIter iter, parent_iter, new_iter; @@ -3211,11 +3210,9 @@ key_edited (GtkCellRendererText *cell, &iter, path_string)) return; - gtk_tree_model_get - (eprop_accel->model, &iter, - ACCEL_COLUMN_KEY_ENTERED, &key_was_set, - ACCEL_COLUMN_SIGNAL, &signal, - -1); + gtk_tree_model_get (eprop_accel->model, &iter, + ACCEL_COLUMN_KEY_ENTERED, &key_was_set, + -1); /* If user selects "none"; remove old entry or ignore new one. */ @@ -3248,22 +3245,31 @@ key_edited (GtkCellRendererText *cell, if (key_was_set == FALSE && gtk_tree_model_iter_parent (eprop_accel->model, &parent_iter, &iter)) - { + { + gchar *signal, *real_signal; + + gtk_tree_model_get (eprop_accel->model, &iter, + ACCEL_COLUMN_SIGNAL, &signal, + ACCEL_COLUMN_REAL_SIGNAL, &real_signal, + -1); + /* Append a new empty slot at the end */ gtk_tree_store_insert_after (GTK_TREE_STORE (eprop_accel->model), &new_iter, &parent_iter, &iter); - gtk_tree_store_set - (GTK_TREE_STORE (eprop_accel->model), &new_iter, - ACCEL_COLUMN_SIGNAL, signal, - ACCEL_COLUMN_IS_CLASS, FALSE, - ACCEL_COLUMN_IS_SIGNAL, TRUE, - ACCEL_COLUMN_MOD_SHIFT, FALSE, - ACCEL_COLUMN_MOD_CNTL, FALSE, - ACCEL_COLUMN_MOD_ALT, FALSE, - ACCEL_COLUMN_KEY, _("<choose a key>"), - ACCEL_COLUMN_KEY_ENTERED, FALSE, - ACCEL_COLUMN_KEY_SLOT, TRUE, - -1); + gtk_tree_store_set (GTK_TREE_STORE (eprop_accel->model), &new_iter, + ACCEL_COLUMN_SIGNAL, signal, + ACCEL_COLUMN_REAL_SIGNAL, real_signal, + ACCEL_COLUMN_IS_CLASS, FALSE, + ACCEL_COLUMN_IS_SIGNAL, TRUE, + ACCEL_COLUMN_MOD_SHIFT, FALSE, + ACCEL_COLUMN_MOD_CNTL, FALSE, + ACCEL_COLUMN_MOD_ALT, FALSE, + ACCEL_COLUMN_KEY, _("<choose a key>"), + ACCEL_COLUMN_KEY_ENTERED, FALSE, + ACCEL_COLUMN_KEY_SLOT, TRUE, + -1); + g_free (signal); + g_free (real_signal); } } @@ -3434,32 +3440,31 @@ glade_eprop_accel_accum_accelerators (GtkTreeModel *model, GList **ret) { GladeAccelInfo *info; - gchar *signal; - gchar *key_str; + gchar *signal, *key_str; gboolean shift, cntl, alt, entered; + gtk_tree_model_get (model, iter, ACCEL_COLUMN_KEY_ENTERED, &entered, -1); + if (entered == FALSE) return FALSE; + gtk_tree_model_get (model, iter, ACCEL_COLUMN_REAL_SIGNAL, &signal, ACCEL_COLUMN_KEY, &key_str, ACCEL_COLUMN_MOD_SHIFT, &shift, ACCEL_COLUMN_MOD_CNTL, &cntl, ACCEL_COLUMN_MOD_ALT, &alt, - ACCEL_COLUMN_KEY_ENTERED, &entered, -1); - - if (entered) - { - info = g_new0 (GladeAccelInfo, 1); - info->signal = g_strdup (signal); - info->key = glade_builtin_key_from_string (key_str); - info->modifiers = - (shift ? GDK_SHIFT_MASK : 0) | - (cntl ? GDK_CONTROL_MASK : 0) | - (alt ? GDK_MOD1_MASK : 0); - - *ret = g_list_prepend (*ret, info); - } + info = g_new0 (GladeAccelInfo, 1); + info->signal = signal; + info->key = glade_builtin_key_from_string (key_str); + info->modifiers = (shift ? GDK_SHIFT_MASK : 0) | + (cntl ? GDK_CONTROL_MASK : 0) | + (alt ? GDK_MOD1_MASK : 0); + + *ret = g_list_prepend (*ret, info); + + g_free (key_str); + return FALSE; } diff --git a/src/glade-editor.c b/src/glade-editor.c index cc347143..72f3bfee 100644 --- a/src/glade-editor.c +++ b/src/glade-editor.c @@ -774,6 +774,10 @@ glade_editor_load_packing_page (GladeEditor *editor, GladeWidget *widget) for (list = widget->packing_properties; list && list->data; list = list->next) { property = GLADE_PROPERTY (list->data); + + if (glade_property_class_is_visible (property->class) == FALSE) + continue; + editor_property = glade_editor_table_append_item (editor->packing_etable, property->class, FALSE); editor->packing_eprops = g_list_prepend (editor->packing_eprops, editor_property); diff --git a/src/glade-gtk.c b/src/glade-gtk.c index a45494f0..2fbb4524 100644 --- a/src/glade-gtk.c +++ b/src/glade-gtk.c @@ -2452,23 +2452,51 @@ glade_gtk_paned_post_create (GObject *paned, GladeCreateReason reason) void GLADEGTK_API glade_gtk_paned_add_child (GObject *object, GObject *child) { - GList *children, *list; + GtkPaned *paned; + GtkWidget *child1, *child2; + gboolean loading; + + g_return_if_fail (GTK_IS_PANED (object)); + + paned = GTK_PANED (object); + loading = glade_util_object_is_loading (object); + + child1 = gtk_paned_get_child1 (paned); + child2 = gtk_paned_get_child2 (paned); - if ((children = gtk_container_get_children (GTK_CONTAINER (object))) != NULL) + if (loading == FALSE) { - for (list = children; list; list = list->next) + /* Remove a placeholder */ + if (child1 && GLADE_IS_PLACEHOLDER (child1)) { - /* Make way for the incomming widget */ - if (GLADE_IS_PLACEHOLDER (list->data)) - { - gtk_container_remove (GTK_CONTAINER (object), - GTK_WIDGET (list->data)); - break; - } + gtk_container_remove (GTK_CONTAINER (object), child1); + child1 = NULL; + } + else if (child2 && GLADE_IS_PLACEHOLDER (child2)) + { + gtk_container_remove (GTK_CONTAINER (object), child2); + child2 = NULL; } } - gtk_container_add (GTK_CONTAINER (object), GTK_WIDGET (child)); + /* Add the child */ + if (child1 == NULL) + gtk_paned_add1 (paned, GTK_WIDGET (child)); + else if (child2 == NULL) + gtk_paned_add2 (paned, GTK_WIDGET (child)); + + if (GLADE_IS_PLACEHOLDER (child) == FALSE && loading) + { + GladeWidget *gchild = glade_widget_get_from_gobject (child); + + if (gchild && gchild->packing_properties) + { + if (child1 == NULL) + glade_widget_pack_property_set (gchild, "first", TRUE); + else if (child2 == NULL) + glade_widget_pack_property_set (gchild, "first", FALSE); + } + } } void GLADEGTK_API @@ -2479,6 +2507,60 @@ glade_gtk_paned_remove_child (GObject *object, GObject *child) glade_gtk_paned_post_create (object, GLADE_CREATE_USER); } +void GLADEGTK_API +glade_gtk_paned_set_child_property (GObject *container, + GObject *child, + const gchar *property_name, + const GValue *value) +{ + if (strcmp (property_name, "first") == 0) + { + GtkPaned *paned = GTK_PANED (container); + gboolean first = g_value_get_boolean (value); + GtkWidget *place, *wchild = GTK_WIDGET (child); + + place = (first) ? gtk_paned_get_child1 (paned) : + gtk_paned_get_child2 (paned); + + if (place && GLADE_IS_PLACEHOLDER (place)) + gtk_container_remove (GTK_CONTAINER (container), place); + + g_object_ref (child); + gtk_container_remove (GTK_CONTAINER (container), wchild); + if (first) + gtk_paned_add1 (paned, wchild); + else + gtk_paned_add2 (paned, wchild); + g_object_unref (child); + + /* Ensure placeholders */ + if ((place = gtk_paned_get_child1 (paned)) == NULL) + gtk_paned_add1 (paned, glade_placeholder_new ()); + + if ((place = gtk_paned_get_child2 (paned)) == NULL) + gtk_paned_add2 (paned, glade_placeholder_new ()); + } + else + gtk_container_child_set_property (GTK_CONTAINER (container), + GTK_WIDGET (child), + property_name, value); +} + +void GLADEGTK_API +glade_gtk_paned_get_child_property (GObject *container, + GObject *child, + const gchar *property_name, + GValue *value) +{ + if (strcmp (property_name, "first") == 0) + g_value_set_boolean (value, GTK_WIDGET (child) == + gtk_paned_get_child1 (GTK_PANED (container))); + else + gtk_container_child_get_property (GTK_CONTAINER (container), + GTK_WIDGET (child), + property_name, value); +} + /* ----------------------------- GtkExpander ------------------------------ */ void GLADEGTK_API glade_gtk_expander_post_create (GObject *expander, GladeCreateReason reason) @@ -4341,22 +4423,18 @@ glade_gtk_toolbar_set_child_property (GObject *container, void GLADEGTK_API glade_gtk_toolbar_add_child (GObject *object, GObject *child) { - GladeWidget *gtoolbar; - GladeProject *project; GtkToolbar *toolbar; GtkToolItem *item; g_return_if_fail (GTK_IS_TOOLBAR (object)); g_return_if_fail (GTK_IS_TOOL_ITEM (child)); - gtoolbar = glade_widget_get_from_gobject (object); - project = glade_widget_get_project (gtoolbar); toolbar = GTK_TOOLBAR (object); item = GTK_TOOL_ITEM (child); gtk_toolbar_insert (toolbar, item, -1); - if (glade_project_is_loading (project)) + if (glade_util_object_is_loading (object)) { GladeWidget *gchild = glade_widget_get_from_gobject (child); diff --git a/src/glade-utils.c b/src/glade-utils.c index 8bc49294..1ecd0a46 100644 --- a/src/glade-utils.c +++ b/src/glade-utils.c @@ -1732,3 +1732,26 @@ glade_util_get_placeholder_from_pointer (GtkContainer *container) return retval; } + +/** + * glade_util_object_is_loading: + * @object: A #GObject + * + * Returns: Whether the object's project is being loaded or not. + * + */ +gboolean +glade_util_object_is_loading (GObject *object) +{ + GladeProject *project; + GladeWidget *widget; + + g_return_val_if_fail (G_IS_OBJECT (object), FALSE); + + widget = glade_widget_get_from_gobject (object); + g_return_val_if_fail (GLADE_IS_WIDGET (widget), FALSE); + + project = glade_widget_get_project (widget); + + return glade_project_is_loading (project); +} diff --git a/src/glade-utils.h b/src/glade-utils.h index 527cf699..db0ba588 100644 --- a/src/glade-utils.h +++ b/src/glade-utils.h @@ -146,6 +146,9 @@ gboolean glade_util_deep_fixed_event (GtkWidget *widget, LIBGLADEUI_API GtkWidget *glade_util_get_placeholder_from_pointer (GtkContainer *container); +LIBGLADEUI_API +gboolean glade_util_object_is_loading (GObject *object); + G_END_DECLS #endif /* __GLADE_UTILS_H__ */ diff --git a/widgets/gtk+.xml.in b/widgets/gtk+.xml.in index 1271b4c4..3e3fde87 100644 --- a/widgets/gtk+.xml.in +++ b/widgets/gtk+.xml.in @@ -838,9 +838,18 @@ <type>GtkWidget</type> <add-child-function>glade_gtk_paned_add_child</add-child-function> <remove-child-function>glade_gtk_paned_remove_child</remove-child-function> + <child-set-property-function>glade_gtk_paned_set_child_property</child-set-property-function> + <child-get-property-function>glade_gtk_paned_get_child_property</child-get-property-function> <properties> <property id="resize" transfer-on-paste="True"/> <property id="shrink" transfer-on-paste="True"/> + <!-- + Whether to add the child to the top/left or bottom/right pane. + This virtual property is used to remember child position in undo/redo. + --> + <property id="first" save="False" visible="False"> + <spec>glade_standard_boolean_spec</spec> + </property> </properties> </child> </children> |