From 1c79122ff6dcbdb6ee922ce1d2f28f138f15d687 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Mar 14 2014 20:44:10 +0000 Subject: Related: rhbz#1076264 intermittent a11y crash in calc --- diff --git a/0001-Related-rhbz-1076264-intermittent-a11y-crash-in-calc.patch b/0001-Related-rhbz-1076264-intermittent-a11y-crash-in-calc.patch new file mode 100644 index 0000000..fe10336 --- /dev/null +++ b/0001-Related-rhbz-1076264-intermittent-a11y-crash-in-calc.patch @@ -0,0 +1,203 @@ +From 135bdf4ef1a5d256f00bebf1b734ae44544d757c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 14 Mar 2014 20:28:10 +0000 +Subject: [PATCH] Related: rhbz#1076264 intermittent a11y crash in calc + +http://retrace.fedoraproject.org/faf/reports/338291/ + +this crash refuses to be captured alive. But seeing as +we sometimes check mpViewShell against NULL and sometimes check +GetViewData against NULL its worth making those checks everytime +for consistency + +see also... + +rhbz#923993 rhbz#896711 rhbz#602273 rhbz#577595 lp#811057 lp#760665 + +(cherry picked from commit fae1e19af05e664364c55d4f686aaab860fd538d) + +Conflicts: + sc/source/ui/Accessibility/AccessibleDocument.cxx + +Change-Id: I5553848018f500b63ade60bcfc756a736b27c64f +--- + sc/source/ui/Accessibility/AccessibleDocument.cxx | 70 ++++++++++++++--------- + 1 file changed, 43 insertions(+), 27 deletions(-) + +diff --git a/sc/source/ui/Accessibility/AccessibleDocument.cxx b/sc/source/ui/Accessibility/AccessibleDocument.cxx +index 6d3b7f8..14ac8fe 100644 +--- a/sc/source/ui/Accessibility/AccessibleDocument.cxx ++++ b/sc/source/ui/Accessibility/AccessibleDocument.cxx +@@ -337,13 +337,14 @@ ScChildrenShapes::ScChildrenShapes(ScAccessibleDocument* pAccessibleDocument, Sc + } + if (pViewShell) + { +- SfxBroadcaster* pDrawBC = pViewShell->GetViewData()->GetDocument()->GetDrawBroadcaster(); ++ ScViewData *pViewData = pViewShell->GetViewData(); ++ SfxBroadcaster* pDrawBC = pViewData ? pViewData->GetDocument()->GetDrawBroadcaster() : NULL; + if (pDrawBC) + { + StartListening(*pDrawBC); + +- maShapeTreeInfo.SetModelBroadcaster( new ScDrawModelBroadcaster(pViewShell->GetViewData()->GetDocument()->GetDrawLayer()) ); +- maShapeTreeInfo.SetSdrView(pViewShell->GetViewData()->GetScDrawView()); ++ maShapeTreeInfo.SetModelBroadcaster( new ScDrawModelBroadcaster(pViewData->GetDocument()->GetDrawLayer()) ); ++ maShapeTreeInfo.SetSdrView(pViewData->GetScDrawView()); + maShapeTreeInfo.SetController(NULL); + maShapeTreeInfo.SetWindow(pViewShell->GetWindowByPos(meSplitPos)); + maShapeTreeInfo.SetViewForwarder(mpAccessibleDocument); +@@ -356,7 +357,8 @@ ScChildrenShapes::~ScChildrenShapes() + std::for_each(maZOrderedShapes.begin(), maZOrderedShapes.end(), Destroy()); + if (mpViewShell) + { +- SfxBroadcaster* pDrawBC = mpViewShell->GetViewData()->GetDocument()->GetDrawBroadcaster(); ++ ScViewData *pViewData = mpViewShell->GetViewData(); ++ SfxBroadcaster* pDrawBC = pViewData ? pViewData->GetDocument()->GetDrawBroadcaster() : NULL; + if (pDrawBC) + EndListening(*pDrawBC); + } +@@ -366,13 +368,14 @@ void ScChildrenShapes::SetDrawBroadcaster() + { + if (mpViewShell) + { +- SfxBroadcaster* pDrawBC = mpViewShell->GetViewData()->GetDocument()->GetDrawBroadcaster(); ++ ScViewData *pViewData = mpViewShell->GetViewData(); ++ SfxBroadcaster* pDrawBC = pViewData ? pViewData->GetDocument()->GetDrawBroadcaster() : NULL; + if (pDrawBC) + { + StartListening(*pDrawBC, sal_True); + +- maShapeTreeInfo.SetModelBroadcaster( new ScDrawModelBroadcaster(mpViewShell->GetViewData()->GetDocument()->GetDrawLayer()) ); +- maShapeTreeInfo.SetSdrView(mpViewShell->GetViewData()->GetScDrawView()); ++ maShapeTreeInfo.SetModelBroadcaster( new ScDrawModelBroadcaster(pViewData->GetDocument()->GetDrawLayer()) ); ++ maShapeTreeInfo.SetSdrView(pViewData->GetScDrawView()); + maShapeTreeInfo.SetController(NULL); + maShapeTreeInfo.SetWindow(mpViewShell->GetWindowByPos(meSplitPos)); + maShapeTreeInfo.SetViewForwarder(mpAccessibleDocument); +@@ -827,7 +830,8 @@ SdrPage* ScChildrenShapes::GetDrawPage() const + SdrPage* pDrawPage = NULL; + if (mpViewShell) + { +- ScDocument* pDoc = mpViewShell->GetViewData()->GetDocument(); ++ ScViewData *pViewData = mpViewShell->GetViewData(); ++ ScDocument* pDoc = pViewData ? pViewData->GetDocument() : NULL; + if (pDoc && pDoc->GetDrawLayer()) + { + ScDrawLayer* pDrawLayer = pDoc->GetDrawLayer(); +@@ -1239,9 +1243,10 @@ ScAccessibleDocument::ScAccessibleDocument( + AddChild( pChildWin->GetAccessible(), false ); + } + } +- if (pViewShell->GetViewData()->HasEditView( eSplitPos )) ++ ScViewData *pViewData = pViewShell->GetViewData(); ++ if (pViewData && pViewData->HasEditView(eSplitPos)) + { +- uno::Reference xAcc = new ScAccessibleEditObject(this, pViewShell->GetViewData()->GetEditView(eSplitPos), ++ uno::Reference xAcc = new ScAccessibleEditObject(this, pViewData->GetEditView(eSplitPos), + pViewShell->GetWindowByPos(eSplitPos), GetCurrentCellName(), GetCurrentCellDescription(), + ScAccessibleEditObject::CellInEditMode); + AddChild(xAcc, false); +@@ -1382,9 +1387,10 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) + } + else if ((rRef.GetId() == SC_HINT_ACC_ENTEREDITMODE)) // this event comes only on creating edit field of a cell + { +- if (mpViewShell && mpViewShell->GetViewData()->HasEditView(meSplitPos)) ++ ScViewData *pViewData = mpViewShell ? mpViewShell->GetViewData() : NULL; ++ if (pViewData && pViewData->HasEditView(meSplitPos)) + { +- mpTempAccEdit = new ScAccessibleEditObject(this, mpViewShell->GetViewData()->GetEditView(meSplitPos), ++ mpTempAccEdit = new ScAccessibleEditObject(this, pViewData->GetEditView(meSplitPos), + mpViewShell->GetWindowByPos(meSplitPos), GetCurrentCellName(), + OUString(ScResId(STR_ACC_EDITLINE_DESCR)), ScAccessibleEditObject::CellInEditMode); + uno::Reference xAcc = mpTempAccEdit; +@@ -1639,7 +1645,7 @@ void SAL_CALL + SolarMutexGuard aGuard; + IsObjectValid(); + +- if (mpChildrenShapes) ++ if (mpChildrenShapes && mpViewShell) + { + sal_Int32 nCount(mpChildrenShapes->GetCount()); //all shapes and the table + if (mxTempAcc.is()) +@@ -1782,7 +1788,7 @@ void SAL_CALL + SolarMutexGuard aGuard; + IsObjectValid(); + +- if (mpChildrenShapes) ++ if (mpChildrenShapes && mpViewShell) + { + sal_Int32 nCount(mpChildrenShapes->GetCount()); //all shapes and the table + if (mxTempAcc.is()) +@@ -1861,14 +1867,21 @@ Rectangle ScAccessibleDocument::GetVisibleArea_Impl() const + { + Rectangle aVisRect(GetBoundingBox()); + +- Point aPoint(mpViewShell->GetViewData()->GetPixPos(meSplitPos)); // returns a negative Point +- aPoint.setX(-aPoint.getX()); +- aPoint.setY(-aPoint.getY()); +- aVisRect.SetPos(aPoint); ++ if (mpViewShell) ++ { ++ ScViewData *pViewData = mpViewShell->GetViewData(); ++ if (pViewData) ++ { ++ Point aPoint(pViewData->GetPixPos(meSplitPos)); // returns a negative Point ++ aPoint.setX(-aPoint.getX()); ++ aPoint.setY(-aPoint.getY()); ++ aVisRect.SetPos(aPoint); ++ } + +- ScGridWindow* pWin = static_cast(mpViewShell->GetWindowByPos(meSplitPos)); +- if (pWin) +- aVisRect = pWin->PixelToLogic(aVisRect, pWin->GetDrawMapMode()); ++ ScGridWindow* pWin = static_cast(mpViewShell->GetWindowByPos(meSplitPos)); ++ if (pWin) ++ aVisRect = pWin->PixelToLogic(aVisRect, pWin->GetDrawMapMode()); ++ } + + return aVisRect; + } +@@ -1989,8 +2002,9 @@ Rectangle ScAccessibleDocument::GetBoundingBox() const + SCTAB ScAccessibleDocument::getVisibleTable() const + { + SCTAB nVisibleTable(0); +- if (mpViewShell && mpViewShell->GetViewData()) +- nVisibleTable = mpViewShell->GetViewData()->GetTabNo(); ++ ScViewData *pViewData = mpViewShell ? mpViewShell->GetViewData() : NULL; ++ if (pViewData) ++ nVisibleTable = pViewData->GetTabNo(); + return nVisibleTable; + } + +@@ -2020,11 +2034,12 @@ void ScAccessibleDocument::FreeAccessibleSpreadsheet() + sal_Bool ScAccessibleDocument::IsTableSelected() const + { + sal_Bool bResult (false); +- if(mpViewShell) ++ ScViewData *pViewData = mpViewShell ? mpViewShell->GetViewData() : NULL; ++ if(pViewData) + { + SCTAB nTab(getVisibleTable()); + //#103800#; use a copy of MarkData +- ScMarkData aMarkData(mpViewShell->GetViewData()->GetMarkData()); ++ ScMarkData aMarkData(pViewData->GetMarkData()); + aMarkData.MarkToMulti(); + if (aMarkData.IsAllMarked(ScRange(ScAddress(0, 0, nTab),ScAddress(MAXCOL, MAXROW, nTab)))) + bResult = sal_True; +@@ -2084,10 +2099,11 @@ void ScAccessibleDocument::RemoveChild(const uno::Reference& xAcc, + OUString ScAccessibleDocument::GetCurrentCellName() const + { + OUString sName(SC_RESSTR(STR_ACC_CELL_NAME)); +- if (mpViewShell) ++ ScViewData *pViewData = mpViewShell ? mpViewShell->GetViewData() : NULL; ++ if (pViewData) + { + // Document not needed, because only the cell address, but not the tablename is needed +- OUString sAddress(mpViewShell->GetViewData()->GetCurPos().Format(SCA_VALID, NULL)); ++ OUString sAddress(pViewData->GetCurPos().Format(SCA_VALID, NULL)); + sName = sName.replaceFirst("%1", sAddress); + } + return sName; +-- +1.8.5.3 + diff --git a/libreoffice.spec b/libreoffice.spec index 9448a5c..71f7b69 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -43,7 +43,7 @@ Summary: Free Software Productivity Suite Name: libreoffice Epoch: 1 Version: %{libo_version}.1 -Release: 6%{?libo_prerelease}%{?dist} +Release: 7%{?libo_prerelease}%{?dist} License: (MPLv1.1 or LGPLv3+) and LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and Public Domain and ASL 2.0 and Artistic and MPLv2.0 Group: Applications/Productivity URL: http://www.libreoffice.org/default/ @@ -291,6 +291,7 @@ Patch28: 0001-rhbz-1072607-hopefully-fix-crash-in-SvxRuler-MouseMo.patch Patch29: 0001-rhbz-1043551-sw-avoid-division-by-0-in-Text-Grid-pai.patch Patch30: 0001-writerfilter-salvage-a-field-parameter-parsing-train.patch Patch31: 0001-RTF-import-fix-spurious-page-breaks-at-doc-end-relat.patch +Patch32: 0001-Related-rhbz-1076264-intermittent-a11y-crash-in-calc.patch %define instdir %{_libdir} %define baseinstdir %{instdir}/libreoffice @@ -2185,6 +2186,9 @@ update-desktop-database %{_datadir}/applications &> /dev/null || : %endif %changelog +* Fri Mar 14 2014 Caolán McNamara - 1:4.2.2.1-7 +- Related: rhbz#1076264 intermittent a11y crash in calc + * Mon Mar 10 2014 Michael Stahl - 1:4.2.2.1-6 - Resolves: rhbz#988516: DOCX import: fix context stack when importing header - Resolves: rhbz#1072553: Fix deselection problems of template view