sc/source/ui/drawfunc/fuins2.cxx | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-)
New commits: commit 359846431a6eac5e8d2fa26efdac3359f8f1c9f6 Author: Jaume Pujantell <[email protected]> AuthorDate: Tue Dec 9 17:01:25 2025 +0100 Commit: Miklos Vajna <[email protected]> CommitDate: Thu Dec 11 12:01:55 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]> diff --git a/sc/source/ui/drawfunc/fuins2.cxx b/sc/source/ui/drawfunc/fuins2.cxx index 4c531f68d3f4..c0d1aea60ebc 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(); } }
