[Bf-blender-cvs] [f8415261a6d] master: WM: window.event_simulate now sets previous values properly

Campbell Barton noreply at git.blender.org
Tue Mar 2 07:04:13 CET 2021


Commit: f8415261a6d37b219aaeab24f8ed67456f22ede8
Author: Campbell Barton
Date:   Tue Mar 2 17:02:55 2021 +1100
Branches: master
https://developer.blender.org/rBf8415261a6d37b219aaeab24f8ed67456f22ede8

WM: window.event_simulate now sets previous values properly

Match wm_event_add_ghostevent behavior for setting previous values.

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

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

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

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



More information about the Bf-blender-cvs mailing list