diff options
-rw-r--r-- | desktop/source/lib/init.cxx | 1 | ||||
-rw-r--r-- | include/LibreOfficeKit/LibreOfficeKitEnums.h | 16 | ||||
-rw-r--r-- | libreofficekit/source/gtk/lokdocview.cxx | 1 | ||||
-rw-r--r-- | sc/source/ui/inc/tabvwsh.hxx | 4 | ||||
-rw-r--r-- | sc/source/ui/undo/undoblk.cxx | 36 | ||||
-rw-r--r-- | sc/source/ui/undo/undoblk2.cxx | 7 | ||||
-rw-r--r-- | sc/source/ui/undo/undodat.cxx | 28 | ||||
-rw-r--r-- | sc/source/ui/view/dbfunc.cxx | 5 | ||||
-rw-r--r-- | sc/source/ui/view/dbfunc3.cxx | 42 | ||||
-rw-r--r-- | sc/source/ui/view/tabvwshc.cxx | 44 | ||||
-rw-r--r-- | sc/source/ui/view/viewfun2.cxx | 17 | ||||
-rw-r--r-- | sc/source/ui/view/viewfunc.cxx | 21 |
12 files changed, 210 insertions, 12 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 68c5430113bc..730c105434fe 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -1447,6 +1447,7 @@ void CallbackFlushHandler::queue(const int type, const char* data) case LOK_CALLBACK_INVALIDATE_HEADER: case LOK_CALLBACK_WINDOW: case LOK_CALLBACK_CALC_FUNCTION_LIST: + case LOK_CALLBACK_INVALIDATE_SHEET_GEOMETRY: { const auto& pos = std::find_if(m_queue.rbegin(), m_queue.rend(), [type] (const queue_type::value_type& elem) { return (elem.Type == type); }); diff --git a/include/LibreOfficeKit/LibreOfficeKitEnums.h b/include/LibreOfficeKit/LibreOfficeKitEnums.h index 9a1ca4c2acf6..86ca9de556af 100644 --- a/include/LibreOfficeKit/LibreOfficeKitEnums.h +++ b/include/LibreOfficeKit/LibreOfficeKitEnums.h @@ -752,6 +752,20 @@ typedef enum * } */ LOK_CALLBACK_FORM_FIELD_BUTTON = 49, + + /** + * This is Calc specific. Indicates that some or all of the current sheet's + * geometry data has changed. Clients must request a full or partial sheet + * geometry data set. + * + * The payload specifies what part of the sheet geometry data has changed. + * The payload format is: + * 'all|rows|columns [sizes [hidden [filtered [groups]]]]' + * + * For example, the payload 'rows sizes groups' indicates that the row heights + * and row-groups data have changed. + */ + LOK_CALLBACK_INVALIDATE_SHEET_GEOMETRY = 50, } LibreOfficeKitCallbackType; @@ -880,6 +894,8 @@ static inline const char* lokCallbackTypeToString(int nType) return "LOK_CALLBACK_TAB_STOP_LIST"; case LOK_CALLBACK_FORM_FIELD_BUTTON: return "LOK_CALLBACK_FORM_FIELD_BUTTON"; + case LOK_CALLBACK_INVALIDATE_SHEET_GEOMETRY: + return "LOK_CALLBACK_INVALIDATE_SHEET_GEOMETRY"; } assert(!"Unknown LibreOfficeKitCallbackType type."); diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx index e77e0ddc8e9d..2b2e4b85e89c 100644 --- a/libreofficekit/source/gtk/lokdocview.cxx +++ b/libreofficekit/source/gtk/lokdocview.cxx @@ -1384,6 +1384,7 @@ callback (gpointer pData) case LOK_CALLBACK_CALC_FUNCTION_LIST: case LOK_CALLBACK_TAB_STOP_LIST: case LOK_CALLBACK_FORM_FIELD_BUTTON: + case LOK_CALLBACK_INVALIDATE_SHEET_GEOMETRY: { // TODO: Implement me break; diff --git a/sc/source/ui/inc/tabvwsh.hxx b/sc/source/ui/inc/tabvwsh.hxx index bf00763a42a1..cffc7cf1bb3c 100644 --- a/sc/source/ui/inc/tabvwsh.hxx +++ b/sc/source/ui/inc/tabvwsh.hxx @@ -392,6 +392,10 @@ public: /// Emits a LOK_CALLBACK_INVALIDATE_HEADER for all views whose current tab is equal to nCurrentTabIndex static void notifyAllViewsHeaderInvalidation(SfxViewShell* pForViewShell, HeaderType eHeaderType, SCTAB nCurrentTabIndex); static bool isAnyEditViewInRange(SfxViewShell* pForViewShell, bool bColumns, SCCOLROW nStart, SCCOLROW nEnd); + /// Emits a LOK_CALLBACK_INVALIDATE_SHEET_GEOMETRY for all views whose current tab + /// is equal to nCurrentTabIndex + static void notifyAllViewsSheetGeomInvalidation(SfxViewShell* pForViewShell, bool bColumns, bool bRows, bool bSizes, + bool bHidden, bool bFiltered, bool bGroups, SCTAB nCurrentTabIndex); css::uno::Reference<css::drawing::XShapes> getSelectedXShapes(); static css::uno::Reference<css::datatransfer::XTransferable2> GetClipData(vcl::Window* pWin); diff --git a/sc/source/ui/undo/undoblk.cxx b/sc/source/ui/undo/undoblk.cxx index 3484d7d2ad0e..2e431a067251 100644 --- a/sc/source/ui/undo/undoblk.cxx +++ b/sc/source/ui/undo/undoblk.cxx @@ -274,11 +274,21 @@ void ScUndoInsertCells::DoChange( const bool bUndo ) if (comphelper::LibreOfficeKit::isActive()) { - if (eCmd == INS_INSCOLS_BEFORE || eCmd == INS_INSCOLS_AFTER || eCmd == INS_CELLSRIGHT) - ScTabViewShell::notifyAllViewsHeaderInvalidation(pViewShell, COLUMN_HEADER, pViewShell->GetViewData().GetTabNo()); + SCTAB nTab = pViewShell->GetViewData().GetTabNo(); + bool bColsAffected = (eCmd == INS_INSCOLS_BEFORE || eCmd == INS_INSCOLS_AFTER || eCmd == INS_CELLSRIGHT); + bool bRowsAffected = (eCmd == INS_INSROWS_BEFORE || eCmd == INS_INSROWS_AFTER || eCmd == INS_CELLSDOWN); - if (eCmd == INS_INSROWS_BEFORE || eCmd == INS_INSROWS_AFTER || eCmd == INS_CELLSDOWN) - ScTabViewShell::notifyAllViewsHeaderInvalidation(pViewShell, ROW_HEADER, pViewShell->GetViewData().GetTabNo()); + if (bColsAffected) + ScTabViewShell::notifyAllViewsHeaderInvalidation(pViewShell, COLUMN_HEADER, nTab); + + if (bRowsAffected) + ScTabViewShell::notifyAllViewsHeaderInvalidation(pViewShell, ROW_HEADER, nTab); + + ScTabViewShell::notifyAllViewsSheetGeomInvalidation( + pViewShell, + bColsAffected, bRowsAffected, + true /* bSizes*/, true /* bHidden */, true /* bFiltered */, + true /* bGroups */, nTab); } } } @@ -535,11 +545,21 @@ void ScUndoDeleteCells::DoChange( const bool bUndo ) { if (comphelper::LibreOfficeKit::isActive()) { - if (eCmd == DelCellCmd::Cols || eCmd == DelCellCmd::CellsLeft) - ScTabViewShell::notifyAllViewsHeaderInvalidation(pViewShell, COLUMN_HEADER, pViewShell->GetViewData().GetTabNo()); + SCTAB nTab = pViewShell->GetViewData().GetTabNo(); + bool bColsAffected = (eCmd == DelCellCmd::Cols || eCmd == DelCellCmd::CellsLeft); + bool bRowsAffected = (eCmd == DelCellCmd::Rows || eCmd == DelCellCmd::CellsUp); + + if (bColsAffected) + ScTabViewShell::notifyAllViewsHeaderInvalidation(pViewShell, COLUMN_HEADER, nTab); + + if (bRowsAffected) + ScTabViewShell::notifyAllViewsHeaderInvalidation(pViewShell, ROW_HEADER, nTab); - if (eCmd == DelCellCmd::Rows || eCmd == DelCellCmd::CellsUp) - ScTabViewShell::notifyAllViewsHeaderInvalidation(pViewShell, ROW_HEADER, pViewShell->GetViewData().GetTabNo()); + ScTabViewShell::notifyAllViewsSheetGeomInvalidation( + pViewShell, + bColsAffected, bRowsAffected, + true /* bSizes*/, true /* bHidden */, true /* bFiltered */, + true /* bGroups */, nTab); } } diff --git a/sc/source/ui/undo/undoblk2.cxx b/sc/source/ui/undo/undoblk2.cxx index 9b4de7f89f62..7e13a13ef25a 100644 --- a/sc/source/ui/undo/undoblk2.cxx +++ b/sc/source/ui/undo/undoblk2.cxx @@ -125,9 +125,14 @@ void ScUndoWidthOrHeight::Undo() if (pViewShell) { + SCTAB nCurrentTab = pViewShell->GetViewData().GetTabNo(); + bool bAffectsVisibility = (eMode != SC_SIZE_ORIGINAL && eMode != SC_SIZE_VISOPT); + ScTabViewShell::notifyAllViewsSheetGeomInvalidation( + pViewShell, bWidth /* bColumns */, !bWidth /* bRows */, + true /* bSizes*/, bAffectsVisibility /* bHidden */, bAffectsVisibility /* bFiltered */, + false /* bGroups */, nCurrentTab); pViewShell->UpdateScrollBars(bWidth ? COLUMN_HEADER : ROW_HEADER); - SCTAB nCurrentTab = pViewShell->GetViewData().GetTabNo(); if ( nCurrentTab < nStartTab || nCurrentTab > nEndTab ) pViewShell->SetTabNo( nStartTab ); } diff --git a/sc/source/ui/undo/undodat.cxx b/sc/source/ui/undo/undodat.cxx index 6bb8f0f76566..5fdff1fb54cc 100644 --- a/sc/source/ui/undo/undodat.cxx +++ b/sc/source/ui/undo/undodat.cxx @@ -100,6 +100,9 @@ void ScUndoDoOutline::Undo() else pUndoDoc->CopyToDocument(0, nStart, nTab, rDoc.MaxCol(), nEnd, nTab, InsertDeleteFlags::NONE, false, rDoc); + ScTabViewShell::notifyAllViewsSheetGeomInvalidation(pViewShell, bColumns, !bColumns, + false /* bSizes*/, true /* bHidden */, true /* bFiltered */, + true /* bGroups */, nTab); pViewShell->UpdateScrollBars(); pDocShell->PostPaint(0,0,nTab,rDoc.MaxCol(),rDoc.MaxRow(),nTab,PaintPartFlags::Grid|PaintPartFlags::Left|PaintPartFlags::Top); @@ -180,6 +183,11 @@ void ScUndoMakeOutline::Undo() pDocShell->PostPaint(0,0,nTab,rDoc.MaxCol(),rDoc.MaxRow(),nTab,PaintPartFlags::Grid|PaintPartFlags::Left|PaintPartFlags::Top|PaintPartFlags::Size); ScTabViewShell::notifyAllViewsHeaderInvalidation( pViewShell, bColumns ? COLUMN_HEADER : ROW_HEADER, nTab ); + ScTabViewShell::notifyAllViewsSheetGeomInvalidation( + pViewShell, + bColumns /* bColumns */, !bColumns /* bRows */, + false /* bSizes*/, true /* bHidden */, true /* bFiltered */, + true /* bGroups */, nTab); EndUndo(); } @@ -262,6 +270,9 @@ void ScUndoOutlineLevel::Undo() rDoc.UpdatePageBreaks( nTab ); + ScTabViewShell::notifyAllViewsSheetGeomInvalidation(pViewShell, bColumns, !bColumns, + false /* bSizes*/, true /* bHidden */, true /* bFiltered */, + true /* bGroups */, nTab); pViewShell->UpdateScrollBars(); SCTAB nVisTab = pViewShell->GetViewData().GetTabNo(); @@ -354,6 +365,9 @@ void ScUndoOutlineBlock::Undo() rDoc.UpdatePageBreaks( nTab ); + ScTabViewShell::notifyAllViewsSheetGeomInvalidation(pViewShell, true /* bColumns */, true /* bRows */, + false /* bSizes*/, true /* bHidden */, true /* bFiltered */, + true /* bGroups */, nTab); pViewShell->UpdateScrollBars(); SCTAB nVisTab = pViewShell->GetViewData().GetTabNo(); @@ -450,6 +464,11 @@ void ScUndoRemoveAllOutlines::Undo() pDocShell->PostPaint(0,0,nTab,rDoc.MaxCol(),rDoc.MaxRow(),nTab,PaintPartFlags::Grid|PaintPartFlags::Left|PaintPartFlags::Top|PaintPartFlags::Size); ScTabViewShell::notifyAllViewsHeaderInvalidation(pViewShell, BOTH_HEADERS, nTab); + ScTabViewShell::notifyAllViewsSheetGeomInvalidation( + pViewShell, + true /* bColumns */, true /* bRows */, + false /* bSizes*/, true /* bHidden */, true /* bFiltered */, + true /* bGroups */, nTab); EndUndo(); } @@ -815,6 +834,11 @@ void ScUndoQuery::Undo() // invalidate cache positions and update cursor and selection pViewShell->OnLOKShowHideColRow(/*bColumns*/ false, aQueryParam.nRow1 - 1); ScTabViewShell::notifyAllViewsHeaderInvalidation(pViewShell, ROW_HEADER, nTab); + ScTabViewShell::notifyAllViewsSheetGeomInvalidation( + pViewShell, + false /* bColumns */, true /* bRows */, + false /* bSizes*/, true /* bHidden */, true /* bFiltered */, + false /* bGroups */, nTab); // Paint @@ -1333,6 +1357,10 @@ void ScUndoRepeatDB::Undo() if (xUndoDB) rDoc.SetDBCollection(std::unique_ptr<ScDBCollection>(new ScDBCollection(*xUndoDB)), true); + ScTabViewShell::notifyAllViewsSheetGeomInvalidation(pViewShell, false /* bColumns */, true /* bRows */, + false /* bSizes*/, true /* bHidden */, true /* bFiltered */, + false /* bGroups */, nTab); + SCTAB nVisTab = pViewShell->GetViewData().GetTabNo(); if ( nVisTab != nTab ) pViewShell->SetTabNo( nTab ); diff --git a/sc/source/ui/view/dbfunc.cxx b/sc/source/ui/view/dbfunc.cxx index 01f05560d45c..5e0a686a8c09 100644 --- a/sc/source/ui/view/dbfunc.cxx +++ b/sc/source/ui/view/dbfunc.cxx @@ -257,6 +257,11 @@ void ScDBFunc::Query( const ScQueryParam& rQueryParam, const ScRange* pAdvSource if (!bCopy) { + ScTabViewShell::notifyAllViewsSheetGeomInvalidation( + GetViewData().GetViewShell(), + false /* bColumns */, true /* bRows */, + false /* bSizes*/, true /* bHidden */, true /* bFiltered */, + false /* bGroups */, nTab); UpdateScrollBars(ROW_HEADER); SelectionChanged(); // for attribute states (filtered rows are ignored) } diff --git a/sc/source/ui/view/dbfunc3.cxx b/sc/source/ui/view/dbfunc3.cxx index 538e9102236b..52942816c138 100644 --- a/sc/source/ui/view/dbfunc3.cxx +++ b/sc/source/ui/view/dbfunc3.cxx @@ -94,6 +94,10 @@ void ScDBFunc::MakeOutline( bool bColumns, bool bRecord ) aFunc.MakeOutline( aRange, bColumns, bRecord, false ); ScTabViewShell::notifyAllViewsHeaderInvalidation(GetViewData().GetViewShell(), bColumns ? COLUMN_HEADER : ROW_HEADER, GetViewData().GetTabNo()); + ScTabViewShell::notifyAllViewsSheetGeomInvalidation(GetViewData().GetViewShell(), + bColumns, !bColumns, false /* bSizes*/, + false /* bHidden */, false /* bFiltered */, + true /* bGroups */, GetViewData().GetTabNo()); } else ErrorMessage(STR_NOMULTISELECT); @@ -111,6 +115,10 @@ void ScDBFunc::RemoveOutline( bool bColumns, bool bRecord ) aFunc.RemoveOutline( aRange, bColumns, bRecord, false ); ScTabViewShell::notifyAllViewsHeaderInvalidation(GetViewData().GetViewShell(), bColumns ? COLUMN_HEADER : ROW_HEADER, GetViewData().GetTabNo()); + ScTabViewShell::notifyAllViewsSheetGeomInvalidation(GetViewData().GetViewShell(), + bColumns, !bColumns, false /* bSizes*/, + true /* bHidden */, true /* bFiltered */, + true /* bGroups */, GetViewData().GetTabNo()); } else ErrorMessage(STR_NOMULTISELECT); @@ -185,6 +193,10 @@ void ScDBFunc::RemoveAllOutlines( bool bRecord ) if (bOk) { + ScTabViewShell::notifyAllViewsSheetGeomInvalidation(GetViewData().GetViewShell(), + true /* bColumns */, true /* bRows */, false /* bSizes*/, + true /* bHidden */, true /* bFiltered */, + true /* bGroups */, nTab); UpdateScrollBars(BOTH_HEADERS); } } @@ -219,7 +231,13 @@ void ScDBFunc::SelectLevel( bool bColumns, sal_uInt16 nLevel, bool bRecord ) bool bOk = aFunc.SelectLevel( nTab, bColumns, nLevel, bRecord, true/*bPaint*/ ); if (bOk) + { + ScTabViewShell::notifyAllViewsSheetGeomInvalidation(GetViewData().GetViewShell(), + bColumns, !bColumns, false /* bSizes*/, + true /* bHidden */, true /* bFiltered */, + true /* bGroups */, nTab); UpdateScrollBars(bColumns ? COLUMN_HEADER : ROW_HEADER); + } } // show individual outline groups @@ -247,7 +265,13 @@ void ScDBFunc::ShowOutline( bool bColumns, sal_uInt16 nLevel, sal_uInt16 nEntry, aFunc.ShowOutline( nTab, bColumns, nLevel, nEntry, bRecord, bPaint ); if ( bPaint ) + { + ScTabViewShell::notifyAllViewsSheetGeomInvalidation(GetViewData().GetViewShell(), + bColumns, !bColumns, false /* bSizes*/, + true /* bHidden */, true /* bFiltered */, + true /* bGroups */, nTab); UpdateScrollBars(bColumns ? COLUMN_HEADER : ROW_HEADER); + } } // hide individual outline groups @@ -261,7 +285,13 @@ void ScDBFunc::HideOutline( bool bColumns, sal_uInt16 nLevel, sal_uInt16 nEntry, bool bOk = aFunc.HideOutline( nTab, bColumns, nLevel, nEntry, bRecord, bPaint ); if ( bOk && bPaint ) + { + ScTabViewShell::notifyAllViewsSheetGeomInvalidation(GetViewData().GetViewShell(), + bColumns, !bColumns, false /* bSizes*/, + true /* bHidden */, true /* bFiltered */, + true /* bGroups */, nTab); UpdateScrollBars(bColumns ? COLUMN_HEADER : ROW_HEADER); + } } // menu status: show/hide marked range @@ -348,7 +378,13 @@ void ScDBFunc::ShowMarkedOutlines( bool bRecord ) ScOutlineDocFunc aFunc(*pDocSh); bool bDone = aFunc.ShowMarkedOutlines( aRange, bRecord ); if (bDone) + { + ScTabViewShell::notifyAllViewsSheetGeomInvalidation( + GetViewData().GetViewShell(), true, true, + false /* bSizes*/, true /* bHidden */, true /* bFiltered */, + true /* bGroups */, GetViewData().GetTabNo()); UpdateScrollBars(); + } } else ErrorMessage(STR_NOMULTISELECT); @@ -365,7 +401,13 @@ void ScDBFunc::HideMarkedOutlines( bool bRecord ) ScOutlineDocFunc aFunc(*pDocSh); bool bDone = aFunc.HideMarkedOutlines( aRange, bRecord ); if (bDone) + { + ScTabViewShell::notifyAllViewsSheetGeomInvalidation( + GetViewData().GetViewShell(), true, true, + false /* bSizes*/, true /* bHidden */, true /* bFiltered */, + true /* bGroups */, GetViewData().GetTabNo()); UpdateScrollBars(); + } } else ErrorMessage(STR_NOMULTISELECT); diff --git a/sc/source/ui/view/tabvwshc.cxx b/sc/source/ui/view/tabvwshc.cxx index 0b9de2044c9c..a37f77a986f3 100644 --- a/sc/source/ui/view/tabvwshc.cxx +++ b/sc/source/ui/view/tabvwshc.cxx @@ -552,6 +552,50 @@ bool ScTabViewShell::isAnyEditViewInRange(SfxViewShell* pForViewShell, bool bCol return false; } +void ScTabViewShell::notifyAllViewsSheetGeomInvalidation(SfxViewShell* pForViewShell, bool bColumns, + bool bRows, bool bSizes, bool bHidden, bool bFiltered, + bool bGroups, SCTAB nCurrentTabIndex) +{ + if (!comphelper::LibreOfficeKit::isActive() || + !comphelper::LibreOfficeKit::isCompatFlagSet( + comphelper::LibreOfficeKit::Compat::scPrintTwipsMsgs)) + return; + + if (!bColumns && !bRows) + return; + + bool bAllTypes = bSizes && bHidden && bFiltered && bGroups; + bool bAllDims = bColumns && bRows; + OString aPayload = bAllDims ? "all" : bColumns ? "columns" : "rows"; + + if (!bAllTypes) + { + if (bSizes) + aPayload += " sizes"; + + if (bHidden) + aPayload += " hidden"; + + if (bFiltered) + aPayload += " filtered"; + + if (bGroups) + aPayload += " groups"; + } + + SfxViewShell* pViewShell = SfxViewShell::GetFirst(); + while (pViewShell) + { + ScTabViewShell* pTabViewShell = dynamic_cast<ScTabViewShell*>(pViewShell); + if (pTabViewShell && pViewShell->GetDocId() == pForViewShell->GetDocId() && + (nCurrentTabIndex == -1 || pTabViewShell->getPart() == nCurrentTabIndex)) + { + pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_INVALIDATE_SHEET_GEOMETRY, aPayload.getStr()); + } + pViewShell = SfxViewShell::GetNext(*pViewShell); + } +} + bool ScTabViewShell::UseSubTotal(ScRangeList* pRangeList) { bool bSubTotal = false; diff --git a/sc/source/ui/view/viewfun2.cxx b/sc/source/ui/view/viewfun2.cxx index d260cf519afb..6085d74d7bb9 100644 --- a/sc/source/ui/view/viewfun2.cxx +++ b/sc/source/ui/view/viewfun2.cxx @@ -175,7 +175,15 @@ bool ScViewFunc::AdjustBlockHeight( bool bPaint, ScMarkData* pMarkData ) pDocSh->UpdateOle(&GetViewData()); if (comphelper::LibreOfficeKit::isActive()) - ScTabViewShell::notifyAllViewsHeaderInvalidation(GetViewData().GetViewShell(), ROW_HEADER, GetViewData().GetTabNo()); + { + SCTAB nTab = GetViewData().GetTabNo(); + ScTabViewShell::notifyAllViewsSheetGeomInvalidation( + GetViewData().GetViewShell(), + false /* bColumns */, true /* bRows */, + true /* bSizes*/, false /* bHidden */, false /* bFiltered */, + false /* bGroups */, nTab); + ScTabViewShell::notifyAllViewsHeaderInvalidation(GetViewData().GetViewShell(), ROW_HEADER, nTab); + } return bAnyChanged; } @@ -224,7 +232,14 @@ bool ScViewFunc::AdjustRowHeight( SCROW nStartRow, SCROW nEndRow ) PaintPartFlags::Grid | PaintPartFlags::Left ); if (comphelper::LibreOfficeKit::isActive()) + { + ScTabViewShell::notifyAllViewsSheetGeomInvalidation( + GetViewData().GetViewShell(), + false /* bColumns */, true /* bRows */, + true /* bSizes*/, false /* bHidden */, false /* bFiltered */, + false /* bGroups */, nTab); ScTabViewShell::notifyAllViewsHeaderInvalidation(GetViewData().GetViewShell(), ROW_HEADER, GetViewData().GetTabNo()); + } return bChanged; } diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx index 90a90e92f528..4a7e05ccd3b3 100644 --- a/sc/source/ui/view/viewfunc.cxx +++ b/sc/source/ui/view/viewfunc.cxx @@ -1634,6 +1634,11 @@ bool ScViewFunc::InsertCells( InsCellCmd eCmd, bool bRecord, bool bPartOfPaste ) if (bInsertRows) ScTabViewShell::notifyAllViewsHeaderInvalidation(GetViewData().GetViewShell(), ROW_HEADER, GetViewData().GetTabNo()); + + ScTabViewShell::notifyAllViewsSheetGeomInvalidation(GetViewData().GetViewShell(), + bInsertCols, bInsertRows, true /* bSizes*/, + true /* bHidden */, true /* bFiltered */, + true /* bGroups */, GetViewData().GetTabNo()); } } OUString aStartAddress = aRange.aStart.GetColRowString(); @@ -1707,11 +1712,18 @@ void ScViewFunc::DeleteCells( DelCellCmd eCmd ) if (comphelper::LibreOfficeKit::isActive()) { - if (eCmd == DelCellCmd::Cols) + bool bColsDeleted = (eCmd == DelCellCmd::Cols); + bool bRowsDeleted = (eCmd == DelCellCmd::Rows); + if (bColsDeleted) ScTabViewShell::notifyAllViewsHeaderInvalidation(GetViewData().GetViewShell(), COLUMN_HEADER, GetViewData().GetTabNo()); - if (eCmd == DelCellCmd::Rows) + if (bRowsDeleted) ScTabViewShell::notifyAllViewsHeaderInvalidation(GetViewData().GetViewShell(), ROW_HEADER, GetViewData().GetTabNo()); + + ScTabViewShell::notifyAllViewsSheetGeomInvalidation(GetViewData().GetViewShell(), + bColsDeleted, bRowsDeleted, true /* bSizes*/, + true /* bHidden */, true /* bFiltered */, + true /* bGroups */, GetViewData().GetTabNo()); } } else @@ -2257,6 +2269,11 @@ void ScViewFunc::SetWidthOrHeight( for (const SCTAB& nTab : aMarkData) rDoc.UpdatePageBreaks( nTab ); + bool bAffectsVisibility = (eMode != SC_SIZE_ORIGINAL && eMode != SC_SIZE_VISOPT); + ScTabViewShell::notifyAllViewsSheetGeomInvalidation(GetViewData().GetViewShell(), + bWidth /* bColumns */, !bWidth /* bRows */, + true /* bSizes*/, bAffectsVisibility /* bHidden */, bAffectsVisibility /* bFiltered */, + false /* bGroups */, nCurTab); GetViewData().GetView()->UpdateScrollBars(bWidth ? COLUMN_HEADER : ROW_HEADER); { |