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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <campbell@blender.org>2022-06-23 14:19:22 +0300
committerThomas Dinges <blender@dingto.org>2022-06-24 11:44:57 +0300
commit1aec6adb6c86eb5fa23488ee801dcb16c1dc071e (patch)
tree7576f1f211177bac52a3f137f8caada3bcfad13e /source
parent6d196b8f5e95b8f5e537f7b7910e313c27497a8b (diff)
Fix T99027: Touch typing in text fields results in dropped key presses
Fix by always testing unhandled double-click events as press events, irrespective of the previous event type. **Details** Handling double-click events only ran when the previously pressed-key matched the current pressed-key. Originally when double-click support was added the previous type was compared (ignoring it's press/release value) and while not necessary it was harmless as it matched the check for double-click events being generated. As of [0] the logic for click/drag detection changed to ignore release events as release this could interrupt dragging. This made it possible to generate double-click events that failed the `event->prev_press_type == event->type` comparison. In these cases it was possible to generate double-click events that would not fall-back to a 'press' value when unhandled. [0]: 102644cb8cbb8b21e55643cebe2ed364885023a6
Diffstat (limited to 'source')
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index c806472103d..43b4d4a90f0 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -3370,9 +3370,8 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers)
}
}
- if (event->prev_press_type == event->type) {
-
- if (event->val == KM_RELEASE) {
+ if (event->val == KM_RELEASE) {
+ if (event->prev_press_type == event->type) {
if (event->prev_val == KM_PRESS) {
if (win->event_queue_check_click == true) {
if (WM_event_drag_test(event, event->prev_press_xy)) {
@@ -3402,15 +3401,15 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers)
}
}
}
- else if (event->val == KM_DBL_CLICK) {
- /* The underlying event is a press, so try and handle this. */
- event->val = KM_PRESS;
- action |= wm_handlers_do_intern(C, win, event, handlers);
+ }
+ else if (event->val == KM_DBL_CLICK) {
+ /* The underlying event is a press, so try and handle this. */
+ event->val = KM_PRESS;
+ action |= wm_handlers_do_intern(C, win, event, handlers);
- /* Revert value if not handled. */
- if (wm_action_not_handled(action)) {
- event->val = KM_DBL_CLICK;
- }
+ /* Revert value if not handled. */
+ if (wm_action_not_handled(action)) {
+ event->val = KM_DBL_CLICK;
}
}
}