[anjuta] snippets-manager: added export dialog
- From: Johannes Schmid <jhs src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta] snippets-manager: added export dialog
- Date: Wed, 26 Oct 2011 08:35:24 +0000 (UTC)
commit cd05a50a1f5c1736756945beaf5c048fa32f3125
Author: Mihai Bivol <mm bivol gmail com>
Date: Sat Mar 19 02:27:45 2011 -0700
snippets-manager: added export dialog
plugins/snippets-manager/Makefile.am | 3 +-
plugins/snippets-manager/snippet.c | 2 +-
plugins/snippets-manager/snippets-export-dialog.ui | 133 ++++++++
plugins/snippets-manager/snippets-import-export.c | 330 +++++++++++++-------
4 files changed, 345 insertions(+), 123 deletions(-)
---
diff --git a/plugins/snippets-manager/Makefile.am b/plugins/snippets-manager/Makefile.am
index 810b389..a85b579 100644
--- a/plugins/snippets-manager/Makefile.am
+++ b/plugins/snippets-manager/Makefile.am
@@ -3,7 +3,8 @@
snippets_manager_gladedir = $(anjuta_glade_dir)
snippets_manager_glade_DATA = snippets-manager-preferences.ui \
snippets-browser.ui \
- snippets-editor.ui
+ snippets-editor.ui \
+ snippets-export-dialog.ui
# Plugin default data
diff --git a/plugins/snippets-manager/snippet.c b/plugins/snippets-manager/snippet.c
index 20b3cfc..5a7caa1 100644
--- a/plugins/snippets-manager/snippet.c
+++ b/plugins/snippets-manager/snippet.c
@@ -86,7 +86,7 @@ snippet_dispose (GObject* snippet)
GList* iter = NULL;
gpointer p;
AnjutaSnippetVariable* cur_snippet_var;
-
+
/* Delete the trigger_key, snippet_language, snippet_name and snippet_content fields */
g_free (anjuta_snippet->priv->trigger_key);
anjuta_snippet->priv->trigger_key = NULL;
diff --git a/plugins/snippets-manager/snippets-export-dialog.ui b/plugins/snippets-manager/snippets-export-dialog.ui
new file mode 100644
index 0000000..e1bafeb
--- /dev/null
+++ b/plugins/snippets-manager/snippets-export-dialog.ui
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy toplevel-contextual -->
+ <object class="GtkDialog" id="export_dialog">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Export snippets</property>
+ <property name="resizable">False</property>
+ <property name="window_position">center</property>
+ <property name="type_hint">dialog</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox">
+ <property name="visible">True</property>
+ <property name="resize_mode">queue</property>
+ <child>
+ <object class="GtkFixed" id="fixed1">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="width_request">60</property>
+ <property name="height_request">40</property>
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Name:</property>
+ </object>
+ <packing>
+ <property name="x">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label2">
+ <property name="width_request">100</property>
+ <property name="height_request">40</property>
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Save in folder:</property>
+ </object>
+ <packing>
+ <property name="x">5</property>
+ <property name="y">40</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFileChooserButton" id="folder_selector">
+ <property name="width_request">430</property>
+ <property name="height_request">30</property>
+ <property name="visible">True</property>
+ <property name="action">select-folder</property>
+ </object>
+ <packing>
+ <property name="x">105</property>
+ <property name="y">43</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="name_entry">
+ <property name="width_request">430</property>
+ <property name="height_request">25</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">â</property>
+ </object>
+ <packing>
+ <property name="x">105</property>
+ <property name="y">7</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkExpander" id="expander">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <object class="GtkScrolledWindow" id="tree_view_window">
+ <property name="width_request">600</property>
+ <property name="height_request">500</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="border_width">5</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="expander_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Select snippets</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="save_button">
+ <property name="label">gtk-save</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">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-3">save_button</action-widget>
+ </action-widgets>
+ </object>
+</interface>
diff --git a/plugins/snippets-manager/snippets-import-export.c b/plugins/snippets-manager/snippets-import-export.c
index 1ea67a9..dfb3a6c 100644
--- a/plugins/snippets-manager/snippets-import-export.c
+++ b/plugins/snippets-manager/snippets-import-export.c
@@ -27,6 +27,8 @@
#include <gtk/gtk.h>
#include <libanjuta/anjuta-utils.h>
+#define EXPORT_UI PACKAGE_DATA_DIR"/glade/snippets-export-dialog.ui"
+
enum
{
SNIPPETS_STORE_COL_SNIPPET_OBJECT = 0,
@@ -277,11 +279,99 @@ snippets_view_name_data_func (GtkTreeViewColumn *column,
}
}
+static gboolean
+snippets_store_unref_foreach_func (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ GObject *obj = NULL;
+ gtk_tree_model_get (model, iter,
+ SNIPPETS_STORE_COL_SNIPPET_OBJECT, &obj,
+ -1);
+ g_object_unref (obj);
+ return FALSE;
+}
+
+static gboolean
+save_snippets_to_path (GtkTreeStore *snippets_tree_store,
+ gchar *path,
+ gboolean overwrite)
+{
+ AnjutaSnippet *snippet = NULL;
+ AnjutaSnippetsGroup *snippets_group = NULL;
+ GObject *object = NULL;
+ GtkTreeIter iter, child_iter;
+ GList *snippets_group_list = NULL, *element = NULL;
+ gboolean active;
+
+ /* Assertions */
+ g_return_val_if_fail (GTK_IS_TREE_STORE (snippets_tree_store), TRUE);
+
+ if (g_file_test (path, G_FILE_TEST_EXISTS) &&
+ !overwrite)
+ return FALSE;
+
+ /* Save snippets */
+ /* Get the first iter from snippets_tree_store */
+ if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (snippets_tree_store),
+ &iter) == FALSE)
+ return TRUE;
+ /* Select the snippets for exporting */
+ do
+ {
+ /* Get current group */
+ gtk_tree_model_get (GTK_TREE_MODEL (snippets_tree_store), &iter,
+ SNIPPETS_STORE_COL_ACTIVE, &active,
+ SNIPPETS_STORE_COL_SNIPPET_OBJECT, &object,
+ -1);
+ g_object_ref (object);
+
+ if (ANJUTA_IS_SNIPPETS_GROUP (object) && active)
+ {
+ snippets_group = snippets_group_new (snippets_group_get_name (ANJUTA_SNIPPETS_GROUP (object)));
+ g_object_unref (object);
+
+ if (gtk_tree_model_iter_children (GTK_TREE_MODEL (snippets_tree_store),
+ &child_iter, &iter))
+ {
+ /* Iterate through snippets from current group */
+ do
+ {
+ gtk_tree_model_get (GTK_TREE_MODEL (snippets_tree_store), &child_iter,
+ SNIPPETS_STORE_COL_ACTIVE, &active,
+ SNIPPETS_STORE_COL_SNIPPET_OBJECT, &snippet,
+ -1);
+ if (active)
+ {
+ snippets_group_add_snippet (snippets_group, snippet);
+ }
+ }
+ while (gtk_tree_model_iter_next (GTK_TREE_MODEL (snippets_tree_store),
+ &child_iter));
+ }
+
+ snippets_group_list = g_list_append (snippets_group_list, snippets_group);
+ }
+
+ }
+ while (gtk_tree_model_iter_next (GTK_TREE_MODEL (snippets_tree_store), &iter));
+
+ snippets_manager_save_snippets_xml_file (NATIVE_FORMAT,
+ snippets_group_list,
+ path);
+ /* Destroy created snippets groups */
+ for (element = g_list_first (snippets_group_list); element; element = g_list_next (element))
+ g_object_unref (element->data);
+ g_list_free (snippets_group_list);
+ return TRUE;
+}
+
static void
handle_toggle (GtkCellRendererToggle *cell_renderer,
gchar *path,
- gpointer snippet_tree_store)
+ gpointer snippets_tree_store)
{
gboolean active;
GtkTreeIter iter, child_iter, parent_iter;
@@ -289,12 +379,12 @@ handle_toggle (GtkCellRendererToggle *cell_renderer,
/* Assertions */
g_return_if_fail (GTK_IS_CELL_RENDERER_TOGGLE (cell_renderer));
- g_return_if_fail (GTK_IS_TREE_STORE (snippet_tree_store));
+ g_return_if_fail (GTK_IS_TREE_STORE (snippets_tree_store));
/* Get the toggled object*/
- gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (snippet_tree_store),
+ gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (snippets_tree_store),
&iter, path);
- gtk_tree_model_get (GTK_TREE_MODEL (snippet_tree_store), &iter,
+ gtk_tree_model_get (GTK_TREE_MODEL (snippets_tree_store), &iter,
SNIPPETS_STORE_COL_ACTIVE, &active,
SNIPPETS_STORE_COL_SNIPPET_OBJECT, &snippet,
-1);
@@ -306,36 +396,35 @@ handle_toggle (GtkCellRendererToggle *cell_renderer,
/* If group toggled, toggle all the snippets */
if (ANJUTA_IS_SNIPPETS_GROUP (snippet))
{
- if (gtk_tree_model_iter_children (GTK_TREE_MODEL (snippet_tree_store),
+ if (gtk_tree_model_iter_children (GTK_TREE_MODEL (snippets_tree_store),
&child_iter, &iter))
{
do
{
- gtk_tree_store_set (snippet_tree_store, &child_iter,
+ gtk_tree_store_set (snippets_tree_store, &child_iter,
SNIPPETS_STORE_COL_ACTIVE, active,
- -1);
+ -1);
}
- while (gtk_tree_model_iter_next (GTK_TREE_MODEL (snippet_tree_store),
+ while (gtk_tree_model_iter_next (GTK_TREE_MODEL (snippets_tree_store),
&child_iter));
}
}
+
/* If snippet toggled, select the snippets group */
if (ANJUTA_IS_SNIPPET (snippet))
{
- if (gtk_tree_model_iter_parent (GTK_TREE_MODEL (snippet_tree_store),
+ if (gtk_tree_model_iter_parent (GTK_TREE_MODEL (snippets_tree_store),
&parent_iter, &iter) && active == TRUE)
{
- gtk_tree_store_set (snippet_tree_store, &parent_iter,
+ gtk_tree_store_set (snippets_tree_store, &parent_iter,
SNIPPETS_STORE_COL_ACTIVE, TRUE,
-1);
}
}
- gtk_tree_store_set (snippet_tree_store, &iter,
+ gtk_tree_store_set (snippets_tree_store, &iter,
SNIPPETS_STORE_COL_ACTIVE, active,
-1);
-
- g_print("%s\n", path);
}
static gboolean
@@ -348,6 +437,7 @@ model_foreach_set_store_func (GtkTreeModel *model,
GtkTreeIter store_iter;
GtkTreeStore *tree_store = NULL;
static GtkTreeIter group_iter;
+
/* Assertions */
g_return_val_if_fail (GTK_IS_TREE_STORE (store), TRUE);
@@ -357,6 +447,7 @@ model_foreach_set_store_func (GtkTreeModel *model,
SNIPPETS_DB_MODEL_COL_CUR_OBJECT, &obj,
-1);
+ g_object_ref (obj);
if (ANJUTA_IS_SNIPPETS_GROUP (obj))
{
gtk_tree_store_append (tree_store, &store_iter, NULL);
@@ -392,43 +483,30 @@ create_snippets_store (SnippetsDB *snippets_db)
return store;
}
-void snippets_manager_export_snippets (SnippetsDB *snippets_db,
- AnjutaShell *anjuta_shell)
+static GtkWidget*
+create_snippets_tree_view (SnippetsDB *snippets_db,
+ GtkTreeStore *snippets_tree_store)
{
- GtkWidget *file_chooser = NULL;
- GtkFileFilter *filter = NULL;
- GtkWidget *snippets_chooser = NULL;
- GtkWidget *snippets_tree_view = NULL;
- GtkWidget *scrolled_box = NULL;
- GtkCellRenderer *text_renderer = NULL, *toggle_renderer = NULL;
- GtkTreeViewColumn *column = NULL;
- GtkTreeStore *snippet_tree_store = NULL;
- GtkTreeIter iter, child_iter;
- GList *snippets_group_list = NULL;
- gboolean active;
- AnjutaSnippet *snippet = NULL;
- AnjutaSnippetsGroup *snippets_group = NULL;
- GObject *object = NULL;
+ GtkWidget *snippets_tree_view = NULL;
+ GtkTreeViewColumn *column = NULL;
+ GtkCellRenderer *text_renderer = NULL, *toggle_renderer = NULL;
/* Assertions */
- g_return_if_fail (ANJUTA_IS_SNIPPETS_DB (snippets_db));
-
+ g_return_val_if_fail (ANJUTA_IS_SNIPPETS_DB (snippets_db), NULL);
/* Create view and set model */
snippets_tree_view = gtk_tree_view_new();
- snippet_tree_store = create_snippets_store (snippets_db);
gtk_tree_view_set_model (GTK_TREE_VIEW (snippets_tree_view),
- GTK_TREE_MODEL (snippet_tree_store));
-
+ GTK_TREE_MODEL (snippets_tree_store));
+
/* Column 1 -- Name */
column = gtk_tree_view_column_new ();
gtk_tree_view_column_set_title (column, "Name");
gtk_tree_view_append_column (GTK_TREE_VIEW (snippets_tree_view),
column);
-
toggle_renderer = gtk_cell_renderer_toggle_new();
- g_signal_connect (toggle_renderer, "toggled", G_CALLBACK (handle_toggle), snippet_tree_store);
+ g_signal_connect (toggle_renderer, "toggled", G_CALLBACK (handle_toggle), snippets_tree_store);
gtk_tree_view_column_pack_start (column,
toggle_renderer,
@@ -446,10 +524,8 @@ void snippets_manager_export_snippets (SnippetsDB *snippets_db,
gtk_tree_view_column_set_cell_data_func (column, text_renderer,
snippets_view_name_data_func,
snippets_tree_view, NULL);
-
-
- /* Column 2 -- Trigger */
+ /* Column 2 -- Trigger */
column = gtk_tree_view_column_new ();
gtk_tree_view_column_set_title (column, "Trigger");
gtk_tree_view_append_column (GTK_TREE_VIEW (snippets_tree_view),
@@ -476,102 +552,114 @@ void snippets_manager_export_snippets (SnippetsDB *snippets_db,
gtk_tree_view_column_set_cell_data_func (column, text_renderer,
snippets_view_languages_data_func,
snippets_tree_view, NULL);
+ return snippets_tree_view;
+}
- /* Dialog for snippets chooser */
- snippets_chooser = gtk_dialog_new_with_buttons ("Select Snippets",
- GTK_WINDOW (anjuta_shell),
- GTK_DIALOG_MODAL,
- NULL);
- /* Add the tree-view to dialog */
-
- scrolled_box = gtk_scrolled_window_new (NULL, NULL);
- gtk_container_set_border_width (GTK_CONTAINER(scrolled_box), 0);
- gtk_widget_set_size_request (scrolled_box, 300, 600);
- /* TODO make it resize with the main dialog */
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(scrolled_box), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
-
- gtk_container_add (GTK_CONTAINER (scrolled_box),
- snippets_tree_view);
-
- gtk_container_add (GTK_CONTAINER ( gtk_dialog_get_content_area (GTK_DIALOG ( snippets_chooser))),
- scrolled_box);
- gtk_widget_show (snippets_tree_view);
- gtk_widget_show (scrolled_box);
+void snippets_manager_export_snippets (SnippetsDB *snippets_db,
+ AnjutaShell *anjuta_shell)
+{
+ GtkWidget *tree_view_window = NULL;
+ GtkDialog *snippets_export_dialog = NULL;
+ GtkDialog *file_conflict_dialog = NULL;
+ GtkWidget *snippets_tree_view = NULL;
+ GtkTreeStore *snippets_tree_store = NULL;
+ GtkBuilder *dialog_builder = NULL;
+ GError *error = NULL;
+ gint export_dialog_result;
+ GtkFileChooserButton *folder_selector_button = NULL;
+ GtkEntry *name_entry = NULL;
- gtk_dialog_add_button (GTK_DIALOG (snippets_chooser), "OK", GTK_RESPONSE_DELETE_EVENT);
+ /* Assertions */
+ g_return_if_fail (ANJUTA_IS_SNIPPETS_DB (snippets_db));
- /* Wait for the dialog to be closed */
- if (gtk_dialog_run (GTK_DIALOG (snippets_chooser)) == GTK_RESPONSE_DELETE_EVENT)
+ /* Set set snippets store and model */
+ snippets_tree_store = create_snippets_store (snippets_db);
+ snippets_tree_view = create_snippets_tree_view (snippets_db, snippets_tree_store);
+
+ dialog_builder = gtk_builder_new ();
+ if (!gtk_builder_add_from_file (dialog_builder, EXPORT_UI, &error))
{
- gtk_widget_destroy (snippets_chooser);
+ g_warning ("Couldn't load export ui file: %s", error->message);
+ g_error_free (error);
}
- file_chooser = gtk_file_chooser_dialog_new (_("Export Snippets"),
- GTK_WINDOW (anjuta_shell),
- GTK_FILE_CHOOSER_ACTION_SAVE,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
- NULL);
- /* Set up the filter */
- filter = gtk_file_filter_new ();
- gtk_file_filter_set_name (filter, "Native format");
- gtk_file_filter_add_pattern (filter, "*.anjuta-snippets");
- gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (file_chooser), filter);
+ snippets_export_dialog = GTK_DIALOG (gtk_builder_get_object (dialog_builder, "export_dialog"));
+ tree_view_window = GTK_WIDGET (gtk_builder_get_object (dialog_builder, "tree_view_window"));
+
+ gtk_container_add (GTK_CONTAINER (tree_view_window), snippets_tree_view);
+ gtk_widget_show (snippets_tree_view);
+
+ const gchar *name = NULL;
+ gchar *uri = NULL, *path = NULL;
+ folder_selector_button = GTK_FILE_CHOOSER_BUTTON (gtk_builder_get_object (dialog_builder, "folder_selector"));
+ name_entry = GTK_ENTRY (gtk_builder_get_object (dialog_builder, "name_entry"));
- if (gtk_dialog_run (GTK_DIALOG (file_chooser)) == GTK_RESPONSE_ACCEPT)
+ while (TRUE)
{
- gchar *uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (file_chooser)),
- *path = anjuta_util_get_local_path_from_uri (uri);
-
- /* Get the first iter from snippet_tree_store */
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (snippet_tree_store),
- &iter);
-
- /* Select the snippets for exporting */
- do
+ /* Run the dialog until cancel or export */
+ export_dialog_result = gtk_dialog_run (GTK_DIALOG (snippets_export_dialog));
+ if (export_dialog_result == GTK_RESPONSE_ACCEPT)
{
- gtk_tree_model_get (GTK_TREE_MODEL (snippet_tree_store), &iter,
- SNIPPETS_STORE_COL_ACTIVE, &active,
- SNIPPETS_STORE_COL_SNIPPET_OBJECT, &object,
- -1);
+ g_free (uri);
+ g_free (path);
+ /* Save button was pressed, export snippets */
+ name = gtk_entry_get_text (name_entry);
+ uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (folder_selector_button));
+
+ if (!g_strcmp0 (name, ""))
+ /* Void name, re-run the export dialog */
+ continue;
+
+ if (g_strrstr (name, "."))
+ uri = g_strconcat (uri, "/", name, NULL);
+ else
+ uri = g_strconcat (uri, "/", name, ".anjuta-snippets", NULL);
- if (ANJUTA_IS_SNIPPETS_GROUP (object) && active)
+ path = anjuta_util_get_local_path_from_uri (uri);
+
+ if (!save_snippets_to_path (snippets_tree_store, path, FALSE))
{
- snippets_group = snippets_group_new (snippets_group_get_name (ANJUTA_SNIPPETS_GROUP (object)));
-
- if (gtk_tree_model_iter_children (GTK_TREE_MODEL (snippet_tree_store),
- &child_iter, &iter))
+ /* Filename is conflicting */
+ file_conflict_dialog = GTK_DIALOG (gtk_message_dialog_new (GTK_WINDOW (snippets_export_dialog),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_YES_NO,
+ "Path %s exists. Overwrite?", path));
+
+ if (gtk_dialog_run (file_conflict_dialog) == GTK_RESPONSE_YES)
{
- /* Iterate through snippets from current group */
- do
- {
- gtk_tree_model_get (GTK_TREE_MODEL (snippet_tree_store), &child_iter,
- SNIPPETS_STORE_COL_ACTIVE, &active,
- SNIPPETS_STORE_COL_SNIPPET_OBJECT, &snippet,
- -1);
- if (active)
- {
- snippets_group_add_snippet (snippets_group, snippet);
- }
- }
- while (gtk_tree_model_iter_next (GTK_TREE_MODEL (snippet_tree_store),
- &child_iter));
+ /* Overwrite file */
+ save_snippets_to_path (snippets_tree_store, path, TRUE);
+ gtk_widget_destroy (GTK_WIDGET (file_conflict_dialog));
+ break;
}
-
- snippets_group_list = g_list_append (snippets_group_list, snippets_group);
+ else
+ {
+ /* Re-run the export dialog */
+ gtk_widget_destroy (GTK_WIDGET (file_conflict_dialog));
+ continue;
+ }
+
}
-
- }
- while (gtk_tree_model_iter_next (GTK_TREE_MODEL (snippet_tree_store), &iter));
-
- /* Save the snippets */
- snippets_manager_save_snippets_xml_file (NATIVE_FORMAT,
- snippets_group_list,
- path);
- g_free (path);
- g_free (uri);
+ else
+ {
+ /* Snippets were saved */
+ break;
+ }
+ }
+ else
+ {
+ /* Save cancelled */
+ break;
+ }
}
- g_object_unref (snippet_tree_store);
- gtk_widget_destroy (file_chooser);
+ gtk_widget_destroy (GTK_WIDGET (snippets_export_dialog));
+ g_free (path);
+ g_free (uri);
+ gtk_tree_model_foreach (GTK_TREE_MODEL (snippets_tree_store),
+ snippets_store_unref_foreach_func,
+ NULL);
+ g_object_unref (dialog_builder);
+ g_object_unref (snippets_tree_store);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]