]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/app.cpp
moved system-fontencoding conversions to fontutil.cpp
[wxWidgets.git] / src / mac / carbon / app.cpp
index bfb79581381851d4498cd01c55e856c832177f57..3c0a3951354cd5960de889c7077aa1c086da0aa8 100644 (file)
@@ -69,7 +69,9 @@
 extern wxList wxPendingDelete;
 extern wxList *wxWinMacWindowList;
 extern wxList *wxWinMacControlList;
+#if wxUSE_THREADS
 extern size_t g_numberOfThreads;
+#endif // wxUSE_THREADS
 
 // statics for implementation
 
@@ -290,6 +292,7 @@ void wxApp::MacNewFile()
 
         { kEventClassMenu, kEventMenuOpening },
         { kEventClassMenu, kEventMenuClosed },
+        { kEventClassMenu, kEventMenuTargetItem },
 
         { kEventClassApplication , kEventAppActivated } ,
         { kEventClassApplication , kEventAppDeactivated } ,
@@ -308,8 +311,9 @@ void wxApp::MacNewFile()
 static pascal OSStatus
 MenuEventHandler( EventHandlerCallRef handler , EventRef event , void *data )
 {
-    // FIXME: this doesn't work for multiple windows
-    wxWindow *win = wxTheApp->GetTopWindow();
+    wxMenuBar* mbar = wxMenuBar::MacGetInstalledMenuBar();
+    wxFrame* win = mbar->GetFrame();
+    
     if ( win )
     {
         // VZ: we could find the menu from its handle here by examining all
@@ -325,9 +329,29 @@ MenuEventHandler( EventHandlerCallRef handler , EventRef event , void *data )
                           &menuRef);
 #endif // 0
 
-        wxMenuEvent wxevent(GetEventKind(event) == kEventMenuOpening
-                        ? wxEVT_MENU_OPEN
-                        : wxEVT_MENU_CLOSE);
+        wxEventType type=0;        
+        MenuCommand cmd=0;
+        switch (GetEventKind(event))
+        {
+            case kEventMenuOpening:
+                type = wxEVT_MENU_OPEN;
+                break;
+            case kEventMenuClosed:
+                type = wxEVT_MENU_CLOSE;
+                break;
+            case kEventMenuTargetItem:
+                type = wxEVT_MENU_HIGHLIGHT;
+                GetEventParameter(event, kEventParamMenuCommand,
+                                  typeMenuCommand, NULL,
+                                  sizeof(cmd), NULL, &cmd);
+                if (cmd == 0) return eventNotHandledErr;
+                break;
+            default:
+                wxFAIL_MSG(wxT("Unexpected menu event kind"));
+                break;
+        }
+
+        wxMenuEvent wxevent(type, cmd);
         wxevent.SetEventObject(win);
 
         (void)win->GetEventHandler()->ProcessEvent(wxevent);
@@ -1255,11 +1279,13 @@ void wxApp::MacDoOneEvent()
             sleepTime = kEventDurationNoWait ;
         else
         {
+#if wxUSE_THREADS
             if (g_numberOfThreads)
             {
                 sleepTime = kEventDurationNoWait;
             }
             else
+#endif // wxUSE_THREADS
             {
                 sleepTime = kEventDurationSecond;
             }
@@ -1298,11 +1324,13 @@ void wxApp::MacDoOneEvent()
             sleepTime = kEventDurationNoWait;
         else
         {
+#if wxUSE_THREADS
             if (g_numberOfThreads)
             {
                 sleepTime = kEventDurationNoWait;
             }
             else
+#endif // wxUSE_THREADS
             {
                 sleepTime = kEventDurationSecond;
             }
@@ -1762,6 +1790,7 @@ int wxKeyCodeToMacModifier(wxKeyCode key)
     switch (key)
     {
     case WXK_START:
+    case WXK_MENU:
         return cmdKey;
 
     case WXK_SHIFT:
@@ -1770,8 +1799,8 @@ int wxKeyCodeToMacModifier(wxKeyCode key)
     case WXK_CAPITAL:
         return alphaLock;
 
-//    case WXK_OPTION:
-//        return optionKey;
+    case WXK_ALT:
+        return optionKey;
 
     case WXK_CONTROL:
         return controlKey;