[Libreoffice-commits] core.git: include/svl svx/source sw/source

Jim Raykowski (via logerrit) logerrit at kemper.freedesktop.org
Wed Sep 30 03:22:39 UTC 2020


 include/svl/hint.hxx                           |    2 
 svx/source/tbxctrls/tbunosearchcontrollers.cxx |    5 
 sw/source/uibase/inc/conttree.hxx              |    1 
 sw/source/uibase/uiview/viewsrch.cxx           |    2 
 sw/source/uibase/utlui/content.cxx             |  139 +++++++++++++------------
 5 files changed, 81 insertions(+), 68 deletions(-)

New commits:
commit f4f0ea6a41e99e12812a791f732694c8e86acb8c
Author:     Jim Raykowski <raykowj at gmail.com>
AuthorDate: Sat Sep 26 21:18:48 2020 -0800
Commit:     Jim Raykowski <raykowj at gmail.com>
CommitDate: Wed Sep 30 05:22:02 2020 +0200

    tdf#137013 fix Writer find toolbar ui regressions
    
    introduced by enhancement patch tdf#132366
    
    Change-Id: I951fcd7891c75e7fbf715581c316b4446d967cd9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103499
    Tested-by: Jenkins
    Reviewed-by: Jim Raykowski <raykowj at gmail.com>

diff --git a/include/svl/hint.hxx b/include/svl/hint.hxx
index 77e838a5d21c..adff3fa6239d 100644
--- a/include/svl/hint.hxx
+++ b/include/svl/hint.hxx
@@ -112,6 +112,7 @@ enum class SfxHintId {
     SwDrawViewsCreated,
     SwSplitNodeOperation,
     SwSectionFrameMoveAndDelete,
+    SwNavigatorUpdateTracking,
     SwNavigatorSelectOutlinesWithSelections,
 
     ThisIsAnSdrHint // used to avoid dynamic_cast
@@ -193,6 +194,7 @@ inline std::basic_ostream<charT, traits> & operator <<(
     case SfxHintId::SwDrawViewsCreated: return stream << "SwDrawViewsCreated";
     case SfxHintId::SwSplitNodeOperation: return stream << "SwSplitNodeOperation";
     case SfxHintId::SwSectionFrameMoveAndDelete: return stream << "SwSectionFrameMoveAndDelete";
+    case SfxHintId::SwNavigatorUpdateTracking: return stream << "SwNavigatorUpdateTracking";
     case SfxHintId::SwNavigatorSelectOutlinesWithSelections:
         return stream << "SwNavigatorSelectOutlinesWithSelections";
     case SfxHintId::ThisIsAnSdrHint: return stream << "SdrHint";
diff --git a/svx/source/tbxctrls/tbunosearchcontrollers.cxx b/svx/source/tbxctrls/tbunosearchcontrollers.cxx
index 20430681de7a..931f5d72d51a 100644
--- a/svx/source/tbxctrls/tbunosearchcontrollers.cxx
+++ b/svx/source/tbxctrls/tbunosearchcontrollers.cxx
@@ -144,9 +144,7 @@ void impl_executeSearch( const css::uno::Reference< css::uno::XComponentContext
                 {
                     sFindText = pItemWin->get_active_text();
                     if (aFindAll)
-                        pItemWin->GrabFocus();
-                    else
-                        pItemWin->GrabFocusToDocument();
+                        pItemWin->GetFocus();
                 }
             } else if ( sItemCommand == COMMAND_MATCHCASE )
             {
@@ -302,6 +300,7 @@ IMPL_LINK(FindTextFieldControl, KeyInputHdl, const KeyEvent&, rKeyEvent, bool)
     else if ( KEY_RETURN == nCode || (bMod1 && (KEY_G == nCode)) || (KEY_F3 == nCode) )
     {
         ActivateFind(bShift);
+        m_xWidget->grab_focus();
         bRet = true;
     }
     else
diff --git a/sw/source/uibase/inc/conttree.hxx b/sw/source/uibase/inc/conttree.hxx
index 80b9d8d69bbe..77ef2ef4c0c3 100644
--- a/sw/source/uibase/inc/conttree.hxx
+++ b/sw/source/uibase/inc/conttree.hxx
@@ -225,6 +225,7 @@ public:
 
     void Select();
 
+    void UpdateTracking();
     void SelectOutlinesWithSelection();
 
     // return true if it has any children
diff --git a/sw/source/uibase/uiview/viewsrch.cxx b/sw/source/uibase/uiview/viewsrch.cxx
index de7f0be5b369..578d02f296d4 100644
--- a/sw/source/uibase/uiview/viewsrch.cxx
+++ b/sw/source/uibase/uiview/viewsrch.cxx
@@ -236,7 +236,7 @@ void SwView::ExecSearch(SfxRequest& rReq)
                 }
                 rReq.SetReturnValue(SfxBoolItem(nSlot, bRet));
 
-                m_pEditWin->GrabFocus();
+                GetDocShell()->Broadcast(SfxHint(SfxHintId::SwNavigatorUpdateTracking));
             }
             break;
             case SvxSearchCmd::FIND_ALL:
diff --git a/sw/source/uibase/utlui/content.cxx b/sw/source/uibase/utlui/content.cxx
index 353ee2bad359..422133559c45 100644
--- a/sw/source/uibase/utlui/content.cxx
+++ b/sw/source/uibase/utlui/content.cxx
@@ -2719,6 +2719,9 @@ void SwContentTree::Notify(SfxBroadcaster & rBC, SfxHint const& rHint)
     }
     switch (rHint.GetId())
     {
+        case SfxHintId::SwNavigatorUpdateTracking:
+            UpdateTracking();
+            break;
         case SfxHintId::SwNavigatorSelectOutlinesWithSelections:
         {
             if (m_nRootType == ContentTypeId::OUTLINE)
@@ -3115,82 +3118,90 @@ IMPL_LINK_NOARG(SwContentTree, TimerUpdate, Timer *, void)
             Display(true);
         }
 
-        // track document outline position at cursor
-        if (m_nOutlineTracking == 3) // no outline tracking
-            return;
-
-        const SwOutlineNodes::size_type nActPos = GetWrtShell()->GetOutlinePos(MAXLEVEL); // find out where the cursor is
-        if (nActPos == SwOutlineNodes::npos)
-            return;
-
-        // only track if selection is already an outline
-        std::unique_ptr<weld::TreeIter> xFirstSelected(m_xTreeView->make_iterator());
-        if (!m_xTreeView->get_selected(xFirstSelected.get()))
-            xFirstSelected.reset();
-        if (xFirstSelected && lcl_IsContent(*xFirstSelected, *m_xTreeView) &&
-                reinterpret_cast<SwContent*>(m_xTreeView->get_id(*xFirstSelected).toInt64())->GetParent()->GetType() != ContentTypeId::OUTLINE)
-            return;
-        if (xFirstSelected && lcl_IsContentType(*xFirstSelected, *m_xTreeView) &&
-                reinterpret_cast<SwContentType*>(m_xTreeView->get_id(*xFirstSelected).toInt64())->GetType() != ContentTypeId::OUTLINE)
-            return;
-
-        int nSelectedRows = m_xTreeView->count_selected_rows();
-
-        // find the outline in the tree and select it
-        m_xTreeView->all_foreach([this, nSelectedRows, nActPos, &xFirstSelected](weld::TreeIter& rEntry){
-            bool bRet = false;
-
-            if (lcl_IsContent(rEntry, *m_xTreeView) &&
-                    reinterpret_cast<SwContent*>(m_xTreeView->get_id(rEntry).toInt64())->GetParent()->GetType() == ContentTypeId::OUTLINE)
+        UpdateTracking();
+    }
+    else if (!pView && State::ACTIVE == m_eState && !m_bIsIdleClear)
+    {
+        if(m_pActiveShell)
+        {
+            SetActiveShell(nullptr);
+        }
+        clear();
+        m_bIsIdleClear = true;
+    }
+}
+
+void SwContentTree::UpdateTracking()
+{
+    if (State::HIDDEN == m_eState)
+        return;
+
+    // track document outline position at cursor
+    if (m_nOutlineTracking == 3) // no outline tracking
+        return;
+
+    const SwOutlineNodes::size_type nActPos = GetWrtShell()->GetOutlinePos(MAXLEVEL); // find out where the cursor is
+    if (nActPos == SwOutlineNodes::npos)
+        return;
+
+    // only track if selection is already an outline
+    std::unique_ptr<weld::TreeIter> xFirstSelected(m_xTreeView->make_iterator());
+    if (!m_xTreeView->get_selected(xFirstSelected.get()))
+        xFirstSelected.reset();
+    if (xFirstSelected && lcl_IsContent(*xFirstSelected, *m_xTreeView) &&
+            reinterpret_cast<SwContent*>(m_xTreeView->get_id(*xFirstSelected).toInt64())->GetParent()->GetType() != ContentTypeId::OUTLINE)
+        return;
+    if (xFirstSelected && lcl_IsContentType(*xFirstSelected, *m_xTreeView) &&
+            reinterpret_cast<SwContentType*>(m_xTreeView->get_id(*xFirstSelected).toInt64())->GetType() != ContentTypeId::OUTLINE)
+        return;
+
+    int nSelectedRows = m_xTreeView->count_selected_rows();
+
+    // find the outline in the tree and select it
+    m_xTreeView->all_foreach([this, nSelectedRows, nActPos, &xFirstSelected](weld::TreeIter& rEntry){
+        bool bRet = false;
+
+        if (lcl_IsContent(rEntry, *m_xTreeView) &&
+                reinterpret_cast<SwContent*>(m_xTreeView->get_id(rEntry).toInt64())->GetParent()->GetType() == ContentTypeId::OUTLINE)
+        {
+            // might have been scrolled out of view by the user so leave it that way
+            if (reinterpret_cast<SwOutlineContent*>(m_xTreeView->get_id(rEntry).toInt64())->GetOutlinePos() == nActPos)
             {
-                // might have been scrolled out of view by the user so leave it that way
-                if (reinterpret_cast<SwOutlineContent*>(m_xTreeView->get_id(rEntry).toInt64())->GetOutlinePos() == nActPos)
+                // only select if not already selected or tree has multiple entries selected
+                if (nSelectedRows != 1 || m_xTreeView->iter_compare(rEntry, *xFirstSelected) != 0)
                 {
-                    // only select if not already selected or tree has multiple entries selected
-                    if (nSelectedRows != 1 || m_xTreeView->iter_compare(rEntry, *xFirstSelected) != 0)
+                    if (m_nOutlineTracking == 2) // focused outline tracking
                     {
-                        if (m_nOutlineTracking == 2) // focused outline tracking
+                        // collapse to children of root node
+                        std::unique_ptr<weld::TreeIter> xChildEntry(m_xTreeView->make_iterator());
+                        if (m_xTreeView->get_iter_first(*xChildEntry) && m_xTreeView->iter_children(*xChildEntry))
                         {
-                            // collapse to children of root node
-                            std::unique_ptr<weld::TreeIter> xChildEntry(m_xTreeView->make_iterator());
-                            if (m_xTreeView->get_iter_first(*xChildEntry) && m_xTreeView->iter_children(*xChildEntry))
+                            do
                             {
-                                do
-                                {
-                                    if (reinterpret_cast<SwContent*>(m_xTreeView->get_id(*xChildEntry).toInt64())->GetParent()->GetType() == ContentTypeId::OUTLINE)
-                                        m_xTreeView->collapse_row(*xChildEntry);
-                                    else
-                                        break;
-                                }
-                                while (m_xTreeView->iter_next(*xChildEntry));
+                                if (reinterpret_cast<SwContent*>(m_xTreeView->get_id(*xChildEntry).toInt64())->GetParent()->GetType() == ContentTypeId::OUTLINE)
+                                    m_xTreeView->collapse_row(*xChildEntry);
+                                else
+                                    break;
                             }
+                            while (m_xTreeView->iter_next(*xChildEntry));
                         }
-                        m_xTreeView->set_cursor(rEntry); // unselect all entries, make pEntry visible, and select
-                        Select();
                     }
-                    bRet = true;
+                    m_xTreeView->set_cursor(rEntry); // unselect all entries, make pEntry visible, and select
+                    Select();
                 }
+                bRet = true;
             }
-            else
-            {
-                // use of this break assumes outline content type is first in tree
-                if (lcl_IsContentType(rEntry, *m_xTreeView) &&
-                        reinterpret_cast<SwContentType*>(m_xTreeView->get_id(rEntry).toInt64())->GetType() != ContentTypeId::OUTLINE)
-                    bRet = true;
-            }
-
-            return bRet;
-        });
-    }
-    else if (!pView && State::ACTIVE == m_eState && !m_bIsIdleClear)
-    {
-        if(m_pActiveShell)
+        }
+        else
         {
-            SetActiveShell(nullptr);
+            // use of this break assumes outline content type is first in tree
+            if (lcl_IsContentType(rEntry, *m_xTreeView) &&
+                    reinterpret_cast<SwContentType*>(m_xTreeView->get_id(rEntry).toInt64())->GetType() != ContentTypeId::OUTLINE)
+                bRet = true;
         }
-        clear();
-        m_bIsIdleClear = true;
-    }
+
+        return bRet;
+    });
 }
 
 void SwContentTree::SelectOutlinesWithSelection()


More information about the Libreoffice-commits mailing list