Skip to content
This repository was archived by the owner on Feb 11, 2021. It is now read-only.

Commit 6968aad

Browse files
committed
Fixed bug 1916 - SDL_Keysym contains a deprecated field for unicode which may be removed.
Philipp Wiesemann SDL_Keysym contains a deprecated field for unicode which may be removed for SDL 2.0 release. As far as I can tell the field is not set on all "major" platforms and therefore will not be useful for most users. Its existence in a public header therefore becomes (in my opinion) only confusing.
1 parent 87c7151 commit 6968aad

File tree

4 files changed

+21
-36
lines changed

4 files changed

+21
-36
lines changed

include/SDL_keyboard.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,15 @@ extern "C" {
4141

4242
/**
4343
* \brief The SDL keysym structure, used in key events.
44+
*
45+
* \note If you are looking for translated character input, see the ::SDL_TEXTINPUT event.
4446
*/
4547
typedef struct SDL_Keysym
4648
{
4749
SDL_Scancode scancode; /**< SDL physical key code - see ::SDL_Scancode for details */
4850
SDL_Keycode sym; /**< SDL virtual key code - see ::SDL_Keycode for details */
4951
Uint16 mod; /**< current key modifiers */
50-
Uint32 unicode; /**< \deprecated use SDL_TextInputEvent instead */
52+
Uint32 unused;
5153
} SDL_Keysym;
5254

5355
/* Function prototypes */

src/events/SDL_keyboard.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -774,7 +774,6 @@ SDL_SendKeyboardKey(Uint8 state, SDL_Scancode scancode)
774774
event.key.keysym.scancode = scancode;
775775
event.key.keysym.sym = keyboard->keymap[scancode];
776776
event.key.keysym.mod = modstate;
777-
event.key.keysym.unicode = 0;
778777
event.key.windowID = keyboard->focus ? keyboard->focus->id : 0;
779778
posted = (SDL_PushEvent(&event) > 0);
780779
}

src/video/directfb/SDL_DirectFB_events.c

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ static SDL_Scancode oskeymap[256];
6464

6565

6666
static SDL_Keysym *DirectFB_TranslateKey(_THIS, DFBWindowEvent * evt,
67-
SDL_Keysym * keysym);
67+
SDL_Keysym * keysym, Uint32 *unicode);
6868
static SDL_Keysym *DirectFB_TranslateKeyInputEvent(_THIS, DFBInputEvent * evt,
69-
SDL_Keysym * keysym);
69+
SDL_Keysym * keysym, Uint32 *unicode);
7070

7171
static void DirectFB_InitOSKeymap(_THIS, SDL_Scancode * keypmap, int numkeys);
7272
static int DirectFB_TranslateButton(DFBInputDeviceButtonIdentifier button);
@@ -176,6 +176,7 @@ ProcessWindowEvent(_THIS, SDL_Window *sdlwin, DFBWindowEvent * evt)
176176
SDL_DFB_DEVICEDATA(_this);
177177
SDL_DFB_WINDOWDATA(sdlwin);
178178
SDL_Keysym keysym;
179+
Uint32 unicode;
179180
char text[SDL_TEXTINPUTEVENT_TEXT_SIZE];
180181

181182
if (evt->clazz == DFEC_WINDOW) {
@@ -231,12 +232,12 @@ ProcessWindowEvent(_THIS, SDL_Window *sdlwin, DFBWindowEvent * evt)
231232
break;
232233
case DWET_KEYDOWN:
233234
if (!devdata->use_linux_input) {
234-
DirectFB_TranslateKey(_this, evt, &keysym);
235+
DirectFB_TranslateKey(_this, evt, &keysym, &unicode);
235236
/*printf("Scancode %d %d %d\n", keysym.scancode, evt->key_code, evt->key_id);*/
236237
SDL_SendKeyboardKey_ex(0, SDL_PRESSED, keysym.scancode);
237238
if (SDL_EventState(SDL_TEXTINPUT, SDL_QUERY)) {
238239
SDL_zero(text);
239-
UnicodeToUtf8(keysym.unicode, text);
240+
UnicodeToUtf8(unicode, text);
240241
if (*text) {
241242
SDL_SendKeyboardText_ex(0, text);
242243
}
@@ -245,7 +246,7 @@ ProcessWindowEvent(_THIS, SDL_Window *sdlwin, DFBWindowEvent * evt)
245246
break;
246247
case DWET_KEYUP:
247248
if (!devdata->use_linux_input) {
248-
DirectFB_TranslateKey(_this, evt, &keysym);
249+
DirectFB_TranslateKey(_this, evt, &keysym, &unicode);
249250
SDL_SendKeyboardKey_ex(0, SDL_RELEASED, keysym.scancode);
250251
}
251252
break;
@@ -309,6 +310,7 @@ ProcessInputEvent(_THIS, DFBInputEvent * ievt)
309310
SDL_DFB_DEVICEDATA(_this);
310311
SDL_Keysym keysym;
311312
int kbd_idx;
313+
Uint32 unicode;
312314
char text[SDL_TEXTINPUTEVENT_TEXT_SIZE];
313315

314316
if (!devdata->use_linux_input) {
@@ -366,20 +368,20 @@ ProcessInputEvent(_THIS, DFBInputEvent * ievt)
366368
break;
367369
case DIET_KEYPRESS:
368370
kbd_idx = KbdIndex(_this, ievt->device_id);
369-
DirectFB_TranslateKeyInputEvent(_this, ievt, &keysym);
371+
DirectFB_TranslateKeyInputEvent(_this, ievt, &keysym, &unicode);
370372
/*printf("Scancode %d %d %d\n", keysym.scancode, evt->key_code, evt->key_id); */
371373
SDL_SendKeyboardKey_ex(kbd_idx, SDL_PRESSED, keysym.scancode);
372374
if (SDL_EventState(SDL_TEXTINPUT, SDL_QUERY)) {
373375
SDL_zero(text);
374-
UnicodeToUtf8(keysym.unicode, text);
376+
UnicodeToUtf8(unicode, text);
375377
if (*text) {
376378
SDL_SendKeyboardText_ex(kbd_idx, text);
377379
}
378380
}
379381
break;
380382
case DIET_KEYRELEASE:
381383
kbd_idx = KbdIndex(_this, ievt->device_id);
382-
DirectFB_TranslateKeyInputEvent(_this, ievt, &keysym);
384+
DirectFB_TranslateKeyInputEvent(_this, ievt, &keysym, &unicode);
383385
SDL_SendKeyboardKey_ex(kbd_idx, SDL_RELEASED, keysym.scancode);
384386
break;
385387
case DIET_BUTTONPRESS:
@@ -575,7 +577,7 @@ DirectFB_InitOSKeymap(_THIS, SDL_Scancode * keymap, int numkeys)
575577
}
576578

577579
static SDL_Keysym *
578-
DirectFB_TranslateKey(_THIS, DFBWindowEvent * evt, SDL_Keysym * keysym)
580+
DirectFB_TranslateKey(_THIS, DFBWindowEvent * evt, SDL_Keysym * keysym, Uint32 *unicode)
579581
{
580582
SDL_DFB_DEVICEDATA(_this);
581583
int kbd_idx = 0; /* Window events lag the device source KbdIndex(_this, evt->device_id); */
@@ -595,18 +597,18 @@ DirectFB_TranslateKey(_THIS, DFBWindowEvent * evt, SDL_Keysym * keysym)
595597
keysym->scancode = SDL_SCANCODE_UNKNOWN;
596598
}
597599

598-
keysym->unicode =
600+
*unicode =
599601
(DFB_KEY_TYPE(evt->key_symbol) == DIKT_UNICODE) ? evt->key_symbol : 0;
600-
if (keysym->unicode == 0 &&
602+
if (*unicode == 0 &&
601603
(evt->key_symbol > 0 && evt->key_symbol < 255))
602-
keysym->unicode = evt->key_symbol;
604+
*unicode = evt->key_symbol;
603605

604606
return keysym;
605607
}
606608

607609
static SDL_Keysym *
608610
DirectFB_TranslateKeyInputEvent(_THIS, DFBInputEvent * evt,
609-
SDL_Keysym * keysym)
611+
SDL_Keysym * keysym, Uint32 *unicode)
610612
{
611613
SDL_DFB_DEVICEDATA(_this);
612614
int kbd_idx = KbdIndex(_this, evt->device_id);
@@ -625,11 +627,11 @@ DirectFB_TranslateKeyInputEvent(_THIS, DFBInputEvent * evt,
625627
keysym->scancode = SDL_SCANCODE_UNKNOWN;
626628
}
627629

628-
keysym->unicode =
630+
*unicode =
629631
(DFB_KEY_TYPE(evt->key_symbol) == DIKT_UNICODE) ? evt->key_symbol : 0;
630-
if (keysym->unicode == 0 &&
632+
if (*unicode == 0 &&
631633
(evt->key_symbol > 0 && evt->key_symbol < 255))
632-
keysym->unicode = evt->key_symbol;
634+
*unicode = evt->key_symbol;
633635

634636
return keysym;
635637
}

test/checkkeys.c

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -107,24 +107,6 @@ PrintKey(SDL_Keysym * sym, SDL_bool pressed, SDL_bool repeat)
107107
SDL_GetScancodeName(sym->scancode),
108108
pressed ? "pressed " : "released");
109109
}
110-
111-
/* Print the translated character, if one exists */
112-
if (sym->unicode) {
113-
/* Is it a control-character? */
114-
if (sym->unicode < ' ') {
115-
print_string(&spot, &left, " (^%c)", sym->unicode + '@');
116-
} else {
117-
#ifdef UNICODE
118-
print_string(&spot, &left, " (%c)", sym->unicode);
119-
#else
120-
/* This is a Latin-1 program, so only show 8-bits */
121-
if (!(sym->unicode & 0xFF00))
122-
print_string(&spot, &left, " (%c)", sym->unicode);
123-
else
124-
print_string(&spot, &left, " (0x%X)", sym->unicode);
125-
#endif
126-
}
127-
}
128110
print_modifiers(&spot, &left);
129111
if (repeat) {
130112
print_string(&spot, &left, " (repeat)");

0 commit comments

Comments
 (0)