diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-08-01 17:35:23 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-08-01 17:04:45 +0000 |
commit | 4cbaa49c0ee707a2e1e1d842279b32473e8c8a28 (patch) | |
tree | dc5fa102c9e8f8dbe68d18290607ee73d365ff1e | |
parent | 2e3bc9fcee1c728d9fe91cbdf92b15d090c2b619 (diff) |
svl: implement SfxUndoAction::GetViewShellId() interface in SfxListUndoAction
Client code in sw, sd, sc and svx is adapted, the rest is just a
placeholder for now.
With this, e.g. the undo item for Writer's insert comment properly
tracks which window was used for the insertion.
Change-Id: Idad587e6ca07ba69bf59aa7013b251af8bf95bab
Reviewed-on: https://gerrit.libreoffice.org/27781
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
49 files changed, 168 insertions, 75 deletions
diff --git a/dbaccess/source/ui/querydesign/QueryTableView.cxx b/dbaccess/source/ui/querydesign/QueryTableView.cxx index cadc44903260..c6fa90fc8e6d 100644 --- a/dbaccess/source/ui/querydesign/QueryTableView.cxx +++ b/dbaccess/source/ui/querydesign/QueryTableView.cxx @@ -741,7 +741,7 @@ void OQueryTableView::RemoveTabWin(OTableWindow* pTabWin) OQueryDesignView* pParent = static_cast<OQueryDesignView*>(getDesignView()); SfxUndoManager& rUndoMgr = m_pView->getController().GetUndoManager(); - rUndoMgr.EnterListAction( OUString( ModuleRes(STR_QUERY_UNDO_TABWINDELETE) ), OUString(), 0 ); + rUndoMgr.EnterListAction( OUString( ModuleRes(STR_QUERY_UNDO_TABWINDELETE) ), OUString(), 0, -1 ); // add the Undo-Action OQueryTabWinDelUndoAct* pUndoAction = new OQueryTabWinDelUndoAct(this); diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx index d8cdc5844522..65a7c5b3c4d9 100644 --- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx +++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx @@ -941,7 +941,7 @@ bool OSelectionBrowseBox::SaveModified() strOldCellContents = pEntry->GetField(); bListAction = true; if ( !m_bInUndoMode ) - rController.GetUndoManager().EnterListAction(OUString(),OUString(),0); + rController.GetUndoManager().EnterListAction(OUString(),OUString(),0,-1); sal_Int32 nPos = m_pFieldCell->GetEntryPos(aFieldName); OUString aAliasName = pEntry->GetAlias(); @@ -2458,7 +2458,7 @@ void OSelectionBrowseBox::appendUndoAction(const OUString& _rOldValue, const OUS if ( !_bListAction ) { _bListAction = true; - static_cast<OQueryController&>(getDesignView()->getController()).GetUndoManager().EnterListAction(OUString(),OUString(),0); + static_cast<OQueryController&>(getDesignView()->getController()).GetUndoManager().EnterListAction(OUString(),OUString(),0,-1); } appendUndoAction(_rOldValue,_rNewValue,_nRow); } diff --git a/dbaccess/source/ui/querydesign/querycontroller.cxx b/dbaccess/source/ui/querydesign/querycontroller.cxx index 9ce1eaa4f24f..432160bf6519 100644 --- a/dbaccess/source/ui/querydesign/querycontroller.cxx +++ b/dbaccess/source/ui/querydesign/querycontroller.cxx @@ -678,7 +678,7 @@ void OQueryController::Execute(sal_uInt16 _nId, const Sequence< PropertyValue >& break; case SID_BROWSER_CLEAR_QUERY: { - GetUndoManager().EnterListAction( OUString( ModuleRes(STR_QUERY_UNDO_TABWINDELETE) ), OUString(), 0 ); + GetUndoManager().EnterListAction( OUString( ModuleRes(STR_QUERY_UNDO_TABWINDELETE) ), OUString(), 0, -1 ); getContainer()->clear(); GetUndoManager().LeaveListAction(); diff --git a/dbaccess/source/ui/tabledesign/TEditControl.cxx b/dbaccess/source/ui/tabledesign/TEditControl.cxx index b8dfd9da650c..0a1f4a6aa15f 100644 --- a/dbaccess/source/ui/tabledesign/TEditControl.cxx +++ b/dbaccess/source/ui/tabledesign/TEditControl.cxx @@ -648,7 +648,7 @@ void OTableEditorCtrl::CellModified( long nRow, sal_uInt16 nColId ) default: sActionDescription = ModuleRes( STR_CHANGE_COLUMN_ATTRIBUTE ); break; } - GetUndoManager().EnterListAction( sActionDescription, OUString(),0 ); + GetUndoManager().EnterListAction( sActionDescription, OUString(),0,-1 ); if (!pActFieldDescr) { const OTypeInfoMap& rTypeInfoMap = GetView()->getController().getTypeInfo(); diff --git a/editeng/source/editeng/impedit5.cxx b/editeng/source/editeng/impedit5.cxx index 224f5e1b5ba1..4dc34fc855f3 100644 --- a/editeng/source/editeng/impedit5.cxx +++ b/editeng/source/editeng/impedit5.cxx @@ -226,7 +226,7 @@ void ImpEditEngine::UndoActionStart( sal_uInt16 nId, const ESelection& aSel ) { if ( IsUndoEnabled() && !IsInUndo() ) { - GetUndoManager().EnterListAction( GetEditEnginePtr()->GetUndoComment( nId ), OUString(), nId ); + GetUndoManager().EnterListAction( GetEditEnginePtr()->GetUndoComment( nId ), OUString(), nId, -1 ); DBG_ASSERT( !pUndoMarkSelection, "UndoAction SelectionMarker?" ); pUndoMarkSelection = new ESelection( aSel ); } @@ -236,7 +236,7 @@ void ImpEditEngine::UndoActionStart( sal_uInt16 nId ) { if ( IsUndoEnabled() && !IsInUndo() ) { - GetUndoManager().EnterListAction( GetEditEnginePtr()->GetUndoComment( nId ), OUString(), nId ); + GetUndoManager().EnterListAction( GetEditEnginePtr()->GetUndoComment( nId ), OUString(), nId, -1 ); DBG_ASSERT( !pUndoMarkSelection, "UndoAction SelectionMarker?" ); } } diff --git a/framework/source/fwe/helper/undomanagerhelper.cxx b/framework/source/fwe/helper/undomanagerhelper.cxx index 88ea67f93132..19c55755d54a 100644 --- a/framework/source/fwe/helper/undomanagerhelper.cxx +++ b/framework/source/fwe/helper/undomanagerhelper.cxx @@ -525,7 +525,7 @@ namespace framework { ::comphelper::FlagGuard aNotificationGuard( m_bAPIActionRunning ); - rUndoManager.EnterListAction( i_title, OUString(), 0 ); + rUndoManager.EnterListAction( i_title, OUString(), 0, -1 ); } m_aContextVisibilities.push( i_hidden ); diff --git a/include/svl/undo.hxx b/include/svl/undo.hxx index ad80d8c63f2b..032738e57851 100644 --- a/include/svl/undo.hxx +++ b/include/svl/undo.hxx @@ -130,7 +130,7 @@ class SVL_DLLPUBLIC SfxListUndoAction : public SfxUndoAction, public SfxUndoArra public: SfxListUndoAction( - const OUString &rComment, const OUString& rRepeatComment, sal_uInt16 nId, SfxUndoArray *pFather ); + const OUString &rComment, const OUString& rRepeatComment, sal_uInt16 nId, sal_Int32 nViewShellId, SfxUndoArray *pFather ); virtual ~SfxListUndoAction(); virtual void Undo() override; @@ -143,6 +143,8 @@ public: virtual bool Merge( SfxUndoAction *pNextAction ) override; virtual OUString GetComment() const override; + /// See SfxUndoAction::GetViewShellId(). + sal_Int32 GetViewShellId() const override; virtual OUString GetRepeatComment(SfxRepeatTarget&) const override; virtual sal_uInt16 GetId() const override; @@ -228,7 +230,7 @@ namespace svl virtual bool Repeat( SfxRepeatTarget &rTarget ) = 0; virtual bool CanRepeat( SfxRepeatTarget &rTarget ) const = 0; - virtual void EnterListAction(const OUString &rComment, const OUString& rRepeatComment, sal_uInt16 nId) = 0; + virtual void EnterListAction(const OUString &rComment, const OUString& rRepeatComment, sal_uInt16 nId, sal_Int32 nViewShellId) = 0; /** leaves the list action entered with EnterListAction @return the number of the sub actions in the list which has just been left. Note that in case no such @@ -319,7 +321,7 @@ public: virtual OUString GetRepeatActionComment( SfxRepeatTarget &rTarget) const override; virtual bool Repeat( SfxRepeatTarget &rTarget ) override; virtual bool CanRepeat( SfxRepeatTarget &rTarget ) const override; - virtual void EnterListAction(const OUString &rComment, const OUString& rRepeatComment, sal_uInt16 nId) override; + virtual void EnterListAction(const OUString &rComment, const OUString& rRepeatComment, sal_uInt16 nId, sal_Int32 nViewShellId) override; virtual size_t LeaveListAction() override; virtual size_t LeaveAndMergeListAction() override; virtual bool IsInListAction() const override; diff --git a/reportdesign/inc/UndoActions.hxx b/reportdesign/inc/UndoActions.hxx index 4d7b04ebf69c..3d56330fac68 100644 --- a/reportdesign/inc/UndoActions.hxx +++ b/reportdesign/inc/UndoActions.hxx @@ -112,7 +112,7 @@ namespace rptui UndoContext( SfxUndoManager& i_undoManager, const OUString& i_undoTitle ) :m_rUndoManager( i_undoManager ) { - m_rUndoManager.EnterListAction( i_undoTitle, OUString(), 0 ); + m_rUndoManager.EnterListAction( i_undoTitle, OUString(), 0, -1 ); } ~UndoContext() diff --git a/reportdesign/source/ui/dlg/GroupsSorting.cxx b/reportdesign/source/ui/dlg/GroupsSorting.cxx index d55bc862ae51..87ebac9e3848 100644 --- a/reportdesign/source/ui/dlg/GroupsSorting.cxx +++ b/reportdesign/source/ui/dlg/GroupsSorting.cxx @@ -444,7 +444,7 @@ bool OFieldExpressionControl::SaveModified(bool _bAppendRow) { bAppend = true; OUString sUndoAction(ModuleRes(RID_STR_UNDO_APPEND_GROUP)); - m_pParent->m_pController->getUndoManager().EnterListAction( sUndoAction, OUString(), 0 ); + m_pParent->m_pController->getUndoManager().EnterListAction( sUndoAction, OUString(), 0, -1 ); xGroup = m_pParent->getGroups()->createGroup(); xGroup->setHeaderOn(true); @@ -783,7 +783,7 @@ void OFieldExpressionControl::DeleteRows() { bFirstTime = false; OUString sUndoAction(ModuleRes(RID_STR_UNDO_REMOVE_SELECTION)); - m_pParent->m_pController->getUndoManager().EnterListAction( sUndoAction, OUString(), 0 ); + m_pParent->m_pController->getUndoManager().EnterListAction( sUndoAction, OUString(), 0, -1 ); } sal_Int32 nGroupPos = m_aGroupPositions[nIndex]; diff --git a/reportdesign/source/ui/report/SectionWindow.cxx b/reportdesign/source/ui/report/SectionWindow.cxx index 09aae0ba4be6..18d3a9c8afc3 100644 --- a/reportdesign/source/ui/report/SectionWindow.cxx +++ b/reportdesign/source/ui/report/SectionWindow.cxx @@ -319,7 +319,7 @@ void OSectionWindow::zoom(const Fraction& _aZoom) IMPL_LINK_NOARG_TYPED( OSectionWindow, StartSplitHdl, Splitter*, void) { const OUString sUndoAction( ModuleRes( RID_STR_UNDO_CHANGE_SIZE ) ); - getViewsWindow()->getView()->getReportView()->getController().getUndoManager().EnterListAction( sUndoAction, OUString(), 0 ); + getViewsWindow()->getView()->getReportView()->getController().getUndoManager().EnterListAction( sUndoAction, OUString(), 0, -1 ); } IMPL_LINK_NOARG_TYPED( OSectionWindow, EndSplitHdl, Splitter*, void ) diff --git a/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx b/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx index a859d5974e19..eaf10faedca5 100644 --- a/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx +++ b/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx @@ -289,7 +289,7 @@ void ScRandomNumberGeneratorDialog::GenerateNumbers(RNG& randomGenerator, const ScDocShell* pDocShell = mpViewData->GetDocShell(); svl::IUndoManager* pUndoManager = pDocShell->GetUndoManager(); - pUndoManager->EnterListAction( aUndo, aUndo, 0 ); + pUndoManager->EnterListAction( aUndo, aUndo, 0, mpViewData->GetViewShell()->GetViewShellId() ); SCROW nRowStart = maInputRange.aStart.Row(); SCROW nRowEnd = maInputRange.aEnd.Row(); diff --git a/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx b/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx index 9e07e9404025..417de9e6811f 100644 --- a/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx +++ b/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx @@ -273,7 +273,7 @@ void ScSamplingDialog::PerformSampling() ScRange aModifiedRange; - pUndoManager->EnterListAction( aUndo, aUndo, 0 ); + pUndoManager->EnterListAction( aUndo, aUndo, 0, mViewData->GetViewShell()->GetViewShellId() ); if (mpRandomMethodRadio->IsChecked()) { diff --git a/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx b/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx index d2d3e025af38..61a426af4d29 100644 --- a/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx +++ b/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx @@ -287,7 +287,7 @@ void ScStatisticsInputOutputDialog::CalculateInputAndWriteToOutput() OUString aUndo(SC_STRLOAD(RID_STATISTICS_DLGS, GetUndoNameId())); ScDocShell* pDocShell = mViewData->GetDocShell(); svl::IUndoManager* pUndoManager = pDocShell->GetUndoManager(); - pUndoManager->EnterListAction( aUndo, aUndo, 0 ); + pUndoManager->EnterListAction( aUndo, aUndo, 0, mViewData->GetViewShell()->GetViewShellId() ); ScRange aOutputRange = ApplyOutput(pDocShell); diff --git a/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx b/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx index afb34f3a572b..cc4334e1eae8 100644 --- a/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx +++ b/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx @@ -326,7 +326,7 @@ void ScStatisticsTwoVariableDialog::CalculateInputAndWriteToOutput() OUString aUndo(SC_STRLOAD(RID_STATISTICS_DLGS, GetUndoNameId())); ScDocShell* pDocShell = mViewData->GetDocShell(); svl::IUndoManager* pUndoManager = pDocShell->GetUndoManager(); - pUndoManager->EnterListAction( aUndo, aUndo, 0 ); + pUndoManager->EnterListAction( aUndo, aUndo, 0, mViewData->GetViewShell()->GetViewShellId() ); ScRange aOutputRange = ApplyOutput(pDocShell); diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx index 76fd9c511dc3..6e533db37ab4 100644 --- a/sc/source/ui/docshell/docfunc.cxx +++ b/sc/source/ui/docshell/docfunc.cxx @@ -1789,7 +1789,12 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark, std::vector<ScRange> qIncreaseRange; OUString aUndo = ScGlobal::GetRscString( STR_UNDO_INSERTCELLS ); if (bRecord) - rDocShell.GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + { + int nViewShellId = -1; + if (pViewSh) + nViewShellId = pViewSh->GetViewShellId(); + rDocShell.GetUndoManager()->EnterListAction( aUndo, aUndo, 0, nViewShellId ); + } itr = aMark.begin(); for (; itr != itrEnd && nTabCount; ++itr) @@ -2217,7 +2222,12 @@ bool ScDocFunc::DeleteCells( const ScRange& rRange, const ScMarkData* pTabMark, bool bDeletingMerge = false; OUString aUndo = ScGlobal::GetRscString( STR_UNDO_DELETECELLS ); if (bRecord) - rDocShell.GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + { + int nViewShellId = -1; + if (ScTabViewShell* pViewSh = ScTabViewShell::GetActiveViewShell()) + nViewShellId = pViewSh->GetViewShellId(); + rDocShell.GetUndoManager()->EnterListAction( aUndo, aUndo, 0, nViewShellId ); + } itr = aMark.begin(); for (; itr != itrEnd && *itr < nTabCount; ++itr) @@ -5199,7 +5209,12 @@ void ScDocFunc::ResizeMatrix( const ScRange& rOldRange, const ScAddress& rNewEnd OUString aUndo = ScGlobal::GetRscString( STR_UNDO_RESIZEMATRIX ); bool bUndo(rDoc.IsUndoEnabled()); if (bUndo) - rDocShell.GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + { + int nViewShellId = -1; + if (ScTabViewShell* pViewSh = ScTabViewShell::GetActiveViewShell()) + nViewShellId = pViewSh->GetViewShellId(); + rDocShell.GetUndoManager()->EnterListAction( aUndo, aUndo, 0, nViewShellId ); + } aFormula = aFormula.copy(1, aFormula.getLength()-2); @@ -5252,7 +5267,10 @@ void ScDocFunc::InsertAreaLink( const OUString& rFile, const OUString& rFilter, { // group all remove and the insert action OUString aUndo = ScGlobal::GetRscString( STR_UNDO_INSERTAREALINK ); - rDocShell.GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + int nViewShellId = -1; + if (ScTabViewShell* pViewSh = ScTabViewShell::GetActiveViewShell()) + nViewShellId = pViewSh->GetViewShellId(); + rDocShell.GetUndoManager()->EnterListAction( aUndo, aUndo, 0, nViewShellId ); } ScAreaLink* pOldArea = static_cast<ScAreaLink*>(pBase); @@ -5449,7 +5467,10 @@ void ScDocFunc::ConvertFormulaToValue( const ScRange& rRange, bool bInteraction void ScDocFunc::EnterListAction( sal_uInt16 nNameResId ) { OUString aUndo( ScGlobal::GetRscString( nNameResId ) ); - rDocShell.GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + int nViewShellId = -1; + if (ScTabViewShell* pViewSh = ScTabViewShell::GetActiveViewShell()) + nViewShellId = pViewSh->GetViewShellId(); + rDocShell.GetUndoManager()->EnterListAction( aUndo, aUndo, 0, nViewShellId ); } void ScDocFunc::EndListAction() diff --git a/sc/source/ui/docshell/docsh4.cxx b/sc/source/ui/docshell/docsh4.cxx index 056a45cf6b3f..6ce6eae2e36d 100644 --- a/sc/source/ui/docshell/docsh4.cxx +++ b/sc/source/ui/docshell/docsh4.cxx @@ -196,7 +196,10 @@ void ScDocShell::Execute( SfxRequest& rReq ) if (bUndo) { OUString aStrImport = ScGlobal::GetRscString( STR_UNDO_IMPORTDATA ); - GetUndoManager()->EnterListAction( aStrImport, aStrImport, 0 ); + int nViewShellId = -1; + if (ScTabViewShell* pViewSh = ScTabViewShell::GetActiveViewShell()) + nViewShellId = pViewSh->GetViewShellId(); + GetUndoManager()->EnterListAction( aStrImport, aStrImport, 0, nViewShellId ); } ScDBData* pDBData = GetDBData( ScRange(aPos), SC_DB_IMPORT, SC_DBSEL_KEEP ); diff --git a/sc/source/ui/drawfunc/drtxtob.cxx b/sc/source/ui/drawfunc/drtxtob.cxx index 99077e499764..c93267e1bbdf 100644 --- a/sc/source/ui/drawfunc/drtxtob.cxx +++ b/sc/source/ui/drawfunc/drtxtob.cxx @@ -621,7 +621,10 @@ static void lcl_RemoveFields( OutlinerView& rOutView ) if (bUpdate) pOutliner->SetUpdateMode( false ); OUString aName = ScGlobal::GetRscString( STR_UNDO_DELETECONTENTS ); - pOutliner->GetUndoManager().EnterListAction( aName, aName, 0 ); + int nViewShellId = -1; + if (ScTabViewShell* pViewSh = ScTabViewShell::GetActiveViewShell()) + nViewShellId = pViewSh->GetViewShellId(); + pOutliner->GetUndoManager().EnterListAction( aName, aName, 0, nViewShellId ); bChanged = true; } diff --git a/sc/source/ui/drawfunc/futext3.cxx b/sc/source/ui/drawfunc/futext3.cxx index eeacf24766ab..be4bd71639a2 100644 --- a/sc/source/ui/drawfunc/futext3.cxx +++ b/sc/source/ui/drawfunc/futext3.cxx @@ -82,7 +82,7 @@ void FuText::StopEditMode() if(pCalcUndo) { const OUString aUndoStr = ScGlobal::GetRscString( STR_UNDO_EDITNOTE ); - pUndoMgr->EnterListAction( aUndoStr, aUndoStr, 0 ); + pUndoMgr->EnterListAction( aUndoStr, aUndoStr, 0, pViewShell->GetViewShellId() ); /* Note has been created before editing, if first undo action is an insert action. Needed below to decide whether to drop the diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx index 50d589260ca6..2f331a28d9f0 100644 --- a/sc/source/ui/view/cellsh1.cxx +++ b/sc/source/ui/view/cellsh1.cxx @@ -2268,7 +2268,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) size_t nRangeSize = aRanges.size(); OUString aUndo = ScGlobal::GetRscString( bShowNote ? STR_UNDO_SHOWNOTE : STR_UNDO_HIDENOTE ); - pData->GetDocShell()->GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + pData->GetDocShell()->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, pData->GetViewShell()->GetViewShellId() ); for ( size_t i = 0; i < nRangeSize; ++i ) { diff --git a/sc/source/ui/view/cellsh2.cxx b/sc/source/ui/view/cellsh2.cxx index 5a6a60b15749..b0107206e236 100644 --- a/sc/source/ui/view/cellsh2.cxx +++ b/sc/source/ui/view/cellsh2.cxx @@ -987,7 +987,7 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq ) OSL_ENSURE( pDocSh, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pDocSh is null!" ); OUString aUndo = ScGlobal::GetRscString( STR_UNDO_TEXTTOCOLUMNS ); - pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, pData->GetViewShell()->GetViewShellId() ); ScImportExport aImport( pDoc, aRange.aStart ); ScAsciiOptions aOptions; diff --git a/sc/source/ui/view/dbfunc.cxx b/sc/source/ui/view/dbfunc.cxx index cd1ccff504ed..82f3280a7710 100644 --- a/sc/source/ui/view/dbfunc.cxx +++ b/sc/source/ui/view/dbfunc.cxx @@ -36,6 +36,7 @@ #include "editable.hxx" #include "queryentry.hxx" #include "markdata.hxx" +#include "tabvwsh.hxx" ScDBFunc::ScDBFunc( vcl::Window* pParent, ScDocShell& rDocSh, ScTabViewShell* pViewShell ) : ScViewFunc( pParent, rDocSh, pViewShell ) @@ -325,7 +326,7 @@ void ScDBFunc::ToggleAutoFilter() // use a list action for the AutoFilter buttons (ScUndoAutoFilter) and the filter operation OUString aUndo = ScGlobal::GetRscString( STR_UNDO_QUERY ); - pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, GetViewData().GetViewShell()->GetViewShellId() ); ScRange aRange; pDBData->GetArea( aRange ); diff --git a/sc/source/ui/view/dbfunc3.cxx b/sc/source/ui/view/dbfunc3.cxx index 3ad24ce2318c..26916f85d4e4 100644 --- a/sc/source/ui/view/dbfunc3.cxx +++ b/sc/source/ui/view/dbfunc3.cxx @@ -66,6 +66,7 @@ #include "queryentry.hxx" #include "markdata.hxx" #include "stringutil.hxx" +#include "tabvwsh.hxx" #include <list> #include <memory> @@ -2044,7 +2045,7 @@ void ScDBFunc::ShowDataPilotSourceData( ScDPObject& rDPObj, const Sequence<sheet ::svl::IUndoManager* pMgr = GetViewData().GetDocShell()->GetUndoManager(); OUString aUndo = ScGlobal::GetRscString( STR_UNDO_DOOUTLINE ); - pMgr->EnterListAction( aUndo, aUndo, 0 ); + pMgr->EnterListAction( aUndo, aUndo, 0, GetViewData().GetViewShell()->GetViewShellId() ); OUString aNewTabName; pDoc->CreateValidTabName(aNewTabName); diff --git a/sc/source/ui/view/editsh.cxx b/sc/source/ui/view/editsh.cxx index b79ab5ccad7d..50a8ff76b6c8 100644 --- a/sc/source/ui/view/editsh.cxx +++ b/sc/source/ui/view/editsh.cxx @@ -135,7 +135,10 @@ static void lcl_RemoveAttribs( EditView& rEditView ) pEngine->SetUpdateMode(false); OUString aName = ScGlobal::GetRscString( STR_UNDO_DELETECONTENTS ); - pEngine->GetUndoManager().EnterListAction( aName, aName, 0 ); + int nViewShellId = -1; + if (ScTabViewShell* pViewSh = ScTabViewShell::GetActiveViewShell()) + nViewShellId = pViewSh->GetViewShellId(); + pEngine->GetUndoManager().EnterListAction( aName, aName, 0, nViewShellId ); rEditView.RemoveAttribs(true); pEngine->RepeatDefaults(); // paragraph attributes from cell formats must be preserved diff --git a/sc/source/ui/view/formatsh.cxx b/sc/source/ui/view/formatsh.cxx index 96c897910163..3383b1de5325 100644 --- a/sc/source/ui/view/formatsh.cxx +++ b/sc/source/ui/view/formatsh.cxx @@ -572,7 +572,7 @@ void ScFormatShell::ExecuteStyle( SfxRequest& rReq ) if ( bUndo ) { OUString aUndo = ScGlobal::GetRscString( STR_UNDO_EDITCELLSTYLE ); - pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, pTabViewShell->GetViewShellId() ); bListAction = true; } @@ -630,7 +630,7 @@ void ScFormatShell::ExecuteStyle( SfxRequest& rReq ) if ( bUndo ) { OUString aUndo = ScGlobal::GetRscString( STR_UNDO_EDITCELLSTYLE ); - pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, pTabViewShell->GetViewShellId() ); bListAction = true; } diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index fa477a3e1e38..1e7a3bd41a0c 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -4116,7 +4116,7 @@ sal_Int8 ScGridWindow::DropTransferObj( ScTransferObj* pTransObj, SCCOL nDestPos nSourceTab != nThisTab ) { OUString aUndo = ScGlobal::GetRscString( bIsMove ? STR_UNDO_MOVE : STR_UNDO_COPY ); - pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, pViewData->GetViewShell()->GetViewShellId() ); SCsCOL nCorrectCursorPosCol = 0; SCsROW nCorrectCursorPosRow = 0; @@ -4270,7 +4270,7 @@ sal_Int8 ScGridWindow::DropTransferObj( ScTransferObj* pTransObj, SCCOL nDestPos if (pSourceSh) { OUString aUndo = ScGlobal::GetRscString( STR_UNDO_COPY ); - pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, pViewData->GetViewShell()->GetViewShellId() ); bDone = true; if ( meDragInsertMode != INS_NONE ) @@ -4330,7 +4330,7 @@ sal_Int8 ScGridWindow::DropTransferObj( ScTransferObj* pTransObj, SCCOL nDestPos //! or don't start dragging on a part of a matrix OUString aUndo = ScGlobal::GetRscString( bIsMove ? STR_UNDO_MOVE : STR_UNDO_COPY ); - pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, pViewData->GetViewShell()->GetViewShellId() ); bDone = true; if ( meDragInsertMode != INS_NONE ) diff --git a/sc/source/ui/view/gridwin2.cxx b/sc/source/ui/view/gridwin2.cxx index c821f4ec9e33..edb5ad6f3ec4 100644 --- a/sc/source/ui/view/gridwin2.cxx +++ b/sc/source/ui/view/gridwin2.cxx @@ -961,7 +961,7 @@ void ScGridWindow::PagebreakMove( const MouseEvent& rMEvt, bool bUp ) if (bUndo) { OUString aUndo = ScGlobal::GetRscString( STR_UNDO_DRAG_BREAK ); - pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, pViewData->GetViewShell()->GetViewShellId() ); } bool bGrow = !bHide && nNew > nPagebreakBreak; diff --git a/sc/source/ui/view/tabvwshf.cxx b/sc/source/ui/view/tabvwshf.cxx index c4a28c071adb..91af95af42dc 100644 --- a/sc/source/ui/view/tabvwshf.cxx +++ b/sc/source/ui/view/tabvwshf.cxx @@ -655,7 +655,7 @@ void ScTabViewShell::ExecuteTable( SfxRequest& rReq ) ::svl::IUndoManager* pUndoManager = pDocSh->GetUndoManager(); OUString aUndo = ScGlobal::GetRscString( STR_UNDO_TAB_RTL ); - pUndoManager->EnterListAction( aUndo, aUndo, 0 ); + pUndoManager->EnterListAction( aUndo, aUndo, 0, rViewData.GetViewShell()->GetViewShellId() ); ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end(); for (; itr != itrEnd; ++itr) diff --git a/sc/source/ui/view/viewfun3.cxx b/sc/source/ui/view/viewfun3.cxx index 54cc27a520f4..44a79431fc0c 100644 --- a/sc/source/ui/view/viewfun3.cxx +++ b/sc/source/ui/view/viewfun3.cxx @@ -1181,7 +1181,7 @@ bool ScViewFunc::PasteFromClip( InsertDeleteFlags nFlags, ScDocument* pClipDoc, if ( bRecord ) { OUString aUndo = ScGlobal::GetRscString( pClipDoc->IsCutMode() ? STR_UNDO_MOVE : STR_UNDO_COPY ); - pUndoMgr->EnterListAction( aUndo, aUndo, 0 ); + pUndoMgr->EnterListAction( aUndo, aUndo, 0, GetViewData().GetViewShell()->GetViewShellId() ); } if (bClipOver) @@ -1576,7 +1576,7 @@ bool ScViewFunc::PasteMultiRangesFromClip( ::svl::IUndoManager* pUndoMgr = pDocSh->GetUndoManager(); OUString aUndo = ScGlobal::GetRscString( pClipDoc->IsCutMode() ? STR_UNDO_CUT : STR_UNDO_COPY); - pUndoMgr->EnterListAction(aUndo, aUndo, 0); + pUndoMgr->EnterListAction(aUndo, aUndo, 0, GetViewData().GetViewShell()->GetViewShellId()); ScUndoPasteOptions aOptions; // store options for repeat aOptions.nFunction = nFunction; @@ -1740,7 +1740,7 @@ bool ScViewFunc::PasteFromClipToMultiRanges( svl::IUndoManager* pUndoMgr = pDocSh->GetUndoManager(); OUString aUndo = ScGlobal::GetRscString( pClipDoc->IsCutMode() ? STR_UNDO_CUT : STR_UNDO_COPY); - pUndoMgr->EnterListAction(aUndo, aUndo, 0); + pUndoMgr->EnterListAction(aUndo, aUndo, 0, GetViewData().GetViewShell()->GetViewShellId()); ScUndoPasteOptions aOptions; // store options for repeat aOptions.nFunction = nFunction; @@ -1809,7 +1809,7 @@ bool ScViewFunc::MoveBlockTo( const ScRange& rSource, const ScAddress& rDestPos, // moving within one table and several tables selected -> apply to all selected tables OUString aUndo = ScGlobal::GetRscString( bCut ? STR_UNDO_MOVE : STR_UNDO_COPY ); - pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, GetViewData().GetViewShell()->GetViewShellId() ); // collect ranges of consecutive selected tables diff --git a/sc/source/ui/view/viewfun6.cxx b/sc/source/ui/view/viewfun6.cxx index 99e088ed9b4f..ae40363227b9 100644 --- a/sc/source/ui/view/viewfun6.cxx +++ b/sc/source/ui/view/viewfun6.cxx @@ -45,6 +45,7 @@ #include "drawview.hxx" #include "globalnames.hxx" #include "inputhdl.hxx" +#include "tabvwsh.hxx" #include <vector> @@ -438,7 +439,7 @@ void ScViewFunc::InsertCurrentTime(short nReqFmt, const OUString& rUndoStr) } ::svl::IUndoManager* pUndoMgr = pDocSh->GetUndoManager(); - pUndoMgr->EnterListAction(rUndoStr, rUndoStr, 0); + pUndoMgr->EnterListAction(rUndoStr, rUndoStr, 0, rViewData.GetViewShell()->GetViewShellId()); pDocSh->GetDocFunc().SetValueCell(aCurPos, fVal, true); diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx index a7d4b186d6af..5f23f4ff4f3e 100644 --- a/sc/source/ui/view/viewfunc.cxx +++ b/sc/source/ui/view/viewfunc.cxx @@ -2290,7 +2290,7 @@ void ScViewFunc::ProtectSheet( SCTAB nTab, const ScTableProtection& rProtect ) if (bUndo) { OUString aUndo = ScGlobal::GetRscString( STR_UNDO_PROTECT_TAB ); - pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, GetViewData().GetViewShell()->GetViewShellId() ); } ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end(); @@ -2320,7 +2320,7 @@ void ScViewFunc::Protect( SCTAB nTab, const OUString& rPassword ) if (bUndo) { OUString aUndo = ScGlobal::GetRscString( STR_UNDO_PROTECT_TAB ); - pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, GetViewData().GetViewShell()->GetViewShellId() ); } ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end(); @@ -2352,7 +2352,7 @@ bool ScViewFunc::Unprotect( SCTAB nTab, const OUString& rPassword ) if (bUndo) { OUString aUndo = ScGlobal::GetRscString( STR_UNDO_UNPROTECT_TAB ); - pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0 ); + pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, GetViewData().GetViewShell()->GetViewShellId() ); } ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end(); diff --git a/sd/inc/undo/undomanager.hxx b/sd/inc/undo/undomanager.hxx index ecea0ed3949e..a0200382ae27 100644 --- a/sd/inc/undo/undomanager.hxx +++ b/sd/inc/undo/undomanager.hxx @@ -31,7 +31,7 @@ class UndoManager : public SdrUndoManager public: UndoManager( sal_uInt16 nMaxUndoActionCount = 20 ); - virtual void EnterListAction(const OUString &rComment, const OUString& rRepeatComment, sal_uInt16 nId) override; + virtual void EnterListAction(const OUString &rComment, const OUString& rRepeatComment, sal_uInt16 nId, sal_Int32 nViewShellId) override; virtual void AddUndoAction( SfxUndoAction *pAction, bool bTryMerg=false ) override; diff --git a/sd/source/core/drawdoc3.cxx b/sd/source/core/drawdoc3.cxx index 33656fe616d6..c423141560a9 100644 --- a/sd/source/core/drawdoc3.cxx +++ b/sd/source/core/drawdoc3.cxx @@ -60,6 +60,7 @@ #include "../ui/inc/GraphicDocShell.hxx" #include "../ui/inc/ViewShell.hxx" #include "../ui/inc/View.hxx" +#include "../ui/inc/ViewShellBase.hxx" #include "../ui/inc/cfgids.hxx" #include "../ui/inc/strings.hrc" @@ -484,7 +485,10 @@ bool SdDrawDocument::InsertBookmarkAsPage( if( mpDocSh ) { pUndoMgr = mpDocSh->GetUndoManager(); - pUndoMgr->EnterListAction(SD_RESSTR(STR_UNDO_INSERTPAGES), "", 0); + sal_Int32 nViewShellId = -1; + if (sd::ViewShell* pViewShell = mpDocSh->GetViewShell()) + nViewShellId = pViewShell->GetViewShellBase().GetViewShellId(); + pUndoMgr->EnterListAction(SD_RESSTR(STR_UNDO_INSERTPAGES), "", 0, nViewShellId); } // Refactored copy'n'pasted layout name collection into IterateBookmarkPages @@ -1422,7 +1426,10 @@ void SdDrawDocument::SetMasterPage(sal_uInt16 nSdPageNum, if (bUndo) { - pUndoMgr->EnterListAction(SD_RESSTR(STR_UNDO_SET_PRESLAYOUT), OUString(), 0); + sal_Int32 nViewShellId = -1; + if (sd::ViewShell* pViewShell = mpDocSh->GetViewShell()) + nViewShellId = pViewShell->GetViewShellBase().GetViewShellId(); + pUndoMgr->EnterListAction(SD_RESSTR(STR_UNDO_SET_PRESLAYOUT), OUString(), 0, nViewShellId); } SdPage* pSelectedPage = GetSdPage(nSdPageNum, PK_STANDARD); diff --git a/sd/source/core/undo/undomanager.cxx b/sd/source/core/undo/undomanager.cxx index 20e13edde08a..bbf2069ce75b 100644 --- a/sd/source/core/undo/undomanager.cxx +++ b/sd/source/core/undo/undomanager.cxx @@ -27,12 +27,12 @@ UndoManager::UndoManager( sal_uInt16 nMaxUndoActionCount /* = 20 */ ) { } -void UndoManager::EnterListAction(const OUString &rComment, const OUString& rRepeatComment, sal_uInt16 nId /* =0 */) +void UndoManager::EnterListAction(const OUString &rComment, const OUString& rRepeatComment, sal_uInt16 nId, sal_Int32 nViewShellId) { if( !IsDoing() ) { ClearLinkedRedoActions(); - SdrUndoManager::EnterListAction( rComment, rRepeatComment, nId ); + SdrUndoManager::EnterListAction( rComment, rRepeatComment, nId, nViewShellId ); } } diff --git a/sd/source/ui/animations/SlideTransitionPane.cxx b/sd/source/ui/animations/SlideTransitionPane.cxx index 92f4d909677f..a59ec42f25cc 100755 --- a/sd/source/ui/animations/SlideTransitionPane.cxx +++ b/sd/source/ui/animations/SlideTransitionPane.cxx @@ -245,7 +245,7 @@ void lcl_CreateUndoForPages( return; OUString aComment( SdResId(STR_UNDO_SLIDE_PARAMS) ); - pManager->EnterListAction(aComment, aComment, 0); + pManager->EnterListAction(aComment, aComment, 0, rBase.GetViewShellId()); SdUndoGroup* pUndoGroup = new SdUndoGroup( pDoc ); pUndoGroup->SetComment( aComment ); diff --git a/sd/source/ui/func/fubullet.cxx b/sd/source/ui/func/fubullet.cxx index f03dfa544f20..ac1b89fa5ba1 100644 --- a/sd/source/ui/func/fubullet.cxx +++ b/sd/source/ui/func/fubullet.cxx @@ -25,6 +25,7 @@ #include <editeng/fontitem.hxx> #include "OutlineViewShell.hxx" #include "DrawViewShell.hxx" +#include "ViewShellBase.hxx" #include "Window.hxx" #include "drawdoc.hxx" #include "strings.hrc" @@ -128,7 +129,7 @@ void FuBullet::InsertFormattingMark( sal_Unicode cMark ) // prepare undo ::svl::IUndoManager& rUndoMgr = pOL->GetUndoManager(); rUndoMgr.EnterListAction(SD_RESSTR(STR_UNDO_INSERT_SPECCHAR), - "", 0 ); + "", 0, mpViewShell->GetViewShellBase().GetViewShellId() ); // insert given text OUString aStr( cMark ); @@ -255,8 +256,9 @@ void FuBullet::InsertSpecialCharacter( SfxRequest& rReq ) aOldSet.Put( pOV->GetAttribs() ); ::svl::IUndoManager& rUndoMgr = pOL->GetUndoManager(); + int nViewShellId = mpViewShell ? mpViewShell->GetViewShellBase().GetViewShellId() : -1; rUndoMgr.EnterListAction(SD_RESSTR(STR_UNDO_INSERT_SPECCHAR), - "", 0 ); + "", 0, nViewShellId ); pOV->InsertText(aChars, true); // set attributes (set font) diff --git a/sd/source/ui/func/fuinsfil.cxx b/sd/source/ui/func/fuinsfil.cxx index 1a4152be0e9c..54f06c2d2e4e 100644 --- a/sd/source/ui/func/fuinsfil.cxx +++ b/sd/source/ui/func/fuinsfil.cxx @@ -54,6 +54,7 @@ #include "glob.hrc" #include "sdpage.hxx" #include "strmname.h" +#include "ViewShellBase.hxx" #include "DrawViewShell.hxx" #include "OutlineViewShell.hxx" #include "DrawDocShell.hxx" @@ -629,8 +630,9 @@ void FuInsertFile::InsTextOrRTFinOlMode(SfxMedium* pMedium) nNewPages = 0; + int nViewShellId = mpViewShell ? mpViewShell->GetViewShellBase().GetViewShellId() : -1; rDocliner.GetUndoManager().EnterListAction( - SD_RESSTR(STR_UNDO_INSERT_FILE), OUString(), 0 ); + SD_RESSTR(STR_UNDO_INSERT_FILE), OUString(), 0, nViewShellId ); sal_Int32 nSourcePos = 0; SfxStyleSheet* pStyleSheet = pPage->GetStyleSheetForPresObj( PRESOBJ_OUTLINE ); diff --git a/sd/source/ui/func/fuoaprms.cxx b/sd/source/ui/func/fuoaprms.cxx index 6dc2bbabab40..7c21c3944d49 100644 --- a/sd/source/ui/func/fuoaprms.cxx +++ b/sd/source/ui/func/fuoaprms.cxx @@ -36,6 +36,7 @@ #include "glob.hrc" #include "drawdoc.hxx" #include "ViewShell.hxx" +#include "ViewShellBase.hxx" #include "anminfo.hxx" #include "unoaprms.hxx" #include "sdundogr.hxx" @@ -619,7 +620,7 @@ void FuObjectAnimationParameters::DoExecute( SfxRequest& rReq ) // with 'following curves', we have an additional UndoAction // therefore cling? here - pUndoMgr->EnterListAction(aComment, aComment, 0); + pUndoMgr->EnterListAction(aComment, aComment, 0, mpViewShell->GetViewShellBase().GetViewShellId()); // create undo group SdUndoGroup* pUndoGroup = new SdUndoGroup(mpDoc); diff --git a/sd/source/ui/func/fupage.cxx b/sd/source/ui/func/fupage.cxx index 712549e1b00f..02df0da5defc 100644 --- a/sd/source/ui/func/fupage.cxx +++ b/sd/source/ui/func/fupage.cxx @@ -59,6 +59,7 @@ #include "drawdoc.hxx" #include "DrawDocShell.hxx" #include "ViewShell.hxx" +#include "ViewShellBase.hxx" #include "DrawViewShell.hxx" #include "app.hrc" #include "unchss.hxx" @@ -417,7 +418,7 @@ const SfxItemSet* FuPage::ExecuteDialog( vcl::Window* pParent ) { OUString aComment(SdResId(STR_UNDO_CHANGE_PAGEFORMAT)); ::svl::IUndoManager* pUndoMgr = mpDocSh->GetUndoManager(); - pUndoMgr->EnterListAction(aComment, aComment, 0); + pUndoMgr->EnterListAction(aComment, aComment, 0, mpViewShell->GetViewShellBase().GetViewShellId()); SdUndoGroup* pUndoGroup = new SdUndoGroup(mpDoc); pUndoGroup->SetComment(aComment); diff --git a/sd/source/ui/sidebar/DocumentHelper.cxx b/sd/source/ui/sidebar/DocumentHelper.cxx index 0380081644b9..7c626602f6c6 100644 --- a/sd/source/ui/sidebar/DocumentHelper.cxx +++ b/sd/source/ui/sidebar/DocumentHelper.cxx @@ -27,6 +27,8 @@ #include "strings.hrc" #include "sdresid.hxx" #include "undoback.hxx" +#include "ViewShell.hxx" +#include "ViewShellBase.hxx" #include <com/sun/star/drawing/XDrawPagesSupplier.hpp> #include <com/sun/star/drawing/XDrawPages.hpp> #include <com/sun/star/frame/XComponentLoader.hpp> @@ -319,7 +321,7 @@ void DocumentHelper::AssignMasterPageToPageList ( ::svl::IUndoManager* pUndoMgr = rTargetDocument.GetDocSh()->GetUndoManager(); if( pUndoMgr ) - pUndoMgr->EnterListAction(SD_RESSTR(STR_UNDO_SET_PRESLAYOUT), OUString(), 0); + pUndoMgr->EnterListAction(SD_RESSTR(STR_UNDO_SET_PRESLAYOUT), OUString(), 0, rTargetDocument.GetDocSh()->GetViewShell()->GetViewShellBase().GetViewShellId()); SdPage* pMasterPageInDocument = ProvideMasterPage(rTargetDocument,pMasterPage,rpPageList); if (pMasterPageInDocument == nullptr) diff --git a/sd/source/ui/view/ViewShellImplementation.cxx b/sd/source/ui/view/ViewShellImplementation.cxx index 709ab58a81cf..f13c20307521 100644 --- a/sd/source/ui/view/ViewShellImplementation.cxx +++ b/sd/source/ui/view/ViewShellImplementation.cxx @@ -171,7 +171,7 @@ void ViewShell::Implementation::ProcessModifyPageSlot ( if( pUndoManager ) { OUString aComment( SdResId(STR_UNDO_MODIFY_PAGE) ); - pUndoManager->EnterListAction(aComment, aComment, 0); + pUndoManager->EnterListAction(aComment, aComment, 0, mrViewShell.GetViewShellBase().GetViewShellId()); ModifyPageUndoAction* pAction = new ModifyPageUndoAction( pDocument, pUndoPage, aNewName, aNewAutoLayout, bBVisible, bBObjsVisible); pUndoManager->AddUndoAction(pAction); diff --git a/sd/source/ui/view/drawview.cxx b/sd/source/ui/view/drawview.cxx index 6ba151f9f9f8..a05aa94b1956 100644 --- a/sd/source/ui/view/drawview.cxx +++ b/sd/source/ui/view/drawview.cxx @@ -52,6 +52,7 @@ #include "drawdoc.hxx" #include "DrawDocShell.hxx" #include "sdpage.hxx" +#include "ViewShellBase.hxx" #include "DrawViewShell.hxx" #include "pres.hxx" #include "sdresid.hxx" @@ -181,7 +182,7 @@ bool DrawView::SetAttributes(const SfxItemSet& rSet, // replace placeholder by template name OUString aComment(SD_RESSTR(STR_UNDO_CHANGE_PRES_OBJECT)); aComment = aComment.replaceFirst("$", SD_RESSTR(STR_PSEUDOSHEET_OUTLINE)); - mpDocSh->GetUndoManager()->EnterListAction( aComment, OUString(), 0 ); + mpDocSh->GetUndoManager()->EnterListAction( aComment, OUString(), 0, mpDrawViewShell->GetViewShellBase().GetViewShellId() ); std::vector<Paragraph*> aSelList; pOV->CreateSelectionList(aSelList); @@ -545,7 +546,8 @@ void DrawView::DeleteMarked() { OUString aUndo(SVX_RESSTR(STR_EditDelete)); aUndo = aUndo.replaceFirst("%1", GetDescriptionOfMarkedObjects()); - pUndoManager->EnterListAction(aUndo, aUndo, 0); + sal_Int32 nViewShellId = mpDrawViewShell ? mpDrawViewShell->GetViewShellBase().GetViewShellId() : -1; + pUndoManager->EnterListAction(aUndo, aUndo, 0, nViewShellId); } SdPage* pPage = nullptr; diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx index ca3c3704b529..abe829c7fc37 100644 --- a/sd/source/ui/view/drviews2.cxx +++ b/sd/source/ui/view/drviews2.cxx @@ -211,7 +211,7 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq) const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); if( rMarkList.GetMarkCount() == 1 ) { - pUndoManager->EnterListAction("", "", 0); + pUndoManager->EnterListAction("", "", 0, GetViewShellBase().GetViewShellId()); mpDrawView->BegUndo(); SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); diff --git a/sd/source/ui/view/outlview.cxx b/sd/source/ui/view/outlview.cxx index 024b5be5d39f..d4fc5b7e262e 100644 --- a/sd/source/ui/view/outlview.cxx +++ b/sd/source/ui/view/outlview.cxx @@ -1459,7 +1459,7 @@ void OutlineView::IgnoreCurrentPageChanges (bool bIgnoreChanges) and or the drawing document model. It will create needed undo actions */ void OutlineView::BeginModelChange() { - mrOutliner.GetUndoManager().EnterListAction("", "", 0); + mrOutliner.GetUndoManager().EnterListAction("", "", 0, mrOutlineViewShell.GetViewShellBase().GetViewShellId()); BegUndo(SD_RESSTR(STR_UNDO_CHANGE_TITLE_AND_LAYOUT)); } diff --git a/svl/source/undo/undo.cxx b/svl/source/undo/undo.cxx index 2de91945e2fc..e9b2c0681a8d 100644 --- a/svl/source/undo/undo.cxx +++ b/svl/source/undo/undo.cxx @@ -998,7 +998,8 @@ void SfxUndoManager::RemoveUndoListener( SfxUndoListener& i_listener ) * Inserts a ListUndoAction and sets its UndoArray as current. */ void SfxUndoManager::EnterListAction( const OUString& rComment, - const OUString &rRepeatComment, sal_uInt16 nId ) + const OUString &rRepeatComment, sal_uInt16 nId, + sal_Int32 nViewShellId ) { UndoManagerGuard aGuard( *m_xData ); @@ -1009,7 +1010,7 @@ void SfxUndoManager::EnterListAction( const OUString& rComment, return; m_xData->pFatherUndoArray = m_xData->pActUndoArray; - SfxListUndoAction* pAction = new SfxListUndoAction( rComment, rRepeatComment, nId, m_xData->pActUndoArray ); + SfxListUndoAction* pAction = new SfxListUndoAction( rComment, rRepeatComment, nId, nViewShellId, m_xData->pActUndoArray ); OSL_VERIFY( ImplAddUndoAction_NoNotify( pAction, false, false, aGuard ) ); // expected to succeed: all conditions under which it could fail should have been checked already m_xData->pActUndoArray = pAction; @@ -1265,12 +1266,13 @@ void SfxUndoManager::dumpAsXml(xmlTextWriterPtr pWriter) const struct SfxListUndoAction::Impl { sal_uInt16 mnId; + sal_Int32 mnViewShellId; OUString maComment; OUString maRepeatComment; - Impl( sal_uInt16 nId, const OUString& rComment, const OUString& rRepeatComment ) : - mnId(nId), maComment(rComment), maRepeatComment(rRepeatComment) {} + Impl( sal_uInt16 nId, sal_Int32 nViewShellId, const OUString& rComment, const OUString& rRepeatComment ) : + mnId(nId), mnViewShellId(nViewShellId), maComment(rComment), maRepeatComment(rRepeatComment) {} }; sal_uInt16 SfxListUndoAction::GetId() const @@ -1283,6 +1285,11 @@ OUString SfxListUndoAction::GetComment() const return mpImpl->maComment; } +sal_Int32 SfxListUndoAction::GetViewShellId() const +{ + return mpImpl->mnViewShellId; +} + void SfxListUndoAction::SetComment(const OUString& rComment) { mpImpl->maComment = rComment; @@ -1297,8 +1304,9 @@ SfxListUndoAction::SfxListUndoAction( const OUString &rComment, const OUString &rRepeatComment, sal_uInt16 nId, + sal_Int32 nViewShellId, SfxUndoArray *pFather ) : - mpImpl(new Impl(nId, rComment, rRepeatComment)) + mpImpl(new Impl(nId, nViewShellId, rComment, rRepeatComment)) { pFatherUndoArray = pFather; nMaxUndoActions = USHRT_MAX; diff --git a/svx/source/svdraw/svdmodel.cxx b/svx/source/svdraw/svdmodel.cxx index 8dafcc38c05b..b2b1475a10ac 100644 --- a/svx/source/svdraw/svdmodel.cxx +++ b/svx/source/svdraw/svdmodel.cxx @@ -93,6 +93,7 @@ #include <libxml/xmlwriter.h> #include <LibreOfficeKit/LibreOfficeKitEnums.h> #include <comphelper/lok.hxx> +#include <sfx2/viewsh.hxx> using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -464,7 +465,10 @@ void SdrModel::BegUndo() { if( mpImpl->mpUndoManager ) { - mpImpl->mpUndoManager->EnterListAction("","",0); + int nViewShellId = -1; + if (SfxViewShell* pViewShell = SfxViewShell::Current()) + nViewShellId = pViewShell->GetViewShellId(); + mpImpl->mpUndoManager->EnterListAction("","",0,nViewShellId); nUndoLevel++; } else if( IsUndoEnabled() ) @@ -485,7 +489,10 @@ void SdrModel::BegUndo(const OUString& rComment) { if( mpImpl->mpUndoManager ) { - mpImpl->mpUndoManager->EnterListAction( rComment, "", 0 ); + int nViewShellId = -1; + if (SfxViewShell* pViewShell = SfxViewShell::Current()) + nViewShellId = pViewShell->GetViewShellId(); + mpImpl->mpUndoManager->EnterListAction( rComment, "", 0, nViewShellId ); nUndoLevel++; } else if( IsUndoEnabled() ) @@ -507,7 +514,10 @@ void SdrModel::BegUndo(const OUString& rComment, const OUString& rObjDescr, SdrR { aComment = aComment.replaceFirst("%1", rObjDescr); } - mpImpl->mpUndoManager->EnterListAction( aComment,"",0 ); + int nViewShellId = -1; + if (SfxViewShell* pViewShell = SfxViewShell::Current()) + nViewShellId = pViewShell->GetViewShellId(); + mpImpl->mpUndoManager->EnterListAction( aComment,"",0,nViewShellId ); nUndoLevel++; } else if( IsUndoEnabled() ) diff --git a/sw/source/core/doc/docnew.cxx b/sw/source/core/doc/docnew.cxx index daa055b22863..42dbb2221dca 100644 --- a/sw/source/core/doc/docnew.cxx +++ b/sw/source/core/doc/docnew.cxx @@ -611,6 +611,7 @@ void SwDoc::SetDocShell( SwDocShell* pDSh ) if (mpDocShell) { mpDocShell->SetUndoManager(& GetUndoManager()); + GetUndoManager().SetDocShell(mpDocShell); } getIDocumentLinksAdministration().GetLinkManager().SetPersist( mpDocShell ); diff --git a/sw/source/core/inc/UndoManager.hxx b/sw/source/core/inc/UndoManager.hxx index 95a7cbdbfd57..68774c47d003 100644 --- a/sw/source/core/inc/UndoManager.hxx +++ b/sw/source/core/inc/UndoManager.hxx @@ -28,6 +28,7 @@ class IDocumentDrawModelAccess; class IDocumentRedlineAccess; class IDocumentState; +class SwDocShell; namespace sw { @@ -85,6 +86,7 @@ public: SwNodes const& GetUndoNodes() const; SwNodes & GetUndoNodes(); + void SetDocShell(SwDocShell* pDocShell); private: IDocumentDrawModelAccess & m_rDrawModelAccess; @@ -99,6 +101,7 @@ private: bool m_bLockUndoNoModifiedPosition : 1; /// position in Undo-Array at which Doc was saved (and is not modified) UndoStackMark m_UndoSaveMark; + SwDocShell* m_pDocShell; typedef enum { UNDO = int(true), REDO = int(false) } UndoOrRedo_t; bool impl_DoUndoRedo(UndoOrRedo_t const undoOrRedo); diff --git a/sw/source/core/undo/docundo.cxx b/sw/source/core/undo/docundo.cxx index 056179d5da9f..9f70fa0d1768 100644 --- a/sw/source/core/undo/docundo.cxx +++ b/sw/source/core/undo/docundo.cxx @@ -23,6 +23,8 @@ #include <svx/svdmodel.hxx> #include <swmodule.hxx> #include <doc.hxx> +#include <docsh.hxx> +#include <view.hxx> #include <drawdoc.hxx> #include <ndarr.hxx> #include <pam.hxx> @@ -79,6 +81,11 @@ bool UndoManager::IsUndoNodes(SwNodes const& rNodes) const return & rNodes == m_xUndoNodes.get(); } +void UndoManager::SetDocShell(SwDocShell* pDocShell) +{ + m_pDocShell = pDocShell; +} + size_t UndoManager::GetUndoActionCount(const bool bCurrentLevel) const { return SdrUndoManager::GetUndoActionCount(bCurrentLevel); @@ -212,7 +219,13 @@ UndoManager::StartUndo(SwUndoId const i_eUndoId, comment = pRewriter->Apply(comment); } - SdrUndoManager::EnterListAction(comment, comment, eUndoId); + int nViewShellId = -1; + if (m_pDocShell) + { + if (const SwView* pView = m_pDocShell->GetView()) + nViewShellId = pView->GetViewShellId(); + } + SdrUndoManager::EnterListAction(comment, comment, eUndoId, nViewShellId); return eUndoId; } @@ -563,7 +576,13 @@ bool UndoManager::Repeat(::sw::RepeatContext & rContext, sal_uInt16 const nId(pRepeatAction->GetId()); if (DoesUndo()) { - EnterListAction(comment, rcomment, nId); + int nViewShellId = -1; + if (m_pDocShell) + { + if (const SwView* pView = m_pDocShell->GetView()) + nViewShellId = pView->GetViewShellId(); + } + EnterListAction(comment, rcomment, nId, nViewShellId); } SwPaM* pTmp = rContext.m_pCurrentPaM; diff --git a/vcl/source/edit/texteng.cxx b/vcl/source/edit/texteng.cxx index deaad286e0dc..c71355780b6e 100644 --- a/vcl/source/edit/texteng.cxx +++ b/vcl/source/edit/texteng.cxx @@ -1303,7 +1303,7 @@ void TextEngine::UndoActionStart( sal_uInt16 nId ) if ( IsUndoEnabled() && !IsInUndo() ) { OUString aComment; - GetUndoManager().EnterListAction( aComment, OUString(), nId ); + GetUndoManager().EnterListAction( aComment, OUString(), nId, -1 ); } } |