cocoa: Resync modifier keypressed on NSEventTypeFlagsChanged event.

Fixes #7507.
This commit is contained in:
Ryan C. Gordon
2023-11-29 21:38:41 -05:00
parent d1b831e232
commit 70b65d4170

View File

@@ -435,9 +435,19 @@ void Cocoa_HandleKeyEvent(SDL_VideoDevice *_this, NSEvent *event)
case NSEventTypeKeyUp: case NSEventTypeKeyUp:
SDL_SendKeyboardKey(Cocoa_GetEventTimestamp([event timestamp]), SDL_RELEASED, code); SDL_SendKeyboardKey(Cocoa_GetEventTimestamp([event timestamp]), SDL_RELEASED, code);
break; break;
case NSEventTypeFlagsChanged: case NSEventTypeFlagsChanged: {
HandleModifiers(_this, code, (unsigned int)[event modifierFlags]); // see if the new modifierFlags mean any existing keys should be pressed/released...
const unsigned int modflags = (unsigned int)[event modifierFlags];
HandleModifiers(_this, SDL_SCANCODE_LSHIFT, modflags);
HandleModifiers(_this, SDL_SCANCODE_LCTRL, modflags);
HandleModifiers(_this, SDL_SCANCODE_LALT, modflags);
HandleModifiers(_this, SDL_SCANCODE_LGUI, modflags);
HandleModifiers(_this, SDL_SCANCODE_RSHIFT, modflags);
HandleModifiers(_this, SDL_SCANCODE_RCTRL, modflags);
HandleModifiers(_this, SDL_SCANCODE_RALT, modflags);
HandleModifiers(_this, SDL_SCANCODE_RGUI, modflags);
break; break;
}
default: /* just to avoid compiler warnings */ default: /* just to avoid compiler warnings */
break; break;
} }