sc/source/filter/excel/xestream.cxx | 6 - sc/source/ui/docshell/datastream.cxx | 12 ++ sc/source/ui/docshell/externalrefmgr.cxx | 6 + sc/source/ui/miscdlgs/redcom.cxx | 10 +- sc/source/ui/namedlg/namepast.cxx | 5 - sc/source/ui/undo/undoblk3.cxx | 3 sc/source/ui/unoobj/docuno.cxx | 132 ++++++++++++++++--------------- 7 files changed, 100 insertions(+), 74 deletions(-)
New commits: commit 97e93861dd5ed52d742355f043e9cd628c1bc8f8 Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Mon Dec 19 12:05:48 2022 +0100 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Mon Dec 19 17:37:07 2022 +0000 sc: check ScDocShell::GetViewData() ScDocShell: :GetViewData() can return nullptr Change-Id: I39bb2dce1ab233f39b0ec687ed71089b35537f9c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144467 Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sc/source/filter/excel/xestream.cxx b/sc/source/filter/excel/xestream.cxx index 33e6fa2a8838..75c241493b07 100644 --- a/sc/source/filter/excel/xestream.cxx +++ b/sc/source/filter/excel/xestream.cxx @@ -1049,15 +1049,15 @@ bool XclExpXmlStream::exportDocument() aRoot.GetOldRoot().pER = &aRoot; aRoot.GetOldRoot().eDateiTyp = Biff8; // Get the viewsettings before processing - if( ScDocShell::GetViewData() ) - ScDocShell::GetViewData()->WriteExtOptions( mpRoot->GetExtDocOptions() ); + if (ScViewData* pViewData = ScDocShell::GetViewData()) + pViewData->WriteExtOptions( mpRoot->GetExtDocOptions() ); else { // Try to get ScViewData through the current ScDocShell ScTabViewShell* pTabViewShell = pShell->GetBestViewShell( false ); if ( pTabViewShell ) { - ScViewData* pViewData = &pTabViewShell->GetViewData(); + pViewData = &pTabViewShell->GetViewData(); pViewData->WriteExtOptions( mpRoot->GetExtDocOptions() ); } } diff --git a/sc/source/ui/docshell/datastream.cxx b/sc/source/ui/docshell/datastream.cxx index 3003b3cdac2b..4bcbbaf9978c 100644 --- a/sc/source/ui/docshell/datastream.cxx +++ b/sc/source/ui/docshell/datastream.cxx @@ -237,8 +237,12 @@ DataStream::Cell::Cell( const Cell& r ) : mbValue(r.mbValue) void DataStream::MakeToolbarVisible() { + ScViewData* pViewData = ScDocShell::GetViewData(); + if (!pViewData) + return; + css::uno::Reference< css::frame::XFrame > xFrame = - ScDocShell::GetViewData()->GetViewShell()->GetViewFrame()->GetFrame().GetFrameInterface(); + pViewData->GetViewShell()->GetViewFrame()->GetFrame().GetFrameInterface(); if (!xFrame.is()) return; @@ -523,7 +527,11 @@ bool DataStream::ImportData() // We no longer support this mode. To be deleted later. return false; - if (ScDocShell::GetViewData()->GetViewShell()->NeedsRepaint()) + ScViewData* pViewData = ScDocShell::GetViewData(); + if (!pViewData) + return false; + + if (pViewData->GetViewShell()->NeedsRepaint()) return mbRunning; Text2Doc(); diff --git a/sc/source/ui/docshell/externalrefmgr.cxx b/sc/source/ui/docshell/externalrefmgr.cxx index 057cb3e2ae35..933cc1ad5b11 100644 --- a/sc/source/ui/docshell/externalrefmgr.cxx +++ b/sc/source/ui/docshell/externalrefmgr.cxx @@ -1482,7 +1482,11 @@ void ScExternalRefLink::Closed() else { // The source document has changed. - ScDocShell* pDocShell = ScDocShell::GetViewData()->GetDocShell(); + ScViewData* pViewData = ScDocShell::GetViewData(); + if (!pViewData) + return ERROR_GENERAL; + + ScDocShell* pDocShell = pViewData->GetDocShell(); ScDocShellModificator aMod(*pDocShell); pMgr->switchSrcFile(mnFileId, aFile, aFilter); aMod.SetDocumentModified(); diff --git a/sc/source/ui/miscdlgs/redcom.cxx b/sc/source/ui/miscdlgs/redcom.cxx index f81da032b481..ef04bd57e1ff 100644 --- a/sc/source/ui/miscdlgs/redcom.cxx +++ b/sc/source/ui/miscdlgs/redcom.cxx @@ -137,10 +137,12 @@ void ScRedComDialog::SelectCell() if(rRange.IsValid(pDocShell->GetDocument())) { - ScViewData* pViewData=ScDocShell::GetViewData(); - ScRange aRef=rRange.MakeRange(pDocShell->GetDocument()); - ScTabView* pTabView=pViewData->GetView(); - pTabView->MarkRange(aRef); + if (ScViewData* pViewData = ScDocShell::GetViewData()) + { + ScRange aRef = rRange.MakeRange(pDocShell->GetDocument()); + ScTabView* pTabView = pViewData->GetView(); + pTabView->MarkRange(aRef); + } } } diff --git a/sc/source/ui/namedlg/namepast.cxx b/sc/source/ui/namedlg/namepast.cxx index 491ebe7f79f0..1d144f3fdf5c 100644 --- a/sc/source/ui/namedlg/namepast.cxx +++ b/sc/source/ui/namedlg/namepast.cxx @@ -43,8 +43,9 @@ ScNamePasteDlg::ScNamePasteDlg(weld::Window* pParent, ScDocShell* pShell) m_RangeMap.insert(std::make_pair(aTemp, *pName)); } - ScViewData* pViewData = ScDocShell::GetViewData(); - ScAddress aPos(pViewData->GetCurX(), pViewData->GetCurY(), pViewData->GetTabNo()); + ScAddress aPos; + if (ScViewData* pViewData = ScDocShell::GetViewData()) + aPos = ScAddress(pViewData->GetCurX(), pViewData->GetCurY(), pViewData->GetTabNo()); std::unique_ptr<weld::TreeView> xTreeView(m_xBuilder->weld_tree_view("ctrl")); xTreeView->set_size_request(xTreeView->get_approximate_digit_width() * 75, diff --git a/sc/source/ui/undo/undoblk3.cxx b/sc/source/ui/undo/undoblk3.cxx index 8e6978659331..f614e0ff0b4a 100644 --- a/sc/source/ui/undo/undoblk3.cxx +++ b/sc/source/ui/undo/undoblk3.cxx @@ -1241,7 +1241,8 @@ void ScUndoConversion::DoChange( ScDocument* pRefDoc, const ScAddress& rCursorPo // Reset the spell checking results to re-check on paint, otherwise // we show the previous spelling markers (or lack thereof on misspellings). - ScDocShell::GetViewData()->GetActiveWin()->ResetAutoSpell(); + if (ScViewData* pViewData = ScDocShell::GetViewData()) + pViewData->GetActiveWin()->ResetAutoSpell(); pDocShell->PostPaintGridAll(); } else diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx index 9072d2824ce4..c9f8aa64204e 100644 --- a/sc/source/ui/unoobj/docuno.cxx +++ b/sc/source/ui/unoobj/docuno.cxx @@ -568,19 +568,18 @@ void ScModelObj::paintTile( VirtualDevice& rDevice, void ScModelObj::setPart( int nPart, bool /*bAllowChangeFocus*/ ) { ScViewData* pViewData = ScDocShell::GetViewData(); - ScTabView* pTabView = nullptr; + if (!pViewData) + return; - if (pViewData) - pTabView = pViewData->GetView(); + ScTabView* pTabView = pViewData->GetView(); + if (!pTabView) + return; - if (pTabView) - { - if (SdrView* pDrawView = pViewData->GetViewShell()->GetScDrawView()) - pDrawView->SetNegativeX(comphelper::LibreOfficeKit::isActive() && - pViewData->GetDocument().IsLayoutRTL(nPart)); + if (SdrView* pDrawView = pViewData->GetViewShell()->GetScDrawView()) + pDrawView->SetNegativeX(comphelper::LibreOfficeKit::isActive() && + pViewData->GetDocument().IsLayoutRTL(nPart)); - pTabView->SelectTabPage(nPart + 1); - } + pTabView->SelectTabPage(nPart + 1); } int ScModelObj::getParts() @@ -600,6 +599,7 @@ OUString ScModelObj::getPartInfo( int nPart ) ScViewData* pViewData = ScDocShell::GetViewData(); if (!pViewData) return OUString(); + const bool bIsVisible = pViewData->GetDocument().IsVisible(nPart); //FIXME: Implement IsSelected(). const bool bIsSelected = false; //pViewData->GetDocument()->IsSelected(nPart); @@ -617,20 +617,22 @@ OUString ScModelObj::getPartInfo( int nPart ) OUString ScModelObj::getPartName( int nPart ) { - OUString sTabName; ScViewData* pViewData = ScDocShell::GetViewData(); if (!pViewData) return OUString(); + + OUString sTabName; pViewData->GetDocument().GetName(nPart, sTabName); return sTabName; } OUString ScModelObj::getPartHash( int nPart ) { - sal_Int64 nHashCode; ScViewData* pViewData = ScDocShell::GetViewData(); if (!pViewData) return OUString(); + + sal_Int64 nHashCode; return (pViewData->GetDocument().GetHashCode(nPart, nHashCode) ? OUString::number(nHashCode) : OUString()); } @@ -789,7 +791,11 @@ void ScModelObj::postMouseEvent(int nType, int nX, int nY, int nCount, int nButt void ScModelObj::setTextSelection(int nType, int nX, int nY) { SolarMutexGuard aGuard; + ScViewData* pViewData = ScDocShell::GetViewData(); + if (!pViewData) + return; + ScTabViewShell* pViewShell = pViewData->GetViewShell(); LokChartHelper aChartHelper(pViewShell); @@ -871,22 +877,24 @@ uno::Reference<datatransfer::XTransferable> ScModelObj::getSelection() SolarMutexGuard aGuard; TransferableDataHelper aDataHelper; - ScViewData* pViewData = ScDocShell::GetViewData(); uno::Reference<datatransfer::XTransferable> xTransferable; - if ( ScEditShell * pShell = dynamic_cast<ScEditShell*>( pViewData->GetViewShell()->GetViewFrame()->GetDispatcher()->GetShell(0) ) ) - xTransferable = pShell->GetEditView()->GetTransferable(); - else if ( nullptr != dynamic_cast<ScDrawTextObjectBar*>( pViewData->GetViewShell()->GetViewFrame()->GetDispatcher()->GetShell(0) )) + if (ScViewData* pViewData = ScDocShell::GetViewData()) { - ScDrawView* pView = pViewData->GetScDrawView(); - OutlinerView* pOutView = pView->GetTextEditOutlinerView(); - if (pOutView) - xTransferable = pOutView->GetEditView().GetTransferable(); + if ( ScEditShell * pShell = dynamic_cast<ScEditShell*>( pViewData->GetViewShell()->GetViewFrame()->GetDispatcher()->GetShell(0) ) ) + xTransferable = pShell->GetEditView()->GetTransferable(); + else if ( nullptr != dynamic_cast<ScDrawTextObjectBar*>( pViewData->GetViewShell()->GetViewFrame()->GetDispatcher()->GetShell(0) )) + { + ScDrawView* pView = pViewData->GetScDrawView(); + OutlinerView* pOutView = pView->GetTextEditOutlinerView(); + if (pOutView) + xTransferable = pOutView->GetEditView().GetTransferable(); + } + else if ( ScDrawShell * pDrawShell = dynamic_cast<ScDrawShell*>( pViewData->GetViewShell()->GetViewFrame()->GetDispatcher()->GetShell(0) ) ) + xTransferable = pDrawShell->GetDrawView()->CopyToTransferable(); + else + xTransferable = pViewData->GetViewShell()->CopyToTransferable(); } - else if ( ScDrawShell * pDrawShell = dynamic_cast<ScDrawShell*>( pViewData->GetViewShell()->GetViewFrame()->GetDispatcher()->GetShell(0) ) ) - xTransferable = pDrawShell->GetDrawView()->CopyToTransferable(); - else - xTransferable = pViewData->GetViewShell()->CopyToTransferable(); if (!xTransferable.is()) xTransferable.set( aDataHelper.GetTransferable() ); @@ -948,6 +956,9 @@ void ScModelObj::resetSelection() SolarMutexGuard aGuard; ScViewData* pViewData = ScDocShell::GetViewData(); + if (!pViewData) + return; + ScTabViewShell* pViewShell = pViewData->GetViewShell(); // deselect the shapes & texts @@ -1005,7 +1016,6 @@ static void lcl_sendLOKDocumentBackground(const ScViewData* pViewData) void ScModelObj::setClientZoom(int nTilePixelWidth_, int nTilePixelHeight_, int nTileTwipWidth_, int nTileTwipHeight_) { ScViewData* pViewData = ScDocShell::GetViewData(); - if (!pViewData) return; @@ -1037,7 +1047,6 @@ void ScModelObj::setClientZoom(int nTilePixelWidth_, int nTilePixelHeight_, int void ScModelObj::getRowColumnHeaders(const tools::Rectangle& rRectangle, tools::JsonWriter& rJsonWriter) { ScViewData* pViewData = ScDocShell::GetViewData(); - if (!pViewData) return; @@ -1052,7 +1061,6 @@ OString ScModelObj::getSheetGeometryData(bool bColumns, bool bRows, bool bSizes, bool bFiltered, bool bGroups) { ScViewData* pViewData = ScDocShell::GetViewData(); - if (!pViewData) return ""; @@ -1068,7 +1076,6 @@ void ScModelObj::getCellCursor(tools::JsonWriter& rJsonWriter) SolarMutexGuard aGuard; ScViewData* pViewData = ScDocShell::GetViewData(); - if (!pViewData) return; @@ -1128,7 +1135,6 @@ void ScModelObj::setClientVisibleArea(const tools::Rectangle& rRectangle) void ScModelObj::setOutlineState(bool bColumn, int nLevel, int nIndex, bool bHidden) { ScViewData* pViewData = ScDocShell::GetViewData(); - if (!pViewData) return; @@ -1159,23 +1165,25 @@ void ScModelObj::getPostIts(tools::JsonWriter& rJsonWriter) rJsonWriter.put("text", aNote.mpNote->GetText()); // Calculating the cell cursor position - ScViewData* pViewData = ScDocShell::GetViewData(); - ScGridWindow* pGridWindow = pViewData->GetActiveWin(); - if (pGridWindow) + if (ScViewData* pViewData = ScDocShell::GetViewData()) { - SCCOL nX = aNote.maPos.Col(); - SCROW nY = aNote.maPos.Row(); - Point aScrPos = pViewData->GetScrPos(nX, nY, pViewData->GetActivePart(), true); - tools::Long nSizeXPix; - tools::Long nSizeYPix; - pViewData->GetMergeSizePixel(nX, nY, nSizeXPix, nSizeYPix); - - double fPPTX = pViewData->GetPPTX(); - double fPPTY = pViewData->GetPPTY(); - tools::Rectangle aRect(Point(aScrPos.getX() / fPPTX, aScrPos.getY() / fPPTY), - Size(nSizeXPix / fPPTX, nSizeYPix / fPPTY)); - - rJsonWriter.put("cellPos", aRect.toString()); + ScGridWindow* pGridWindow = pViewData->GetActiveWin(); + if (pGridWindow) + { + SCCOL nX = aNote.maPos.Col(); + SCROW nY = aNote.maPos.Row(); + Point aScrPos = pViewData->GetScrPos(nX, nY, pViewData->GetActivePart(), true); + tools::Long nSizeXPix; + tools::Long nSizeYPix; + pViewData->GetMergeSizePixel(nX, nY, nSizeXPix, nSizeYPix); + + double fPPTX = pViewData->GetPPTX(); + double fPPTY = pViewData->GetPPTY(); + tools::Rectangle aRect(Point(aScrPos.getX() / fPPTX, aScrPos.getY() / fPPTY), + Size(nSizeXPix / fPPTX, nSizeYPix / fPPTY)); + + rJsonWriter.put("cellPos", aRect.toString()); + } } } } @@ -1198,23 +1206,25 @@ void ScModelObj::getPostItsPos(tools::JsonWriter& rJsonWriter) rJsonWriter.put("tab", aNote.maPos.Tab()); // Calculating the cell cursor position - ScViewData* pViewData = ScDocShell::GetViewData(); - ScGridWindow* pGridWindow = pViewData->GetActiveWin(); - if (pGridWindow) + if (ScViewData* pViewData = ScDocShell::GetViewData()) { - SCCOL nX = aNote.maPos.Col(); - SCROW nY = aNote.maPos.Row(); - Point aScrPos = pViewData->GetScrPos(nX, nY, pViewData->GetActivePart(), true); - tools::Long nSizeXPix; - tools::Long nSizeYPix; - pViewData->GetMergeSizePixel(nX, nY, nSizeXPix, nSizeYPix); - - double fPPTX = pViewData->GetPPTX(); - double fPPTY = pViewData->GetPPTY(); - tools::Rectangle aRect(Point(aScrPos.getX() / fPPTX, aScrPos.getY() / fPPTY), - Size(nSizeXPix / fPPTX, nSizeYPix / fPPTY)); - - rJsonWriter.put("cellPos", aRect.toString()); + ScGridWindow* pGridWindow = pViewData->GetActiveWin(); + if (pGridWindow) + { + SCCOL nX = aNote.maPos.Col(); + SCROW nY = aNote.maPos.Row(); + Point aScrPos = pViewData->GetScrPos(nX, nY, pViewData->GetActivePart(), true); + tools::Long nSizeXPix; + tools::Long nSizeYPix; + pViewData->GetMergeSizePixel(nX, nY, nSizeXPix, nSizeYPix); + + double fPPTX = pViewData->GetPPTX(); + double fPPTY = pViewData->GetPPTY(); + tools::Rectangle aRect(Point(aScrPos.getX() / fPPTX, aScrPos.getY() / fPPTY), + Size(nSizeXPix / fPPTX, nSizeYPix / fPPTY)); + + rJsonWriter.put("cellPos", aRect.toString()); + } } } }