]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/app.cpp
GTK_TOOLBAR_BOTH_HORIZ is GTK 2 only (it would have been nice if the patch mentioned...
[wxWidgets.git] / src / mac / app.cpp
index 1af5aa871fc86c6651f16618c7b8d4a55ce34c6d..04f3eee3b5bdde44b4d312b43e340a6b35eede28 100644 (file)
@@ -288,6 +288,9 @@ void wxApp::MacNewFile()
         { kEventClassCommand, kEventProcessCommand } ,
         { kEventClassCommand, kEventCommandUpdateStatus } ,
 
+        { kEventClassMenu, kEventMenuOpening },
+        { kEventClassMenu, kEventMenuClosed },
+
         { kEventClassApplication , kEventAppActivated } ,
         { kEventClassApplication , kEventAppDeactivated } ,
         // handling the quit event is not recommended by apple
@@ -299,9 +302,35 @@ void wxApp::MacNewFile()
         { 'WXMC' , 'WXMC' }
     } ;
 
-static pascal OSStatus MenuEventHandler( EventHandlerCallRef handler , EventRef event , void *data )
+static pascal OSStatus
+MenuEventHandler( EventHandlerCallRef handler , EventRef event , void *data )
 {
-    return eventNotHandledErr ;
+    // FIXME: this doesn't work for multiple windows
+    wxWindow *win = wxTheApp->GetTopWindow();
+    if ( win )
+    {
+        // VZ: we could find the menu from its handle here by examining all
+        //     the menus in the menu bar recursively but knowing that neither
+        //     wxMSW nor wxGTK do it why bother...
+#if 0
+        MenuRef menuRef;
+
+        GetEventParameter(event,
+                          kEventParamDirectObject,
+                          typeMenuRef, NULL,
+                          sizeof(menuRef), NULL,
+                          &menuRef);
+#endif // 0
+
+        wxMenuEvent event(GetEventKind(event) == kEventMenuOpening
+                        ? wxEVT_MENU_OPEN
+                        : wxEVT_MENU_CLOSE);
+        event.SetEventObject(win);
+
+        (void)win->GetEventHandler()->ProcessEvent(event);
+    }
+
+    return eventNotHandledErr;
 }
 
 // due to the rather low-level event API of wxWindows, we cannot use RunApplicationEventLoop