diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c index 391808a1151747760f7d5f5135cd359ef9efb4c4..868e0463e8cb5afe618641fbe4524fef92f7394e 100644 --- a/src/nautilus-files-view.c +++ b/src/nautilus-files-view.c @@ -1310,8 +1310,6 @@ static void nautilus_files_view_preview_update (NautilusFilesView *view) { NautilusFilesViewPrivate *priv = nautilus_files_view_get_instance_private (view); - GtkApplication *app; - GtkRoot *window; g_autolist (NautilusFile) selection = NULL; if (!priv->active || @@ -1320,9 +1318,7 @@ nautilus_files_view_preview_update (NautilusFilesView *view) return; } - app = GTK_APPLICATION (g_application_get_default ()); - window = gtk_widget_get_root (GTK_WIDGET (view)); - if (window == NULL || GTK_WINDOW (window) != gtk_application_get_active_window (app)) + if (gtk_widget_get_root (GTK_WIDGET (view)) == NULL) { return; } @@ -1335,7 +1331,7 @@ nautilus_files_view_preview_update (NautilusFilesView *view) g_autofree gchar *uri = nautilus_file_get_uri (selection->data); - nautilus_previewer_call_show_file (uri, window, FALSE); + nautilus_previewer_call_show_file (uri, priv->slot, FALSE); } void @@ -1839,14 +1835,14 @@ action_preview_selection (GSimpleAction *action, gpointer user_data) { NautilusFilesView *view = NAUTILUS_FILES_VIEW (user_data); + NautilusFilesViewPrivate *priv = nautilus_files_view_get_instance_private (view); g_autolist (NautilusFile) selection = NULL; - GtkRoot *window = gtk_widget_get_root (GTK_WIDGET (view)); selection = nautilus_view_get_selection (NAUTILUS_VIEW (view)); g_autofree gchar *uri = nautilus_file_get_uri (selection->data); - nautilus_previewer_call_show_file (uri, window, TRUE); + nautilus_previewer_call_show_file (uri, priv->slot, TRUE); } static void diff --git a/src/nautilus-previewer.c b/src/nautilus-previewer.c index ae69708f4cc20443f766182b3b518976e2c081e7..c361f9f24516c99aa16b97c0d8a8fd6cfe95581a 100644 --- a/src/nautilus-previewer.c +++ b/src/nautilus-previewer.c @@ -50,6 +50,7 @@ static guint subscription_id = 0; static GCancellable *cancellable = NULL; +static NautilusWindowSlot *current_slot = NULL; /* weak ref */ static GtkRoot *current_window = NULL; /* weak ref */ static gchar *exported_window_handle = NULL; @@ -239,10 +240,14 @@ previewer2_method_ready_cb (GObject *source, } void -nautilus_previewer_call_show_file (const gchar *uri, - GtkRoot *window, - gboolean close_if_already_visible) +nautilus_previewer_call_show_file (const gchar *uri, + NautilusWindowSlot *slot, + gboolean close_if_already_visible) { + g_set_weak_pointer (¤t_slot, slot); + + GtkRoot *window = gtk_widget_get_root (GTK_WIDGET (slot)); + /* Reuse existing handle if called again for the same window. */ if (current_window == window && exported_window_handle != NULL) @@ -343,29 +348,13 @@ previewer_selection_event (GDBusConnection *connection, GVariant *parameters, gpointer user_data) { - GApplication *application = g_application_get_default (); - GList *l, *windows = gtk_application_get_windows (GTK_APPLICATION (application)); - NautilusWindow *window = NULL; - NautilusWindowSlot *slot; - NautilusView *view; - GtkDirectionType direction; - - for (l = windows; l != NULL; l = l->next) - { - if (NAUTILUS_IS_WINDOW (l->data)) - { - window = l->data; - break; - } - } - - if (window == NULL) + if (current_slot == NULL) { return; } - slot = nautilus_window_get_active_slot (window); - view = nautilus_window_slot_get_current_view (slot); + NautilusView *view = nautilus_window_slot_get_current_view (current_slot); + GtkDirectionType direction; if (!NAUTILUS_IS_FILES_VIEW (view)) { @@ -395,6 +384,7 @@ nautilus_previewer_teardown (GDBusConnection *connection) g_clear_object (&previewer_proxy); clear_exported_window_handle (); g_clear_weak_pointer (¤t_window); + g_clear_weak_pointer (¤t_slot); } gboolean diff --git a/src/nautilus-previewer.h b/src/nautilus-previewer.h index 57800e56adfff81cb620e645bb7e57923d5ee646..65bb10afdd4b746e3eb2065f8d1bc92849f09990 100644 --- a/src/nautilus-previewer.h +++ b/src/nautilus-previewer.h @@ -26,11 +26,13 @@ #include #include +#include "nautilus-types.h" + G_BEGIN_DECLS -void nautilus_previewer_call_show_file (const gchar *uri, - GtkRoot *window, - gboolean close_if_already_visible); +void nautilus_previewer_call_show_file (const gchar *uri, + NautilusWindowSlot *window, + gboolean close_if_already_visible); void nautilus_previewer_call_close (void); gboolean nautilus_previewer_is_visible (void);