summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Pablo Ugarte <jpu@src.gnome.org>2006-08-28 21:46:05 +0000
committerJuan Pablo Ugarte <jpu@src.gnome.org>2006-08-28 21:46:05 +0000
commit98febc5aab35ebaec2d35dfba0c88ea00adf90e2 (patch)
tree8b8ce514c074413c23bae864178fc6544174a0fe
parent43dee6b3fcddf5c134f90823fa6ee52e33f696f8 (diff)
downloadglade-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--ChangeLog21
-rw-r--r--TODO4
-rw-r--r--src/glade-editor-property.c75
-rw-r--r--src/glade-editor.c4
-rw-r--r--src/glade-gtk.c110
-rw-r--r--src/glade-utils.c23
-rw-r--r--src/glade-utils.h3
-rw-r--r--widgets/gtk+.xml.in9
8 files changed, 195 insertions, 54 deletions
diff --git a/ChangeLog b/ChangeLog
index 20c5155d..aba1465a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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().
diff --git a/TODO b/TODO
index 179b7d82..3e97d8be 100644
--- a/TODO
+++ b/TODO
@@ -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>