diff options
author | Campbell Barton <ideasman42@gmail.com> | 2020-10-22 03:53:40 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2020-10-22 03:59:37 +0300 |
commit | 8da55990034e2d5b0a9910583706e4ea99d0f3ce (patch) | |
tree | 18c8d3ba058f89a17109443afbdfdac9764c0e29 /source/blender/windowmanager | |
parent | 88660d67a4c5e88e7b7b7304b66e4d893affed91 (diff) |
WM: warn when event's have repeat set for non keyboard events
Also add docs to event and keymap item flag.
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r-- | source/blender/windowmanager/WM_types.h | 7 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 9 |
2 files changed, 15 insertions, 1 deletions
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 1b693160e56..a8d24205268 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -559,7 +559,12 @@ typedef struct wmEvent { /** From ghost, fallback if utf8 isn't set. */ char ascii; - /** Generated by auto-repeat. */ + /** + * Generated by auto-repeat, note that this must only ever be set for keyboard events + * where `ISKEYBOARD(event->type) == true`. + * + * See #KMI_REPEAT_IGNORE for details on how key-map handling uses this. + */ char is_repeat; /** Previous state, used for double click and the 'click'. */ diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index faec579a7c3..8eb9a3b0650 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -155,6 +155,15 @@ wmEvent *WM_event_add_simulate(wmWindow *win, const wmEvent *event_to_add) void wm_event_free(wmEvent *event) { +#ifndef NDEBUG + /* Don't use assert here because it's fairly harmless in most cases, + * more an issue of correctness, something we should avoid in general. */ + if (event->is_repeat && !ISKEYBOARD(event->type)) { + printf("%s: 'is_repeat=true' for non-keyboard event, this should not happen.\n", __func__); + WM_event_print(event); + } +#endif + if (event->customdata) { if (event->customdatafree) { /* Note: pointer to listbase struct elsewhere. */ |