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 14ef87ed39dfb7c26e7bc5e6f2ca874dfe134768
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Mon Aug 11 17:05:59 2025 +0200
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Tue Sep 16 09:24:27 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>
    (cherry picked from commit 6d43bdda7fa8c632e0c69234f356f05608d57bad)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190944
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>

diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 58fa689962b9..6502df8e8e3e 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -2405,7 +2405,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 4907d970c004..621fa86e29cb 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 513fc782bbbf..c4c819cf0b90 100644
--- a/sc/source/ui/view/viewdata.cxx
+++ b/sc/source/ui/view/viewdata.cxx
@@ -1225,18 +1225,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;
 }

Reply via email to