From c6fc071ab53a4993162438568b0c1a5e2deb31d4 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 12 Oct 2016 20:46:15 +0300 Subject: CDlgBase::m_bExiting - new flag --- include/m_gui.h | 1 + src/mir_core/src/ui_utils.cpp | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/include/m_gui.h b/include/m_gui.h index 14e0e5b51c..0f3f161b60 100644 --- a/include/m_gui.h +++ b/include/m_gui.h @@ -405,6 +405,7 @@ protected: bool m_isModal; bool m_initialized; bool m_forceResizable; + bool m_bExiting; // window received WM_CLOSE and gonna die soon LRESULT m_lresult; enum { CLOSE_ON_OK = 0x1, CLOSE_ON_CANCEL = 0x2 }; diff --git a/src/mir_core/src/ui_utils.cpp b/src/mir_core/src/ui_utils.cpp index ddc1088705..ff4de03f6c 100644 --- a/src/mir_core/src/ui_utils.cpp +++ b/src/mir_core/src/ui_utils.cpp @@ -163,12 +163,15 @@ INT_PTR CDlgBase::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) if (idCode == BN_CLICKED) { // close dialog automatically if 'Cancel' button is pressed - if (idCtrl == IDCANCEL && (m_autoClose & CLOSE_ON_CANCEL)) + if (idCtrl == IDCANCEL && (m_autoClose & CLOSE_ON_CANCEL)) { + m_bExiting = true; PostMessage(m_hwnd, WM_CLOSE, 0, 0); + } // close dialog automatically if 'OK' button is pressed if (idCtrl == IDOK && (m_autoClose & CLOSE_ON_OK)) { // validate dialog data first + m_bExiting = true; m_lresult = TRUE; NotifyControls(&CCtrlBase::OnApply); OnApply(); @@ -176,6 +179,8 @@ INT_PTR CDlgBase::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) // everything ok? good, let's close it if (m_lresult == TRUE) PostMessage(m_hwnd, WM_CLOSE, 0, 0); + else + m_bExiting = false; } } } @@ -214,6 +219,7 @@ INT_PTR CDlgBase::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) return FALSE; case WM_CLOSE: + m_bExiting = true; m_lresult = FALSE; OnClose(); if (!m_lresult) { @@ -225,6 +231,7 @@ INT_PTR CDlgBase::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) return TRUE; case WM_DESTROY: + m_bExiting = true; OnDestroy(); NotifyControls(&CCtrlBase::OnDestroy); { -- cgit v1.2.3