X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8d8d36335cf7d3a5bf787e7e2510ac09f4839e5e..ec36b155bd46fe075a4dc7911804632df23bed21:/src/cocoa/toplevel.mm?ds=sidebyside diff --git a/src/cocoa/toplevel.mm b/src/cocoa/toplevel.mm index 97f32f8387..f2e44d4b44 100644 --- a/src/cocoa/toplevel.mm +++ b/src/cocoa/toplevel.mm @@ -19,9 +19,11 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" + +#include "wx/toplevel.h" + #ifndef WX_PRECOMP #include "wx/window.h" - #include "wx/toplevel.h" #include "wx/menuitem.h" #include "wx/frame.h" #include "wx/log.h" @@ -31,9 +33,12 @@ #include "wx/cocoa/autorelease.h" #include "wx/cocoa/string.h" -#import -#import +#include "wx/cocoa/objc/NSView.h" +#include "wx/cocoa/objc/NSWindow.h" #import +#import +#import + // ---------------------------------------------------------------------------- // globals // ---------------------------------------------------------------------------- @@ -129,10 +134,18 @@ bool wxTopLevelWindowCocoa::Create(wxWindow *parent, m_cocoaNSWindow = NULL; m_cocoaNSView = NULL; + // NOTE: We may need to deal with the contentView becoming a wx NSView as well. + NSWindow *newWindow; + // Create a WXNSPanel or a WXNSWindow depending on what type of window is desired. if(style & wxFRAME_TOOL_WINDOW) - SetNSWindow([[NSPanel alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO]); + newWindow = [[WXNSPanel alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO]; else - SetNSWindow([[NSWindow alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO]); + newWindow = [[WXNSWindow alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO]; + // Make sure the default content view is a WXNSView + [newWindow setContentView: [[WX_GET_OBJC_CLASS(WXNSView) alloc] initWithFrame: [[newWindow contentView] frame]]]; + // Associate the window and view + SetNSWindow(newWindow); + // NOTE: SetNSWindow has retained the Cocoa object for this object. // Because we do not release on close, the following release matches the // above alloc and thus the retain count will be 1. @@ -186,6 +199,8 @@ void wxTopLevelWindowCocoa::SetNSWindow(WX_NSWindow cocoaNSWindow) [cocoaNSWindow retain]; [m_cocoaNSWindow release]; m_cocoaNSWindow = cocoaNSWindow; + // NOTE: We are no longer using posing so we won't get events on the + // window's view unless it was explicitly created as the wx view class. if(m_cocoaNSWindow) SetNSView([m_cocoaNSWindow contentView]); else @@ -330,15 +345,36 @@ void wxTopLevelWindowCocoa::OnCloseWindow(wxCloseEvent& event) // wxTopLevelWindowCocoa misc // ---------------------------------------------------------------------------- -void wxTopLevelWindowCocoa::SetTitle( const wxString& WXUNUSED(title)) +void wxTopLevelWindowCocoa::SetTitle(const wxString& title) { - // TODO + [m_cocoaNSWindow setTitle:wxNSStringWithWxString(title)]; } wxString wxTopLevelWindowCocoa::GetTitle() const { - // TODO - return wxEmptyString; + return wxStringWithNSString([m_cocoaNSWindow title]); +} + +wxWindow* wxTopLevelWindowCocoa::SetDefaultItem(wxWindow *win) +{ + wxWindow *old = wxTopLevelWindowBase::SetDefaultItem(win); + NSView *newView = win->GetNSView(); + + NSCell *newCell; + // newView does not have to be an NSControl, we only cast to NSControl* + // to silence the warning about cell not being implemented. + if(newView != nil && [newView respondsToSelector:@selector(cell)]) + newCell = [(NSControl*)newView cell]; + else + newCell = nil; + + if(newCell != nil && ![newCell isKindOfClass:[NSButtonCell class]]) + { // It's not an NSButtonCell, set the default to nil. + newCell = nil; + } + + [GetNSWindow() setDefaultButtonCell:(NSButtonCell*)newCell]; + return old; } bool wxTopLevelWindowCocoa::ShowFullScreen(bool show, long style)