sw/source/uibase/utlui/content.cxx | 61 +++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 29 deletions(-)
New commits: commit 69c9237f0345c5b92792f6350771618f5c9cb8c2 Author: Jim Raykowski <rayk...@gmail.com> AuthorDate: Wed Oct 6 19:19:40 2021 -0800 Commit: Jim Raykowski <rayk...@gmail.com> CommitDate: Thu Oct 7 16:08:12 2021 +0200 SwNavigator: Fix crash on image select Fixes crash that occurs in update tracking test for bookmark when image is selected by testing that selection type is text before testing for bookmark. Change-Id: I53c64a71d3aff0f159bff31b98e2f453d7c2225a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/123202 Tested-by: Jenkins Reviewed-by: Jim Raykowski <rayk...@gmail.com> diff --git a/sw/source/uibase/utlui/content.cxx b/sw/source/uibase/utlui/content.cxx index fb7aab99847d..5e89303edf3b 100644 --- a/sw/source/uibase/utlui/content.cxx +++ b/sw/source/uibase/utlui/content.cxx @@ -3568,39 +3568,42 @@ void SwContentTree::UpdateTracking() return; } // bookmarks - track first bookmark at cursor - SwDoc* pDoc = m_pActiveShell->GetDoc(); - uno::Reference<text::XBookmarksSupplier> xBookmarksSupplier(pDoc->GetDocShell()->GetBaseModel(), - uno::UNO_QUERY); - uno::Reference<container::XIndexAccess> xBookmarks(xBookmarksSupplier->getBookmarks(), - uno::UNO_QUERY); - sal_Int32 nBookmarkCount = xBookmarks->getCount(); - if (nBookmarkCount && !(m_bIsRoot && m_nRootType != ContentTypeId::BOOKMARK)) + if (m_pActiveShell->GetSelectionType() & SelectionType::Text) { - SwPaM* pCursor = pDoc->GetEditShell()->GetCursor(); - uno::Reference<text::XTextRange> xRange( - SwXTextRange::CreateXTextRange(*pDoc, *pCursor->GetPoint(), nullptr)); - for (sal_Int32 i = 0; i < nBookmarkCount; ++i) + SwDoc* pDoc = m_pActiveShell->GetDoc(); + uno::Reference<text::XBookmarksSupplier> xBookmarksSupplier(pDoc->GetDocShell()->GetBaseModel(), + uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xBookmarks(xBookmarksSupplier->getBookmarks(), + uno::UNO_QUERY); + sal_Int32 nBookmarkCount = xBookmarks->getCount(); + if (nBookmarkCount && !(m_bIsRoot && m_nRootType != ContentTypeId::BOOKMARK)) { - uno::Reference<text::XTextContent> bookmark; - xBookmarks->getByIndex(i) >>= bookmark; - try - { - uno::Reference<text::XTextRange> bookmarkRange = bookmark->getAnchor(); - uno::Reference<text::XTextRangeCompare> xTextRangeCompare(xRange->getText(), - uno::UNO_QUERY); - if (xTextRangeCompare.is() - && xTextRangeCompare->compareRegionStarts(bookmarkRange, xRange) != -1 - && xTextRangeCompare->compareRegionEnds(xRange, bookmarkRange) != -1) + SwPaM* pCursor = pDoc->GetEditShell()->GetCursor(); + uno::Reference<text::XTextRange> xRange( + SwXTextRange::CreateXTextRange(*pDoc, *pCursor->GetPoint(), nullptr)); + for (sal_Int32 i = 0; i < nBookmarkCount; ++i) + { + uno::Reference<text::XTextContent> bookmark; + xBookmarks->getByIndex(i) >>= bookmark; + try + { + uno::Reference<text::XTextRange> bookmarkRange = bookmark->getAnchor(); + uno::Reference<text::XTextRangeCompare> xTextRangeCompare(xRange->getText(), + uno::UNO_QUERY); + if (xTextRangeCompare.is() + && xTextRangeCompare->compareRegionStarts(bookmarkRange, xRange) != -1 + && xTextRangeCompare->compareRegionEnds(xRange, bookmarkRange) != -1) + { + uno::Reference<container::XNamed> xBookmark(bookmark, uno::UNO_QUERY); + lcl_SelectByContentTypeAndName(this, *m_xTreeView, + SwResId(STR_CONTENT_TYPE_BOOKMARK), + xBookmark->getName()); + return; + } + } + catch (const lang::IllegalArgumentException&) { - uno::Reference<container::XNamed> xBookmark(bookmark, uno::UNO_QUERY); - lcl_SelectByContentTypeAndName(this, *m_xTreeView, - SwResId(STR_CONTENT_TYPE_BOOKMARK), - xBookmark->getName()); - return; } - } - catch (const lang::IllegalArgumentException&) - { } } }