[Libreoffice-commits] core.git: sw/source
Jim Raykowski (via logerrit)
logerrit at kemper.freedesktop.org
Wed Sep 22 00:55:27 UTC 2021
sw/source/uibase/utlui/content.cxx | 41 +++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
New commits:
commit d62f03d316fb4c60087fc2af626bbd0b35b98693
Author: Jim Raykowski <raykowj at gmail.com>
AuthorDate: Sun Sep 19 19:55:06 2021 -0800
Commit: Jim Raykowski <raykowj at gmail.com>
CommitDate: Wed Sep 22 02:54:46 2021 +0200
tdf#95378 Writer Navigator: Track hyperlinks
Continued effort for request to highlight corresponding Navigator tree
items at document cursor position.
Change-Id: I21c6b45308c7de654dbf1f904c30336a6229722c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122338
Tested-by: Jenkins
Reviewed-by: Jim Raykowski <raykowj at gmail.com>
diff --git a/sw/source/uibase/utlui/content.cxx b/sw/source/uibase/utlui/content.cxx
index 4efaa1b40502..4a0eea209990 100644
--- a/sw/source/uibase/utlui/content.cxx
+++ b/sw/source/uibase/utlui/content.cxx
@@ -3391,6 +3391,47 @@ void SwContentTree::UpdateTracking()
return;
}
+ // hyperlinks
+ if (SwContentAtPos aContentAtPos(IsAttrAtPos::InetAttr);
+ m_pActiveShell->GetContentAtPos(m_pActiveShell->GetCursorDocPos(), aContentAtPos) &&
+ !(m_bIsRoot && m_nRootType != ContentTypeId::URLFIELD))
+ {
+ // Because hyperlink item names do not need to be unique, finding the corrosponding item
+ // in the tree by name may result in incorrect selection. Find the item in the tree by
+ // comparing the SwTextINetFormat pointer at the document cursor position to that stored
+ // in the item SwURLFieldContent.
+ // find content type entry
+ std::unique_ptr<weld::TreeIter> xIter(m_xTreeView->make_iterator());
+ bool bFoundEntry = m_xTreeView->get_iter_first(*xIter);
+ while (bFoundEntry && SwResId(STR_CONTENT_TYPE_URLFIELD) != m_xTreeView->get_text(*xIter))
+ bFoundEntry = m_xTreeView->iter_next_sibling(*xIter);
+ if (bFoundEntry)
+ {
+ // assure content type entry is expanded
+ m_xTreeView->expand_row(*xIter);
+ // find content type content entry and select it
+ while (m_xTreeView->iter_next(*xIter) && lcl_IsContent(*xIter, *m_xTreeView))
+ {
+ if (aContentAtPos.pFndTextAttr == reinterpret_cast<const SwURLFieldContent*>
+ (m_xTreeView->get_id(*xIter).toInt64())->GetINetAttr())
+ {
+ // get first selected for comparison
+ std::unique_ptr<weld::TreeIter> xFirstSelected(m_xTreeView->make_iterator());
+ if (!m_xTreeView->get_selected(xFirstSelected.get()))
+ xFirstSelected.reset();
+ if (m_xTreeView->count_selected_rows() != 1 ||
+ m_xTreeView->iter_compare(*xIter, *xFirstSelected) != 0)
+ {
+ // unselect all entries and make found entry visible and selected
+ m_xTreeView->set_cursor(*xIter);
+ Select();
+ }
+ break;
+ }
+ }
+ }
+ return;
+ }
// fields
if (SwField* pField = m_pActiveShell->GetCurField(); pField &&
!(m_bIsRoot && m_nRootType != ContentTypeId::TEXTFIELD))
More information about the Libreoffice-commits
mailing list