[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25472] trunk/blender/source/blender: Bugfix: doubles are not supported correctly in SDNA, double click

Brecht Van Lommel brecht at blender.org
Sat Dec 19 15:58:24 CET 2009


Revision: 25472
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25472
Author:   blendix
Date:     2009-12-19 15:58:24 +0100 (Sat, 19 Dec 2009)

Log Message:
-----------
Bugfix: doubles are not supported correctly in SDNA, double click
introduced one in wmWindow.last_click_time. Moved this to the wmEvent
struct, which now no is in DNA, was needed for RNA wrapping but not
needed anymore.

Modified Paths:
--------------
    trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h
    trunk/blender/source/blender/makesrna/intern/rna_wm.c
    trunk/blender/source/blender/windowmanager/WM_types.h
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h	2009-12-19 13:48:50 UTC (rev 25471)
+++ trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h	2009-12-19 14:58:24 UTC (rev 25472)
@@ -154,10 +154,7 @@
 	short cursor;		/* current mouse cursor type */
 	short lastcursor;	/* for temp waitcursor */
 	short addmousemove;	/* internal: tag this for extra mousemove event, makes cursors/buttons active on UI switching */
-	
-	short last_type; /* last event information, used for click */
-	short last_val;
-	double last_click_time; /* for double click */
+	short pad2[2];
 
 	struct wmEvent *eventstate;	/* storage for event system */
 	
@@ -345,40 +342,6 @@
 /* wmOperator flag */
 #define OP_GRAB_POINTER			1
 
-/* ************** wmEvent ************************ */
-/* for read-only rna access, dont save this */
-
-/* each event should have full modifier state */
-/* event comes from eventmanager and from keymap */
-typedef struct wmEvent {
-	struct wmEvent *next, *prev;
-	
-	short type;			/* event code itself (short, is also in keymap) */
-	short val;			/* press, release, scrollvalue */
-	short x, y;			/* mouse pointer position, screen coord */
-	short mval[2];		/* region mouse position, name convention pre 2.5 :) */
-	short prevx, prevy;	/* previous mouse pointer position */
-	short unicode;		/* future, ghost? */
-	char ascii;			/* from ghost */
-	char pad;
-	
-	/* modifier states */
-	short shift, ctrl, alt, oskey;	/* oskey is apple or windowskey, value denotes order of pressed */
-	short keymodifier;				/* rawkey modifier */
-	
-	short pad1;
-	
-	/* keymap item, set by handler (weak?) */
-	const char *keymap_idname;
-	
-	/* custom data */
-	short custom;		/* custom data type, stylus, 6dof, see wm_event_types.h */
-	short customdatafree;
-	int pad2;
-	void *customdata;	/* ascii, unicode, mouse coords, angles, vectors, dragdrop info */
-	
-} wmEvent;
-
 typedef enum wmRadialControlMode {
 	WM_RADIALCONTROL_SIZE,
 	WM_RADIALCONTROL_STRENGTH,

Modified: trunk/blender/source/blender/makesrna/intern/rna_wm.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_wm.c	2009-12-19 13:48:50 UTC (rev 25471)
+++ trunk/blender/source/blender/makesrna/intern/rna_wm.c	2009-12-19 14:58:24 UTC (rev 25472)
@@ -701,6 +701,8 @@
 	RNA_def_struct_ui_text(srna, "Event", "Window Manager Event");
 	RNA_def_struct_sdna(srna, "wmEvent");
 
+	RNA_define_verify_sdna(0); // not in sdna
+
 	/* strings */
 	prop= RNA_def_property(srna, "ascii", PROP_STRING, PROP_NONE);
 	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
@@ -764,6 +766,8 @@
 	RNA_def_property_boolean_sdna(prop, NULL, "oskey", 1);
 	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 	RNA_def_property_ui_text(prop, "OS Key", "True when the Cmd key is held.");
+
+	RNA_define_verify_sdna(1); // not in sdna
 }
 
 static void rna_def_window(BlenderRNA *brna)

Modified: trunk/blender/source/blender/windowmanager/WM_types.h
===================================================================
--- trunk/blender/source/blender/windowmanager/WM_types.h	2009-12-19 13:48:50 UTC (rev 25471)
+++ trunk/blender/source/blender/windowmanager/WM_types.h	2009-12-19 14:58:24 UTC (rev 25472)
@@ -288,6 +288,44 @@
 	/* customdata for lasso is short array */
 } wmGesture;
 
+/* ************** wmEvent ************************ */
+
+/* each event should have full modifier state */
+/* event comes from eventmanager and from keymap */
+typedef struct wmEvent {
+	struct wmEvent *next, *prev;
+	
+	short type;			/* event code itself (short, is also in keymap) */
+	short val;			/* press, release, scrollvalue */
+	short x, y;			/* mouse pointer position, screen coord */
+	short mval[2];		/* region mouse position, name convention pre 2.5 :) */
+	short unicode;		/* future, ghost? */
+	char ascii;			/* from ghost */
+	char pad;
+
+	/* previous state */
+	short prevtype;
+	short prevval;
+	short prevx, prevy;
+	double prevclicktime;
+	
+	/* modifier states */
+	short shift, ctrl, alt, oskey;	/* oskey is apple or windowskey, value denotes order of pressed */
+	short keymodifier;				/* rawkey modifier */
+	
+	short pad1;
+	
+	/* keymap item, set by handler (weak?) */
+	const char *keymap_idname;
+	
+	/* custom data */
+	short custom;		/* custom data type, stylus, 6dof, see wm_event_types.h */
+	short customdatafree;
+	int pad2;
+	void *customdata;	/* ascii, unicode, mouse coords, angles, vectors, dragdrop info */
+	
+} wmEvent;
+
 /* ************** custom wmEvent data ************** */
 typedef struct wmTabletData {
 	int Active;			/* 0=EVT_TABLET_NONE, 1=EVT_TABLET_STYLUS, 2=EVT_TABLET_ERASER */

Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2009-12-19 13:48:50 UTC (rev 25471)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2009-12-19 14:58:24 UTC (rev 25472)
@@ -1177,9 +1177,9 @@
 	if (wm_action_not_handled(action) && event->val == KM_RELEASE) {
 		wmWindow *win = CTX_wm_window(C);
 
-		if (win && win->last_type == event->type && win->last_val == KM_PRESS) {
+		if (win && win->eventstate->prevtype == event->type && win->eventstate->prevval == KM_PRESS) {
 			/* test for double click first */
-			if ((PIL_check_seconds_timer() - win->last_click_time) * 1000 < U.dbl_click_time) {
+			if ((PIL_check_seconds_timer() - win->eventstate->prevclicktime) * 1000 < U.dbl_click_time) {
 				event->val = KM_DBL_CLICK;
 				action |= wm_handlers_do(C, event, handlers);
 			}
@@ -1381,26 +1381,26 @@
 			/* mousemove and timer events don't overwrite last type */
 			if (event->type != MOUSEMOVE && !ISTIMER(event->type)) {
 				if (wm_action_not_handled(action)) {
-					if (win->last_type == event->type) {
+					if (win->eventstate->prevtype == event->type) {
 						/* set click time on first click (press -> release) */
-						if (win->last_val == KM_PRESS && event->val == KM_RELEASE) {
-							win->last_click_time = PIL_check_seconds_timer();
+						if (win->eventstate->prevval == KM_PRESS && event->val == KM_RELEASE) {
+							win->eventstate->prevclicktime = PIL_check_seconds_timer();
 						}
 					} else {
 						/* reset click time if event type not the same */
-						win->last_click_time = 0;
+						win->eventstate->prevclicktime = 0;
 					}
 
-					win->last_val = event->val;
-					win->last_type = event->type;
+					win->eventstate->prevval = event->val;
+					win->eventstate->prevtype = event->type;
 				} else if (event->val == KM_CLICK) { /* keep click for double click later */
-					win->last_type = event->type;
-					win->last_val = event->val;
-					win->last_click_time = PIL_check_seconds_timer();
+					win->eventstate->prevtype = event->type;
+					win->eventstate->prevval = event->val;
+					win->eventstate->prevclicktime = PIL_check_seconds_timer();
 				} else { /* reset if not */
-					win->last_type = -1;
-					win->last_val = 0;
-					win->last_click_time = 0;
+					win->eventstate->prevtype = -1;
+					win->eventstate->prevval = 0;
+					win->eventstate->prevclicktime = 0;
 				}
 			}
 





More information about the Bf-blender-cvs mailing list