sc/source/ui/drawfunc/fuins2.cxx | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-)
New commits: commit 8bcca1f820f059bdeaa48203f454b5e0cdb6d3de Author: Jaume Pujantell <[email protected]> AuthorDate: Tue Dec 9 17:01:25 2025 +0100 Commit: Jaume Pujantell <[email protected]> CommitDate: Thu Dec 11 23:43:21 2025 +0100 lok: sc: do not send selection callback on insert chart A LOK_CALLBACK_CELL_SELECTION_AREA is sent when inserting a chart without any data selected. This does not correspond to an actual selection and can produce view jumps. This change avoids sending the callback by calculating the data area instead of marking it. Change-Id: I2ef0db4c717a6d67ca2a6bd14f9a6b3653c5aee6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195310 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Miklos Vajna <[email protected]> (cherry picked from commit 359846431a6eac5e8d2fa26efdac3359f8f1c9f6) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195448 Tested-by: Jenkins Reviewed-by: Jaume Pujantell <[email protected]> diff --git a/sc/source/ui/drawfunc/fuins2.cxx b/sc/source/ui/drawfunc/fuins2.cxx index 262334be9ad1..649333162796 100644 --- a/sc/source/ui/drawfunc/fuins2.cxx +++ b/sc/source/ui/drawfunc/fuins2.cxx @@ -449,18 +449,25 @@ FuInsertChart::FuInsertChart(ScTabViewShell& rViewSh, vcl::Window* pWin, ScDrawV } else { - bool bAutomaticMark = false; - if ( !aMark.IsMarked() && !aMark.IsMultiMarked() ) + ScRangeList aRanges; + if (aMark.IsMarked() || aMark.IsMultiMarked()) { - rViewSh.GetViewData().GetView()->MarkDataArea(); - bAutomaticMark = true; + ScMarkData aMultiMark(std::move(aMark)); + aMultiMark.MarkToMulti(); + aMultiMark.FillRangeListWithMarks(&aRanges, false); + } + else + { + ScViewData& rViewData = rViewSh.GetViewData(); + SCTAB nTab = rViewData.CurrentTabForData(); + SCCOL nStartCol = rViewData.GetCurX(); + SCROW nStartRow = rViewData.GetCurY(); + SCCOL nEndCol = nStartCol; + SCROW nEndRow = nStartRow; + rViewData.GetDocument().GetDataArea(nTab, nStartCol, nStartRow, nEndCol, nEndRow, + true, false); + aRanges = ScRange(nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab); } - - ScMarkData aMultiMark(std::move(aMark)); - aMultiMark.MarkToMulti(); - - ScRangeList aRanges; - aMultiMark.FillRangeListWithMarks( &aRanges, false ); OUString aStr; aRanges.Format( aStr, ScRefFlags::RANGE_ABS_3D, rDocument, rDocument.GetAddressConvention() ); aRangeString = aStr; @@ -474,9 +481,6 @@ FuInsertChart::FuInsertChart(ScTabViewShell& rViewSh, vcl::Window* pWin, ScDrawV aPositionRange.ExtendTo( aRanges[ i ] ); } } - - if(bAutomaticMark) - rViewSh.GetViewData().GetView()->Unmark(); } }
