]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/menucmn.cpp
Workaround for #15404: wxRichTextCtrl: caret does not disappear when focus is lost...
[wxWidgets.git] / src / common / menucmn.cpp
index 55daa81c38e5c041e688f56f640f9abb2e52d5fa..e92a047041cff6453536d239aa8f06a9753db83a 100644 (file)
@@ -4,7 +4,6 @@
 // Author:      Vadim Zeitlin
 // Modified by:
 // Created:     26.10.99
-// RCS-ID:      $Id$
 // Copyright:   (c) wxWidgets team
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
@@ -643,7 +642,8 @@ bool wxMenuBase::SendEvent(int itemid, int checked)
     event.SetEventObject(this);
     event.SetInt(checked);
 
-    wxWindow * const win = GetWindow();
+    wxWindow* const win = GetWindow();
+    wxMenuBar* const mb = GetMenuBar();
 
     // Try the menu's event handler first
     wxEvtHandler *handler = GetEventHandler();
@@ -653,16 +653,21 @@ bool wxMenuBase::SendEvent(int itemid, int checked)
         // event to another handler if it's not processed here to prevent it
         // from passing the event to wxTheApp: this will be done below if we do
         // have the associated window.
-        if ( win )
+        if ( win || mb )
             event.SetWillBeProcessedAgain();
 
         if ( handler->SafelyProcessEvent(event) )
             return true;
     }
 
-    // Try the window the menu was popped up from or its menu bar belongs to
-    if ( win && win->HandleWindowEvent(event) )
-        return true;
+    // If this menu is part of the menu bar, process the event there: this will
+    // also propagate it upwards to the window containing the menu bar.
+    if ( mb )
+        return mb->HandleWindowEvent(event);
+
+    // Try the window the menu was popped up from.
+    if ( win )
+        return win->HandleWindowEvent(event);
 
     // Not processed.
     return false;
@@ -919,6 +924,7 @@ void wxMenuBarBase::Attach(wxFrame *frame)
 {
     wxASSERT_MSG( !IsAttached(), wxT("menubar already attached!") );
 
+    SetParent(frame);
     m_menuBarFrame = frame;
 }
 
@@ -927,6 +933,7 @@ void wxMenuBarBase::Detach()
     wxASSERT_MSG( IsAttached(), wxT("detaching unattached menubar") );
 
     m_menuBarFrame = NULL;
+    SetParent(NULL);
 }
 
 // ----------------------------------------------------------------------------