From 68e943265edf04e63a8e8b8f62bab20f99d9c637 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 10 Sep 2008 15:03:30 +0000 Subject: merge from 2.0-ongoing @ 3581 git-svn-id: svn://localhost/ardour2/branches/3.0@3711 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/actions.cc | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'gtk2_ardour/actions.cc') diff --git a/gtk2_ardour/actions.cc b/gtk2_ardour/actions.cc index f25dc1c9b2..fcfc6d75ce 100644 --- a/gtk2_ardour/actions.cc +++ b/gtk2_ardour/actions.cc @@ -162,6 +162,50 @@ struct SortActionsByLabel { } }; +void +ActionManager::get_all_actions (vector& groups, vector& names, vector& bindings) +{ + /* the C++ API for functions used here appears to be broken in + gtkmm2.6, so we fall back to the C level. + */ + + GList* list = gtk_ui_manager_get_action_groups (ui_manager->gobj()); + GList* node; + GList* acts; + + for (node = list; node; node = g_list_next (node)) { + + GtkActionGroup* group = (GtkActionGroup*) node->data; + + /* first pass: collect them all */ + + typedef std::list > action_list; + action_list the_acts; + + for (acts = gtk_action_group_list_actions (group); acts; acts = g_list_next (acts)) { + GtkAction* action = (GtkAction*) acts->data; + the_acts.push_back (Glib::wrap (action, true)); + } + + /* now sort by label */ + + SortActionsByLabel cmp; + the_acts.sort (cmp); + + for (action_list::iterator a = the_acts.begin(); a != the_acts.end(); ++a) { + + string accel_path = (*a)->get_accel_path (); + + groups.push_back (gtk_action_group_get_name(group)); + names.push_back (accel_path.substr (accel_path.find_last_of ('/') + 1)); + + AccelKey key; + lookup_entry (accel_path, key); + bindings.push_back (AccelKey (key.get_key(), Gdk::ModifierType (key.get_mod()))); + } + } +} + void ActionManager::get_all_actions (vector& names, vector& paths, vector& keys, vector& bindings) { @@ -226,6 +270,19 @@ ActionManager::get_widget (const char * name) return ui_manager->get_widget (name); } +RefPtr +ActionManager::get_action (const char* path) +{ + GtkAction* _act; + RefPtr act; + + if ((_act = gtk_ui_manager_get_action (ui_manager->gobj(), path)) != 0) { + return Glib::wrap (_act, true); + } + + return act; +} + RefPtr ActionManager::get_action (const char* group_name, const char* action_name) { -- cgit v1.2.3