diff options
author | Cosimo Cecchi <cosimoc@gnome.org> | 2019-07-06 22:53:19 -0700 |
---|---|---|
committer | Cosimo Cecchi <cosimoc@gnome.org> | 2019-08-29 16:20:05 -0700 |
commit | 0417c013546c255fc9ad5edbcc676d3a3350d192 (patch) | |
tree | 4ca4a6fbbed8aa46edd0893ecc551d11b50948d6 /src/nautilus-files-view.c | |
parent | 54d1ad250e484f4a34cccba51ed6fab457976d46 (diff) | |
download | nautilus-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.c | 60 |
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 |