[Bf-blender-cvs] [1aec6adb6c8] blender-v3.2-release: Fix T99027: Touch typing in text fields results in dropped key presses

Campbell Barton noreply at git.blender.org
Fri Jun 24 10:46:30 CEST 2022


Commit: 1aec6adb6c86eb5fa23488ee801dcb16c1dc071e
Author: Campbell Barton
Date:   Thu Jun 23 21:19:22 2022 +1000
Branches: blender-v3.2-release
https://developer.blender.org/rB1aec6adb6c86eb5fa23488ee801dcb16c1dc071e

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

===================================================================

M	source/blender/windowmanager/intern/wm_event_system.c

===================================================================

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;
         }
       }
     }



More information about the Bf-blender-cvs mailing list