+
+void wxTopLevelWindowMSW::DoFreeze()
+{
+ if ( IsShown() )
+ {
+ for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
+ node;
+ node = node->GetNext() )
+ {
+ wxWindow *child = node->GetData();
+ if ( child->IsTopLevel() )
+ continue;
+
+ child->Freeze();
+ }
+ }
+}
+
+void wxTopLevelWindowMSW::DoThaw()
+{
+ if ( IsShown() )
+ {
+ for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
+ node;
+ node = node->GetNext() )
+ {
+ wxWindow *child = node->GetData();
+ if ( child->IsTopLevel() )
+ continue;
+
+ child->Thaw();
+ }
+ }
+}
+
+
+void wxTopLevelWindowMSW::AddChild(wxWindowBase *child)
+{
+ // adding a child while frozen will assert when thawn, so freeze it as if
+ // it had been already present when we were frozen
+ if ( child && !child->IsTopLevel() && IsFrozen() )
+ {
+ child->Freeze();
+ }
+
+ wxTopLevelWindowBase::AddChild(child);
+}
+
+