WM: suppress drag events if motion is handled
This commit is contained in:
parent
d645b1a78a
commit
2b9edbc98b
|
@ -2252,24 +2252,34 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers)
|
||||||
return action;
|
return action;
|
||||||
|
|
||||||
if (ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE)) {
|
if (ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE)) {
|
||||||
if (event->check_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);
|
||||||
|
|
||||||
|
event->val = val;
|
||||||
|
event->type = type;
|
||||||
|
|
||||||
|
win->eventstate->check_click = 0;
|
||||||
|
win->eventstate->check_drag = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
wmWindow *win = CTX_wm_window(C);
|
wmWindow *win = CTX_wm_window(C);
|
||||||
if ((abs(event->x - win->eventstate->prevclickx)) >= U.tweak_threshold ||
|
if (win) {
|
||||||
(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);
|
|
||||||
|
|
||||||
event->val = val;
|
|
||||||
event->type = type;
|
|
||||||
|
|
||||||
win->eventstate->check_click = 0;
|
|
||||||
win->eventstate->check_drag = 0;
|
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)) {
|
else if (ISMOUSE_BUTTON(event->type) || ISKEYBOARD(event->type)) {
|
||||||
/* All events that don't set wmEvent.prevtype must be ignored. */
|
/* 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)) {
|
if (wm_action_not_handled(action)) {
|
||||||
wmWindow *win = CTX_wm_window(C);
|
wmWindow *win = CTX_wm_window(C);
|
||||||
|
|
||||||
|
@ -2329,9 +2339,9 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
wmWindow *win = CTX_wm_window(C);
|
wmWindow *win = CTX_wm_window(C);
|
||||||
|
if (win) {
|
||||||
if (win)
|
|
||||||
win->eventstate->check_click = 0;
|
win->eventstate->check_click = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue