diff options
Diffstat (limited to 'plugins/gtk+/glade-notebook-editor.c')
-rw-r--r-- | plugins/gtk+/glade-notebook-editor.c | 99 |
1 files changed, 98 insertions, 1 deletions
diff --git a/plugins/gtk+/glade-notebook-editor.c b/plugins/gtk+/glade-notebook-editor.c index 60f86181..59860a50 100644 --- a/plugins/gtk+/glade-notebook-editor.c +++ b/plugins/gtk+/glade-notebook-editor.c @@ -28,11 +28,15 @@ static void glade_notebook_editor_editable_init (GladeEditableIface * iface); static void glade_notebook_editor_grab_focus (GtkWidget * widget); +static void has_start_action_changed (GObject *object, GParamSpec *pspec, GladeNotebookEditor *editor); +static void has_end_action_changed (GObject *object, GParamSpec *pspec, GladeNotebookEditor *editor); struct _GladeNotebookEditorPrivate { GtkWidget *embed; GtkWidget *tabs_grid; + GtkWidget *action_start_editor; + GtkWidget *action_end_editor; }; static GladeEditableIface *parent_editable_iface; @@ -52,6 +56,11 @@ glade_notebook_editor_class_init (GladeNotebookEditorClass * klass) gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/gladegtk/glade-notebook-editor.ui"); gtk_widget_class_bind_template_child_private (widget_class, GladeNotebookEditor, embed); gtk_widget_class_bind_template_child_private (widget_class, GladeNotebookEditor, tabs_grid); + gtk_widget_class_bind_template_child_private (widget_class, GladeNotebookEditor, action_start_editor); + gtk_widget_class_bind_template_child_private (widget_class, GladeNotebookEditor, action_end_editor); + + gtk_widget_class_bind_template_callback (widget_class, has_start_action_changed); + gtk_widget_class_bind_template_callback (widget_class, has_end_action_changed); } static void @@ -68,6 +77,8 @@ glade_notebook_editor_load (GladeEditable * editable, GladeWidget * widget) GladeNotebookEditor *notebook_editor = GLADE_NOTEBOOK_EDITOR (editable); GladeNotebookEditorPrivate *priv = notebook_editor->priv; gboolean show_tabs = FALSE; + gboolean has_start_action = FALSE; + gboolean has_end_action = FALSE; /* Chain up to default implementation */ parent_editable_iface->load (editable, widget); @@ -75,8 +86,13 @@ glade_notebook_editor_load (GladeEditable * editable, GladeWidget * widget) if (widget) { glade_widget_property_get (widget, "show-tabs", &show_tabs); - gtk_widget_set_visible (priv->tabs_grid, show_tabs); + + glade_widget_property_get (widget, "has-action-start", &has_start_action); + gtk_switch_set_active (GTK_SWITCH (priv->action_start_editor), has_start_action); + + glade_widget_property_get (widget, "has-action-end", &has_end_action); + gtk_switch_set_active (GTK_SWITCH (priv->action_end_editor), has_end_action); } } @@ -101,3 +117,84 @@ glade_notebook_editor_new (void) { return g_object_new (GLADE_TYPE_NOTEBOOK_EDITOR, NULL); } + +static void +has_action_changed (GladeNotebookEditor *editor, GtkPackType pack_type) +{ + GladeNotebookEditorPrivate *priv = editor->priv; + GladeWidget *gwidget = glade_editable_loaded_widget (GLADE_EDITABLE (editor)); + GtkWidget *notebook; + GtkWidget *action; + GladeWidget *gaction = NULL; + GladeProperty *property; + gboolean has_action; + GtkWidget *action_editor; + + if (glade_editable_loading (GLADE_EDITABLE (editor)) || !gwidget) + return; + + if (pack_type == GTK_PACK_START) + { + action_editor = priv->action_start_editor; + property = glade_widget_get_property (gwidget, "has-action-start"); + } + else + { + action_editor = priv->action_end_editor; + property = glade_widget_get_property (gwidget, "has-action-end"); + } + + has_action = gtk_switch_get_active (GTK_SWITCH (action_editor)); + + notebook = (GtkWidget *)glade_widget_get_object (gwidget); + action = gtk_notebook_get_action_widget (GTK_NOTEBOOK (notebook), pack_type); + + if (action && !GLADE_IS_PLACEHOLDER (action)) + gaction = glade_widget_get_from_gobject (action); + + glade_editable_block (GLADE_EDITABLE (editor)); + + if (has_action && pack_type == GTK_PACK_START) + glade_command_push_group (_("Setting %s to have a start action"), + glade_widget_get_name (gwidget)); + else if (has_action && pack_type == GTK_PACK_END) + glade_command_push_group (_("Setting %s to have an end action"), + glade_widget_get_name (gwidget)); + else if (!has_action && pack_type == GTK_PACK_START) + glade_command_push_group (_("Setting %s to not have a start action"), + glade_widget_get_name (gwidget)); + else + glade_command_push_group (_("Setting %s to not have an end action"), + glade_widget_get_name (gwidget)); + + /* If a project widget exists when were disabling center child, it needs + * to be removed first as a part of the issuing GladeCommand group + */ + if (gaction) + { + GList list; + list.prev = list.next = NULL; + list.data = gaction; + glade_command_delete (&list); + } + + glade_command_set_property (property, has_action); + + glade_command_pop_group (); + + glade_editable_unblock (GLADE_EDITABLE (editor)); + + glade_editable_load (GLADE_EDITABLE (editor), gwidget); +} + +static void +has_start_action_changed (GObject *object, GParamSpec *pspec, GladeNotebookEditor *editor) +{ + has_action_changed (editor, GTK_PACK_START); +} + +static void +has_end_action_changed (GObject *object, GParamSpec *pspec, GladeNotebookEditor *editor) +{ + has_action_changed (editor, GTK_PACK_END); +} |