diff options
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.cc | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.cc b/source/blender/windowmanager/intern/wm_event_system.cc index 841df253dab..c26696704dd 100644 --- a/source/blender/windowmanager/intern/wm_event_system.cc +++ b/source/blender/windowmanager/intern/wm_event_system.cc @@ -5481,6 +5481,25 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, void } } + /* NOTE(@campbellbarton): Setting the modifier state based on press/release + * is technically incorrect. + * + * - The user might hold both left/right modifier keys, then only release one. + * + * This could be solved by storing a separate flag for the left/right modifiers, + * and combine them into `event.modifiers`. + * + * - The user might have multiple keyboards (or keyboard + NDOF device) + * where it's possible to press the same modifier key multiple times. + * + * This could be solved by tracking the number of held modifier keys, + * (this is in fact what LIBXKB does), however doing this relies on all GHOST + * back-ends properly reporting every press/release as any mismatch could result + * in modifier keys being stuck (which is very bad!). + * + * To my knowledge users never reported a bug relating to these limitations so + * it seems reasonable to keep the current logic. */ + switch (event.type) { case EVT_LEFTSHIFTKEY: case EVT_RIGHTSHIFTKEY: { |