[gnumeric] Add support in recent files dialog for multiple selesction and double click. [#759160]



commit 09b55e9312122ab448a985644bfc44e863a27d17
Author: Jean Brefort <jean brefort normalesup org>
Date:   Tue Dec 8 22:31:40 2015 +0100

    Add support in recent files dialog for multiple selesction and double click. [#759160]

 NEWS                        |    4 +++
 src/dialogs/ChangeLog       |    6 ++++
 src/dialogs/dialog-recent.c |   58 +++++++++++++++++++++++++++++--------------
 3 files changed, 49 insertions(+), 19 deletions(-)
---
diff --git a/NEWS b/NEWS
index fef5a92..dc7326d 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,9 @@
 Gnumeric 1.12.25
 
+Jean:
+       * Add support in recent files dialog for multiple selesction and double
+       click. [#759160]
+
 Morten:
        * Fix TABLE problems.  [#752181]  [#752178]  [#752182]
        * Fuzzed file fixes.  [#752179]  [#752180]
diff --git a/src/dialogs/ChangeLog b/src/dialogs/ChangeLog
index ba36b40..bc2c299 100644
--- a/src/dialogs/ChangeLog
+++ b/src/dialogs/ChangeLog
@@ -1,3 +1,9 @@
+2015-12-08  Jean Brefort  <jean brefort normalesup org>
+
+       * dialog-recent.c (cb_selected), (cb_response), (cb_button_press),
+       (dialog_recent_used): add support for multiple selesction and double
+       click. [#759160]
+
 2015-11-19  Morten Welinder <terra gnome org>
 
        * recent.ui: Fix tooltip for open button
diff --git a/src/dialogs/dialog-recent.c b/src/dialogs/dialog-recent.c
index b7b1d36..2ebf77e 100644
--- a/src/dialogs/dialog-recent.c
+++ b/src/dialogs/dialog-recent.c
@@ -40,6 +40,23 @@ enum {
 /* ------------------------------------------------------------------------- */
 
 static void
+cb_selected (GtkTreeModel *model,
+             G_GNUC_UNUSED GtkTreePath *path,
+             GtkTreeIter *iter,
+             WBCGtk *wbcg)
+{
+       char *uri = NULL;
+       GtkRecentInfo *info;
+       gtk_tree_model_get (model, iter, RECENT_COL_INFO, &info, -1);
+       uri = g_strdup (gtk_recent_info_get_uri (info));
+       gtk_recent_info_unref (info);
+       if (uri) {
+               gui_file_read (wbcg, uri, NULL, NULL);
+               g_free (uri);
+       }
+}
+
+static void
 cb_response (GtkWidget *dialog,
             gint response_id,
             WBCGtk *wbcg)
@@ -49,27 +66,10 @@ cb_response (GtkWidget *dialog,
        GtkTreeSelection *tsel = gtk_tree_view_get_selection (tv);
 
        switch (response_id) {
-       case GTK_RESPONSE_OK: {
-               GtkTreeModel *model;
-               GtkTreeIter iter;
-               char *uri = NULL;
-
-               if (gtk_tree_selection_get_selected (tsel, &model, &iter)) {
-                       GtkRecentInfo *info;
-                       gtk_tree_model_get (model, &iter, RECENT_COL_INFO, &info, -1);
-                       uri = g_strdup (gtk_recent_info_get_uri (info));
-                       gtk_recent_info_unref (info);
-               }
-
+       case GTK_RESPONSE_OK:
+               gtk_tree_selection_selected_foreach (tsel, (GtkTreeSelectionForeachFunc) cb_selected, wbcg);
                gtk_widget_destroy (dialog);
-
-               if (uri) {
-                       gui_file_read (wbcg, uri, NULL, NULL);
-                       g_free (uri);
-               }
-
                break;
-       }
 
        default:
                gtk_widget_destroy (dialog);
@@ -118,6 +118,18 @@ cb_key_press (GtkWidget *widget, GdkEventKey *event)
   return FALSE;
 }
 
+static gboolean
+cb_button_press (GtkWidget *w, GdkEventButton *ev, WBCGtk *wbcg)
+{
+       if (ev->type == GDK_2BUTTON_PRESS && ev->button == 1) {
+               GtkWidget *dlg = gtk_widget_get_toplevel (w);
+               if (GTK_IS_DIALOG (dlg)) {
+                       cb_response (dlg, GTK_RESPONSE_OK, wbcg);
+                       return TRUE;
+               }
+       }
+       return FALSE;
+}
 
 static void
 url_renderer_func (GtkTreeViewColumn *tree_column,
@@ -293,6 +305,8 @@ dialog_recent_used (WBCGtk *wbcg)
                GtkWidget *w;
                int width, height, vsep;
                PangoLayout *layout;
+               GtkTreeView *tv;
+               GtkTreeSelection *tsel;
 
                w = GTK_WIDGET (wbcg_toplevel (wbcg));
                layout = gtk_widget_create_pango_layout (w, "Mg19");
@@ -302,12 +316,18 @@ dialog_recent_used (WBCGtk *wbcg)
                g_signal_connect (w, "key-press-event",
                                  G_CALLBACK (cb_key_press),
                                  NULL);
+               g_signal_connect (w, "button-press-event",
+                                 G_CALLBACK (cb_button_press),
+                                 wbcg);
 
                pango_layout_get_pixel_size (layout, &width, &height);
                gtk_widget_set_size_request (go_gtk_builder_get_widget (gui, "docs_scrolledwindow"),
                                             width * 60 / 4,
                                             (2 * height + vsep) * (5 + 1));
                g_object_unref (layout);
+               tv = GTK_TREE_VIEW (gtk_builder_get_object (gui, "docs_treeview"));
+               tsel = gtk_tree_view_get_selection (tv);
+               gtk_tree_selection_set_mode (tsel, GTK_SELECTION_MULTIPLE);
        }
 
        g_signal_connect_swapped (gtk_builder_get_object (gui, "existing_only_button"),


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]