diff --git a/clientgui/AsyncRPC.cpp b/clientgui/AsyncRPC.cpp index 04633d5960..047fc7d3a7 100755 --- a/clientgui/AsyncRPC.cpp +++ b/clientgui/AsyncRPC.cpp @@ -736,6 +736,15 @@ void CMainDocument::HandleCompletedRPC() { #endif // ! __WXMSW__ // Deadlocks on Windows } + // We must call ProcessEvent() rather than AddPendingEvent() here to + // guarantee integrity of data when other events are handled (such as + // Abort, Suspend/Resume, Show Graphics, Update, Detach, Reset, No + // New Work, etc.) Otherwise, if one of those events is pending it + // might be processed first, and the data in the selected rows may not + // match the data which the user selected if any rows were added or + // deleted due to the RPC. + // The refresh event called here adjusts the selections to fix any + // such mismatch before other pending events are processed. if ( (crr_event) && (crr_event != (wxEvent*)-1) ) { if (!retval) { if (crr_eventHandler) { diff --git a/clientgui/BOINCGUIApp.cpp b/clientgui/BOINCGUIApp.cpp index fa47d58d79..6b47cb674c 100644 --- a/clientgui/BOINCGUIApp.cpp +++ b/clientgui/BOINCGUIApp.cpp @@ -207,6 +207,10 @@ bool CBOINCGUIApp::OnInit() { #if wxCHECK_VERSION(2,8,0) // In wxMac-2.8.7, default wxListCtrl::RefreshItem() does not work // so use traditional generic implementation. +// This has been fixed in wxMac-2.8.8, but the Mac native implementation: +// - takes 3 times the CPU time as the Mac generic version. +// - seems to always redraw entire control even if asked to refresh only one row. +// - causes major flicker of progress bars, (probably due to full redraws.) wxSystemOptions::SetOption(wxT("mac.listctrl.always_use_generic"), 1); #endif diff --git a/clientgui/BOINCListCtrl.h b/clientgui/BOINCListCtrl.h index 84b5926428..b4578b13d4 100644 --- a/clientgui/BOINCListCtrl.h +++ b/clientgui/BOINCListCtrl.h @@ -32,6 +32,12 @@ #define LISTCTRL_BASE wxListCtrl #include "wx/listctrl.h" #else +// In wxMac-2.8.7, default wxListCtrl::RefreshItem() does not work +// so use traditional generic implementation. +// This has been fixed in wxMac-2.8.8, but the Mac native implementation: +// - takes 3 times the CPU time as the Mac generic version. +// - seems to always redraw entire control even if asked to refresh only one row. +// - causes major flicker of progress bars, (probably due to full redraws.) #define LISTCTRL_BASE wxGenericListCtrl #include "wx/generic/listctrl.h" #endif