mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-05-31 17:07:39 +00:00
Add the raw platform specific key code to SDL_Keysym
This allows applications to handle keys that SDL doesn't recognize, in a platform dependent way. Fixes https://github.com/libsdl-org/SDL/issues/6390
This commit is contained in:
parent
9d816c72ef
commit
ef9bd8b609
24 changed files with 163 additions and 139 deletions
|
@ -68,7 +68,7 @@ typedef struct SDL_Keysym
|
||||||
SDL_Scancode scancode; /**< SDL physical key code - see SDL_Scancode for details */
|
SDL_Scancode scancode; /**< SDL physical key code - see SDL_Scancode for details */
|
||||||
SDL_Keycode sym; /**< SDL virtual key code - see SDL_Keycode for details */
|
SDL_Keycode sym; /**< SDL virtual key code - see SDL_Keycode for details */
|
||||||
SDL_Keymod mod; /**< current key modifiers */
|
SDL_Keymod mod; /**< current key modifiers */
|
||||||
Uint16 unused;
|
Uint16 raw; /**< The platform dependent scancode for this event */
|
||||||
} SDL_Keysym;
|
} SDL_Keysym;
|
||||||
|
|
||||||
/* Function prototypes */
|
/* Function prototypes */
|
||||||
|
|
|
@ -304,7 +304,7 @@ class SDL_BLooper : public BLooper
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
HAIKU_SetKeyState(scancode, state);
|
HAIKU_SetKeyState(scancode, state);
|
||||||
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, state, HAIKU_GetScancodeFromBeKey(scancode));
|
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, scancode, HAIKU_GetScancodeFromBeKey(scancode), state);
|
||||||
|
|
||||||
if (state == SDL_PRESSED && SDL_TextInputActive()) {
|
if (state == SDL_PRESSED && SDL_TextInputActive()) {
|
||||||
const int8 *keyUtf8;
|
const int8 *keyUtf8;
|
||||||
|
|
|
@ -373,12 +373,10 @@ void SDL_EVDEV_Poll(void)
|
||||||
|
|
||||||
/* Probably keyboard */
|
/* Probably keyboard */
|
||||||
scan_code = SDL_EVDEV_translate_keycode(event->code);
|
scan_code = SDL_EVDEV_translate_keycode(event->code);
|
||||||
if (scan_code != SDL_SCANCODE_UNKNOWN) {
|
if (event->value == 0) {
|
||||||
if (event->value == 0) {
|
SDL_SendKeyboardKey(SDL_EVDEV_GetEventTimestamp(event), (SDL_KeyboardID)item->fd, event->code, scan_code, SDL_RELEASED);
|
||||||
SDL_SendKeyboardKey(SDL_EVDEV_GetEventTimestamp(event), (SDL_KeyboardID)item->fd, SDL_RELEASED, scan_code);
|
} else if (event->value == 1 || event->value == 2 /* key repeated */) {
|
||||||
} else if (event->value == 1 || event->value == 2 /* key repeated */) {
|
SDL_SendKeyboardKey(SDL_EVDEV_GetEventTimestamp(event), (SDL_KeyboardID)item->fd, event->code, scan_code, SDL_PRESSED);
|
||||||
SDL_SendKeyboardKey(SDL_EVDEV_GetEventTimestamp(event), (SDL_KeyboardID)item->fd, SDL_PRESSED, scan_code);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
SDL_EVDEV_kbd_keycode(_this->kbd, event->code, event->value);
|
SDL_EVDEV_kbd_keycode(_this->kbd, event->code, event->value);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -560,22 +560,22 @@ static void Translate_to_keycode(SDL_WSCONS_input_data *input, int type, keysym_
|
||||||
switch (keyDesc.command) {
|
switch (keyDesc.command) {
|
||||||
case KS_Cmd_ScrollBack:
|
case KS_Cmd_ScrollBack:
|
||||||
{
|
{
|
||||||
SDL_SendKeyboardKey(0, input->keyboardID, type == WSCONS_EVENT_KEY_DOWN ? SDL_PRESSED : SDL_RELEASED, SDL_SCANCODE_PAGEUP);
|
SDL_SendKeyboardKey(0, input->keyboardID, 0, SDL_SCANCODE_PAGEUP, type == WSCONS_EVENT_KEY_DOWN ? SDL_PRESSED : SDL_RELEASED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case KS_Cmd_ScrollFwd:
|
case KS_Cmd_ScrollFwd:
|
||||||
{
|
{
|
||||||
SDL_SendKeyboardKey(0, input->keyboardID, type == WSCONS_EVENT_KEY_DOWN ? SDL_PRESSED : SDL_RELEASED, SDL_SCANCODE_PAGEDOWN);
|
SDL_SendKeyboardKey(0, input->keyboardID, 0, SDL_SCANCODE_PAGEDOWN, type == WSCONS_EVENT_KEY_DOWN ? SDL_PRESSED : SDL_RELEASED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (i = 0; i < sizeof(conversion_table) / sizeof(struct wscons_keycode_to_SDL); i++) {
|
for (i = 0; i < sizeof(conversion_table) / sizeof(struct wscons_keycode_to_SDL); i++) {
|
||||||
if (conversion_table[i].sourcekey == group[0]) {
|
if (conversion_table[i].sourcekey == group[0]) {
|
||||||
SDL_SendKeyboardKey(0, input->keyboardID, type == WSCONS_EVENT_KEY_DOWN ? SDL_PRESSED : SDL_RELEASED, conversion_table[i].targetKey);
|
SDL_SendKeyboardKey(0, input->keyboardID, group[0], conversion_table[i].targetKey, type == WSCONS_EVENT_KEY_DOWN ? SDL_PRESSED : SDL_RELEASED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SDL_SendKeyboardKey(0, input->keyboardID, type == WSCONS_EVENT_KEY_DOWN ? SDL_PRESSED : SDL_RELEASED, SDL_SCANCODE_UNKNOWN);
|
SDL_SendKeyboardKey(0, input->keyboardID, group[0], SDL_SCANCODE_UNKNOWN, type == WSCONS_EVENT_KEY_DOWN ? SDL_PRESSED : SDL_RELEASED);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void updateKeyboard(SDL_WSCONS_input_data *input)
|
static void updateKeyboard(SDL_WSCONS_input_data *input)
|
||||||
|
@ -809,13 +809,13 @@ static void updateKeyboard(SDL_WSCONS_input_data *input)
|
||||||
} break;
|
} break;
|
||||||
case WSCONS_EVENT_ALL_KEYS_UP:
|
case WSCONS_EVENT_ALL_KEYS_UP:
|
||||||
for (i = 0; i < SDL_NUM_SCANCODES; i++) {
|
for (i = 0; i < SDL_NUM_SCANCODES; i++) {
|
||||||
SDL_SendKeyboardKey(0, input->keyboardID, SDL_RELEASED, i);
|
SDL_SendKeyboardKey(0, input->keyboardID, 0, (SDL_Scancode)i, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (input->type == WSKBD_TYPE_USB && events[i].value <= 0xE7)
|
if (input->type == WSKBD_TYPE_USB && events[i].value <= 0xE7)
|
||||||
SDL_SendKeyboardKey(0, input->keyboardID, type == WSCONS_EVENT_KEY_DOWN ? SDL_PRESSED : SDL_RELEASED, (SDL_Scancode)events[i].value);
|
SDL_SendKeyboardKey(0, input->keyboardID, 0, (SDL_Scancode)events[i].value, type == WSCONS_EVENT_KEY_DOWN ? SDL_PRESSED : SDL_RELEASED);
|
||||||
else
|
else
|
||||||
Translate_to_keycode(input, type, events[i].value);
|
Translate_to_keycode(input, type, events[i].value);
|
||||||
|
|
||||||
|
|
|
@ -724,8 +724,8 @@ void SDL_WinRTApp::OnCharacterReceived(Windows::UI::Core::CoreWindow ^ sender, W
|
||||||
template <typename BackButtonEventArgs>
|
template <typename BackButtonEventArgs>
|
||||||
static void WINRT_OnBackButtonPressed(BackButtonEventArgs ^ args)
|
static void WINRT_OnBackButtonPressed(BackButtonEventArgs ^ args)
|
||||||
{
|
{
|
||||||
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, SDL_PRESSED, SDL_SCANCODE_AC_BACK);
|
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, 0, SDL_SCANCODE_AC_BACK, SDL_PRESSED);
|
||||||
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, SDL_RELEASED, SDL_SCANCODE_AC_BACK);
|
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, 0, SDL_SCANCODE_AC_BACK, SDL_RELEASED);
|
||||||
|
|
||||||
if (SDL_GetHintBoolean(SDL_HINT_WINRT_HANDLE_BACK_BUTTON, SDL_FALSE)) {
|
if (SDL_GetHintBoolean(SDL_HINT_WINRT_HANDLE_BACK_BUTTON, SDL_FALSE)) {
|
||||||
args->Handled = true;
|
args->Handled = true;
|
||||||
|
|
|
@ -806,7 +806,7 @@ void SDL_ResetKeyboard(void)
|
||||||
#endif
|
#endif
|
||||||
for (scancode = (SDL_Scancode)0; scancode < SDL_NUM_SCANCODES; ++scancode) {
|
for (scancode = (SDL_Scancode)0; scancode < SDL_NUM_SCANCODES; ++scancode) {
|
||||||
if (keyboard->keystate[scancode] == SDL_PRESSED) {
|
if (keyboard->keystate[scancode] == SDL_PRESSED) {
|
||||||
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, SDL_RELEASED, scancode);
|
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, 0, scancode, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -944,7 +944,7 @@ int SDL_SetKeyboardFocus(SDL_Window *window)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int SDL_SendKeyboardKeyInternal(Uint64 timestamp, Uint32 flags, SDL_KeyboardID keyboardID, Uint8 state, SDL_Scancode scancode, SDL_Keycode keycode)
|
static int SDL_SendKeyboardKeyInternal(Uint64 timestamp, Uint32 flags, SDL_KeyboardID keyboardID, int rawcode, SDL_Scancode scancode, SDL_Keycode keycode, Uint8 state)
|
||||||
{
|
{
|
||||||
SDL_Keyboard *keyboard = &SDL_keyboard;
|
SDL_Keyboard *keyboard = &SDL_keyboard;
|
||||||
int posted;
|
int posted;
|
||||||
|
@ -953,10 +953,6 @@ static int SDL_SendKeyboardKeyInternal(Uint64 timestamp, Uint32 flags, SDL_Keybo
|
||||||
Uint8 repeat = SDL_FALSE;
|
Uint8 repeat = SDL_FALSE;
|
||||||
const Uint8 source = flags & KEYBOARD_SOURCE_MASK;
|
const Uint8 source = flags & KEYBOARD_SOURCE_MASK;
|
||||||
|
|
||||||
if (scancode == SDL_SCANCODE_UNKNOWN || scancode >= SDL_NUM_SCANCODES) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG_KEYBOARD
|
#ifdef DEBUG_KEYBOARD
|
||||||
printf("The '%s' key has been %s\n", SDL_GetScancodeName(scancode),
|
printf("The '%s' key has been %s\n", SDL_GetScancodeName(scancode),
|
||||||
state == SDL_PRESSED ? "pressed" : "released");
|
state == SDL_PRESSED ? "pressed" : "released");
|
||||||
|
@ -975,28 +971,34 @@ static int SDL_SendKeyboardKeyInternal(Uint64 timestamp, Uint32 flags, SDL_Keybo
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Drop events that don't change state */
|
if (scancode != SDL_SCANCODE_UNKNOWN && scancode < SDL_NUM_SCANCODES) {
|
||||||
if (state) {
|
/* Drop events that don't change state */
|
||||||
if (keyboard->keystate[scancode]) {
|
if (state) {
|
||||||
if (!(keyboard->keysource[scancode] & source)) {
|
if (keyboard->keystate[scancode]) {
|
||||||
keyboard->keysource[scancode] |= source;
|
if (!(keyboard->keysource[scancode] & source)) {
|
||||||
|
keyboard->keysource[scancode] |= source;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
repeat = SDL_TRUE;
|
||||||
|
}
|
||||||
|
keyboard->keysource[scancode] |= source;
|
||||||
|
} else {
|
||||||
|
if (!keyboard->keystate[scancode]) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
repeat = SDL_TRUE;
|
keyboard->keysource[scancode] = 0;
|
||||||
}
|
}
|
||||||
keyboard->keysource[scancode] |= source;
|
|
||||||
} else {
|
/* Update internal keyboard state */
|
||||||
if (!keyboard->keystate[scancode]) {
|
keyboard->keystate[scancode] = state;
|
||||||
return 0;
|
|
||||||
|
if (keycode == SDLK_UNKNOWN) {
|
||||||
|
keycode = keyboard->keymap[scancode];
|
||||||
}
|
}
|
||||||
keyboard->keysource[scancode] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Update internal keyboard state */
|
} else if (keycode == SDLK_UNKNOWN && rawcode == 0) {
|
||||||
keyboard->keystate[scancode] = state;
|
/* Nothing to do! */
|
||||||
|
return 0;
|
||||||
if (keycode == SDLK_UNKNOWN) {
|
|
||||||
keycode = keyboard->keymap[scancode];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source == KEYBOARD_HARDWARE) {
|
if (source == KEYBOARD_HARDWARE) {
|
||||||
|
@ -1070,6 +1072,7 @@ static int SDL_SendKeyboardKeyInternal(Uint64 timestamp, Uint32 flags, SDL_Keybo
|
||||||
event.key.keysym.scancode = scancode;
|
event.key.keysym.scancode = scancode;
|
||||||
event.key.keysym.sym = keycode;
|
event.key.keysym.sym = keycode;
|
||||||
event.key.keysym.mod = keyboard->modstate;
|
event.key.keysym.mod = keyboard->modstate;
|
||||||
|
event.key.keysym.raw = (Uint16)rawcode;
|
||||||
event.key.windowID = keyboard->focus ? keyboard->focus->id : 0;
|
event.key.windowID = keyboard->focus ? keyboard->focus->id : 0;
|
||||||
event.key.which = keyboardID;
|
event.key.which = keyboardID;
|
||||||
posted = (SDL_PushEvent(&event) > 0);
|
posted = (SDL_PushEvent(&event) > 0);
|
||||||
|
@ -1105,43 +1108,43 @@ int SDL_SendKeyboardUnicodeKey(Uint64 timestamp, Uint32 ch)
|
||||||
|
|
||||||
if (mod & SDL_KMOD_SHIFT) {
|
if (mod & SDL_KMOD_SHIFT) {
|
||||||
/* If the character uses shift, press shift down */
|
/* If the character uses shift, press shift down */
|
||||||
SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_VIRTUAL, SDL_GLOBAL_KEYBOARD_ID, SDL_PRESSED, SDL_SCANCODE_LSHIFT, SDLK_UNKNOWN);
|
SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_VIRTUAL, SDL_GLOBAL_KEYBOARD_ID, 0, SDL_SCANCODE_LSHIFT, SDLK_UNKNOWN, SDL_PRESSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Send a keydown and keyup for the character */
|
/* Send a keydown and keyup for the character */
|
||||||
SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_VIRTUAL, SDL_GLOBAL_KEYBOARD_ID, SDL_PRESSED, code, SDLK_UNKNOWN);
|
SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_VIRTUAL, SDL_GLOBAL_KEYBOARD_ID, 0, code, SDLK_UNKNOWN, SDL_PRESSED);
|
||||||
SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_VIRTUAL, SDL_GLOBAL_KEYBOARD_ID, SDL_RELEASED, code, SDLK_UNKNOWN);
|
SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_VIRTUAL, SDL_GLOBAL_KEYBOARD_ID, 0, code, SDLK_UNKNOWN, SDL_RELEASED);
|
||||||
|
|
||||||
if (mod & SDL_KMOD_SHIFT) {
|
if (mod & SDL_KMOD_SHIFT) {
|
||||||
/* If the character uses shift, release shift */
|
/* If the character uses shift, release shift */
|
||||||
SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_VIRTUAL, SDL_GLOBAL_KEYBOARD_ID, SDL_RELEASED, SDL_SCANCODE_LSHIFT, SDLK_UNKNOWN);
|
SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_VIRTUAL, SDL_GLOBAL_KEYBOARD_ID, 0, SDL_SCANCODE_LSHIFT, SDLK_UNKNOWN, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SDL_SendVirtualKeyboardKey(Uint64 timestamp, Uint8 state, SDL_Scancode scancode)
|
int SDL_SendVirtualKeyboardKey(Uint64 timestamp, Uint8 state, SDL_Scancode scancode)
|
||||||
{
|
{
|
||||||
return SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_VIRTUAL, SDL_GLOBAL_KEYBOARD_ID, state, scancode, SDLK_UNKNOWN);
|
return SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_VIRTUAL, SDL_GLOBAL_KEYBOARD_ID, 0, scancode, SDLK_UNKNOWN, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SDL_SendKeyboardKey(Uint64 timestamp, SDL_KeyboardID keyboardID, Uint8 state, SDL_Scancode scancode)
|
int SDL_SendKeyboardKey(Uint64 timestamp, SDL_KeyboardID keyboardID, int rawcode, SDL_Scancode scancode, Uint8 state)
|
||||||
{
|
{
|
||||||
return SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_HARDWARE, keyboardID, state, scancode, SDLK_UNKNOWN);
|
return SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_HARDWARE, keyboardID, rawcode, scancode, SDLK_UNKNOWN, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SDL_SendKeyboardKeyAndKeycode(Uint64 timestamp, SDL_KeyboardID keyboardID, Uint8 state, SDL_Scancode scancode, SDL_Keycode keycode)
|
int SDL_SendKeyboardKeyAndKeycode(Uint64 timestamp, SDL_KeyboardID keyboardID, int rawcode, SDL_Scancode scancode, SDL_Keycode keycode, Uint8 state)
|
||||||
{
|
{
|
||||||
return SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_HARDWARE, keyboardID, state, scancode, keycode);
|
return SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_HARDWARE, keyboardID, rawcode, scancode, keycode, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SDL_SendKeyboardKeyAutoRelease(Uint64 timestamp, SDL_Scancode scancode)
|
int SDL_SendKeyboardKeyAutoRelease(Uint64 timestamp, SDL_Scancode scancode)
|
||||||
{
|
{
|
||||||
return SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_AUTORELEASE, SDL_GLOBAL_KEYBOARD_ID, SDL_PRESSED, scancode, SDLK_UNKNOWN);
|
return SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_AUTORELEASE, SDL_GLOBAL_KEYBOARD_ID, 0, scancode, SDLK_UNKNOWN, SDL_PRESSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SDL_SendKeyboardKeyIgnoreModifiers(Uint64 timestamp, SDL_KeyboardID keyboardID, Uint8 state, SDL_Scancode scancode)
|
int SDL_SendKeyboardKeyIgnoreModifiers(Uint64 timestamp, SDL_KeyboardID keyboardID, int rawcode, SDL_Scancode scancode, Uint8 state)
|
||||||
{
|
{
|
||||||
return SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_HARDWARE | KEYBOARD_IGNOREMODIFIERS, keyboardID, state, scancode, SDLK_UNKNOWN);
|
return SDL_SendKeyboardKeyInternal(timestamp, KEYBOARD_HARDWARE | KEYBOARD_IGNOREMODIFIERS, keyboardID, rawcode, scancode, SDLK_UNKNOWN, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDL_ReleaseAutoReleaseKeys(void)
|
void SDL_ReleaseAutoReleaseKeys(void)
|
||||||
|
@ -1152,7 +1155,7 @@ void SDL_ReleaseAutoReleaseKeys(void)
|
||||||
if (keyboard->autorelease_pending) {
|
if (keyboard->autorelease_pending) {
|
||||||
for (scancode = SDL_SCANCODE_UNKNOWN; scancode < SDL_NUM_SCANCODES; ++scancode) {
|
for (scancode = SDL_SCANCODE_UNKNOWN; scancode < SDL_NUM_SCANCODES; ++scancode) {
|
||||||
if (keyboard->keysource[scancode] == KEYBOARD_AUTORELEASE) {
|
if (keyboard->keysource[scancode] == KEYBOARD_AUTORELEASE) {
|
||||||
SDL_SendKeyboardKeyInternal(0, KEYBOARD_AUTORELEASE, SDL_GLOBAL_KEYBOARD_ID, SDL_RELEASED, scancode, SDLK_UNKNOWN);
|
SDL_SendKeyboardKeyInternal(0, KEYBOARD_AUTORELEASE, SDL_GLOBAL_KEYBOARD_ID, 0, scancode, SDLK_UNKNOWN, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
keyboard->autorelease_pending = SDL_FALSE;
|
keyboard->autorelease_pending = SDL_FALSE;
|
||||||
|
|
|
@ -68,13 +68,13 @@ extern int SDL_SendKeyboardUnicodeKey(Uint64 timestamp, Uint32 ch);
|
||||||
extern int SDL_SendVirtualKeyboardKey(Uint64 timestamp, Uint8 state, SDL_Scancode scancode);
|
extern int SDL_SendVirtualKeyboardKey(Uint64 timestamp, Uint8 state, SDL_Scancode scancode);
|
||||||
|
|
||||||
/* Send a keyboard key event */
|
/* Send a keyboard key event */
|
||||||
extern int SDL_SendKeyboardKey(Uint64 timestamp, SDL_KeyboardID keyboardID, Uint8 state, SDL_Scancode scancode);
|
extern int SDL_SendKeyboardKey(Uint64 timestamp, SDL_KeyboardID keyboardID, int rawcode, SDL_Scancode scancode, Uint8 state);
|
||||||
extern int SDL_SendKeyboardKeyAutoRelease(Uint64 timestamp, SDL_Scancode scancode);
|
extern int SDL_SendKeyboardKeyAutoRelease(Uint64 timestamp, SDL_Scancode scancode);
|
||||||
extern int SDL_SendKeyboardKeyIgnoreModifiers(Uint64 timestamp, SDL_KeyboardID keyboardID, Uint8 state, SDL_Scancode scancode);
|
extern int SDL_SendKeyboardKeyIgnoreModifiers(Uint64 timestamp, SDL_KeyboardID keyboardID, int rawcode, SDL_Scancode scancode, Uint8 state);
|
||||||
|
|
||||||
/* This is for platforms that don't know the keymap but can report scancode and keycode directly.
|
/* This is for platforms that don't know the keymap but can report scancode and keycode directly.
|
||||||
Most platforms should prefer to optionally call SDL_SetKeymap and then use SDL_SendKeyboardKey. */
|
Most platforms should prefer to optionally call SDL_SetKeymap and then use SDL_SendKeyboardKey. */
|
||||||
extern int SDL_SendKeyboardKeyAndKeycode(Uint64 timestamp, SDL_KeyboardID keyboardID, Uint8 state, SDL_Scancode scancode, SDL_Keycode keycode);
|
extern int SDL_SendKeyboardKeyAndKeycode(Uint64 timestamp, SDL_KeyboardID keyboardID, int rawcode, SDL_Scancode scancode, SDL_Keycode keycode, Uint8 state);
|
||||||
|
|
||||||
/* Release all the autorelease keys */
|
/* Release all the autorelease keys */
|
||||||
extern void SDL_ReleaseAutoReleaseKeys(void);
|
extern void SDL_ReleaseAutoReleaseKeys(void);
|
||||||
|
|
|
@ -205,7 +205,7 @@ int Android_OnPadDown(int device_id, int keycode)
|
||||||
if (item && item->joystick) {
|
if (item && item->joystick) {
|
||||||
SDL_SendJoystickButton(timestamp, item->joystick, button, SDL_PRESSED);
|
SDL_SendJoystickButton(timestamp, item->joystick, button, SDL_PRESSED);
|
||||||
} else {
|
} else {
|
||||||
SDL_SendKeyboardKey(timestamp, SDL_GLOBAL_KEYBOARD_ID, SDL_PRESSED, button_to_scancode(button));
|
SDL_SendKeyboardKey(timestamp, SDL_GLOBAL_KEYBOARD_ID, keycode, button_to_scancode(button), SDL_PRESSED);
|
||||||
}
|
}
|
||||||
SDL_UnlockJoysticks();
|
SDL_UnlockJoysticks();
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -225,7 +225,7 @@ int Android_OnPadUp(int device_id, int keycode)
|
||||||
if (item && item->joystick) {
|
if (item && item->joystick) {
|
||||||
SDL_SendJoystickButton(timestamp, item->joystick, button, SDL_RELEASED);
|
SDL_SendJoystickButton(timestamp, item->joystick, button, SDL_RELEASED);
|
||||||
} else {
|
} else {
|
||||||
SDL_SendKeyboardKey(timestamp, SDL_GLOBAL_KEYBOARD_ID, SDL_RELEASED, button_to_scancode(button));
|
SDL_SendKeyboardKey(timestamp, SDL_GLOBAL_KEYBOARD_ID, keycode, button_to_scancode(button), SDL_RELEASED);
|
||||||
}
|
}
|
||||||
SDL_UnlockJoysticks();
|
SDL_UnlockJoysticks();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -330,12 +330,12 @@ static SDL_Scancode TranslateKeycode(int keycode)
|
||||||
|
|
||||||
int Android_OnKeyDown(int keycode)
|
int Android_OnKeyDown(int keycode)
|
||||||
{
|
{
|
||||||
return SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, SDL_PRESSED, TranslateKeycode(keycode));
|
return SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, keycode, TranslateKeycode(keycode), SDL_PRESSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Android_OnKeyUp(int keycode)
|
int Android_OnKeyUp(int keycode)
|
||||||
{
|
{
|
||||||
return SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, SDL_RELEASED, TranslateKeycode(keycode));
|
return SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, keycode, TranslateKeycode(keycode), SDL_RELEASED);
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_bool Android_HasScreenKeyboardSupport(SDL_VideoDevice *_this)
|
SDL_bool Android_HasScreenKeyboardSupport(SDL_VideoDevice *_this)
|
||||||
|
|
|
@ -231,9 +231,9 @@ static void HandleModifiers(SDL_VideoDevice *_this, SDL_Scancode code, unsigned
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pressed) {
|
if (pressed) {
|
||||||
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, SDL_PRESSED, code);
|
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, 0, code, SDL_PRESSED);
|
||||||
} else {
|
} else {
|
||||||
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, SDL_RELEASED, code);
|
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, 0, code, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -414,7 +414,7 @@ void Cocoa_HandleKeyEvent(SDL_VideoDevice *_this, NSEvent *event)
|
||||||
UpdateKeymap(data, SDL_TRUE);
|
UpdateKeymap(data, SDL_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_SendKeyboardKey(Cocoa_GetEventTimestamp([event timestamp]), SDL_DEFAULT_KEYBOARD_ID, SDL_PRESSED, code);
|
SDL_SendKeyboardKey(Cocoa_GetEventTimestamp([event timestamp]), SDL_DEFAULT_KEYBOARD_ID, scancode, code, SDL_PRESSED);
|
||||||
#ifdef DEBUG_SCANCODES
|
#ifdef DEBUG_SCANCODES
|
||||||
if (code == SDL_SCANCODE_UNKNOWN) {
|
if (code == SDL_SCANCODE_UNKNOWN) {
|
||||||
SDL_Log("The key you just pressed is not recognized by SDL. To help get this fixed, report this to the SDL forums/mailing list <https://discourse.libsdl.org/> or to Christian Walther <cwalther@gmx.ch>. Mac virtual key code is %d.\n", scancode);
|
SDL_Log("The key you just pressed is not recognized by SDL. To help get this fixed, report this to the SDL forums/mailing list <https://discourse.libsdl.org/> or to Christian Walther <cwalther@gmx.ch>. Mac virtual key code is %d.\n", scancode);
|
||||||
|
@ -433,7 +433,7 @@ void Cocoa_HandleKeyEvent(SDL_VideoDevice *_this, NSEvent *event)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NSEventTypeKeyUp:
|
case NSEventTypeKeyUp:
|
||||||
SDL_SendKeyboardKey(Cocoa_GetEventTimestamp([event timestamp]), SDL_DEFAULT_KEYBOARD_ID, SDL_RELEASED, code);
|
SDL_SendKeyboardKey(Cocoa_GetEventTimestamp([event timestamp]), SDL_DEFAULT_KEYBOARD_ID, scancode, code, SDL_RELEASED);
|
||||||
break;
|
break;
|
||||||
case NSEventTypeFlagsChanged: {
|
case NSEventTypeFlagsChanged: {
|
||||||
// see if the new modifierFlags mean any existing keys should be pressed/released...
|
// see if the new modifierFlags mean any existing keys should be pressed/released...
|
||||||
|
|
|
@ -1408,8 +1408,8 @@ static NSCursor *Cocoa_GetDesiredCursor(void)
|
||||||
const SDL_bool osenabled = ([theEvent modifierFlags] & NSEventModifierFlagCapsLock) ? SDL_TRUE : SDL_FALSE;
|
const SDL_bool osenabled = ([theEvent modifierFlags] & NSEventModifierFlagCapsLock) ? SDL_TRUE : SDL_FALSE;
|
||||||
const SDL_bool sdlenabled = (SDL_GetModState() & SDL_KMOD_CAPS) ? SDL_TRUE : SDL_FALSE;
|
const SDL_bool sdlenabled = (SDL_GetModState() & SDL_KMOD_CAPS) ? SDL_TRUE : SDL_FALSE;
|
||||||
if (osenabled ^ sdlenabled) {
|
if (osenabled ^ sdlenabled) {
|
||||||
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, SDL_PRESSED, SDL_SCANCODE_CAPSLOCK);
|
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, 0, SDL_SCANCODE_CAPSLOCK, SDL_PRESSED);
|
||||||
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, SDL_RELEASED, SDL_SCANCODE_CAPSLOCK);
|
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, 0, SDL_SCANCODE_CAPSLOCK, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
- (void)keyDown:(NSEvent *)theEvent
|
- (void)keyDown:(NSEvent *)theEvent
|
||||||
|
|
|
@ -836,9 +836,7 @@ static EM_BOOL Emscripten_HandleKey(int eventType, const EmscriptenKeyboardEvent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scancode != SDL_SCANCODE_UNKNOWN) {
|
SDL_SendKeyboardKeyAndKeycode(0, SDL_DEFAULT_KEYBOARD_ID, 0, scancode, keycode, eventType == EMSCRIPTEN_EVENT_KEYDOWN ? SDL_PRESSED : SDL_RELEASED);
|
||||||
SDL_SendKeyboardKeyAndKeycode(0, SDL_DEFAULT_KEYBOARD_ID, eventType == EMSCRIPTEN_EVENT_KEYDOWN ? SDL_PRESSED : SDL_RELEASED, scancode, keycode);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* if TEXTINPUT events are enabled we can't prevent keydown or we won't get keypress
|
/* if TEXTINPUT events are enabled we can't prevent keydown or we won't get keypress
|
||||||
* we need to ALWAYS prevent backspace and tab otherwise chrome takes action and does bad navigation UX
|
* we need to ALWAYS prevent backspace and tab otherwise chrome takes action and does bad navigation UX
|
||||||
|
|
|
@ -154,10 +154,10 @@ int HandleWsEvent(SDL_VideoDevice *_this, const TWsEvent &aWsEvent)
|
||||||
|
|
||||||
switch (aWsEvent.Type()) {
|
switch (aWsEvent.Type()) {
|
||||||
case EEventKeyDown: /* Key events */
|
case EEventKeyDown: /* Key events */
|
||||||
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, SDL_PRESSED, ConvertScancode(_this, aWsEvent.Key()->iScanCode));
|
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, aWsEvent.Key()->iScanCode, ConvertScancode(_this, aWsEvent.Key()->iScanCode), SDL_PRESSED);
|
||||||
break;
|
break;
|
||||||
case EEventKeyUp: /* Key events */
|
case EEventKeyUp: /* Key events */
|
||||||
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, SDL_RELEASED, ConvertScancode(_this, aWsEvent.Key()->iScanCode));
|
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, aWsEvent.Key()->iScanCode, ConvertScancode(_this, aWsEvent.Key()->iScanCode), SDL_RELEASED);
|
||||||
break;
|
break;
|
||||||
case EEventFocusGained: /* SDL window got focus */
|
case EEventFocusGained: /* SDL window got focus */
|
||||||
data->NGAGE_IsWindowFocused = ETrue;
|
data->NGAGE_IsWindowFocused = ETrue;
|
||||||
|
|
|
@ -90,7 +90,7 @@ void PSP_PumpEvents(SDL_VideoDevice *_this)
|
||||||
if (changed) {
|
if (changed) {
|
||||||
for (i = 0; i < sizeof(keymap_psp) / sizeof(keymap_psp[0]); i++) {
|
for (i = 0; i < sizeof(keymap_psp) / sizeof(keymap_psp[0]); i++) {
|
||||||
if (changed & keymap_psp[i].id) {
|
if (changed & keymap_psp[i].id) {
|
||||||
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, (keys & keymap_psp[i].id) ? SDL_PRESSED : SDL_RELEASED, SDL_GetScancodeFromKey(keymap_psp[i].sym));
|
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, keymap_psp[i].id, SDL_GetScancodeFromKey(keymap_psp[i].sym), (keys & keymap_psp[i].id) ? SDL_PRESSED : SDL_RELEASED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -113,7 +113,7 @@ void PSP_PumpEvents(SDL_VideoDevice *_this)
|
||||||
sym.sym = keymap[raw];
|
sym.sym = keymap[raw];
|
||||||
/* not tested */
|
/* not tested */
|
||||||
/* SDL_PrivateKeyboard(pressed?SDL_PRESSED:SDL_RELEASED, &sym); */
|
/* SDL_PrivateKeyboard(pressed?SDL_PRESSED:SDL_RELEASED, &sym); */
|
||||||
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, (keys & keymap_psp[i].id) ? SDL_PRESSED : SDL_RELEASED, SDL_GetScancodeFromKey(keymap[raw]));
|
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, raw, SDL_GetScancodeFromKey(keymap[raw]), (keys & keymap_psp[i].id) ? SDL_PRESSED : SDL_RELEASED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -125,8 +125,8 @@ void handleKeyboardEvent(screen_event_t event)
|
||||||
// FIXME:
|
// FIXME:
|
||||||
// Need to handle more key states (such as key combinations).
|
// Need to handle more key states (such as key combinations).
|
||||||
if (val & KEY_DOWN) {
|
if (val & KEY_DOWN) {
|
||||||
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, SDL_PRESSED, scancode);
|
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, val, scancode, SDL_PRESSED);
|
||||||
} else {
|
} else {
|
||||||
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, SDL_RELEASED, scancode);
|
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, val, scancode, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,7 +58,7 @@ void RISCOS_PollKeyboard(SDL_VideoDevice *_this)
|
||||||
for (i = 0; i < RISCOS_MAX_KEYS_PRESSED; i++) {
|
for (i = 0; i < RISCOS_MAX_KEYS_PRESSED; i++) {
|
||||||
if (driverdata->key_pressed[i] != 255) {
|
if (driverdata->key_pressed[i] != 255) {
|
||||||
if ((_kernel_osbyte(129, driverdata->key_pressed[i] ^ 0xff, 0xff) & 0xff) != 255) {
|
if ((_kernel_osbyte(129, driverdata->key_pressed[i] ^ 0xff, 0xff) & 0xff) != 255) {
|
||||||
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, SDL_RELEASED, SDL_RISCOS_translate_keycode(driverdata->key_pressed[i]));
|
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, driverdata->key_pressed[i], SDL_RISCOS_translate_keycode(driverdata->key_pressed[i]), SDL_RELEASED);
|
||||||
driverdata->key_pressed[i] = 255;
|
driverdata->key_pressed[i] = 255;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ void RISCOS_PollKeyboard(SDL_VideoDevice *_this)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, SDL_PRESSED, SDL_RISCOS_translate_keycode(key));
|
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, key, SDL_RISCOS_translate_keycode(key), SDL_PRESSED);
|
||||||
|
|
||||||
/* Record the press so we can detect release later. */
|
/* Record the press so we can detect release later. */
|
||||||
for (i = 0; i < RISCOS_MAX_KEYS_PRESSED; i++) {
|
for (i = 0; i < RISCOS_MAX_KEYS_PRESSED; i++) {
|
||||||
|
|
|
@ -181,7 +181,7 @@ static void OnGCKeyboardConnected(GCKeyboard *keyboard) API_AVAILABLE(macos(11.0
|
||||||
SDL_AddKeyboard(keyboardID, NULL, SDL_TRUE);
|
SDL_AddKeyboard(keyboardID, NULL, SDL_TRUE);
|
||||||
|
|
||||||
keyboard.keyboardInput.keyChangedHandler = ^(GCKeyboardInput *kbrd, GCControllerButtonInput *key, GCKeyCode keyCode, BOOL pressed) {
|
keyboard.keyboardInput.keyChangedHandler = ^(GCKeyboardInput *kbrd, GCControllerButtonInput *key, GCKeyCode keyCode, BOOL pressed) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, pressed ? SDL_PRESSED : SDL_RELEASED, (SDL_Scancode)keyCode);
|
SDL_SendKeyboardKey(0, keyboardID, 0, (SDL_Scancode)keyCode, pressed ? SDL_PRESSED : SDL_RELEASED);
|
||||||
};
|
};
|
||||||
|
|
||||||
dispatch_queue_t queue = dispatch_queue_create("org.libsdl.input.keyboard", DISPATCH_QUEUE_SERIAL);
|
dispatch_queue_t queue = dispatch_queue_create("org.libsdl.input.keyboard", DISPATCH_QUEUE_SERIAL);
|
||||||
|
|
|
@ -414,7 +414,7 @@ extern int SDL_AppleTVRemoteOpenedAsJoystick;
|
||||||
if (!SDL_HasKeyboard()) {
|
if (!SDL_HasKeyboard()) {
|
||||||
for (UIPress *press in presses) {
|
for (UIPress *press in presses) {
|
||||||
SDL_Scancode scancode = [self scancodeFromPress:press];
|
SDL_Scancode scancode = [self scancodeFromPress:press];
|
||||||
SDL_SendKeyboardKey(UIKit_GetEventTimestamp([event timestamp]), SDL_GLOBAL_KEYBOARD_ID, SDL_PRESSED, scancode);
|
SDL_SendKeyboardKey(UIKit_GetEventTimestamp([event timestamp]), SDL_GLOBAL_KEYBOARD_ID, 0, scancode, SDL_PRESSED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (SDL_TextInputActive()) {
|
if (SDL_TextInputActive()) {
|
||||||
|
@ -427,7 +427,7 @@ extern int SDL_AppleTVRemoteOpenedAsJoystick;
|
||||||
if (!SDL_HasKeyboard()) {
|
if (!SDL_HasKeyboard()) {
|
||||||
for (UIPress *press in presses) {
|
for (UIPress *press in presses) {
|
||||||
SDL_Scancode scancode = [self scancodeFromPress:press];
|
SDL_Scancode scancode = [self scancodeFromPress:press];
|
||||||
SDL_SendKeyboardKey(UIKit_GetEventTimestamp([event timestamp]), SDL_GLOBAL_KEYBOARD_ID, SDL_RELEASED, scancode);
|
SDL_SendKeyboardKey(UIKit_GetEventTimestamp([event timestamp]), SDL_GLOBAL_KEYBOARD_ID, 0, scancode, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (SDL_TextInputActive()) {
|
if (SDL_TextInputActive()) {
|
||||||
|
@ -440,7 +440,7 @@ extern int SDL_AppleTVRemoteOpenedAsJoystick;
|
||||||
if (!SDL_HasKeyboard()) {
|
if (!SDL_HasKeyboard()) {
|
||||||
for (UIPress *press in presses) {
|
for (UIPress *press in presses) {
|
||||||
SDL_Scancode scancode = [self scancodeFromPress:press];
|
SDL_Scancode scancode = [self scancodeFromPress:press];
|
||||||
SDL_SendKeyboardKey(UIKit_GetEventTimestamp([event timestamp]), SDL_GLOBAL_KEYBOARD_ID, SDL_RELEASED, scancode);
|
SDL_SendKeyboardKey(UIKit_GetEventTimestamp([event timestamp]), SDL_GLOBAL_KEYBOARD_ID, 0, scancode, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (SDL_TextInputActive()) {
|
if (SDL_TextInputActive()) {
|
||||||
|
|
|
@ -67,40 +67,40 @@ void VITA_PollKeyboard(void)
|
||||||
// The k_report only reports the state of the LED
|
// The k_report only reports the state of the LED
|
||||||
if (k_reports[numReports - 1].modifiers[1] & 0x1) {
|
if (k_reports[numReports - 1].modifiers[1] & 0x1) {
|
||||||
if (!(locks & 0x1)) {
|
if (!(locks & 0x1)) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, SDL_SCANCODE_NUMLOCKCLEAR);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_NUMLOCKCLEAR, SDL_PRESSED);
|
||||||
locks |= 0x1;
|
locks |= 0x1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (locks & 0x1) {
|
if (locks & 0x1) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_RELEASED, SDL_SCANCODE_NUMLOCKCLEAR);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_NUMLOCKCLEAR, SDL_RELEASED);
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, SDL_SCANCODE_NUMLOCKCLEAR);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_NUMLOCKCLEAR, SDL_PRESSED);
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_RELEASED, SDL_SCANCODE_NUMLOCKCLEAR);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_NUMLOCKCLEAR, SDL_RELEASED);
|
||||||
locks &= ~0x1;
|
locks &= ~0x1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (k_reports[numReports - 1].modifiers[1] & 0x2) {
|
if (k_reports[numReports - 1].modifiers[1] & 0x2) {
|
||||||
if (!(locks & 0x2)) {
|
if (!(locks & 0x2)) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, SDL_SCANCODE_CAPSLOCK);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_CAPSLOCK, SDL_PRESSED);
|
||||||
locks |= 0x2;
|
locks |= 0x2;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (locks & 0x2) {
|
if (locks & 0x2) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_RELEASED, SDL_SCANCODE_CAPSLOCK);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_CAPSLOCK, SDL_RELEASED);
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, SDL_SCANCODE_CAPSLOCK);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_CAPSLOCK, SDL_PRESSED);
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_RELEASED, SDL_SCANCODE_CAPSLOCK);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_CAPSLOCK, SDL_RELEASED);
|
||||||
locks &= ~0x2;
|
locks &= ~0x2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (k_reports[numReports - 1].modifiers[1] & 0x4) {
|
if (k_reports[numReports - 1].modifiers[1] & 0x4) {
|
||||||
if (!(locks & 0x4)) {
|
if (!(locks & 0x4)) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, SDL_SCANCODE_SCROLLLOCK);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_SCROLLLOCK, SDL_PRESSED);
|
||||||
locks |= 0x4;
|
locks |= 0x4;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (locks & 0x4) {
|
if (locks & 0x4) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_RELEASED, SDL_SCANCODE_SCROLLLOCK);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_SCROLLLOCK, SDL_RELEASED);
|
||||||
locks &= ~0x4;
|
locks &= ~0x4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -110,58 +110,58 @@ void VITA_PollKeyboard(void)
|
||||||
|
|
||||||
if (changed_modifiers & 0x01) {
|
if (changed_modifiers & 0x01) {
|
||||||
if (prev_modifiers & 0x01) {
|
if (prev_modifiers & 0x01) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_RELEASED, SDL_SCANCODE_LCTRL);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_LCTRL, SDL_RELEASED);
|
||||||
} else {
|
} else {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, SDL_SCANCODE_LCTRL);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_LCTRL, SDL_PRESSED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (changed_modifiers & 0x02) {
|
if (changed_modifiers & 0x02) {
|
||||||
if (prev_modifiers & 0x02) {
|
if (prev_modifiers & 0x02) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_RELEASED, SDL_SCANCODE_LSHIFT);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_LSHIFT, SDL_RELEASED);
|
||||||
} else {
|
} else {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, SDL_SCANCODE_LSHIFT);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_LSHIFT, SDL_PRESSED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (changed_modifiers & 0x04) {
|
if (changed_modifiers & 0x04) {
|
||||||
if (prev_modifiers & 0x04) {
|
if (prev_modifiers & 0x04) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_RELEASED, SDL_SCANCODE_LALT);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_LALT, SDL_RELEASED);
|
||||||
} else {
|
} else {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, SDL_SCANCODE_LALT);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_LALT, SDL_PRESSED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (changed_modifiers & 0x08) {
|
if (changed_modifiers & 0x08) {
|
||||||
if (prev_modifiers & 0x08) {
|
if (prev_modifiers & 0x08) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_RELEASED, SDL_SCANCODE_LGUI);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_LGUI, SDL_RELEASED);
|
||||||
} else {
|
} else {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, SDL_SCANCODE_LGUI);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_LGUI, SDL_PRESSED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (changed_modifiers & 0x10) {
|
if (changed_modifiers & 0x10) {
|
||||||
if (prev_modifiers & 0x10) {
|
if (prev_modifiers & 0x10) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_RELEASED, SDL_SCANCODE_RCTRL);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_RCTRL, SDL_RELEASED);
|
||||||
} else {
|
} else {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, SDL_SCANCODE_RCTRL);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_RCTRL, SDL_PRESSED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (changed_modifiers & 0x20) {
|
if (changed_modifiers & 0x20) {
|
||||||
if (prev_modifiers & 0x20) {
|
if (prev_modifiers & 0x20) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_RELEASED, SDL_SCANCODE_RSHIFT);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_RSHIFT, SDL_RELEASED);
|
||||||
} else {
|
} else {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, SDL_SCANCODE_RSHIFT);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_RSHIFT, SDL_PRESSED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (changed_modifiers & 0x40) {
|
if (changed_modifiers & 0x40) {
|
||||||
if (prev_modifiers & 0x40) {
|
if (prev_modifiers & 0x40) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_RELEASED, SDL_SCANCODE_RALT);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_RALT, SDL_RELEASED);
|
||||||
} else {
|
} else {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, SDL_SCANCODE_RALT);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_RALT, SDL_PRESSED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (changed_modifiers & 0x80) {
|
if (changed_modifiers & 0x80) {
|
||||||
if (prev_modifiers & 0x80) {
|
if (prev_modifiers & 0x80) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_RELEASED, SDL_SCANCODE_RGUI);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_RGUI, SDL_RELEASED);
|
||||||
} else {
|
} else {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, SDL_SCANCODE_RGUI);
|
SDL_SendKeyboardKey(0, keyboardID, 0, SDL_SCANCODE_RGUI, SDL_PRESSED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -175,10 +175,10 @@ void VITA_PollKeyboard(void)
|
||||||
if (keyCode != prev_keys[i]) {
|
if (keyCode != prev_keys[i]) {
|
||||||
|
|
||||||
if (prev_keys[i]) {
|
if (prev_keys[i]) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_RELEASED, prev_keys[i]);
|
SDL_SendKeyboardKey(0, keyboardID, 0, prev_keys[i], SDL_RELEASED);
|
||||||
}
|
}
|
||||||
if (keyCode) {
|
if (keyCode) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, keyCode);
|
SDL_SendKeyboardKey(0, keyboardID, 0, keyCode, SDL_PRESSED);
|
||||||
}
|
}
|
||||||
prev_keys[i] = keyCode;
|
prev_keys[i] = keyCode;
|
||||||
}
|
}
|
||||||
|
|
|
@ -267,7 +267,7 @@ static SDL_bool keyboard_repeat_handle(SDL_WaylandKeyboardRepeat *repeat_info, U
|
||||||
while (elapsed >= repeat_info->next_repeat_ns) {
|
while (elapsed >= repeat_info->next_repeat_ns) {
|
||||||
if (repeat_info->scancode != SDL_SCANCODE_UNKNOWN) {
|
if (repeat_info->scancode != SDL_SCANCODE_UNKNOWN) {
|
||||||
const Uint64 timestamp = repeat_info->wl_press_time_ns + repeat_info->next_repeat_ns;
|
const Uint64 timestamp = repeat_info->wl_press_time_ns + repeat_info->next_repeat_ns;
|
||||||
SDL_SendKeyboardKeyIgnoreModifiers(Wayland_GetEventTimestamp(timestamp), repeat_info->keyboard_id, SDL_PRESSED, repeat_info->scancode);
|
SDL_SendKeyboardKeyIgnoreModifiers(Wayland_GetEventTimestamp(timestamp), repeat_info->keyboard_id, repeat_info->key, repeat_info->scancode, SDL_PRESSED);
|
||||||
}
|
}
|
||||||
if (repeat_info->text[0]) {
|
if (repeat_info->text[0]) {
|
||||||
SDL_SendKeyboardText(repeat_info->text);
|
SDL_SendKeyboardText(repeat_info->text);
|
||||||
|
@ -1488,7 +1488,7 @@ static void keyboard_handle_enter(void *data, struct wl_keyboard *keyboard,
|
||||||
case SDLK_RGUI:
|
case SDLK_RGUI:
|
||||||
case SDLK_MODE:
|
case SDLK_MODE:
|
||||||
Wayland_HandleModifierKeys(input, scancode, SDL_TRUE);
|
Wayland_HandleModifierKeys(input, scancode, SDL_TRUE);
|
||||||
SDL_SendKeyboardKeyIgnoreModifiers(0, input->keyboard_id, SDL_PRESSED, scancode);
|
SDL_SendKeyboardKeyIgnoreModifiers(0, input->keyboard_id, *key, scancode, SDL_PRESSED);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -1624,7 +1624,7 @@ static void keyboard_handle_key(void *data, struct wl_keyboard *keyboard,
|
||||||
|
|
||||||
scancode = Wayland_get_scancode_from_key(input, key + 8);
|
scancode = Wayland_get_scancode_from_key(input, key + 8);
|
||||||
Wayland_HandleModifierKeys(input, scancode, state == WL_KEYBOARD_KEY_STATE_PRESSED);
|
Wayland_HandleModifierKeys(input, scancode, state == WL_KEYBOARD_KEY_STATE_PRESSED);
|
||||||
SDL_SendKeyboardKeyIgnoreModifiers(Wayland_GetKeyboardTimestamp(input, time), input->keyboard_id, state == WL_KEYBOARD_KEY_STATE_PRESSED ? SDL_PRESSED : SDL_RELEASED, scancode);
|
SDL_SendKeyboardKeyIgnoreModifiers(Wayland_GetKeyboardTimestamp(input, time), input->keyboard_id, key, scancode, state == WL_KEYBOARD_KEY_STATE_PRESSED ? SDL_PRESSED : SDL_RELEASED);
|
||||||
|
|
||||||
if (state == WL_KEYBOARD_KEY_STATE_PRESSED) {
|
if (state == WL_KEYBOARD_KEY_STATE_PRESSED) {
|
||||||
if (has_text && !(SDL_GetModState() & SDL_KMOD_CTRL)) {
|
if (has_text && !(SDL_GetModState() & SDL_KMOD_CTRL)) {
|
||||||
|
|
|
@ -155,7 +155,7 @@ static Uint64 WIN_GetEventTimestamp()
|
||||||
return timestamp;
|
return timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
static SDL_Scancode WindowsScanCodeToSDLScanCode(LPARAM lParam, WPARAM wParam, SDL_bool *virtual_key)
|
static SDL_Scancode WindowsScanCodeToSDLScanCode(LPARAM lParam, WPARAM wParam, Uint16 *rawcode, SDL_bool *virtual_key)
|
||||||
{
|
{
|
||||||
SDL_Scancode code;
|
SDL_Scancode code;
|
||||||
Uint8 index;
|
Uint8 index;
|
||||||
|
@ -194,6 +194,7 @@ static SDL_Scancode WindowsScanCodeToSDLScanCode(LPARAM lParam, WPARAM wParam, S
|
||||||
/* Pack scan code into one byte to make the index. */
|
/* Pack scan code into one byte to make the index. */
|
||||||
index = LOBYTE(scanCode) | (HIBYTE(scanCode) ? 0x80 : 0x00);
|
index = LOBYTE(scanCode) | (HIBYTE(scanCode) ? 0x80 : 0x00);
|
||||||
code = windows_scancode_table[index];
|
code = windows_scancode_table[index];
|
||||||
|
*rawcode = scanCode;
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
@ -487,11 +488,11 @@ WIN_KeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam)
|
||||||
|
|
||||||
if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) {
|
if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) {
|
||||||
if (!data->raw_keyboard_enabled) {
|
if (!data->raw_keyboard_enabled) {
|
||||||
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, SDL_PRESSED, scanCode);
|
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, hookData->scanCode, scanCode, SDL_PRESSED);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!data->raw_keyboard_enabled) {
|
if (!data->raw_keyboard_enabled) {
|
||||||
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, SDL_RELEASED, scanCode);
|
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, hookData->scanCode, scanCode, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the key was down prior to our hook being installed, allow the
|
/* If the key was down prior to our hook being installed, allow the
|
||||||
|
@ -687,9 +688,25 @@ static void WIN_HandleRawKeyboardInput(Uint64 timestamp, SDL_VideoData *data, HA
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((rawkeyboard->Flags & RI_KEY_E0) && rawkeyboard->MakeCode == 0x2A) {
|
||||||
|
// 0xE02A make code prefix, ignored
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)
|
||||||
|
if (!rawkeyboard->MakeCode) {
|
||||||
|
rawkeyboard->MakeCode = LOWORD(MapVirtualKey(rawkeyboard->VKey, WIN_IsWindowsXP() ? MAPVK_VK_TO_VSC : MAPVK_VK_TO_VSC_EX));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (!rawkeyboard->MakeCode) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Uint8 state = (rawkeyboard->Flags & RI_KEY_BREAK) ? SDL_RELEASED : SDL_PRESSED;
|
Uint8 state = (rawkeyboard->Flags & RI_KEY_BREAK) ? SDL_RELEASED : SDL_PRESSED;
|
||||||
SDL_Scancode code;
|
SDL_Scancode code;
|
||||||
|
USHORT rawcode = rawkeyboard->MakeCode;
|
||||||
if (data->pending_E1_key_sequence) {
|
if (data->pending_E1_key_sequence) {
|
||||||
|
rawcode |= 0xE100;
|
||||||
if (rawkeyboard->MakeCode == 0x45) {
|
if (rawkeyboard->MakeCode == 0x45) {
|
||||||
// Ctrl+NumLock == Pause
|
// Ctrl+NumLock == Pause
|
||||||
code = SDL_SCANCODE_PAUSE;
|
code = SDL_SCANCODE_PAUSE;
|
||||||
|
@ -702,6 +719,7 @@ static void WIN_HandleRawKeyboardInput(Uint64 timestamp, SDL_VideoData *data, HA
|
||||||
// The code is in the lower 7 bits, the high bit is set for the E0 prefix
|
// The code is in the lower 7 bits, the high bit is set for the E0 prefix
|
||||||
Uint8 index = (Uint8)rawkeyboard->MakeCode;
|
Uint8 index = (Uint8)rawkeyboard->MakeCode;
|
||||||
if (rawkeyboard->Flags & RI_KEY_E0) {
|
if (rawkeyboard->Flags & RI_KEY_E0) {
|
||||||
|
rawcode |= 0xE000;
|
||||||
index |= 0x80;
|
index |= 0x80;
|
||||||
}
|
}
|
||||||
code = windows_scancode_table[index];
|
code = windows_scancode_table[index];
|
||||||
|
@ -709,7 +727,8 @@ static void WIN_HandleRawKeyboardInput(Uint64 timestamp, SDL_VideoData *data, HA
|
||||||
if (state && !SDL_GetKeyboardFocus()) {
|
if (state && !SDL_GetKeyboardFocus()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SDL_SendKeyboardKey(timestamp, keyboardID, state, code);
|
|
||||||
|
SDL_SendKeyboardKey(timestamp, keyboardID, rawcode, code, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WIN_PollRawInput(SDL_VideoDevice *_this)
|
void WIN_PollRawInput(SDL_VideoDevice *_this)
|
||||||
|
@ -1213,7 +1232,8 @@ LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_bool virtual_key = SDL_FALSE;
|
SDL_bool virtual_key = SDL_FALSE;
|
||||||
SDL_Scancode code = WindowsScanCodeToSDLScanCode(lParam, wParam, &virtual_key);
|
Uint16 rawcode = 0;
|
||||||
|
SDL_Scancode code = WindowsScanCodeToSDLScanCode(lParam, wParam, &rawcode, &virtual_key);
|
||||||
const Uint8 *keyboardState = SDL_GetKeyboardState(NULL);
|
const Uint8 *keyboardState = SDL_GetKeyboardState(NULL);
|
||||||
|
|
||||||
/* Detect relevant keyboard shortcuts */
|
/* Detect relevant keyboard shortcuts */
|
||||||
|
@ -1224,8 +1244,8 @@ LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((virtual_key || !data->videodata->raw_keyboard_enabled) && code != SDL_SCANCODE_UNKNOWN) {
|
if (virtual_key || !data->videodata->raw_keyboard_enabled) {
|
||||||
SDL_SendKeyboardKey(WIN_GetEventTimestamp(), SDL_GLOBAL_KEYBOARD_ID, SDL_PRESSED, code);
|
SDL_SendKeyboardKey(WIN_GetEventTimestamp(), SDL_GLOBAL_KEYBOARD_ID, rawcode, code, SDL_PRESSED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1241,15 +1261,16 @@ LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_bool virtual_key = SDL_FALSE;
|
SDL_bool virtual_key = SDL_FALSE;
|
||||||
SDL_Scancode code = WindowsScanCodeToSDLScanCode(lParam, wParam, &virtual_key);
|
Uint16 rawcode = 0;
|
||||||
|
SDL_Scancode code = WindowsScanCodeToSDLScanCode(lParam, wParam, &rawcode, &virtual_key);
|
||||||
const Uint8 *keyboardState = SDL_GetKeyboardState(NULL);
|
const Uint8 *keyboardState = SDL_GetKeyboardState(NULL);
|
||||||
|
|
||||||
if ((virtual_key || !data->videodata->raw_keyboard_enabled) && code != SDL_SCANCODE_UNKNOWN) {
|
if (virtual_key || !data->videodata->raw_keyboard_enabled) {
|
||||||
if (code == SDL_SCANCODE_PRINTSCREEN &&
|
if (code == SDL_SCANCODE_PRINTSCREEN &&
|
||||||
keyboardState[code] == SDL_RELEASED) {
|
keyboardState[code] == SDL_RELEASED) {
|
||||||
SDL_SendKeyboardKey(WIN_GetEventTimestamp(), SDL_GLOBAL_KEYBOARD_ID, SDL_PRESSED, code);
|
SDL_SendKeyboardKey(WIN_GetEventTimestamp(), SDL_GLOBAL_KEYBOARD_ID, rawcode, code, SDL_PRESSED);
|
||||||
}
|
}
|
||||||
SDL_SendKeyboardKey(WIN_GetEventTimestamp(), SDL_GLOBAL_KEYBOARD_ID, SDL_RELEASED, code);
|
SDL_SendKeyboardKey(WIN_GetEventTimestamp(), SDL_GLOBAL_KEYBOARD_ID, rawcode, code, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
returnCode = 0;
|
returnCode = 0;
|
||||||
|
@ -2251,10 +2272,10 @@ void WIN_PumpEvents(SDL_VideoDevice *_this)
|
||||||
and if we think a key is pressed when Windows doesn't, unstick it in SDL's state. */
|
and if we think a key is pressed when Windows doesn't, unstick it in SDL's state. */
|
||||||
keystate = SDL_GetKeyboardState(NULL);
|
keystate = SDL_GetKeyboardState(NULL);
|
||||||
if ((keystate[SDL_SCANCODE_LSHIFT] == SDL_PRESSED) && !(GetKeyState(VK_LSHIFT) & 0x8000)) {
|
if ((keystate[SDL_SCANCODE_LSHIFT] == SDL_PRESSED) && !(GetKeyState(VK_LSHIFT) & 0x8000)) {
|
||||||
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, SDL_RELEASED, SDL_SCANCODE_LSHIFT);
|
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, 0, SDL_SCANCODE_LSHIFT, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
if ((keystate[SDL_SCANCODE_RSHIFT] == SDL_PRESSED) && !(GetKeyState(VK_RSHIFT) & 0x8000)) {
|
if ((keystate[SDL_SCANCODE_RSHIFT] == SDL_PRESSED) && !(GetKeyState(VK_RSHIFT) & 0x8000)) {
|
||||||
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, SDL_RELEASED, SDL_SCANCODE_RSHIFT);
|
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, 0, SDL_SCANCODE_RSHIFT, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The Windows key state gets lost when using Windows+Space or Windows+G shortcuts and
|
/* The Windows key state gets lost when using Windows+Space or Windows+G shortcuts and
|
||||||
|
@ -2263,10 +2284,10 @@ void WIN_PumpEvents(SDL_VideoDevice *_this)
|
||||||
focusWindow = SDL_GetKeyboardFocus();
|
focusWindow = SDL_GetKeyboardFocus();
|
||||||
if (!focusWindow || !(focusWindow->flags & SDL_WINDOW_KEYBOARD_GRABBED)) {
|
if (!focusWindow || !(focusWindow->flags & SDL_WINDOW_KEYBOARD_GRABBED)) {
|
||||||
if ((keystate[SDL_SCANCODE_LGUI] == SDL_PRESSED) && !(GetKeyState(VK_LWIN) & 0x8000)) {
|
if ((keystate[SDL_SCANCODE_LGUI] == SDL_PRESSED) && !(GetKeyState(VK_LWIN) & 0x8000)) {
|
||||||
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, SDL_RELEASED, SDL_SCANCODE_LGUI);
|
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, 0, SDL_SCANCODE_LGUI, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
if ((keystate[SDL_SCANCODE_RGUI] == SDL_PRESSED) && !(GetKeyState(VK_RWIN) & 0x8000)) {
|
if ((keystate[SDL_SCANCODE_RGUI] == SDL_PRESSED) && !(GetKeyState(VK_RWIN) & 0x8000)) {
|
||||||
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, SDL_RELEASED, SDL_SCANCODE_RGUI);
|
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, 0, SDL_SCANCODE_RGUI, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ extern "C" {
|
||||||
|
|
||||||
#include "SDL_winrtvideo_cpp.h"
|
#include "SDL_winrtvideo_cpp.h"
|
||||||
|
|
||||||
static SDL_Scancode WINRT_TranslateKeycode(Windows::System::VirtualKey virtualKey, const Windows::UI::Core::CorePhysicalKeyStatus& keyStatus)
|
static SDL_Scancode WINRT_TranslateKeycode(Windows::System::VirtualKey virtualKey, const Windows::UI::Core::CorePhysicalKeyStatus& keyStatus, Uint16 *rawcode)
|
||||||
{
|
{
|
||||||
SDL_Scancode code;
|
SDL_Scancode code;
|
||||||
Uint8 index;
|
Uint8 index;
|
||||||
|
@ -52,6 +52,7 @@ static SDL_Scancode WINRT_TranslateKeycode(Windows::System::VirtualKey virtualKe
|
||||||
/* Pack scan code into one byte to make the index. */
|
/* Pack scan code into one byte to make the index. */
|
||||||
index = LOBYTE(scanCode) | (HIBYTE(scanCode) ? 0x80 : 0x00);
|
index = LOBYTE(scanCode) | (HIBYTE(scanCode) ? 0x80 : 0x00);
|
||||||
code = windows_scancode_table[index];
|
code = windows_scancode_table[index];
|
||||||
|
*rawcode = scanCode;
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
@ -62,6 +63,7 @@ void WINRT_ProcessAcceleratorKeyActivated(Windows::UI::Core::AcceleratorKeyEvent
|
||||||
|
|
||||||
Uint8 state;
|
Uint8 state;
|
||||||
SDL_Scancode code;
|
SDL_Scancode code;
|
||||||
|
Uint16 rawcode = 0;
|
||||||
|
|
||||||
switch (args->EventType) {
|
switch (args->EventType) {
|
||||||
case CoreAcceleratorKeyEventType::SystemKeyDown:
|
case CoreAcceleratorKeyEventType::SystemKeyDown:
|
||||||
|
@ -76,8 +78,8 @@ void WINRT_ProcessAcceleratorKeyActivated(Windows::UI::Core::AcceleratorKeyEvent
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
code = WINRT_TranslateKeycode(args->VirtualKey, args->KeyStatus);
|
code = WINRT_TranslateKeycode(args->VirtualKey, args->KeyStatus, &rawcode);
|
||||||
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, state, code);
|
SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, rawcode, code, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WINRT_ProcessCharacterReceivedEvent(SDL_Window *window, Windows::UI::Core::CharacterReceivedEventArgs ^ args)
|
void WINRT_ProcessCharacterReceivedEvent(SDL_Window *window, Windows::UI::Core::CharacterReceivedEventArgs ^ args)
|
||||||
|
|
|
@ -438,13 +438,13 @@ void X11_ReconcileKeyboardState(SDL_VideoDevice *_this)
|
||||||
case SDLK_LGUI:
|
case SDLK_LGUI:
|
||||||
case SDLK_RGUI:
|
case SDLK_RGUI:
|
||||||
case SDLK_MODE:
|
case SDLK_MODE:
|
||||||
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, SDL_PRESSED, scancode);
|
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, keycode, scancode, SDL_PRESSED);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (!x11KeyPressed && sdlKeyPressed) {
|
} else if (!x11KeyPressed && sdlKeyPressed) {
|
||||||
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, SDL_RELEASED, scancode);
|
SDL_SendKeyboardKey(0, SDL_GLOBAL_KEYBOARD_ID, keycode, scancode, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -907,9 +907,9 @@ void X11_HandleKeyEvent(SDL_VideoDevice *_this, SDL_WindowData *windowdata, SDL_
|
||||||
videodata->filter_time = xevent->xkey.time;
|
videodata->filter_time = xevent->xkey.time;
|
||||||
|
|
||||||
if (orig_event_type == KeyPress) {
|
if (orig_event_type == KeyPress) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, scancode);
|
SDL_SendKeyboardKey(0, keyboardID, orig_keycode, scancode, SDL_PRESSED);
|
||||||
} else {
|
} else {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_RELEASED, scancode);
|
SDL_SendKeyboardKey(0, keyboardID, orig_keycode, scancode, SDL_RELEASED);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
|
@ -935,7 +935,7 @@ void X11_HandleKeyEvent(SDL_VideoDevice *_this, SDL_WindowData *windowdata, SDL_
|
||||||
if (xevent->type == KeyPress) {
|
if (xevent->type == KeyPress) {
|
||||||
/* Don't send the key if it looks like a duplicate of a filtered key sent by an IME */
|
/* Don't send the key if it looks like a duplicate of a filtered key sent by an IME */
|
||||||
if (xevent->xkey.keycode != videodata->filter_code || xevent->xkey.time != videodata->filter_time) {
|
if (xevent->xkey.keycode != videodata->filter_code || xevent->xkey.time != videodata->filter_time) {
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, videodata->key_layout[keycode]);
|
SDL_SendKeyboardKey(0, keyboardID, keycode, videodata->key_layout[keycode], SDL_PRESSED);
|
||||||
}
|
}
|
||||||
if (*text) {
|
if (*text) {
|
||||||
text[text_length] = '\0';
|
text[text_length] = '\0';
|
||||||
|
@ -946,7 +946,7 @@ void X11_HandleKeyEvent(SDL_VideoDevice *_this, SDL_WindowData *windowdata, SDL_
|
||||||
/* We're about to get a repeated key down, ignore the key up */
|
/* We're about to get a repeated key down, ignore the key up */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SDL_SendKeyboardKey(0, keyboardID, SDL_RELEASED, videodata->key_layout[keycode]);
|
SDL_SendKeyboardKey(0, keyboardID, keycode, videodata->key_layout[keycode], SDL_RELEASED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -121,16 +121,18 @@ PrintKey(SDL_Keysym *sym, SDL_bool pressed, SDL_bool repeat)
|
||||||
/* Print the keycode, name and state */
|
/* Print the keycode, name and state */
|
||||||
if (sym->sym) {
|
if (sym->sym) {
|
||||||
print_string(&spot, &left,
|
print_string(&spot, &left,
|
||||||
"Key %s: scancode %d = %s, keycode 0x%08X = %s ",
|
"Key %s: raw 0x%.2x, scancode %d = %s, keycode 0x%08X = %s ",
|
||||||
pressed ? "pressed " : "released",
|
pressed ? "pressed " : "released",
|
||||||
|
sym->raw,
|
||||||
sym->scancode,
|
sym->scancode,
|
||||||
SDL_GetScancodeName(sym->scancode),
|
sym->scancode == SDL_SCANCODE_UNKNOWN ? "UNKNOWN" : SDL_GetScancodeName(sym->scancode),
|
||||||
sym->sym, SDL_GetKeyName(sym->sym));
|
sym->sym, SDL_GetKeyName(sym->sym));
|
||||||
} else {
|
} else {
|
||||||
print_string(&spot, &left,
|
print_string(&spot, &left,
|
||||||
"Unknown Key (scancode %d = %s) %s ",
|
"Unknown Key (raw 0x%.2x, scancode %d = %s) %s ",
|
||||||
|
sym->raw,
|
||||||
sym->scancode,
|
sym->scancode,
|
||||||
SDL_GetScancodeName(sym->scancode),
|
sym->scancode == SDL_SCANCODE_UNKNOWN ? "UNKNOWN" : SDL_GetScancodeName(sym->scancode),
|
||||||
pressed ? "pressed " : "released");
|
pressed ? "pressed " : "released");
|
||||||
}
|
}
|
||||||
print_modifiers(&spot, &left);
|
print_modifiers(&spot, &left);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue