1
0
Fork 0

Allow the windows and menu keys to be mappable on Linux and Windows.

Fixes bug 406 on sf.net and topic 380510 on vogons.

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3870
This commit is contained in:
Peter Veenstra 2014-10-14 14:34:48 +00:00
parent 730c2d3cd9
commit 2077da8e29

View file

@ -361,7 +361,7 @@ typedef char assert_right_size [MAX_SCANCODES == (sizeof(sdlkey_map)/sizeof(sdlk
#else // !MACOSX
#define MAX_SCANCODES 212
#define MAX_SCANCODES 0xdf
static SDLKey sdlkey_map[MAX_SCANCODES]={SDLK_UNKNOWN,SDLK_ESCAPE,
SDLK_1,SDLK_2,SDLK_3,SDLK_4,SDLK_5,SDLK_6,SDLK_7,SDLK_8,SDLK_9,SDLK_0,
/* 0x0c: */
@ -380,13 +380,28 @@ static SDLKey sdlkey_map[MAX_SCANCODES]={SDLK_UNKNOWN,SDLK_ESCAPE,
SDLK_KP7,SDLK_KP8,SDLK_KP9,SDLK_KP_MINUS,SDLK_KP4,SDLK_KP5,SDLK_KP6,SDLK_KP_PLUS,
SDLK_KP1,SDLK_KP2,SDLK_KP3,SDLK_KP0,SDLK_KP_PERIOD,
SDLK_UNKNOWN,SDLK_UNKNOWN,
SDLK_LESS,SDLK_F11,SDLK_F12,
Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,
Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,
Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,
/* 0xb7: */
Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z
/* 0xd4: ... */
SDLK_LESS,SDLK_F11,SDLK_F12, Z, Z, Z, Z, Z, Z, Z,
/* 0x60: */
Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z,
/* 0x70: */
Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z,
/* 0x80: */
Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z,
/* 0x90: */
Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z,
/* 0xA0: */
Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z,
/* 0xB0: */
Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z,
/* 0xC0: */
Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z,
/* 0xD0: */
Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z, Z,Z//,Z,Z,
/* 0xE0: */
//Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z,
/* 0xF0: */
// Z,Z,Z,Z, Z,Z,Z,Z, Z,Z,Z,Z, Z,Z//,Z,Z
};
#endif
@ -394,6 +409,7 @@ static SDLKey sdlkey_map[MAX_SCANCODES]={SDLK_UNKNOWN,SDLK_ESCAPE,
SDLKey MapSDLCode(Bitu skey) {
// LOG_MSG("MapSDLCode %d %X",skey,skey);
if (usescancodes) {
if (skey<MAX_SCANCODES) return sdlkey_map[skey];
else return SDLK_UNKNOWN;
@ -401,6 +417,7 @@ SDLKey MapSDLCode(Bitu skey) {
}
Bitu GetKeyCode(SDL_keysym keysym) {
// LOG_MSG("GetKeyCode %X %X %X",keysym.scancode,keysym.sym,keysym.mod);
if (usescancodes) {
Bitu key=(Bitu)keysym.scancode;
if (key==0
@ -2471,6 +2488,11 @@ void MAPPER_StartUp(Section * sec) {
sdlkey_map[0x77]=SDLK_PAUSE;
sdlkey_map[0x63]=SDLK_PRINT;
sdlkey_map[0x64]=SDLK_RALT;
//Win-keys
sdlkey_map[0x7d]=SDLK_LSUPER;
sdlkey_map[0x7e]=SDLK_RSUPER;
sdlkey_map[0x7f]=SDLK_MENU;
} else {
sdlkey_map[0x5a]=SDLK_UP;
sdlkey_map[0x60]=SDLK_DOWN;
@ -2506,6 +2528,12 @@ void MAPPER_StartUp(Section * sec) {
sdlkey_map[0xc5]=SDLK_PAUSE;
sdlkey_map[0xb7]=SDLK_PRINT;
sdlkey_map[0xb8]=SDLK_RALT;
//Win-keys
sdlkey_map[0xdb]=SDLK_LMETA;
sdlkey_map[0xdc]=SDLK_RMETA;
sdlkey_map[0xdd]=SDLK_MENU;
#endif
Bitu i;