extern wxList wxPendingDelete;
extern wxList *wxWinMacWindowList;
extern wxList *wxWinMacControlList;
+#if wxUSE_THREADS
extern size_t g_numberOfThreads;
+#endif // wxUSE_THREADS
// statics for implementation
{ kEventClassMenu, kEventMenuOpening },
{ kEventClassMenu, kEventMenuClosed },
+ { kEventClassMenu, kEventMenuTargetItem },
{ kEventClassApplication , kEventAppActivated } ,
{ kEventClassApplication , kEventAppDeactivated } ,
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
&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);
sleepTime = kEventDurationNoWait ;
else
{
+#if wxUSE_THREADS
if (g_numberOfThreads)
{
sleepTime = kEventDurationNoWait;
}
else
+#endif // wxUSE_THREADS
{
sleepTime = kEventDurationSecond;
}
sleepTime = kEventDurationNoWait;
else
{
+#if wxUSE_THREADS
if (g_numberOfThreads)
{
sleepTime = kEventDurationNoWait;
}
else
+#endif // wxUSE_THREADS
{
sleepTime = kEventDurationSecond;
}
switch (key)
{
case WXK_START:
+ case WXK_MENU:
return cmdKey;
case WXK_SHIFT:
case WXK_CAPITAL:
return alphaLock;
-// case WXK_OPTION:
-// return optionKey;
+ case WXK_ALT:
+ return optionKey;
case WXK_CONTROL:
return controlKey;