#include "wx/log.h"
#include "wx/intl.h"
#include "wx/frame.h"
+ #include "wx/containr.h" // wxSetFocusToChild()
#endif //WX_PRECOMP
#include "wx/msw/private.h"
#endif // __WXMICROWIN__
+// NB: wxDlgProc must be defined here and not in dialog.cpp because the latter
+// is not included by wxUniv build which does need wxDlgProc
+LONG APIENTRY _EXPORT
+wxDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+
// ----------------------------------------------------------------------------
// globals
// ----------------------------------------------------------------------------
EVT_ACTIVATE(wxTopLevelWindowMSW::OnActivate)
END_EVENT_TABLE()
-// ----------------------------------------------------------------------------
-// wxDialog helpers
-// ----------------------------------------------------------------------------
-
-// Dialog window proc
-LONG APIENTRY _EXPORT
-wxDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch ( message )
- {
- case WM_INITDIALOG:
- // for this message, returning TRUE tells system to set focus to
- // the first control in the dialog box, but as we set the focus
- // ourselves, we return FALSE from here as well, so fall through
-
- default:
- // for all the other ones, FALSE means that we didn't process the
- // message
- return FALSE;
- }
-}
-
// ----------------------------------------------------------------------------
// wxTopLevelWindowMSW creation
// ----------------------------------------------------------------------------
parent = ms_hiddenParent;
}
- return parent ? parent->GetHWND() : NULL;
+ return parent ? parent->GetHWND() : WXHWND(NULL);
}
bool wxTopLevelWindowMSW::CreateDialog(const void *dlgTemplate,
if ( this == ms_hiddenParent )
{
// stop [infinite] recursion which would otherwise happen when we do
- // "delete ms_hiddenParent" below
+ // "delete ms_hiddenParent" below -- and we're not interested in doing
+ // anything of the rest below for that window because the rest of
+ // wxWindows doesn't even know about it
return;
}
- wxTopLevelWindows.DeleteObject(this);
-
if ( wxModelessWindows.Find(this) )
wxModelessWindows.DeleteObject(this);
}
}
- // If this is the last top-level window, exit.
- if ( wxTheApp && (wxTopLevelWindows.Number() == 0) )
+ // if this is the last top-level window, we're going to exit and we should
+ // delete ms_hiddenParent now to avoid leaking it
+ if ( IsLastBeforeExit() )
{
if ( ms_hiddenParent )
{
delete ms_hiddenParent;
ms_hiddenParent = NULL;
}
-
- wxTheApp->SetTopWindow(NULL);
-
- if ( wxTheApp->GetExitOnFrameDelete() )
- {
- ::PostQuitMessage(0);
- }
}
}
}
}
+// the DialogProc for all wxWindows dialogs
+LONG APIENTRY _EXPORT
+wxDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ switch ( message )
+ {
+ case WM_INITDIALOG:
+ // for this message, returning TRUE tells system to set focus to
+ // the first control in the dialog box, but as we set the focus
+ // ourselves, we return FALSE from here as well, so fall through
+
+ default:
+ // for all the other ones, FALSE means that we didn't process the
+ // message
+ return FALSE;
+ }
+}
+