sw/source/uibase/inc/conttree.hxx              |    9 +++--
 sw/source/uibase/utlui/content.cxx             |   38 +++++++++++++------------
 sw/uiconfig/swriter/ui/navigatorcontextmenu.ui |    8 +++++
 3 files changed, 34 insertions(+), 21 deletions(-)

New commits:
commit a82aa195ca6bf8f0ff8e3f244b3146fb80cb22d5
Author:     Jim Raykowski <[email protected]>
AuthorDate: Fri Dec 5 09:01:34 2025 -0900
Commit:     Jim Raykowski <[email protected]>
CommitDate: Sat Dec 6 00:04:54 2025 +0100

    SwNavigator: Improve Indexes context menu
    
    Rework of commit ae94c420e6269f99cdaa611d19e73fc92ebd234b where I made
    the visibility of menu items dependent on the state of the index
    'Read-only' setting. I also removed the 'Remove Index' menu entry. I've
    since realized that index 'Read-only' is 'Protected against
    manual changes' and 'Remove Index' removes the index section but keeps
    the index text. Both of these changes are reverted by this patch.
    
    Change-Id: Icded7a0b2ed0a09619a34b518c1aeb08839b870c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195108
    Reviewed-by: Jim Raykowski <[email protected]>
    Tested-by: Jenkins

diff --git a/sw/source/uibase/inc/conttree.hxx 
b/sw/source/uibase/inc/conttree.hxx
index c06d256c5257..983215e7c255 100644
--- a/sw/source/uibase/inc/conttree.hxx
+++ b/sw/source/uibase/inc/conttree.hxx
@@ -47,10 +47,11 @@ enum class EditEntryMode
 {
     EDIT          = 0,
     UPD_IDX       = 1,
-    UNPROTECT_TABLE    = 2,
-    DELETE        = 3,
-    RENAME        = 4,
-    TEXT_ALTERNATIVE = 5
+    RMV_IDX       = 2,
+    UNPROTECT_TABLE    = 3,
+    DELETE        = 4,
+    RENAME        = 5,
+    TEXT_ALTERNATIVE = 6
 };
 
 // Flags for PopupMenu-enable/disable
diff --git a/sw/source/uibase/utlui/content.cxx 
b/sw/source/uibase/utlui/content.cxx
index e24ee42d2dc1..aa43f6731959 100644
--- a/sw/source/uibase/utlui/content.cxx
+++ b/sw/source/uibase/utlui/content.cxx
@@ -1757,6 +1757,7 @@ IMPL_LINK(SwContentTree, CommandHdl, const CommandEvent&, 
rCEvt, bool)
         bRemoveGotoEntry = true;
 
     bool bRemovePostItEntries = true;
+    bool bRemoveIndexEntry = true;
     bool bRemoveUpdateIndexEntry = true;
     bool bRemoveReadonlyIndexEntry = true;
     bool bRemoveCopyEntry = true;
@@ -1917,7 +1918,7 @@ IMPL_LINK(SwContentTree, CommandHdl, const CommandEvent&, 
rCEvt, bool)
             const bool bEditable
                 = !bReadonly && pType->IsEditable()
                   && ((bVisible && !bProtected) || ContentTypeId::REGION == 
nContentType);
-            const bool bDeletable = pType->IsDeletable() && 
IsDeletable(*xEntry);
+            const bool bDeletable = !bReadonly && pType->IsDeletable() && 
IsDeletable(*xEntry);
             const bool bRenamable
                 = !bReadonly
                   && (pType->IsRenamable()
@@ -1952,6 +1953,9 @@ IMPL_LINK(SwContentTree, CommandHdl, const CommandEvent&, 
rCEvt, bool)
                     case ContentTypeId::REFERENCE:
                         bRemoveDeleteReferenceEntry = false;
                     break;
+                    case ContentTypeId::INDEX:
+                        bRemoveDeleteIndexEntry = false;
+                    break;
                     case ContentTypeId::POSTIT:
                         bRemoveDeleteCommentEntry = false;
                     break;
@@ -1993,18 +1997,15 @@ IMPL_LINK(SwContentTree, CommandHdl, const 
CommandEvent&, rCEvt, bool)
             }
             else if (bEditable)
             {
-                if(ContentTypeId::INDEX == nContentType)
+                if (ContentTypeId::INDEX == nContentType)
                 {
-                    bRemoveReadonlyIndexEntry = false;
+                    bRemoveIndexEntry = false;
+                    bRemoveUpdateIndexEntry = false;
                     bRemoveEditEntry = false;
-                    const SwTOXBase* pBase = 
weld::fromId<SwTOXBaseContent*>(m_xTreeView->get_id(*xEntry))->GetTOXBase();
-                    if (!pBase->IsTOXBaseInReadonly() && 
!SwEditShell::IsTOXBaseReadonly(*pBase))
-                    {
-                        bRemoveUpdateIndexEntry = false;
-                        bRemoveDeleteIndexEntry = false;
-                    }
-                    else
-                        bReadonly = true;
+                    bRemoveReadonlyIndexEntry = false;
+                    const SwTOXBase* pBase
+                        = 
weld::fromId<SwTOXBaseContent*>(m_xTreeView->get_id(*xEntry))
+                              ->GetTOXBase();
                     xPop->set_active(OUString::number(405), 
SwEditShell::IsTOXBaseReadonly(*pBase));
                 }
                 else if(ContentTypeId::TABLE == nContentType)
@@ -2254,6 +2255,9 @@ IMPL_LINK(SwContentTree, CommandHdl, const CommandEvent&, 
rCEvt, bool)
     if (bRemoveTextAlternative)
         xPop->remove(u"textalternative"_ustr);
 
+    if (bRemoveIndexEntry)
+        xPop->remove(OUString::number(401));
+
     if (bRemoveUpdateIndexEntry)
         xPop->remove(OUString::number(402));
 
@@ -2281,6 +2285,8 @@ IMPL_LINK(SwContentTree, CommandHdl, const CommandEvent&, 
rCEvt, bool)
             bRemoveChapterEntries &&
             bRemovePostItEntries &&
             bRemoveRenameEntry &&
+            bRemoveIndexEntry &&
+            bRemoveUpdateIndexEntry &&
             bRemoveReadonlyIndexEntry &&
             bRemoveUnprotectEntry &&
             bRemoveEditEntry)
@@ -6045,6 +6051,9 @@ void SwContentTree::ExecuteContextMenuAction(const 
OUString& rSelectedPopupEntry
             if(m_nOutlineLevel != nSelectedPopupEntry )
                 SetOutlineLevel(static_cast<sal_Int8>(nSelectedPopupEntry));
         break;
+        case 401:
+            EditEntry(*xFirst, EditEntryMode::RMV_IDX);
+        break;
         case 402:
             EditEntry(*xFirst, EditEntryMode::UPD_IDX);
         break;
@@ -6481,6 +6490,7 @@ void SwContentTree::EditEntry(const weld::TreeIter& 
rEntry, EditEntryMode nMode)
 
                     }
                 break;
+                case EditEntryMode::RMV_IDX:
                 case EditEntryMode::DELETE:
                 {
                     if( pBase )
@@ -6585,12 +6595,6 @@ bool SwContentTree::IsDeletable(const SwContent* 
pContent)
     if (eContentTypeId == ContentTypeId::BOOKMARK)
         return !m_pActiveShell->getIDocumentSettingAccess().get(
             DocumentSettingId::PROTECT_BOOKMARKS);
-    // index
-    if (eContentTypeId == ContentTypeId::INDEX)
-    {
-        const SwTOXBase* pBase = static_cast<const 
SwTOXBaseContent*>(pContent)->GetTOXBase();
-        return !SwEditShell::IsTOXBaseReadonly(*pBase);
-    }
 
     return true;
 }
diff --git a/sw/uiconfig/swriter/ui/navigatorcontextmenu.ui 
b/sw/uiconfig/swriter/ui/navigatorcontextmenu.ui
index 2e2e65c6fa57..596b03845523 100644
--- a/sw/uiconfig/swriter/ui/navigatorcontextmenu.ui
+++ b/sw/uiconfig/swriter/ui/navigatorcontextmenu.ui
@@ -98,6 +98,14 @@
         <accelerator key="Right" signal="activate" 
modifiers="GDK_CONTROL_MASK"/>
       </object>
     </child>
+    <child>
+      <object class="GtkMenuItem" id="401">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_REMOVE_INDEX">_Remove Index</property>
+        <property name="use-underline">True</property>
+      </object>
+    </child>
     <child>
       <object class="GtkMenuItem" id="402">
         <property name="visible">True</property>

Reply via email to