summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-11-16 12:36:57 +0000
committerCaolán McNamara <caolanm@redhat.com>2020-11-17 09:53:57 +0100
commitf98735583a666e0f06d018cf93b79c74b7ce7b80 (patch)
treeee5e43062d12256e6a545bd78b8506bfa6e5231d
parent33381457503db841cdda3abb95ff3f96fb6e3e6c (diff)
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>
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx13
1 files changed, 13 insertions, 0 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index fb5227df063d..be37b2b49c02 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);