diff options
author | Campbell Barton <ideasman42@gmail.com> | 2021-03-01 04:58:00 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2021-03-01 08:54:59 +0300 |
commit | d8b35219d1e71ba4c3e16ec4a9b057aaf65e9f37 (patch) | |
tree | a280852efa8018e870eb3a39a83d51644cfdd101 | |
parent | 8da58dc85bdd2190b885f518916a8250817331e2 (diff) |
WM: set previous values for events in the event queue
This makes event's prevval and prevtype usable for events in the queue.
Previously they were unused, except as a hack for modal keymap handling.
This is needed to fix T86116, where the `wm->eventstate->prev{val/type}`
are set to values from events that have not been processed.
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 81c2349a87a..22fa3838ac3 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -4378,17 +4378,17 @@ static bool wm_event_is_double_click(const wmEvent *event, const wmEvent *event_ /** * Copy the current state to the previous event state. */ -static void wm_event_prev_values_set(wmEvent *event_state) +static void wm_event_prev_values_set(wmEvent *event, wmEvent *event_state) { - event_state->prevval = event_state->val; - event_state->prevtype = event_state->type; + event->prevval = event_state->prevval = event_state->val; + event->prevtype = event_state->prevtype = event_state->type; } -static void wm_event_prev_click_set(wmEvent *event_state) +static void wm_event_prev_click_set(wmEvent *event, wmEvent *event_state) { - event_state->prevclicktime = PIL_check_seconds_timer(); - event_state->prevclickx = event_state->x; - event_state->prevclicky = event_state->y; + event->prevclicktime = event_state->prevclicktime = PIL_check_seconds_timer(); + event->prevclickx = event_state->prevclickx = event_state->x; + event->prevclicky = event_state->prevclicky = event_state->y; } static wmEvent *wm_event_add_mousemove(wmWindow *win, const wmEvent *event) @@ -4554,7 +4554,7 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, void wm_tablet_data_from_ghost(&bd->tablet, &event.tablet); wm_eventemulation(&event, false); - wm_event_prev_values_set(evt); + wm_event_prev_values_set(&event, evt); /* Copy to event state. */ evt->val = event.val; @@ -4566,7 +4566,7 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, void event.val = KM_DBL_CLICK; } if (event.val == KM_PRESS) { - wm_event_prev_click_set(evt); + wm_event_prev_click_set(&event, evt); } /* Add to other window if event is there (not to both!). */ @@ -4601,7 +4601,7 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, void event.val = (type == GHOST_kEventKeyDown) ? KM_PRESS : KM_RELEASE; wm_eventemulation(&event, false); - wm_event_prev_values_set(evt); + wm_event_prev_values_set(&event, evt); /* Copy to event state. */ evt->val = event.val; @@ -4730,7 +4730,7 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, void if (event.val == KM_PRESS) { /* Don't reset timer & location when holding the key generates repeat events. */ if ((evt->prevtype != event.type) || (evt->prevval != KM_PRESS)) { - wm_event_prev_click_set(evt); + wm_event_prev_click_set(&event, evt); } } |