[glade] Ported GladePreferences to use a composite template.
- From: Tristan Van Berkom <tvb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glade] Ported GladePreferences to use a composite template.
- Date: Thu, 11 Apr 2013 12:48:56 +0000 (UTC)
commit f103d569723f64375647eee953415d0a720af0ad
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date: Thu Apr 11 20:41:41 2013 +0900
Ported GladePreferences to use a composite template.
po/POTFILES.in | 1 +
src/Makefile.am | 2 +-
src/glade-callbacks.h | 1 +
src/glade-preferences.c | 245 ++++++++++++++++-------------
src/glade-preferences.glade | 313 +++++++++++++++++++++++++++++++++++++
src/glade-preferences.h | 50 ++++--
src/glade-resources.gresource.xml | 1 +
src/glade-window.c | 13 ++-
src/glade.glade | 311 +------------------------------------
9 files changed, 501 insertions(+), 436 deletions(-)
---
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 69dc485..d8d17b1 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -6,6 +6,7 @@
data/glade.desktop.in.in
src/glade-close-button.c
[type: gettext/glade]src/glade.glade
+[type: gettext/glade]src/glade-preferences.glade
src/glade-window.c
src/main.c
diff --git a/src/Makefile.am b/src/Makefile.am
index 44d5d57..058a8e6 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -60,6 +60,6 @@ endif
glade-win32-res.o: glade.rc
$(WINDRES) $< $@
-UI_FILES = glade.glade
+UI_FILES = glade.glade glade-preferences.glade
EXTRA_DIST = glade.rc.in glade-resources.gresource.xml $(UI_FILES)
diff --git a/src/glade-callbacks.h b/src/glade-callbacks.h
index 0962b68..adf0a14 100644
--- a/src/glade-callbacks.h
+++ b/src/glade-callbacks.h
@@ -41,6 +41,7 @@ void on_redo_action_activate (GtkAction *action, GladeWindow *window
void on_quit_action_activate (GtkAction *action, GladeWindow *window);
void on_about_action_activate (GtkAction *action, GladeWindow *window);
void on_reference_action_activate (GtkAction *action, GladeWindow *window);
+void on_preferences_action_activate (GtkAction *action, GladeWindow *window);
void on_open_recent_action_item_activated (GtkRecentChooser *chooser,
GladeWindow *window);
diff --git a/src/glade-preferences.c b/src/glade-preferences.c
index 35865f1..d187b9e 100644
--- a/src/glade-preferences.c
+++ b/src/glade-preferences.c
@@ -22,9 +22,16 @@
#include "glade-preferences.h"
#include <gladeui/glade-catalog.h>
-struct _GladePreferences
+#define CONFIG_GROUP "Preferences"
+#define CONFIG_KEY_CATALOG_PATHS "catalog-paths"
+
+#define CONFIG_GROUP_LOAD_SAVE "Load and Save"
+#define CONFIG_KEY_BACKUP "backup"
+#define CONFIG_KEY_AUTOSAVE "autosave"
+#define CONFIG_KEY_AUTOSAVE_SECONDS "autosave-seconds"
+
+struct _GladePreferencesPrivate
{
- GObject *toplevel;
GtkComboBoxText *catalog_path_combo;
GtkWidget *create_backups_toggle;
@@ -32,15 +39,84 @@ struct _GladePreferences
GtkWidget *autosave_spin;
};
-#define CONFIG_GROUP "Preferences"
-#define CONFIG_KEY_CATALOG_PATHS "catalog-paths"
-#define CONFIG_GROUP_LOAD_SAVE "Load and Save"
-#define CONFIG_KEY_BACKUP "backup"
-#define CONFIG_KEY_AUTOSAVE "autosave"
-#define CONFIG_KEY_AUTOSAVE_SECONDS "autosave-seconds"
+G_DEFINE_TYPE (GladePreferences, glade_preferences, GTK_TYPE_DIALOG);
+
+/********************************************************
+ * CALLBACKS *
+ ********************************************************/
+static void
+autosave_toggled (GtkToggleButton *button,
+ GladePreferences *prefs)
+{
+ gtk_widget_set_sensitive (prefs->priv->autosave_spin,
+ gtk_toggle_button_get_active (button));
+}
+
+static gboolean
+find_row (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
+{
+ gchar **directory = data;
+ gchar *string;
+
+ gtk_tree_model_get (model, iter, 1, &string, -1);
+
+ if (g_strcmp0 (string, *directory) == 0)
+ {
+ g_free (*directory);
+ *directory = NULL;
+ return TRUE;
+ }
+
+ return FALSE;
+}
static void
+on_preferences_filechooserdialog_response (GtkDialog *dialog,
+ gint response_id,
+ GtkComboBoxText *combo)
+{
+ gtk_widget_hide (GTK_WIDGET (dialog));
+
+ if (response_id == GTK_RESPONSE_ACCEPT)
+ {
+ gchar *directory = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
+ GtkTreeModel *model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
+
+ gtk_tree_model_foreach (model, find_row, &directory);
+
+ if (directory)
+ {
+ glade_catalog_add_path (directory);
+ gtk_combo_box_text_append (combo, directory, directory);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
+ g_free (directory);
+ }
+ }
+}
+
+static void
+on_catalog_path_remove_button_clicked (GtkButton *button, GtkComboBoxText *combo)
+{
+ gint active = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
+
+ if (active >= 0)
+ {
+ gchar *directory = gtk_combo_box_text_get_active_text (combo);
+ glade_catalog_remove_path (directory);
+ g_free (directory);
+
+ gtk_combo_box_text_remove (combo, active);
+
+ if (--active < 0) active = 0;
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo), active);
+ }
+}
+
+/********************************************************
+ * Class/Instance Init *
+ ********************************************************/
+static void
combo_box_text_init_cell (GtkCellLayout *cell)
{
GList *l, *cels = gtk_cell_layout_get_cells (cell);
@@ -59,44 +135,62 @@ combo_box_text_init_cell (GtkCellLayout *cell)
}
static void
-autosave_toggled (GtkToggleButton *button,
- GladePreferences *prefs)
-{
- gtk_widget_set_sensitive (prefs->autosave_spin,
- gtk_toggle_button_get_active (button));
-}
-
-GladePreferences *
-glade_preferences_new (GtkBuilder *builder)
+glade_preferences_init (GladePreferences *preferences)
{
- GladePreferences *prefs = g_new0 (GladePreferences, 1);
+ preferences->priv = G_TYPE_INSTANCE_GET_PRIVATE (preferences,
+ GLADE_TYPE_PREFERENCES,
+ GladePreferencesPrivate);
- prefs->toplevel = gtk_builder_get_object (builder, "preferences_dialog");
- prefs->catalog_path_combo = GTK_COMBO_BOX_TEXT (gtk_builder_get_object (builder,
"catalog_path_comboboxtext"));
- combo_box_text_init_cell (GTK_CELL_LAYOUT (prefs->catalog_path_combo));
+ gtk_widget_init_template (GTK_WIDGET (preferences));
- prefs->create_backups_toggle = GTK_WIDGET (gtk_builder_get_object (builder, "create_backups_toggle"));
- prefs->autosave_toggle = GTK_WIDGET (gtk_builder_get_object (builder, "autosave_toggle"));
- prefs->autosave_spin = GTK_WIDGET (gtk_builder_get_object (builder, "autosave_spin"));
+ combo_box_text_init_cell (GTK_CELL_LAYOUT (preferences->priv->catalog_path_combo));
+}
- g_signal_connect (G_OBJECT (prefs->autosave_toggle), "toggled",
- G_CALLBACK (autosave_toggled), prefs);
-
- return prefs;
+static void
+glade_preferences_class_init (GladePreferencesClass *klass)
+{
+ GObjectClass *gobject_class;
+ GtkWidgetClass *widget_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ widget_class = GTK_WIDGET_CLASS (klass);
+
+ /* Setup the template GtkBuilder xml for this class
+ */
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/glade/glade-preferences.glade");
+
+ /* Define the relationship of the private entry and the entry defined in the xml
+ */
+ gtk_widget_class_bind_child (widget_class, GladePreferencesPrivate, catalog_path_combo);
+ gtk_widget_class_bind_child (widget_class, GladePreferencesPrivate, create_backups_toggle);
+ gtk_widget_class_bind_child (widget_class, GladePreferencesPrivate, autosave_toggle);
+ gtk_widget_class_bind_child (widget_class, GladePreferencesPrivate, autosave_spin);
+
+ /* Declare the callback ports that this widget class exposes, to bind with <signal>
+ * connections defined in the GtkBuilder xml
+ */
+ gtk_widget_class_bind_callback (widget_class, autosave_toggled);
+ gtk_widget_class_bind_callback (widget_class, on_preferences_filechooserdialog_response);
+ gtk_widget_class_bind_callback (widget_class, on_catalog_path_remove_button_clicked);
+
+ g_type_class_add_private (gobject_class, sizeof (GladePreferencesPrivate));
}
-void
-glade_preferences_destroy (GladePreferences *prefs)
+/********************************************************
+ * API *
+ ********************************************************/
+GtkWidget *
+glade_preferences_new (void)
{
- g_object_unref (prefs->toplevel);
- g_free (prefs);
+ return g_object_new (GLADE_TYPE_PREFERENCES, NULL);
}
void
-glade_preferences_config_save (GladePreferences *prefs, GKeyFile *config)
+glade_preferences_save (GladePreferences *prefs,
+ GKeyFile *config)
{
- GtkTreeModel *model = gtk_combo_box_get_model (GTK_COMBO_BOX (prefs->catalog_path_combo));
- gint column = gtk_combo_box_get_entry_text_column (GTK_COMBO_BOX (prefs->catalog_path_combo));
+ GtkTreeModel *model = gtk_combo_box_get_model (GTK_COMBO_BOX (prefs->priv->catalog_path_combo));
+ gint column = gtk_combo_box_get_entry_text_column (GTK_COMBO_BOX (prefs->priv->catalog_path_combo));
GString *string = g_string_new ("");
GtkTreeIter iter;
gboolean valid;
@@ -128,7 +222,8 @@ glade_preferences_config_save (GladePreferences *prefs, GKeyFile *config)
}
void
-glade_preferences_config_load (GladePreferences *prefs, GKeyFile *config)
+glade_preferences_load (GladePreferences *prefs,
+ GKeyFile *config)
{
gchar *string;
gboolean backups = TRUE;
@@ -139,7 +234,7 @@ glade_preferences_config_load (GladePreferences *prefs, GKeyFile *config)
if (string && g_strcmp0 (string, ""))
{
- GtkComboBoxText *combo = prefs->catalog_path_combo;
+ GtkComboBoxText *combo = prefs->priv->catalog_path_combo;
gchar **paths, **path;
gtk_combo_box_text_remove_all (combo);
@@ -167,10 +262,10 @@ glade_preferences_config_load (GladePreferences *prefs, GKeyFile *config)
if (g_key_file_has_key (config, CONFIG_GROUP_LOAD_SAVE, CONFIG_KEY_AUTOSAVE_SECONDS, NULL))
autosave_seconds = g_key_file_get_integer (config, CONFIG_GROUP_LOAD_SAVE, CONFIG_KEY_AUTOSAVE_SECONDS,
NULL);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (prefs->create_backups_toggle), backups);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (prefs->autosave_toggle), autosave);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (prefs->autosave_spin), autosave_seconds);
- gtk_widget_set_sensitive (prefs->autosave_spin, autosave);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (prefs->priv->create_backups_toggle), backups);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (prefs->priv->autosave_toggle), autosave);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (prefs->priv->autosave_spin), autosave_seconds);
+ gtk_widget_set_sensitive (prefs->priv->autosave_spin, autosave);
g_free (string);
}
@@ -178,79 +273,17 @@ glade_preferences_config_load (GladePreferences *prefs, GKeyFile *config)
gboolean
glade_preferences_backup (GladePreferences *prefs)
{
- return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (prefs->create_backups_toggle));
+ return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (prefs->priv->create_backups_toggle));
}
gboolean
glade_preferences_autosave (GladePreferences *prefs)
{
- return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (prefs->autosave_toggle));
+ return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (prefs->priv->autosave_toggle));
}
gint
glade_preferences_autosave_seconds (GladePreferences *prefs)
{
- return (gint)gtk_spin_button_get_value (GTK_SPIN_BUTTON (prefs->autosave_spin));
-}
-
-/* Callbacks */
-
-static gboolean
-find_row (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
-{
- gchar **directory = data;
- gchar *string;
-
- gtk_tree_model_get (model, iter, 1, &string, -1);
-
- if (g_strcmp0 (string, *directory) == 0)
- {
- g_free (*directory);
- *directory = NULL;
- return TRUE;
- }
-
- return FALSE;
-}
-
-void
-on_preferences_filechooserdialog_response (GtkDialog *dialog,
- gint response_id,
- GtkComboBoxText *combo)
-{
- gtk_widget_hide (GTK_WIDGET (dialog));
-
- if (response_id == GTK_RESPONSE_ACCEPT)
- {
- gchar *directory = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
- GtkTreeModel *model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
-
- gtk_tree_model_foreach (model, find_row, &directory);
-
- if (directory)
- {
- glade_catalog_add_path (directory);
- gtk_combo_box_text_append (combo, directory, directory);
- gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
- g_free (directory);
- }
- }
-}
-
-void
-on_catalog_path_remove_button_clicked (GtkButton *button, GtkComboBoxText *combo)
-{
- gint active = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
-
- if (active >= 0)
- {
- gchar *directory = gtk_combo_box_text_get_active_text (combo);
- glade_catalog_remove_path (directory);
- g_free (directory);
-
- gtk_combo_box_text_remove (combo, active);
-
- if (--active < 0) active = 0;
- gtk_combo_box_set_active (GTK_COMBO_BOX (combo), active);
- }
+ return (gint)gtk_spin_button_get_value (GTK_SPIN_BUTTON (prefs->priv->autosave_spin));
}
diff --git a/src/glade-preferences.glade b/src/glade-preferences.glade
new file mode 100644
index 0000000..3638f1c
--- /dev/null
+++ b/src/glade-preferences.glade
@@ -0,0 +1,313 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.8 -->
+ <template class="GladePreferences" parent="GtkDialog">
+ <property name="width_request">320</property>
+ <property name="height_request">200</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Glade Preferences</property>
+ <property name="type_hint">dialog</property>
+ <signal name="delete-event" handler="gtk_true" swapped="no"/>
+ <signal name="delete-event" handler="gtk_widget_hide" swapped="no"/>
+ <signal name="response" handler="gtk_widget_hide" swapped="no"/>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="dialog-action_area1">
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="preferences_close_button">
+ <property name="label">gtk-close</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">3</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkFrame" id="frame2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkGrid" id="grid2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">12</property>
+ <property name="margin_top">6</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">6</property>
+ <child>
+ <object class="GtkCheckButton" id="create_backups_toggle">
+ <property name="label" translatable="yes">Create Backups</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Create a backup of the last version
of the project every time the project is saved</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">2</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="autosave_spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="numeric">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="autosave_toggle">
+ <property name="label" translatable="yes">Autosave after timeout:</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Automatically save the project
after the specified timeout passes
+whenever the project is modified</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="autosave_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Load and Save</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkGrid" id="grid1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">12</property>
+ <property name="margin_top">6</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">6</property>
+ <child>
+ <object class="GtkButton" id="catalog_path_remove_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="tooltip_text" translatable="yes">Removes the selected catalog
path</property>
+ <property name="margin_top">2</property>
+ <property name="margin_bottom">2</property>
+ <signal name="clicked" handler="on_catalog_path_remove_button_clicked"
object="catalog_path_combo" swapped="no"/>
+ <child>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">list-remove-symbolic</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="catalog_path_combo">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="entry_text_column">0</property>
+ <property name="id_column">1</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="catalog_path_add_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="tooltip_text" translatable="yes">Add a new catalog path</property>
+ <property name="margin_top">2</property>
+ <property name="margin_bottom">2</property>
+ <signal name="clicked" handler="gtk_widget_show"
object="preferences_filechooserdialog" swapped="yes"/>
+ <child>
+ <object class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">list-add-symbolic</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Extra catalog paths</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-7">preferences_close_button</action-widget>
+ </action-widgets>
+ </template>
+ <object class="GtkFileChooserDialog" id="preferences_filechooserdialog">
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Select a catalog search path</property>
+ <property name="modal">True</property>
+ <property name="type_hint">dialog</property>
+ <property name="transient_for">GladePreferences</property>
+ <property name="action">select-folder</property>
+ <signal name="delete-event" handler="gtk_true" swapped="no"/>
+ <signal name="delete-event" handler="gtk_widget_hide" swapped="no"/>
+ <signal name="response" handler="on_preferences_filechooserdialog_response" object="catalog_path_combo"
swapped="no"/>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="filechooserdialog-vbox1">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="filechooserdialog-action_area1">
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="button3">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button4">
+ <property name="label">gtk-open</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-6">button3</action-widget>
+ <action-widget response="-3">button4</action-widget>
+ </action-widgets>
+ </object>
+</interface>
diff --git a/src/glade-preferences.h b/src/glade-preferences.h
index cb47b5b..3d88d45 100644
--- a/src/glade-preferences.h
+++ b/src/glade-preferences.h
@@ -17,6 +17,7 @@
*
* Authors:
* Juan Pablo Ugarte <juanpablougarte gmail com>
+ * Tristan Van Berkom <tristan van berkom gmail com>
*/
#ifndef __GLADE_PREFERENCES_H__
@@ -24,27 +25,44 @@
#include <gtk/gtk.h>
-typedef struct _GladePreferences GladePreferences;
+G_BEGIN_DECLS
-GladePreferences *glade_preferences_new (GtkBuilder *builder);
-void glade_preferences_destroy (GladePreferences *prefs);
+#define GLADE_TYPE_PREFERENCES (glade_preferences_get_type ())
+#define GLADE_PREFERENCES(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLADE_TYPE_PREFERENCES,
GladePreferences))
+#define GLADE_PREFERENCES_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GLADE_TYPE_PREFERENCES,
GladePreferencesClass))
+#define GLADE_IS_PREFERENCES(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLADE_TYPE_PREFERENCES))
+#define GLADE_IS_PREFERENCES_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_PREFERENCES))
+#define GLADE_PREFERENCES_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GLADE_TYPE_PREFERENCES,
GladePreferencesClass))
-void glade_preferences_config_save (GladePreferences *prefs,
- GKeyFile *config);
-void glade_preferences_config_load (GladePreferences *prefs,
- GKeyFile *config);
+typedef struct _GladePreferences GladePreferences;
+typedef struct _GladePreferencesClass GladePreferencesClass;
+typedef struct _GladePreferencesPrivate GladePreferencesPrivate;
-gboolean glade_preferences_backup (GladePreferences *prefs);
-gboolean glade_preferences_autosave (GladePreferences *prefs);
-gint glade_preferences_autosave_seconds (GladePreferences *prefs);
+struct _GladePreferences
+{
+ /*< private >*/
+ GtkDialog dialog;
-/* Callbacks */
+ GladePreferencesPrivate *priv;
+};
-void on_preferences_filechooserdialog_response (GtkDialog *dialog,
- gint response_id,
- GtkComboBoxText *combo);
-void on_catalog_path_remove_button_clicked (GtkButton *button,
- GtkComboBoxText *combo);
+struct _GladePreferencesClass
+{
+ GtkDialogClass parent_class;
+};
+GType glade_preferences_get_type (void) G_GNUC_CONST;
+GtkWidget *glade_preferences_new (void);
+
+void glade_preferences_save (GladePreferences *prefs,
+ GKeyFile *config);
+void glade_preferences_load (GladePreferences *prefs,
+ GKeyFile *config);
+
+gboolean glade_preferences_backup (GladePreferences *prefs);
+gboolean glade_preferences_autosave (GladePreferences *prefs);
+gint glade_preferences_autosave_seconds (GladePreferences *prefs);
+
+G_END_DECLS
#endif /* __GLADE_PREFERENCES_H__ */
diff --git a/src/glade-resources.gresource.xml b/src/glade-resources.gresource.xml
index de8f5cc..24462f3 100644
--- a/src/glade-resources.gresource.xml
+++ b/src/glade-resources.gresource.xml
@@ -2,5 +2,6 @@
<gresources>
<gresource prefix="/org/gnome/glade">
<file compressed="true" preprocess="xml-stripblanks">glade.glade</file>
+ <file compressed="true" preprocess="xml-stripblanks">glade-preferences.glade</file>
</gresource>
</gresources>
diff --git a/src/glade-window.c b/src/glade-window.c
index fb6c4de..7a84b49 100644
--- a/src/glade-window.c
+++ b/src/glade-window.c
@@ -2131,6 +2131,13 @@ on_reference_action_activate (GtkAction *action, GladeWindow *window)
}
void
+on_preferences_action_activate (GtkAction *action,
+ GladeWindow *window)
+{
+ gtk_widget_show (GTK_WIDGET (window->priv->preferences));
+}
+
+void
on_about_action_activate (GtkAction *action, GladeWindow *window)
{
GladeWindowPrivate *priv = GLADE_WINDOW_GET_PRIVATE (window);
@@ -2813,7 +2820,7 @@ glade_window_config_save (GladeWindow * window)
save_paned_position (config, window->priv->left_pane, "left_pane");
save_paned_position (config, window->priv->right_pane, "right_pane");
- glade_preferences_config_save (window->priv->preferences, config);
+ glade_preferences_save (window->priv->preferences, config);
glade_app_config_save ();
}
@@ -3012,7 +3019,7 @@ glade_window_config_load (GladeWindow *window)
load_paned_position (config, window->priv->center_pane, "center_pane", 400);
load_paned_position (config, window->priv->right_pane, "right_pane", 220);
- glade_preferences_config_load (window->priv->preferences, config);
+ glade_preferences_load (window->priv->preferences, config);
}
static void
@@ -3161,7 +3168,7 @@ glade_window_constructed (GObject *object)
}
/* Init preferences */
- priv->preferences = glade_preferences_new (builder);
+ priv->preferences = (GladePreferences *)glade_preferences_new ();
/* Fetch pointers */
vbox = GET_OBJECT (builder, GTK_WIDGET, "main_box");
diff --git a/src/glade.glade b/src/glade.glade
index d378484..07b611f 100644
--- a/src/glade.glade
+++ b/src/glade.glade
@@ -240,7 +240,7 @@
<property name="label" translatable="yes">Preferences</property>
<property name="tooltip" translatable="yes">Edit Glade preferences</property>
<property name="stock_id">gtk-preferences</property>
- <signal name="activate" handler="gtk_widget_show" object="preferences_dialog" swapped="yes"/>
+ <signal name="activate" handler="on_preferences_action_activate" swapped="no"/>
</object>
</child>
</object>
@@ -1130,313 +1130,4 @@ Andreas Nilsson <andreas andreasn se></property>
</packing>
</child>
</object>
- <object class="GtkDialog" id="preferences_dialog">
- <property name="width_request">320</property>
- <property name="height_request">200</property>
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Glade Preferences</property>
- <property name="type_hint">dialog</property>
- <signal name="delete-event" handler="gtk_true" swapped="no"/>
- <signal name="delete-event" handler="gtk_widget_hide" swapped="no"/>
- <signal name="response" handler="gtk_widget_hide" swapped="no"/>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox1">
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area1">
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="preferences_close_button">
- <property name="label">gtk-close</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="box1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">3</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkFrame" id="frame2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0</property>
- <property name="shadow_type">none</property>
- <child>
- <object class="GtkGrid" id="grid2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_left">12</property>
- <property name="margin_top">6</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="create_backups_toggle">
- <property name="label" translatable="yes">Create Backups</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="tooltip_text" translatable="yes">Create a backup of the last version
of the project every time the project is saved</property>
- <property name="xalign">0</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">2</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkSpinButton" id="autosave_spin">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="invisible_char">•</property>
- <property name="adjustment">autosave_seconds_adjustment</property>
- <property name="numeric">True</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="autosave_toggle">
- <property name="label" translatable="yes">Autosave after timeout:</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="tooltip_text" translatable="yes">Automatically save the project
after the specified timeout passes
-whenever the project is modified</property>
- <property name="xalign">0</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Load and Save</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkFrame" id="frame1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0</property>
- <property name="shadow_type">none</property>
- <child>
- <object class="GtkGrid" id="grid1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_left">12</property>
- <property name="margin_top">6</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
- <child>
- <object class="GtkButton" id="catalog_path_remove_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="tooltip_text" translatable="yes">Removes the selected catalog
path</property>
- <property name="margin_top">2</property>
- <property name="margin_bottom">2</property>
- <signal name="clicked" handler="on_catalog_path_remove_button_clicked"
object="catalog_path_comboboxtext" swapped="no"/>
- <child>
- <object class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="icon_name">list-remove-symbolic</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBoxText" id="catalog_path_comboboxtext">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="entry_text_column">0</property>
- <property name="id_column">1</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="catalog_path_add_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="tooltip_text" translatable="yes">Add a new catalog path</property>
- <property name="margin_top">2</property>
- <property name="margin_bottom">2</property>
- <signal name="clicked" handler="gtk_widget_show"
object="preferences_filechooserdialog" swapped="yes"/>
- <child>
- <object class="GtkImage" id="image2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="icon_name">list-add-symbolic</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Extra catalog paths</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-7">preferences_close_button</action-widget>
- </action-widgets>
- </object>
- <object class="GtkFileChooserDialog" id="preferences_filechooserdialog">
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Select a catalog search path</property>
- <property name="modal">True</property>
- <property name="type_hint">dialog</property>
- <property name="transient_for">preferences_dialog</property>
- <property name="action">select-folder</property>
- <signal name="delete-event" handler="gtk_true" swapped="no"/>
- <signal name="delete-event" handler="gtk_widget_hide" swapped="no"/>
- <signal name="response" handler="on_preferences_filechooserdialog_response"
object="catalog_path_comboboxtext" swapped="no"/>
- <child internal-child="vbox">
- <object class="GtkBox" id="filechooserdialog-vbox1">
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="filechooserdialog-action_area1">
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="button3">
- <property name="label">gtk-cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="button4">
- <property name="label">gtk-open</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-6">button3</action-widget>
- <action-widget response="-3">button4</action-widget>
- </action-widgets>
- </object>
</interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]