summaryrefslogtreecommitdiffstats
path: root/src/ui
diff options
context:
space:
mode:
authorThomas Holder <thomas@thomas-holder.de>2019-08-15 22:20:16 +0000
committerThomas Holder <thomas@thomas-holder.de>2019-08-16 21:27:35 +0000
commite9ded04d15ee12fec8c023f2dba95135fceac154 (patch)
tree778601d0c462b94c73d275eaa419ac5fbb599d1c /src/ui
parentFix a bug in fillet/chamfer LPE pointed in mailing list by Miguel Lopez. Fill... (diff)
downloadinkscape-e9ded04d15ee12fec8c023f2dba95135fceac154.tar.gz
inkscape-e9ded04d15ee12fec8c023f2dba95135fceac154.zip
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)
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/tools/tool-base.cpp19
1 files changed, 19 insertions, 0 deletions
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;
}