Changeset View
Changeset View
Standalone View
Standalone View
intern/ghost/intern/GHOST_SystemWin32.cpp
| Show First 20 Lines • Show All 1,213 Lines • ▼ Show 20 Lines | if (!is_repeated_modifier) { | ||||
| if (!keyDown) { | if (!keyDown) { | ||||
| utf8_char[0] = '\0'; | utf8_char[0] = '\0'; | ||||
| ascii = '\0'; | ascii = '\0'; | ||||
| } | } | ||||
| else { | else { | ||||
| ascii = utf8_char[0] & 0x80 ? '?' : utf8_char[0]; | ascii = utf8_char[0] & 0x80 ? '?' : utf8_char[0]; | ||||
| } | } | ||||
| #ifdef WITH_INPUT_IME | |||||
| if (window->getImeInput()->IsImeKeyEvent(ascii)) { | |||||
| return NULL; | |||||
| } | |||||
| #endif /* WITH_INPUT_IME */ | |||||
| event = new GHOST_EventKey(system->getMilliSeconds(), | event = new GHOST_EventKey(system->getMilliSeconds(), | ||||
| keyDown ? GHOST_kEventKeyDown : GHOST_kEventKeyUp, | keyDown ? GHOST_kEventKeyDown : GHOST_kEventKeyUp, | ||||
| window, | window, | ||||
| key, | key, | ||||
| ascii, | ascii, | ||||
| utf8_char, | utf8_char, | ||||
| is_repeat); | is_repeat); | ||||
| // GHOST_PRINTF("%c\n", ascii); // we already get this info via EventPrinter | // GHOST_PRINTF("%c\n", ascii); // we already get this info via EventPrinter | ||||
| } | } | ||||
| else { | else { | ||||
sntulix: A key "." of QWERTY part of keyboard (jp106) is converted to "。" (utf8code: E3 80 82) by… | |||||
| event = NULL; | event = NULL; | ||||
| } | } | ||||
| return event; | return event; | ||||
| } | } | ||||
Not Done Inline ActionsThis logic could be moved together with the other IME code in GHOST_ImeWin32.cpp, so this becomes something like: if (window->getImeInput()->IgnoreKeyEvent(ascii)) {
return NULL
}brecht: This logic could be moved together with the other IME code in `GHOST_ImeWin32.cpp`, so this… | |||||
| GHOST_Event *GHOST_SystemWin32::processWindowSizeEvent(GHOST_WindowWin32 *window) | GHOST_Event *GHOST_SystemWin32::processWindowSizeEvent(GHOST_WindowWin32 *window) | ||||
| { | { | ||||
| GHOST_SystemWin32 *system = (GHOST_SystemWin32 *)getSystem(); | GHOST_SystemWin32 *system = (GHOST_SystemWin32 *)getSystem(); | ||||
| GHOST_Event *sizeEvent = new GHOST_Event( | GHOST_Event *sizeEvent = new GHOST_Event( | ||||
| system->getMilliSeconds(), GHOST_kEventWindowSize, window); | system->getMilliSeconds(), GHOST_kEventWindowSize, window); | ||||
| /* We get WM_SIZE before we fully init. Do not dispatch before we are continuously resizing. */ | /* We get WM_SIZE before we fully init. Do not dispatch before we are continuously resizing. */ | ||||
| if (window->m_inLiveResize) { | if (window->m_inLiveResize) { | ||||
| ▲ Show 20 Lines • Show All 167 Lines • ▼ Show 20 Lines | if (hwnd) { | ||||
| GHOST_WindowWin32 *window = (GHOST_WindowWin32 *)::GetWindowLongPtr(hwnd, GWLP_USERDATA); | GHOST_WindowWin32 *window = (GHOST_WindowWin32 *)::GetWindowLongPtr(hwnd, GWLP_USERDATA); | ||||
| if (window) { | if (window) { | ||||
| switch (msg) { | switch (msg) { | ||||
| // we need to check if new key layout has AltGr | // we need to check if new key layout has AltGr | ||||
| case WM_INPUTLANGCHANGE: { | case WM_INPUTLANGCHANGE: { | ||||
| system->handleKeyboardChange(); | system->handleKeyboardChange(); | ||||
| #ifdef WITH_INPUT_IME | #ifdef WITH_INPUT_IME | ||||
| window->getImeInput()->SetInputLanguage(); | window->getImeInput()->SetInputLanguage(); | ||||
| window->getImeInput()->UpdateConversionStatus(hwnd); | |||||
| #endif | #endif | ||||
| break; | break; | ||||
| } | } | ||||
| //////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////// | ||||
| // Keyboard events, processed | // Keyboard events, processed | ||||
| //////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////// | ||||
| case WM_INPUT: { | case WM_INPUT: { | ||||
| RAWINPUT raw; | RAWINPUT raw; | ||||
| RAWINPUT *raw_ptr = &raw; | RAWINPUT *raw_ptr = &raw; | ||||
| UINT rawSize = sizeof(RAWINPUT); | UINT rawSize = sizeof(RAWINPUT); | ||||
| GetRawInputData((HRAWINPUT)lParam, RID_INPUT, raw_ptr, &rawSize, sizeof(RAWINPUTHEADER)); | GetRawInputData((HRAWINPUT)lParam, RID_INPUT, raw_ptr, &rawSize, sizeof(RAWINPUTHEADER)); | ||||
| switch (raw.header.dwType) { | switch (raw.header.dwType) { | ||||
| case RIM_TYPEKEYBOARD: | case RIM_TYPEKEYBOARD: | ||||
| event = processKeyEvent(window, raw); | event = processKeyEvent(window, raw); | ||||
| if (!event) { | if (!event) { | ||||
| GHOST_PRINT("GHOST_SystemWin32::wndProc: key event "); | GHOST_PRINT("GHOST_SystemWin32::wndProc: key event "); | ||||
| GHOST_PRINT(msg); | GHOST_PRINT(msg); | ||||
Not Done Inline ActionsUpdateConversionStatus is now called only on language change or IME notify events. Should it also be called when the window is initially created? brecht: `UpdateConversionStatus` is now called only on language change or IME notify events. Should it… | |||||
| GHOST_PRINT(" key ignored\n"); | GHOST_PRINT(" key ignored\n"); | ||||
| } | } | ||||
| break; | break; | ||||
| #ifdef WITH_INPUT_NDOF | #ifdef WITH_INPUT_NDOF | ||||
| case RIM_TYPEHID: | case RIM_TYPEHID: | ||||
| if (system->processNDOF(raw)) { | if (system->processNDOF(raw)) { | ||||
| eventHandled = true; | eventHandled = true; | ||||
| } | } | ||||
| break; | break; | ||||
| #endif | #endif | ||||
| } | } | ||||
| break; | break; | ||||
| } | } | ||||
| #ifdef WITH_INPUT_IME | #ifdef WITH_INPUT_IME | ||||
| //////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////// | ||||
| // IME events, processed, read more in GHOST_IME.h | // IME events, processed, read more in GHOST_IME.h | ||||
| //////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////// | ||||
| case WM_IME_NOTIFY: { | |||||
| /* Update conversion status when IME is changed or input mode is changed. */ | |||||
| if (wParam == IMN_SETOPENSTATUS || wParam == IMN_SETCONVERSIONMODE) { | |||||
| window->getImeInput()->UpdateConversionStatus(hwnd); | |||||
| } | |||||
| break; | |||||
| } | |||||
| case WM_IME_SETCONTEXT: { | case WM_IME_SETCONTEXT: { | ||||
| GHOST_ImeWin32 *ime = window->getImeInput(); | GHOST_ImeWin32 *ime = window->getImeInput(); | ||||
| ime->SetInputLanguage(); | ime->SetInputLanguage(); | ||||
| ime->CreateImeWindow(hwnd); | ime->CreateImeWindow(hwnd); | ||||
| ime->CleanupComposition(hwnd); | ime->CleanupComposition(hwnd); | ||||
| ime->CheckFirst(hwnd); | ime->CheckFirst(hwnd); | ||||
| break; | break; | ||||
| } | } | ||||
| case WM_IME_STARTCOMPOSITION: { | case WM_IME_STARTCOMPOSITION: { | ||||
| GHOST_ImeWin32 *ime = window->getImeInput(); | GHOST_ImeWin32 *ime = window->getImeInput(); | ||||
| eventHandled = true; | eventHandled = true; | ||||
| /* remove input event before start comp event, avoid redundant input */ | |||||
| eventManager->removeTypeEvents(GHOST_kEventKeyDown, window); | |||||
| ime->CreateImeWindow(hwnd); | ime->CreateImeWindow(hwnd); | ||||
| ime->ResetComposition(hwnd); | ime->ResetComposition(hwnd); | ||||
| event = processImeEvent(GHOST_kEventImeCompositionStart, window, &ime->eventImeData); | event = processImeEvent(GHOST_kEventImeCompositionStart, window, &ime->eventImeData); | ||||
| break; | break; | ||||
| } | } | ||||
| case WM_IME_COMPOSITION: { | case WM_IME_COMPOSITION: { | ||||
| GHOST_ImeWin32 *ime = window->getImeInput(); | GHOST_ImeWin32 *ime = window->getImeInput(); | ||||
| eventHandled = true; | eventHandled = true; | ||||
| ▲ Show 20 Lines • Show All 762 Lines • Show Last 20 Lines | |||||
A key "." of QWERTY part of keyboard (jp106) is converted to "。" (utf8code: E3 80 82) by Chinese IME.
But the key "." of numpad part of keyboard (jp106) is "." (code: 0x2e).