summaryrefslogtreecommitdiff
path: root/gtk2_ardour/utils.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/utils.cc')
-rw-r--r--gtk2_ardour/utils.cc33
1 files changed, 21 insertions, 12 deletions
diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc
index d0e85a4fa0..7a058b9ce5 100644
--- a/gtk2_ardour/utils.cc
+++ b/gtk2_ardour/utils.cc
@@ -460,42 +460,51 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev)
it does allow.
*/
+ int fakekey = GDK_VoidSymbol;
int ret = false;
switch (ev->keyval) {
case GDK_Tab:
- ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_nabla, GdkModifierType(ev->state));
- break;
-
- // some X and/or GDK implementations do Shift-Tab -> GDK_ISO_Left_Tab
-
case GDK_ISO_Left_Tab:
- ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_nabla, GdkModifierType(ev->state));
+ fakekey = GDK_nabla;
break;
case GDK_Up:
- ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_uparrow, GdkModifierType(ev->state));
+ fakekey = GDK_uparrow;
break;
case GDK_Down:
- ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_downarrow, GdkModifierType(ev->state));
+ fakekey = GDK_downarrow;
break;
case GDK_Right:
- ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_rightarrow, GdkModifierType(ev->state));
+ fakekey = GDK_rightarrow;
break;
case GDK_Left:
- ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_leftarrow, GdkModifierType(ev->state));
+ fakekey = GDK_leftarrow;
break;
default:
break;
}
- if (ret) {
- return true;
+ if (fakekey != GDK_VoidSymbol) {
+ ret = gtk_accel_groups_activate(G_OBJECT(win), fakekey, GdkModifierType(ev->state));
+
+ if (ret) {
+ return true;
+ }
+
+#ifdef GTKOSX
+ int oldval = ev->keyval;
+ ev->keyval = fakekey;
+ if (gdk_quartz_possibly_forward ((GdkEvent*) ev)) {
+ return true;
+ }
+ ev->keyval = oldval;
}
+#endif
}
/* consider all relevant modifiers but not LOCK or SHIFT */