]> git.saurik.com Git - wxWidgets.git/commitdiff
allow changing the page from keyboard in property sheet like controls even when the...
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 28 Jul 2006 23:48:50 +0000 (23:48 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 28 Jul 2006 23:48:50 +0000 (23:48 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40355 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/toplevel.h
src/msw/toplevel.cpp

index 64359f658d10943442ddf683f5b17c2cad8e8842..cc6e9164660f68021fcced6654cf9bb180b3bc98 100644 (file)
@@ -103,6 +103,9 @@ public:
     // choose the right parent to use with CreateWindow()
     virtual WXHWND MSWGetParent() const;
 
+    // return true if the message was preprocessed and shouldn't be dispatched
+    virtual bool MSWProcessMessage(WXMSG* pMsg);
+
     // window proc for the frames
     WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
 
index bdd1e301c4c173f2316c82beb614f7bf98331c67..ac6b7b084000b5ab902338c5da9bb940a5cb5c93 100644 (file)
@@ -331,6 +331,48 @@ bool wxTopLevelWindowMSW::HandleSettingChange(WXWPARAM wParam, WXLPARAM lParam)
 }
 #endif
 
+bool wxTopLevelWindowMSW::MSWProcessMessage(WXMSG* pMsg)
+{
+    // MSW specific feature: if the dialog has only one notebook-like child
+    // window (actually it could be any window that returns true from its
+    // HasMultiplePages()), then [Shift-]Ctrl-Tab and Ctrl-PageUp/Down keys
+    // should iterate over its pages even if the focus is outside of the
+    // control because this is how the standard MSW properties dialogs behave
+    if ( pMsg->message == WM_KEYDOWN && wxIsCtrlDown() &&
+            (pMsg->wParam == VK_TAB ||
+                pMsg->wParam == VK_PRIOR ||
+                    pMsg->wParam == VK_NEXT) )
+    {
+        // check if we have a unique notebook-like child
+        wxWindow *bookctrl = NULL;
+        for ( wxWindowList::const_iterator i = GetChildren().begin(),
+                                         end = GetChildren().end();
+              i != end;
+              ++i )
+        {
+            wxWindow * const window = *i;
+            if ( window->HasMultiplePages() )
+            {
+                if ( bookctrl )
+                {
+                    // this is the second book-like control already so don't do
+                    // anything as we don't know which one should have its page
+                    // changed
+                    bookctrl = NULL;
+                    break;
+                }
+
+                bookctrl = window;
+            }
+        }
+
+        if ( bookctrl && bookctrl->wxWindowMSW::MSWProcessMessage(pMsg) )
+            return true;
+    }
+
+    return wxTopLevelWindowBase::MSWProcessMessage(pMsg);
+}
+
 WXLRESULT wxTopLevelWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
 {
     WXLRESULT rc = 0;