X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2712275c88c78af135489c22d306ed6ad2ad5b1f..ff534ba469473a9ace193e736ca131144df307f9:/src/osx/cocoa/nonownedwnd.mm?ds=inline diff --git a/src/osx/cocoa/nonownedwnd.mm b/src/osx/cocoa/nonownedwnd.mm index 6413556029..1d5475532b 100644 --- a/src/osx/cocoa/nonownedwnd.mm +++ b/src/osx/cocoa/nonownedwnd.mm @@ -131,22 +131,6 @@ bool shouldHandleSelector(SEL selector) ((wxWidgetCocoaImpl*)cw->GetPeer())->DoHandleMouseEvent( event); handled = true; } - else if ( [event type] == NSMouseMoved ) - { - NSPoint nsPoint = [event locationInWindow]; - if ( [event window] != nil ) - nsPoint = [[event window] convertBaseToScreen:nsPoint]; - - wxPoint pt = wxFromNSPoint(NULL, nsPoint); - wxWindow* mw = ::wxFindWindowAtPoint(pt); - if ( mw ) - { - if (wxTheApp) - wxTheApp->MacSetCurrentEvent(event, NULL); - ((wxWidgetCocoaImpl*)mw->GetPeer())->DoHandleMouseEvent( event); - handled = true; - } - } if ( handled ) { if (wxTheApp) @@ -267,7 +251,18 @@ bool shouldHandleSelector(SEL selector) - (void)sendEvent:(NSEvent *) event { if ( ![self WX_filterSendEvent: event] ) + { + WXEVENTREF formerEvent = wxTheApp == NULL ? NULL : wxTheApp->MacGetCurrentEvent(); + WXEVENTHANDLERCALLREF formerHandler = wxTheApp == NULL ? NULL : wxTheApp->MacGetCurrentEventHandlerCallRef(); + + if (wxTheApp) + wxTheApp->MacSetCurrentEvent(event, NULL); + [super sendEvent: event]; + + if (wxTheApp) + wxTheApp->MacSetCurrentEvent(formerEvent , formerHandler); + } } @end @@ -522,6 +517,12 @@ wxNonOwnedWindowCocoaImpl::~wxNonOwnedWindowCocoaImpl() if ( !m_wxPeer->IsNativeWindowWrapper() ) { [m_macWindow setDelegate:nil]; + + // make sure we remove this first, otherwise the ref count will not lead to the + // native window's destruction + if ([m_macWindow parentWindow] != 0) + [[m_macWindow parentWindow] removeChildWindow: m_macWindow]; + [m_macWindow release]; } } @@ -643,8 +644,6 @@ long style, long extraStyle, const wxString& WXUNUSED(name) ) [m_macWindow setDelegate:controller]; - [m_macWindow setAcceptsMouseMovedEvents: YES]; - if ( ( style & wxFRAME_SHAPED) ) { [m_macWindow setOpaque:NO]; @@ -686,14 +685,34 @@ bool wxNonOwnedWindowCocoaImpl::Show(bool show) if ( show ) { wxNonOwnedWindow* wxpeer = GetWXPeer(); - if (wxpeer && !(wxpeer->GetWindowStyle() & wxFRAME_TOOL_WINDOW)) - [m_macWindow makeKeyAndOrderFront:nil]; - else - [m_macWindow orderFront:nil]; + if ( wxpeer ) + { + // add to parent window before showing + if ( wxpeer->GetParent() ) + { + NSView * parentView = wxpeer->GetParent()->GetPeer()->GetWXWidget(); + if ( parentView ) + { + NSWindow* parentNSWindow = [parentView window]; + if ( parentNSWindow ) + [parentNSWindow addChildWindow:m_macWindow ordered:NSWindowAbove]; + } + } + + if (!(wxpeer->GetWindowStyle() & wxFRAME_TOOL_WINDOW)) + [m_macWindow makeKeyAndOrderFront:nil]; + else + [m_macWindow orderFront:nil]; + } [[m_macWindow contentView] setNeedsDisplay: YES]; } else + { + // avoid propagation of orderOut to parent + if ([m_macWindow parentWindow] != 0) + [[m_macWindow parentWindow] removeChildWindow: m_macWindow]; [m_macWindow orderOut:nil]; + } return true; }