Commit: 50650e28ea5641b200727fcbe14de83fa10e2c49
Author: Campbell Barton
Date:   Sun Jan 12 00:38:44 2014 +1100
https://developer.blender.org/rB50650e28ea5641b200727fcbe14de83fa10e2c49

Events: support for buttons 6 & 7 (some trackballs have these) X11 only

Patch by Marcus von Appen

Note: this patch makes ISMOUSE accept INBETWEEN_MOUSEMOVE as a mouse
event where before it didnt.

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

M       intern/ghost/GHOST_Types.h
M       intern/ghost/intern/GHOST_SystemX11.cpp
M       source/blender/makesrna/intern/rna_wm.c
M       source/blender/windowmanager/intern/wm_event_system.c
M       source/blender/windowmanager/wm_event_types.h

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

diff --git a/intern/ghost/GHOST_Types.h b/intern/ghost/GHOST_Types.h
index 35dff73..7333ba0 100644
--- a/intern/ghost/GHOST_Types.h
+++ b/intern/ghost/GHOST_Types.h
@@ -148,6 +148,9 @@ typedef enum {
        GHOST_kButtonMaskRight,
        GHOST_kButtonMaskButton4,
        GHOST_kButtonMaskButton5,
+       /* Trackballs and programmable buttons */
+       GHOST_kButtonMaskButton6,
+       GHOST_kButtonMaskButton7,
        GHOST_kButtonNumMasks
 } GHOST_TButtonMask;
 
diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp 
b/intern/ghost/intern/GHOST_SystemX11.cpp
index 0746dd8..3b12d91 100644
--- a/intern/ghost/intern/GHOST_SystemX11.cpp
+++ b/intern/ghost/intern/GHOST_SystemX11.cpp
@@ -902,6 +902,10 @@ GHOST_SystemX11::processEvent(XEvent *xe)
                         * you can re-order button mapping like this... (swaps 
6,7 with 8,9)
                         *   xmodmap -e "pointer = 1 2 3 4 5 8 9 6 7"
                         */
+                       else if (xbe.button == 6)
+                               gbmask = GHOST_kButtonMaskButton6;
+                       else if (xbe.button == 7)
+                               gbmask = GHOST_kButtonMaskButton7;
                        else if (xbe.button == 8)
                                gbmask = GHOST_kButtonMaskButton4;
                        else if (xbe.button == 9)
diff --git a/source/blender/makesrna/intern/rna_wm.c 
b/source/blender/makesrna/intern/rna_wm.c
index 0eda266..f4f2f83 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -81,6 +81,8 @@ static EnumPropertyItem event_mouse_type_items[] = {
        {RIGHTMOUSE, "RIGHTMOUSE", 0, "Right", ""},
        {BUTTON4MOUSE, "BUTTON4MOUSE", 0, "Button4", ""},
        {BUTTON5MOUSE, "BUTTON5MOUSE", 0, "Button5", ""},
+       {BUTTON6MOUSE, "BUTTON6MOUSE", 0, "Button6", ""},
+       {BUTTON7MOUSE, "BUTTON7MOUSE", 0, "Button7", ""},
        {ACTIONMOUSE, "ACTIONMOUSE", 0, "Action", ""},
        {SELECTMOUSE, "SELECTMOUSE", 0, "Select", ""},
        {0, "", 0, NULL, NULL},
@@ -173,6 +175,8 @@ EnumPropertyItem event_type_items[] = {
        {RIGHTMOUSE, "RIGHTMOUSE", 0, "Right Mouse", ""},
        {BUTTON4MOUSE, "BUTTON4MOUSE", 0, "Button4 Mouse", ""},
        {BUTTON5MOUSE, "BUTTON5MOUSE", 0, "Button5 Mouse", ""},
+       {BUTTON6MOUSE, "BUTTON6MOUSE", 0, "Button6 Mouse", ""},
+       {BUTTON7MOUSE, "BUTTON7MOUSE", 0, "Button7 Mouse", ""},
        {ACTIONMOUSE, "ACTIONMOUSE", 0, "Action Mouse", ""},
        {SELECTMOUSE, "SELECTMOUSE", 0, "Select Mouse", ""},
        {0, "", 0, NULL, NULL},
diff --git a/source/blender/windowmanager/intern/wm_event_system.c 
b/source/blender/windowmanager/intern/wm_event_system.c
index ef9b7c4..e4dfae2 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -3011,6 +3011,10 @@ void wm_event_add_ghostevent(wmWindowManager *wm, 
wmWindow *win, int type, int U
                                event.type = BUTTON4MOUSE;
                        else if (bd->button == GHOST_kButtonMaskButton5)
                                event.type = BUTTON5MOUSE;
+                       else if (bd->button == GHOST_kButtonMaskButton6)
+                               event.type = BUTTON6MOUSE;
+                       else if (bd->button == GHOST_kButtonMaskButton7)
+                               event.type = BUTTON7MOUSE;
                        else
                                event.type = MIDDLEMOUSE;
                        
diff --git a/source/blender/windowmanager/wm_event_types.h 
b/source/blender/windowmanager/wm_event_types.h
index df3096e..08cbd53 100644
--- a/source/blender/windowmanager/wm_event_types.h
+++ b/source/blender/windowmanager/wm_event_types.h
@@ -65,6 +65,9 @@
                /* Extra mouse buttons */
 #define BUTTON4MOUSE   7
 #define BUTTON5MOUSE   8
+               /* More mouse buttons - can't use 9 and 10 here (wheel) */
+#define BUTTON6MOUSE   18
+#define BUTTON7MOUSE   19
                /* Extra trackpad gestures */
 #define MOUSEPAN               14
 #define MOUSEZOOM              15
@@ -297,7 +300,7 @@ enum {
 #define ISKEYMODIFIER(event_type)  ((event_type >= LEFTCTRLKEY && event_type 
<= LEFTSHIFTKEY) || event_type == OSKEY)
 
        /* test whether the event is a mouse button */
-#define ISMOUSE(event_type)  (event_type >= LEFTMOUSE && event_type <= 
MOUSEROTATE)
+#define ISMOUSE(event_type)  (event_type >= LEFTMOUSE && event_type <= 
BUTTON7MOUSE)
 
        /* test whether the event is tweak event */
 #define ISTWEAK(event_type)  (event_type >= EVT_TWEAK_L && event_type <= 
EVT_GESTURE)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to