summaryrefslogtreecommitdiff
path: root/gtk2_ardour/actions.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/actions.cc')
-rw-r--r--gtk2_ardour/actions.cc39
1 files changed, 38 insertions, 1 deletions
diff --git a/gtk2_ardour/actions.cc b/gtk2_ardour/actions.cc
index 0dca875e3f..8a50451cb5 100644
--- a/gtk2_ardour/actions.cc
+++ b/gtk2_ardour/actions.cc
@@ -20,6 +20,8 @@
#include <vector>
#include <gtk/gtkaccelmap.h>
+#include <gtk/gtkuimanager.h>
+#include <gtk/gtkactiongroup.h>
#include <gtkmm/accelmap.h>
#include <gtkmm/uimanager.h>
@@ -192,7 +194,42 @@ ActionManager::get_widget (ustring name)
RefPtr<Action>
ActionManager::get_action (ustring name)
{
- return ui_manager->get_action (name);
+ // ListHandle<RefPtr<ActionGroup> > uim_groups = ui_manager->get_action_groups ();
+ GList* list = gtk_ui_manager_get_action_groups (ui_manager->gobj());
+ GList* node;
+ RefPtr<Action> act;
+
+ if (name.substr (0,9) != "<Actions>") {
+ cerr << "badly specified action name" << endl;
+ return act;
+ }
+
+ ustring::size_type last_slash = name.find_last_of ('/');
+ ustring group_name = name.substr (10, last_slash - 10);
+ cerr << "group name = " << group_name << endl;
+ ustring action_name = name.substr (last_slash+1);
+ cerr << "action name = " << action_name << endl;
+
+ cerr << "there are " << g_list_length (list) << " action roups\n";
+
+ for (node = list; node; node = g_list_next (node)) {
+
+ GtkActionGroup* _ag = (GtkActionGroup*) node->data;
+
+ cerr << "\tchecking in " << gtk_action_group_get_name (_ag) << endl;
+
+ if (group_name == gtk_action_group_get_name (_ag)) {
+
+ GtkAction* _act;
+
+ if ((_act = gtk_action_group_get_action (_ag, action_name.c_str())) != 0) {
+ act = Glib::wrap (_act);
+ break;
+ }
+ }
+ }
+
+ return act;
}
void