mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-19 20:06:09 +01:00
(OS X only) if key focus is not in a text entry or a "magic" widget, convert key press events that generated math chars and so forth (generally <alt>-<key>) back to their non-math equivalent before processing. this permits bindings to work as expected. i note that GTK/OSX does not appear to allow insertion of the accented chars into text entries anyway
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@6511 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
7280d39eff
commit
8001cba985
2 changed files with 89 additions and 2 deletions
|
|
@ -6,6 +6,8 @@ using namespace std;
|
|||
bool
|
||||
print_event (GdkEvent* event)
|
||||
{
|
||||
const gchar* kstr;
|
||||
|
||||
cerr << hex;
|
||||
cerr << "Event: type = " << event->type << ' ';
|
||||
|
||||
|
|
@ -38,7 +40,7 @@ print_event (GdkEvent* event)
|
|||
cerr << "Key press, keycode = "
|
||||
<< event->key.keyval
|
||||
<< " name "
|
||||
<< gdk_keyval_name (event->key.keyval)
|
||||
<< ((kstr = gdk_keyval_name (event->key.keyval)) ? kstr : "UNKNOWN KEY")
|
||||
<< " state = "
|
||||
<< event->key.state
|
||||
<< " hw keycode = "
|
||||
|
|
@ -52,7 +54,7 @@ print_event (GdkEvent* event)
|
|||
cerr << "Key release, keycode = "
|
||||
<< event->key.keyval
|
||||
<< " name "
|
||||
<< gdk_keyval_name (event->key.keyval)
|
||||
<< ((kstr = gdk_keyval_name (event->key.keyval)) ? kstr : "UNKNOWN KEY")
|
||||
<< " state = "
|
||||
<< event->key.state
|
||||
<< " hw keycode = "
|
||||
|
|
|
|||
|
|
@ -410,6 +410,73 @@ relay_key_press (GdkEventKey* ev, Gtk::Window* win)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef GTKOSX
|
||||
static guint
|
||||
osx_keyval_without_alt (guint accent_keyval)
|
||||
{
|
||||
switch (accent_keyval) {
|
||||
case GDK_oe:
|
||||
return GDK_q;
|
||||
case GDK_registered:
|
||||
return GDK_r;
|
||||
case GDK_dagger:
|
||||
return GDK_t;
|
||||
case GDK_yen:
|
||||
return GDK_y;
|
||||
case GDK_diaeresis:
|
||||
return GDK_u;
|
||||
case GDK_oslash:
|
||||
return GDK_o;
|
||||
case GDK_Greek_pi:
|
||||
return GDK_p;
|
||||
case GDK_leftdoublequotemark:
|
||||
return GDK_bracketleft;
|
||||
case GDK_leftsinglequotemark:
|
||||
return GDK_bracketright;
|
||||
case GDK_guillemotleft:
|
||||
return GDK_backslash;
|
||||
case GDK_aring:
|
||||
return GDK_a;
|
||||
case GDK_ssharp:
|
||||
return GDK_s;
|
||||
case GDK_partialderivative:
|
||||
return GDK_d;
|
||||
case GDK_function:
|
||||
return GDK_f;
|
||||
case GDK_copyright:
|
||||
return GDK_g;
|
||||
case GDK_abovedot:
|
||||
return GDK_h;
|
||||
case GDK_notsign:
|
||||
return GDK_l;
|
||||
case GDK_ellipsis:
|
||||
return GDK_semicolon;
|
||||
case GDK_ae:
|
||||
return GDK_apostrophe;
|
||||
case GDK_Greek_OMEGA:
|
||||
return GDK_z;
|
||||
case GDK_ccedilla:
|
||||
return GDK_c;
|
||||
case GDK_radical:
|
||||
return GDK_v;
|
||||
case GDK_integral:
|
||||
return GDK_b;
|
||||
case GDK_mu:
|
||||
return GDK_m;
|
||||
case GDK_lessthanequal:
|
||||
return GDK_comma;
|
||||
case GDK_greaterthanequal:
|
||||
return GDK_period;
|
||||
case GDK_division:
|
||||
return GDK_slash;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return GDK_VoidSymbol;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool
|
||||
key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev)
|
||||
{
|
||||
|
|
@ -488,6 +555,24 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev)
|
|||
all "normal text" accelerators.
|
||||
*/
|
||||
|
||||
#ifdef GTKOSX
|
||||
if (!special_handling_of_unmodified_accelerators) {
|
||||
if (ev->state & GDK_MOD1_MASK) {
|
||||
/* we're not in a text entry or "magic focus" widget so we don't want OS X "special-character"
|
||||
text-style handling of alt-<key>. change the keyval back to what it would be without
|
||||
the alt key. this way, we see <alt>-v rather than <alt>-radical and so on.
|
||||
*/
|
||||
guint keyval_without_alt = osx_keyval_without_alt (ev->keyval);
|
||||
|
||||
if (keyval_without_alt != GDK_VoidSymbol) {
|
||||
#ifdef DEBUG_ACCELERATOR_HANDLING
|
||||
cerr << "Remapped " << gdk_keyval_name (ev->keyval) << " to " << gdk_keyval_name (keyval_without_alt) << endl;
|
||||
|
||||
#endif ev->keyval = keyval_without_alt;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!special_handling_of_unmodified_accelerators) {
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue