]> git.saurik.com Git - wxWidgets.git/commitdiff
char handling fixed once again
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 24 Mar 1999 23:34:18 +0000 (23:34 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 24 Mar 1999 23:34:18 +0000 (23:34 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1970 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/window.cpp

index 404ae402a7a6e9200f0c5546996e79d8213b47b8..93396297f8685828834f53b99dfa30d9f0df3732 100644 (file)
@@ -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).
     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 )
 
         // we consider these message "not interesting" to OnChar
         if ( wParam == VK_SHIFT || wParam == VK_CONTROL )
@@ -1245,31 +1243,29 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
             return Default();
         }
 
             return Default();
         }
 
-        // Avoid duplicate messages to OnChar for these special keys
         switch ( wParam )
         {
         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_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
                 return Default();
 
 #ifdef VK_APPS
-            // special case of VK_APPS: treat it the same as right mouse click
-            // because both usually pop up a context menu
-            case VK_APPS:
-                {
 
 
+            // normally these macros would be defined in windows.h
 #ifndef GET_X_LPARAM
 #ifndef GET_X_LPARAM
-#define GET_X_LPARAM(lp)                        ((int)(short)LOWORD(lp))
-#define GET_Y_LPARAM(lp)                        ((int)(short)HIWORD(lp))
+    #define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp))
+    #define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp))
 #endif
 
 #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:
+                {
                     // construct the key mask
                     WPARAM fwKeys = MK_RBUTTON;
                     if ( (::GetKeyState(VK_CONTROL) & 0x100) != 0 )
                     // construct the key mask
                     WPARAM fwKeys = MK_RBUTTON;
                     if ( (::GetKeyState(VK_CONTROL) & 0x100) != 0 )
@@ -1288,27 +1284,29 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
                 break;
 #endif // VK_APPS
 
                 break;
 #endif // VK_APPS
 
+            case VK_LEFT:
+            case VK_RIGHT:
+            case VK_DOWN:
+            case VK_UP:
             default:
             default:
-                if (!MSWOnChar((WORD)wParam, lParam))
+                if ( !MSWOnChar((WORD)wParam, lParam) )
                 {
                     return Default();
                 }
                 break;
         }
                 {
                     return Default();
                 }
                 break;
         }
-
         break;
         break;
+
     case WM_KEYUP:
     case WM_KEYUP:
-    {
-        if (!MSWOnKeyUp((WORD) wParam, lParam))
+        if ( !MSWOnKeyUp((WORD) wParam, lParam) )
             return Default();
         break;
             return Default();
         break;
-    }
+
     case WM_CHAR: // Always an ASCII character
     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__
     case WM_HSCROLL:
         {
 #ifdef __WIN32__
@@ -2565,6 +2563,8 @@ void wxWindow::MSWOnMouseLeave(int x, int y, WXUINT flags)
     GetEventHandler()->ProcessEvent(event);
 }
 
     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;
 bool wxWindow::MSWOnChar(WXWORD wParam, WXLPARAM lParam, bool isASCII)
 {
     int id;
@@ -2636,7 +2636,7 @@ bool wxWindow::MSWOnChar(WXWORD wParam, WXLPARAM lParam, bool isASCII)
         return FALSE;
 }
 
         return FALSE;
 }
 
-bool wxWindow::MSWOnKeyDown(WXWORD wParam, WXLPARAM lParam, bool isASCII)
+bool wxWindow::MSWOnKeyDown(WXWORD wParam, WXLPARAM lParam)
 {
     int id;
 
 {
     int id;
 
@@ -2677,7 +2677,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;
 
 {
     int id;