Related to #983.
This commit is contained in:
Camilla Löwy 2017-05-17 22:12:47 +02:00
parent c8ea64976f
commit 186d03b32a
4 changed files with 30 additions and 43 deletions

View File

@ -179,6 +179,7 @@ information on what to include when reporting a bug.
- [X11] Bugfix: The RandR monitor path was disabled despite working RandR (#972) - [X11] Bugfix: The RandR monitor path was disabled despite working RandR (#972)
- [X11] Bugfix: IM-duplicated key events would leak at low polling rates (#747) - [X11] Bugfix: IM-duplicated key events would leak at low polling rates (#747)
- [X11] Bugfix: Gamma ramp setting via RandR did not validate ramp size - [X11] Bugfix: Gamma ramp setting via RandR did not validate ramp size
- [X11] Bugfix: Key name string encoding depended on current locale (#981,#983)
- [Linux] Bugfix: Event processing did not detect joystick disconnection (#932) - [Linux] Bugfix: Event processing did not detect joystick disconnection (#932)
- [Cocoa] Added support for Vulkan window surface creation via - [Cocoa] Added support for Vulkan window surface creation via
[MoltenVK](https://moltengl.com/moltenvk/) (#870) [MoltenVK](https://moltengl.com/moltenvk/) (#870)
@ -233,6 +234,7 @@ skills.
- John Bartholomew - John Bartholomew
- Niklas Behrens - Niklas Behrens
- Niklas Bergström - Niklas Bergström
- Denis Bernard
- Doug Binks - Doug Binks
- blanco - blanco
- Kyle Brenneman - Kyle Brenneman

View File

@ -167,7 +167,7 @@ typedef struct _GLFWlibraryX11
// Clipboard string (while the selection is owned) // Clipboard string (while the selection is owned)
char* clipboardString; char* clipboardString;
// Key name string // Key name string
char keyName[64]; char keyName[5];
// X11 keycode to GLFW key LUT // X11 keycode to GLFW key LUT
short int keycodes[256]; short int keycodes[256];
// GLFW key to X11 keycode LUT // GLFW key to X11 keycode LUT

View File

@ -879,31 +879,32 @@ static void releaseMonitor(_GLFWwindow* window)
// Encode a Unicode code point to a UTF-8 stream // Encode a Unicode code point to a UTF-8 stream
// Based on cutef8 by Jeff Bezanson (Public Domain) // Based on cutef8 by Jeff Bezanson (Public Domain)
// //
static size_t encodeUTF8(char *dest, uint32_t ch) static size_t encodeUTF8(char* s, unsigned int ch)
{ {
if (ch < 0x80) { size_t count = 0;
dest[0] = (char)ch;
return 1; if (ch < 0x80)
s[count++] = (char) ch;
else if (ch < 0x800)
{
s[count++] = (ch >> 6) | 0xc0;
s[count++] = (ch & 0x3f) | 0x80;
} }
if (ch < 0x800) { else if (ch < 0x10000)
dest[0] = (ch>>6) | 0xC0; {
dest[1] = (ch & 0x3F) | 0x80; s[count++] = (ch >> 12) | 0xe0;
return 2; s[count++] = ((ch >> 6) & 0x3f) | 0x80;
s[count++] = (ch & 0x3f) | 0x80;
} }
if (ch < 0x10000) { else if (ch < 0x110000)
dest[0] = (ch>>12) | 0xE0; {
dest[1] = ((ch>>6) & 0x3F) | 0x80; s[count++] = (ch >> 18) | 0xf0;
dest[2] = (ch & 0x3F) | 0x80; s[count++] = ((ch >> 12) & 0x3f) | 0x80;
return 3; s[count++] = ((ch >> 6) & 0x3f) | 0x80;
s[count++] = (ch & 0x3f) | 0x80;
} }
if (ch < 0x110000) {
dest[0] = (ch>>18) | 0xF0; return count;
dest[1] = ((ch>>12) & 0x3F) | 0x80;
dest[2] = ((ch>>6) & 0x3F) | 0x80;
dest[3] = (ch & 0x3F) | 0x80;
return 4;
}
return 0;
} }
// Decode a Unicode code point from a UTF-8 stream // Decode a Unicode code point from a UTF-8 stream
@ -2475,10 +2476,6 @@ void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode)
const char* _glfwPlatformGetKeyName(int key, int scancode) const char* _glfwPlatformGetKeyName(int key, int scancode)
{ {
KeySym keysym;
long ch;
size_t sz;
if (!_glfw.x11.xkb.available) if (!_glfw.x11.xkb.available)
return NULL; return NULL;
@ -2488,19 +2485,19 @@ const char* _glfwPlatformGetKeyName(int key, int scancode)
if (!_glfwIsPrintable(_glfw.x11.keycodes[scancode])) if (!_glfwIsPrintable(_glfw.x11.keycodes[scancode]))
return NULL; return NULL;
keysym = XkbKeycodeToKeysym(_glfw.x11.display, scancode, 0, 0); const KeySym keysym = XkbKeycodeToKeysym(_glfw.x11.display, scancode, 0, 0);
if (keysym == NoSymbol) if (keysym == NoSymbol)
return NULL; return NULL;
ch = _glfwKeySym2Unicode(keysym); const long ch = _glfwKeySym2Unicode(keysym);
if (ch == -1) if (ch == -1)
return NULL; return NULL;
sz = encodeUTF8(_glfw.x11.keyName, (uint32_t)ch); const size_t count = encodeUTF8(_glfw.x11.keyName, (unsigned int) ch);
if (sz == 0) if (count == 0)
return NULL; return NULL;
_glfw.x11.keyName[sz] = '\0';
_glfw.x11.keyName[count] = '\0';
return _glfw.x11.keyName; return _glfw.x11.keyName;
} }

View File

@ -826,7 +826,6 @@ static const struct codepair {
{ 0x13bd, 0x0153 }, { 0x13bd, 0x0153 },
{ 0x13be, 0x0178 }, { 0x13be, 0x0178 },
{ 0x20ac, 0x20ac }, { 0x20ac, 0x20ac },
// dead keys
{ 0xfe50, '`' }, { 0xfe50, '`' },
{ 0xfe51, 0x00b4 }, { 0xfe51, 0x00b4 },
{ 0xfe52, '^' }, { 0xfe52, '^' },
@ -843,9 +842,6 @@ static const struct codepair {
{ 0xfe5d, 0x037a }, { 0xfe5d, 0x037a },
{ 0xfe5e, 0x309b }, { 0xfe5e, 0x309b },
{ 0xfe5f, 0x309c }, { 0xfe5f, 0x309c },
// { 0xfe60, 0x0323 }, // XK_dead_belowdot
// { 0xfe61, 0x0309 }, // XK_dead_hook
// { 0xfe62, 0x031b }, // XK_dead_horn
{ 0xfe63, '/' }, { 0xfe63, '/' },
{ 0xfe64, 0x02bc }, { 0xfe64, 0x02bc },
{ 0xfe65, 0x02bd }, { 0xfe65, 0x02bd },
@ -854,12 +850,8 @@ static const struct codepair {
{ 0xfe68, 0x02cd }, { 0xfe68, 0x02cd },
{ 0xfe69, 0xa788 }, { 0xfe69, 0xa788 },
{ 0xfe6a, 0x02f7 }, { 0xfe6a, 0x02f7 },
// { 0xfe6b, 0x032e }, // XK_dead_belowbreve
// { 0xfe6c, 0x0324 }, // XK_dead_belowdiaeresis
// { 0xfe6d, 0x0311 }, // XK_dead_invertedbreve
{ 0xfe6e, ',' }, { 0xfe6e, ',' },
{ 0xfe6f, 0x00a4 }, { 0xfe6f, 0x00a4 },
// dead vowels for universal syllable entry
{ 0xfe80, 'a' }, // XK_dead_a { 0xfe80, 'a' }, // XK_dead_a
{ 0xfe81, 'A' }, // XK_dead_A { 0xfe81, 'A' }, // XK_dead_A
{ 0xfe82, 'e' }, // XK_dead_e { 0xfe82, 'e' }, // XK_dead_e
@ -872,14 +864,10 @@ static const struct codepair {
{ 0xfe89, 'U' }, // XK_dead_U { 0xfe89, 'U' }, // XK_dead_U
{ 0xfe8a, 0x0259 }, { 0xfe8a, 0x0259 },
{ 0xfe8b, 0x018f }, { 0xfe8b, 0x018f },
// other
{ 0xfe8c, 0x00b5 }, { 0xfe8c, 0x00b5 },
// extra dead elements for German T3 layout
{ 0xfe90, '_' }, { 0xfe90, '_' },
{ 0xfe91, 0x02c8 }, { 0xfe91, 0x02c8 },
{ 0xfe92, 0x02cc }, { 0xfe92, 0x02cc },
// { 0xfe93, 0x0338 }, // XK_dead_longsolidusoverlay
// Numeric keypad with numlock on
{ 0xff80 /*XKB_KEY_KP_Space*/, ' ' }, { 0xff80 /*XKB_KEY_KP_Space*/, ' ' },
{ 0xff95 /*XKB_KEY_KP_7*/, 0x0037 }, { 0xff95 /*XKB_KEY_KP_7*/, 0x0037 },
{ 0xff96 /*XKB_KEY_KP_4*/, 0x0034 }, { 0xff96 /*XKB_KEY_KP_4*/, 0x0034 },