sw/source/uibase/utlui/content.cxx |   49 +++++++++++++++++++++++++++----------
 sw/source/uibase/utlui/navipi.cxx  |    4 ++-
 2 files changed, 39 insertions(+), 14 deletions(-)

New commits:
commit b43ab86df783c7816deb5810d89d52e2c3a93b5a
Author:     Jim Raykowski <rayk...@gmail.com>
AuthorDate: Tue Apr 27 18:39:04 2021 -0800
Commit:     Jim Raykowski <rayk...@gmail.com>
CommitDate: Wed May 5 08:00:27 2021 +0200

    tdf#140969 Select in Navigator all document selected drawing objects
    
    when in Drawing objects content navigation view
    
    Change-Id: If5d78453f36f035a93936490ab8c2cd4223f1feb
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114811
    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 afe313cfafcf..f1264d026f9a 100644
--- a/sw/source/uibase/utlui/content.cxx
+++ b/sw/source/uibase/utlui/content.cxx
@@ -2536,11 +2536,11 @@ void SwContentTree::ToggleToRoot()
             }
             m_nRootType = pCntType->GetType();
             m_bIsRoot = true;
-            Display(State::HIDDEN != m_eState);
-            if (m_nRootType == ContentTypeId::OUTLINE)
+            if (m_nRootType == ContentTypeId::OUTLINE || m_nRootType == 
ContentTypeId::DRAWOBJECT)
             {
                 m_xTreeView->set_selection_mode(SelectionMode::Multiple);
             }
+            Display(State::HIDDEN != m_eState);
         }
     }
     else
@@ -2554,6 +2554,7 @@ void SwContentTree::ToggleToRoot()
     m_pConfig->SetRootType( m_nRootType );
     weld::Toolbar* pBox = GetParentWindow()->m_xContent5ToolBox.get();
     pBox->set_item_active("root", m_bIsRoot);
+    UpdateTracking();
 }
 
 bool SwContentTree::HasContentChanged()
@@ -3309,6 +3310,31 @@ static void 
lcl_SelectByContentTypeAndName(SwContentTree* pThis, weld::TreeView&
     }
 }
 
+static void lcl_SelectDrawObjectByName(weld::TreeView& rContentTree, 
std::u16string_view rName)
+{
+    if (rName.empty())
+        return;
+
+    // find content type entry
+    std::unique_ptr<weld::TreeIter> xIter(rContentTree.make_iterator());
+    bool bFoundEntry = rContentTree.get_iter_first(*xIter);
+    while (bFoundEntry && SwResId(STR_CONTENT_TYPE_DRAWOBJECT) != 
rContentTree.get_text(*xIter))
+        bFoundEntry = rContentTree.iter_next_sibling(*xIter);
+    // find content type content entry and select it
+    if (bFoundEntry)
+    {
+        rContentTree.expand_row(*xIter); // assure content type entry is 
expanded
+        while (rContentTree.iter_next(*xIter) && lcl_IsContent(*xIter, 
rContentTree))
+        {
+            if (rName == rContentTree.get_text(*xIter))
+            {
+                rContentTree.select(*xIter);
+                break;
+            }
+        }
+    }
+}
+
 /** No idle with focus or while dragging */
 IMPL_LINK_NOARG(SwContentTree, TimerUpdate, Timer *, void)
 {
@@ -3430,27 +3456,24 @@ void SwContentTree::UpdateTracking()
                                                SelectionType::DbForm)) &&
             !(m_bIsRoot && m_nRootType != ContentTypeId::DRAWOBJECT))
     {
+        m_xTreeView->unselect_all();
         SdrView* pSdrView = m_pActiveShell->GetDrawView();
-        if(pSdrView && 1 == pSdrView->GetMarkedObjectCount())
+        if (pSdrView)
         {
-            SdrObject* pSelected = pSdrView->GetMarkedObjectByIndex(0);
-            OUString aName(pSelected->GetName());
-            if (!aName.isEmpty())
-                lcl_SelectByContentTypeAndName(this, *m_xTreeView,
-                                               
SwResId(STR_CONTENT_TYPE_DRAWOBJECT), aName);
-            else
+            for (size_t nIdx(0); nIdx < pSdrView->GetMarkedObjectCount(); 
nIdx++)
             {
-                // clear treeview selections
-                m_xTreeView->unselect_all();
-                Select();
+                SdrObject* pSelected = pSdrView->GetMarkedObjectByIndex(nIdx);
+                OUString aName(pSelected->GetName());
+                if (!aName.isEmpty())
+                    lcl_SelectDrawObjectByName(*m_xTreeView, aName);
             }
         }
         else
         {
             // clear treeview selections
             m_xTreeView->unselect_all();
-            Select();
         }
+        Select();
         return;
     }
     // graphic, frame, and ole
diff --git a/sw/source/uibase/utlui/navipi.cxx 
b/sw/source/uibase/utlui/navipi.cxx
index 05bbbe6a9e5b..1567f7605d7e 100644
--- a/sw/source/uibase/utlui/navipi.cxx
+++ b/sw/source/uibase/utlui/navipi.cxx
@@ -1121,7 +1121,7 @@ SwNavigatorWin::SwNavigatorWin(SfxBindings* _pBindings, 
SfxChildWindow* _pMgr,
     {
         m_xNavi->m_xContentTree->SetRootType(nRootType);
         m_xNavi->m_xContent5ToolBox->set_item_active("root", true);
-        if (nRootType == ContentTypeId::OUTLINE)
+        if (nRootType == ContentTypeId::OUTLINE || nRootType == 
ContentTypeId::DRAWOBJECT)
         {
             
m_xNavi->m_xContentTree->set_selection_mode(SelectionMode::Multiple);
         }
@@ -1132,6 +1132,8 @@ SwNavigatorWin::SwNavigatorWin(SfxBindings* _pBindings, 
SfxChildWindow* _pMgr,
     SetMinOutputSizePixel(GetOptimalSize());
     if (pNaviConfig->IsSmall())
         m_xNavi->ZoomIn();
+
+    m_xNavi->m_xContentTree->UpdateTracking();
 }
 
 void SwNavigatorWin::StateChanged(StateChangedType nStateChange)
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to