From e3c11b36dae03c783234ca528fbcf7a85d346df3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 27 Feb 2021 22:05:01 +1100 Subject: Fix error converting simulated events press/release to clicks Move logic that sets previous event state into WM_event_add_simulate. --- source/blender/makesrna/intern/rna_wm_api.c | 5 ----- .../blender/windowmanager/intern/wm_event_system.c | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) (limited to 'source') diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c index 6b96562b3f8..cb20b480ee5 100644 --- a/source/blender/makesrna/intern/rna_wm_api.c +++ b/source/blender/makesrna/intern/rna_wm_api.c @@ -647,11 +647,6 @@ static wmEvent *rna_Window_event_add_simulate(wmWindow *win, e.alt = alt; e.oskey = oskey; - e.prevx = win->eventstate->x; - e.prevy = win->eventstate->y; - e.prevval = win->eventstate->val; - e.prevtype = win->eventstate->type; - e.ascii = '\0'; e.utf8_buf[0] = '\0'; if (unicode != NULL) { diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 2406ba83bf4..dc38bd79b7d 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -148,8 +148,29 @@ wmEvent *WM_event_add_simulate(wmWindow *win, const wmEvent *event_to_add) return NULL; } wmEvent *event = wm_event_add(win, event_to_add); + win->eventstate->x = event->x; win->eventstate->y = event->y; + + win->eventstate->prevval = event->prevval = win->eventstate->val; + win->eventstate->prevtype = event->prevtype = win->eventstate->type; + win->eventstate->prevx = event->prevx = win->eventstate->x; + win->eventstate->prevy = event->prevy = win->eventstate->y; + + if (event->type == MOUSEMOVE) { + /* Pass. */ + } + else { + win->eventstate->val = event->val; + win->eventstate->type = event->type; + + if (ISMOUSE_BUTTON(event->type)) { + if (event->val == KM_PRESS) { + win->eventstate->prevclickx = event->x; + win->eventstate->prevclicky = event->y; + } + } + } return event; } -- cgit v1.2.3