]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/wincmn.cpp
fixes #9951
[wxWidgets.git] / src / common / wincmn.cpp
index bf4f7da3012712c2e5794a4e4b7e12600733a895..c40aa1d746070b42912850d697c976a42a95738a 100644 (file)
@@ -841,18 +841,21 @@ void wxWindowBase::DoGetScreenPosition(int *x, int *y) const
     ClientToScreen(x, y);
 }
 
-void wxWindowBase::SendSizeEvent()
+void wxWindowBase::SendSizeEvent(int flags)
 {
     wxSizeEvent event(GetSize(), GetId());
     event.SetEventObject(this);
-    HandleWindowEvent(event);
+    if ( flags & wxSEND_EVENT_POST )
+        wxPostEvent(this, event);
+    else
+        HandleWindowEvent(event);
 }
 
-void wxWindowBase::SendSizeEventToParent()
+void wxWindowBase::SendSizeEventToParent(int flags)
 {
     wxWindow * const parent = GetParent();
     if ( parent && !parent->IsBeingDeleted() )
-        parent->SendSizeEvent();
+        parent->SendSizeEvent(flags);
 }
 
 // ----------------------------------------------------------------------------
@@ -1004,7 +1007,7 @@ void wxWindowBase::AddChild(wxWindowBase *child)
     GetChildren().Append((wxWindow*)child);
     child->SetParent(this);
 
-    // adding a child while frozen will assert when thawn, so freeze it as if
+    // adding a child while frozen will assert when thawed, so freeze it as if
     // it had been already present when we were frozen
     if ( IsFrozen() && !child->IsTopLevel() )
         child->Freeze();
@@ -1016,7 +1019,10 @@ void wxWindowBase::RemoveChild(wxWindowBase *child)
 
     // removing a child while frozen may result in permanently frozen window
     // if used e.g. from Reparent(), so thaw it
-    if ( IsFrozen() && !child->IsTopLevel() )
+    //
+    // NB: IsTopLevel() doesn't return true any more when a TLW child is being
+    //     removed from its ~wxWindowBase, so check for IsBeingDeleted() too
+    if ( IsFrozen() && !child->IsBeingDeleted() && !child->IsTopLevel() )
         child->Thaw();
 
     GetChildren().DeleteObject((wxWindow *)child);
@@ -2635,7 +2641,10 @@ void wxWindowBase::ReleaseMouse()
 
     wxASSERT_MSG( !ms_winCaptureChanging, _T("recursive ReleaseMouse call?") );
 
-    wxASSERT_MSG( GetCapture() == this, wxT("attempt to release mouse, but this window hasn't captured it") );
+    wxASSERT_MSG( GetCapture() == this,
+                  "attempt to release mouse, but this window hasn't captured it" );
+    wxASSERT_MSG( ms_winCaptureCurrent == this,
+                  "attempt to release mouse, but this window hasn't captured it" );
 
     ms_winCaptureChanging = true;