diff options
29 files changed, 137 insertions, 182 deletions
diff --git a/accessibility/source/standard/vclxaccessibleedit.cxx b/accessibility/source/standard/vclxaccessibleedit.cxx index 1cce87481de9..1b9027dd05c3 100644 --- a/accessibility/source/standard/vclxaccessibleedit.cxx +++ b/accessibility/source/standard/vclxaccessibleedit.cxx @@ -513,9 +513,11 @@ sal_Bool VCLXAccessibleEdit::pasteText( sal_Int32 nIndex ) throw (IndexOutOfBoun Reference< datatransfer::clipboard::XClipboard > xClipboard = GetWindow()->GetClipboard(); if ( xClipboard.is() ) { - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); - Reference< datatransfer::XTransferable > xDataObj = xClipboard->getContents(); - Application::AcquireSolarMutex( nRef ); + Reference< datatransfer::XTransferable > xDataObj; + { + SolarMutexReleaser aReleaser; + xDataObj = xClipboard->getContents(); + } if ( xDataObj.is() ) { datatransfer::DataFlavor aFlavor; diff --git a/accessibility/source/standard/vclxaccessiblelistitem.cxx b/accessibility/source/standard/vclxaccessiblelistitem.cxx index 96f8a249fc4e..7e934e205bd7 100644 --- a/accessibility/source/standard/vclxaccessiblelistitem.cxx +++ b/accessibility/source/standard/vclxaccessiblelistitem.cxx @@ -577,12 +577,11 @@ sal_Bool SAL_CALL VCLXAccessibleListItem::copyText( sal_Int32 nStartIndex, sal_I OUString sText( getTextRange( nStartIndex, nEndIndex ) ); ::vcl::unohelper::TextDataObject* pDataObj = new ::vcl::unohelper::TextDataObject( sText ); - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; xClipboard->setContents( pDataObj, NULL ); Reference< datatransfer::clipboard::XFlushableClipboard > xFlushableClipboard( xClipboard, uno::UNO_QUERY ); if( xFlushableClipboard.is() ) xFlushableClipboard->flushClipboard(); - Application::AcquireSolarMutex( nRef ); bRet = true; } diff --git a/accessibility/source/standard/vclxaccessiblemenuitem.cxx b/accessibility/source/standard/vclxaccessiblemenuitem.cxx index 07ba2cc3116a..24f8ef546c87 100644 --- a/accessibility/source/standard/vclxaccessiblemenuitem.cxx +++ b/accessibility/source/standard/vclxaccessiblemenuitem.cxx @@ -404,15 +404,13 @@ sal_Bool VCLXAccessibleMenuItem::copyText( sal_Int32 nStartIndex, sal_Int32 nEnd OUString sText( getTextRange( nStartIndex, nEndIndex ) ); ::vcl::unohelper::TextDataObject* pDataObj = new ::vcl::unohelper::TextDataObject( sText ); - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); - xClipboard->setContents( pDataObj, NULL ); + SolarMutexReleaser aReleaser; + xClipboard->setContents( pDataObj, NULL ); Reference< datatransfer::clipboard::XFlushableClipboard > xFlushableClipboard( xClipboard, uno::UNO_QUERY ); if( xFlushableClipboard.is() ) xFlushableClipboard->flushClipboard(); - Application::AcquireSolarMutex( nRef ); - bReturn = true; } } diff --git a/accessibility/source/standard/vclxaccessiblestatusbaritem.cxx b/accessibility/source/standard/vclxaccessiblestatusbaritem.cxx index 089176fdbb66..2ac6bf1834b0 100644 --- a/accessibility/source/standard/vclxaccessiblestatusbaritem.cxx +++ b/accessibility/source/standard/vclxaccessiblestatusbaritem.cxx @@ -592,15 +592,14 @@ sal_Bool VCLXAccessibleStatusBarItem::copyText( sal_Int32 nStartIndex, sal_Int32 OUString sText( getTextRange( nStartIndex, nEndIndex ) ); ::vcl::unohelper::TextDataObject* pDataObj = new ::vcl::unohelper::TextDataObject( sText ); - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + + SolarMutexReleaser aReleaser; xClipboard->setContents( pDataObj, NULL ); Reference< datatransfer::clipboard::XFlushableClipboard > xFlushableClipboard( xClipboard, uno::UNO_QUERY ); if( xFlushableClipboard.is() ) xFlushableClipboard->flushClipboard(); - Application::AcquireSolarMutex( nRef ); - bReturn = true; } } diff --git a/accessibility/source/standard/vclxaccessibletabpage.cxx b/accessibility/source/standard/vclxaccessibletabpage.cxx index 61a091af3958..34aac110c86e 100644 --- a/accessibility/source/standard/vclxaccessibletabpage.cxx +++ b/accessibility/source/standard/vclxaccessibletabpage.cxx @@ -665,15 +665,14 @@ sal_Bool VCLXAccessibleTabPage::copyText( sal_Int32 nStartIndex, sal_Int32 nEndI OUString sText( getTextRange( nStartIndex, nEndIndex ) ); ::vcl::unohelper::TextDataObject* pDataObj = new ::vcl::unohelper::TextDataObject( sText ); - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + + SolarMutexReleaser aReleaser; xClipboard->setContents( pDataObj, NULL ); Reference< datatransfer::clipboard::XFlushableClipboard > xFlushableClipboard( xClipboard, uno::UNO_QUERY ); if( xFlushableClipboard.is() ) xFlushableClipboard->flushClipboard(); - Application::AcquireSolarMutex( nRef ); - bReturn = true; } } diff --git a/accessibility/source/standard/vclxaccessibletextcomponent.cxx b/accessibility/source/standard/vclxaccessibletextcomponent.cxx index 111f95716049..1bfa1891cddc 100644 --- a/accessibility/source/standard/vclxaccessibletextcomponent.cxx +++ b/accessibility/source/standard/vclxaccessibletextcomponent.cxx @@ -384,15 +384,14 @@ sal_Bool VCLXAccessibleTextComponent::copyText( sal_Int32 nStartIndex, sal_Int32 OUString sText( getTextRange( nStartIndex, nEndIndex ) ); ::vcl::unohelper::TextDataObject* pDataObj = new ::vcl::unohelper::TextDataObject( sText ); - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + + SolarMutexReleaser aReleaser; xClipboard->setContents( pDataObj, NULL ); Reference< datatransfer::clipboard::XFlushableClipboard > xFlushableClipboard( xClipboard, uno::UNO_QUERY ); if( xFlushableClipboard.is() ) xFlushableClipboard->flushClipboard(); - Application::AcquireSolarMutex( nRef ); - bReturn = true; } } diff --git a/accessibility/source/standard/vclxaccessibletoolboxitem.cxx b/accessibility/source/standard/vclxaccessibletoolboxitem.cxx index 8d3b455f0c0d..3209711c1156 100644 --- a/accessibility/source/standard/vclxaccessibletoolboxitem.cxx +++ b/accessibility/source/standard/vclxaccessibletoolboxitem.cxx @@ -523,15 +523,14 @@ sal_Bool SAL_CALL VCLXAccessibleToolBoxItem::copyText( sal_Int32 nStartIndex, sa OUString sText( getTextRange( nStartIndex, nEndIndex ) ); ::vcl::unohelper::TextDataObject* pDataObj = new ::vcl::unohelper::TextDataObject( sText ); - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + + SolarMutexReleaser aReleaser; xClipboard->setContents( pDataObj, NULL ); Reference< datatransfer::clipboard::XFlushableClipboard > xFlushableClipboard( xClipboard, uno::UNO_QUERY ); if( xFlushableClipboard.is() ) xFlushableClipboard->flushClipboard(); - Application::AcquireSolarMutex( nRef ); - bReturn = true; } } diff --git a/basctl/source/basicide/baside2.cxx b/basctl/source/basicide/baside2.cxx index eb9ef96c4326..81d0f34efe81 100644 --- a/basctl/source/basicide/baside2.cxx +++ b/basctl/source/basicide/baside2.cxx @@ -1405,10 +1405,13 @@ bool ModulWindow::IsPasteAllowed() Reference< datatransfer::clipboard::XClipboard > xClipboard = GetClipboard(); if ( xClipboard.is() ) { - // get clipboard content - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); - Reference< datatransfer::XTransferable > xTransf = xClipboard->getContents(); - Application::AcquireSolarMutex( nRef ); + + Reference< datatransfer::XTransferable > xTransf; + { + SolarMutexReleaser aReleaser; + // get clipboard content + xTransf = xClipboard->getContents(); + } if ( xTransf.is() ) { datatransfer::DataFlavor aFlavor; diff --git a/basctl/source/dlged/dlged.cxx b/basctl/source/dlged/dlged.cxx index 2847f58cdc5d..62109c3cc310 100644 --- a/basctl/source/dlged/dlged.cxx +++ b/basctl/source/dlged/dlged.cxx @@ -811,9 +811,8 @@ void DlgEditor::Copy() aSeqData[0] = aDialogModelBytesAny; pTrans = new DlgEdTransferableImpl( m_ClipboardDataFlavors , aSeqData ); } - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; xClipboard->setContents( pTrans , pTrans ); - Application::AcquireSolarMutex( nRef ); } } @@ -830,10 +829,13 @@ void DlgEditor::Paste() Reference< datatransfer::clipboard::XClipboard > xClipboard = GetWindow().GetClipboard(); if ( xClipboard.is() ) { - // get clipboard content - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); - Reference< datatransfer::XTransferable > xTransf = xClipboard->getContents(); - Application::AcquireSolarMutex( nRef ); + Reference< datatransfer::XTransferable > xTransf; + + { + SolarMutexReleaser aReleaser; + // get clipboard content + xTransf = xClipboard->getContents(); + } if ( xTransf.is() ) { // Is target dialog (library) localized? @@ -1061,9 +1063,9 @@ bool DlgEditor::IsPasteAllowed() if ( xClipboard.is() ) { // get clipboard content - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; Reference< datatransfer::XTransferable > xTransf = xClipboard->getContents(); - Application::AcquireSolarMutex( nRef ); + return xTransf.is() && xTransf->isDataFlavorSupported( m_ClipboardDataFlavors[0] ); } return false; diff --git a/cui/source/dialogs/colorpicker.cxx b/cui/source/dialogs/colorpicker.cxx index 13fe8351ece6..798597ba6bdc 100644 --- a/cui/source/dialogs/colorpicker.cxx +++ b/cui/source/dialogs/colorpicker.cxx @@ -204,18 +204,15 @@ void HexColorControl::Paste() { ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > xDataObj; - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); - try { + SolarMutexReleaser aReleaser; xDataObj = aClipboard->getContents(); } catch( const ::com::sun::star::uno::Exception& ) { } - Application::AcquireSolarMutex( nRef ); - if ( xDataObj.is() ) { ::com::sun::star::datatransfer::DataFlavor aFlavor; diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx index 62402e01b904..cd9809da2f1a 100644 --- a/desktop/source/app/app.cxx +++ b/desktop/source/app/app.cxx @@ -1588,22 +1588,22 @@ int Desktop::Main() } // Release solar mutex just before we wait for our client to connect - int nAcquireCount = Application::ReleaseSolarMutex(); + { + SolarMutexReleaser aReleaser; - // Post user event to startup first application component window - // We have to send this OpenClients message short before execute() to - // minimize the risk that this message overtakes type detection construction!! - Application::PostUserEvent( LINK( this, Desktop, OpenClients_Impl ) ); + // Post user event to startup first application component window + // We have to send this OpenClients message short before execute() to + // minimize the risk that this message overtakes type detection construction!! + Application::PostUserEvent( LINK( this, Desktop, OpenClients_Impl ) ); - // Post event to enable acceptors - Application::PostUserEvent( LINK( this, Desktop, EnableAcceptors_Impl) ); + // Post event to enable acceptors + Application::PostUserEvent( LINK( this, Desktop, EnableAcceptors_Impl) ); - // The configuration error handler currently is only for startup - aConfigErrHandler.deactivate(); + // The configuration error handler currently is only for startup + aConfigErrHandler.deactivate(); - // Acquire solar mutex just before we enter our message loop - if ( nAcquireCount ) - Application::AcquireSolarMutex( nAcquireCount ); + // Acquire solar mutex just before we enter our message loop + } // call Application::Execute to process messages in vcl message loop SAL_INFO( "desktop.app", "PERFORMANCE - enter Application::Execute()" ); @@ -1711,12 +1711,13 @@ int Desktop::doShutdown() FlushConfiguration(); // The acceptors in the AcceptorMap must be released (in DeregisterServices) // with the solar mutex unlocked, to avoid deadlock: - sal_uLong nAcquireCount = Application::ReleaseSolarMutex(); - DeregisterServices(); + { + SolarMutexReleaser aReleaser; + DeregisterServices(); #if HAVE_FEATURE_SCRIPTING - StarBASIC::DetachAllDocBasicItems(); + StarBASIC::DetachAllDocBasicItems(); #endif - Application::AcquireSolarMutex(nAcquireCount); + } // be sure that path/language options gets destroyed before // UCB is deinitialized SAL_INFO( "desktop.app", "-> dispose path/language options" ); diff --git a/editeng/source/editeng/impedit.cxx b/editeng/source/editeng/impedit.cxx index f0af59472a0a..3553707d3470 100644 --- a/editeng/source/editeng/impedit.cxx +++ b/editeng/source/editeng/impedit.cxx @@ -1313,22 +1313,23 @@ void ImpEditView::CutCopy( ::com::sun::star::uno::Reference< ::com::sun::star::d { uno::Reference<datatransfer::XTransferable> xData = pEditEngine->CreateTransferable( GetEditSelection() ); - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); - - try { - rxClipboard->setContents( xData, NULL ); + SolarMutexReleaser aReleaser; - // #87756# FlushClipboard, but it would be better to become a TerminateListener to the Desktop and flush on demand... - uno::Reference< datatransfer::clipboard::XFlushableClipboard > xFlushableClipboard( rxClipboard, uno::UNO_QUERY ); - if( xFlushableClipboard.is() ) - xFlushableClipboard->flushClipboard(); - } - catch( const ::com::sun::star::uno::Exception& ) - { - } + try + { + rxClipboard->setContents( xData, NULL ); + + // #87756# FlushClipboard, but it would be better to become a TerminateListener to the Desktop and flush on demand... + uno::Reference< datatransfer::clipboard::XFlushableClipboard > xFlushableClipboard( rxClipboard, uno::UNO_QUERY ); + if( xFlushableClipboard.is() ) + xFlushableClipboard->flushClipboard(); + } + catch( const ::com::sun::star::uno::Exception& ) + { + } - Application::AcquireSolarMutex( nRef ); + } if ( bCut ) { @@ -1346,17 +1347,14 @@ void ImpEditView::Paste( ::com::sun::star::uno::Reference< ::com::sun::star::dat { uno::Reference< datatransfer::XTransferable > xDataObj; - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); - try - { - xDataObj = rxClipboard->getContents(); - } + { + SolarMutexReleaser aReleaser; + xDataObj = rxClipboard->getContents(); + } catch( const ::com::sun::star::uno::Exception& ) - { - } - - Application::AcquireSolarMutex( nRef ); + { + } if ( xDataObj.is() && EditEngine::HasValidData( xDataObj ) ) { diff --git a/extensions/source/bibliography/framectr.cxx b/extensions/source/bibliography/framectr.cxx index 81617fadd9f6..77ea3255c251 100644 --- a/extensions/source/bibliography/framectr.cxx +++ b/extensions/source/bibliography/framectr.cxx @@ -730,15 +730,15 @@ void BibFrameController_Impl::addStatusListener( if(xClip.is()) { uno::Reference< datatransfer::XTransferable > xDataObj; - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + try - { - xDataObj = xClip->getContents(); - } + { + SolarMutexReleaser aReleaser; + xDataObj = xClip->getContents(); + } catch( const uno::Exception& ) - { - } - Application::AcquireSolarMutex( nRef ); + { + } if ( xDataObj.is() ) { diff --git a/fpicker/source/win32/filepicker/asyncrequests.cxx b/fpicker/source/win32/filepicker/asyncrequests.cxx index e8ca9bcc64d4..87e53fac2c48 100644 --- a/fpicker/source/win32/filepicker/asyncrequests.cxx +++ b/fpicker/source/win32/filepicker/asyncrequests.cxx @@ -28,7 +28,7 @@ namespace vista{ static void lcl_sleep( ::osl::Condition& aCondition, ::sal_Int32 nMilliSeconds ) { - sal_uLong nAcquireCount = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; if (nMilliSeconds < 1) aCondition.wait(0); @@ -39,8 +39,6 @@ static void lcl_sleep( ::osl::Condition& aCondition, aTime.Nanosec = (nMilliSeconds % 1000) * 1000000; aCondition.wait(&aTime); } - - Application::AcquireSolarMutex( nAcquireCount ); } void Request::wait( ::sal_Int32 nMilliSeconds ) diff --git a/framework/source/uielement/complextoolbarcontroller.cxx b/framework/source/uielement/complextoolbarcontroller.cxx index 49026882bddb..871c7b2bba6a 100644 --- a/framework/source/uielement/complextoolbarcontroller.cxx +++ b/framework/source/uielement/complextoolbarcontroller.cxx @@ -198,7 +198,7 @@ throw ( RuntimeException, std::exception ) IMPL_STATIC_LINK_NOINSTANCE( ComplexToolbarController, ExecuteHdl_Impl, ExecuteInfo*, pExecuteInfo ) { - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; try { // Asynchronous execution as this can lead to our own destruction! @@ -210,14 +210,13 @@ IMPL_STATIC_LINK_NOINSTANCE( ComplexToolbarController, ExecuteHdl_Impl, ExecuteI { } - Application::AcquireSolarMutex( nRef ); delete pExecuteInfo; return 0; } IMPL_STATIC_LINK_NOINSTANCE( ComplexToolbarController, Notify_Impl, NotifyInfo*, pNotifyInfo ) { - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; try { // Asynchronous execution: As this can lead to our own destruction! @@ -233,7 +232,6 @@ IMPL_STATIC_LINK_NOINSTANCE( ComplexToolbarController, Notify_Impl, NotifyInfo*, { } - Application::AcquireSolarMutex( nRef ); delete pNotifyInfo; return 0; } diff --git a/framework/source/uielement/generictoolbarcontroller.cxx b/framework/source/uielement/generictoolbarcontroller.cxx index f72ae03d5e16..f59982a729cd 100644 --- a/framework/source/uielement/generictoolbarcontroller.cxx +++ b/framework/source/uielement/generictoolbarcontroller.cxx @@ -271,7 +271,7 @@ throw ( RuntimeException, std::exception ) IMPL_STATIC_LINK_NOINSTANCE( GenericToolbarController, ExecuteHdl_Impl, ExecuteInfo*, pExecuteInfo ) { - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; try { // Asynchronous execution as this can lead to our own destruction! @@ -283,7 +283,6 @@ IMPL_STATIC_LINK_NOINSTANCE( GenericToolbarController, ExecuteHdl_Impl, ExecuteI { } - Application::AcquireSolarMutex( nRef ); delete pExecuteInfo; return 0; } diff --git a/framework/source/uielement/menubarmanager.cxx b/framework/source/uielement/menubarmanager.cxx index 8cfe80c5ce45..af103c3c6fd9 100644 --- a/framework/source/uielement/menubarmanager.cxx +++ b/framework/source/uielement/menubarmanager.cxx @@ -1019,9 +1019,8 @@ IMPL_LINK( MenuBarManager, Select, Menu *, pMenu ) if ( xDispatch.is() ) { - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; xDispatch->dispatch( aTargetURL, aArgs ); - Application::AcquireSolarMutex( nRef ); } return 1; diff --git a/starmath/source/accessibility.cxx b/starmath/source/accessibility.cxx index 6973dfda16b1..cd6c58704140 100644 --- a/starmath/source/accessibility.cxx +++ b/starmath/source/accessibility.cxx @@ -756,15 +756,13 @@ sal_Bool SAL_CALL SmGraphicAccessible::copyText( OUString sText( getTextRange(nStartIndex, nEndIndex) ); ::vcl::unohelper::TextDataObject* pDataObj = new ::vcl::unohelper::TextDataObject( sText ); - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; xClipboard->setContents( pDataObj, NULL ); Reference< datatransfer::clipboard::XFlushableClipboard > xFlushableClipboard( xClipboard, uno::UNO_QUERY ); if( xFlushableClipboard.is() ) xFlushableClipboard->flushClipboard(); - Application::AcquireSolarMutex( nRef ); - bReturn = true; } } diff --git a/svtools/source/misc/transfer.cxx b/svtools/source/misc/transfer.cxx index 4e0ef5c3cb06..9de9349cfa1d 100644 --- a/svtools/source/misc/transfer.cxx +++ b/svtools/source/misc/transfer.cxx @@ -571,7 +571,7 @@ void TransferableHelper::ImplFlush() if( mxClipboard.is() ) { Reference< XFlushableClipboard > xFlushableClipboard( mxClipboard, UNO_QUERY ); - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; try { @@ -582,8 +582,6 @@ void TransferableHelper::ImplFlush() { OSL_FAIL( "Could not flush clipboard" ); } - - Application::AcquireSolarMutex( nRef ); } } @@ -1019,7 +1017,7 @@ void TransferableHelper::CopyToClipboard( vcl::Window *pWindow ) const if( mxClipboard.is() && !mxTerminateListener.is() ) { - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; try { @@ -1032,8 +1030,6 @@ void TransferableHelper::CopyToClipboard( vcl::Window *pWindow ) const catch( const ::com::sun::star::uno::Exception& ) { } - - Application::AcquireSolarMutex( nRef ); } } @@ -1049,7 +1045,7 @@ void TransferableHelper::CopyToSelection( vcl::Window *pWindow ) const if( xSelection.is() && !mxTerminateListener.is() ) { - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; try { @@ -1062,8 +1058,6 @@ void TransferableHelper::CopyToSelection( vcl::Window *pWindow ) const catch( const ::com::sun::star::uno::Exception& ) { } - - Application::AcquireSolarMutex( nRef ); } } @@ -1092,7 +1086,7 @@ void TransferableHelper::StartDrag( vcl::Window* pWindow, sal_Int8 nDnDSourceAct // we can receive drag events from the system only in the main // thread #if !defined(MACOSX) - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; #endif try @@ -1108,11 +1102,6 @@ void TransferableHelper::StartDrag( vcl::Window* pWindow, sal_Int8 nDnDSourceAct catch( const ::com::sun::star::uno::Exception& ) { } - - // See above for the reason of this define -#if !defined(MACOSX) - Application::AcquireSolarMutex( nRef ); -#endif } } @@ -2283,24 +2272,22 @@ TransferableDataHelper TransferableDataHelper::CreateFromSelection( vcl::Window* if( xSelection.is() ) { - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); - - try - { - Reference< XTransferable > xTransferable( xSelection->getContents() ); + SolarMutexReleaser aReleaser; - if( xTransferable.is() ) + try { - aRet = TransferableDataHelper( xTransferable ); - aRet.mxClipboard = xSelection; - } - } - catch( const ::com::sun::star::uno::Exception& ) - { - } - - Application::AcquireSolarMutex( nRef ); - } + Reference< XTransferable > xTransferable( xSelection->getContents() ); + + if( xTransferable.is() ) + { + aRet = TransferableDataHelper( xTransferable ); + aRet.mxClipboard = xSelection; + } + } + catch( const ::com::sun::star::uno::Exception& ) + { + } + } return aRet; } diff --git a/svtools/source/uno/contextmenuhelper.cxx b/svtools/source/uno/contextmenuhelper.cxx index 3d7058cd2aba..943c2d868fd8 100644 --- a/svtools/source/uno/contextmenuhelper.cxx +++ b/svtools/source/uno/contextmenuhelper.cxx @@ -612,7 +612,7 @@ ContextMenuHelper::completeMenuProperties( IMPL_STATIC_LINK_NOINSTANCE( ContextMenuHelper, ExecuteHdl_Impl, ExecuteInfo*, pExecuteInfo ) { // Release solar mutex to prevent deadlocks with clipboard thread - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; try { // Asynchronous execution as this can lead to our own destruction while we are @@ -623,8 +623,6 @@ IMPL_STATIC_LINK_NOINSTANCE( ContextMenuHelper, ExecuteHdl_Impl, ExecuteInfo*, p { } - // Acquire solar mutex again - Application::AcquireSolarMutex( nRef ); delete pExecuteInfo; return 0; } diff --git a/sw/source/uibase/uiview/viewling.cxx b/sw/source/uibase/uiview/viewling.cxx index 13f54784a94a..cf80a288540d 100644 --- a/sw/source/uibase/uiview/viewling.cxx +++ b/sw/source/uibase/uiview/viewling.cxx @@ -608,7 +608,7 @@ public: IMPL_STATIC_LINK_NOINSTANCE( AsyncExecute, ExecuteHdl_Impl, ExecuteInfo*, pExecuteInfo ) { - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; try { // Asynchronous execution as this can lead to our own destruction! @@ -620,7 +620,6 @@ IMPL_STATIC_LINK_NOINSTANCE( AsyncExecute, ExecuteHdl_Impl, ExecuteInfo*, pExecu { } - Application::AcquireSolarMutex( nRef ); delete pExecuteInfo; return 0; } diff --git a/uui/source/iahndl.cxx b/uui/source/iahndl.cxx index afbc211160aa..15a34929196d 100644 --- a/uui/source/iahndl.cxx +++ b/uui/source/iahndl.cxx @@ -178,9 +178,8 @@ UUIInteractionHelper::handleRequest( HandleData aHD(rRequest); Link aLink(&aHD,handlerequest); Application::PostUserEvent(aLink,this); - sal_uLong locks = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; aHD.wait(); - Application::AcquireSolarMutex(locks); return aHD.bHandled; } else @@ -235,9 +234,8 @@ UUIInteractionHelper::getStringFromRequest( HandleData aHD(rRequest); Link aLink(&aHD,getstringfromrequest); Application::PostUserEvent(aLink,this); - sal_uLong locks = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; aHD.wait(); - Application::AcquireSolarMutex(locks); return aHD.m_aResult; } else diff --git a/vcl/source/app/session.cxx b/vcl/source/app/session.cxx index 294a58172689..5db137f4d463 100644 --- a/vcl/source/app/session.cxx +++ b/vcl/source/app/session.cxx @@ -134,10 +134,9 @@ void VCLSession::callSaveRequested( bool bShutdown, bool bCancelable ) } } - sal_uLong nAcquireCount = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; for( std::list< Listener >::const_iterator it = aListeners.begin(); it != aListeners.end(); ++it ) it->m_xListener->doSave( bShutdown, bCancelable ); - Application::AcquireSolarMutex( nAcquireCount ); } void VCLSession::callInteractionGranted( bool bInteractionGranted ) @@ -162,11 +161,9 @@ void VCLSession::callInteractionGranted( bool bInteractionGranted ) } } - sal_uLong nAcquireCount = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; for( std::list< Listener >::const_iterator it = aListeners.begin(); it != aListeners.end(); ++it ) it->m_xListener->approveInteraction( bInteractionGranted ); - - Application::AcquireSolarMutex( nAcquireCount ); } void VCLSession::callShutdownCancelled() @@ -180,10 +177,9 @@ void VCLSession::callShutdownCancelled() m_bInteractionRequested = m_bInteractionDone = m_bInteractionGranted = false; } - sal_uLong nAcquireCount = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; for( std::list< Listener >::const_iterator it = aListeners.begin(); it != aListeners.end(); ++it ) it->m_xListener->shutdownCanceled(); - Application::AcquireSolarMutex( nAcquireCount ); } void VCLSession::callQuit() @@ -197,14 +193,13 @@ void VCLSession::callQuit() m_bInteractionRequested = m_bInteractionDone = m_bInteractionGranted = false; } - sal_uLong nAcquireCount = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; for( std::list< Listener >::const_iterator it = aListeners.begin(); it != aListeners.end(); ++it ) { css::uno::Reference< XSessionManagerListener2 > xListener2( it->m_xListener, UNO_QUERY ); if( xListener2.is() ) xListener2->doQuit(); } - Application::AcquireSolarMutex( nAcquireCount ); } void VCLSession::SalSessionEventProc( void* pData, SalSessionEvent* pEvent ) diff --git a/vcl/source/app/svmain.cxx b/vcl/source/app/svmain.cxx index 9d59eac6ec5b..1f597e5eb404 100644 --- a/vcl/source/app/svmain.cxx +++ b/vcl/source/app/svmain.cxx @@ -176,9 +176,10 @@ int ImplSVMain() // here .. if( pSVData->mxAccessBridge.is() ) { - sal_uLong nCount = Application::ReleaseSolarMutex(); - pSVData->mxAccessBridge->dispose(); - Application::AcquireSolarMutex(nCount); + { + SolarMutexReleaser aReleaser; + pSVData->mxAccessBridge->dispose(); + } pSVData->mxAccessBridge.clear(); } @@ -472,7 +473,7 @@ void DeInitVCL() if( pSVData->mpApp || pSVData->maDeInitHook.IsSet() ) { - sal_uLong nCount = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; // call deinit to deinitialize application class // soffice/sfx implementation disposes the global service manager // Warning: After this call you can't call uno services @@ -484,7 +485,6 @@ void DeInitVCL() { pSVData->maDeInitHook.Call(0); } - Application::AcquireSolarMutex(nCount); } if ( pSVData->maAppData.mpSettings ) diff --git a/vcl/source/app/unohelp2.cxx b/vcl/source/app/unohelp2.cxx index 2f2e3d66124f..280f04eeadeb 100644 --- a/vcl/source/app/unohelp2.cxx +++ b/vcl/source/app/unohelp2.cxx @@ -47,7 +47,7 @@ namespace vcl { namespace unohelper { TextDataObject* pDataObj = new TextDataObject( rContent ); - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; try { rxClipboard->setContents( pDataObj, NULL ); @@ -59,7 +59,6 @@ namespace vcl { namespace unohelper { catch( const uno::Exception& ) { } - Application::AcquireSolarMutex( nRef ); } // ::com::sun::star::uno::XInterface diff --git a/vcl/source/control/edit.cxx b/vcl/source/control/edit.cxx index fb6dde7d307d..f704e66d458b 100644 --- a/vcl/source/control/edit.cxx +++ b/vcl/source/control/edit.cxx @@ -1285,17 +1285,14 @@ void Edit::ImplPaste( uno::Reference< datatransfer::clipboard::XClipboard >& rxC { uno::Reference< datatransfer::XTransferable > xDataObj; - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); - try - { - xDataObj = rxClipboard->getContents(); - } + { + SolarMutexReleaser aReleaser; + xDataObj = rxClipboard->getContents(); + } catch( const ::com::sun::star::uno::Exception& ) - { - } - - Application::AcquireSolarMutex( nRef ); + { + } if ( xDataObj.is() ) { @@ -1983,11 +1980,14 @@ void Edit::Command( const CommandEvent& rCEvt ) // only paste if text available in clipboard bool bData = false; uno::Reference< datatransfer::clipboard::XClipboard > xClipboard = GetClipboard(); + if ( xClipboard.is() ) { - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); - uno::Reference< datatransfer::XTransferable > xDataObj = xClipboard->getContents(); - Application::AcquireSolarMutex( nRef ); + uno::Reference< datatransfer::XTransferable > xDataObj; + { + SolarMutexReleaser aReleaser; + xDataObj = xClipboard->getContents(); + } if ( xDataObj.is() ) { datatransfer::DataFlavor aFlavor; diff --git a/vcl/source/edit/textview.cxx b/vcl/source/edit/textview.cxx index 030365f4ddbb..cafbbf52f9c4 100644 --- a/vcl/source/edit/textview.cxx +++ b/vcl/source/edit/textview.cxx @@ -1132,7 +1132,7 @@ void TextView::Copy( uno::Reference< datatransfer::clipboard::XClipboard >& rxCl if ( mpImpl->mpTextEngine->HasAttrib( TEXTATTR_HYPERLINK ) ) // then also as HTML mpImpl->mpTextEngine->Write( pDataObj->GetHTMLStream(), &mpImpl->maSelection, true ); - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; try { @@ -1145,8 +1145,6 @@ void TextView::Copy( uno::Reference< datatransfer::clipboard::XClipboard >& rxCl catch( const ::com::sun::star::uno::Exception& ) { } - - Application::AcquireSolarMutex( nRef ); } } @@ -1162,17 +1160,14 @@ void TextView::Paste( uno::Reference< datatransfer::clipboard::XClipboard >& rxC { uno::Reference< datatransfer::XTransferable > xDataObj; - const sal_uInt32 nRef = Application::ReleaseSolarMutex(); - try - { - xDataObj = rxClipboard->getContents(); - } + { + SolarMutexReleaser aReleaser; + xDataObj = rxClipboard->getContents(); + } catch( const ::com::sun::star::uno::Exception& ) - { - } - - Application::AcquireSolarMutex( nRef ); + { + } if ( xDataObj.is() ) { diff --git a/vcl/source/helper/threadex.cxx b/vcl/source/helper/threadex.cxx index 37d8ef892a9b..a62bcfc3ab88 100644 --- a/vcl/source/helper/threadex.cxx +++ b/vcl/source/helper/threadex.cxx @@ -59,7 +59,7 @@ long SolarThreadExecutor::impl_execute( const TimeValue* _pTimeout ) { osl_resetCondition( m_aStart ); osl_resetCondition( m_aFinish ); - sal_uLong nSolarMutexCount = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; ImplSVEvent * nEvent = Application::PostUserEvent( LINK( this, SolarThreadExecutor, worker ) ); if ( osl_cond_result_timeout == osl_waitCondition( m_aStart, _pTimeout ) ) { @@ -68,8 +68,6 @@ long SolarThreadExecutor::impl_execute( const TimeValue* _pTimeout ) } else osl_waitCondition( m_aFinish, NULL ); - if( nSolarMutexCount ) - Application::AcquireSolarMutex( nSolarMutexCount ); } return m_nReturn; } diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx index c9db00486637..537bac3f249d 100644 --- a/vcl/source/window/winproc.cxx +++ b/vcl/source/window/winproc.cxx @@ -510,7 +510,7 @@ bool ImplHandleMouseEvent( vcl::Window* pWindow, MouseNotifyEvent nSVEvent, bool nClicks, false ); - sal_uLong nCount = Application::ReleaseSolarMutex(); + SolarMutexReleaser aReleaser; // FIXME: where do I get Action from ? ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDragSource > xDragSource = pMouseDownWin->GetDragSource(); @@ -520,8 +520,6 @@ bool ImplHandleMouseEvent( vcl::Window* pWindow, MouseNotifyEvent nSVEvent, bool static_cast < DNDListenerContainer * > ( xDragGestureRecognizer.get() )->fireDragGestureEvent( 0, relLoc.X(), relLoc.Y(), xDragSource, ::com::sun::star::uno::makeAny( aMouseEvent ) ); } - - Application::AcquireSolarMutex( nCount ); } } } |