diff --git a/src/backends/meta-remote-desktop-session.c b/src/backends/meta-remote-desktop-session.c index ba6e84ae3..ad9b7672a 100644 --- a/src/backends/meta-remote-desktop-session.c +++ b/src/backends/meta-remote-desktop-session.c @@ -888,10 +888,8 @@ generate_owner_changed_variant (char **mime_types_array, } static void -on_selection_owner_changed (MetaSelection *selection, - MetaSelectionType selection_type, - MetaSelectionSource *owner, - MetaRemoteDesktopSession *session) +emit_owner_changed (MetaRemoteDesktopSession *session, + MetaSelectionSource *owner) { char log_buf[255]; g_autofree char **mime_types_array = NULL; @@ -900,14 +898,11 @@ on_selection_owner_changed (MetaSelection *selection, GVariant *options_variant; const char *object_path; - if (selection_type != META_SELECTION_CLIPBOARD) - return; - if (owner) { GList *mime_types; - mime_types = meta_selection_source_get_mimetypes (owner); + mime_types = meta_selection_source_get_mimetypes (owner); mime_types_array = g_new0 (char *, g_list_length (mime_types) + 1); for (l = meta_selection_source_get_mimetypes (owner), i = 0; l; @@ -941,6 +936,18 @@ on_selection_owner_changed (MetaSelection *selection, NULL); } +static void +on_selection_owner_changed (MetaSelection *selection, + MetaSelectionType selection_type, + MetaSelectionSource *owner, + MetaRemoteDesktopSession *session) +{ + if (selection_type != META_SELECTION_CLIPBOARD) + return; + + emit_owner_changed (session, owner); +} + static gboolean handle_enable_clipboard (MetaDBusRemoteDesktopSession *skeleton, GDBusMethodInvocation *invocation, @@ -951,6 +958,7 @@ handle_enable_clipboard (MetaDBusRemoteDesktopSession *skeleton, g_autoptr (GError) error = NULL; MetaDisplay *display = meta_get_display (); MetaSelection *selection = meta_display_get_selection (display); + g_autoptr (MetaSelectionSourceRemote) source_remote = NULL; meta_topic (META_DEBUG_REMOTE_DESKTOP, "Enable clipboard for %s", @@ -969,8 +977,6 @@ handle_enable_clipboard (MetaDBusRemoteDesktopSession *skeleton, G_VARIANT_TYPE_STRING_ARRAY); if (mime_types_variant) { - g_autoptr (MetaSelectionSourceRemote) source_remote = NULL; - source_remote = create_remote_desktop_source (session, mime_types_variant, &error); @@ -982,7 +988,10 @@ handle_enable_clipboard (MetaDBusRemoteDesktopSession *skeleton, error->message); return TRUE; } + } + if (source_remote) + { meta_topic (META_DEBUG_REMOTE_DESKTOP, "Setting remote desktop clipboard source: %p from %s", source_remote, session->peer_name); @@ -992,6 +1001,16 @@ handle_enable_clipboard (MetaDBusRemoteDesktopSession *skeleton, META_SELECTION_CLIPBOARD, META_SELECTION_SOURCE (source_remote)); } + else + { + MetaSelectionSource *owner; + + owner = meta_selection_get_current_owner (selection, + META_SELECTION_CLIPBOARD); + + if (owner) + emit_owner_changed (session, owner); + } session->is_clipboard_enabled = TRUE; session->owner_changed_handler_id =