set key modifiers for keyup events, too; use SDL_GetModState to determine mod flags, so that the modifier flags get set if e.g. the shift key is pressed alone

svn-id: r16381
This commit is contained in:
Max Horn 2004-12-30 14:11:00 +00:00
parent 9581bd5691
commit 246f14bb40

View file

@ -145,6 +145,25 @@ void OSystem_SDL::handleKbdMouse() {
} }
} }
static byte SDLModToOSystemKeyFlags(SDLMod mod) {
byte b = 0;
#ifdef LINUPY
// Yopy has no ALT key, steal the SHIFT key
// (which isn't used much anyway)
if (mod & KMOD_SHIFT)
b |= OSystem::KBD_ALT;
#else
if (mod & KMOD_SHIFT)
b |= OSystem::KBD_SHIFT;
if (mod & KMOD_ALT)
b |= OSystem::KBD_ALT;
#endif
if (mod & KMOD_CTRL)
b |= OSystem::KBD_CTRL;
return b;
}
bool OSystem_SDL::pollEvent(Event &event) { bool OSystem_SDL::pollEvent(Event &event) {
SDL_Event ev; SDL_Event ev;
int axis; int axis;
@ -162,21 +181,7 @@ bool OSystem_SDL::pollEvent(Event &event) {
while(SDL_PollEvent(&ev)) { while(SDL_PollEvent(&ev)) {
switch(ev.type) { switch(ev.type) {
case SDL_KEYDOWN: case SDL_KEYDOWN:
#ifdef LINUPY b = SDLModToOSystemKeyFlags(SDL_GetModState());
// Yopy has no ALT key, steal the SHIFT key
// (which isn't used much anyway)
if (ev.key.keysym.mod & KMOD_SHIFT)
b |= KBD_ALT;
if (ev.key.keysym.mod & KMOD_CTRL)
b |= KBD_CTRL;
#else
if (ev.key.keysym.mod & KMOD_SHIFT)
b |= KBD_SHIFT;
if (ev.key.keysym.mod & KMOD_CTRL)
b |= KBD_CTRL;
if (ev.key.keysym.mod & KMOD_ALT)
b |= KBD_ALT;
#endif
event.kbd.flags = b; event.kbd.flags = b;
// Alt-Return and Alt-Enter toggle full screen mode // Alt-Return and Alt-Enter toggle full screen mode
@ -418,6 +423,7 @@ bool OSystem_SDL::pollEvent(Event &event) {
event.type = EVENT_KEYUP; event.type = EVENT_KEYUP;
event.kbd.keycode = ev.key.keysym.sym; event.kbd.keycode = ev.key.keysym.sym;
event.kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode); event.kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
event.kbd.flags = SDLModToOSystemKeyFlags(SDL_GetModState());;
/* /*
switch(ev.key.keysym.sym) { switch(ev.key.keysym.sym) {