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


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to