-void
-ActionManager::get_all_actions (vector<string>& names, vector<string>& paths, vector<string>& keys, vector<AccelKey>& 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<Glib::RefPtr<Gtk::Action> > 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 ();
- ustring label = (*a)->property_label();
-
- names.push_back (label);
- paths.push_back (accel_path);
-
- AccelKey key;
- bool known = lookup_entry (accel_path, key);
-
- if (known) {
- keys.push_back (ui_manager->get_accel_group()->name (key.get_key(), Gdk::ModifierType (key.get_mod())));
- } else {
- keys.push_back (unbound_string);