From e1b7a43139ae8be7c648d1fc49f3e6bb5d9d4c30 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 11 Dec 2018 05:05:09 -0500 Subject: add ActionManager::get_actions() to fetch all actions created in ActionGroups with a given "owner" value --- libs/gtkmm2ext/actions.cc | 15 +++++++++++++++ libs/gtkmm2ext/bindings.cc | 9 +++------ libs/gtkmm2ext/gtkmm2ext/actions.h | 1 + 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/libs/gtkmm2ext/actions.cc b/libs/gtkmm2ext/actions.cc index 00d85d35c6..25d2ca148c 100644 --- a/libs/gtkmm2ext/actions.cc +++ b/libs/gtkmm2ext/actions.cc @@ -473,6 +473,21 @@ ActionManager::register_toggle_action (RefPtr group, return RefPtr(); } +void +ActionManager::get_actions (void* owner, std::vector >& acts) +{ + for (ActionMap::const_iterator a = actions.begin(); a != actions.end(); ++a) { + if (owner) { + Glib::RefPtr group = a->second->property_action_group (); + if (group->get_data (X_("owner")) == owner) { + acts.push_back (a->second); + } + } else { + acts.push_back (a->second); + } + } +} + void ActionManager::get_all_actions (std::vector& paths, std::vector& labels, diff --git a/libs/gtkmm2ext/bindings.cc b/libs/gtkmm2ext/bindings.cc index ce32cd725d..61c0c2dd0f 100644 --- a/libs/gtkmm2ext/bindings.cc +++ b/libs/gtkmm2ext/bindings.cc @@ -1014,14 +1014,12 @@ Bindings::get_all_actions (std::vector& paths, rmap.insert (make_pair (k->second.action, k->first)); } -#if 0 - /* get a list of all actions XXX relevant for these bindings */ - ActionMap::Actions all_actions; - ActionManager::get_actions (all_actions); + std::vector > relevant_actions; + ActionManager::get_actions (this, relevant_actions); - for (ActionMap::Actions::const_iterator act = all_actions.begin(); act != all_actions.end(); ++act) { + for (vector >::const_iterator act = relevant_actions.begin(); act != relevant_actions.end(); ++act) { paths.push_back ((*act)->get_accel_path()); labels.push_back ((*act)->get_label()); @@ -1037,7 +1035,6 @@ Bindings::get_all_actions (std::vector& paths, actions.push_back (*act); } -#endif } Bindings* diff --git a/libs/gtkmm2ext/gtkmm2ext/actions.h b/libs/gtkmm2ext/gtkmm2ext/actions.h index 620d6c82d0..6bb56adaee 100644 --- a/libs/gtkmm2ext/gtkmm2ext/actions.h +++ b/libs/gtkmm2ext/gtkmm2ext/actions.h @@ -94,6 +94,7 @@ namespace ActionManager { LIBGTKMM2EXT_API extern Glib::RefPtr get_radio_action (const std::string& name, bool or_die = true); LIBGTKMM2EXT_API extern Glib::RefPtr get_radio_action (char const * group_name, char const * action_name, bool or_die = true); + LIBGTKMM2EXT_API extern void get_actions (void* owner, std::vector >&); LIBGTKMM2EXT_API extern void get_all_actions (std::vector& paths, std::vector& labels, -- cgit v1.2.3