Commit: 6db49261cc18cb70766c3e5f41180839d24b4c9b
Author: Campbell Barton
Date:   Fri Mar 8 14:16:32 2019 +1100
Branches: master
https://developer.blender.org/rB6db49261cc18cb70766c3e5f41180839d24b4c9b

Cleanup: make modal event double click handling more straightforward

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

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 0ac5265fac4..1ae3f7ffb79 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -1929,45 +1929,52 @@ static bool wm_eventmatch(const wmEvent *winevent, 
const wmKeyMapItem *kmi)
        return true;
 }
 
+static wmKeyMapItem *wm_eventmatch_modal_keymap_items(const wmKeyMap *keymap, 
wmOperator *op, const wmEvent *event)
+{
+       for (wmKeyMapItem *kmi = keymap->items.first; kmi; kmi = kmi->next) {
+               if (wm_eventmatch(event, kmi)) {
+                       if ((keymap->poll_modal_item == NULL) ||
+                           (keymap->poll_modal_item(op, kmi->propvalue)))
+                       {
+                               return kmi;
+                       }
+               }
+       }
+       return NULL;
+}
+
 
 /* operator exists */
 static void wm_event_modalkeymap(const bContext *C, wmOperator *op, wmEvent 
*event, bool *dbl_click_disabled)
 {
-       wmOperator *op_init = op;
-
        /* support for modal keymap in macros */
        if (op->opm)
                op = op->opm;
 
        if (op->type->modalkeymap) {
                wmKeyMap *keymap = WM_keymap_active(CTX_wm_manager(C), 
op->type->modalkeymap);
-               wmKeyMapItem *kmi;
+               wmKeyMapItem *kmi = NULL;
 
-               for (kmi = keymap->items.first; kmi; kmi = kmi->next) {
-                       if (wm_eventmatch(event, kmi)) {
-                               if ((keymap->poll_modal_item == NULL) ||
-                                   (keymap->poll_modal_item(op, 
kmi->propvalue)))
-                               {
-                                       event->prevtype = event->type;
-                                       event->prevval = event->val;
-                                       event->type = EVT_MODAL_MAP;
-                                       event->val = kmi->propvalue;
-                                       break;
-                               }
-                       }
-               }
+               const wmEvent *event_match = NULL;
+               wmEvent event_no_dbl_click;
 
-               /* If double click isn't handled, re-run this function with 
with press. */
-               if ((event->type != EVT_MODAL_MAP) &&
-                   (event->val == KM_DBL_CLICK))
-               {
-                       event->val = KM_PRESS;
-                       wm_event_modalkeymap(C, op_init, event, NULL);
-                       if (event->type != EVT_MODAL_MAP) {
-                               event->val = KM_DBL_CLICK;
+               if ((kmi = wm_eventmatch_modal_keymap_items(keymap, op, 
event))) {
+                       event_match = event;
+               }
+               else if (event->val == KM_DBL_CLICK) {
+                       event_no_dbl_click = *event;
+                       event_no_dbl_click.val = KM_PRESS;
+                       if ((kmi = wm_eventmatch_modal_keymap_items(keymap, op, 
&event_no_dbl_click))) {
+                               event_match = &event_no_dbl_click;
                        }
                }
 
+               if (event_match != NULL) {
+                       event->prevtype = event_match->type;
+                       event->prevval = event_match->val;
+                       event->type = EVT_MODAL_MAP;
+                       event->val = kmi->propvalue;
+               }
        }
        else {
                /* modal keymap checking returns handled events fine, but all 
hardcoded modal

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to