diff --git a/source/blender/blenkernel/BKE_global.h b/source/blender/blenkernel/BKE_global.h index 205c417d79c..d54b6232c6a 100644 --- a/source/blender/blenkernel/BKE_global.h +++ b/source/blender/blenkernel/BKE_global.h @@ -233,15 +233,16 @@ typedef struct Global { #define G_FLAGS_AUTOPLAY (1 << G_FLAGS_AUTOPLAY_BIT) /* G.qual */ -#define R_SHIFTKEY 1 -#define L_SHIFTKEY 2 -#define LR_SHIFTKEY 3 -#define R_ALTKEY 4 -#define L_ALTKEY 8 -#define LR_ALTKEY 12 -#define R_CTRLKEY 16 -#define L_CTRLKEY 32 -#define LR_CTRLKEY 48 +#define R_SHIFTKEY 1 +#define L_SHIFTKEY 2 +#define LR_SHIFTKEY 3 +#define R_ALTKEY 4 +#define L_ALTKEY 8 +#define LR_ALTKEY 12 +#define R_CTRLKEY 16 +#define L_CTRLKEY 32 +#define LR_CTRLKEY 48 +#define LR_COMMANDKEY 64 /* G.order: indicates what endianness the platform where the file was * written had. */ diff --git a/source/blender/include/mydevice.h b/source/blender/include/mydevice.h index ceca8ce2673..e4ede3a7578 100644 --- a/source/blender/include/mydevice.h +++ b/source/blender/include/mydevice.h @@ -186,6 +186,7 @@ #define ENDKEY 170 #define UNKNOWNKEY 171 +#define COMMANDKEY 172 /* **************** BLENDER QUEUE EVENTS ********************* */ diff --git a/source/blender/src/editscreen.c b/source/blender/src/editscreen.c index a71a20f68f0..d768903da1c 100644 --- a/source/blender/src/editscreen.c +++ b/source/blender/src/editscreen.c @@ -832,6 +832,10 @@ unsigned short screen_qread(short *val, char *ascii) if(*val) G.qual |= LR_CTRLKEY; else G.qual &= ~LR_CTRLKEY; } + else if(event==COMMANDKEY) { // OSX + if(*val) G.qual |= LR_COMMANDKEY; + else G.qual &= ~LR_COMMANDKEY; + } return event; } diff --git a/source/blender/src/ghostwinlay.c b/source/blender/src/ghostwinlay.c index 9957d331aad..762769e91ed 100644 --- a/source/blender/src/ghostwinlay.c +++ b/source/blender/src/ghostwinlay.c @@ -83,7 +83,7 @@ struct _Window { /* Last known mouse/button/qualifier state */ int lmouse[2]; - int lqual; /* (LR_SHFTKEY, LR_CTRLKEY, LR_ALTKEY) */ + int lqual; /* (LR_SHFTKEY, LR_CTRLKEY, LR_ALTKEY, LR_COMMANDKEY) */ int lmbut; /* (L_MOUSE, M_MOUSE, R_MOUSE) */ int commandqual; @@ -238,7 +238,7 @@ static int convert_key(GHOST_TKey key) { case GHOST_kKeyRightShift: return RIGHTSHIFTKEY; case GHOST_kKeyLeftControl: return LEFTCTRLKEY; case GHOST_kKeyRightControl: return RIGHTCTRLKEY; - case GHOST_kKeyCommand: return LEFTCTRLKEY; + case GHOST_kKeyCommand: return COMMANDKEY; case GHOST_kKeyLeftAlt: return LEFTALTKEY; case GHOST_kKeyRightAlt: return RIGHTALTKEY; @@ -560,6 +560,8 @@ static int event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private) win->lqual= change_bit(win->lqual, LR_CTRLKEY, val); } else if (bkey==LEFTALTKEY || bkey==RIGHTALTKEY) { win->lqual= change_bit(win->lqual, LR_ALTKEY, val); + } else if (bkey==COMMANDKEY) { + win->lqual= change_bit(win->lqual, LR_COMMANDKEY, val); } window_handle_ext(win, bkey, val, kd->ascii); @@ -596,6 +598,11 @@ static int event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private) win->lqual= change_bit(win->lqual, LR_ALTKEY, 0); window_handle(win, LEFTALTKEY, 0); } + if ((win->lqual & LR_COMMANDKEY) && !query_qual('C')) { + win->lqual= change_bit(win->lqual, LR_COMMANDKEY, 0); + window_handle(win, LR_COMMANDKEY, 0); + } + /* probably redundant now (ton) */ win->commandqual= query_qual('C'); /* diff --git a/source/blender/src/toets.c b/source/blender/src/toets.c index 14273892946..dde0fc834a1 100644 --- a/source/blender/src/toets.c +++ b/source/blender/src/toets.c @@ -968,8 +968,8 @@ int blenderqread(unsigned short event, short val) } break; case ZKEY: // undo - if(G.qual & LR_CTRLKEY) { // all combos with ctrl/cammandkey are accepted - if(G.qual==LR_CTRLKEY) BIF_undo(); + if(G.qual & (LR_CTRLKEY|LR_COMMANDKEY)) { // all combos with ctrl/cammandkey are accepted + if ELEM(G.qual, LR_CTRLKEY, LR_COMMANDKEY) BIF_undo(); else BIF_redo(); // all combos with ctrl is redo return 0; }