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-02-27 14:05:01 +0300
committerCampbell Barton <ideasman42@gmail.com>2021-02-27 14:05:01 +0300
commite3c11b36dae03c783234ca528fbcf7a85d346df3 (patch)
tree2fe989ae2bab53403e7072a57068efe98b6ae688
parent9cfb320208b655a1d7f177f038179b87d98fb066 (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.c5
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c21
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;
}