mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 09:52:27 -04:00
filter out certain control buttons used by the ime when the ime is active
This commit is contained in:
parent
fb9bde8cca
commit
c2b43d6bba
@ -271,6 +271,7 @@ set_window_handle(HWND hwnd) {
|
||||
|
||||
// Determine the initial open status of the IME.
|
||||
_ime_open = false;
|
||||
_ime_active = false;
|
||||
HIMC hIMC = ImmGetContext(hwnd);
|
||||
if (hIMC != 0) {
|
||||
_ime_open = (ImmGetOpenStatus(hIMC) != 0);
|
||||
@ -350,6 +351,9 @@ window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
|
||||
HIMC hIMC = ImmGetContext(hwnd);
|
||||
nassertr(hIMC != 0, 0);
|
||||
_ime_open = (ImmGetOpenStatus(hIMC) != 0);
|
||||
if (!_ime_open) {
|
||||
_ime_active = false; // Sanity enforcement.
|
||||
}
|
||||
ImmReleaseContext(hwnd, hIMC);
|
||||
}
|
||||
break;
|
||||
@ -359,12 +363,14 @@ window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
|
||||
// explicit DX support for overlay windows now, so we'll be able
|
||||
// to see the IME window.
|
||||
_dxgsg->support_overlay_window(true);
|
||||
_ime_active = true;
|
||||
break;
|
||||
|
||||
case WM_IME_ENDCOMPOSITION:
|
||||
// Turn off the support for overlay windows, since we're done
|
||||
// with the IME window for now and it just slows things down.
|
||||
_dxgsg->support_overlay_window(false);
|
||||
_ime_active = false;
|
||||
break;
|
||||
|
||||
case WM_IME_COMPOSITION:
|
||||
@ -960,7 +966,7 @@ void wdxGraphicsWindow::reactivate_window(void) {
|
||||
// Description:
|
||||
////////////////////////////////////////////////////////////////////
|
||||
wdxGraphicsWindow::wdxGraphicsWindow(GraphicsPipe* pipe) : GraphicsWindow(pipe) {
|
||||
_ime_open = false;
|
||||
_ime_active = false;
|
||||
_pParentWindowGroup=NULL;
|
||||
_pParentWindowGroup=new wdxGraphicsWindowGroup(this);
|
||||
}
|
||||
@ -2657,15 +2663,25 @@ TypeHandle wdxGraphicsWindow::get_type(void) const {
|
||||
////////////////////////////////////////////////////////////////////
|
||||
ButtonHandle wdxGraphicsWindow::
|
||||
lookup_key(WPARAM wparam) const {
|
||||
// First, check for a few buttons that we filter out when the IME
|
||||
// window is open.
|
||||
if (!_ime_active) {
|
||||
switch(wparam) {
|
||||
case VK_BACK: return KeyboardButton::backspace();
|
||||
case VK_DELETE: return KeyboardButton::del();
|
||||
case VK_ESCAPE: return KeyboardButton::escape();
|
||||
case VK_SPACE: return KeyboardButton::space();
|
||||
case VK_UP: return KeyboardButton::up();
|
||||
case VK_DOWN: return KeyboardButton::down();
|
||||
case VK_LEFT: return KeyboardButton::left();
|
||||
case VK_RIGHT: return KeyboardButton::right();
|
||||
}
|
||||
}
|
||||
|
||||
// Now check for the rest of the buttons, including the ones that
|
||||
// we allow through even when the IME window is open.
|
||||
switch(wparam) {
|
||||
case VK_BACK: return KeyboardButton::backspace();
|
||||
case VK_TAB: return KeyboardButton::tab();
|
||||
case VK_ESCAPE: return KeyboardButton::escape();
|
||||
case VK_SPACE: return KeyboardButton::space();
|
||||
case VK_UP: return KeyboardButton::up();
|
||||
case VK_DOWN: return KeyboardButton::down();
|
||||
case VK_LEFT: return KeyboardButton::left();
|
||||
case VK_RIGHT: return KeyboardButton::right();
|
||||
case VK_PRIOR: return KeyboardButton::page_up();
|
||||
case VK_NEXT: return KeyboardButton::page_down();
|
||||
case VK_HOME: return KeyboardButton::home();
|
||||
@ -2683,7 +2699,6 @@ lookup_key(WPARAM wparam) const {
|
||||
case VK_F11: return KeyboardButton::f11();
|
||||
case VK_F12: return KeyboardButton::f12();
|
||||
case VK_INSERT: return KeyboardButton::insert();
|
||||
case VK_DELETE: return KeyboardButton::del();
|
||||
case VK_CAPITAL: return KeyboardButton::caps_lock();
|
||||
case VK_NUMLOCK: return KeyboardButton::num_lock();
|
||||
case VK_SCROLL: return KeyboardButton::scroll_lock();
|
||||
|
@ -127,6 +127,7 @@ private:
|
||||
bool _mouse_passive_motion_enabled;
|
||||
bool _mouse_entry_enabled;
|
||||
bool _ime_open;
|
||||
bool _ime_active;
|
||||
bool _ime_composition_w;
|
||||
bool _exiting_window;
|
||||
bool _window_inactive;
|
||||
|
@ -513,6 +513,7 @@ void wglGraphicsWindow::config() {
|
||||
|
||||
// Determine the initial open status of the IME.
|
||||
_ime_open = false;
|
||||
_ime_active = false;
|
||||
HIMC hIMC = ImmGetContext(_mwindow);
|
||||
if (hIMC != 0) {
|
||||
_ime_open = (ImmGetOpenStatus(hIMC) != 0);
|
||||
@ -1663,10 +1664,21 @@ window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
|
||||
HIMC hIMC = ImmGetContext(hwnd);
|
||||
nassertr(hIMC != 0, 0);
|
||||
_ime_open = (ImmGetOpenStatus(hIMC) != 0);
|
||||
if (!_ime_open) {
|
||||
_ime_active = false; // Sanity enforcement.
|
||||
}
|
||||
ImmReleaseContext(hwnd, hIMC);
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_IME_STARTCOMPOSITION:
|
||||
_ime_active = true;
|
||||
break;
|
||||
|
||||
case WM_IME_ENDCOMPOSITION:
|
||||
_ime_active = false;
|
||||
break;
|
||||
|
||||
case WM_IME_COMPOSITION:
|
||||
if (lparam & GCS_RESULTSTR) {
|
||||
if (!_input_devices.empty()) {
|
||||
@ -1912,15 +1924,25 @@ window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
|
||||
////////////////////////////////////////////////////////////////////
|
||||
ButtonHandle wglGraphicsWindow::
|
||||
lookup_key(WPARAM wparam) const {
|
||||
// First, check for a few buttons that we filter out when the IME
|
||||
// window is open.
|
||||
if (!_ime_active) {
|
||||
switch(wparam) {
|
||||
case VK_BACK: return KeyboardButton::backspace();
|
||||
case VK_DELETE: return KeyboardButton::del();
|
||||
case VK_ESCAPE: return KeyboardButton::escape();
|
||||
case VK_SPACE: return KeyboardButton::space();
|
||||
case VK_UP: return KeyboardButton::up();
|
||||
case VK_DOWN: return KeyboardButton::down();
|
||||
case VK_LEFT: return KeyboardButton::left();
|
||||
case VK_RIGHT: return KeyboardButton::right();
|
||||
}
|
||||
}
|
||||
|
||||
// Now check for the rest of the buttons, including the ones that
|
||||
// we allow through even when the IME window is open.
|
||||
switch(wparam) {
|
||||
case VK_BACK: return KeyboardButton::backspace();
|
||||
case VK_TAB: return KeyboardButton::tab();
|
||||
case VK_ESCAPE: return KeyboardButton::escape();
|
||||
case VK_SPACE: return KeyboardButton::space();
|
||||
case VK_UP: return KeyboardButton::up();
|
||||
case VK_DOWN: return KeyboardButton::down();
|
||||
case VK_LEFT: return KeyboardButton::left();
|
||||
case VK_RIGHT: return KeyboardButton::right();
|
||||
case VK_PRIOR: return KeyboardButton::page_up();
|
||||
case VK_NEXT: return KeyboardButton::page_down();
|
||||
case VK_HOME: return KeyboardButton::home();
|
||||
@ -1938,7 +1960,6 @@ lookup_key(WPARAM wparam) const {
|
||||
case VK_F11: return KeyboardButton::f11();
|
||||
case VK_F12: return KeyboardButton::f12();
|
||||
case VK_INSERT: return KeyboardButton::insert();
|
||||
case VK_DELETE: return KeyboardButton::del();
|
||||
case VK_CAPITAL: return KeyboardButton::caps_lock();
|
||||
case VK_NUMLOCK: return KeyboardButton::num_lock();
|
||||
case VK_SCROLL: return KeyboardButton::scroll_lock();
|
||||
|
@ -131,6 +131,7 @@ private:
|
||||
bool _mouse_passive_motion_enabled;
|
||||
bool _mouse_entry_enabled;
|
||||
bool _ime_open;
|
||||
bool _ime_active;
|
||||
bool _ime_composition_w;
|
||||
|
||||
// vars for frames/sec meter
|
||||
|
Loading…
x
Reference in New Issue
Block a user