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))
     {