return (wxNonOwnedWindowCocoaImpl*) wxNonOwnedWindowImpl::FindFromWXWindow( self );
}
-// TODO in cocoa everything during a drag is sent to the NSWindow the mouse down occured,
+// TODO in cocoa everything during a drag is sent to the NSWindow the mouse down occurred,
// this does not conform to the wx behaviour if the window is not captured, so try to resend
// or capture all wx mouse event handling at the tlw as we did for carbon
((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)
if ( wxpeer )
{
wxpeer->HandleActivated(0, false);
+ // as for wx the deactivation also means losing focus we
+ // must trigger this manually
+ [window makeFirstResponder:nil];
+
+ // TODO Remove if no problems arise with Popup Windows
+#if 0
// 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);
+#endif
}
}
}
}
return editor;
}
+ else if ([anObject isKindOfClass:[wxNSComboBox class]])
+ {
+ wxNSComboBox * cb = (wxNSComboBox*) anObject;
+ wxNSTextFieldEditor* editor = [cb fieldEditor];
+ if ( editor == nil )
+ {
+ editor = [[wxNSTextFieldEditor alloc] init];
+ [editor setFieldEditor:YES];
+ [cb setFieldEditor:editor];
+ [editor release];
+ }
+ return editor;
+ }
return nil;
}
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];
}
}
[m_macWindow setDelegate:controller];
- [m_macWindow setAcceptsMouseMovedEvents: YES];
-
if ( ( style & wxFRAME_SHAPED) )
{
[m_macWindow setOpaque:NO];
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
+ wxDialog * const dialog = wxDynamicCast(wxpeer, wxDialog);
+ if ( wxpeer->GetParent() && dialog && dialog->IsModal())
+ {
+ 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;
}