check in the 'selective yield' patch (see ticket #10320):
- implements YieldFor() with event filtering for wxMSW and wxGTK, adds TODO markers in other ports; - replaces wxYield() in GTK's clipboard code with a wxTheApp->YieldFor() call, thus fixing possible reentrancies (and modifies clipboard sample to test synchronous IsSupported calls) - replaces wxYieldIfNeeded() calls in wxProgressDialog with wxTheApp->YieldFor() calls, so that it processes only UI/user-input events, thus fixing the race condition visible in the "thread" sample - documents the new functions git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58654 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -401,7 +401,7 @@ wxProgressDialog::Update(int value, const wxString& newmsg, bool *skip)
|
||||
m_msg->SetLabel(_("Done."));
|
||||
}
|
||||
|
||||
wxYieldIfNeeded();
|
||||
wxTheApp->YieldFor(wxEVT_CATEGORY_UI);
|
||||
|
||||
(void)ShowModal();
|
||||
}
|
||||
@@ -451,7 +451,7 @@ bool wxProgressDialog::DoAfterUpdate(bool *skip)
|
||||
{
|
||||
// we have to yield because not only we want to update the display but
|
||||
// also to process the clicks on the cancel and skip buttons
|
||||
wxYieldIfNeeded();
|
||||
wxTheApp->YieldFor(wxEVT_CATEGORY_UI|wxEVT_CATEGORY_USER_INPUT);
|
||||
|
||||
Update();
|
||||
|
||||
@@ -670,7 +670,7 @@ void wxProgressDialog::UpdateMessage(const wxString &newmsg)
|
||||
|
||||
Fit(); // adapt to the new label size
|
||||
|
||||
wxYieldIfNeeded() ;
|
||||
wxTheApp->YieldFor(wxEVT_CATEGORY_UI);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user