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
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-06-15 20:09:43 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-06-15 20:09:43 +0300
commit2b9edbc98becb540f1f907b7c31d7971b1603079 (patch)
tree9070dbc1a8cd4581d2bc772207b5414b1d148b08
parentd645b1a78a752950d061a4ccb125721acade5544 (diff)
WM: suppress drag events if motion is handled
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c44
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;
+ }
}
}