add ActionManager::get_actions() to fetch all actions created in ActionGroups with...
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 11 Dec 2018 10:05:09 +0000 (05:05 -0500)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 11 Dec 2018 10:05:09 +0000 (05:05 -0500)
libs/gtkmm2ext/actions.cc
libs/gtkmm2ext/bindings.cc
libs/gtkmm2ext/gtkmm2ext/actions.h

index 00d85d35c6cd4c2bf51cccce3c08d624808bf26c..25d2ca148cbf6ec19267e6ab4a2ee0564a9147af 100644 (file)
@@ -473,6 +473,21 @@ ActionManager::register_toggle_action (RefPtr<ActionGroup> group,
        return RefPtr<Action>();
 }
 
+void
+ActionManager::get_actions (void* owner, std::vector<Glib::RefPtr<Gtk::Action> >& acts)
+{
+       for (ActionMap::const_iterator a = actions.begin(); a != actions.end(); ++a) {
+               if (owner) {
+                       Glib::RefPtr<Gtk::ActionGroup> 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<std::string>& paths,
                             std::vector<std::string>& labels,
index ce32cd725d19ed89043c2b42fae07b66fb8a65b7..61c0c2dd0f826b45cca8c88470548e99a329258b 100644 (file)
@@ -1014,14 +1014,12 @@ Bindings::get_all_actions (std::vector<std::string>& 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<Glib::RefPtr<Action> > relevant_actions;
+       ActionManager::get_actions (this, relevant_actions);
 
-       for (ActionMap::Actions::const_iterator act = all_actions.begin(); act != all_actions.end(); ++act) {
+       for (vector<Glib::RefPtr<Action> >::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<std::string>& paths,
 
                actions.push_back (*act);
        }
-#endif
 }
 
 Bindings*
index 620d6c82d0296e505d2fef4a2100311ec55d18ce..6bb56adaee1d060a617efde45faa2a6a8a1a986b 100644 (file)
@@ -94,6 +94,7 @@ namespace ActionManager {
        LIBGTKMM2EXT_API extern Glib::RefPtr<Gtk::RadioAction>  get_radio_action (const std::string& name, bool or_die = true);
        LIBGTKMM2EXT_API extern Glib::RefPtr<Gtk::RadioAction>  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<Glib::RefPtr<Gtk::Action> >&);
 
        LIBGTKMM2EXT_API extern void get_all_actions (std::vector<std::string>& paths,
                                     std::vector<std::string>& labels,