]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/cocoa/nonownedwnd.mm
Border styles create a double-border on native search ctrl, just use the one Apple...
[wxWidgets.git] / src / osx / cocoa / nonownedwnd.mm
index e8431e76a8720d4b14a8f26c93edd7677930ed1e..bdee26db1a0067a8a227dfce35ab9613a4f6bd8e 100644 (file)
@@ -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;
 }