4 #include <gtkmm/accelmap.h>
5 #include <gdk/gdkkeysyms.h>
6 #include <gtk/gtkaccelmap.h>
16 cout << "This is the " << txt << " item\n";
20 make_action (Glib::RefPtr<ActionGroup> group, string name, string label, RefPtr<AccelGroup> accels, slot<void> sl, guint key, Gdk::ModifierType mods)
22 Glib::RefPtr<Action> act;
24 act = Action::create (name, label);
26 AccelMap::add_entry (act->get_accel_path(), key, mods);
28 act->set_accel_group (accels);
30 cerr << "action " << name << " has path " << act->get_accel_path() << endl;
36 make_action (Glib::RefPtr<ActionGroup> group, string name, string label)
38 Glib::RefPtr<Action> act;
40 act = Action::create (name, label);
43 cerr << "action " << name << " has path " << act->get_accel_path() << endl;
49 lookup_entry (const ustring accel_path, Gtk::AccelKey& key)
52 bool known = gtk_accel_map_lookup_entry (accel_path.c_str(), &gkey);
55 key = AccelKey (gkey.accel_key, Gdk::ModifierType (gkey.accel_mods));
57 key = AccelKey (GDK_VoidSymbol, Gdk::ModifierType (0));
64 copy_actions (const RefPtr<ActionGroup> src)
66 RefPtr<ActionGroup> grp = ActionGroup::create (src->get_name());
68 ListHandle<RefPtr<Action> > group_actions = src->get_actions();
70 for (ListHandle<RefPtr<Action> >::iterator a = group_actions.begin(); a != group_actions.end(); ++a) {
71 RefPtr<Action> act = Action::create ((*a)->get_name(), (*a)->property_label());
79 main (int argc, char* argv[])
81 Main app (argc, argv);
82 Window hidden (WINDOW_TOPLEVEL);
83 Window window (WINDOW_TOPLEVEL);
84 Window other_window (WINDOW_TOPLEVEL);
85 Button button ("click me for baz");
86 Button other_button ("click me for baz");
90 Glib::RefPtr<ActionGroup> actions;
91 Glib::RefPtr<ActionGroup> other_actions;
92 Glib::RefPtr<ActionGroup> shared_actions;
93 Glib::RefPtr<UIManager> uimanager;
94 Glib::RefPtr<UIManager> other_uimanager;
95 Glib::RefPtr<UIManager> shared_uimanager;
97 window.set_name ("Editor");
98 window.set_title ("Editor");
100 other_window.set_name ("Other");
101 other_window.set_title ("Other");
103 uimanager = UIManager::create();
104 other_uimanager = UIManager::create();
105 shared_uimanager = UIManager::create();
107 actions = ActionGroup::create("MyActions");
108 other_actions = ActionGroup::create("OtherActions");
109 shared_actions = ActionGroup::create("SharedActions");
111 uimanager->add_ui_from_file ("mtest.menus");
112 other_uimanager->add_ui_from_file ("mtest_other.menus");
114 // AccelMap::load ("mtest.bindings");
116 RefPtr<AccelGroup> accels = hidden.get_accel_group();
118 make_action (actions, "TopMenu", "top");
119 make_action (actions, "Foo", "foo", accels, bind (sigc::ptr_fun (printit), "foo"), GDK_p, Gdk::ModifierType (0));
121 make_action (other_actions, "OTopMenu", "otop");
122 make_action (other_actions, "OFoo", "foo", accels, bind (sigc::ptr_fun (printit), "o-foo"), GDK_p, Gdk::ModifierType (0));
124 make_action (shared_actions, "Bar", "bar", accels, bind (sigc::ptr_fun (printit), "barshared"), GDK_p, Gdk::CONTROL_MASK);
125 RefPtr<Action> act = make_action (shared_actions, "Baz", "baz", accels, bind (sigc::ptr_fun (printit), "baz-shared"), GDK_p, Gdk::SHIFT_MASK);
127 act->connect_proxy (button);
128 act->connect_proxy (other_button);
130 uimanager->insert_action_group (copy_actions (actions));
131 uimanager->insert_action_group (copy_actions (shared_actions));
132 other_uimanager->insert_action_group (copy_actions (other_actions));
133 other_uimanager->insert_action_group (copy_actions (shared_actions));
135 other_window.add_accel_group (accels);
136 // window.add_accel_group (accels);
140 m = dynamic_cast<MenuBar*>(other_uimanager->get_widget ("/OTop"));
142 other_vpacker.pack_start (*m);
143 other_vpacker.pack_start (other_button);
145 other_window.add (other_vpacker);
146 other_window.show_all ();
148 m = dynamic_cast<MenuBar*>(uimanager->get_widget ("/Top"));
150 vpacker.pack_start (*m);
151 vpacker.pack_start (button);
153 window.add (vpacker);
156 Settings::get_default()->property_gtk_can_change_accels() = true;
158 AccelMap::save ("mtest.bindings");