Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-10-22 15:34:01 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-10-22 15:34:01 +0400
commitc1de5cc83829b65094eee024af10928bd13261ce (patch)
tree9d2afd264f8a6c1dee8d718195bdd14df5ea9cd9 /source/blender/windowmanager
parentebe63b664baa2f4e65643a2535766e5babf9c8a7 (diff)
- use defines for wmKeyMapItem & wmEvent alt/shift/ctrl/oskey
- clear utf8_buf on key up & complain if its set (should never happen)
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/WM_types.h5
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c52
-rw-r--r--source/blender/windowmanager/intern/wm_keymap.c26
3 files changed, 38 insertions, 45 deletions
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h
index f28fb08ac6e..5048166c8b7 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -98,6 +98,11 @@ enum {
#define KM_ALT2 64
#define KM_OSKEY2 128
+/* KM_MOD_ flags for wmKeyMapItem and wmEvent.alt/shift/oskey/ctrl */
+/* note that KM_ANY and FALSE are used with these defines too */
+#define KM_MOD_FIRST 1
+#define KM_MOD_SECOND 2
+
/* type: defined in wm_event_types.c */
#define KM_TEXTINPUT -2
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 177dd560838..c798b284c7b 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -2615,35 +2615,39 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int U
event.val= (type==GHOST_kEventKeyDown)?KM_PRESS:KM_RELEASE;
/* exclude arrow keys, esc, etc from text input */
- if(type==GHOST_kEventKeyUp || (event.ascii<32 && event.ascii>0))
- event.ascii= '\0';
-
- /* modifiers */
- if (event.type==LEFTSHIFTKEY || event.type==RIGHTSHIFTKEY) {
- event.shift= evt->shift= (event.val==KM_PRESS);
- if(event.val==KM_PRESS && (evt->ctrl || evt->alt || evt->oskey))
- event.shift= evt->shift = 3; // define?
- }
- else if (event.type==LEFTCTRLKEY || event.type==RIGHTCTRLKEY) {
- event.ctrl= evt->ctrl= (event.val==KM_PRESS);
- if(event.val==KM_PRESS && (evt->shift || evt->alt || evt->oskey))
- event.ctrl= evt->ctrl = 3; // define?
- }
- else if (event.type==LEFTALTKEY || event.type==RIGHTALTKEY) {
- event.alt= evt->alt= (event.val==KM_PRESS);
- if(event.val==KM_PRESS && (evt->ctrl || evt->shift || evt->oskey))
- event.alt= evt->alt = 3; // define?
- }
- else if (event.type==OSKEY) {
- event.oskey= evt->oskey= (event.val==KM_PRESS);
- if(event.val==KM_PRESS && (evt->ctrl || evt->alt || evt->shift))
- event.oskey= evt->oskey = 3; // define?
+ if(type==GHOST_kEventKeyUp) {
+ if (event.ascii<32 && event.ascii > 0) {
+ event.ascii= '\0';
+ }
+
+ /* ghost should do this already for key up */
+ if (event.utf8_buf[0]) {
+ printf("%s: ghost on you're platform is misbehaving, utf8 events on key up!\n", __func__);
+ }
+ event.utf8_buf[0]= '\0';
}
- else {
+
+ /* modifiers */
+ /* assigning both first and second is strange - campbell */
+ switch(event.type) {
+ case LEFTSHIFTKEY: case RIGHTSHIFTKEY:
+ event.shift= evt->shift= (event.val==KM_PRESS) ? ((evt->ctrl || evt->alt || evt->oskey) ? (KM_MOD_FIRST | KM_MOD_SECOND) : KM_MOD_FIRST) : FALSE;
+ break;
+ case LEFTCTRLKEY: case RIGHTCTRLKEY:
+ event.ctrl= evt->ctrl= (event.val==KM_PRESS) ? ((evt->shift || evt->alt || evt->oskey) ? (KM_MOD_FIRST | KM_MOD_SECOND) : KM_MOD_FIRST) : FALSE;
+ break;
+ case LEFTALTKEY: case RIGHTALTKEY:
+ event.alt= evt->alt= (event.val==KM_PRESS) ? ((evt->ctrl || evt->shift || evt->oskey) ? (KM_MOD_FIRST | KM_MOD_SECOND) : KM_MOD_FIRST) : FALSE;
+ break;
+ case OSKEY:
+ event.oskey= evt->oskey= (event.val==KM_PRESS) ? ((evt->ctrl || evt->alt || evt->shift) ? (KM_MOD_FIRST | KM_MOD_SECOND) : KM_MOD_FIRST) : FALSE;
+ break;
+ default:
if(event.val==KM_PRESS && event.keymodifier==0)
evt->keymodifier= event.type; /* only set in eventstate, for next event */
else if(event.val==KM_RELEASE && event.keymodifier==event.type)
event.keymodifier= evt->keymodifier= 0;
+ break;
}
/* this case happens on some systems that on holding a key pressed,
diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c
index 854fa688ea4..99bd83ef8c1 100644
--- a/source/blender/windowmanager/intern/wm_keymap.c
+++ b/source/blender/windowmanager/intern/wm_keymap.c
@@ -310,31 +310,15 @@ static void keymap_event_set(wmKeyMapItem *kmi, short type, short val, int modif
kmi->type= type;
kmi->val= val;
kmi->keymodifier= keymodifier;
-
+
if(modifier == KM_ANY) {
kmi->shift= kmi->ctrl= kmi->alt= kmi->oskey= KM_ANY;
}
else {
-
- kmi->shift= kmi->ctrl= kmi->alt= kmi->oskey= 0;
-
- /* defines? */
- if(modifier & KM_SHIFT)
- kmi->shift= 1;
- else if(modifier & KM_SHIFT2)
- kmi->shift= 2;
- if(modifier & KM_CTRL)
- kmi->ctrl= 1;
- else if(modifier & KM_CTRL2)
- kmi->ctrl= 2;
- if(modifier & KM_ALT)
- kmi->alt= 1;
- else if(modifier & KM_ALT2)
- kmi->alt= 2;
- if(modifier & KM_OSKEY)
- kmi->oskey= 1;
- else if(modifier & KM_OSKEY2)
- kmi->oskey= 2;
+ kmi->shift= (modifier & KM_SHIFT) ? KM_MOD_FIRST : ((modifier & KM_SHIFT2) ? KM_MOD_SECOND : FALSE);
+ kmi->ctrl= (modifier & KM_CTRL) ? KM_MOD_FIRST : ((modifier & KM_CTRL2) ? KM_MOD_SECOND : FALSE);
+ kmi->alt= (modifier & KM_ALT) ? KM_MOD_FIRST : ((modifier & KM_ALT2) ? KM_MOD_SECOND : FALSE);
+ kmi->oskey= (modifier & KM_OSKEY) ? KM_MOD_FIRST : ((modifier & KM_OSKEY2) ? KM_MOD_SECOND : FALSE);
}
}