ecere/gui/Window; drivers/Win32Interface: (#240, #285) Avoid re-creating a new window...
authorJerome St-Louis <jerome@ecere.com>
Wed, 19 Feb 2014 15:35:21 +0000 (10:35 -0500)
committerJerome St-Louis <jerome@ecere.com>
Wed, 19 Feb 2014 15:35:21 +0000 (10:35 -0500)
- #240, #285 might already have been fixed by earlier commits, these were remaining related issues found while testing.

ecere/src/gui/Window.ec
ecere/src/gui/drivers/Win32Interface.ec

index bacd3df..ee9574e 100644 (file)
@@ -4832,7 +4832,8 @@ private:
          subclass(DisplayDriver) dDriver = (dispDriver && !formDesigner) ? dispDriver : GetDisplayDriver(guiApp.defaultDisplayDriver);
          DisplaySystem displaySystem = dDriver ? dDriver.displaySystem : null;
 
-         windowHandle = dDriver.printer ? null : guiApp.interfaceDriver.CreateRootWindow(this);
+         if(!windowHandle)
+            windowHandle = dDriver.printer ? null : guiApp.interfaceDriver.CreateRootWindow(this);
 
          // This was here, is it really needed?
          //guiApp.interfaceDriver.ActivateRootWindow(this);
index 739bae5..7aca89c 100644 (file)
@@ -1542,9 +1542,19 @@ class Win32Interface : Interface
          {
             case maximized:
             case normal:
-               ShowWindow(window.windowHandle, ((window.active || window.creationActivation == activate) && !externalDisplayChange) ?
-                  ((window.nativeDecorations && state == maximized) ? SW_MAXIMIZE : SW_SHOWNORMAL) : SW_SHOWNOACTIVATE);
+            {
+               if((window.active || window.creationActivation == activate) && !externalDisplayChange)
+                  ShowWindow(window.windowHandle, (window.nativeDecorations && state == maximized) ? SW_MAXIMIZE : SW_SHOWNORMAL);
+               else
+               {
+                  WINDOWPLACEMENT plc = { 0 };
+                  GetWindowPlacement(window.windowHandle, &plc);
+                  plc.showCmd = (window.nativeDecorations && state == maximized) ? SW_MAXIMIZE : SW_SHOWNORMAL;
+                  ShowWindow(window.windowHandle, SW_SHOWNOACTIVATE);
+                  SetWindowPlacement(window.windowHandle, &plc);
+               }
                break;
+            }
             case minimized:
                ShowWindow(window.windowHandle, SW_MINIMIZE);
                break;