UI: Properly cancel dragging on Esc & right-click #104838
|
@ -3669,22 +3669,26 @@ static void wm_paintcursor_test(bContext *C, const wmEvent *event)
|
|||
}
|
||||
}
|
||||
|
||||
static void wm_event_drag_and_drop_test(wmWindowManager *wm, wmWindow *win, wmEvent *event)
|
||||
static eHandlerActionFlag wm_event_drag_and_drop_test(wmWindowManager *wm,
|
||||
wmWindow *win,
|
||||
wmEvent *event)
|
||||
{
|
||||
bScreen *screen = WM_window_get_active_screen(win);
|
||||
|
||||
if (BLI_listbase_is_empty(&wm->drags)) {
|
||||
return;
|
||||
return WM_HANDLER_CONTINUE;
|
||||
}
|
||||
|
||||
if (event->type == MOUSEMOVE || ISKEYMODIFIER(event->type)) {
|
||||
screen->do_draw_drag = true;
|
||||
}
|
||||
else if (event->type == EVT_ESCKEY) {
|
||||
else if (ELEM(event->type, EVT_ESCKEY, RIGHTMOUSE)) {
|
||||
wm_drags_exit(wm, win);
|
||||
WM_drag_free_list(&wm->drags);
|
||||
|
||||
screen->do_draw_drag = true;
|
||||
|
||||
return WM_HANDLER_BREAK;
|
||||
}
|
||||
else if (event->type == LEFTMOUSE && event->val == KM_RELEASE) {
|
||||
event->type = EVT_DROP;
|
||||
|
@ -3703,6 +3707,8 @@ static void wm_event_drag_and_drop_test(wmWindowManager *wm, wmWindow *win, wmEv
|
|||
/* Restore cursor (disabled, see `wm_dragdrop.cc`) */
|
||||
// WM_cursor_modal_restore(win);
|
||||
}
|
||||
|
||||
return WM_HANDLER_CONTINUE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4025,7 +4031,7 @@ void wm_event_do_handlers(bContext *C)
|
|||
}
|
||||
|
||||
/* Check dragging, creates new event or frees, adds draw tag. */
|
||||
wm_event_drag_and_drop_test(wm, win, event);
|
||||
action |= wm_event_drag_and_drop_test(wm, win, event);
|
||||
|
||||
if ((action & WM_HANDLER_BREAK) == 0) {
|
||||
/* NOTE: setting sub-window active should be done here,
|
||||
|
|
Loading…
Reference in New Issue