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/include/macros.h | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'src/include') diff --git a/src/include/macros.h b/src/include/macros.h index 21ddaff9e..ff049ddf1 100644 --- a/src/include/macros.h +++ b/src/include/macros.h @@ -20,14 +20,25 @@ #define sp_round(v,m) (((v) < 0.0) ? ((ceil((v) / (m) - 0.5)) * (m)) : ((floor((v) / (m) + 0.5)) * (m))) +// "primary" modifier: Ctrl on Linux/Windows and Cmd on macOS. +// note: Could query this at runtime with +// `gdk_keymap_get_modifier_mask(..., GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR)` +#ifdef GDK_WINDOWING_QUARTZ +#define INK_GDK_PRIMARY_MASK GDK_MOD2_MASK +#else +#define INK_GDK_PRIMARY_MASK GDK_CONTROL_MASK +#endif + +// all modifiers used by Inkscape +#define INK_GDK_MODIFIER_MASK (GDK_SHIFT_MASK | INK_GDK_PRIMARY_MASK | GDK_MOD1_MASK) // keyboard modifiers in an event #define MOD__SHIFT(event) ((event)->key.state & GDK_SHIFT_MASK) -#define MOD__CTRL(event) ((event)->key.state & GDK_CONTROL_MASK) +#define MOD__CTRL(event) ((event)->key.state & INK_GDK_PRIMARY_MASK) #define MOD__ALT(event) ((event)->key.state & GDK_MOD1_MASK) -#define MOD__SHIFT_ONLY(event) (((event)->key.state & GDK_SHIFT_MASK) && !((event)->key.state & GDK_CONTROL_MASK) && !((event)->key.state & GDK_MOD1_MASK)) -#define MOD__CTRL_ONLY(event) (!((event)->key.state & GDK_SHIFT_MASK) && ((event)->key.state & GDK_CONTROL_MASK) && !((event)->key.state & GDK_MOD1_MASK)) -#define MOD__ALT_ONLY(event) (!((event)->key.state & GDK_SHIFT_MASK) && !((event)->key.state & GDK_CONTROL_MASK) && ((event)->key.state & GDK_MOD1_MASK)) +#define MOD__SHIFT_ONLY(event) (((event)->key.state & INK_GDK_MODIFIER_MASK) == GDK_SHIFT_MASK) +#define MOD__CTRL_ONLY(event) (((event)->key.state & INK_GDK_MODIFIER_MASK) == INK_GDK_PRIMARY_MASK) +#define MOD__ALT_ONLY(event) (((event)->key.state & INK_GDK_MODIFIER_MASK) == GDK_MOD1_MASK) #endif // SEEN_MACROS_H -- cgit v1.2.3