X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a2b772607a87ffe6fe9af8c0b64b7259ef10a4a4..917be7ed065337e8a7a67615969ecaade9eea809:/src/mac/carbon/app.cpp diff --git a/src/mac/carbon/app.cpp b/src/mac/carbon/app.cpp index 612040a6af..494ac9592f 100644 --- a/src/mac/carbon/app.cpp +++ b/src/mac/carbon/app.cpp @@ -59,6 +59,8 @@ # if defined(WXMAKINGDLL_CORE) # include # endif +// include hid keyboard +# include "wx/mac/carbon/private/hid.h" #else # include # include @@ -119,6 +121,10 @@ long wxApp::s_macPreferencesMenuItemId = wxID_PREFERENCES ; long wxApp::s_macExitMenuItemId = wxID_EXIT ; wxString wxApp::s_macHelpMenuTitleName = wxT("&Help") ; +#ifdef __DARWIN__ + wxHIDKeyboard* wxApp::s_macHIDKeyboard = NULL; +#endif + // Normally we're not a plugin bool wxApp::sm_isEmbedded = false; //---------------------------------------------------------------------- @@ -402,7 +408,7 @@ wxMacAppMenuEventHandler( EventHandlerCallRef handler , EventRef event , void *d if ( type ) { - wxMenuEvent wxevent(type, cmd); + wxMenuEvent wxevent(type, cmd, menu); wxevent.SetEventObject(menu); wxEvtHandler* handler = menu->GetEventHandler(); @@ -520,7 +526,17 @@ pascal OSStatus wxMacAppEventHandler( EventHandlerCallRef handler , EventRef eve result = wxMacAppMenuEventHandler( handler , event , data ) ; break ; case kEventClassMouse : - result = wxMacTopLevelMouseEventHandler( handler , event , NULL ) ; + { + wxMacCarbonEvent cEvent( event ) ; + + WindowRef window ; + Point screenMouseLocation = cEvent.GetParameter(kEventParamMouseLocation) ; + ::FindWindow(screenMouseLocation, &window); + // only send this event in case it had not already been sent to a tlw, as we get + // double events otherwise (in case event.skip) was called + if ( window == NULL ) + result = wxMacTopLevelMouseEventHandler( handler , event , NULL ) ; + } break ; case kEventClassAppleEvent : { @@ -545,6 +561,8 @@ DEFINE_ONE_SHOT_HANDLER_GETTER( wxMacAppEventHandler ) WXIMPORT char std::__throws_bad_alloc ; #endif +#if __WXDEBUG__ + pascal static void wxMacAssertOutputHandler(OSType componentSignature, UInt32 options, const char *assertionString, const char *exceptionLabelString, const char *errorString, const char *fileName, long lineNumber, void *value, ConstStr255Param outputMsg) @@ -581,6 +599,8 @@ pascal static void wxMacAssertOutputHandler(OSType componentSignature, UInt32 op #endif } +#endif //__WXDEBUG__ + bool wxApp::Initialize(int& argc, wxChar **argv) { // Mac-specific @@ -592,12 +612,6 @@ bool wxApp::Initialize(int& argc, wxChar **argv) SetEventMask( everyEvent ) ; UMAShowWatchCursor() ; -#if defined(WXMAKINGDLL_CORE) && defined(__DARWIN__) - // open shared library resources from here since we don't have - // __wxinitialize in Mach-O shared libraries - wxStAppResource::OpenSharedLibraryResource(NULL); -#endif - #ifndef __DARWIN__ # if __option(profile) ProfilerInit( collectDetailed, bestTimeBase , 40000 , 50 ) ; @@ -711,10 +725,10 @@ void wxApp::CleanUp() # endif #endif -#if defined(WXMAKINGDLL_CORE) && defined(__DARWIN__) - // close shared library resources from here since we don't have - // __wxterminate in Mach-O shared libraries - wxStAppResource::CloseSharedLibraryResource(); +#ifdef __DARWIN__ + // clean up HID Keyboard + if (s_macHIDKeyboard) + delete s_macHIDKeyboard; #endif UMACleanupToolbox() ; @@ -1167,11 +1181,16 @@ int wxMacKeyCodeToModifier(wxKeyCode key) bool wxGetKeyState(wxKeyCode key) //virtual key code if < 10.2.x, else see below { -//#ifdef __DARWIN__ -// wxHIDKeyboard keyboard; -// return keyboard.IsActive(key); -//#else -// TODO: Have it use HID Manager on OSX... +#ifdef __DARWIN__ + // Startup HID keyboard for getting key codes on DARWIN + if (!wxApp::s_macHIDKeyboard) + { + wxApp::s_macHIDKeyboard = new wxHIDKeyboard(); + wxApp::s_macHIDKeyboard->Create(); + } + + return wxApp::s_macHIDKeyboard->IsActive(key); +#else //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 @@ -1180,7 +1199,7 @@ bool wxGetKeyState(wxKeyCode key) //virtual key code if < 10.2.x, else see below // KeyMapByteArray keymap; // GetKeys((BigEndianLong*)keymap); // return !!(BitTst(keymap, (sizeof(KeyMapByteArray)*8) - iKey)); -//#endif +#endif }