sc/inc/document.hxx | 2 +- sc/qa/unit/tiledrendering/SheetViewTest.cxx | 13 +++++++++++++ sc/source/ui/view/viewdata.cxx | 8 ++++---- 3 files changed, 18 insertions(+), 5 deletions(-)
New commits: commit 6d43bdda7fa8c632e0c69234f356f05608d57bad Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Mon Aug 11 17:05:59 2025 +0200 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Fri Sep 12 20:56:13 2025 +0200 sc: make sure we are not using the sheet view tab directly Modified testSheetViewAutoFilter exposed an issue when we change the tab to the sheet view tab, which we shouldn't change directly. This fixes the issue by fixing the GetSimpleArea to return the correct tab when constructing a ScRange object. Change-Id: I677d25383cddd12037d12ab747fb4d3eff45e2b3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189385 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index ae5f61464d3e..281618cd8115 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -2403,7 +2403,7 @@ public: SCTAB GetSheetViewNumber(SCTAB nTab, sc::SheetViewID nID); bool HasSheetViews(SCTAB nTab) const; - std::shared_ptr<sc::SheetViewManager> GetSheetViewManager(SCTAB nTable); + SC_DLLPUBLIC std::shared_ptr<sc::SheetViewManager> GetSheetViewManager(SCTAB nTable); bool IsSheetView(SCTAB nTab) const; void SetSheetView(SCTAB nTab, bool bSheetView); diff --git a/sc/qa/unit/tiledrendering/SheetViewTest.cxx b/sc/qa/unit/tiledrendering/SheetViewTest.cxx index 639dd967007d..834bfe2d8ea1 100644 --- a/sc/qa/unit/tiledrendering/SheetViewTest.cxx +++ b/sc/qa/unit/tiledrendering/SheetViewTest.cxx @@ -16,6 +16,7 @@ #include <LibreOfficeKit/LibreOfficeKitEnums.h> #include <sctestviewcallback.hxx> #include <docuno.hxx> +#include <SheetView.hxx> using namespace css; @@ -39,6 +40,7 @@ CPPUNIT_TEST_FIXTURE(SheetViewTest, testSheetViewAutoFilter) ScTabViewShell* pTabView1 = aView1.getTabViewShell(); SfxLokHelper::createView(); + Scheduler::ProcessEventsToIdle(); ScTestViewCallback aView2; ScTabViewShell* pTabView2 = aView2.getTabViewShell(); @@ -66,13 +68,24 @@ CPPUNIT_TEST_FIXTURE(SheetViewTest, testSheetViewAutoFilter) CPPUNIT_ASSERT_EQUAL(u"3"_ustr, pTabView2->GetCurrentString(0, 3)); CPPUNIT_ASSERT_EQUAL(u"7"_ustr, pTabView2->GetCurrentString(0, 4)); + // Check what sheet we currently have selected for view 1 & 2 + CPPUNIT_ASSERT_EQUAL(SCTAB(0), pTabView1->GetViewData().GetTabNumber()); + CPPUNIT_ASSERT_EQUAL(SCTAB(0), pTabView2->GetViewData().GetTabNumber()); + // Create a new sheet view for view 2 dispatchCommand(mxComponent, u".uno:NewSheetView"_ustr, {}); Scheduler::ProcessEventsToIdle(); + // Check what sheet we currently have selected for view 1 & 2 + CPPUNIT_ASSERT_EQUAL(SCTAB(0), pTabView1->GetViewData().GetTabNumber()); + CPPUNIT_ASSERT_EQUAL(SCTAB(0), pTabView2->GetViewData().GetTabNumber()); + // Sort AutoFilter descending dispatchCommand(mxComponent, u".uno:SortDescending"_ustr, {}); + CPPUNIT_ASSERT_EQUAL(SCTAB(0), pTabView1->GetViewData().GetTabNumber()); + CPPUNIT_ASSERT_EQUAL(SCTAB(0), pTabView2->GetViewData().GetTabNumber()); + // Check view 2 - sorted CPPUNIT_ASSERT_EQUAL(u"7"_ustr, pTabView2->GetCurrentString(0, 1)); CPPUNIT_ASSERT_EQUAL(u"5"_ustr, pTabView2->GetCurrentString(0, 2)); diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx index b538e384b750..577b0a085f7d 100644 --- a/sc/source/ui/view/viewdata.cxx +++ b/sc/source/ui/view/viewdata.cxx @@ -1144,18 +1144,18 @@ ScMarkType ScViewData::GetSimpleArea( ScRange & rRange, ScMarkData & rNewMark ) if ( nRow < 1 || nCol < 1 ) { // This kind of cells do exist. Not sure if that is intended or a bug. - rRange = ScRange(GetCurX(), GetCurY(), CurrentTabForData()); + rRange = ScRange(GetCurX(), GetCurY(), GetTabNumber()); } else { - rRange = ScRange(GetCurX(), GetCurY(), CurrentTabForData(), - GetCurX() + nCol - 1, GetCurY() + nRow - 1, CurrentTabForData()); + rRange = ScRange(GetCurX(), GetCurY(), GetTabNumber(), + GetCurX() + nCol - 1, GetCurY() + nRow - 1, GetTabNumber()); if ( ScViewUtil::HasFiltered(rRange, GetDocument()) ) eMarkType = SC_MARK_SIMPLE_FILTERED; } } else - rRange = ScRange(GetCurX(), GetCurY(), CurrentTabForData()); + rRange = ScRange(GetCurX(), GetCurY(), GetTabNumber()); } return eMarkType; }