]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/toplevel.cpp
call Create from wxGrid non-default ctor instead to ensure both methods of creation...
[wxWidgets.git] / src / msw / toplevel.cpp
index a7217b5c9181c7196494004af13848519807aee6..d0e47ea963779007705bf202e56f843aff7608f3 100644 (file)
@@ -660,10 +660,14 @@ bool wxTopLevelWindowMSW::Show(bool show)
         }
         else // just show
         {
-           if ( GetWindowStyle() & wxFRAME_TOOL_WINDOW )
-               nShowCmd = SW_SHOWNA;
-           else
-               nShowCmd = SW_SHOW;
+            // we shouldn't use SW_SHOW which also activates the window for
+            // tool frames (as they shouldn't steal focus from the main window)
+            // nor for the currently disabled windows as they would be enabled
+            // as a side effect
+            if ( HasFlag(wxFRAME_TOOL_WINDOW) || !IsEnabled() )
+                nShowCmd = SW_SHOWNA;
+            else
+                nShowCmd = SW_SHOW;
         }
     }
     else // hide
@@ -1172,55 +1176,50 @@ bool wxTopLevelWindowMSW::CanSetTransparent()
 }
 
 
-void wxTopLevelWindowMSW::Freeze()
+void wxTopLevelWindowMSW::DoFreeze()
 {
-    if ( !m_frozenness++) {
-        if (IsShown()) {
-            for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
-                node;
-                node = node->GetNext() )
-            {
-                wxWindow *child = node->GetData();
-                if ( child->IsTopLevel() )
-                    continue;
-                else
-                    child->Freeze();
-            }
+    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::Thaw()
+void wxTopLevelWindowMSW::DoThaw()
 {
-    wxASSERT_MSG( m_frozenness > 0, _T("Thaw() without matching Freeze()") );
-    if ( --m_frozenness == 0 )
+    if ( IsShown() )
     {
-        if ( IsShown() ) {
-            for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
-                node;
-                node = node->GetNext() )
-            {
-                wxWindow *child = node->GetData();
-                if ( child->IsTopLevel() )
-                    continue;
-                else
-                    child->Thaw();
-            }
+        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 )
+void wxTopLevelWindowMSW::AddChild(wxWindowBase *child)
 {
-    //adding a child while frozen will assert when thawn,
-    // so freeze it
-    if (child && !child->IsTopLevel() && IsFrozen()) {
-        //need to match our current freeze level
-        for (unsigned int ii=0;ii< m_frozenness;ii++) {
-            child->Freeze();
-        }
+    // 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);
 }