move the logic for changing notebook pages using the standard Ctrl-Tab/PageUp/Dn...
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 10 Aug 2006 15:42:07 +0000 (15:42 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 10 Aug 2006 15:42:07 +0000 (15:42 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40552 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

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

index cc6e9164660f68021fcced6654cf9bb180b3bc98..64359f658d10943442ddf683f5b17c2cad8e8842 100644 (file)
@@ -103,9 +103,6 @@ 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 0a034ba01e9d673fa28953d77653a2df9a9bf35b..4f05ea60f21daa85073a1d12608426c69fc5c9dc 100644 (file)
@@ -276,6 +276,42 @@ void wxControlContainer::HandleOnNavigationKey( wxNavigationKeyEvent& event )
 
     const wxWindowList& children = m_winParent->GetChildren();
 
+    // if we have exactly 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 and we do it under other platforms
+    // as well because it seems like a good idea -- but we can always put this
+    // block inside "#ifdef __WXMSW__" if it's not suitable there
+    if ( event.IsWindowChange() && !goingDown )
+    {
+        // check if we have a unique notebook-like child
+        wxWindow *bookctrl = NULL;
+        for ( wxWindowList::const_iterator i = children.begin(),
+                                         end = children.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->GetEventHandler()->ProcessEvent(event) )
+            return;
+    }
+
     // there is not much to do if we don't have children and we're not
     // interested in "notebook page change" events here
     if ( !children.GetCount() || event.IsWindowChange() )
index 0c5d936882b35d2964af654ad3f9f112ab4a9df8..17ba69beda27d031f450760417b65a01f9eb379f 100644 (file)
@@ -331,48 +331,6 @@ 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;