Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2021-03-02 09:02:55 +0300
committerCampbell Barton <ideasman42@gmail.com>2021-03-02 09:02:55 +0300
commitf8415261a6d37b219aaeab24f8ed67456f22ede8 (patch)
tree562acf208aa4e70b3ec38cd5827083737864e505 /source/blender/windowmanager/intern/wm_event_system.c
parentbf1ee49e2039dd27df833ce2005bacf3569cbbaa (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.c20
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;
}