Fix for non-modal dialog closing.
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))
{