From c1de5cc83829b65094eee024af10928bd13261ce Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 22 Oct 2011 11:34:01 +0000 Subject: - use defines for wmKeyMapItem & wmEvent alt/shift/ctrl/oskey - clear utf8_buf on key up & complain if its set (should never happen) --- .../blender/editors/interface/interface_handlers.c | 30 ++++++------- source/blender/editors/interface/interface_panel.c | 2 +- source/blender/editors/physics/particle_edit.c | 2 +- source/blender/editors/transform/transform.c | 9 ++-- source/blender/windowmanager/WM_types.h | 5 +++ .../blender/windowmanager/intern/wm_event_system.c | 52 ++++++++++++---------- source/blender/windowmanager/intern/wm_keymap.c | 26 +++-------- 7 files changed, 58 insertions(+), 68 deletions(-) diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index c02bbafce15..32c4ec21e13 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -2199,15 +2199,11 @@ static int ui_do_but_HOTKEYEVT(bContext *C, uiBut *but, uiHandleButtonData *data /* always set */ but->modifier_key = 0; - if(event->shift) - but->modifier_key |= KM_SHIFT; - if(event->alt) - but->modifier_key |= KM_ALT; - if(event->ctrl) - but->modifier_key |= KM_CTRL; - if(event->oskey) - but->modifier_key |= KM_OSKEY; - + if(event->shift) but->modifier_key |= KM_SHIFT; + if(event->alt) but->modifier_key |= KM_ALT; + if(event->ctrl) but->modifier_key |= KM_CTRL; + if(event->oskey) but->modifier_key |= KM_OSKEY; + ui_check_but(but); ED_region_tag_redraw(data->region); @@ -3673,7 +3669,7 @@ static int ui_do_but_CURVE(bContext *C, uiBlock *block, uiBut *but, uiHandleButt if(sel!= -1) { /* ok, we move a point */ /* deselect all if this one is deselect. except if we hold shift */ - if(event->shift==0) { + if(event->shift == FALSE) { for(a=0; atotpoint; a++) cmp[a].flag &= ~SELECT; cmp[sel].flag |= SELECT; @@ -3712,7 +3708,7 @@ static int ui_do_but_CURVE(bContext *C, uiBlock *block, uiBut *but, uiHandleButt if(!data->dragchange) { /* deselect all, select one */ - if(event->shift==0) { + if(event->shift == FALSE) { for(a=0; atotpoint; a++) cmp[a].flag &= ~SELECT; cmp[data->dragsel].flag |= SELECT; @@ -4491,7 +4487,7 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event) ui_but_drop (C, event, but, data); } /* handle keyframing */ - else if(event->type == IKEY && !ELEM3(1, event->ctrl, event->oskey, event->shift) && event->val == KM_PRESS) { + else if(event->type == IKEY && !ELEM3(KM_MOD_FIRST, event->ctrl, event->oskey, event->shift) && event->val == KM_PRESS) { if(event->alt) ui_but_anim_delete_keyframe(C); else @@ -4502,7 +4498,7 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event) return WM_UI_HANDLER_BREAK; } /* handle drivers */ - else if(event->type == DKEY && !ELEM3(1, event->ctrl, event->oskey, event->shift) && event->val == KM_PRESS) { + else if(event->type == DKEY && !ELEM3(KM_MOD_FIRST, event->ctrl, event->oskey, event->shift) && event->val == KM_PRESS) { if(event->alt) ui_but_anim_remove_driver(C); else @@ -4513,7 +4509,7 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event) return WM_UI_HANDLER_BREAK; } /* handle keyingsets */ - else if(event->type == KKEY && !ELEM3(1, event->ctrl, event->oskey, event->shift) && event->val == KM_PRESS) { + else if(event->type == KKEY && !ELEM3(KM_MOD_FIRST, event->ctrl, event->oskey, event->shift) && event->val == KM_PRESS) { if(event->alt) ui_but_anim_remove_keyingset(C); else @@ -5983,9 +5979,9 @@ static int ui_handle_menu_event(bContext *C, wmEvent *event, uiPopupBlockHandle case ZKEY: { if( (event->val == KM_PRESS) && - (event->shift == FALSE) && - (event->ctrl == FALSE) && - (event->oskey == FALSE) + (event->shift == FALSE) && + (event->ctrl == FALSE) && + (event->oskey == FALSE) ) { for(but= block->buttons.first; but; but= but->next) { diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c index 890a2b4ee7f..546f4f0b639 100644 --- a/source/blender/editors/interface/interface_panel.c +++ b/source/blender/editors/interface/interface_panel.c @@ -1042,7 +1042,7 @@ int ui_handler_panel_region(bContext *C, wmEvent *event) inside= 1; if(inside && event->val==KM_PRESS) { - if(event->type == AKEY && !ELEM4(1, event->ctrl, event->oskey, event->shift, event->alt)) { + if(event->type == AKEY && !ELEM4(KM_MOD_FIRST, event->ctrl, event->oskey, event->shift, event->alt)) { if(pa->flag & PNL_CLOSEDY) { if((block->maxy <= my) && (block->maxy+PNL_HEADER >= my)) diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index 740fd5137de..c0b81efe18c 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -3700,7 +3700,7 @@ static void brush_edit_apply_event(bContext *C, wmOperator *op, wmEvent *event) RNA_collection_add(op->ptr, "stroke", &itemptr); RNA_float_set_array(&itemptr, "mouse", mouse); - RNA_boolean_set(&itemptr, "pen_flip", event->shift != 0); // XXX hardcoded + RNA_boolean_set(&itemptr, "pen_flip", event->shift != FALSE); // XXX hardcoded /* apply */ brush_edit_apply(C, op, &itemptr); diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 859c7778883..e3eb14e2fe6 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -1543,10 +1543,11 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int { if (kmi->propvalue == TFM_MODAL_SNAP_INV_ON && kmi->val == KM_PRESS) { - if ((ELEM(kmi->type, LEFTCTRLKEY, RIGHTCTRLKEY) && event->ctrl) || - (ELEM(kmi->type, LEFTSHIFTKEY, RIGHTSHIFTKEY) && event->shift) || - (ELEM(kmi->type, LEFTALTKEY, RIGHTALTKEY) && event->alt) || - (kmi->type == OSKEY && event->oskey)) { + if ((ELEM(kmi->type, LEFTCTRLKEY, RIGHTCTRLKEY) && event->ctrl) || + (ELEM(kmi->type, LEFTSHIFTKEY, RIGHTSHIFTKEY) && event->shift) || + (ELEM(kmi->type, LEFTALTKEY, RIGHTALTKEY) && event->alt) || + ((kmi->type == OSKEY) && event->oskey) ) + { t->modifiers |= MOD_SNAP_INVERT; } break; 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); } } -- cgit v1.2.3