Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-03-01 08:46:10 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-03-01 08:59:28 +0300
commit90526e1606c337440a1846c968276a24945ae853 (patch)
treee3c47a68f8b0bcda06d64e9d0b611bcb5a88e3de /source/blender/windowmanager
parent5e32bd47e8124f20f2665d7bfe8b39ead86bf200 (diff)
WM: improve support for binding actions to modifier keys
Previously a modifier key-map type only worked when the same key was enabled as a modifier as well. This allows for users to assign an action to double-tap-shift for eg.
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index ebf09af825c..139e1a5127a 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -1886,24 +1886,33 @@ static bool wm_eventmatch(const wmEvent *winevent, const wmKeyMapItem *kmi)
}
}
- /* modifiers also check bits, so it allows modifier order */
+ /* Modifiers also check bits, so it allows modifier order.
+ * Account for rare case of when these keys are used as the 'type' not as modifiers. */
if (kmi->shift != KM_ANY) {
- if (winevent->shift != kmi->shift && !(winevent->shift & kmi->shift)) {
+ if ((winevent->shift != kmi->shift) && !(winevent->shift & kmi->shift) &&
+ !ELEM(winevent->type, LEFTSHIFTKEY, RIGHTSHIFTKEY))
+ {
return false;
}
}
if (kmi->ctrl != KM_ANY) {
- if (winevent->ctrl != kmi->ctrl && !(winevent->ctrl & kmi->ctrl)) {
+ if (winevent->ctrl != kmi->ctrl && !(winevent->ctrl & kmi->ctrl) &&
+ !ELEM(winevent->type, LEFTCTRLKEY, RIGHTCTRLKEY))
+ {
return false;
}
}
if (kmi->alt != KM_ANY) {
- if (winevent->alt != kmi->alt && !(winevent->alt & kmi->alt)) {
+ if (winevent->alt != kmi->alt && !(winevent->alt & kmi->alt) &&
+ !ELEM(winevent->type, LEFTALTKEY, RIGHTALTKEY))
+ {
return false;
}
}
if (kmi->oskey != KM_ANY) {
- if (winevent->oskey != kmi->oskey && !(winevent->oskey & kmi->oskey)) {
+ if (winevent->oskey != kmi->oskey && !(winevent->oskey & kmi->oskey) &&
+ (winevent->type != OSKEY))
+ {
return false;
}
}