Fix closing logic in wxMSW native wxProgressDialog.
The dialog must always close if the C++ object was destroyed, independently of whether it was cancelled or finished. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65508 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -892,22 +892,19 @@ wxProgressDialogTaskRunner::TaskDialogCallbackProc
|
|||||||
case TDN_TIMER:
|
case TDN_TIMER:
|
||||||
PerformNotificationUpdates(hwnd, sharedData);
|
PerformNotificationUpdates(hwnd, sharedData);
|
||||||
|
|
||||||
// End dialog in three different cases:
|
/*
|
||||||
// 1. Progress finished and dialog should automatically hide.
|
Decide whether we should end the dialog. This is done if either
|
||||||
// 2. The wxProgressDialog object was destructed and should
|
the dialog object itself was destroyed or if the progress
|
||||||
// automatically hide.
|
finished and we were configured to hide automatically without
|
||||||
// 3. The dialog was canceled and wxProgressDialog object
|
waiting for the user to dismiss us.
|
||||||
// was destroyed.
|
|
||||||
bool isCanceled =
|
|
||||||
sharedData->m_state == wxGenericProgressDialog::Canceled;
|
|
||||||
bool isFinished =
|
|
||||||
sharedData->m_state == wxGenericProgressDialog::Finished;
|
|
||||||
bool wasDestroyed =
|
|
||||||
(sharedData->m_notifications & wxSPDD_DESTROYED) != 0;
|
|
||||||
bool shouldAutoHide = (sharedData->m_style & wxPD_AUTO_HIDE) != 0;
|
|
||||||
|
|
||||||
if ( (shouldAutoHide && (isFinished || wasDestroyed))
|
Notice that we do not close the dialog if it was cancelled
|
||||||
|| (wasDestroyed && isCanceled) )
|
because it's up to the user code in the main thread to decide
|
||||||
|
whether it really wants to cancel the dialog.
|
||||||
|
*/
|
||||||
|
if ( (sharedData->m_notifications & wxSPDD_DESTROYED) ||
|
||||||
|
(sharedData->m_state == wxProgressDialog::Finished &&
|
||||||
|
sharedData->m_style & wxPD_AUTO_HIDE) )
|
||||||
{
|
{
|
||||||
::EndDialog( hwnd, IDCLOSE );
|
::EndDialog( hwnd, IDCLOSE );
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user