Supply current group when translating X11 Keycodes to Keysyms.
parent
9e2b90e2a4
commit
fb37956d9b
|
@ -29,6 +29,7 @@
|
||||||
#include "../../events/scancodes_xfree86.h"
|
#include "../../events/scancodes_xfree86.h"
|
||||||
|
|
||||||
#include <X11/keysym.h>
|
#include <X11/keysym.h>
|
||||||
|
#include <X11/XKBlib.h>
|
||||||
|
|
||||||
#include "imKStoUCS.h"
|
#include "imKStoUCS.h"
|
||||||
|
|
||||||
|
@ -177,12 +178,12 @@ X11_KeyCodeToSDLScancode(Display *display, KeyCode keycode)
|
||||||
}
|
}
|
||||||
|
|
||||||
static Uint32
|
static Uint32
|
||||||
X11_KeyCodeToUcs4(Display *display, KeyCode keycode)
|
X11_KeyCodeToUcs4(Display *display, KeyCode keycode, unsigned char group)
|
||||||
{
|
{
|
||||||
KeySym keysym;
|
KeySym keysym;
|
||||||
|
|
||||||
#if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM
|
#if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM
|
||||||
keysym = X11_XkbKeycodeToKeysym(display, keycode, 0, 0);
|
keysym = X11_XkbKeycodeToKeysym(display, keycode, group, 0);
|
||||||
#else
|
#else
|
||||||
keysym = X11_XKeycodeToKeysym(display, keycode, 0);
|
keysym = X11_XKeycodeToKeysym(display, keycode, 0);
|
||||||
#endif
|
#endif
|
||||||
|
@ -300,8 +301,17 @@ X11_UpdateKeymap(_THIS)
|
||||||
int i;
|
int i;
|
||||||
SDL_Scancode scancode;
|
SDL_Scancode scancode;
|
||||||
SDL_Keycode keymap[SDL_NUM_SCANCODES];
|
SDL_Keycode keymap[SDL_NUM_SCANCODES];
|
||||||
|
unsigned char group = 0;
|
||||||
|
|
||||||
SDL_GetDefaultKeymap(keymap);
|
SDL_GetDefaultKeymap(keymap);
|
||||||
|
|
||||||
|
#if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM
|
||||||
|
XkbStateRec state;
|
||||||
|
if(0 == X11_XkbGetState(data->display, XkbUseCoreKbd, &state))
|
||||||
|
group = state.group;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
for (i = 0; i < SDL_arraysize(data->key_layout); i++) {
|
for (i = 0; i < SDL_arraysize(data->key_layout); i++) {
|
||||||
Uint32 key;
|
Uint32 key;
|
||||||
|
|
||||||
|
@ -312,7 +322,7 @@ X11_UpdateKeymap(_THIS)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See if there is a UCS keycode for this scancode */
|
/* See if there is a UCS keycode for this scancode */
|
||||||
key = X11_KeyCodeToUcs4(data->display, (KeyCode)i);
|
key = X11_KeyCodeToUcs4(data->display, (KeyCode)i, group);
|
||||||
if (key) {
|
if (key) {
|
||||||
keymap[scancode] = key;
|
keymap[scancode] = key;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -165,6 +165,7 @@ SDL_X11_SYM(KeySym,XkbKeycodeToKeysym,(Display* a,unsigned int b,int c,int d),(a
|
||||||
#else
|
#else
|
||||||
SDL_X11_SYM(KeySym,XkbKeycodeToKeysym,(Display* a,KeyCode b,int c,int d),(a,b,c,d),return)
|
SDL_X11_SYM(KeySym,XkbKeycodeToKeysym,(Display* a,KeyCode b,int c,int d),(a,b,c,d),return)
|
||||||
#endif
|
#endif
|
||||||
|
SDL_X11_SYM(Status,XkbGetState,(Display* a,unsigned int b,XkbStatePtr c),(a,b,c),return)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if NeedWidePrototypes
|
#if NeedWidePrototypes
|
||||||
|
|
Loading…
Reference in New Issue