summaryrefslogtreecommitdiff
path: root/src/nautilus-files-view.c
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2019-07-06 22:53:19 -0700
committerCosimo Cecchi <cosimoc@gnome.org>2019-08-29 16:20:05 -0700
commit0417c013546c255fc9ad5edbcc676d3a3350d192 (patch)
tree4ca4a6fbbed8aa46edd0893ecc551d11b50948d6 /src/nautilus-files-view.c
parent54d1ad250e484f4a34cccba51ed6fab457976d46 (diff)
downloadnautilus-0417c013546c255fc9ad5edbcc676d3a3350d192.tar.gz
Update preview when selection changes
If the selection changes while the preview is active, change the preview to the new selection. Combined with the previous work to move selection in the views when pressing keys in the preview window itself, this greatly improves the experience while previewing several files in a directory. Fixes https://gitlab.gnome.org/GNOME/sushi/issues/5 Closes https://gitlab.gnome.org/GNOME/nautilus/merge_requests/470
Diffstat (limited to 'src/nautilus-files-view.c')
-rw-r--r--src/nautilus-files-view.c60
1 files changed, 51 insertions, 9 deletions
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index 40e2a2334..1a1089ac6 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -1230,14 +1230,42 @@ get_view_directory (NautilusFilesView *view)
return path;
}
+typedef struct {
+ gchar *uri;
+ gboolean is_update;
+} PreviewExportData;
+
+static void
+preview_export_data_free (gpointer _data)
+{
+ PreviewExportData *data = _data;
+ g_free (data->uri);
+ g_free (data);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC (PreviewExportData, preview_export_data_free)
+
static void
on_window_handle_export (NautilusWindow *window,
const char *handle,
guint xid,
gpointer user_data)
{
- g_autofree gchar *uri = user_data;
- nautilus_previewer_call_show_file (uri, handle, xid, TRUE);
+ g_autoptr(PreviewExportData) data = user_data;
+ nautilus_previewer_call_show_file (data->uri, handle, xid, !data->is_update);
+}
+
+static void
+nautilus_files_view_preview (NautilusFilesView *view,
+ PreviewExportData *data)
+{
+ if (!nautilus_window_export_handle (nautilus_files_view_get_window (view),
+ on_window_handle_export,
+ data))
+ {
+ /* Let's use a fallback, so at least a preview will be displayed */
+ nautilus_previewer_call_show_file (data->uri, "x11:0", 0, !data->is_update);
+ }
}
void
@@ -1245,16 +1273,30 @@ nautilus_files_view_preview_files (NautilusFilesView *view,
GList *files,
GArray *locations)
{
- g_autofree gchar *uri = NULL;
+ PreviewExportData *data = g_new0 (PreviewExportData, 1);
- uri = nautilus_file_get_uri (files->data);
- if (!nautilus_window_export_handle (nautilus_files_view_get_window (view),
- on_window_handle_export,
- g_strdup (uri)))
+ data->uri = nautilus_file_get_uri (files->data);
+ data->is_update = FALSE;
+
+ nautilus_files_view_preview (view, data);
+}
+
+void
+nautilus_files_view_preview_update (NautilusFilesView *view,
+ GList *files)
+{
+ PreviewExportData *data;
+
+ if (!nautilus_previewer_is_visible ())
{
- /* Let's use a fallback, so at least a preview will be displayed */
- nautilus_previewer_call_show_file (uri, "x11:0", 0, TRUE);
+ return;
}
+
+ data = g_new0 (PreviewExportData, 1);
+ data->uri = nautilus_file_get_uri (files->data);
+ data->is_update = TRUE;
+
+ nautilus_files_view_preview (view, data);
}
void