diff options
author | Campbell Barton <ideasman42@gmail.com> | 2021-02-27 14:05:01 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2021-02-27 14:05:01 +0300 |
commit | e3c11b36dae03c783234ca528fbcf7a85d346df3 (patch) | |
tree | 2fe989ae2bab53403e7072a57068efe98b6ae688 | |
parent | 9cfb320208b655a1d7f177f038179b87d98fb066 (diff) |
Fix error converting simulated events press/release to clicks
Move logic that sets previous event state into WM_event_add_simulate.
-rw-r--r-- | source/blender/makesrna/intern/rna_wm_api.c | 5 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 21 |
2 files changed, 21 insertions, 5 deletions
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; } |