From e9ded04d15ee12fec8c023f2dba95135fceac154 Mon Sep 17 00:00:00 2001 From: Thomas Holder Date: Fri, 16 Aug 2019 00:20:16 +0200 Subject: fix #385 inbox#765 macOS accelerators - re-fix Cmd-Q confirmation dialog (#383) without the numbers typing regression (#385) - re-fix Alt modifiers (inbox#765) - fix Cmd-A select all text (inbox#765) --- src/ui/tools/tool-base.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/ui/tools/tool-base.cpp') diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp index 4d30740c9..eb2f2119a 100644 --- a/src/ui/tools/tool-base.cpp +++ b/src/ui/tools/tool-base.cpp @@ -1320,7 +1320,26 @@ guint get_latin_keyval(GdkEventKey const *event, guint *consumed_modifiers /*= N &keyval, nullptr, nullptr, &modifiers); if (consumed_modifiers) { +#ifndef GDK_WINDOWING_QUARTZ *consumed_modifiers = modifiers; +#else + // gdk_quartz_keymap_translate_keyboard_state fills the `consumed_modifiers` + // incorrectly, e.g. assigns 0xB instead of 0x0 when no modifiers pressed. + + *consumed_modifiers = 0; + + for (unsigned mod = 1, statemask = (event->state & GDK_MODIFIER_MASK); mod <= statemask; mod <<= 1) { + if ((mod & statemask)) { + guint keyval_no_mod = 0; + gdk_keymap_translate_keyboard_state(Gdk::Display::get_default()->get_keymap(), event->hardware_keycode, + (GdkModifierType)(event->state & ~mod), group, &keyval_no_mod, + nullptr, nullptr, nullptr); + if (keyval_no_mod != keyval) { + *consumed_modifiers |= mod; + } + } + } +#endif } return keyval; } -- cgit v1.2.3