summaryrefslogtreecommitdiff
path: root/gtk2_ardour/utils.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-06-13 23:00:24 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-06-13 23:00:24 -0400
commitf00b3b7f111e36537d773daef0ae77b03d11f82f (patch)
tree4bfdd432199a7d4a4cbfc7769493e6bedaa5e51f /gtk2_ardour/utils.cc
parent31d234b48c36bddb4d5228a3abee9c4419403879 (diff)
parent80a13145f398e1c4ea22b3f8a25a5b38d3c5e328 (diff)
merge with master
Diffstat (limited to 'gtk2_ardour/utils.cc')
-rw-r--r--gtk2_ardour/utils.cc31
1 files changed, 31 insertions, 0 deletions
diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc
index c9e67d1139..582ad018c4 100644
--- a/gtk2_ardour/utils.cc
+++ b/gtk2_ardour/utils.cc
@@ -310,6 +310,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();
@@ -441,6 +470,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");