[Bf-blender-cvs] [e3c11b36dae] master: Fix error converting simulated events press/release to clicks

Campbell Barton noreply at git.blender.org
Sat Feb 27 12:07:17 CET 2021


Commit: e3c11b36dae03c783234ca528fbcf7a85d346df3
Author: Campbell Barton
Date:   Sat Feb 27 22:05:01 2021 +1100
Branches: master
https://developer.blender.org/rBe3c11b36dae03c783234ca528fbcf7a85d346df3

Fix error converting simulated events press/release to clicks

Move logic that sets previous event state into WM_event_add_simulate.

===================================================================

M	source/blender/makesrna/intern/rna_wm_api.c
M	source/blender/windowmanager/intern/wm_event_system.c

===================================================================

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;
 }



More information about the Bf-blender-cvs mailing list