summaryrefslogtreecommitdiff
path: root/vcl
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:54:20 +0100
commited124c84c38237c8769b0685ba1e9b3dd87482de (patch)
treeeff63ab2bbaf37ed26f4e877386da3dac5f22a4d /vcl
parentbc1fc6522a95babc81c949e4b9507d87fb58633e (diff)
tdf#138183 sync pending clipboard assign on clipboard ownership-change
Change-Id: I325add499fbd4d11a942ce550346dcbcb5343e4d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105862 Reviewed-by: Kevin Suo <suokunlong@126.com> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Jenkins
Diffstat (limited to 'vcl')
-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 643ec0cac7f3..d3bad43b2052 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);