diff --git a/include/wx/osx/core/private.h b/include/wx/osx/core/private.h index 5d91413470..b21995257a 100644 --- a/include/wx/osx/core/private.h +++ b/include/wx/osx/core/private.h @@ -288,6 +288,8 @@ public : #if wxUSE_MARKUP && wxOSX_USE_COCOA virtual void SetLabelMarkup( const wxString& WXUNUSED(markup) ) { } #endif + virtual void SetInitialLabel( const wxString& title, wxFontEncoding encoding ) + { SetLabel(title, encoding); } virtual void SetCursor( const wxCursor & cursor ) = 0; virtual void CaptureMouse() = 0; diff --git a/src/osx/cocoa/nativewin.mm b/src/osx/cocoa/nativewin.mm index f2be5a7873..82dc4775d1 100644 --- a/src/osx/cocoa/nativewin.mm +++ b/src/osx/cocoa/nativewin.mm @@ -30,6 +30,27 @@ // implementation // ============================================================================ +namespace +{ + +class wxNativeWidgetCocoaImpl : public wxWidgetCocoaImpl +{ +public: + wxNativeWidgetCocoaImpl(wxWindowMac* peer, WXWidget w) : wxWidgetCocoaImpl(peer, w) + {} + + virtual void SetInitialLabel(const wxString& WXUNUSED(title), wxFontEncoding WXUNUSED(encoding)) wxOVERRIDE + { + // Don't set initial label, because the control was created by the + // caller and is already fully setup. And some controls (notably + // NSPathControl) assert if an unexpected string value, such as an empty + // string, is set. + } +}; + +} // anonymous namespace + + bool wxNativeWindow::Create(wxWindow* parent, wxWindowID winid, @@ -62,7 +83,7 @@ wxNativeWindow::Create(wxWindow* parent, // As wxWidgets will release the view when this object is destroyed, retain // it here to avoid destroying the view owned by the user code. [view retain]; - SetPeer(new wxWidgetCocoaImpl(this, view)); + SetPeer(new wxNativeWidgetCocoaImpl(this, view)); // It doesn't seem necessary to use MacPostControlCreate() here as we never // change the native control geometry here. diff --git a/src/osx/window_osx.cpp b/src/osx/window_osx.cpp index f12c025753..97acee559d 100644 --- a/src/osx/window_osx.cpp +++ b/src/osx/window_osx.cpp @@ -353,8 +353,7 @@ void wxWindowMac::SetPeer(wxOSXWidgetImpl* peer) if ( !m_hasFont ) DoSetWindowVariant( m_windowVariant ); - if ( !m_label.empty() ) - GetPeer()->SetLabel( wxStripMenuCodes(m_label, wxStrip_Mnemonics), GetFont().GetEncoding() ) ; + GetPeer()->SetInitialLabel( wxStripMenuCodes(m_label, wxStrip_Mnemonics), GetFont().GetEncoding() ) ; // for controls we want to use best size for wxDefaultSize params ) if ( !GetPeer()->IsUserPane() )