diff options
-rw-r--r-- | intern/ghost/intern/GHOST_SystemCocoa.mm | 1 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_SystemWin32.cpp | 45 |
2 files changed, 29 insertions, 17 deletions
diff --git a/intern/ghost/intern/GHOST_SystemCocoa.mm b/intern/ghost/intern/GHOST_SystemCocoa.mm index b92c3e73a88..a53c3d8f2ab 100644 --- a/intern/ghost/intern/GHOST_SystemCocoa.mm +++ b/intern/ghost/intern/GHOST_SystemCocoa.mm @@ -323,6 +323,7 @@ static GHOST_TKey convertKey(int rawCode, unichar recvChar, UInt16 keyAction) case ']': return GHOST_kKeyRightBracket; case '`': + case '<': /* The position of '`' is equivalent to this symbol in the French layout. */ return GHOST_kKeyAccentGrave; default: return GHOST_kKeyUnknown; diff --git a/intern/ghost/intern/GHOST_SystemWin32.cpp b/intern/ghost/intern/GHOST_SystemWin32.cpp index 5251dd01b29..9b5994ae5e7 100644 --- a/intern/ghost/intern/GHOST_SystemWin32.cpp +++ b/intern/ghost/intern/GHOST_SystemWin32.cpp @@ -69,9 +69,6 @@ #ifndef VK_COMMA # define VK_COMMA 0xBC #endif // VK_COMMA -#ifndef VK_QUOTE -# define VK_QUOTE 0xDE -#endif // VK_QUOTE #ifndef VK_BACK_QUOTE # define VK_BACK_QUOTE 0xC0 #endif // VK_BACK_QUOTE @@ -646,14 +643,32 @@ GHOST_TKey GHOST_SystemWin32::hardKey(RAWINPUT const &raw, GHOST_TKey GHOST_SystemWin32::processSpecialKey(short vKey, short scanCode) const { GHOST_TKey key = GHOST_kKeyUnknown; - switch (PRIMARYLANGID(m_langId)) { - case LANG_FRENCH: - if (vKey == VK_OEM_8) - key = GHOST_kKeyF13; // oem key; used purely for shortcuts . + char ch = (char)MapVirtualKeyA(vKey, MAPVK_VK_TO_CHAR); + switch (ch) { + case u'\"': + case u'\'': + key = GHOST_kKeyQuote; break; - case LANG_ENGLISH: - if (SUBLANGID(m_langId) == SUBLANG_ENGLISH_UK && vKey == VK_OEM_8) // "`¬" - key = GHOST_kKeyAccentGrave; + case u'.': + key = GHOST_kKeyNumpadPeriod; + break; + case u'/': + key = GHOST_kKeySlash; + break; + case u'`': + case u'²': + key = GHOST_kKeyAccentGrave; + break; + default: + if (vKey == VK_OEM_7) { + key = GHOST_kKeyQuote; + } + else if (vKey == VK_OEM_8) { + if (PRIMARYLANGID(m_langId) == LANG_FRENCH) { + /* oem key; used purely for shortcuts. */ + key = GHOST_kKeyF13; + } + } break; } @@ -788,9 +803,6 @@ GHOST_TKey GHOST_SystemWin32::convertKey(short vKey, short scanCode, short exten case VK_CLOSE_BRACKET: key = GHOST_kKeyRightBracket; break; - case VK_QUOTE: - key = GHOST_kKeyQuote; - break; case VK_GR_LESS: key = GHOST_kKeyGrLess; break; @@ -832,9 +844,6 @@ GHOST_TKey GHOST_SystemWin32::convertKey(short vKey, short scanCode, short exten case VK_CAPITAL: key = GHOST_kKeyCapsLock; break; - case VK_OEM_8: - key = ((GHOST_SystemWin32 *)getSystem())->processSpecialKey(vKey, scanCode); - break; case VK_MEDIA_PLAY_PAUSE: key = GHOST_kKeyMediaPlay; break; @@ -847,8 +856,10 @@ GHOST_TKey GHOST_SystemWin32::convertKey(short vKey, short scanCode, short exten case VK_MEDIA_NEXT_TRACK: key = GHOST_kKeyMediaLast; break; + case VK_OEM_7: + case VK_OEM_8: default: - key = GHOST_kKeyUnknown; + key = ((GHOST_SystemWin32 *)getSystem())->processSpecialKey(vKey, scanCode); break; } } |