[Bf-blender-cvs] [0920c1684b3] master: Fix T72999: Fast keystrokes ignored for operators with modal keymaps

Campbell Barton noreply at git.blender.org
Fri Jan 10 05:50:02 CET 2020


Commit: 0920c1684b3138ab5857edb072285b1c800ca046
Author: Campbell Barton
Date:   Fri Jan 10 15:13:41 2020 +1100
Branches: master
https://developer.blender.org/rB0920c1684b3138ab5857edb072285b1c800ca046

Fix T72999: Fast keystrokes ignored for operators with modal keymaps

Logic to convert double-click events into press events wasn't running
in the case an operator had a modal keymap, causing bevel for e.g.
to ignore keys pressed quickly.

Change event handling logic so modal handlers never
receive double click events, so checks for press/release are reliable.

While this is an old issue for mouse events in practice it wasn't
a problem since the first event typically executed/canceled.
Support for keyboard double-click exposed the problem
for all modal operators that take numeric input.

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

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 0041143f93e..b30b52fc5bb 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -2088,6 +2088,8 @@ static void wm_event_modalkeymap(const bContext *C,
                                  wmEvent *event,
                                  bool *dbl_click_disabled)
 {
+  BLI_assert(event->type != EVT_MODAL_MAP);
+
   /* support for modal keymap in macros */
   if (op->opm) {
     op = op->opm;
@@ -2116,9 +2118,17 @@ static void wm_event_modalkeymap(const bContext *C,
       event->prevval = event_match->val;
       event->type = EVT_MODAL_MAP;
       event->val = kmi->propvalue;
+
+      /* Avoid double-click events even in the case of 'EVT_MODAL_MAP',
+       * since it's possible users configure double-click keymap items
+       * which would break when modal functions expect press/release. */
+      if (event->prevtype == KM_DBL_CLICK) {
+        event->prevtype = KM_PRESS;
+      }
     }
   }
-  else {
+
+  if (event->type != EVT_MODAL_MAP) {
     /* modal keymap checking returns handled events fine, but all hardcoded modal
      * handling typically swallows all events (OPERATOR_RUNNING_MODAL).
      * This bypass just disables support for double clicks in hardcoded modal handlers */



More information about the Bf-blender-cvs mailing list