X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/826da45133baecd8a8a13af301a00bc00a1c8013..b13d363b87017dbac11e74d11447288f17b62998:/src/osx/cocoa/nonownedwnd.mm diff --git a/src/osx/cocoa/nonownedwnd.mm b/src/osx/cocoa/nonownedwnd.mm index e8431e76a8..bdee26db1a 100644 --- a/src/osx/cocoa/nonownedwnd.mm +++ b/src/osx/cocoa/nonownedwnd.mm @@ -116,6 +116,11 @@ typedef void (*wxOSX_NoResponderHandlerPtr)(NSView* self, SEL _cmd, SEL selector impl = theImplementation; } +- (BOOL)canBecomeKeyWindow +{ + return YES; +} + - (wxNonOwnedWindowCocoaImpl*) implementation { return impl; @@ -144,8 +149,8 @@ typedef void (*wxOSX_NoResponderHandlerPtr)(NSView* self, SEL _cmd, SEL selector - (void)windowDidResize:(NSNotification *)notification; - (NSSize)windowWillResize:(NSWindow *)window toSize:(NSSize)proposedFrameSize; -- (void)windowDidResignMain:(NSNotification *)notification; -- (void)windowDidBecomeMain:(NSNotification *)notification; +- (void)windowDidResignKey:(NSNotification *)notification; +- (void)windowDidBecomeKey:(NSNotification *)notification; - (void)windowDidMove:(NSNotification *)notification; - (BOOL)windowShouldClose:(id)window; @@ -219,7 +224,7 @@ typedef void (*wxOSX_NoResponderHandlerPtr)(NSView* self, SEL _cmd, SEL selector } } -- (void)windowDidBecomeMain:(NSNotification *)notification +- (void)windowDidBecomeKey:(NSNotification *)notification { wxNSWindow* window = (wxNSWindow*) [notification object]; wxNonOwnedWindowCocoaImpl* windowimpl = [window implementation]; @@ -231,7 +236,7 @@ typedef void (*wxOSX_NoResponderHandlerPtr)(NSView* self, SEL _cmd, SEL selector } } -- (void)windowDidResignMain:(NSNotification *)notification +- (void)windowDidResignKey:(NSNotification *)notification { wxNSWindow* window = (wxNSWindow*) [notification object]; wxNonOwnedWindowCocoaImpl* windowimpl = [window implementation]; @@ -239,7 +244,15 @@ typedef void (*wxOSX_NoResponderHandlerPtr)(NSView* self, SEL _cmd, SEL selector { wxNonOwnedWindow* wxpeer = windowimpl->GetWXPeer(); if ( wxpeer ) + { wxpeer->HandleActivated(0, false); + // Needed for popup window since the firstResponder + // (focus in wx) doesn't change when this + // TLW becomes inactive. + wxFocusEvent event( wxEVT_KILL_FOCUS, wxpeer->GetId()); + event.SetEventObject(wxpeer); + wxpeer->HandleWindowEvent(event); + } } } @@ -283,8 +296,11 @@ long style, long extraStyle, const wxString& name ) int windowstyle = NSBorderlessWindowMask; - if ( style & wxFRAME_TOOL_WINDOW ) + if ( style & wxFRAME_TOOL_WINDOW || ( style & wxPOPUP_WINDOW ) || + GetWXPeer()->GetExtraStyle() & wxTOPLEVEL_EX_DIALOG ) + { m_macWindow = [wxNSPanel alloc]; + } else m_macWindow = [wxNSWindow alloc]; @@ -383,7 +399,8 @@ long style, long extraStyle, const wxString& name ) [m_macWindow setAcceptsMouseMovedEvents: YES]; - // [m_macWindow makeKeyAndOrderFront:nil]; + if ( ( style & wxPOPUP_WINDOW ) ) + [m_macWindow makeKeyAndOrderFront:nil]; } @@ -483,11 +500,13 @@ void wxNonOwnedWindowCocoaImpl::GetSize( int &width, int &height ) const height = rect.size.height; } -void wxNonOwnedWindowCocoaImpl::GetContentArea( int& left, int &right, int &width, int &height ) const +void wxNonOwnedWindowCocoaImpl::GetContentArea( int& left, int &top, int &width, int &height ) const { NSRect outer = NSMakeRect(100,100,100,100); NSRect content = [NSWindow contentRectForFrameRect:outer styleMask:[m_macWindow styleMask] ]; NSRect rect = [[m_macWindow contentView] frame]; + left = rect.origin.x; + top = rect.origin.y; width = rect.size.width; height = rect.size.height; }