X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6ed892f3f2be3ec8f96583772757aecc00bbee30..0ebb0e5c842c2a0be09364bda0d14b3281ddec43:/src/mac/carbon/app.cpp diff --git a/src/mac/carbon/app.cpp b/src/mac/carbon/app.cpp index 36165f1246..f7e96bddfb 100644 --- a/src/mac/carbon/app.cpp +++ b/src/mac/carbon/app.cpp @@ -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); @@ -623,6 +647,11 @@ bool wxApp::Initialize(int& argc, wxChar **argv) if ( !wxAppBase::Initialize(argc, argv) ) return false; +#if wxUSE_INTL + wxFont::SetDefaultEncoding(wxLocale::GetSystemEncoding()); +#endif + + wxWinMacWindowList = new wxList(wxKEY_INTEGER); wxWinMacControlList = new wxList(wxKEY_INTEGER); @@ -1255,11 +1284,13 @@ void wxApp::MacDoOneEvent() sleepTime = kEventDurationNoWait ; else { +#if wxUSE_THREADS if (g_numberOfThreads) { sleepTime = kEventDurationNoWait; } else +#endif // wxUSE_THREADS { sleepTime = kEventDurationSecond; } @@ -1298,11 +1329,13 @@ void wxApp::MacDoOneEvent() sleepTime = kEventDurationNoWait; else { +#if wxUSE_THREADS if (g_numberOfThreads) { sleepTime = kEventDurationNoWait; } else +#endif // wxUSE_THREADS { sleepTime = kEventDurationSecond; } @@ -1762,6 +1795,7 @@ int wxKeyCodeToMacModifier(wxKeyCode key) switch (key) { case WXK_START: + case WXK_MENU: return cmdKey; case WXK_SHIFT: @@ -1770,7 +1804,7 @@ int wxKeyCodeToMacModifier(wxKeyCode key) case WXK_CAPITAL: return alphaLock; - case WXK_OPTION: + case WXK_ALT: return optionKey; case WXK_CONTROL: @@ -1783,6 +1817,7 @@ int wxKeyCodeToMacModifier(wxKeyCode key) bool wxGetKeyState(wxKeyCode key) //virtual key code if < 10.2.x, else see below { +// TODO: Have it use HID Manager on OSX... //if OS X > 10.2 (i.e. 10.2.x) //a known apple bug prevents the system from determining led //states with GetKeys... can only determine caps lock led