diff options
author | Maxim Monastirsky <momonasmon@gmail.com> | 2020-02-09 13:13:34 +0200 |
---|---|---|
committer | Maxim Monastirsky <momonasmon@gmail.com> | 2020-02-09 18:11:04 +0100 |
commit | c4818b1caff43e64f657666ec85d289f196cf2e0 (patch) | |
tree | e74280b8bc9637a3fb5d98c875d682c50928307f | |
parent | 0f1bd7f0f79a054f1af1c5aadd81f586f2e4f879 (diff) |
Fix undo and redo dropdowns in non-sfx2 modules
after commit c34edadf5bd3d1d9f3c9c056af28b8964d8f1ca0
("rework SvxUndoRedoControl to be a PopupWindowController")
accidentally enabled them there, instead of the simple
buttons those modules used to have. Just implement the
necessary stuff, instead of hiding the dropdown again.
Change-Id: Ic93114f7f3cec8e96f3389ceb0d52552cde02a83
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88333
Tested-by: Jenkins
Reviewed-by: Maxim Monastirsky <momonasmon@gmail.com>
-rw-r--r-- | chart2/source/controller/main/CommandDispatchContainer.cxx | 5 | ||||
-rw-r--r-- | chart2/source/controller/main/UndoCommandDispatch.cxx | 26 | ||||
-rw-r--r-- | dbaccess/source/ui/misc/singledoccontroller.cxx | 42 | ||||
-rw-r--r-- | dbaccess/source/ui/querydesign/JoinController.cxx | 2 | ||||
-rw-r--r-- | dbaccess/source/ui/tabledesign/TableController.cxx | 2 | ||||
-rw-r--r-- | reportdesign/source/ui/report/ReportController.cxx | 28 | ||||
-rw-r--r-- | svx/source/tbxctrls/lboxctrl.cxx | 2 |
7 files changed, 91 insertions, 16 deletions
diff --git a/chart2/source/controller/main/CommandDispatchContainer.cxx b/chart2/source/controller/main/CommandDispatchContainer.cxx index 8056dfccecb9..b007ebe5c652 100644 --- a/chart2/source/controller/main/CommandDispatchContainer.cxx +++ b/chart2/source/controller/main/CommandDispatchContainer.cxx @@ -84,13 +84,16 @@ Reference< frame::XDispatch > CommandDispatchContainer::getDispatchForURL( { uno::Reference< frame::XModel > xModel( m_xModel ); - if( xModel.is() && ( rURL.Path == "Undo" || rURL.Path == "Redo" ) ) + if( xModel.is() && ( rURL.Path == "Undo" || rURL.Path == "Redo" || + rURL.Path == "GetUndoStrings" || rURL.Path == "GetRedoStrings" ) ) { CommandDispatch * pDispatch = new UndoCommandDispatch( m_xContext, xModel ); xResult.set( pDispatch ); pDispatch->initialize(); m_aCachedDispatches[ ".uno:Undo" ].set( xResult ); m_aCachedDispatches[ ".uno:Redo" ].set( xResult ); + m_aCachedDispatches[ ".uno:GetUndoStrings" ].set( xResult ); + m_aCachedDispatches[ ".uno:GetRedoStrings" ].set( xResult ); m_aToBeDisposedDispatches.push_back( xResult ); } else if( xModel.is() && ( rURL.Path == "Context" || rURL.Path == "ModifiedStatus" ) ) diff --git a/chart2/source/controller/main/UndoCommandDispatch.cxx b/chart2/source/controller/main/UndoCommandDispatch.cxx index 677ab8fb77ad..afa76424abd8 100644 --- a/chart2/source/controller/main/UndoCommandDispatch.cxx +++ b/chart2/source/controller/main/UndoCommandDispatch.cxx @@ -64,23 +64,30 @@ void UndoCommandDispatch::fireStatusEvent( if( m_xUndoManager.is() ) { const bool bFireAll = rURL.isEmpty(); - uno::Any aUndoState, aRedoState; + uno::Any aUndoState, aRedoState, aUndoStrings, aRedoStrings; if( m_xUndoManager->isUndoPossible()) aUndoState <<= SvtResId( STR_UNDO ) + m_xUndoManager->getCurrentUndoActionTitle(); if( m_xUndoManager->isRedoPossible()) aRedoState <<= SvtResId( STR_REDO ) + m_xUndoManager->getCurrentRedoActionTitle(); + aUndoStrings <<= m_xUndoManager->getAllUndoActionTitles(); + aRedoStrings <<= m_xUndoManager->getAllRedoActionTitles(); + if( bFireAll || rURL == ".uno:Undo" ) fireStatusEventForURL( ".uno:Undo", aUndoState, m_xUndoManager->isUndoPossible(), xSingleListener ); if( bFireAll || rURL == ".uno:Redo" ) fireStatusEventForURL( ".uno:Redo", aRedoState, m_xUndoManager->isRedoPossible(), xSingleListener ); + if( bFireAll || rURL == ".uno:GetUndoStrings" ) + fireStatusEventForURL( ".uno:GetUndoStrings", aUndoStrings, true, xSingleListener ); + if( bFireAll || rURL == ".uno:GetRedoStrings" ) + fireStatusEventForURL( ".uno:GetRedoStrings", aRedoStrings, true, xSingleListener ); } } // ____ XDispatch ____ void SAL_CALL UndoCommandDispatch::dispatch( const util::URL& URL, - const Sequence< beans::PropertyValue >& /* Arguments */ ) + const Sequence< beans::PropertyValue >& Arguments ) { if( m_xUndoManager.is() ) { @@ -88,10 +95,17 @@ void SAL_CALL UndoCommandDispatch::dispatch( SolarMutexGuard aSolarGuard; try { - if ( URL.Path == "Undo" ) - m_xUndoManager->undo(); - else - m_xUndoManager->redo(); + sal_Int16 nCount( 1 ); + if ( Arguments.hasElements() && Arguments[0].Name == URL.Path ) + Arguments[0].Value >>= nCount; + + while ( nCount-- ) + { + if ( URL.Path == "Undo" ) + m_xUndoManager->undo(); + else + m_xUndoManager->redo(); + } } catch( const document::UndoFailedException& ) { diff --git a/dbaccess/source/ui/misc/singledoccontroller.cxx b/dbaccess/source/ui/misc/singledoccontroller.cxx index bd915b0a5547..fdad96749447 100644 --- a/dbaccess/source/ui/misc/singledoccontroller.cxx +++ b/dbaccess/source/ui/misc/singledoccontroller.cxx @@ -120,6 +120,28 @@ namespace dbaui } break; + case SID_GETUNDOSTRINGS: + { + size_t nCount(GetUndoManager().GetUndoActionCount()); + Sequence<OUString> aSeq(nCount); + for (size_t n = 0; n < nCount; ++n) + aSeq[n] = GetUndoManager().GetUndoActionComment(n); + aReturn.aValue <<= aSeq; + aReturn.bEnabled = true; + break; + } + + case SID_GETREDOSTRINGS: + { + size_t nCount(GetUndoManager().GetRedoActionCount()); + Sequence<OUString> aSeq(nCount); + for (size_t n = 0; n < nCount; ++n) + aSeq[n] = GetUndoManager().GetRedoActionComment(n); + aReturn.aValue <<= aSeq; + aReturn.bEnabled = true; + break; + } + default: aReturn = OSingleDocumentController_Base::GetState(_nId); } @@ -130,16 +152,24 @@ namespace dbaui switch ( _nId ) { case ID_BROWSER_UNDO: - GetUndoManager().Undo(); - InvalidateFeature( ID_BROWSER_UNDO ); - InvalidateFeature( ID_BROWSER_REDO ); - break; - case ID_BROWSER_REDO: - GetUndoManager().Redo(); + { + sal_Int16 nCount(1); + if (_rArgs.hasElements() && _rArgs[0].Name != "KeyModifier") + _rArgs[0].Value >>= nCount; + + while (nCount--) + { + if (_nId == ID_BROWSER_UNDO) + GetUndoManager().Undo(); + else + GetUndoManager().Redo(); + } + InvalidateFeature( ID_BROWSER_UNDO ); InvalidateFeature( ID_BROWSER_REDO ); break; + } default: OSingleDocumentController_Base::Execute( _nId, _rArgs ); diff --git a/dbaccess/source/ui/querydesign/JoinController.cxx b/dbaccess/source/ui/querydesign/JoinController.cxx index 37560014c4c7..4ad6b6c23337 100644 --- a/dbaccess/source/ui/querydesign/JoinController.cxx +++ b/dbaccess/source/ui/querydesign/JoinController.cxx @@ -307,6 +307,8 @@ void OJoinController::describeSupportedFeatures() implDescribeSupportedFeature( ".uno:Undo", ID_BROWSER_UNDO, CommandGroup::EDIT ); implDescribeSupportedFeature( ".uno:AddTable", ID_BROWSER_ADDTABLE,CommandGroup::EDIT ); implDescribeSupportedFeature( ".uno:EditDoc", ID_BROWSER_EDITDOC, CommandGroup::EDIT ); + implDescribeSupportedFeature( ".uno:GetUndoStrings", SID_GETUNDOSTRINGS ); + implDescribeSupportedFeature( ".uno:GetRedoStrings", SID_GETREDOSTRINGS ); } sal_Bool SAL_CALL OJoinController::suspend(sal_Bool _bSuspend) diff --git a/dbaccess/source/ui/tabledesign/TableController.cxx b/dbaccess/source/ui/tabledesign/TableController.cxx index 4d0cb028b148..c32cce6c97ce 100644 --- a/dbaccess/source/ui/tabledesign/TableController.cxx +++ b/dbaccess/source/ui/tabledesign/TableController.cxx @@ -606,6 +606,8 @@ void OTableController::describeSupportedFeatures() implDescribeSupportedFeature( ".uno:SaveAs", ID_BROWSER_SAVEASDOC, CommandGroup::DOCUMENT ); implDescribeSupportedFeature( ".uno:DBIndexDesign", SID_INDEXDESIGN, CommandGroup::APPLICATION ); implDescribeSupportedFeature( ".uno:EditDoc", ID_BROWSER_EDITDOC, CommandGroup::EDIT ); + implDescribeSupportedFeature( ".uno:GetUndoStrings", SID_GETUNDOSTRINGS ); + implDescribeSupportedFeature( ".uno:GetRedoStrings", SID_GETREDOSTRINGS ); } void OTableController::impl_onModifyChanged() diff --git a/reportdesign/source/ui/report/ReportController.cxx b/reportdesign/source/ui/report/ReportController.cxx index 21f1a1021a9f..faeed5df7f21 100644 --- a/reportdesign/source/ui/report/ReportController.cxx +++ b/reportdesign/source/ui/report/ReportController.cxx @@ -453,6 +453,24 @@ FeatureState OReportController::GetState(sal_uInt16 _nId) const } } break; + case SID_GETUNDOSTRINGS: + case SID_GETREDOSTRINGS: + { + size_t ( SfxUndoManager::*retrieveCount )( bool const ) const = + ( _nId == SID_GETUNDOSTRINGS ) ? &SfxUndoManager::GetUndoActionCount : &SfxUndoManager::GetRedoActionCount; + + OUString ( SfxUndoManager::*retrieveComment )( size_t, bool const ) const = + ( _nId == SID_GETUNDOSTRINGS ) ? &SfxUndoManager::GetUndoActionComment : &SfxUndoManager::GetRedoActionComment; + + SfxUndoManager& rUndoManager( getUndoManager() ); + size_t nCount(( rUndoManager.*retrieveCount )( SfxUndoManager::TopLevel )); + Sequence<OUString> aSeq(nCount); + for (size_t n = 0; n < nCount; ++n) + aSeq[n] = (rUndoManager.*retrieveComment)( n, SfxUndoManager::TopLevel ); + aReturn.aValue <<= aSeq; + aReturn.bEnabled = true; + } + break; case SID_OBJECT_RESIZING: case SID_OBJECT_SMALLESTWIDTH: case SID_OBJECT_SMALLESTHEIGHT: @@ -1016,9 +1034,13 @@ void OReportController::Execute(sal_uInt16 _nId, const Sequence< PropertyValue > const OXUndoEnvironment::OUndoMode aLock( m_aReportModel->GetUndoEnv() ); bool ( SfxUndoManager::*doXDo )() = ( _nId == SID_UNDO ) ? &SfxUndoManager::Undo : &SfxUndoManager::Redo; - SfxUndoManager& rUndoManager( getUndoManager() ); - (rUndoManager.*doXDo)(); + + sal_Int16 nCount(1); + if (aArgs.hasElements() && aArgs[0].Name != "KeyModifier") + aArgs[0].Value >>= nCount; + while (nCount--) + (rUndoManager.*doXDo)(); InvalidateAll(); if (m_xGroupsFloater && m_xGroupsFloater->getDialog()->get_visible()) m_xGroupsFloater->UpdateData(); @@ -2022,6 +2044,8 @@ void OReportController::describeSupportedFeatures() implDescribeSupportedFeature( ".uno:SelectAllEdits", SID_SELECT_ALL_EDITS); implDescribeSupportedFeature( ".uno:CollapseSection", SID_COLLAPSE_SECTION); implDescribeSupportedFeature( ".uno:ExpandSection", SID_EXPAND_SECTION); + implDescribeSupportedFeature( ".uno:GetUndoStrings", SID_GETUNDOSTRINGS); + implDescribeSupportedFeature( ".uno:GetRedoStrings", SID_GETREDOSTRINGS); } void OReportController::impl_onModifyChanged() diff --git a/svx/source/tbxctrls/lboxctrl.cxx b/svx/source/tbxctrls/lboxctrl.cxx index 43bd5d419f5d..0f8b12019263 100644 --- a/svx/source/tbxctrls/lboxctrl.cxx +++ b/svx/source/tbxctrls/lboxctrl.cxx @@ -154,7 +154,7 @@ void SvxUndoRedoControl::initialize( const css::uno::Sequence< css::uno::Any >& ToolBox* pToolBox = nullptr; sal_uInt16 nId = 0; - if (getToolboxId(nId, &pToolBox) && pToolBox->GetItemCommand(nId) == m_aCommandURL) + if (getToolboxId(nId, &pToolBox)) { pToolBox->SetItemBits(nId, ToolBoxItemBits::DROPDOWN | pToolBox->GetItemBits(nId)); aDefaultTooltip = pToolBox->GetQuickHelpText(nId); |