|  |  | @ -440,11 +440,11 @@ static int translateKey(WPARAM wParam, LPARAM lParam) | 
			
		
	
		
		
			
				
					
					|  |  |  |     DWORD msg_time; |  |  |  |     DWORD msg_time; | 
			
		
	
		
		
			
				
					
					|  |  |  |     DWORD scan_code; |  |  |  |     DWORD scan_code; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     // Check for numeric keypad keys
 |  |  |  |     // Check for numeric keypad keys.
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     // Note: This way we always force "NumLock = ON", which at least
 |  |  |  |     // Note: This way we always force "NumLock = ON", which is intentional
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     // enables GLFW users to detect numeric keypad keys
 |  |  |  |     // since the returned key code should correspond to a physical
 | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     // location.
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     int hiFlags = HIWORD(lParam); |  |  |  |     int hiFlags = HIWORD(lParam); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (!(hiFlags & 0x100)) |  |  |  |     if (!(hiFlags & 0x100)) | 
			
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |         switch (MapVirtualKey(hiFlags & 0xFF, 1)) |  |  |  |         switch (MapVirtualKey(hiFlags & 0xFF, 1)) | 
			
		
	
	
		
		
			
				
					|  |  | @ -464,6 +464,7 @@ static int translateKey(WPARAM wParam, LPARAM lParam) | 
			
		
	
		
		
			
				
					
					|  |  |  |             case VK_SUBTRACT: return GLFW_KEY_KP_SUBTRACT; |  |  |  |             case VK_SUBTRACT: return GLFW_KEY_KP_SUBTRACT; | 
			
		
	
		
		
			
				
					
					|  |  |  |             case VK_ADD:      return GLFW_KEY_KP_ADD; |  |  |  |             case VK_ADD:      return GLFW_KEY_KP_ADD; | 
			
		
	
		
		
			
				
					
					|  |  |  |             case VK_DELETE:   return GLFW_KEY_KP_DECIMAL; |  |  |  |             case VK_DELETE:   return GLFW_KEY_KP_DECIMAL; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             default:          break; | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -478,9 +479,9 @@ static int translateKey(WPARAM wParam, LPARAM lParam) | 
			
		
	
		
		
			
				
					
					|  |  |  |             // right)
 |  |  |  |             // right)
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             scan_code = MapVirtualKey(VK_RSHIFT, 0); |  |  |  |             scan_code = MapVirtualKey(VK_RSHIFT, 0); | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (((lParam & 0x01ff0000) >> 16) == scan_code) |  |  |  |             if (((lParam & 0x01ff0000) >> 16) == scan_code) | 
			
		
	
		
		
			
				
					
					|  |  |  |                 return GLFW_KEY_RSHIFT; |  |  |  |                 return GLFW_KEY_RIGHT_SHIFT; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             return GLFW_KEY_LSHIFT; |  |  |  |             return GLFW_KEY_LEFT_SHIFT; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         // The CTRL keys require special handling
 |  |  |  |         // The CTRL keys require special handling
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -488,7 +489,7 @@ static int translateKey(WPARAM wParam, LPARAM lParam) | 
			
		
	
		
		
			
				
					
					|  |  |  |         { |  |  |  |         { | 
			
		
	
		
		
			
				
					
					|  |  |  |             // Is this an extended key (i.e. right key)?
 |  |  |  |             // Is this an extended key (i.e. right key)?
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (lParam & 0x01000000) |  |  |  |             if (lParam & 0x01000000) | 
			
		
	
		
		
			
				
					
					|  |  |  |                 return GLFW_KEY_RCTRL; |  |  |  |                 return GLFW_KEY_RIGHT_CTRL; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             // Here is a trick: "Alt Gr" sends LCTRL, then RALT. We only
 |  |  |  |             // Here is a trick: "Alt Gr" sends LCTRL, then RALT. We only
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             // want the RALT message, so we try to see if the next message
 |  |  |  |             // want the RALT message, so we try to see if the next message
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -505,12 +506,12 @@ static int translateKey(WPARAM wParam, LPARAM lParam) | 
			
		
	
		
		
			
				
					
					|  |  |  |                     { |  |  |  |                     { | 
			
		
	
		
		
			
				
					
					|  |  |  |                         // Next message is a RALT down message, which
 |  |  |  |                         // Next message is a RALT down message, which
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                         // means that this is NOT a proper LCTRL message!
 |  |  |  |                         // means that this is NOT a proper LCTRL message!
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                         return GLFW_KEY_UNKNOWN; |  |  |  |                         return -1; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             return GLFW_KEY_LCTRL; |  |  |  |             return GLFW_KEY_LEFT_CTRL; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         // The ALT keys require special handling
 |  |  |  |         // The ALT keys require special handling
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -518,9 +519,9 @@ static int translateKey(WPARAM wParam, LPARAM lParam) | 
			
		
	
		
		
			
				
					
					|  |  |  |         { |  |  |  |         { | 
			
		
	
		
		
			
				
					
					|  |  |  |             // Is this an extended key (i.e. right key)?
 |  |  |  |             // Is this an extended key (i.e. right key)?
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (lParam & 0x01000000) |  |  |  |             if (lParam & 0x01000000) | 
			
		
	
		
		
			
				
					
					|  |  |  |                 return GLFW_KEY_RALT; |  |  |  |                 return GLFW_KEY_RIGHT_ALT; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             return GLFW_KEY_LALT; |  |  |  |             return GLFW_KEY_LEFT_ALT; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         // The ENTER keys require special handling
 |  |  |  |         // The ENTER keys require special handling
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -533,16 +534,16 @@ static int translateKey(WPARAM wParam, LPARAM lParam) | 
			
		
	
		
		
			
				
					
					|  |  |  |             return GLFW_KEY_ENTER; |  |  |  |             return GLFW_KEY_ENTER; | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         // Special keys (non character keys)
 |  |  |  |         // Funcion keys (non-printable keys)
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_ESCAPE:        return GLFW_KEY_ESC; |  |  |  |         case VK_ESCAPE:        return GLFW_KEY_ESCAPE; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         case VK_TAB:           return GLFW_KEY_TAB; |  |  |  |         case VK_TAB:           return GLFW_KEY_TAB; | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_BACK:          return GLFW_KEY_BACKSPACE; |  |  |  |         case VK_BACK:          return GLFW_KEY_BACKSPACE; | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_HOME:          return GLFW_KEY_HOME; |  |  |  |         case VK_HOME:          return GLFW_KEY_HOME; | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_END:           return GLFW_KEY_END; |  |  |  |         case VK_END:           return GLFW_KEY_END; | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_PRIOR:         return GLFW_KEY_PAGEUP; |  |  |  |         case VK_PRIOR:         return GLFW_KEY_PAGE_UP; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_NEXT:          return GLFW_KEY_PAGEDOWN; |  |  |  |         case VK_NEXT:          return GLFW_KEY_PAGE_DOWN; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         case VK_INSERT:        return GLFW_KEY_INSERT; |  |  |  |         case VK_INSERT:        return GLFW_KEY_INSERT; | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_DELETE:        return GLFW_KEY_DEL; |  |  |  |         case VK_DELETE:        return GLFW_KEY_DELETE; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         case VK_LEFT:          return GLFW_KEY_LEFT; |  |  |  |         case VK_LEFT:          return GLFW_KEY_LEFT; | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_UP:            return GLFW_KEY_UP; |  |  |  |         case VK_UP:            return GLFW_KEY_UP; | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_RIGHT:         return GLFW_KEY_RIGHT; |  |  |  |         case VK_RIGHT:         return GLFW_KEY_RIGHT; | 
			
		
	
	
		
		
			
				
					|  |  | @ -571,7 +572,13 @@ static int translateKey(WPARAM wParam, LPARAM lParam) | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_F22:           return GLFW_KEY_F22; |  |  |  |         case VK_F22:           return GLFW_KEY_F22; | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_F23:           return GLFW_KEY_F23; |  |  |  |         case VK_F23:           return GLFW_KEY_F23; | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_F24:           return GLFW_KEY_F24; |  |  |  |         case VK_F24:           return GLFW_KEY_F24; | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_SPACE:         return GLFW_KEY_SPACE; |  |  |  |         case VK_NUMLOCK:       return GLFW_KEY_NUM_LOCK; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case VK_CAPITAL:       return GLFW_KEY_CAPS_LOCK; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case VK_SCROLL:        return GLFW_KEY_SCROLL_LOCK; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case VK_PAUSE:         return GLFW_KEY_PAUSE; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case VK_LWIN:          return GLFW_KEY_LEFT_SUPER; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case VK_RWIN:          return GLFW_KEY_RIGHT_SUPER; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case VK_APPS:          return GLFW_KEY_MENU; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         // Numeric keypad
 |  |  |  |         // Numeric keypad
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_NUMPAD0:       return GLFW_KEY_KP_0; |  |  |  |         case VK_NUMPAD0:       return GLFW_KEY_KP_0; | 
			
		
	
	
		
		
			
				
					|  |  | @ -589,35 +596,63 @@ static int translateKey(WPARAM wParam, LPARAM lParam) | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_SUBTRACT:      return GLFW_KEY_KP_SUBTRACT; |  |  |  |         case VK_SUBTRACT:      return GLFW_KEY_KP_SUBTRACT; | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_ADD:           return GLFW_KEY_KP_ADD; |  |  |  |         case VK_ADD:           return GLFW_KEY_KP_ADD; | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_DECIMAL:       return GLFW_KEY_KP_DECIMAL; |  |  |  |         case VK_DECIMAL:       return GLFW_KEY_KP_DECIMAL; | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_NUMLOCK:       return GLFW_KEY_KP_NUM_LOCK; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_CAPITAL:       return GLFW_KEY_CAPS_LOCK; |  |  |  |         // Printable keys are mapped according to US layout
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_SCROLL:        return GLFW_KEY_SCROLL_LOCK; |  |  |  |         case VK_SPACE:         return GLFW_KEY_SPACE; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_PAUSE:         return GLFW_KEY_PAUSE; |  |  |  |         case 0x30:             return GLFW_KEY_0; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |         case 0x31:             return GLFW_KEY_1; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_LWIN:          return GLFW_KEY_LSUPER; |  |  |  |         case 0x32:             return GLFW_KEY_2; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_RWIN:          return GLFW_KEY_RSUPER; |  |  |  |         case 0x33:             return GLFW_KEY_3; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         case VK_APPS:          return GLFW_KEY_MENU; |  |  |  |         case 0x34:             return GLFW_KEY_4; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |         case 0x35:             return GLFW_KEY_5; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         // The rest (should be printable keys)
 |  |  |  |         case 0x36:             return GLFW_KEY_6; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         default: |  |  |  |         case 0x37:             return GLFW_KEY_7; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         { |  |  |  |         case 0x38:             return GLFW_KEY_8; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             // Convert to printable character (ISO-8859-1 or Unicode)
 |  |  |  |         case 0x39:             return GLFW_KEY_9; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             wParam = MapVirtualKey((UINT) wParam, 2) & 0x0000FFFF; |  |  |  |         case 0x41:             return GLFW_KEY_A; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |         case 0x42:             return GLFW_KEY_B; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             // Make sure that the character is uppercase
 |  |  |  |         case 0x43:             return GLFW_KEY_C; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             wParam = (WPARAM) CharUpperW((LPWSTR) wParam); |  |  |  |         case 0x44:             return GLFW_KEY_D; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |         case 0x45:             return GLFW_KEY_E; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             // Valid ISO-8859-1 character?
 |  |  |  |         case 0x46:             return GLFW_KEY_F; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             if ((wParam >=  32 && wParam <= 126) || |  |  |  |         case 0x47:             return GLFW_KEY_G; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 (wParam >= 160 && wParam <= 255)) |  |  |  |         case 0x48:             return GLFW_KEY_H; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             { |  |  |  |         case 0x49:             return GLFW_KEY_I; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 return (int) wParam; |  |  |  |         case 0x4A:             return GLFW_KEY_J; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |         case 0x4B:             return GLFW_KEY_K; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |         case 0x4C:             return GLFW_KEY_L; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             return GLFW_KEY_UNKNOWN; |  |  |  |         case 0x4D:             return GLFW_KEY_M; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         case 0x4E:             return GLFW_KEY_N; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0x4F:             return GLFW_KEY_O; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0x50:             return GLFW_KEY_P; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0x51:             return GLFW_KEY_Q; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0x52:             return GLFW_KEY_R; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0x53:             return GLFW_KEY_S; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0x54:             return GLFW_KEY_T; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0x55:             return GLFW_KEY_U; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0x56:             return GLFW_KEY_V; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0x57:             return GLFW_KEY_W; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0x58:             return GLFW_KEY_X; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0x59:             return GLFW_KEY_Y; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0x5A:             return GLFW_KEY_Z; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0xBD:             return GLFW_KEY_MINUS; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0xBB:             return GLFW_KEY_EQUAL; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0xDB:             return GLFW_KEY_LEFT_BRACKET; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0xDD:             return GLFW_KEY_RIGHT_BRACKET; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0xDC:             return GLFW_KEY_BACKSLASH; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0xBA:             return GLFW_KEY_SEMICOLON; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0xDE:             return GLFW_KEY_APOSTROPHE; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0xC0:             return GLFW_KEY_GRAVE_ACCENT; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0xBC:             return GLFW_KEY_COMMA; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0xBE:             return GLFW_KEY_PERIOD; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0xBF:             return GLFW_KEY_SLASH; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0xDF:             return GLFW_KEY_WORLD_1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 0xE2:             return GLFW_KEY_WORLD_2; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         default:               break; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     // No matching translation was found, so return -1
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     return -1; | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -791,8 +826,8 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, | 
			
		
	
		
		
			
				
					
					|  |  |  |             // Special trick: release both shift keys on SHIFT up event
 |  |  |  |             // Special trick: release both shift keys on SHIFT up event
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (wParam == VK_SHIFT) |  |  |  |             if (wParam == VK_SHIFT) | 
			
		
	
		
		
			
				
					
					|  |  |  |             { |  |  |  |             { | 
			
		
	
		
		
			
				
					
					|  |  |  |                 _glfwInputKey(window, GLFW_KEY_LSHIFT, GLFW_RELEASE); |  |  |  |                 _glfwInputKey(window, GLFW_KEY_LEFT_SHIFT, GLFW_RELEASE); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 _glfwInputKey(window, GLFW_KEY_RSHIFT, GLFW_RELEASE); |  |  |  |                 _glfwInputKey(window, GLFW_KEY_RIGHT_SHIFT, GLFW_RELEASE); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |             else |  |  |  |             else | 
			
		
	
		
		
			
				
					
					|  |  |  |                 _glfwInputKey(window, translateKey(wParam, lParam), GLFW_RELEASE); |  |  |  |                 _glfwInputKey(window, translateKey(wParam, lParam), GLFW_RELEASE); | 
			
		
	
	
		
		
			
				
					|  |  | 
 |