diff options
author | Noel Power <noel.power@suse.com> | 2013-07-09 13:58:19 +0100 |
---|---|---|
committer | Petr Mladek <pmladek@suse.cz> | 2013-07-09 16:24:19 +0000 |
commit | 35208d62e32ee0a7aeacfe2f577b68c9dcb40671 (patch) | |
tree | 7a3bbc70e1610af4e931546b65c5f6a89d026fce /vcl/source | |
parent | b08fbd0fddcfca82153af9d29dc145f4396f9a45 (diff) |
fix for fdo#66718, access correct clipboard
Changes to use SystemClipboard::createUnix break some subtle behaviour
( or is it even misbehaviour ) that users of the service
"com.sun.star.datatransfer.clipboard.SystemClipboard" depend on.
When creating the SystemClipboard the arguments passed to
X11SalInstance::CreateClipboard(...) are used to access cached
instances. Previously the window clipboard was created with 'no'
params and then initialised ( via XInitialisation ) later
This ensured users creating the "css.datatransfer.clipboard.SystemClipboard"
with no paramaters immediately get that same clipboard. Note: creating
the SystemClipboard with no param seesm a sensible thing from an scripters
point of view as the params that would be required to match the correct
Clipboard seem rather difficult to access in an uno only world
Change-Id: Ib71d6744086d354025de4db62039b9a98f230eca
(cherry picked from commit 942501b6e49c6c9e19556d9ec132a458e5fef6c3)
Reviewed-on: https://gerrit.libreoffice.org/4784
Reviewed-by: Petr Mladek <pmladek@suse.cz>
Tested-by: Petr Mladek <pmladek@suse.cz>
Diffstat (limited to 'vcl/source')
-rw-r--r-- | vcl/source/window/window.cxx | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx index 1018bb80efcd..2c31c790ce68 100644 --- a/vcl/source/window/window.cxx +++ b/vcl/source/window/window.cxx @@ -8435,11 +8435,19 @@ uno::Reference< XClipboard > Window::GetClipboard() try { uno::Reference< XComponentContext > xContext( comphelper::getProcessComponentContext() ); - Reference<XSystemClipboard> xSystemClipboard; + Reference<XSystemClipboard> xSystemClipboard = SystemClipboard::createDefault(xContext); #if defined(UNX) && !defined(MACOSX) // unix clipboard needs to be initialized - xSystemClipboard = SystemClipboard::createUnix( xContext, Application::GetDisplayConnection(), "CLIPBOARD", vcl::createBmpConverter() ); -#else - xSystemClipboard = SystemClipboard::createDefault(xContext); + uno::Reference< XInitialization > xInit = uno::Reference< XInitialization >( xSystemClipboard, UNO_QUERY ); + + if( xInit.is() ) + { + Sequence< Any > aArgumentList( 3 ); + aArgumentList[ 0 ] = makeAny( Application::GetDisplayConnection() ); + aArgumentList[ 1 ] = makeAny( OUString("CLIPBOARD") ); + aArgumentList[ 2 ] = makeAny( vcl::createBmpConverter() ); + + xInit->initialize( aArgumentList ); + } #endif mpWindowImpl->mpFrameData->mxClipboard.set( xSystemClipboard, UNO_QUERY ); } |