X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1034a6bbff7d4968ab8e273c0b94b49b0a2ae8e2..9d136b8b500afbc460702407475a794e6ae7bf6b:/src/osx/cocoa/utils.mm diff --git a/src/osx/cocoa/utils.mm b/src/osx/cocoa/utils.mm index 3fdecac375..0f2eb3e517 100644 --- a/src/osx/cocoa/utils.mm +++ b/src/osx/cocoa/utils.mm @@ -52,7 +52,27 @@ void wxBell() void wxMacWakeUp() { - // TODO + // ensure that we have an auto release pool in place because the event will + // be autoreleased from NSEvent:otherEventWithType and we might not have a + // global pool during startup or shutdown and we actually never have it if + // we're called from another thread + // + // FIXME: we can't use wxMacAutoreleasePool here because it's in core and + // we're in base + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + NSEvent* wakeupEvent = [NSEvent otherEventWithType:NSApplicationDefined + location:NSZeroPoint + modifierFlags:NSAnyEventMask + timestamp:0 + windowNumber:0 + context:nil + subtype:0 + data1:0 + data2:0]; + [NSApp postEvent:wakeupEvent atStart:NO]; + + [pool release]; } #endif // wxUSE_BASE @@ -146,9 +166,9 @@ void wxMacWakeUp() } @end -/* +/* allows ShowModal to work when using sheets. - see include/wx/osx/cocoa/private.h for more info + see include/wx/osx/cocoa/private.h for more info */ @implementation ModalDialogDelegate - (id)init @@ -159,7 +179,7 @@ void wxMacWakeUp() return self; } -- (BOOL)finished +- (BOOL)finished { return sheetFinished; } @@ -234,6 +254,34 @@ void wxGetMousePosition( int* x, int* y ) *y = pt.y; }; +#if wxOSX_USE_COCOA && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_6 + +wxMouseState wxGetMouseState() +{ + wxMouseState ms; + + wxPoint pt = wxGetMousePosition(); + ms.SetX(pt.x); + ms.SetY(pt.y); + + NSUInteger modifiers = [NSEvent modifierFlags]; + NSUInteger buttons = [NSEvent pressedMouseButtons]; + + ms.SetLeftDown( (buttons & 0x01) != 0 ); + ms.SetMiddleDown( (buttons & 0x04) != 0 ); + ms.SetRightDown( (buttons & 0x02) != 0 ); + + ms.SetControlDown(modifiers & NSControlKeyMask); + ms.SetShiftDown(modifiers & NSShiftKeyMask); + ms.SetAltDown(modifiers & NSAlternateKeyMask); + ms.SetMetaDown(modifiers & NSCommandKeyMask); + + return ms; +} + + +#endif + wxTimerImpl* wxGUIAppTraits::CreateTimerImpl(wxTimer *timer) { return new wxOSXTimerImpl(timer); @@ -298,7 +346,7 @@ wxBitmap wxWindowDCImpl::DoGetAsBitmap(const wxRect *subrect) const // called from OnPaint, even with the window's paint dc as source (see wxHTMLWindow) NSBitmapImageRep *rep = [[[NSBitmapImageRep alloc] initWithFocusedViewRect: [view bounds]] retain]; [view unlockFocus]; - + wxBitmap bitmap(width, height); if ( [rep respondsToSelector:@selector(CGImage)] ) { @@ -321,4 +369,4 @@ wxBitmap wxWindowDCImpl::DoGetAsBitmap(const wxRect *subrect) const #endif // wxUSE_GUI -#endif // wxOSX_USE_COCOA \ No newline at end of file +#endif // wxOSX_USE_COCOA