diff options
author | Jan-Marek Glogowski <glogow@fbihome.de> | 2018-10-09 10:26:54 +0000 |
---|---|---|
committer | Jan-Marek Glogowski <glogow@fbihome.de> | 2018-10-09 14:10:56 +0200 |
commit | c11ee0f7b0e4e7bf4d1e2e5bb4309f24b917ce79 (patch) | |
tree | 1503bc5434af0227e8ddf56299e14b153a606016 | |
parent | 3c3bc96aef41f27ad5fea318929134df036e494f (diff) |
tdf#120387 get lock to use ImpEditView::CutCopy
ImpEditView::CutCopy releases the SolarMutex to handle clipboard
access. So lock the SolarMutex when accessing this function
through OutlinerView::Copy().
Now all paths effectively need the SolarMutex, so remove all the
intermediate locking. I guess the explicit release for the
xTransferable.is() test isn't needed.
Change-Id: Ib2a69a520bbf0ef7ba4ccb893c6489b292207f2a
Reviewed-on: https://gerrit.libreoffice.org/61580
Tested-by: Jenkins
Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
-rw-r--r-- | chart2/source/controller/main/ChartController_Tools.cxx | 61 |
1 files changed, 23 insertions, 38 deletions
diff --git a/chart2/source/controller/main/ChartController_Tools.cxx b/chart2/source/controller/main/ChartController_Tools.cxx index b1310ae68550..e552656f1da6 100644 --- a/chart2/source/controller/main/ChartController_Tools.cxx +++ b/chart2/source/controller/main/ChartController_Tools.cxx @@ -496,47 +496,32 @@ void ChartController::impl_PasteStringAsTextShape( const OUString& rString, cons void ChartController::executeDispatch_Copy() { - if ( m_pDrawViewWrapper ) + SolarMutexGuard aSolarGuard; + if (!m_pDrawViewWrapper) + return; + + OutlinerView* pOutlinerView = m_pDrawViewWrapper->GetTextEditOutlinerView(); + if (pOutlinerView) + pOutlinerView->Copy(); + else { - OutlinerView* pOutlinerView = m_pDrawViewWrapper->GetTextEditOutlinerView(); - if ( pOutlinerView ) - { - pOutlinerView->Copy(); - } - else + SdrObject* pSelectedObj = nullptr; + ObjectIdentifier aSelOID(m_aSelection.getSelectedOID()); + + if (aSelOID.isAutoGeneratedObject()) + pSelectedObj = m_pDrawModelWrapper->getNamedSdrObject( aSelOID.getObjectCID() ); + else if (aSelOID.isAdditionalShape()) + pSelectedObj = DrawViewWrapper::getSdrObject( aSelOID.getAdditionalShape() ); + + if (pSelectedObj) { - Reference< datatransfer::XTransferable > xTransferable; + Reference<datatransfer::clipboard::XClipboard> xClipboard(GetChartWindow()->GetClipboard()); + if (xClipboard.is()) { - SolarMutexGuard aSolarGuard; - if ( m_pDrawModelWrapper ) - { - SdrObject* pSelectedObj = nullptr; - ObjectIdentifier aSelOID( m_aSelection.getSelectedOID() ); - if ( aSelOID.isAutoGeneratedObject() ) - { - pSelectedObj = m_pDrawModelWrapper->getNamedSdrObject( aSelOID.getObjectCID() ); - } - else if ( aSelOID.isAdditionalShape() ) - { - pSelectedObj = DrawViewWrapper::getSdrObject( aSelOID.getAdditionalShape() ); - } - if ( pSelectedObj ) - { - xTransferable.set( new ChartTransferable( - m_pDrawModelWrapper->getSdrModel(), - pSelectedObj, - aSelOID.isAdditionalShape() ) ); - } - } - } - if ( xTransferable.is() ) - { - SolarMutexGuard aSolarGuard; - Reference<datatransfer::clipboard::XClipboard> xClipboard(GetChartWindow()->GetClipboard()); - if ( xClipboard.is() ) - { - xClipboard->setContents( xTransferable, Reference< datatransfer::clipboard::XClipboardOwner >() ); - } + Reference< datatransfer::XTransferable > xTransferable( + new ChartTransferable(m_pDrawModelWrapper->getSdrModel(), + pSelectedObj, aSelOID.isAdditionalShape())); + xClipboard->setContents(xTransferable, Reference< datatransfer::clipboard::XClipboardOwner >()); } } } |