|  |  |  | @ -68,16 +68,20 @@ static void initLibraries(void) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | static void updateKeyCodeLUT(void) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |     int i, keyCode, keyCodeGLFW; | 
			
		
	
		
			
				
					|  |  |  |  | #if defined(_GLFW_HAS_XKB) | 
			
		
	
		
			
				
					|  |  |  |  |     int keyCode, keyCodeGLFW; | 
			
		
	
		
			
				
					|  |  |  |  |     char name[XkbKeyNameLength+1]; | 
			
		
	
		
			
				
					|  |  |  |  |     XkbDescPtr descr; | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  |     int i; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // Clear the LUT
 | 
			
		
	
		
			
				
					|  |  |  |  |     for (i = 0; i < 256; ++i) | 
			
		
	
		
			
				
					|  |  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |  |         _glfwLibrary.X11.Xkb.keyCodeLUT[i] = -1; | 
			
		
	
		
			
				
					|  |  |  |  |         _glfwLibrary.X11.keyCodeLUT[i] = -1; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #if defined(_GLFW_HAS_XKB) | 
			
		
	
		
			
				
					|  |  |  |  |     // This functionality requires the Xkb extension
 | 
			
		
	
		
			
				
					|  |  |  |  |     if (!_glfwLibrary.X11.Xkb.available) | 
			
		
	
		
			
				
					|  |  |  |  |     { | 
			
		
	
	
		
			
				
					|  |  |  | @ -154,12 +158,13 @@ static void updateKeyCodeLUT(void) | 
			
		
	
		
			
				
					|  |  |  |  |         // Update the key code LUT
 | 
			
		
	
		
			
				
					|  |  |  |  |         if ((keyCode >= 0) && (keyCode < 256)) | 
			
		
	
		
			
				
					|  |  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |  |             _glfwLibrary.X11.Xkb.keyCodeLUT[keyCode] = keyCodeGLFW; | 
			
		
	
		
			
				
					|  |  |  |  |             _glfwLibrary.X11.keyCodeLUT[keyCode] = keyCodeGLFW; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // Free the keyboard description
 | 
			
		
	
		
			
				
					|  |  |  |  |     XkbFreeKeyboard(descr, 0, True); | 
			
		
	
		
			
				
					|  |  |  |  | #endif /* _GLFW_HAS_XKB */ | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -228,6 +233,7 @@ static GLboolean initDisplay(void) | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // Check if Xkb is supported on this display
 | 
			
		
	
		
			
				
					|  |  |  |  | #if defined(_GLFW_HAS_XKB) | 
			
		
	
		
			
				
					|  |  |  |  |     _glfwLibrary.X11.Xkb.majorVersion = 1; | 
			
		
	
		
			
				
					|  |  |  |  |     _glfwLibrary.X11.Xkb.minorVersion = 0; | 
			
		
	
		
			
				
					|  |  |  |  |     _glfwLibrary.X11.Xkb.available = | 
			
		
	
	
		
			
				
					|  |  |  | @ -237,6 +243,9 @@ static GLboolean initDisplay(void) | 
			
		
	
		
			
				
					|  |  |  |  |                           &_glfwLibrary.X11.Xkb.errorBase, | 
			
		
	
		
			
				
					|  |  |  |  |                           &_glfwLibrary.X11.Xkb.majorVersion, | 
			
		
	
		
			
				
					|  |  |  |  |                           &_glfwLibrary.X11.Xkb.minorVersion); | 
			
		
	
		
			
				
					|  |  |  |  | #else | 
			
		
	
		
			
				
					|  |  |  |  |     _glfwLibrary.X11.Xkb.available = GL_FALSE; | 
			
		
	
		
			
				
					|  |  |  |  | #endif /* _GLFW_HAS_XKB */ | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // Update the key code LUT
 | 
			
		
	
		
			
				
					|  |  |  |  |     // FIXME: We should listen to XkbMapNotify events to track changes to
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |