mirror of
				https://github.com/glfw/glfw.git
				synced 2025-10-31 04:32:26 +00:00 
			
		
		
		
	
							parent
							
								
									c8ea64976f
								
							
						
					
					
						commit
						186d03b32a
					
				| @ -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 | ||||||
|  | |||||||
| @ -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
 | ||||||
|  | |||||||
| @ -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; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -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 }, | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user