+    wxModalDialogs.Append(this);
+    if (pOldFocus)
+        hWndOldFocus = (HWND)pOldFocus->GetHWND();
+
+    //
+    // Remember where the focus was
+    //
+    if (!pOldFocus)
+    {
+        pOldFocus = pParent;
+        if (pParent)
+            hWndOldFocus = GetHwndOf(pParent);
+    }
+
+    //
+    // Disable all other app windows
+    //
+    wxASSERT_MSG(!m_pWindowDisabler, _T("disabling windows twice?"));
+
+    m_pWindowDisabler = new wxWindowDisabler(this);
+
+    //
+    // Enter the modal loop
+    //
+    while ( IsModalShowing() )
+    {
+#if wxUSE_THREADS
+        wxMutexGuiLeaveOrEnter();
+#endif // wxUSE_THREADS
+
+        while ( !wxTheApp->Pending() && wxTheApp->ProcessIdle() )
+            ;
+
+        // a message came or no more idle processing to do
+        wxTheApp->DoMessage();
+    }
+
+    //
+    // Snd restore focus
+    // Note that this code MUST NOT access the dialog object's data
+    // in case the object has been deleted (which will be the case
+    // for a modal dialog that has been destroyed before calling EndModal).
+    //
+    if (pOldFocus && (pOldFocus != this) && ::WinIsWindow(vHabmain, hWndOldFocus))
+    {
+        //
+        // This is likely to prove that the object still exists
+        //
+        if (wxFindWinFromHandle((WXHWND) hWndOldFocus) == pOldFocus)
+            pOldFocus->SetFocus();
+    }
+} // end of wxDialog::DoShowModal
+
+bool wxDialog::Show(
+  bool                              bShow
+)