X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c5cc7fbd27fb53c36beb0ade36153ae48d9e961e..0b83552acf359689c43d641175f7292391f6a9e6:/src/common/wincmn.cpp?ds=inline diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index d36b727cf0..27a560c9b9 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -213,9 +213,8 @@ wxWindowBase::wxWindowBase() bool wxWindowBase::CreateBase(wxWindowBase *parent, wxWindowID id, const wxPoint& WXUNUSED(pos), - const wxSize& WXUNUSED(size), + const wxSize& size, long style, - const wxValidator& wxVALIDATOR_PARAM(validator), const wxString& name) { // ids are limited to 16 bits under MSW so if you care about portability, @@ -240,9 +239,32 @@ bool wxWindowBase::CreateBase(wxWindowBase *parent, // flags by updating the window dynamically and we don't need this here m_windowStyle = style; + // assume the user doesn't want this window to shrink beneath its initial + // size, this worked like this in wxWidgets 2.8 and before and generally + // often makes sense for child windows (for top level ones it definitely + // does not as the user should be able to resize the window) + // + // note that we can't use IsTopLevel() from ctor + if ( !wxTopLevelWindows.Find((wxWindow *)this) ) + SetMinSize(size); + SetName(name); SetParent(parent); + return true; +} + +bool wxWindowBase::CreateBase(wxWindowBase *parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style, + const wxValidator& wxVALIDATOR_PARAM(validator), + const wxString& name) +{ + if ( !CreateBase(parent, id, pos, size, style, name) ) + return false; + #if wxUSE_VALIDATORS SetValidator(validator); #endif // wxUSE_VALIDATORS @@ -593,19 +615,14 @@ wxSize wxWindowBase::DoGetBestSize() const } else // ! has children { - // for a generic window there is no natural best size so, if the - // minimal size is not set, use the current size but take care to - // remember it as minimal size for the next time because our best size - // should be constant: otherwise we could get into a situation when the - // window is initially at some size, then expanded to a larger size and - // then, when the containing window is shrunk back (because our initial - // best size had been used for computing the parent min size), we can't - // be shrunk back any more because our best size is now bigger wxSize size = GetMinSize(); if ( !size.IsFullySpecified() ) { - size.SetDefaults(GetSize()); - wxConstCast(this, wxWindowBase)->SetMinSize(size); + // if the window doesn't define its best size we assume that it can + // be arbitrarily small -- usually this is not the case, of course, + // but we have no way to know what the limit is, it should really + // override DoGetBestClientSize() itself to tell us + size.SetDefaults(wxSize(1, 1)); } // return as-is, unadjusted by the client size difference. @@ -707,6 +724,21 @@ wxSize wxWindowBase::GetEffectiveMinSize() const return min; } +wxSize wxWindowBase::DoGetBorderSize() const +{ + // there is one case in which we can implement it for all ports easily: + // do it as some classes used by both wxUniv and native ports (e.g. + // wxGenericStaticText) do override DoGetBestClientSize() and so this + // method must work for them and that ensures that it does, at least in + // the default case) + if ( GetBorder() == wxBORDER_NONE ) + return wxSize(0, 0); + + wxFAIL_MSG( "must be overridden if called" ); + + return wxDefaultSize; +} + wxSize wxWindowBase::GetBestSize() const { if ( !m_windowSizer && m_bestSizeCache.IsFullySpecified() ) @@ -2454,7 +2486,7 @@ wxPoint wxWindowBase::ConvertDialogToPixels(const wxPoint& pt) // ---------------------------------------------------------------------------- // propagate the colour change event to the subwindows -void wxWindowBase::OnSysColourChanged(wxSysColourChangedEvent& event) +void wxWindowBase::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(event)) { wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); while ( node ) @@ -2464,7 +2496,7 @@ void wxWindowBase::OnSysColourChanged(wxSysColourChangedEvent& event) if ( !win->IsTopLevel() ) { wxSysColourChangedEvent event2; - event.SetEventObject(win); + event2.SetEventObject(win); win->GetEventHandler()->ProcessEvent(event2); } @@ -2558,8 +2590,11 @@ wxWindowBase::DoGetPopupMenuSelectionFromUser(wxMenu& menu, int x, int y) #endif // wxUSE_MENUS -// methods for drawing the sizers in a visible way -#ifdef __WXDEBUG__ +// methods for drawing the sizers in a visible way: this is currently only +// enabled for "full debug" builds with wxDEBUG_LEVEL==2 as it doesn't work +// that well and also because we don't want to leave it enabled in default +// builds used for production +#if wxDEBUG_LEVEL > 1 static void DrawSizers(wxWindowBase *win); @@ -2641,22 +2676,25 @@ static void DrawSizers(wxWindowBase *win) } } -#endif // __WXDEBUG__ +#endif // wxDEBUG_LEVEL // process special middle clicks void wxWindowBase::OnMiddleClick( wxMouseEvent& event ) { if ( event.ControlDown() && event.AltDown() ) { -#ifdef __WXDEBUG__ +#if wxDEBUG_LEVEL > 1 // Ctrl-Alt-Shift-mclick makes the sizers visible in debug builds if ( event.ShiftDown() ) { DrawSizers(this); - return; } + else #endif // __WXDEBUG__ - ::wxInfoMessageBox((wxWindow*)this); + { + // just Ctrl-Alt-middle click shows information about wx version + ::wxInfoMessageBox((wxWindow*)this); + } } else {