summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2021-07-07 10:56:09 +0100
committerCaolán McNamara <caolanm@redhat.com>2021-07-07 13:19:55 +0200
commit5933071ec7cb34c064206c8e81998a5f99d9aa8b (patch)
tree42434e218e0f33509978da29aa4d7110b4b6243b
parent4c56e02c71cbd0aa374afb5b9f8e2540b0d1149e (diff)
gtk4: rework remove_id to extract a standalone find_id
Change-Id: I08ce91b78a09ad2db1c8e1aa09abc50fd61e177d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118554 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--vcl/unx/gtk3/gtkinst.cxx29
1 files changed, 19 insertions, 10 deletions
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index 2f3c9f8da9bd..8495612b3c82 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -9370,7 +9370,7 @@ private:
}
}
- bool remove_id(GMenuModel* pMenuModel, const OString& rId)
+ std::pair<GMenuModel*, int> find_id(GMenuModel* pMenuModel, const OString& rId)
{
for (int i = 0, nCount = g_menu_model_get_n_items(pMenuModel); i < nCount; ++i)
{
@@ -9383,23 +9383,32 @@ private:
}
if (sTarget == rId)
- {
- g_menu_remove(G_MENU(pMenuModel), i);
- return true;
- }
+ return std::make_pair(pMenuModel, i);
if (GMenuModel* pSectionModel = g_menu_model_get_item_link(pMenuModel, i, G_MENU_LINK_SECTION))
{
- if (remove_id(pSectionModel, rId))
- return true;
+ std::pair<GMenuModel*, int> aRet = find_id(pSectionModel, rId);
+ if (aRet.first)
+ return aRet;
}
if (GMenuModel* pSubMenuModel = g_menu_model_get_item_link(pMenuModel, i, G_MENU_LINK_SUBMENU))
{
- if (remove_id(pSubMenuModel, rId))
- return true;
+ std::pair<GMenuModel*, int> aRet = find_id(pSubMenuModel, rId);
+ if (aRet.first)
+ return aRet;
}
}
- return false;
+
+ return std::make_pair(nullptr, -1);
+ }
+
+ bool remove_id(GMenuModel* pMenuModel, const OString& rId)
+ {
+ std::pair<GMenuModel*, int> aRes = find_id(pMenuModel, rId);
+ if (!aRes.first)
+ return false;
+ g_menu_remove(G_MENU(aRes.first), aRes.second);
+ return true;
}
#endif