Blame SOURCES/0003-Resolves-rhbz-1240591-gtk3-store-clipboard-when-Libr.patch

a9add1
From 3f20d5f3b46160c2a5e425bfd50b2e0319cda021 Mon Sep 17 00:00:00 2001
a9add1
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
a9add1
Date: Thu, 21 Jan 2016 11:28:50 +0000
a9add1
Subject: [PATCH] Resolves: rhbz#1240591 gtk3: store clipboard when LibreOffice
a9add1
 is closed
a9add1
a9add1
now contents copied to clipboard persist after LibreOffice exits
a9add1
a9add1
Change-Id: I4433543944fb9664f87ade43da1198dcdd4e2a7c
a9add1
(cherry picked from commit f1358edf469e70df1fb044bb58cd888fea15173c)
a9add1
---
a9add1
 vcl/unx/gtk3/gtk3gtkinst.cxx | 25 ++++++++++++++++++++++---
a9add1
 1 file changed, 22 insertions(+), 3 deletions(-)
a9add1
a9add1
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
a9add1
index f727462..8654b45 100644
a9add1
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
a9add1
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
a9add1
@@ -13,12 +13,12 @@
a9add1
 #include "com/sun/star/lang/XServiceInfo.hpp"
a9add1
 #include "com/sun/star/lang/XSingleServiceFactory.hpp"
a9add1
 #include "com/sun/star/lang/XInitialization.hpp"
a9add1
-#include "com/sun/star/lang/DisposedException.hpp"
a9add1
 #include "com/sun/star/datatransfer/XTransferable.hpp"
a9add1
 #include "com/sun/star/datatransfer/clipboard/XClipboard.hpp"
a9add1
 #include "com/sun/star/datatransfer/clipboard/XClipboardEx.hpp"
a9add1
 #include "com/sun/star/datatransfer/clipboard/XClipboardNotifier.hpp"
a9add1
 #include "com/sun/star/datatransfer/clipboard/XClipboardListener.hpp"
a9add1
+#include "com/sun/star/datatransfer/clipboard/XFlushableClipboard.hpp"
a9add1
 #include "com/sun/star/datatransfer/clipboard/XSystemClipboard.hpp"
a9add1
 #include "com/sun/star/datatransfer/dnd/XDragSource.hpp"
a9add1
 #include "com/sun/star/datatransfer/dnd/XDropTarget.hpp"
a9add1
@@ -275,6 +275,7 @@ static void clipboard_owner_init(ClipboardOwner *)
a9add1
 class VclGtkClipboard :
a9add1
         public cppu::WeakComponentImplHelper<
a9add1
         datatransfer::clipboard::XSystemClipboard,
a9add1
+        datatransfer::clipboard::XFlushableClipboard,
a9add1
         XServiceInfo>
a9add1
 {
a9add1
     GdkAtom                                                  m_nSelection;
a9add1
@@ -326,6 +327,12 @@ public:
a9add1
         throw(RuntimeException, std::exception) SAL_OVERRIDE;
a9add1
 
a9add1
     /*
a9add1
+     * XFlushableClipboard
a9add1
+     */
a9add1
+    virtual void SAL_CALL flushClipboard()
a9add1
+        throw(RuntimeException, std::exception) override;
a9add1
+
a9add1
+    /*
a9add1
      * XClipboardNotifier
a9add1
      */
a9add1
     virtual void SAL_CALL addClipboardListener(
a9add1
@@ -503,7 +510,8 @@ namespace
a9add1
 }
a9add1
 
a9add1
 VclGtkClipboard::VclGtkClipboard(GdkAtom nSelection)
a9add1
-    : cppu::WeakComponentImplHelper<datatransfer::clipboard::XSystemClipboard, XServiceInfo>
a9add1
+    : cppu::WeakComponentImplHelper
a9add1
+                                    datatransfer::clipboard::XFlushableClipboard, XServiceInfo>
a9add1
         (m_aMutex)
a9add1
     , m_nSelection(nSelection)
a9add1
 {
a9add1
@@ -514,6 +522,16 @@ VclGtkClipboard::VclGtkClipboard(GdkAtom nSelection)
a9add1
     m_pOwner->m_pThis = this;
a9add1
 }
a9add1
 
a9add1
+void VclGtkClipboard::flushClipboard()
a9add1
+  throw (RuntimeException, std::exception)
a9add1
+{
a9add1
+    if (GDK_SELECTION_CLIPBOARD != m_nSelection)
a9add1
+        return;
a9add1
+
a9add1
+    GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection);
a9add1
+    gtk_clipboard_store(clipboard);
a9add1
+}
a9add1
+
a9add1
 VclGtkClipboard::~VclGtkClipboard()
a9add1
 {
a9add1
     GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection);
a9add1
@@ -525,7 +543,7 @@ VclGtkClipboard::~VclGtkClipboard()
a9add1
 void VclGtkClipboard::setContents(
a9add1
         const Reference< css::datatransfer::XTransferable >& xTrans,
a9add1
         const Reference< css::datatransfer::clipboard::XClipboardOwner >& xClipboardOwner )
a9add1
-    throw( RuntimeException, std::exception )
a9add1
+    throw(RuntimeException, std::exception)
a9add1
 {
a9add1
     osl::ClearableMutexGuard aGuard( m_aMutex );
a9add1
     Reference< datatransfer::clipboard::XClipboardOwner > xOldOwner( m_aOwner );
a9add1
@@ -585,6 +603,7 @@ void VclGtkClipboard::setContents(
a9add1
             //if we have gained or lost ownership of the clipboard
a9add1
             gtk_clipboard_set_with_owner(clipboard, aGtkTargets.data(), aGtkTargets.size(),
a9add1
                                         ClipboardGetFunc, ClipboardClearFunc, G_OBJECT(m_pOwner));
a9add1
+            gtk_clipboard_set_can_store(clipboard, aGtkTargets.data(), aGtkTargets.size());
a9add1
         }
a9add1
         m_aGtkTargets = aGtkTargets;
a9add1
     }
a9add1
-- 
a9add1
2.5.0
a9add1