[Xfce4-commits] <xfce4-panel:devel> Allow adding multiple items add once from the add dialog.

Nick Schermer nick at xfce.org
Tue Aug 11 20:26:45 CEST 2009


Updating branch refs/heads/devel
         to 328ed8ed8733dd0180492c3926719e993bdbd512 (commit)
       from ddd472fcb8d9f0fb965c6c97cfba3c7cc271599d (commit)

commit 328ed8ed8733dd0180492c3926719e993bdbd512
Author: Nick Schermer <nick at xfce.org>
Date:   Wed Feb 11 21:26:47 2009 +0100

    Allow adding multiple items add once from the add dialog.

 plugins/launcher/launcher-dialog.c |   75 ++++++++++++++++++++++-------------
 1 files changed, 47 insertions(+), 28 deletions(-)

diff --git a/plugins/launcher/launcher-dialog.c b/plugins/launcher/launcher-dialog.c
index 05fca3c..53bb932 100644
--- a/plugins/launcher/launcher-dialog.c
+++ b/plugins/launcher/launcher-dialog.c
@@ -473,51 +473,64 @@ launcher_dialog_add_response (GtkWidget            *widget,
                               gint                  response_id,
                               LauncherPluginDialog *dialog)
 {
-  GObject           *treeview, *store;
-  GtkTreeSelection  *selection;
-  GtkTreeModel      *model;
-  GtkTreeIter        iter, sibling;
-  gchar             *filename;
+  GObject          *treeview, *store;
+  GtkTreeSelection *selection;
+  GtkTreeModel     *entry_model, *add_model;
+  GtkTreeIter       iter, sibling, tmp;
+  gchar            *filename;
+  GList            *list, *li;
 
   panel_return_if_fail (GTK_IS_DIALOG (widget));
   panel_return_if_fail (XFCE_IS_LAUNCHER_PLUGIN (dialog->plugin));
 
   if (response_id != 0)
     {
-      /* set the selected item in the treeview */
+      /* add all the selected rows in the add dialog */
       treeview = gtk_builder_get_object (dialog->builder, "add-treeview");
       selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
-      if (gtk_tree_selection_get_selected (selection, &model, &iter))
+      list = gtk_tree_selection_get_selected_rows (selection, &add_model);
+
+      /* append after the selected item in the entry dialog */
+      treeview = gtk_builder_get_object (dialog->builder, "entry-treeview");
+      selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
+      entry_model = gtk_tree_view_get_model (GTK_TREE_VIEW (treeview));
+      if (gtk_tree_selection_get_selected (selection, NULL, &sibling))
+        gtk_list_store_insert_after (GTK_LIST_STORE (entry_model),
+                                     &iter, &sibling);
+      else
+        gtk_list_store_append (GTK_LIST_STORE (entry_model), &iter);
+
+      for (li = list; li != NULL; li = li->next)
         {
           /* get the selected file in the add dialog */
-          gtk_tree_model_get (model, &iter, COL_FILENAME, &filename, -1);
-
-          /* get the selected item in the entry treeview */
-          treeview = gtk_builder_get_object (dialog->builder, "entry-treeview");
-          selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
-          if (gtk_tree_selection_get_selected (selection, &model, &sibling))
-            {
-              gtk_list_store_insert_after (GTK_LIST_STORE (model), &iter, &sibling);
-            }
-          else
-            {
-              model = gtk_tree_view_get_model (GTK_TREE_VIEW (treeview));
-              gtk_list_store_append (GTK_LIST_STORE (model), &iter);
-            }
+          gtk_tree_model_get_iter (add_model, &tmp, li->data);
+          gtk_tree_model_get (add_model, &tmp, COL_FILENAME, &filename, -1);
 
-          /* insert the item */
-          launcher_dialog_entries_insert_item (GTK_LIST_STORE (model),
+          /* insert the item in the item store */
+          launcher_dialog_entries_insert_item (GTK_LIST_STORE (entry_model),
                                                &iter, filename);
 
           /* cleanup */
           g_free (filename);
+          gtk_tree_path_free (li->data);
 
-          /* write the model to xfconf */
-          launcher_dialog_tree_save (dialog);
-
-          /* update the selection */
-          launcher_dialog_tree_selection_changed (selection, dialog);
+          /* append a new iter if needed */
+          if (li->next != NULL)
+            {
+              sibling = iter;
+              gtk_list_store_insert_after (GTK_LIST_STORE (entry_model),
+                                           &iter, &sibling);
+            }
         }
+
+      /* cleanup */
+      g_list_free (list);
+
+      /* write the model to xfconf */
+      launcher_dialog_tree_save (dialog);
+
+      /* update the selection */
+      launcher_dialog_tree_selection_changed (selection, dialog);
     }
 
   /* empty the store */
@@ -716,10 +729,16 @@ launcher_dialog_show (LauncherPlugin *plugin)
       g_signal_connect (G_OBJECT (object), "delete-event",
                         G_CALLBACK (exo_noop_true), NULL);
 
+      /* enable sorting in the add dialog */
       object = gtk_builder_get_object (builder, "add-store");
       gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (object),
                                             COL_NAME, GTK_SORT_ASCENDING);
 
+      /* allow selecting multiple items in the add dialog */
+      object = gtk_builder_get_object (builder, "add-treeview");
+      selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (object));
+      gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
+
       /* setup search filter in the add dialog */
       object = gtk_builder_get_object (builder, "add-store-filter");
       entry = gtk_builder_get_object (builder, "add-search");



More information about the Xfce4-commits mailing list