diff options
Diffstat (limited to 'client')
-rw-r--r-- | client/red_client.cpp | 3 | ||||
-rw-r--r-- | client/windows/platform.cpp | 1 | ||||
-rw-r--r-- | client/x11/platform.cpp | 13 |
3 files changed, 15 insertions, 2 deletions
diff --git a/client/red_client.cpp b/client/red_client.cpp index a022499f..8e7dfe0e 100644 --- a/client/red_client.cpp +++ b/client/red_client.cpp @@ -1133,12 +1133,11 @@ void RedClient::dispatch_agent_message(VDAgentMessage* msg, void* data) break; case VD_AGENT_CLIPBOARD_RELEASE: if (Platform::get_clipboard_owner() != Platform::owner_guest) { - LOG_WARN("received clipboard release from guest while clipboard is not owned by guest"); + LOG_INFO("received clipboard release from guest while clipboard is not owned by guest"); break; } Platform::on_clipboard_release(); - Platform::set_clipboard_owner(Platform::owner_none); break; default: DBG(0, "Unsupported message type %u size %u", msg->type, msg->size); diff --git a/client/windows/platform.cpp b/client/windows/platform.cpp index db47079d..580a40ae 100644 --- a/client/windows/platform.cpp +++ b/client/windows/platform.cpp @@ -1011,6 +1011,7 @@ bool Platform::on_clipboard_request(uint32_t type) void Platform::on_clipboard_release() { SetEvent(clipboard_event); + set_clipboard_owner(owner_none); } static bool has_console = false; diff --git a/client/x11/platform.cpp b/client/x11/platform.cpp index ea2558d7..75b34c61 100644 --- a/client/x11/platform.cpp +++ b/client/x11/platform.cpp @@ -3342,5 +3342,18 @@ bool Platform::on_clipboard_request(uint32_t type) void Platform::on_clipboard_release() { + XEvent event; + XSetSelectionOwner(x_display, clipboard_prop, None, CurrentTime); + /* Make sure we process the XFixesSetSelectionOwnerNotify event caused + by this, so we don't end up changing the clipboard owner to none, after + it has already been re-owned because this event is still pending. */ + XSync(x_display, False); + while (XCheckTypedEvent(x_display, + XFixesSelectionNotify + xfixes_event_base, + &event)) + root_win_proc(event); + + /* Note no need to do a set_clipboard_owner(owner_none) here, as that is + already done by processing the XFixesSetSelectionOwnerNotify event. */ } |