Dispatch events from the native MSW wxProgressDialog too
Do this for compatibility with wxGenericProgressDialog, which always did this and can't really do otherwise as it needs to react to the clicks on its buttons, and also because not doing it results in the other application windows being marked as "not responding" by MSW, which looks bad. Closes #17768.
This commit is contained in:
@@ -59,6 +59,10 @@ private:
|
||||
// Returns false if the user requested cancelling the dialog.
|
||||
bool DoNativeBeforeUpdate(bool *skip);
|
||||
|
||||
// Dispatch the pending events to let the windows to update, just as the
|
||||
// generic version does. This is done as part of DoNativeBeforeUpdate().
|
||||
void DispatchEvents();
|
||||
|
||||
// Updates the various timing informations for both determinate
|
||||
// and indeterminate modes. Requires the shared object to have
|
||||
// been entered.
|
||||
|
@@ -508,9 +508,29 @@ bool wxProgressDialog::Pulse(const wxString& newmsg, bool *skip)
|
||||
return wxGenericProgressDialog::Pulse( newmsg, skip );
|
||||
}
|
||||
|
||||
void wxProgressDialog::DispatchEvents()
|
||||
{
|
||||
#ifdef wxHAS_MSW_TASKDIALOG
|
||||
// No need for HasNativeTaskDialog() check, we're only called when this is
|
||||
// the case.
|
||||
wxEventLoopBase* const loop = wxEventLoop::GetActive();
|
||||
if ( loop )
|
||||
{
|
||||
// We don't need to dispatch the user input events as the task dialog
|
||||
// handles its own ones in its thread and we shouldn't react to any
|
||||
// other user actions while the dialog is shown.
|
||||
loop->YieldFor(wxEVT_CATEGORY_ALL & ~wxEVT_CATEGORY_USER_INPUT);
|
||||
}
|
||||
#else // !wxHAS_MSW_TASKDIALOG
|
||||
wxFAIL_MSG( "unreachable" );
|
||||
#endif // wxHAS_MSW_TASKDIALOG/!wxHAS_MSW_TASKDIALOG
|
||||
}
|
||||
|
||||
bool wxProgressDialog::DoNativeBeforeUpdate(bool *skip)
|
||||
{
|
||||
#ifdef wxHAS_MSW_TASKDIALOG
|
||||
DispatchEvents();
|
||||
|
||||
wxCriticalSectionLocker locker(m_sharedData->m_cs);
|
||||
|
||||
if ( m_sharedData->m_skipped )
|
||||
|
Reference in New Issue
Block a user