native apple event support for osx cocoa

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57981 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2009-01-10 18:44:38 +00:00
parent e9c3992c39
commit c6aa5cafc5
3 changed files with 91 additions and 2 deletions

View File

@@ -110,7 +110,7 @@ public:
bool MacSendKeyUpEvent( wxWindow* focus , long keyval , long modifiers , long when , short wherex , short wherey , wxChar uniChar ) ;
bool MacSendCharEvent( wxWindow* focus , long keymessage , long modifiers , long when , short wherex , short wherey , wxChar uniChar ) ;
void MacCreateKeyEvent( wxKeyEvent& event, wxWindow* focus , long keymessage , long modifiers , long when , short wherex , short wherey , wxChar uniChar ) ;
#if wxOSX_USE_COCOA_OR_CARBON
#if wxOSX_CARBON
// we only have applescript on these
virtual short MacHandleAEODoc(const WXAPPLEEVENTREF event , WXAPPLEEVENTREF reply) ;
virtual short MacHandleAEGURL(const WXAPPLEEVENTREF event , WXAPPLEEVENTREF reply) ;

View File

@@ -79,7 +79,7 @@ wxString wxApp::s_macHelpMenuTitleName = wxT("&Help") ;
bool wxApp::sm_isEmbedded = false; // Normally we're not a plugin
#if wxOSX_USE_COCOA_OR_CARBON
#if wxOSX_CARBON
//----------------------------------------------------------------------
// Core Apple Event Support

View File

@@ -59,9 +59,98 @@ void wxMacWakeUp()
#if wxUSE_GUI
@interface wxNSAppController : NSObject
{
}
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender;
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;
- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender;
- (BOOL)application:(NSApplication *)sender printFile:(NSString *)filename;
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender;
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event
withReplyEvent:(NSAppleEventDescriptor *)replyEvent;
@end
@implementation wxNSAppController
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
{
// let wx do this, not cocoa
return NO;
}
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;
{
wxCFStringRef cf(wxCFRetain(filename));
wxTheApp->MacOpenFile(cf.AsString()) ;
return YES;
}
- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender;
{
wxTheApp->MacNewFile() ;
return NO;
}
- (BOOL)application:(NSApplication *)sender printFile:(NSString *)filename
{
wxCFStringRef cf(wxCFRetain(filename));
wxTheApp->MacPrintFile(cf.AsString()) ;
return YES;
}
/*
Allowable return values are:
NSTerminateNow - it is ok to proceed with termination
NSTerminateCancel - the application should not be terminated
NSTerminateLater - it may be ok to proceed with termination later. The application must call -replyToApplicationShouldTerminate: with YES or NO once the answer is known
this return value is for delegates who need to provide document modal alerts (sheets) in order to decide whether to quit.
*/
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
wxWindow* win = wxTheApp->GetTopWindow() ;
if ( win )
{
wxCommandEvent exitEvent(wxEVT_COMMAND_MENU_SELECTED, wxApp::s_macExitMenuItemId);
if (!win->ProcessEvent(exitEvent))
win->Close(true) ;
}
else
{
wxTheApp->ExitMainLoop() ;
}
return NSTerminateCancel;
}
- (BOOL)applicationShouldHandleReopen:(NSApplication *)sender hasVisibleWindows:(BOOL)flag
{
wxTheApp->MacReopenApp() ;
return NO;
}
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event
withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
NSString* url = [[event descriptorAtIndex:1] stringValue];
wxCFStringRef cf(wxCFRetain(url));
wxTheApp->MacOpenURL(cf.AsString()) ;
}
@end
bool wxApp::DoInitGui()
{
[NSApplication sharedApplication];
if (!sm_isEmbedded)
{
wxNSAppController* controller = [[wxNSAppController alloc] init];
[[NSApplication sharedApplication] setDelegate:controller];
NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];
[appleEventManager setEventHandler:controller andSelector:@selector(handleGetURLEvent:withReplyEvent:)
forEventClass:kInternetEventClass andEventID:kAEGetURL];
}
[NSApp finishLaunching];
return true;
}