summaryrefslogtreecommitdiff
path: root/gtk2_ardour/actions.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2005-12-05 04:11:08 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2005-12-05 04:11:08 +0000
commit7d1f1eeb20edc21d704cc69529e4e94dd7eabd39 (patch)
tree28641dd038b3e778f7edeb17d9df73fa3ee6cd3e /gtk2_ardour/actions.cc
parentf2c09c7a7a195bcd4cf6e095b3c380e803b5a058 (diff)
stock icons, transport controls as proxies, make ActionManager::get_action() work
git-svn-id: svn://localhost/trunk/ardour2@165 d708f5d6-7413-0410-9779-e7cbd77b26cf
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