[Libreoffice-commits] core.git: sw/source
Jim Raykowski (via logerrit)
logerrit at kemper.freedesktop.org
Sat Sep 18 05:21:09 UTC 2021
sw/source/uibase/inc/conttree.hxx | 5 +++-
sw/source/uibase/uiview/viewsrch.cxx | 2 +
sw/source/uibase/utlui/glbltree.cxx | 42 ++++++++++++++++++++++++++++++++---
3 files changed, 45 insertions(+), 4 deletions(-)
New commits:
commit 1f9a792a391f0811bbb5f570ad5c84d13312c539
Author: Jim Raykowski <raykowj at gmail.com>
AuthorDate: Tue Sep 14 16:07:53 2021 -0800
Commit: Jim Raykowski <raykowj at gmail.com>
CommitDate: Sat Sep 18 07:20:36 2021 +0200
tdf#144349 Make Navigator global tree track sub-document sections
Master document relies on the Navigator listing all the sub-documents.
However there is no connection between the currently selected section
(containing the sub-document) and the entry in the Navigator making it
very hard to see what file needs to be edited. This patch highlights
the corresponding item in the Navigator at the current cursor position
in the document.
Change-Id: Iee32d1db0e40e302bfff7a879d47a5632ce4ed43
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122103
Tested-by: Jenkins
Reviewed-by: Jim Raykowski <raykowj at gmail.com>
diff --git a/sw/source/uibase/inc/conttree.hxx b/sw/source/uibase/inc/conttree.hxx
index 4ac942e9ecd7..78e078cc78f3 100644
--- a/sw/source/uibase/inc/conttree.hxx
+++ b/sw/source/uibase/inc/conttree.hxx
@@ -282,7 +282,7 @@ public:
SwGlobalTreeDropTarget(SwGlobalTree& rTreeView);
};
-class SwGlobalTree final
+class SwGlobalTree final : public SfxListener
{
private:
std::unique_ptr<weld::TreeView> m_xTreeView;
@@ -368,6 +368,9 @@ public:
void ExecuteContextMenuAction(std::string_view rSelectedPopupEntry);
const SwWrtShell* GetActiveWrtShell() const {return m_pActiveShell;}
+
+ virtual void Notify(SfxBroadcaster& rBC, SfxHint const& rHint) override;
+ void UpdateTracking();
};
#endif
diff --git a/sw/source/uibase/uiview/viewsrch.cxx b/sw/source/uibase/uiview/viewsrch.cxx
index 66fb79ac3809..ba86732a82a3 100644
--- a/sw/source/uibase/uiview/viewsrch.cxx
+++ b/sw/source/uibase/uiview/viewsrch.cxx
@@ -256,6 +256,8 @@ void SwView::ExecSearch(SfxRequest& rReq)
bool bRet = SearchAll();
m_pWrtShell->GetSfxViewShell()->setTiledSearching(false);
+ GetDocShell()->Broadcast(
+ SfxHint(SfxHintId::SwNavigatorUpdateTracking));
GetDocShell()->Broadcast(
SfxHint(SfxHintId::SwNavigatorSelectOutlinesWithSelections));
diff --git a/sw/source/uibase/utlui/glbltree.cxx b/sw/source/uibase/utlui/glbltree.cxx
index 8ea94f9680f8..81c351f7249a 100644
--- a/sw/source/uibase/utlui/glbltree.cxx
+++ b/sw/source/uibase/utlui/glbltree.cxx
@@ -773,8 +773,33 @@ void SwGlobalTree::ExecuteContextMenuAction(std::string_view rSelectedPopupEntry
IMPL_LINK_NOARG(SwGlobalTree, Timeout, Timer *, void)
{
- if (!m_xTreeView->has_focus() && Update(false))
- Display();
+ if (m_pActiveShell && m_pActiveShell->GetView().GetEditWin().HasFocus())
+ {
+ if (Update(false))
+ Display();
+ UpdateTracking();
+ }
+}
+
+void SwGlobalTree::UpdateTracking()
+{
+ if (!m_pActiveShell)
+ return;
+
+ // track section at cursor position in document
+ m_xTreeView->unselect_all();
+
+ const SwSection* pActiveShellCurrSection = m_pActiveShell->GetCurrSection();
+ if (pActiveShellCurrSection)
+ {
+ const SwSection* pSection = pActiveShellCurrSection;
+ SwSection* pParent;
+ while ((pParent = pSection->GetParent()) != nullptr)
+ pSection = pParent;
+
+ if (pSection)
+ m_xTreeView->select_text(pSection->GetSectionName());
+ }
}
void SwGlobalTree::GotoContent(const SwGlblDocContent* pCont)
@@ -803,6 +828,7 @@ void SwGlobalTree::ShowTree()
{
m_aUpdateTimer.Start();
m_xTreeView->show();
+ UpdateTracking();
}
void SwGlobalTree::HideTree()
@@ -854,10 +880,13 @@ bool SwGlobalTree::Update(bool bHard)
bool bRet = false;
if (pActView && pActView->GetWrtShellPtr())
{
- const SwWrtShell* pOldShell = m_pActiveShell;
+ SwWrtShell* pOldShell = m_pActiveShell;
m_pActiveShell = pActView->GetWrtShellPtr();
if(m_pActiveShell != pOldShell)
{
+ if (pOldShell)
+ EndListening(*pOldShell->GetView().GetDocShell());
+ StartListening(*m_pActiveShell->GetView().GetDocShell());
m_pSwGlblDocContents.reset();
}
if(!m_pSwGlblDocContents)
@@ -1090,4 +1119,11 @@ IMPL_LINK( SwGlobalTree, DialogClosedHdl, sfx2::FileDialogHelper*, _pFileDlg, vo
m_pDocContent.reset();
}
+void SwGlobalTree::Notify(SfxBroadcaster& rBC, SfxHint const& rHint)
+{
+ SfxListener::Notify(rBC, rHint);
+ if (rHint.GetId() == SfxHintId::SwNavigatorUpdateTracking)
+ UpdateTracking();
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list