X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4dd2530846d0fcf214e3b288b04ce3aa932af048..ba98e032a7d195fc94d3856bcd8f4cf4b4b01b4c:/src/mac/carbon/app.cpp diff --git a/src/mac/carbon/app.cpp b/src/mac/carbon/app.cpp index ec3b13491d..683d9c7401 100644 --- a/src/mac/carbon/app.cpp +++ b/src/mac/carbon/app.cpp @@ -133,6 +133,12 @@ pascal OSErr AEHandleRApp( const AppleEvent *event , AppleEvent *reply , SRefCon return wxTheApp->MacHandleAERApp( (AppleEvent*) event , reply) ; } +pascal OSErr AEHandleGURL( const AppleEvent *event , AppleEvent *reply , long WXUNUSED(refcon) ) +{ + return wxTheApp->MacHandleAEGURL((WXEVENTREF *)event , reply) ; +} + + // AEODoc Calls MacOpenFile on each of the files passed short wxApp::MacHandleAEODoc(const WXEVENTREF event, WXEVENTREF WXUNUSED(reply)) @@ -174,6 +180,31 @@ short wxApp::MacHandleAEODoc(const WXEVENTREF event, WXEVENTREF WXUNUSED(reply)) return noErr; } +// AEODoc Calls MacOpenURL on the url passed + +short wxApp::MacHandleAEGURL(const WXEVENTREF event, WXEVENTREF WXUNUSED(reply)) +{ + DescType returnedType; + Size actualSize; + char url[255]; + OSErr err = AEGetParamPtr((AppleEvent *)event, keyDirectObject, typeChar, + &returnedType, url, sizeof(url)-1, + &actualSize); + if (err != noErr) + return err; + + url[actualSize] = '\0'; // Terminate the C string + + ProcessSerialNumber PSN ; + PSN.highLongOfPSN = 0 ; + PSN.lowLongOfPSN = kCurrentProcess ; + SetFrontProcess( &PSN ) ; + + MacOpenURL(wxString(url, wxConvUTF8)); + + return noErr; +} + // AEPDoc Calls MacPrintFile on each of the files passed short wxApp::MacHandleAEPDoc(const WXEVENTREF event , WXEVENTREF WXUNUSED(reply)) @@ -264,6 +295,9 @@ void wxApp::MacOpenFile(const wxString & fileName ) #endif } +void wxApp::MacOpenURL(const wxString & url ) +{ +} void wxApp::MacPrintFile(const wxString & fileName ) { @@ -460,7 +494,8 @@ wxMenu* wxFindMenuFromMacCommand( const HICommand &command , wxMenuItem* &item ) // is it part of the application or the Help menu, then look for the id directly if ( ( GetMenuHandle( kwxMacAppleMenuId ) != NULL && command.menu.menuRef == GetMenuHandle( kwxMacAppleMenuId ) ) || - ( helpMenuHandle != NULL && command.menu.menuRef == helpMenuHandle ) ) + ( helpMenuHandle != NULL && command.menu.menuRef == helpMenuHandle ) || + wxMenuBar::MacGetWindowMenuHMenu() != NULL && command.menu.menuRef == wxMenuBar::MacGetWindowMenuHMenu() ) { wxMenuBar* mbar = wxMenuBar::MacGetInstalledMenuBar() ; if ( mbar ) @@ -860,6 +895,7 @@ bool wxApp::Initialize(int& argc, wxChar **argv) } AEEventHandlerUPP sODocHandler = NULL ; +AEEventHandlerUPP sGURLHandler = NULL ; AEEventHandlerUPP sOAppHandler = NULL ; AEEventHandlerUPP sPDocHandler = NULL ; AEEventHandlerUPP sRAppHandler = NULL ; @@ -882,6 +918,7 @@ bool wxApp::OnInitGui() if (!sm_isEmbedded) { sODocHandler = NewAEEventHandlerUPP(AEHandleODoc) ; + sGURLHandler = NewAEEventHandlerUPP(AEHandleGURL) ; sOAppHandler = NewAEEventHandlerUPP(AEHandleOApp) ; sPDocHandler = NewAEEventHandlerUPP(AEHandlePDoc) ; sRAppHandler = NewAEEventHandlerUPP(AEHandleRApp) ; @@ -889,6 +926,8 @@ bool wxApp::OnInitGui() AEInstallEventHandler( kCoreEventClass , kAEOpenDocuments , sODocHandler , 0 , FALSE ) ; + AEInstallEventHandler( kInternetEventClass, kAEGetURL, + sGURLHandler , 0 , FALSE ) ; AEInstallEventHandler( kCoreEventClass , kAEOpenApplication , sOAppHandler , 0 , FALSE ) ; AEInstallEventHandler( kCoreEventClass , kAEPrintDocuments , @@ -937,6 +976,8 @@ void wxApp::CleanUp() { AERemoveEventHandler( kCoreEventClass , kAEOpenDocuments , sODocHandler , FALSE ) ; + AERemoveEventHandler( kInternetEventClass, kAEGetURL, + sGURLHandler , FALSE ) ; AERemoveEventHandler( kCoreEventClass , kAEOpenApplication , sOAppHandler , FALSE ) ; AERemoveEventHandler( kCoreEventClass , kAEPrintDocuments , @@ -947,6 +988,7 @@ void wxApp::CleanUp() sQuitHandler , FALSE ) ; DisposeAEEventHandlerUPP( sODocHandler ) ; + DisposeAEEventHandlerUPP( sGURLHandler ) ; DisposeAEEventHandlerUPP( sOAppHandler ) ; DisposeAEEventHandlerUPP( sPDocHandler ) ; DisposeAEEventHandlerUPP( sRAppHandler ) ; @@ -1499,8 +1541,18 @@ bool wxApp::MacSendKeyDownEvent( wxWindow* focus , long keymessage , long modifi int command = ancestor->GetAcceleratorTable()->GetCommand( event ); if (command != -1) { + wxEvtHandler * const handler = ancestor->GetEventHandler(); + wxCommandEvent command_event( wxEVT_COMMAND_MENU_SELECTED, command ); - handled = ancestor->GetEventHandler()->ProcessEvent( command_event ); + handled = handler->ProcessEvent( command_event ); + + if ( !handled ) + { + // accelerators can also be used with buttons, try them too + command_event.SetEventType(wxEVT_COMMAND_BUTTON_CLICKED); + handled = handler->ProcessEvent( command_event ); + } + break; }