[nautilus/gtk4-preparation-trunk: 2/84] files-view: Make preview an action




commit 10afd56189f50e525e1ae7a10ed1105a19056fcd
Author: António Fernandes <antoniof gnome org>
Date:   Sat Dec 18 13:44:11 2021 +0000

    files-view: Make preview an action
    
    Preview is activated when Space key is pressed. It has been implemented
    in each view's key event handlers. Except the new grid view, where it
    is part of the GtkFlowBox::child-activated handler; as this is not an
    event handler, it requires calling gtk_get_current_event() in order
    to know the pressed key and possible modifiers.
    
    This is problematic because gtk_get_current_event() is gone in GTK 4.
    
    Instead, let's simplify this whole thing by making an action and
    setting an accelerator. This will trigger before the event handlers,
    so there is no need for the event handlers to do anything about it.

 src/nautilus-canvas-view.c          | 15 ---------------
 src/nautilus-files-view.c           | 35 ++++++++++++++++++++++-------------
 src/nautilus-files-view.h           |  3 ---
 src/nautilus-list-view.c            | 19 -------------------
 src/nautilus-view-icon-controller.c | 23 +----------------------
 5 files changed, 23 insertions(+), 72 deletions(-)
---
diff --git a/src/nautilus-canvas-view.c b/src/nautilus-canvas-view.c
index ce162d414..fdb47c328 100644
--- a/src/nautilus-canvas-view.c
+++ b/src/nautilus-canvas-view.c
@@ -1039,19 +1039,6 @@ canvas_container_activate_callback (NautilusCanvasContainer *container,
                                         0, TRUE);
 }
 
-static void
-canvas_container_activate_previewer_callback (NautilusCanvasContainer *container,
-                                              GList                   *file_list,
-                                              GArray                  *locations,
-                                              NautilusCanvasView      *canvas_view)
-{
-    g_assert (NAUTILUS_IS_CANVAS_VIEW (canvas_view));
-    g_assert (container == get_canvas_container (canvas_view));
-
-    nautilus_files_view_preview_files (NAUTILUS_FILES_VIEW (canvas_view),
-                                       file_list, locations);
-}
-
 /* this is called in one of these cases:
  * - we activate with enter holding shift
  * - we activate with space holding shift
@@ -1390,8 +1377,6 @@ initialize_canvas_container (NautilusCanvasView      *canvas_view,
                              G_CALLBACK (canvas_container_activate_callback), canvas_view, 0);
     g_signal_connect_object (canvas_container, "activate-alternate",
                              G_CALLBACK (canvas_container_activate_alternate_callback), canvas_view, 0);
-    g_signal_connect_object (canvas_container, "activate-previewer",
-                             G_CALLBACK (canvas_container_activate_previewer_callback), canvas_view, 0);
     g_signal_connect_object (canvas_container, "band-select-started",
                              G_CALLBACK (band_select_started_callback), canvas_view, 0);
     g_signal_connect_object (canvas_container, "band-select-ended",
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index dfb7fb26c..cb39a9ef5 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -1267,19 +1267,6 @@ nautilus_files_view_preview (NautilusFilesView *view,
     }
 }
 
-void
-nautilus_files_view_preview_files (NautilusFilesView *view,
-                                   GList             *files,
-                                   GArray            *locations)
-{
-    PreviewExportData *data = g_new0 (PreviewExportData, 1);
-
-    data->uri = nautilus_file_get_uri (files->data);
-    data->is_update = FALSE;
-
-    nautilus_files_view_preview (view, data);
-}
-
 static void
 nautilus_files_view_preview_update (NautilusFilesView *view)
 {
@@ -1713,6 +1700,23 @@ action_invert_selection (GSimpleAction *action,
     nautilus_files_view_invert_selection (user_data);
 }
 
+static void
+action_preview_selection (GSimpleAction *action,
+                          GVariant      *state,
+                          gpointer       user_data)
+{
+    NautilusFilesView *view = NAUTILUS_FILES_VIEW (user_data);
+    g_autolist (NautilusFile) selection = NULL;
+    PreviewExportData *data = g_new0 (PreviewExportData, 1);
+
+    selection = nautilus_view_get_selection (NAUTILUS_VIEW (view));
+
+    data->uri = nautilus_file_get_uri (selection->data);
+    data->is_update = FALSE;
+
+    nautilus_files_view_preview (view, data);
+}
+
 static void
 pattern_select_response_cb (GtkWidget *dialog,
                             int        response,
@@ -7206,6 +7210,7 @@ const GActionEntry view_entries[] =
     /* Only accesible by shorcuts */
     { "select-pattern", action_select_pattern },
     { "invert-selection", action_invert_selection },
+    { "preview-selection", action_preview_selection },
 };
 
 static gboolean
@@ -7789,6 +7794,9 @@ real_update_actions_state (NautilusFilesView *view)
     g_simple_action_set_enabled (G_SIMPLE_ACTION (action),
                                  can_move_files && !selection_contains_recent &&
                                  !selection_contains_starred);
+    action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group),
+                                         "preview-selection");
+    g_simple_action_set_enabled (G_SIMPLE_ACTION (action), selection_count != 0);
 
     /* Drive menu */
     show_mount = (selection != NULL);
@@ -9998,6 +10006,7 @@ nautilus_files_view_init (NautilusFilesView *view)
     nautilus_application_set_accelerator (app, "view.select-pattern", "<control>s");
     nautilus_application_set_accelerators (app, "view.zoom-standard", zoom_standard_accels);
     nautilus_application_set_accelerator (app, "view.invert-selection", "<shift><control>i");
+    nautilus_application_set_accelerator (app, "view.preview-selection", "space");
 
     priv->starred_cancellable = g_cancellable_new ();
     priv->tag_manager = nautilus_tag_manager_get ();
diff --git a/src/nautilus-files-view.h b/src/nautilus-files-view.h
index f1b31d464..afeabc3c5 100644
--- a/src/nautilus-files-view.h
+++ b/src/nautilus-files-view.h
@@ -266,9 +266,6 @@ void                nautilus_files_view_activate_files                   (Nautil
 void                nautilus_files_view_activate_file                    (NautilusFilesView       *view,
                                                                           NautilusFile            *file,
                                                                           NautilusWindowOpenFlags  flags);
-void                nautilus_files_view_preview_files                    (NautilusFilesView *view,
-                                                                          GList             *files,
-                                                                          GArray            *locations);
 void                nautilus_files_view_start_batching_selection_changes (NautilusFilesView *view);
 void                nautilus_files_view_stop_batching_selection_changes  (NautilusFilesView *view);
 void                nautilus_files_view_notify_selection_changed         (NautilusFilesView *view);
diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c
index b8248e0bc..cf06c0b62 100644
--- a/src/nautilus-list-view.c
+++ b/src/nautilus-list-view.c
@@ -174,21 +174,6 @@ list_selection_changed_callback (GtkTreeSelection *selection,
     nautilus_files_view_notify_selection_changed (view);
 }
 
-static void
-preview_selected_items (NautilusListView *view)
-{
-    GList *file_list;
-
-    file_list = nautilus_list_view_get_selection (NAUTILUS_FILES_VIEW (view));
-
-    if (file_list != NULL)
-    {
-        nautilus_files_view_preview_files (NAUTILUS_FILES_VIEW (view),
-                                           file_list, NULL);
-        nautilus_file_list_free (file_list);
-    }
-}
-
 static void
 activate_selected_items (NautilusListView *view)
 {
@@ -893,10 +878,6 @@ on_event_controller_key_key_pressed (GtkEventControllerKey *controller,
         {
             activate_selected_items_alternate (NAUTILUS_LIST_VIEW (view), NULL, TRUE);
         }
-        else
-        {
-            preview_selected_items (NAUTILUS_LIST_VIEW (view));
-        }
 
         return GDK_EVENT_STOP;
     }
diff --git a/src/nautilus-view-icon-controller.c b/src/nautilus-view-icon-controller.c
index b4746efd5..ed4bee7df 100644
--- a/src/nautilus-view-icon-controller.c
+++ b/src/nautilus-view-icon-controller.c
@@ -981,34 +981,13 @@ on_child_activated (GtkFlowBox      *flow_box,
     NautilusViewItemModel *item_model;
     NautilusFile *file;
     g_autoptr (GList) list = NULL;
-    GdkEvent *event;
-    guint keyval;
-    gboolean is_preview = FALSE;
 
     item_model = g_list_model_get_item (G_LIST_MODEL (self->model),
                                         gtk_flow_box_child_get_index (child));
     file = nautilus_view_item_model_get_file (item_model);
     list = g_list_append (list, file);
 
-    event = gtk_get_current_event ();
-    if (event && gdk_event_get_keyval (event, &keyval))
-    {
-        if (keyval == GDK_KEY_space)
-        {
-            is_preview = TRUE;
-        }
-    }
-
-    if (is_preview)
-    {
-        nautilus_files_view_preview_files (NAUTILUS_FILES_VIEW (self), list, NULL);
-    }
-    else
-    {
-        nautilus_files_view_activate_files (NAUTILUS_FILES_VIEW (self), list, 0, TRUE);
-    }
-
-    g_clear_pointer (&event, gdk_event_free);
+    nautilus_files_view_activate_files (NAUTILUS_FILES_VIEW (self), list, 0, TRUE);
 }
 
 static void


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