sw/qa/uitest/writer_tests7/tdf156784.py | 38 ++++++++++++++++++++++++++++++++ sw/source/core/crsr/crsrsh.cxx | 9 +++++++ sw/source/core/frmedt/fetab.cxx | 3 +- 3 files changed, 49 insertions(+), 1 deletion(-)
New commits: commit 49bfb463aebcfbe3935bc9989d9a1c5689149a09 Author: László Németh <nem...@numbertext.org> AuthorDate: Thu Aug 24 16:27:16 2023 +0200 Commit: László Németh <nem...@numbertext.org> CommitDate: Tue Aug 29 15:06:04 2023 +0200 tdf#156784 sw tracked table column: fix crash at Select All Section starting table with hidden deleted first column freezed at Select All, resulting crash because of infinite recursion during waiting frame creation of a hidden cell without frame in Hide Changes mode. Regression from commit d1004cdd6a445ae73673b0ca360ae034b0ec09f2 "tdf#150673 sw offapi: add change tracking of table column deletion". Change-Id: I15d9fa0138261d7a95c6e34a8d07fb2e001d0c7d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156056 Tested-by: Jenkins Reviewed-by: László Németh <nem...@numbertext.org> (cherry picked from commit 15639650efb2fa44e96fdc2bd46a64931b9a3329) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156134 Tested-by: László Németh <nem...@numbertext.org> diff --git a/sw/qa/uitest/writer_tests7/tdf156784.py b/sw/qa/uitest/writer_tests7/tdf156784.py new file mode 100644 index 000000000000..5cac8fc628db --- /dev/null +++ b/sw/qa/uitest/writer_tests7/tdf156784.py @@ -0,0 +1,38 @@ +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +from uitest.framework import UITestCase +from uitest.uihelper.common import get_url_for_data_file + +# Bug 156784 - crash fix: Select All in section starting table with hidden first column + +class tdf156784(UITestCase): + def test_tdf156784(self): + with self.ui_test.load_file(get_url_for_data_file("TC-table-del-add.docx")) as self.document: + + xToolkit = self.xContext.ServiceManager.createInstance('com.sun.star.awt.Toolkit') + + # accept all tracked changes + self.xUITest.executeCommand(".uno:AcceptAllTrackedChanges") + + # delete first column + self.xUITest.executeCommand(".uno:DeleteColumns") + + # hide changes + self.xUITest.executeCommand(".uno:ShowTrackedChanges") + + # select cell content + self.xUITest.executeCommand(".uno:SelectAll") + + # This resulted crashing (select section starting table with hidden first column) + self.xUITest.executeCommand(".uno:SelectAll") + + # show changes + self.xUITest.executeCommand(".uno:ShowTrackedChanges") + +# vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/sw/source/core/crsr/crsrsh.cxx b/sw/source/core/crsr/crsrsh.cxx index f22e0bc9450a..4d69e2a6d705 100644 --- a/sw/source/core/crsr/crsrsh.cxx +++ b/sw/source/core/crsr/crsrsh.cxx @@ -77,6 +77,7 @@ #include <view.hxx> #include <hints.hxx> #include <tools/json_writer.hxx> +#include <redline.hxx> using namespace com::sun::star; using namespace util; @@ -2168,6 +2169,14 @@ void SwCursorShell::UpdateCursor( sal_uInt16 eFlags, bool bIdleEnd ) // created, because there used to be a Frame here! if ( !pFrame ) { + // skip, if it is a hidden deleted cell without frame + if ( GetLayout()->IsHideRedlines() ) + { + const SwStartNode* pNd = pShellCursor->GetPointNode().FindTableBoxStartNode(); + if ( pNd && pNd->GetTableBox()->GetRedlineType() == RedlineType::Delete ) + return; + } + do { CalcLayout(); diff --git a/sw/source/core/frmedt/fetab.cxx b/sw/source/core/frmedt/fetab.cxx index dced56c1f2a0..59b031ce772a 100644 --- a/sw/source/core/frmedt/fetab.cxx +++ b/sw/source/core/frmedt/fetab.cxx @@ -1175,7 +1175,8 @@ bool SwFEShell::CanUnProtectCells() const { SwFrame *pFrame = GetCurrFrame(); do { - pFrame = pFrame->GetUpper(); + if ( pFrame ) + pFrame = pFrame->GetUpper(); } while ( pFrame && !pFrame->IsCellFrame() ); if( pFrame ) {