mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -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.
|
// Determine the initial open status of the IME.
|
||||||
_ime_open = false;
|
_ime_open = false;
|
||||||
|
_ime_active = false;
|
||||||
HIMC hIMC = ImmGetContext(hwnd);
|
HIMC hIMC = ImmGetContext(hwnd);
|
||||||
if (hIMC != 0) {
|
if (hIMC != 0) {
|
||||||
_ime_open = (ImmGetOpenStatus(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);
|
HIMC hIMC = ImmGetContext(hwnd);
|
||||||
nassertr(hIMC != 0, 0);
|
nassertr(hIMC != 0, 0);
|
||||||
_ime_open = (ImmGetOpenStatus(hIMC) != 0);
|
_ime_open = (ImmGetOpenStatus(hIMC) != 0);
|
||||||
|
if (!_ime_open) {
|
||||||
|
_ime_active = false; // Sanity enforcement.
|
||||||
|
}
|
||||||
ImmReleaseContext(hwnd, hIMC);
|
ImmReleaseContext(hwnd, hIMC);
|
||||||
}
|
}
|
||||||
break;
|
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
|
// explicit DX support for overlay windows now, so we'll be able
|
||||||
// to see the IME window.
|
// to see the IME window.
|
||||||
_dxgsg->support_overlay_window(true);
|
_dxgsg->support_overlay_window(true);
|
||||||
|
_ime_active = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_IME_ENDCOMPOSITION:
|
case WM_IME_ENDCOMPOSITION:
|
||||||
// Turn off the support for overlay windows, since we're done
|
// Turn off the support for overlay windows, since we're done
|
||||||
// with the IME window for now and it just slows things down.
|
// with the IME window for now and it just slows things down.
|
||||||
_dxgsg->support_overlay_window(false);
|
_dxgsg->support_overlay_window(false);
|
||||||
|
_ime_active = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_IME_COMPOSITION:
|
case WM_IME_COMPOSITION:
|
||||||
@ -960,7 +966,7 @@ void wdxGraphicsWindow::reactivate_window(void) {
|
|||||||
// Description:
|
// Description:
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
wdxGraphicsWindow::wdxGraphicsWindow(GraphicsPipe* pipe) : GraphicsWindow(pipe) {
|
wdxGraphicsWindow::wdxGraphicsWindow(GraphicsPipe* pipe) : GraphicsWindow(pipe) {
|
||||||
_ime_open = false;
|
_ime_active = false;
|
||||||
_pParentWindowGroup=NULL;
|
_pParentWindowGroup=NULL;
|
||||||
_pParentWindowGroup=new wdxGraphicsWindowGroup(this);
|
_pParentWindowGroup=new wdxGraphicsWindowGroup(this);
|
||||||
}
|
}
|
||||||
@ -2657,15 +2663,25 @@ TypeHandle wdxGraphicsWindow::get_type(void) const {
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
ButtonHandle wdxGraphicsWindow::
|
ButtonHandle wdxGraphicsWindow::
|
||||||
lookup_key(WPARAM wparam) const {
|
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) {
|
switch(wparam) {
|
||||||
case VK_BACK: return KeyboardButton::backspace();
|
case VK_BACK: return KeyboardButton::backspace();
|
||||||
case VK_TAB: return KeyboardButton::tab();
|
case VK_DELETE: return KeyboardButton::del();
|
||||||
case VK_ESCAPE: return KeyboardButton::escape();
|
case VK_ESCAPE: return KeyboardButton::escape();
|
||||||
case VK_SPACE: return KeyboardButton::space();
|
case VK_SPACE: return KeyboardButton::space();
|
||||||
case VK_UP: return KeyboardButton::up();
|
case VK_UP: return KeyboardButton::up();
|
||||||
case VK_DOWN: return KeyboardButton::down();
|
case VK_DOWN: return KeyboardButton::down();
|
||||||
case VK_LEFT: return KeyboardButton::left();
|
case VK_LEFT: return KeyboardButton::left();
|
||||||
case VK_RIGHT: return KeyboardButton::right();
|
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_TAB: return KeyboardButton::tab();
|
||||||
case VK_PRIOR: return KeyboardButton::page_up();
|
case VK_PRIOR: return KeyboardButton::page_up();
|
||||||
case VK_NEXT: return KeyboardButton::page_down();
|
case VK_NEXT: return KeyboardButton::page_down();
|
||||||
case VK_HOME: return KeyboardButton::home();
|
case VK_HOME: return KeyboardButton::home();
|
||||||
@ -2683,7 +2699,6 @@ lookup_key(WPARAM wparam) const {
|
|||||||
case VK_F11: return KeyboardButton::f11();
|
case VK_F11: return KeyboardButton::f11();
|
||||||
case VK_F12: return KeyboardButton::f12();
|
case VK_F12: return KeyboardButton::f12();
|
||||||
case VK_INSERT: return KeyboardButton::insert();
|
case VK_INSERT: return KeyboardButton::insert();
|
||||||
case VK_DELETE: return KeyboardButton::del();
|
|
||||||
case VK_CAPITAL: return KeyboardButton::caps_lock();
|
case VK_CAPITAL: return KeyboardButton::caps_lock();
|
||||||
case VK_NUMLOCK: return KeyboardButton::num_lock();
|
case VK_NUMLOCK: return KeyboardButton::num_lock();
|
||||||
case VK_SCROLL: return KeyboardButton::scroll_lock();
|
case VK_SCROLL: return KeyboardButton::scroll_lock();
|
||||||
|
@ -127,6 +127,7 @@ private:
|
|||||||
bool _mouse_passive_motion_enabled;
|
bool _mouse_passive_motion_enabled;
|
||||||
bool _mouse_entry_enabled;
|
bool _mouse_entry_enabled;
|
||||||
bool _ime_open;
|
bool _ime_open;
|
||||||
|
bool _ime_active;
|
||||||
bool _ime_composition_w;
|
bool _ime_composition_w;
|
||||||
bool _exiting_window;
|
bool _exiting_window;
|
||||||
bool _window_inactive;
|
bool _window_inactive;
|
||||||
|
@ -513,6 +513,7 @@ void wglGraphicsWindow::config() {
|
|||||||
|
|
||||||
// Determine the initial open status of the IME.
|
// Determine the initial open status of the IME.
|
||||||
_ime_open = false;
|
_ime_open = false;
|
||||||
|
_ime_active = false;
|
||||||
HIMC hIMC = ImmGetContext(_mwindow);
|
HIMC hIMC = ImmGetContext(_mwindow);
|
||||||
if (hIMC != 0) {
|
if (hIMC != 0) {
|
||||||
_ime_open = (ImmGetOpenStatus(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);
|
HIMC hIMC = ImmGetContext(hwnd);
|
||||||
nassertr(hIMC != 0, 0);
|
nassertr(hIMC != 0, 0);
|
||||||
_ime_open = (ImmGetOpenStatus(hIMC) != 0);
|
_ime_open = (ImmGetOpenStatus(hIMC) != 0);
|
||||||
|
if (!_ime_open) {
|
||||||
|
_ime_active = false; // Sanity enforcement.
|
||||||
|
}
|
||||||
ImmReleaseContext(hwnd, hIMC);
|
ImmReleaseContext(hwnd, hIMC);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_IME_STARTCOMPOSITION:
|
||||||
|
_ime_active = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_IME_ENDCOMPOSITION:
|
||||||
|
_ime_active = false;
|
||||||
|
break;
|
||||||
|
|
||||||
case WM_IME_COMPOSITION:
|
case WM_IME_COMPOSITION:
|
||||||
if (lparam & GCS_RESULTSTR) {
|
if (lparam & GCS_RESULTSTR) {
|
||||||
if (!_input_devices.empty()) {
|
if (!_input_devices.empty()) {
|
||||||
@ -1912,15 +1924,25 @@ window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
ButtonHandle wglGraphicsWindow::
|
ButtonHandle wglGraphicsWindow::
|
||||||
lookup_key(WPARAM wparam) const {
|
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) {
|
switch(wparam) {
|
||||||
case VK_BACK: return KeyboardButton::backspace();
|
case VK_BACK: return KeyboardButton::backspace();
|
||||||
case VK_TAB: return KeyboardButton::tab();
|
case VK_DELETE: return KeyboardButton::del();
|
||||||
case VK_ESCAPE: return KeyboardButton::escape();
|
case VK_ESCAPE: return KeyboardButton::escape();
|
||||||
case VK_SPACE: return KeyboardButton::space();
|
case VK_SPACE: return KeyboardButton::space();
|
||||||
case VK_UP: return KeyboardButton::up();
|
case VK_UP: return KeyboardButton::up();
|
||||||
case VK_DOWN: return KeyboardButton::down();
|
case VK_DOWN: return KeyboardButton::down();
|
||||||
case VK_LEFT: return KeyboardButton::left();
|
case VK_LEFT: return KeyboardButton::left();
|
||||||
case VK_RIGHT: return KeyboardButton::right();
|
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_TAB: return KeyboardButton::tab();
|
||||||
case VK_PRIOR: return KeyboardButton::page_up();
|
case VK_PRIOR: return KeyboardButton::page_up();
|
||||||
case VK_NEXT: return KeyboardButton::page_down();
|
case VK_NEXT: return KeyboardButton::page_down();
|
||||||
case VK_HOME: return KeyboardButton::home();
|
case VK_HOME: return KeyboardButton::home();
|
||||||
@ -1938,7 +1960,6 @@ lookup_key(WPARAM wparam) const {
|
|||||||
case VK_F11: return KeyboardButton::f11();
|
case VK_F11: return KeyboardButton::f11();
|
||||||
case VK_F12: return KeyboardButton::f12();
|
case VK_F12: return KeyboardButton::f12();
|
||||||
case VK_INSERT: return KeyboardButton::insert();
|
case VK_INSERT: return KeyboardButton::insert();
|
||||||
case VK_DELETE: return KeyboardButton::del();
|
|
||||||
case VK_CAPITAL: return KeyboardButton::caps_lock();
|
case VK_CAPITAL: return KeyboardButton::caps_lock();
|
||||||
case VK_NUMLOCK: return KeyboardButton::num_lock();
|
case VK_NUMLOCK: return KeyboardButton::num_lock();
|
||||||
case VK_SCROLL: return KeyboardButton::scroll_lock();
|
case VK_SCROLL: return KeyboardButton::scroll_lock();
|
||||||
|
@ -131,6 +131,7 @@ private:
|
|||||||
bool _mouse_passive_motion_enabled;
|
bool _mouse_passive_motion_enabled;
|
||||||
bool _mouse_entry_enabled;
|
bool _mouse_entry_enabled;
|
||||||
bool _ime_open;
|
bool _ime_open;
|
||||||
|
bool _ime_active;
|
||||||
bool _ime_composition_w;
|
bool _ime_composition_w;
|
||||||
|
|
||||||
// vars for frames/sec meter
|
// vars for frames/sec meter
|
||||||
|
Loading…
x
Reference in New Issue
Block a user