X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2a47d3c193a8358f9be6a9249af28b6cb10eacff..a4fe6524851ebeed1f6d24e8e3fa53b706479ff6:/src/msw/window.cpp diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 437b7a3e87..7149e45154 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -1234,10 +1234,8 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) case WM_KEYDOWN: // If this has been processed by an event handler, // return 0 now (we've handled it). - if (MSWOnKeyDown((WORD) wParam, lParam)) - { - return 0; - } + if ( MSWOnKeyDown((WORD) wParam, lParam) ) + break; // we consider these message "not interesting" to OnChar if ( wParam == VK_SHIFT || wParam == VK_CONTROL ) @@ -1245,21 +1243,25 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) return Default(); } - // Avoid duplicate messages to OnChar for these special keys switch ( wParam ) { + // avoid duplicate messages to OnChar for these ASCII keys: they + // will be translated by TranslateMessage() and received in WM_CHAR case VK_ESCAPE: case VK_SPACE: case VK_RETURN: case VK_BACK: case VK_TAB: - case VK_LEFT: - case VK_RIGHT: - case VK_DOWN: - case VK_UP: return Default(); #ifdef VK_APPS + + // normally these macros would be defined in windows.h +#ifndef GET_X_LPARAM + #define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp)) + #define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp)) +#endif + // special case of VK_APPS: treat it the same as right mouse click // because both usually pop up a context menu case VK_APPS: @@ -1282,27 +1284,29 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) break; #endif // VK_APPS + case VK_LEFT: + case VK_RIGHT: + case VK_DOWN: + case VK_UP: default: - if (!MSWOnChar((WORD)wParam, lParam)) + if ( !MSWOnChar((WORD)wParam, lParam) ) { return Default(); } break; } - break; + case WM_KEYUP: - { - if (!MSWOnKeyUp((WORD) wParam, lParam)) + if ( !MSWOnKeyUp((WORD) wParam, lParam) ) return Default(); break; - } + case WM_CHAR: // Always an ASCII character - { - if (!MSWOnChar((WORD)wParam, lParam, TRUE)) - return Default(); - break; - } + if ( !MSWOnChar((WORD)wParam, lParam, TRUE) ) + return Default(); + break; + case WM_HSCROLL: { #ifdef __WIN32__ @@ -2034,21 +2038,23 @@ long wxWindow::MSWDefWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) long wxWindow::Default() { - // Ignore 'fake' events (perhaps generated as a result of a separate real event) - if (m_lastMsg == 0) + // Ignore 'fake' events (perhaps generated as a result of a separate real + // event) + if ( m_lastMsg == 0 ) return 0; #ifdef __WXDEBUG__ wxLogTrace(wxTraceMessages, "Forwarding %s to DefWindowProc.", - wxGetMessageName(m_lastMsg)); + wxGetMessageName(m_lastMsg)); #endif // __WXDEBUG__ - return this->MSWDefWindowProc(m_lastMsg, m_lastWParam, m_lastLParam); + return MSWDefWindowProc(m_lastMsg, m_lastWParam, m_lastLParam); } bool wxWindow::MSWProcessMessage(WXMSG* pMsg) { - if ( m_hWnd != 0 && (GetWindowStyleFlag() & wxTAB_TRAVERSAL) ) { + if ( m_hWnd != 0 && (GetWindowStyleFlag() & wxTAB_TRAVERSAL) ) + { // intercept dialog navigation keys MSG *msg = (MSG *)pMsg; bool bProcess = TRUE; @@ -2157,6 +2163,10 @@ bool wxWindow::MSWProcessMessage(WXMSG* pMsg) } #endif // wxUSE_TOOLTIPS +/* This code manages to disable character input completely. Nice one! + * Probably because the dialog is requesting all char input. Or, + * it gets called by non-dialog windows. + // In case we don't have wxTAB_TRAVERSAL style on. // If we don't call this, we may never process Enter correctly. if ( m_hWnd != 0 && (GetWindowStyleFlag() & wxTAB_TRAVERSAL) == 0 ) @@ -2165,7 +2175,7 @@ bool wxWindow::MSWProcessMessage(WXMSG* pMsg) if ( ::IsDialogMessage((HWND)GetHWND(), msg) ) return TRUE; } - +*/ return FALSE; } @@ -2555,6 +2565,8 @@ void wxWindow::MSWOnMouseLeave(int x, int y, WXUINT flags) GetEventHandler()->ProcessEvent(event); } +// isASCII is TRUE only when we're called from WM_CHAR handler and not from +// WM_KEYDOWN one bool wxWindow::MSWOnChar(WXWORD wParam, WXLPARAM lParam, bool isASCII) { int id; @@ -2626,7 +2638,7 @@ bool wxWindow::MSWOnChar(WXWORD wParam, WXLPARAM lParam, bool isASCII) return FALSE; } -bool wxWindow::MSWOnKeyDown(WXWORD wParam, WXLPARAM lParam, bool isASCII) +bool wxWindow::MSWOnKeyDown(WXWORD wParam, WXLPARAM lParam) { int id; @@ -2667,7 +2679,7 @@ bool wxWindow::MSWOnKeyDown(WXWORD wParam, WXLPARAM lParam, bool isASCII) } } -bool wxWindow::MSWOnKeyUp(WXWORD wParam, WXLPARAM lParam, bool isASCII) +bool wxWindow::MSWOnKeyUp(WXWORD wParam, WXLPARAM lParam) { int id; @@ -3774,14 +3786,7 @@ WXDWORD wxWindow::Determine3DEffects(WXDWORD defaultBorderStyle, bool *want3D) void wxWindow::OnChar(wxKeyEvent& event) { - bool isVirtual; - int id = wxCharCodeWXToMSW((int)event.KeyCode(), &isVirtual); - - if ( id == -1 ) - id= m_lastWParam; - - if ( !event.ControlDown() ) // Why this test? - (void) MSWDefWindowProc(m_lastMsg, (WPARAM) id, m_lastLParam); + event.Skip(); } void wxWindow::OnKeyDown(wxKeyEvent& event)