summaryrefslogtreecommitdiff
path: root/sc/source/ui
diff options
context:
space:
mode:
authorAhmet Hakan Çelik <ahmethcelik@gmail.com>2021-07-25 12:31:28 +0300
committerHeiko Tietze <heiko.tietze@documentfoundation.org>2022-02-01 11:18:13 +0100
commitc82634d5a222120b3a95cff1b950a7f7a1f5ded1 (patch)
tree574994061b9be010a0ede1ed40c4a5621d4ca716 /sc/source/ui
parentddaebfb270c4b52ddebaf678a9352312c75247fa (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.cxx38
-rw-r--r--sc/source/ui/view/viewdata.cxx6
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 )