Resolves: rhbz#1240591 gtk3: store clipboard when LibreOffice is closed
now contents copied to clipboard persist after LibreOffice exits Change-Id: I4433543944fb9664f87ade43da1198dcdd4e2a7c
This commit is contained in:
@@ -13,12 +13,12 @@
|
||||
#include "com/sun/star/lang/XServiceInfo.hpp"
|
||||
#include "com/sun/star/lang/XSingleServiceFactory.hpp"
|
||||
#include "com/sun/star/lang/XInitialization.hpp"
|
||||
#include "com/sun/star/lang/DisposedException.hpp"
|
||||
#include "com/sun/star/datatransfer/XTransferable.hpp"
|
||||
#include "com/sun/star/datatransfer/clipboard/XClipboard.hpp"
|
||||
#include "com/sun/star/datatransfer/clipboard/XClipboardEx.hpp"
|
||||
#include "com/sun/star/datatransfer/clipboard/XClipboardNotifier.hpp"
|
||||
#include "com/sun/star/datatransfer/clipboard/XClipboardListener.hpp"
|
||||
#include "com/sun/star/datatransfer/clipboard/XFlushableClipboard.hpp"
|
||||
#include "com/sun/star/datatransfer/clipboard/XSystemClipboard.hpp"
|
||||
#include "com/sun/star/datatransfer/dnd/XDragSource.hpp"
|
||||
#include "com/sun/star/datatransfer/dnd/XDropTarget.hpp"
|
||||
@@ -275,6 +275,7 @@ static void clipboard_owner_init(ClipboardOwner *)
|
||||
class VclGtkClipboard :
|
||||
public cppu::WeakComponentImplHelper<
|
||||
datatransfer::clipboard::XSystemClipboard,
|
||||
datatransfer::clipboard::XFlushableClipboard,
|
||||
XServiceInfo>
|
||||
{
|
||||
GdkAtom m_nSelection;
|
||||
@@ -325,6 +326,12 @@ public:
|
||||
virtual sal_Int8 SAL_CALL getRenderingCapabilities()
|
||||
throw(RuntimeException, std::exception) override;
|
||||
|
||||
/*
|
||||
* XFlushableClipboard
|
||||
*/
|
||||
virtual void SAL_CALL flushClipboard()
|
||||
throw(RuntimeException, std::exception) override;
|
||||
|
||||
/*
|
||||
* XClipboardNotifier
|
||||
*/
|
||||
@@ -502,7 +509,8 @@ namespace
|
||||
}
|
||||
|
||||
VclGtkClipboard::VclGtkClipboard(GdkAtom nSelection)
|
||||
: cppu::WeakComponentImplHelper<datatransfer::clipboard::XSystemClipboard, XServiceInfo>
|
||||
: cppu::WeakComponentImplHelper<datatransfer::clipboard::XSystemClipboard,
|
||||
datatransfer::clipboard::XFlushableClipboard, XServiceInfo>
|
||||
(m_aMutex)
|
||||
, m_nSelection(nSelection)
|
||||
{
|
||||
@@ -513,6 +521,16 @@ VclGtkClipboard::VclGtkClipboard(GdkAtom nSelection)
|
||||
m_pOwner->m_pThis = this;
|
||||
}
|
||||
|
||||
void VclGtkClipboard::flushClipboard()
|
||||
throw (RuntimeException, std::exception)
|
||||
{
|
||||
if (GDK_SELECTION_CLIPBOARD != m_nSelection)
|
||||
return;
|
||||
|
||||
GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection);
|
||||
gtk_clipboard_store(clipboard);
|
||||
}
|
||||
|
||||
VclGtkClipboard::~VclGtkClipboard()
|
||||
{
|
||||
GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection);
|
||||
@@ -524,7 +542,7 @@ VclGtkClipboard::~VclGtkClipboard()
|
||||
void VclGtkClipboard::setContents(
|
||||
const Reference< css::datatransfer::XTransferable >& xTrans,
|
||||
const Reference< css::datatransfer::clipboard::XClipboardOwner >& xClipboardOwner )
|
||||
throw( RuntimeException, std::exception )
|
||||
throw(RuntimeException, std::exception)
|
||||
{
|
||||
osl::ClearableMutexGuard aGuard( m_aMutex );
|
||||
Reference< datatransfer::clipboard::XClipboardOwner > xOldOwner( m_aOwner );
|
||||
@@ -584,6 +602,7 @@ void VclGtkClipboard::setContents(
|
||||
//if we have gained or lost ownership of the clipboard
|
||||
gtk_clipboard_set_with_owner(clipboard, aGtkTargets.data(), aGtkTargets.size(),
|
||||
ClipboardGetFunc, ClipboardClearFunc, G_OBJECT(m_pOwner));
|
||||
gtk_clipboard_set_can_store(clipboard, aGtkTargets.data(), aGtkTargets.size());
|
||||
}
|
||||
m_aGtkTargets = aGtkTargets;
|
||||
}
|
||||
|
Reference in New Issue
Block a user