summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx5
1 files changed, 4 insertions, 1 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index e9210d0e128b..f1a9ddc72ee0 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -456,7 +456,7 @@ void VclGtkClipboard::OwnerChanged(GtkClipboard* clipboard, GdkEvent* /*event*/)
void VclGtkClipboard::ClipboardClear(GtkClipboard * /*clipboard*/)
{
for (auto &a : m_aGtkTargets)
- free(a.target);
+ g_free(a.target);
m_aGtkTargets.clear();
}
@@ -518,6 +518,7 @@ VclGtkClipboard::~VclGtkClipboard()
GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection);
g_signal_handler_disconnect(clipboard, m_nOwnerChangedSignalId);
g_object_unref(m_pOwner);
+ ClipboardClear(nullptr);
}
void VclGtkClipboard::setContents(
@@ -577,6 +578,8 @@ void VclGtkClipboard::setContents(
//if there was a previous gtk_clipboard_set_with_data call then
//ClipboardClearFunc will be called now
GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection);
+ if(G_OBJECT(m_pOwner) == gtk_clipboard_get_owner(clipboard))
+ gtk_clipboard_clear(clipboard);
//use with_owner with m_pOwner so we can distinguish in handle_owner_change
//if we have gained or lost ownership of the clipboard
gtk_clipboard_set_with_owner(clipboard, aGtkTargets.data(), aGtkTargets.size(),