Skip to content

Commit

Permalink
Add a new SDL_KEYMAPCHANGED SDL event to abstract notification of key…
Browse files Browse the repository at this point in the history
…board layout or input language changes.
  • Loading branch information
slouken committed Oct 27, 2015
1 parent f8824cb commit 2b0140a
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 3 deletions.
3 changes: 3 additions & 0 deletions include/SDL_events.h
Expand Up @@ -94,6 +94,9 @@ typedef enum
SDL_KEYUP, /**< Key released */
SDL_TEXTEDITING, /**< Keyboard text editing (composition) */
SDL_TEXTINPUT, /**< Keyboard text input */
SDL_KEYMAPCHANGED, /**< Keymap changed due to a system event such as an
input language or keyboard layout change.
*/

/* Mouse events */
SDL_MOUSEMOTION = 0x400, /**< Mouse moved */
Expand Down
6 changes: 6 additions & 0 deletions src/events/SDL_events.c
Expand Up @@ -649,4 +649,10 @@ SDL_SendSysWMEvent(SDL_SysWMmsg * message)
return (posted);
}

int
SDL_SendKeymapChangedEvent(void)
{
return SDL_SendAppEvent(SDL_KEYMAPCHANGED);
}

/* vi: set ts=4 sw=4 expandtab: */
1 change: 1 addition & 0 deletions src/events/SDL_events_c.h
Expand Up @@ -38,6 +38,7 @@ extern void SDL_QuitInterrupt(void);

extern int SDL_SendAppEvent(SDL_EventType eventType);
extern int SDL_SendSysWMEvent(SDL_SysWMmsg * message);
extern int SDL_SendKeymapChangedEvent(void);

extern int SDL_QuitInit(void);
extern int SDL_SendQuit(void);
Expand Down
9 changes: 6 additions & 3 deletions src/video/cocoa/SDL_cocoakeyboard.m
Expand Up @@ -398,7 +398,7 @@ - (NSArray *) validAttributesForMarkedText
}

static void
UpdateKeymap(SDL_VideoData *data)
UpdateKeymap(SDL_VideoData *data, SDL_bool send_event)
{
TISInputSourceRef key_layout;
const void *chr_data;
Expand Down Expand Up @@ -454,6 +454,9 @@ - (NSArray *) validAttributesForMarkedText
}
}
SDL_SetKeymap(0, keymap, SDL_NUM_SCANCODES);
if (send_event) {
SDL_SendKeymapChangedEvent();
}
return;
}

Expand All @@ -466,7 +469,7 @@ - (NSArray *) validAttributesForMarkedText
{
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;

UpdateKeymap(data);
UpdateKeymap(data, SDL_FALSE);

/* Set our own names for the platform-dependent but layout-independent keys */
/* This key is NumLock on the MacBook keyboard. :) */
Expand Down Expand Up @@ -564,7 +567,7 @@ - (NSArray *) validAttributesForMarkedText
case NSKeyDown:
if (![event isARepeat]) {
/* See if we need to rebuild the keyboard layout */
UpdateKeymap(data);
UpdateKeymap(data, SDL_TRUE);
}

SDL_SendKeyboardKey(SDL_PRESSED, code);
Expand Down
1 change: 1 addition & 0 deletions src/video/windows/SDL_windowsevents.c
Expand Up @@ -626,6 +626,7 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
case WM_INPUTLANGCHANGE:
{
WIN_UpdateKeymap();
SDL_SendKeymapChangedEvent();
}
returnCode = 1;
break;
Expand Down
2 changes: 2 additions & 0 deletions src/video/x11/SDL_x11events.c
Expand Up @@ -625,6 +625,7 @@ X11_DispatchEvent(_THIS)
}

X11_UpdateKeymap(_this);
SDL_SendKeymapChangedEvent();
}
return;
}
Expand Down Expand Up @@ -1143,6 +1144,7 @@ X11_DispatchEvent(_THIS)
notice and reinit our keymap here. This might not be the
right approach, but it seems to work. */
X11_UpdateKeymap(_this);
SDL_SendKeymapChangedEvent();
}
}
break;
Expand Down

0 comments on commit 2b0140a

Please sign in to comment.