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:
@@ -110,7 +110,7 @@ public:
|
|||||||
bool MacSendKeyUpEvent( wxWindow* focus , long keyval , long modifiers , long when , short wherex , short wherey , wxChar uniChar ) ;
|
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 ) ;
|
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 ) ;
|
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
|
// we only have applescript on these
|
||||||
virtual short MacHandleAEODoc(const WXAPPLEEVENTREF event , WXAPPLEEVENTREF reply) ;
|
virtual short MacHandleAEODoc(const WXAPPLEEVENTREF event , WXAPPLEEVENTREF reply) ;
|
||||||
virtual short MacHandleAEGURL(const WXAPPLEEVENTREF event , WXAPPLEEVENTREF reply) ;
|
virtual short MacHandleAEGURL(const WXAPPLEEVENTREF event , WXAPPLEEVENTREF reply) ;
|
||||||
|
@@ -79,7 +79,7 @@ wxString wxApp::s_macHelpMenuTitleName = wxT("&Help") ;
|
|||||||
|
|
||||||
bool wxApp::sm_isEmbedded = false; // Normally we're not a plugin
|
bool wxApp::sm_isEmbedded = false; // Normally we're not a plugin
|
||||||
|
|
||||||
#if wxOSX_USE_COCOA_OR_CARBON
|
#if wxOSX_CARBON
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// Core Apple Event Support
|
// Core Apple Event Support
|
||||||
|
@@ -59,9 +59,98 @@ void wxMacWakeUp()
|
|||||||
|
|
||||||
#if wxUSE_GUI
|
#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()
|
bool wxApp::DoInitGui()
|
||||||
{
|
{
|
||||||
[NSApplication sharedApplication];
|
[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];
|
[NSApp finishLaunching];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user