diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-11-16 12:36:57 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-11-17 09:54:20 +0100 |
commit | ed124c84c38237c8769b0685ba1e9b3dd87482de (patch) | |
tree | eff63ab2bbaf37ed26f4e877386da3dac5f22a4d /vcl | |
parent | bc1fc6522a95babc81c949e4b9507d87fb58633e (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.cxx | 13 |
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); |