diff options
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index b9fe7d28838..7e26ffa52f8 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -2252,24 +2252,34 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers) return action; if (ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE)) { - if (event->check_drag) { - wmWindow *win = CTX_wm_window(C); - if ((abs(event->x - win->eventstate->prevclickx)) >= U.tweak_threshold || - (abs(event->y - win->eventstate->prevclicky)) >= U.tweak_threshold) - { - short val = event->val; - short type = event->type; - event->val = KM_CLICK_DRAG; - event->type = win->eventstate->type; - CLOG_INFO(WM_LOG_HANDLERS, 1, "handling PRESS_DRAG"); + /* Test for CLICK_DRAG events. */ + if (wm_action_not_handled(action)) { + if (event->check_drag) { + wmWindow *win = CTX_wm_window(C); + if ((abs(event->x - win->eventstate->prevclickx)) >= U.tweak_threshold || + (abs(event->y - win->eventstate->prevclicky)) >= U.tweak_threshold) + { + short val = event->val; + short type = event->type; + event->val = KM_CLICK_DRAG; + event->type = win->eventstate->type; + + CLOG_INFO(WM_LOG_HANDLERS, 1, "handling PRESS_DRAG"); - action |= wm_handlers_do_intern(C, event, handlers); + action |= wm_handlers_do_intern(C, event, handlers); - event->val = val; - event->type = type; + event->val = val; + event->type = type; - win->eventstate->check_click = 0; + win->eventstate->check_click = 0; + win->eventstate->check_drag = 0; + } + } + } + else { + wmWindow *win = CTX_wm_window(C); + if (win) { win->eventstate->check_drag = 0; } } @@ -2277,7 +2287,7 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers) else if (ISMOUSE_BUTTON(event->type) || ISKEYBOARD(event->type)) { /* All events that don't set wmEvent.prevtype must be ignored. */ - /* test for CLICK events */ + /* Test for CLICK events. */ if (wm_action_not_handled(action)) { wmWindow *win = CTX_wm_window(C); @@ -2329,9 +2339,9 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers) } else { wmWindow *win = CTX_wm_window(C); - - if (win) + if (win) { win->eventstate->check_click = 0; + } } } |