[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29994] trunk/blender/source/blender/ windowmanager: Fix #21201: double click didn' t use the original mouse position, now

Brecht Van Lommel brecht at blender.org
Mon Jul 5 18:42:42 CEST 2010


Revision: 29994
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29994
Author:   blendix
Date:     2010-07-05 18:42:42 +0200 (Mon, 05 Jul 2010)

Log Message:
-----------
Fix #21201: double click didn't use the original mouse position, now
it stores it and sets it later when the double click event is handled.

Decided to not reuse prevx but made prevclickx, because there may be
multiple mousemoves between the two clicks, and prevx is already used
for some other tricky things.

Modified Paths:
--------------
    trunk/blender/source/blender/windowmanager/WM_types.h
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: trunk/blender/source/blender/windowmanager/WM_types.h
===================================================================
--- trunk/blender/source/blender/windowmanager/WM_types.h	2010-07-05 16:20:52 UTC (rev 29993)
+++ trunk/blender/source/blender/windowmanager/WM_types.h	2010-07-05 16:42:42 UTC (rev 29994)
@@ -326,6 +326,7 @@
 	short prevval;
 	short prevx, prevy;
 	double prevclicktime;
+	short prevclickx, prevclicky;
 	
 	/* modifier states */
 	short shift, ctrl, alt, oskey;	/* oskey is apple or windowskey, value denotes order of pressed */

Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2010-07-05 16:20:52 UTC (rev 29993)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2010-07-05 16:42:42 UTC (rev 29994)
@@ -1433,6 +1433,8 @@
 			/* test for double click first */
 			if ((PIL_check_seconds_timer() - win->eventstate->prevclicktime) * 1000 < U.dbl_click_time) {
 				event->val = KM_DBL_CLICK;
+				event->x = win->eventstate->prevclickx;
+				event->y = win->eventstate->prevclicky;
 				action |= wm_handlers_do(C, event, handlers);
 			}
 
@@ -1719,6 +1721,8 @@
 						/* set click time on first click (press -> release) */
 						if (win->eventstate->prevval == KM_PRESS && event->val == KM_RELEASE) {
 							win->eventstate->prevclicktime = PIL_check_seconds_timer();
+							win->eventstate->prevclickx = event->x;
+							win->eventstate->prevclicky = event->y;
 						}
 					} else {
 						/* reset click time if event type not the same */
@@ -1731,6 +1735,8 @@
 					win->eventstate->prevtype = event->type;
 					win->eventstate->prevval = event->val;
 					win->eventstate->prevclicktime = PIL_check_seconds_timer();
+					win->eventstate->prevclickx = event->x;
+					win->eventstate->prevclicky = event->y;
 				} else { /* reset if not */
 					win->eventstate->prevtype = -1;
 					win->eventstate->prevval = 0;





More information about the Bf-blender-cvs mailing list