]> git.saurik.com Git - wxWidgets.git/commitdiff
F4 key also toggles combobox popup under MSW
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 13 Aug 2006 00:41:42 +0000 (00:41 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 13 Aug 2006 00:41:42 +0000 (00:41 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40580 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/combo.cpp

index 255869e59f190d77ab57d4a4f3ed4dcd584f3954..124204b43f69d7a614a3423b831fdc73a43ee834 100644 (file)
@@ -531,25 +531,34 @@ wxCoord wxComboCtrl::GetNativeTextIndent() const
 
 bool wxComboCtrl::IsKeyPopupToggle(const wxKeyEvent& event) const
 {
-    int keycode = event.GetKeyCode();
-    bool isPopupShown = IsPopupShown();
+    const bool isPopupShown = IsPopupShown();
 
-    if ( isPopupShown && keycode == WXK_ESCAPE )
-        return true;
-
-    // On XP or with writable combo in Classic,
-    // Alt is required, in addition to up/down, to
-    // show the popup.
-    if ( keycode == WXK_DOWN || keycode == WXK_UP )
+    switch ( event.GetKeyCode() )
     {
-        if ( event.AltDown() ||
-                ( !isPopupShown &&
-                  HasFlag(wxCB_READONLY) &&
-                  !wxUxThemeEngine::GetIfActive()
-                ) )
-        {
-            return true;
-        }
+        case WXK_F4:
+            // F4 toggles the popup in the native comboboxes, so emulate them
+            if ( !event.AltDown() )
+                return true;
+            break;
+
+        case WXK_ESCAPE:
+            if ( isPopupShown )
+                return true;
+            break;
+
+        case WXK_DOWN:
+        case WXK_UP:
+            // On XP or with writable combo in Classic, arrows don't open the
+            // popup but Alt-arrow does
+            if ( event.AltDown() ||
+                    ( !isPopupShown &&
+                      HasFlag(wxCB_READONLY) &&
+                      !wxUxThemeEngine::GetIfActive()
+                    ) )
+            {
+                return true;
+            }
+            break;
     }
 
     return false;