Fix for non-modal dialog closing.
diff --git a/include/dialog.h b/include/dialog.h
index ac3a14d..f340070 100644
--- a/include/dialog.h
+++ b/include/dialog.h
@@ -38,6 +38,7 @@
#pragma pack(4)
#define DF_END 0x0001
+#define DF_ENDING 0x0002
extern BOOL32 DIALOG_Init(void);
extern HWND32 DIALOG_CreateIndirect( HINSTANCE32 hInst, LPCSTR dlgTemplate,
diff --git a/windows/defdlg.c b/windows/defdlg.c
index f5555fc..5a7412d 100644
--- a/windows/defdlg.c
+++ b/windows/defdlg.c
@@ -260,11 +260,16 @@
dlgInfo = (DIALOGINFO *)&wndPtr->wExtra;
dlgInfo->msgResult = 0;
- if (dlgInfo->dlgProc) /* Call dialog procedure */
+ if (dlgInfo->dlgProc) { /* Call dialog procedure */
result = CallWindowProc16( (WNDPROC16)dlgInfo->dlgProc,
hwnd, msg, wParam, lParam );
/* Check if window was destroyed by dialog procedure */
+ if (dlgInfo->flags & DF_END && !(dlgInfo->flags & DF_ENDING)) {
+ dlgInfo->flags |= DF_ENDING;
+ DestroyWindow32( hwnd );
+ }
+ }
if (!result && IsWindow32(hwnd))
{
@@ -315,11 +320,16 @@
dlgInfo = (DIALOGINFO *)&wndPtr->wExtra;
dlgInfo->msgResult = 0;
- if (dlgInfo->dlgProc) /* Call dialog procedure */
+ if (dlgInfo->dlgProc) { /* Call dialog procedure */
result = CallWindowProc32A( (WNDPROC32)dlgInfo->dlgProc,
hwnd, msg, wParam, lParam );
/* Check if window was destroyed by dialog procedure */
+ if (dlgInfo->flags & DF_END && !(dlgInfo->flags & DF_ENDING)) {
+ dlgInfo->flags |= DF_ENDING;
+ DestroyWindow32( hwnd );
+ }
+ }
if (!result && IsWindow32(hwnd))
{
@@ -370,11 +380,16 @@
dlgInfo = (DIALOGINFO *)&wndPtr->wExtra;
dlgInfo->msgResult = 0;
- if (dlgInfo->dlgProc) /* Call dialog procedure */
+ if (dlgInfo->dlgProc) { /* Call dialog procedure */
result = CallWindowProc32W( (WNDPROC32)dlgInfo->dlgProc,
hwnd, msg, wParam, lParam );
/* Check if window was destroyed by dialog procedure */
+ if (dlgInfo->flags & DF_END && !(dlgInfo->flags & DF_ENDING)) {
+ dlgInfo->flags |= DF_ENDING;
+ DestroyWindow32( hwnd );
+ }
+ }
if (!result && IsWindow32(hwnd))
{