summaryrefslogtreecommitdiff
path: root/starmath
diff options
context:
space:
mode:
authorXisco Fauli <xiscofauli@libreoffice.org>2023-07-05 11:29:34 +0200
committerAndras Timar <andras.timar@collabora.com>2023-07-08 20:37:17 +0200
commit6baba2d2abafa147976082aeb44b50e59aeba2b6 (patch)
tree775a2e7963d2ce11e6a2072bf76c51c86af1002b /starmath
parent6084cb54c4c14c006bb88fd8981d3c31c1692ed3 (diff)
starmath: check GetEditWindow()
it might return nullptr See https://crashreport.libreoffice.org/stats/signature/SmPrintOptionsTabPage::~SmPrintOptionsTabPage() Change-Id: I4b34b0da3dc282ae89fd58defa12045c34a12cfb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154026 Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com> Tested-by: Xisco Fauli <xiscofauli@libreoffice.org> Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org> (cherry picked from commit 5f89bf6f35d71ed3bcf3293ea173a91b7e089702) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154123 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Diffstat (limited to 'starmath')
-rw-r--r--starmath/source/dialog.cxx6
-rw-r--r--starmath/source/view.cxx136
2 files changed, 73 insertions, 69 deletions
diff --git a/starmath/source/dialog.cxx b/starmath/source/dialog.cxx
index 969466d6f06d..5ca38a4c4f99 100644
--- a/starmath/source/dialog.cxx
+++ b/starmath/source/dialog.cxx
@@ -182,7 +182,8 @@ SmPrintOptionsTabPage::SmPrintOptionsTabPage(weld::Container* pPage, weld::Dialo
SmPrintOptionsTabPage::~SmPrintOptionsTabPage()
{
if (SmViewShell *pViewSh = SmGetActiveView())
- pViewSh->GetEditWindow()->UpdateStatus();
+ if (SmEditWindow* pEdit = pViewSh->GetEditWindow())
+ pEdit->UpdateStatus();
}
bool SmPrintOptionsTabPage::FillItemSet(SfxItemSet* rSet)
@@ -206,7 +207,8 @@ bool SmPrintOptionsTabPage::FillItemSet(SfxItemSet* rSet)
rSet->Put(SfxUInt16Item(SID_SMEDITWINDOWZOOM, sal::static_int_cast<sal_uInt16>(m_xSmZoom->get_value(FieldUnit::PERCENT))));
if (SmViewShell *pViewSh = SmGetActiveView())
- pViewSh->GetEditWindow()->UpdateStatus();
+ if (SmEditWindow* pEdit = pViewSh->GetEditWindow())
+ pEdit->UpdateStatus();
return true;
}
diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx
index 5dd716b46bad..7eaf77e6c372 100644
--- a/starmath/source/view.cxx
+++ b/starmath/source/view.cxx
@@ -415,8 +415,8 @@ void SmGraphicWidget::GetFocus()
{
if (!SmViewShell::IsInlineEditEnabled())
return;
- if (GetView().GetEditWindow())
- GetView().GetEditWindow()->Flush();
+ if (SmEditWindow* pEdit = GetView().GetEditWindow())
+ pEdit->Flush();
//Let view shell know what insertions should be done in visual editor
GetView().SetInsertIntoEditWindow(false);
SetIsCursorVisible(true);
@@ -591,8 +591,7 @@ void SmGraphicWidget::Paint(vcl::RenderContext& rRenderContext, const tools::Rec
{
SetIsCursorVisible(false); // (old) cursor must be drawn again
- const SmEditWindow* pEdit = GetView().GetEditWindow();
- if (pEdit)
+ if (const SmEditWindow* pEdit = GetView().GetEditWindow())
{ // get new position for formula-cursor (for possible altered formula)
sal_Int32 nRow;
sal_uInt16 nCol;
@@ -1568,8 +1567,9 @@ void SmViewShell::ShowError(const SmErrorDesc* pErrorDesc)
if (pErrorDesc || nullptr != (pErrorDesc = GetDoc()->GetParser()->GetError()) )
{
SetStatusText( pErrorDesc->m_aText );
- GetEditWindow()->MarkError( Point( pErrorDesc->m_pNode->GetColumn(),
- pErrorDesc->m_pNode->GetRow()));
+ if (SmEditWindow* pEdit = GetEditWindow())
+ pEdit->MarkError( Point( pErrorDesc->m_pNode->GetColumn(),
+ pErrorDesc->m_pNode->GetRow()));
}
}
@@ -1612,8 +1612,7 @@ void SmViewShell::Insert( SfxMedium& rMedium )
return;
OUString aText = pDoc->GetText();
- SmEditWindow *pEditWin = GetEditWindow();
- if (pEditWin)
+ if (SmEditWindow *pEditWin = GetEditWindow())
pEditWin->InsertText( aText );
else
{
@@ -1649,8 +1648,7 @@ void SmViewShell::InsertFrom(SfxMedium &rMedium)
return;
OUString aText = pDoc->GetText();
- SmEditWindow *pEditWin = GetEditWindow();
- if (pEditWin)
+ if (SmEditWindow *pEditWin = GetEditWindow())
pEditWin->InsertText(aText);
else
SAL_WARN( "starmath", "EditWindow missing" );
@@ -1720,8 +1718,8 @@ void SmViewShell::Execute(SfxRequest& rReq)
auto pTrans = comphelper::getFromUnoTunnel<TransferableHelper>(xTrans);
if (pTrans)
{
- SmEditWindow *pEditWin = GetEditWindow();
- pTrans->CopyToClipboard(pEditWin->GetClipboard());
+ if (pWin)
+ pTrans->CopyToClipboard(pWin->GetClipboard());
}
}
}
@@ -1729,15 +1727,17 @@ void SmViewShell::Execute(SfxRequest& rReq)
case SID_PASTEOBJECT:
{
- SmEditWindow *pEditWin = GetEditWindow();
- TransferableDataHelper aData(TransferableDataHelper::CreateFromClipboard(pEditWin->GetClipboard()));
uno::Reference < io::XInputStream > xStrm;
- SotClipboardFormatId nId;
- if( aData.GetTransferable().is() &&
- ( aData.HasFormat( nId = SotClipboardFormatId::EMBEDDED_OBJ ) ||
- (aData.HasFormat( SotClipboardFormatId::OBJECTDESCRIPTOR ) &&
- aData.HasFormat( nId = SotClipboardFormatId::EMBED_SOURCE ))))
- xStrm = aData.GetInputStream(nId, OUString());
+ if (pWin)
+ {
+ TransferableDataHelper aData(TransferableDataHelper::CreateFromClipboard(pWin->GetClipboard()));
+ SotClipboardFormatId nId;
+ if( aData.GetTransferable().is() &&
+ ( aData.HasFormat( nId = SotClipboardFormatId::EMBEDDED_OBJ ) ||
+ (aData.HasFormat( SotClipboardFormatId::OBJECTDESCRIPTOR ) &&
+ aData.HasFormat( nId = SotClipboardFormatId::EMBED_SOURCE ))))
+ xStrm = aData.GetInputStream(nId, OUString());
+ }
if (xStrm.is())
{
@@ -1782,16 +1782,18 @@ void SmViewShell::Execute(SfxRequest& rReq)
bool bCallExec = nullptr == pWin;
if( !bCallExec )
{
- SmEditWindow *pEditWin = GetEditWindow();
- TransferableDataHelper aDataHelper(
- TransferableDataHelper::CreateFromClipboard(
- pEditWin->GetClipboard()));
+ if (pWin)
+ {
+ TransferableDataHelper aDataHelper(
+ TransferableDataHelper::CreateFromClipboard(
+ pWin->GetClipboard()));
- if( aDataHelper.GetTransferable().is() &&
- aDataHelper.HasFormat( SotClipboardFormatId::STRING ))
- pWin->Paste();
- else
- bCallExec = true;
+ if( aDataHelper.GetTransferable().is() &&
+ aDataHelper.HasFormat( SotClipboardFormatId::STRING ))
+ pWin->Paste();
+ else
+ bCallExec = true;
+ }
}
if( bCallExec )
{
@@ -1852,53 +1854,55 @@ void SmViewShell::Execute(SfxRequest& rReq)
case SID_IMPORT_MATHML_CLIPBOARD:
{
- SmEditWindow *pEditWin = GetEditWindow();
- TransferableDataHelper aDataHelper(TransferableDataHelper::CreateFromClipboard(pEditWin->GetClipboard()));
- uno::Reference < io::XInputStream > xStrm;
- if ( aDataHelper.GetTransferable().is() )
+ if (pWin)
{
- SotClipboardFormatId nId = SotClipboardFormatId::MATHML;
- if (aDataHelper.HasFormat(nId))
+ TransferableDataHelper aDataHelper(TransferableDataHelper::CreateFromClipboard(pWin->GetClipboard()));
+ uno::Reference < io::XInputStream > xStrm;
+ if ( aDataHelper.GetTransferable().is() )
{
- xStrm = aDataHelper.GetInputStream(nId, "");
- if (xStrm.is())
- {
- SfxMedium aClipboardMedium;
- aClipboardMedium.GetItemSet(); //generate initial itemset, not sure if necessary
- std::shared_ptr<const SfxFilter> pMathFilter =
- SfxFilter::GetFilterByName(MATHML_XML);
- aClipboardMedium.SetFilter(pMathFilter);
- aClipboardMedium.setStreamToLoadFrom(xStrm, true /*bIsReadOnly*/);
- InsertFrom(aClipboardMedium);
- GetDoc()->UpdateText();
- }
- }
- else
- {
- nId = SotClipboardFormatId::STRING;
+ SotClipboardFormatId nId = SotClipboardFormatId::MATHML;
if (aDataHelper.HasFormat(nId))
{
- // In case of FORMAT_STRING no stream exists, need to generate one
- OUString aString;
- if (aDataHelper.GetString( nId, aString))
+ xStrm = aDataHelper.GetInputStream(nId, "");
+ if (xStrm.is())
{
- // tdf#117091 force xml declaration to exist
- if (!aString.startsWith("<?xml"))
- aString = "<?xml version=\"1.0\"?>\n" + aString;
-
SfxMedium aClipboardMedium;
- aClipboardMedium.GetItemSet(); //generates initial itemset, not sure if necessary
+ aClipboardMedium.GetItemSet(); //generate initial itemset, not sure if necessary
std::shared_ptr<const SfxFilter> pMathFilter =
SfxFilter::GetFilterByName(MATHML_XML);
aClipboardMedium.SetFilter(pMathFilter);
-
- SvMemoryStream aStrm( const_cast<sal_Unicode *>(aString.getStr()), aString.getLength() * sizeof(sal_Unicode), StreamMode::READ);
- uno::Reference<io::XInputStream> xStrm2( new ::utl::OInputStreamWrapper(aStrm) );
- aClipboardMedium.setStreamToLoadFrom(xStrm2, true /*bIsReadOnly*/);
+ aClipboardMedium.setStreamToLoadFrom(xStrm, true /*bIsReadOnly*/);
InsertFrom(aClipboardMedium);
GetDoc()->UpdateText();
}
}
+ else
+ {
+ nId = SotClipboardFormatId::STRING;
+ if (aDataHelper.HasFormat(nId))
+ {
+ // In case of FORMAT_STRING no stream exists, need to generate one
+ OUString aString;
+ if (aDataHelper.GetString( nId, aString))
+ {
+ // tdf#117091 force xml declaration to exist
+ if (!aString.startsWith("<?xml"))
+ aString = "<?xml version=\"1.0\"?>\n" + aString;
+
+ SfxMedium aClipboardMedium;
+ aClipboardMedium.GetItemSet(); //generates initial itemset, not sure if necessary
+ std::shared_ptr<const SfxFilter> pMathFilter =
+ SfxFilter::GetFilterByName(MATHML_XML);
+ aClipboardMedium.SetFilter(pMathFilter);
+
+ SvMemoryStream aStrm( const_cast<sal_Unicode *>(aString.getStr()), aString.getLength() * sizeof(sal_Unicode), StreamMode::READ);
+ uno::Reference<io::XInputStream> xStrm2( new ::utl::OInputStreamWrapper(aStrm) );
+ aClipboardMedium.setStreamToLoadFrom(xStrm2, true /*bIsReadOnly*/);
+ InsertFrom(aClipboardMedium);
+ GetDoc()->UpdateText();
+ }
+ }
+ }
}
}
break;
@@ -2242,16 +2246,14 @@ SmViewShell::~SmViewShell()
//!! this view shell is not active anymore !!
// Thus 'SmGetActiveView' will give a 0 pointer.
// Thus we need to supply this view as argument
- SmEditWindow *pEditWin = GetEditWindow();
- if (pEditWin)
+ if (SmEditWindow *pEditWin = GetEditWindow())
pEditWin->DeleteEditView();
mxGraphicWindow.disposeAndClear();
}
void SmViewShell::Deactivate( bool bIsMDIActivate )
{
- SmEditWindow *pEdit = GetEditWindow();
- if ( pEdit )
+ if (SmEditWindow *pEdit = GetEditWindow())
pEdit->Flush();
SfxViewShell::Deactivate( bIsMDIActivate );