Skip to content

Commit

Permalink
cocoa: Set keyboard mod state correctly when turning off capslock.
Browse files Browse the repository at this point in the history
Fixes Bugzilla #4716.
  • Loading branch information
icculus committed Jul 11, 2019
1 parent 86965ee commit 27ad8e5
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion src/video/cocoa/SDL_cocoawindow.m
Expand Up @@ -866,7 +866,17 @@ - (void)flagsChanged:(NSEvent *)theEvent
10.15 beta, capslock comes through here as keycode 255, but it's safe
to send duplicate key events; SDL filters them out quickly in
SDL_SendKeyboardKey(). */
SDL_SendKeyboardKey(([theEvent modifierFlags] & NSEventModifierFlagCapsLock) ? SDL_PRESSED : SDL_RELEASED, SDL_SCANCODE_CAPSLOCK);

/* Also note that SDL_SendKeyboardKey expects all capslock events to be
keypresses; it won't toggle the mod state if you send a keyrelease. */
const SDL_bool osenabled = ([theEvent modifierFlags] & NSEventModifierFlagCapsLock) ? SDL_TRUE : SDL_FALSE;
const SDL_bool sdlenabled = (SDL_GetModState() & KMOD_CAPS) ? SDL_TRUE : SDL_FALSE;
if (!osenabled && sdlenabled) {
SDL_ToggleModState(KMOD_CAPS, SDL_FALSE);
SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_CAPSLOCK);
} else if (osenabled && !sdlenabled) {
SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_CAPSLOCK);
}
}
- (void)keyDown:(NSEvent *)theEvent
{
Expand Down

0 comments on commit 27ad8e5

Please sign in to comment.