tdf#138183 sync pending clipboard assign on clipboard ownership-change
Change-Id: I325add499fbd4d11a942ce550346dcbcb5343e4d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105928
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index fb5227d..be37b2b 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -750,6 +750,7 @@ public:
void ClipboardClear();
void OwnerPossiblyChanged(GtkClipboard *clipboard);
void SetGtkClipboard();
void SyncGtkClipboard();
};
}
@@ -835,6 +836,7 @@ namespace
void VclGtkClipboard::OwnerPossiblyChanged(GtkClipboard* clipboard)
{
SyncGtkClipboard(); // tdf#138183 do any pending SetGtkClipboard calls
if (!m_aContents.is())
return;
@@ -1049,6 +1051,17 @@ IMPL_LINK_NOARG(VclGtkClipboard, AsyncSetGtkClipboard, void*, void)
SetGtkClipboard();
}
void VclGtkClipboard::SyncGtkClipboard()
{
osl::ClearableMutexGuard aGuard(m_aMutex);
if (m_pSetClipboardEvent)
{
Application::RemoveUserEvent(m_pSetClipboardEvent);
m_pSetClipboardEvent = nullptr;
SetGtkClipboard();
}
}
void VclGtkClipboard::SetGtkClipboard()
{
GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection);