]> git.saurik.com Git - wxWidgets.git/commitdiff
override TryValidator() in wxMDIParentFrame to implement forwarding of menu/toolbar...
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 26 Feb 2009 15:24:03 +0000 (15:24 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 26 Feb 2009 15:24:03 +0000 (15:24 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59162 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/mdi.h
src/common/docmdi.cpp
src/msw/mdi.cpp

index a2931c069ccc3bbed9ec78043779b5b4c6c13920..63e42eb74bf3fb99547b45c39abd7a0f52151910 100644 (file)
@@ -94,7 +94,6 @@ public:
     void OnIconized(wxIconizeEvent& event);
 
     bool HandleActivate(int state, bool minimized, WXHWND activate);
-    bool HandleCommand(WXWORD id, WXWORD cmd, WXHWND control);
 
     // override window proc for MDI-specific message processing
     virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
@@ -109,6 +108,9 @@ public:
 #endif // wxUSE_MENUS
 
 protected:
+    // override to pass menu/toolbar events to the active child first
+    virtual bool TryValidator(wxEvent& event);
+
 #if wxUSE_MENUS_NATIVE
     virtual void InternalSetMenuBar();
 #endif // wxUSE_MENUS_NATIVE
index cca56168cb6bf391d23fe17b5a09dbf18f0a4e00..6d3d3bb2da7847024524a009d5b7625e59909ffc 100644 (file)
@@ -70,7 +70,10 @@ void wxDocMDIParentFrame::OnMRUFile(wxCommandEvent& event)
 
 bool wxDocMDIParentFrame::TryValidator(wxEvent& event)
 {
-    return m_docManager && m_docManager->ProcessEventHere(event);
+    if ( m_docManager && m_docManager->ProcessEventHere(event) )
+        return true;
+
+    return wxMDIParentFrame::TryValidator(event);
 }
 
 void wxDocMDIParentFrame::OnCloseWindow(wxCloseEvent& event)
@@ -135,7 +138,10 @@ wxDocMDIChildFrame::~wxDocMDIChildFrame(void)
 
 bool wxDocMDIChildFrame::TryValidator(wxEvent& event)
 {
-    return m_childView && m_childView->ProcessEventHere(event);
+    if ( m_childView && m_childView->ProcessEventHere(event) )
+        return true;
+
+    return wxMDIChildFrame::TryValidator(event);
 }
 
 void wxDocMDIChildFrame::OnActivate(wxActivateEvent& event)
index 7ea3a70a66172edd62caf939ca533a0fb5a060ff..c307027bfabbdf71e05f3e58f6df303454df5433 100644 (file)
@@ -540,25 +540,6 @@ WXLRESULT wxMDIParentFrame::MSWWindowProc(WXUINT message,
             }
             break;
 
-        case WM_COMMAND:
-            {
-                WXWORD id, cmd;
-                WXHWND hwnd;
-                UnpackCommand(wParam, lParam, &id, &hwnd, &cmd);
-
-                (void)HandleCommand(id, cmd, hwnd);
-
-                // even if the frame didn't process it, there is no need to try it
-                // once again (i.e. call wxFrame::HandleCommand()) - we just did it,
-                // so pretend we processed the message anyhow
-                processed = true;
-            }
-
-            // always pass this message DefFrameProc(), otherwise MDI menu
-            // commands (and sys commands - more surprisingly!) won't work
-            MSWDefWindowProc(message, wParam, lParam);
-            break;
-
         case WM_CREATE:
             m_clientWindow = OnCreateClient();
             // Uses own style for client style
@@ -688,13 +669,18 @@ void wxMDIParentFrame::OnMDICommand(wxCommandEvent& event)
 
 #endif // wxUSE_MENUS
 
-bool wxMDIParentFrame::HandleCommand(WXWORD id, WXWORD cmd, WXHWND hwnd)
+bool wxMDIParentFrame::TryValidator(wxEvent& event)
 {
-    wxMDIChildFrame * const child = GetActiveChild();
-    if ( child && child->HandleCommand(id, cmd, hwnd) )
-        return true;
+    // menu (and toolbar) events should be sent to the active child frame
+    // first, if any
+    if ( event.GetEventType() == wxEVT_COMMAND_MENU_SELECTED )
+    {
+        wxMDIChildFrame * const child = GetActiveChild();
+        if ( child && child->ProcessEventHere(event) )
+            return true;
+    }
 
-    return wxFrame::HandleCommand(id, cmd, hwnd);
+    return wxMDIParentFrameBase::TryValidator(event);
 }
 
 WXLRESULT wxMDIParentFrame::MSWDefWindowProc(WXUINT message,