Fix setting command key bindings on OSX.
This commit is contained in:
parent
af1a064ebf
commit
4166b05bda
|
@ -203,11 +203,14 @@ KeyEditor::on_key_release_event (GdkEventKey* ev)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GdkModifierType mod = (GdkModifierType)(Keyboard::RelevantModifierKeyMask & ev->state);
|
||||||
|
|
||||||
Gtkmm2ext::possibly_translate_keyval_to_make_legal_accelerator (ev->keyval);
|
Gtkmm2ext::possibly_translate_keyval_to_make_legal_accelerator (ev->keyval);
|
||||||
|
Gtkmm2ext::possibly_translate_mod_to_make_legal_accelerator (mod);
|
||||||
|
|
||||||
bool result = AccelMap::change_entry (path,
|
bool result = AccelMap::change_entry (path,
|
||||||
last_keyval,
|
last_keyval,
|
||||||
ModifierType (Keyboard::RelevantModifierKeyMask & ev->state),
|
Gdk::ModifierType(mod),
|
||||||
true);
|
true);
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
|
|
|
@ -450,24 +450,7 @@ ARDOUR_UI_UTILS::key_press_focus_accelerator_handler (Gtk::Window& window, GdkEv
|
||||||
GdkModifierType mod = GdkModifierType (ev->state);
|
GdkModifierType mod = GdkModifierType (ev->state);
|
||||||
|
|
||||||
mod = GdkModifierType (mod & gtk_accelerator_get_default_mod_mask());
|
mod = GdkModifierType (mod & gtk_accelerator_get_default_mod_mask());
|
||||||
#ifdef GTKOSX
|
Gtkmm2ext::possibly_translate_mod_to_make_legal_accelerator(mod);
|
||||||
/* GTK on OS X is currently (February 2012) setting both
|
|
||||||
the Meta and Mod2 bits in the event modifier state if
|
|
||||||
the Command key is down.
|
|
||||||
|
|
||||||
gtk_accel_groups_activate() does not invoke any of the logic
|
|
||||||
that gtk_window_activate_key() will that sorts out that stupid
|
|
||||||
state of affairs, and as a result it fails to find a match
|
|
||||||
for the key event and the current set of accelerators.
|
|
||||||
|
|
||||||
to fix this, if the meta bit is set, remove the mod2 bit
|
|
||||||
from the modifier. this assumes that our bindings use Primary
|
|
||||||
which will have set the meta bit in the accelerator entry.
|
|
||||||
*/
|
|
||||||
if (mod & GDK_META_MASK) {
|
|
||||||
mod = GdkModifierType (mod & ~GDK_MOD2_MASK);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (allow_activating && gtk_accel_groups_activate(G_OBJECT(win), fakekey, mod)) {
|
if (allow_activating && gtk_accel_groups_activate(G_OBJECT(win), fakekey, mod)) {
|
||||||
DEBUG_TRACE (DEBUG::Accelerators, "\taccel group activated by fakekey\n");
|
DEBUG_TRACE (DEBUG::Accelerators, "\taccel group activated by fakekey\n");
|
||||||
|
|
|
@ -110,6 +110,7 @@ namespace Gtkmm2ext {
|
||||||
LIBGTKMM2EXT_API Glib::RefPtr<Gdk::Window> window_to_draw_on (Gtk::Widget& w, Gtk::Widget** parent);
|
LIBGTKMM2EXT_API Glib::RefPtr<Gdk::Window> window_to_draw_on (Gtk::Widget& w, Gtk::Widget** parent);
|
||||||
|
|
||||||
LIBGTKMM2EXT_API bool possibly_translate_keyval_to_make_legal_accelerator (uint32_t& keyval);
|
LIBGTKMM2EXT_API bool possibly_translate_keyval_to_make_legal_accelerator (uint32_t& keyval);
|
||||||
|
LIBGTKMM2EXT_API bool possibly_translate_mod_to_make_legal_accelerator (GdkModifierType& mod);
|
||||||
LIBGTKMM2EXT_API uint32_t possibly_translate_legal_accelerator_to_real_key (uint32_t keyval);
|
LIBGTKMM2EXT_API uint32_t possibly_translate_legal_accelerator_to_real_key (uint32_t keyval);
|
||||||
|
|
||||||
LIBGTKMM2EXT_API int physical_screen_height (Glib::RefPtr<Gdk::Window>);
|
LIBGTKMM2EXT_API int physical_screen_height (Glib::RefPtr<Gdk::Window>);
|
||||||
|
|
|
@ -337,6 +337,30 @@ Gtkmm2ext::detach_menu (Gtk::Menu& menu)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
Gtkmm2ext::possibly_translate_mod_to_make_legal_accelerator (GdkModifierType& mod)
|
||||||
|
{
|
||||||
|
#ifdef GTKOSX
|
||||||
|
/* GTK on OS X is currently (February 2012) setting both
|
||||||
|
the Meta and Mod2 bits in the event modifier state if
|
||||||
|
the Command key is down.
|
||||||
|
|
||||||
|
gtk_accel_groups_activate() does not invoke any of the logic
|
||||||
|
that gtk_window_activate_key() will that sorts out that stupid
|
||||||
|
state of affairs, and as a result it fails to find a match
|
||||||
|
for the key event and the current set of accelerators.
|
||||||
|
|
||||||
|
to fix this, if the meta bit is set, remove the mod2 bit
|
||||||
|
from the modifier. this assumes that our bindings use Primary
|
||||||
|
which will have set the meta bit in the accelerator entry.
|
||||||
|
*/
|
||||||
|
if (mod & GDK_META_MASK) {
|
||||||
|
mod = GdkModifierType (mod & ~GDK_MOD2_MASK);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
Gtkmm2ext::possibly_translate_keyval_to_make_legal_accelerator (uint32_t& keyval)
|
Gtkmm2ext::possibly_translate_keyval_to_make_legal_accelerator (uint32_t& keyval)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user