diff options
author | Caolán McNamara <caolanm@redhat.com> | 2021-07-07 10:56:09 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2021-07-07 13:19:55 +0200 |
commit | 5933071ec7cb34c064206c8e81998a5f99d9aa8b (patch) | |
tree | 42434e218e0f33509978da29aa4d7110b4b6243b | |
parent | 4c56e02c71cbd0aa374afb5b9f8e2540b0d1149e (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.cxx | 29 |
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 |