summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2013-06-10 01:54:55 +0200
committerRobin Gareus <robin@gareus.org>2013-06-10 01:54:55 +0200
commit5b7b56236bb854f0191c0cb939165d06efb1fb2d (patch)
treeee40e99b4b1f6f5f256f104c55e7fc9199b57467
parent06ab2f9c10f3d27d6442d99106e16f76d96779d2 (diff)
move emulate_key_event() to utils
-rw-r--r--gtk2_ardour/utils.cc31
-rw-r--r--gtk2_ardour/utils.h1
-rw-r--r--gtk2_ardour/video_monitor.cc26
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