diff options
author | Robin Gareus <robin@gareus.org> | 2013-06-10 01:54:55 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2013-06-10 01:54:55 +0200 |
commit | 5b7b56236bb854f0191c0cb939165d06efb1fb2d (patch) | |
tree | ee40e99b4b1f6f5f256f104c55e7fc9199b57467 | |
parent | 06ab2f9c10f3d27d6442d99106e16f76d96779d2 (diff) |
move emulate_key_event() to utils
-rw-r--r-- | gtk2_ardour/utils.cc | 31 | ||||
-rw-r--r-- | gtk2_ardour/utils.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/video_monitor.cc | 26 |
3 files changed, 33 insertions, 25 deletions
diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc index 19f93ad2e8..d4bc460269 100644 --- a/gtk2_ardour/utils.cc +++ b/gtk2_ardour/utils.cc @@ -330,6 +330,35 @@ forward_key_press (GdkEventKey* ev) } bool +emulate_key_event (Gtk::Widget* w, unsigned int keyval) +{ + GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET(w->gobj())); + GdkKeymap *keymap = gdk_keymap_get_for_display (display); + GdkKeymapKey *keymapkey = NULL; + gint n_keys; + + if (!gdk_keymap_get_entries_for_keyval(keymap, keyval, &keymapkey, &n_keys)) return false; + if (n_keys !=1) { g_free(keymapkey); return false;} + + GdkEventKey ev; + ev.type = GDK_KEY_PRESS; + ev.window = gtk_widget_get_window(GTK_WIDGET(w->gobj())); + ev.send_event = FALSE; + ev.time = 0; + ev.state = 0; + ev.keyval = keyval; + ev.length = 0; + ev.string = (gchar*) ""; + ev.hardware_keycode = keymapkey[0].keycode; + ev.group = keymapkey[0].group; + g_free(keymapkey); + + forward_key_press(&ev); + ev.type = GDK_KEY_RELEASE; + return forward_key_press(&ev); +} + +bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev) { GtkWindow* win = window.gobj(); @@ -461,6 +490,8 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev) /* no special handling or there are modifiers in effect: accelerate first */ DEBUG_TRACE (DEBUG::Accelerators, "\tactivate, then propagate\n"); + DEBUG_TRACE (DEBUG::Accelerators, string_compose ("\tevent send-event:%1 time:%2 length:%3 string:%4 hardware_keycode:%5 group:%6\n", + ev->send_event, ev->time, ev->length, ev->string, ev->hardware_keycode, ev->group)); if (allow_activating) { DEBUG_TRACE (DEBUG::Accelerators, "\tsending to window\n"); diff --git a/gtk2_ardour/utils.h b/gtk2_ardour/utils.h index 7137f273c6..d3110104fb 100644 --- a/gtk2_ardour/utils.h +++ b/gtk2_ardour/utils.h @@ -65,6 +65,7 @@ void set_color (Gdk::Color&, int); bool relay_key_press (GdkEventKey* ev, Gtk::Window* win); bool forward_key_press (GdkEventKey* ev); bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev); +bool emulate_key_event (Gtk::Widget*, unsigned int); Glib::RefPtr<Gdk::Pixbuf> get_xpm (std::string); std::string get_icon_path (const char*); diff --git a/gtk2_ardour/video_monitor.cc b/gtk2_ardour/video_monitor.cc index 258dc85c0b..c33b96fda2 100644 --- a/gtk2_ardour/video_monitor.cc +++ b/gtk2_ardour/video_monitor.cc @@ -252,31 +252,7 @@ VideoMonitor::forward_keyevent (unsigned int keyval) { Editor* ed = dynamic_cast<Editor*>(&PublicEditor::instance()); if (!ed) return; - - GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET(ed->gobj())); - GdkKeymap *keymap = gdk_keymap_get_for_display (display); - GdkKeymapKey *keymapkey = NULL; - gint n_keys; - - if (!gdk_keymap_get_entries_for_keyval(keymap, keyval, &keymapkey, &n_keys)) return; - if (n_keys !=1) { g_free(keymapkey); return;} - - GdkEventKey ev; - ev.type = GDK_KEY_PRESS; - ev.window = ed->get_window()->gobj(); - ev.send_event = FALSE; - ev.time = 0; - ev.state = 0; - ev.keyval = keyval; - ev.length = 0; - ev.string = (gchar*) ""; - ev.hardware_keycode = keymapkey[0].keycode; - ev.group = keymapkey[0].group; - g_free(keymapkey); - - forward_key_press(&ev); - ev.type = GDK_KEY_RELEASE; - forward_key_press(&ev); + emulate_key_event(ed, keyval); } void |