]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix uniconizing hidden top level windows in wxMSW.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 5 Aug 2012 22:44:26 +0000 (22:44 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 5 Aug 2012 22:44:26 +0000 (22:44 +0000)
wxTLW wasn't properly restored if Iconize(false) was called while the window
was hidden.

Fix this by adding yet another special case to wxTopLevelWindowMSW::Show().
This makes it even less comprehensible than before but there doesn't seem to
be any obvious way to simplify this code without totally changing it.

Closes #14539.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72295 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
src/msw/toplevel.cpp

index 29f4ca057ad3f392673c0ee85c1add2aa85ee897..2c53338ad001ed62d053b2e23a6e5fc520a74c4b 100644 (file)
@@ -548,6 +548,7 @@ wxMSW:
 
 - Add support for CURRENCY and SCODE types to OLE Automation helpers (PB).
 - Allow setting LCID used by wxAutomationObject (PB).
+- Fix calling Iconize(false) on hidden top level windows (Christian Walther).
 
 
 2.9.4: (released 2012-07-09)
index e43e038530a4e3ff7cce81aa77301bde498235bb..0d1a0735cdde9113e08dff1284c3b12b08a22715 100644 (file)
@@ -709,9 +709,21 @@ bool wxTopLevelWindowMSW::Show(bool show)
         }
         else if ( m_iconized )
         {
-            // iconize and show
+            // We were iconized while we were hidden, so now we need to show
+            // the window in iconized state.
             nShowCmd = SW_MINIMIZE;
         }
+        else if ( ::IsIconic(GetHwnd()) )
+        {
+            // We were restored while we were hidden, so now we need to show
+            // the window in its normal state.
+            //
+            // As below, don't activate some kinds of windows.
+            if ( HasFlag(wxFRAME_TOOL_WINDOW) || !IsEnabled() )
+                nShowCmd = SW_SHOWNOACTIVATE;
+            else
+                nShowCmd = SW_RESTORE;
+        }
         else // just show
         {
             // we shouldn't use SW_SHOW which also activates the window for
@@ -823,9 +835,9 @@ void wxTopLevelWindowMSW::Iconize(bool iconize)
     }
     else // hidden
     {
-        // iconizing the window shouldn't show it so just remember that we need
-        // to become iconized when shown later
-        m_iconized = true;
+        // iconizing the window shouldn't show it so just update the internal
+        // state (otherwise it's done by DoShowWindow() itself)
+        m_iconized = iconize;
     }
 }