X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/54f11060867c4c97ebbe7954353f5c311262fc4b..896a8d2951f763a247b5116acab71bfc74a8b3fa:/src/osx/cocoa/utils.mm diff --git a/src/osx/cocoa/utils.mm b/src/osx/cocoa/utils.mm index 2bd4e81428..b8aa14190b 100644 --- a/src/osx/cocoa/utils.mm +++ b/src/osx/cocoa/utils.mm @@ -56,7 +56,7 @@ void wxMacWakeUp() } #endif // wxUSE_BASE - + #if wxUSE_GUI @interface wxNSAppController : NSObject @@ -76,12 +76,14 @@ void wxMacWakeUp() - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender { + wxUnusedVar(sender); // let wx do this, not cocoa return NO; } - (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename; { + wxUnusedVar(sender); wxCFStringRef cf(wxCFRetain(filename)); wxTheApp->MacOpenFile(cf.AsString()) ; return YES; @@ -89,18 +91,20 @@ void wxMacWakeUp() - (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender; { + wxUnusedVar(sender); wxTheApp->MacNewFile() ; return NO; } - (BOOL)application:(NSApplication *)sender printFile:(NSString *)filename { + wxUnusedVar(sender); 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 @@ -109,11 +113,12 @@ void wxMacWakeUp() */ - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { + wxUnusedVar(sender); wxWindow* win = wxTheApp->GetTopWindow() ; if ( win ) { wxCommandEvent exitEvent(wxEVT_COMMAND_MENU_SELECTED, wxApp::s_macExitMenuItemId); - if (!win->ProcessEvent(exitEvent)) + if (!win->GetEventHandler()->ProcessEvent(exitEvent)) win->Close(true) ; } else @@ -125,6 +130,8 @@ void wxMacWakeUp() - (BOOL)applicationShouldHandleReopen:(NSApplication *)sender hasVisibleWindows:(BOOL)flag { + wxUnusedVar(flag); + wxUnusedVar(sender); wxTheApp->MacReopenApp() ; return NO; } @@ -132,26 +139,70 @@ void wxMacWakeUp() - (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent { + wxUnusedVar(replyEvent); NSString* url = [[event descriptorAtIndex:1] stringValue]; wxCFStringRef cf(wxCFRetain(url)); wxTheApp->MacOpenURL(cf.AsString()) ; } @end +/* + allows ShowModal to work when using sheets. + see include/wx/osx/cocoa/private.h for more info +*/ +@implementation ModalDialogDelegate +- (id)init +{ + [super init]; + sheetFinished = NO; + resultCode = -1; + return self; +} + +- (BOOL)finished +{ + return sheetFinished; +} + +- (int)code +{ + return resultCode; +} + +- (void)waitForSheetToFinish +{ + while (!sheetFinished) + { + wxSafeYield(); + } +} + +- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo +{ + wxUnusedVar(contextInfo); + resultCode = returnCode; + sheetFinished = YES; + // NSAlerts don't need nor respond to orderOut + if ([sheet respondsToSelector:@selector(orderOut:)]) + [sheet orderOut: self]; +} +@end + bool wxApp::DoInitGui() { + wxMacAutoreleasePool pool; [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; } @@ -171,7 +222,7 @@ void wxClientDisplayRect(int *x, int *y, int *width, int *height) *width = r.GetWidth(); if ( height ) *height = r.GetHeight(); - + } void wxGetMousePosition( int* x, int* y ) @@ -226,37 +277,29 @@ bool wxIsBusy() return (gs_wxBusyCursorCount > 0); } -void wxMacGlobalToLocal( WindowRef window , Point*pt ) -{ -} - -void wxMacLocalToGlobal( WindowRef window , Point*pt ) -{ -} - wxBitmap wxWindowDCImpl::DoGetAsBitmap(const wxRect *subrect) const { // wxScreenDC is derived from wxWindowDC, so a screen dc will // call this method when a Blit is performed with it as a source. if (!m_window) return wxNullBitmap; - + wxSize sz = m_window->GetSize(); - + int left = subrect != NULL ? subrect->x : 0 ; int top = subrect != NULL ? subrect->y : 0 ; int width = subrect != NULL ? subrect->width : sz.x; int height = subrect != NULL ? subrect->height : sz.y ; - + NSRect rect = NSMakeRect(left, top, width, height ); NSView* view = (NSView*) m_window->GetHandle(); [view lockFocus]; - // we use this method as other methods force a repaint, and this method can be + // we use this method as other methods force a repaint, and this method can be // called from OnPaint, even with the window's paint dc as source (see wxHTMLWindow) NSBitmapImageRep *rep = [[[NSBitmapImageRep alloc] initWithFocusedViewRect: [view bounds]] retain]; [view unlockFocus]; - - CGImageRef cgImageRef = (CGImageRef)[rep CGImage]; + + CGImageRef cgImageRef = (CGImageRef)[rep CGImage]; wxBitmap bitmap(CGImageGetWidth(cgImageRef) , CGImageGetHeight(cgImageRef) ); CGRect r = CGRectMake( 0 , 0 , CGImageGetWidth(cgImageRef) , CGImageGetHeight(cgImageRef) ); @@ -265,7 +308,7 @@ wxBitmap wxWindowDCImpl::DoGetAsBitmap(const wxRect *subrect) const CGImageRelease(cgImageRef); cgImageRef = NULL; [rep release]; - + return bitmap; }