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
// wx native implementation
//
+static NSResponder* s_nextFirstResponder = NULL;
+
@interface wxNSWindow : NSWindow
{
}
- (void) sendEvent:(NSEvent *)event;
- (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen;
- (void)noResponderFor: (SEL) selector;
+- (BOOL)makeFirstResponder:(NSResponder *)aResponder;
@end
@implementation wxNSWindow
return YES;
}
+- (BOOL)makeFirstResponder:(NSResponder *)aResponder
+{
+ s_nextFirstResponder = aResponder;
+ BOOL retval = [super makeFirstResponder:aResponder];
+ s_nextFirstResponder = nil;
+ return retval;
+}
+
@end
@interface wxNSPanel : NSPanel
- (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen;
- (void)noResponderFor: (SEL) selector;
- (void)sendEvent:(NSEvent *)event;
+- (BOOL)makeFirstResponder:(NSResponder *)aResponder;
@end
@implementation wxNSPanel
}
}
+- (BOOL)makeFirstResponder:(NSResponder *)aResponder
+{
+ s_nextFirstResponder = aResponder;
+ BOOL retval = [super makeFirstResponder:aResponder];
+ s_nextFirstResponder = nil;
+ return retval;
+}
+
@end
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 ( style & wxFRAME_TOOL_WINDOW || ( style & wxPOPUP_WINDOW ) ||
GetWXPeer()->GetExtraStyle() & wxTOPLEVEL_EX_DIALOG )
- {
m_macWindow = [wxNSPanel alloc];
- }
else
m_macWindow = [wxNSWindow alloc];
+ [m_macWindow setAcceptsMouseMovedEvents:YES];
+
CGWindowLevel level = kCGNormalWindowLevel;
if ( style & wxFRAME_TOOL_WINDOW )
if ( wxpeer )
{
// add to parent window before showing
- if ( wxpeer->GetParent() )
+ wxDialog * const dialog = wxDynamicCast(wxpeer, wxDialog);
+ if ( wxpeer->GetParent() && dialog && dialog->IsModal())
{
NSView * parentView = wxpeer->GetParent()->GetPeer()->GetWXWidget();
if ( parentView )
void wxNonOwnedWindowCocoaImpl::SetWindowStyleFlag( long style )
{
- if (m_macWindow)
+ // don't mess with native wrapped windows, they might throw an exception when their level is changed
+ if (!m_wxPeer->IsNativeWindowWrapper() && m_macWindow)
{
CGWindowLevel level = kCGNormalWindowLevel;
[m_macWindow setLevel:m_macWindowLevel];
}
+WX_NSResponder wxNonOwnedWindowCocoaImpl::GetNextFirstResponder()
+{
+ return s_nextFirstResponder;
+}
+
+
//
//
//