X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2aefc52854807189d44dfe6a9513b99932cabc51..5e0d7b6bce53ad3ceb3c832925c25d2e614a0d62:/src/common/wincmn.cpp diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index 2d41293237..383c61e8fa 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -6,7 +6,7 @@ // Created: 13/07/98 // RCS-ID: $Id$ // Copyright: (c) wxWindows team -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -149,15 +149,13 @@ void wxWindowBase::InitBase() m_hasBgCol = m_hasFgCol = m_hasFont = FALSE; + + m_isBeingDeleted = FALSE; // no style bits m_exStyle = m_windowStyle = 0; - // an optimization for the event processing: checking this flag is much - // faster than using IsKindOf(CLASSINFO(wxWindow)) - m_isWindow = TRUE; - #if wxUSE_CONSTRAINTS // no constraints whatsoever m_constraints = (wxLayoutConstraints *) NULL; @@ -208,11 +206,6 @@ bool wxWindowBase::CreateBase(wxWindowBase *parent, const wxValidator& validator, const wxString& name) { - // m_isWindow is set to TRUE in wxWindowBase::Init() as well as many other - // member variables - check that it has been called (will catch the case - // when a new ctor is added which doesn't call InitWindow) - wxASSERT_MSG( m_isWindow, wxT("Init() must have been called before!") ); - #if wxUSE_STATBOX // wxGTK doesn't allow to create controls with static box as the parent so // this will result in a crash when the program is ported to wxGTK so warn @@ -224,8 +217,14 @@ bool wxWindowBase::CreateBase(wxWindowBase *parent, _T("wxStaticBox can't be used as a window parent!") ); #endif // wxUSE_STATBOX + // ids are limited to 16 bits under MSW so if you care about portability, + // it's not a good idea to use ids out of this range (and negative ids are + // reserved for wxWindows own usage) + wxASSERT_MSG( id == wxID_ANY || (id >= 0 && id < 32767), + _T("invalid id value") ); + // generate a new id if the user doesn't care about it - m_windowId = id == -1 ? NewControlId() : id; + m_windowId = id == wxID_ANY ? NewControlId() : id; SetName(name); SetWindowStyleFlag(style); @@ -618,7 +617,7 @@ void wxWindowBase::SetSizeHints(int minW, int minH, // setting min width greater than max width leads to infinite loops under // X11 and generally doesn't make any sense, so don't allow it wxCHECK_RET( (minW == -1 || maxW == -1 || minW <= maxW) && - (minH == -1 || maxH == -1 || minH < maxH), + (minH == -1 || maxH == -1 || minH <= maxH), _T("min width/height must be less than max width/height!") ); m_minWidth = minW; @@ -2093,6 +2092,52 @@ void wxWindowBase::SendDestroyEvent() GetEventHandler()->ProcessEvent(event); } +// ---------------------------------------------------------------------------- +// event processing +// ---------------------------------------------------------------------------- + +#if wxUSE_VALIDATORS + +bool wxWindowBase::TryValidator(wxEvent& event) +{ + // Can only use the validator of the window which + // is receiving the event + if ( event.GetEventObject() == this ) + { + wxValidator *validator = GetValidator(); + if ( validator && validator->ProcessEvent(event) ) + { + return TRUE; + } + } + + return FALSE; +} + +#endif // wxUSE_VALIDATORS + +bool wxWindowBase::TryParent(wxEvent& event) +{ + // Carry on up the parent-child hierarchy, but only if event is a command + // event: it wouldn't make sense for a parent to receive a child's size + // event, for example + if ( event.IsCommandEvent() ) + { + // honour the requests to stop propagation at this window: this is + // used by the dialogs, for example, to prevent processing the events + // from the dialog controls in the parent frame which rarely, if ever, + // makes sense + if ( !(GetExtraStyle() & wxWS_EX_BLOCK_EVENTS) ) + { + wxWindow *parent = GetParent(); + if ( parent && !parent->IsBeingDeleted() ) + return parent->GetEventHandler()->ProcessEvent(event); + } + } + + return wxEvtHandler::TryParent(event); +} + // ---------------------------------------------------------------------------- // global functions // ----------------------------------------------------------------------------