diff options
author | Ahmet Hakan Çelik <ahmethcelik@gmail.com> | 2021-07-25 12:31:28 +0300 |
---|---|---|
committer | Heiko Tietze <heiko.tietze@documentfoundation.org> | 2022-02-01 11:18:13 +0100 |
commit | c82634d5a222120b3a95cff1b950a7f7a1f5ded1 (patch) | |
tree | 574994061b9be010a0ede1ed40c4a5621d4ca716 /sc/source/ui | |
parent | ddaebfb270c4b52ddebaf678a9352312c75247fa (diff) |
tdf#64345: EDITING: Selected area looses selection when switching sheet
Change-Id: Idf59c3968319053431741394e2ad218d7be6463d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119478
Tested-by: Jenkins
Reviewed-by: Heiko Tietze <heiko.tietze@documentfoundation.org>
Diffstat (limited to 'sc/source/ui')
-rw-r--r-- | sc/source/ui/view/tabview2.cxx | 38 | ||||
-rw-r--r-- | sc/source/ui/view/viewdata.cxx | 6 |
2 files changed, 44 insertions, 0 deletions
diff --git a/sc/source/ui/view/tabview2.cxx b/sc/source/ui/view/tabview2.cxx index aae991eaf799..bf2f1603815b 100644 --- a/sc/source/ui/view/tabview2.cxx +++ b/sc/source/ui/view/tabview2.cxx @@ -595,6 +595,44 @@ void ScTabView::MarkCursor( SCCOL nCurX, SCROW nCurY, SCTAB nCurZ, if ( !bCols && !bRows ) aHdrFunc.SetAnchorFlag( false ); + + std::vector<std::vector<std::pair<SCTAB, ScRange>>>& vMark(rMark.GetSheetsMark()); + std::vector<std::pair<SCTAB, ScRange>> tempVect; + + bool bFound = false; + for (size_t i=0; i<vMark.size(); i++) + { + if (vMark[i][0].first == nCurZ) + { + vMark[i][0].second = aMarkRange; + bFound = true; + break; + } + } + + if (!bFound) + { + tempVect.emplace_back(nCurZ, aMarkRange); + vMark.emplace_back(tempVect); + } + + // Sorting sheets + if (vMark.size() > 2) + { + for (size_t k=0; k<vMark.size()-1; k++) + { + auto rFirst = vMark[k]; + for (size_t j=k; j<vMark.size(); j++) + { + auto rSecond = vMark[j]; + if (rSecond[0].first < rFirst[0].first) + { + vMark[k] = rSecond; + vMark[j] = rFirst; + } + } + } + } } void ScTabView::GetPageMoveEndPosition(SCCOL nMovX, SCROW nMovY, SCCOL& rPageX, SCROW& rPageY) diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx index 539013b79372..0ee8ef57d91e 100644 --- a/sc/source/ui/view/viewdata.cxx +++ b/sc/source/ui/view/viewdata.cxx @@ -940,6 +940,8 @@ void ScViewData::DeleteTabs( SCTAB nTab, SCTAB nSheets ) void ScViewData::CopyTab( SCTAB nSrcTab, SCTAB nDestTab ) { + std::vector<std::vector<std::pair<SCTAB, ScRange>>>& vMark(maMarkData.GetSheetsMark()); + if (nDestTab==SC_TAB_APPEND) nDestTab = mrDoc.GetTableCount() - 1; // something had to have been copied @@ -961,6 +963,10 @@ void ScViewData::CopyTab( SCTAB nSrcTab, SCTAB nDestTab ) UpdateCurrentTab(); maMarkData.InsertTab(nDestTab); + + if (!vMark.empty()) + vMark.clear(); + } void ScViewData::MoveTab( SCTAB nSrcTab, SCTAB nDestTab ) |