summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Power <noel.power@suse.com>2013-07-09 13:58:19 +0100
committerNoel Power <noel.power@suse.com>2013-07-09 14:09:53 +0100
commit942501b6e49c6c9e19556d9ec132a458e5fef6c3 (patch)
tree4815955cbe602071d08b86f05fbbe853a1d4398a
parente8eda4e656d16b6de2d2ec33a297012a1c224f38 (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
-rw-r--r--vcl/source/window/window.cxx16
1 files changed, 12 insertions, 4 deletions
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 9ad12cf1e126..42e7af050f56 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -8481,11 +8481,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 );
}