]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/toplevel.cpp
DOS compilation fixes
[wxWidgets.git] / src / msw / toplevel.cpp
index 9aeb9eefd5ad77bfd9503f130e43f5078d60ab7c..a7b917f9f112a95a58380147ff72a91930bb289f 100644 (file)
@@ -45,7 +45,7 @@
 
 #ifdef __WXMICROWIN__
 
-static inline bool IsIconic(HWND WXUNUSED(hwnd)) { return FALSE; }
+// static inline bool IsIconic(HWND WXUNUSED(hwnd)) { return FALSE; }
 static inline bool IsZoomed(HWND WXUNUSED(hwnd)) { return FALSE; }
 
 #endif // __WXMICROWIN__
@@ -196,11 +196,18 @@ bool wxTopLevelWindowMSW::CreateDialog(const wxChar *dlgTemplate,
     {
         parent = wxTheApp->GetTopWindow();
 
-        // but don't use the window which is currently hidden as then the
-        // dialog would be hidden as well
-        if ( parent && !parent->IsShown() )
+        if ( parent )
         {
-            parent = NULL;
+            // don't use transient windows as parents, this is dangerous as it
+            // can lead to a crash if the parent is destroyed before the child
+            //
+            // also don't use the window which is currently hidden as then the
+            // dialog would be hidden as well
+            if ( (parent->GetExtraStyle() & wxWS_EX_TRANSIENT) ||
+                    !parent->IsShown() )
+            {
+                parent = NULL;
+            }
         }
     }
 
@@ -252,35 +259,39 @@ bool wxTopLevelWindowMSW::CreateDialog(const wxChar *dlgTemplate,
 
     // move the dialog to its initial position without forcing repainting
     int x, y, w, h;
-    if ( MSWGetCreateWindowCoords(pos, size, x, y, w, h) )
+    if ( !MSWGetCreateWindowCoords(pos, size, x, y, w, h) )
     {
-        // we can't use CW_USEDEFAULT here as we're not calling CreateWindow()
-        // and passing CW_USEDEFAULT to MoveWindow() results in resizing the
-        // window to (0, 0) size which breaks quite a lot of things, e.g. the
-        // sizer calculation in wxSizer::Fit()
-        if ( w == (int)CW_USEDEFAULT )
-        {
-            // the exact number doesn't matter, the dialog will be resized
-            // again soon anyhow but it should be big enough to allow
-            // calculation relying on "totalSize - clientSize > 0" work, i.e.
-            // at least greater than the title bar height
-            w =
-            h = 100;
-        }
+        x =
+        w = (int)CW_USEDEFAULT;
+    }
 
-        if ( x == (int)CW_USEDEFAULT )
-        {
-            // well, where should we put it? maybe centre it on screen?
-            x =
-            y = 0;
-        }
+    // we can't use CW_USEDEFAULT here as we're not calling CreateWindow()
+    // and passing CW_USEDEFAULT to MoveWindow() results in resizing the
+    // window to (0, 0) size which breaks quite a lot of things, e.g. the
+    // sizer calculation in wxSizer::Fit()
+    if ( w == (int)CW_USEDEFAULT )
+    {
+        // the exact number doesn't matter, the dialog will be resized
+        // again soon anyhow but it should be big enough to allow
+        // calculation relying on "totalSize - clientSize > 0" work, i.e.
+        // at least greater than the title bar height
+        w =
+        h = 100;
+    }
 
-        if ( !::MoveWindow(GetHwnd(), x, y, w, h, FALSE) )
-        {
-            wxLogLastError(wxT("MoveWindow"));
-        }
+    if ( x == (int)CW_USEDEFAULT )
+    {
+        // centre it on the screen - what else can we do?
+        wxSize sizeDpy = wxGetDisplaySize();
+
+        x = (sizeDpy.x - w) / 2;
+        y = (sizeDpy.y - h) / 2;
+    }
+
+    if ( !::MoveWindow(GetHwnd(), x, y, w, h, FALSE) )
+    {
+        wxLogLastError(wxT("MoveWindow"));
     }
-    //else: leave it at default position
 
     if ( !title.empty() )
     {
@@ -616,8 +627,9 @@ bool wxTopLevelWindowMSW::EnableCloseButton(bool enable)
 
     // enabling/disabling the close item from it also automatically
     // disables/enables the close title bar button
-    if ( !::EnableMenuItem(hmenu, SC_CLOSE,
-                           MF_BYCOMMAND | (enable ? MF_ENABLED : MF_GRAYED)) )
+    if ( ::EnableMenuItem(hmenu, SC_CLOSE,
+                          MF_BYCOMMAND |
+                          (enable ? MF_ENABLED : MF_GRAYED)) == -1 )
     {
         wxLogLastError(_T("EnableMenuItem(SC_CLOSE)"));