diff options
author | Campbell Barton <ideasman42@gmail.com> | 2021-03-02 09:02:55 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2021-03-02 09:02:55 +0300 |
commit | f8415261a6d37b219aaeab24f8ed67456f22ede8 (patch) | |
tree | 562acf208aa4e70b3ec38cd5827083737864e505 /source/blender/windowmanager/intern/wm_event_system.c | |
parent | bf1ee49e2039dd27df833ce2005bacf3569cbbaa (diff) |
WM: window.event_simulate now sets previous values properly
Match wm_event_add_ghostevent behavior for setting previous values.
Diffstat (limited to 'source/blender/windowmanager/intern/wm_event_system.c')
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 09a9e328b6d..4928bd5187d 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -149,23 +149,25 @@ wmEvent *WM_event_add_simulate(wmWindow *win, const wmEvent *event_to_add) } wmEvent *event = wm_event_add(win, event_to_add); + /* Logic for setting previous value is documented on the #wmEvent struct, + * see #wm_event_add_ghostevent for the implementation of logic this follows. */ + 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. */ + win->eventstate->prevx = event->prevx = win->eventstate->x; + win->eventstate->prevy = event->prevy = win->eventstate->y; } - else { + else if (ISMOUSE_BUTTON(event->type) || ISKEYBOARD(event->type)) { + win->eventstate->prevval = event->prevval = win->eventstate->val; + win->eventstate->prevtype = event->prevtype = win->eventstate->type; + win->eventstate->val = event->val; win->eventstate->type = event->type; - if (ISMOUSE_BUTTON(event->type)) { - if (event->val == KM_PRESS) { + if (event->val == KM_PRESS) { + if (event->is_repeat == false) { win->eventstate->prevclickx = event->x; win->eventstate->prevclicky = event->y; } |