diff --git a/checkin_notes b/checkin_notes index a709bbda12..bd3495c624 100644 --- a/checkin_notes +++ b/checkin_notes @@ -9845,11 +9845,12 @@ David 3 Dec 2008 cpu_sched.cpp Charlie 4 Dec 2008 - - MGR: Restore UpdateSelection() call in CBOINCBaseView::OnListRender() - because it is needed to set texct in Suspend/Resume button. + - MGR: Restore m_bForceUpdateSelection logic because it is needed to + set text in Suspend/Resume button and prevent flicker. - MGR: Set wxWidgets option "msw.staticbox.optimized-paint" in another - attempt at fixing Task Pane background erase glitch. + attempt at fixing Task Pane background erase glitch on Windows. clientgui/ - BOINCBaseView.cpp + BOINCBaseView.cpp,.h BOINCGUIApp.cpp + ViewProjects.cpp diff --git a/clientgui/BOINCBaseView.cpp b/clientgui/BOINCBaseView.cpp index 7ad97641f3..7359a601fa 100644 --- a/clientgui/BOINCBaseView.cpp +++ b/clientgui/BOINCBaseView.cpp @@ -45,6 +45,7 @@ CBOINCBaseView::CBOINCBaseView(wxNotebook* pNotebook) : m_bProcessingTaskRenderEvent = false; m_bProcessingListRenderEvent = false; + m_bForceUpdateSelection = true; m_bIgnoreUIEvents = false; m_bNeedSort = false; @@ -75,6 +76,7 @@ CBOINCBaseView::CBOINCBaseView( m_bProcessingTaskRenderEvent = false; m_bProcessingListRenderEvent = false; + m_bForceUpdateSelection = true; m_bIgnoreUIEvents = false; // @@ -364,6 +366,7 @@ void CBOINCBaseView::OnListSelected(wxListEvent& event) { wxLogTrace(wxT("Function Start/End"), wxT("CBOINCBaseView::OnListSelected - Function Begin")); if (!m_bIgnoreUIEvents) { + m_bForceUpdateSelection = true; UpdateSelection(); event.Skip(); } @@ -376,6 +379,7 @@ void CBOINCBaseView::OnListDeselected(wxListEvent& event) { wxLogTrace(wxT("Function Start/End"), wxT("CBOINCBaseView::OnListDeselected - Function Begin")); if (!m_bIgnoreUIEvents) { + m_bForceUpdateSelection = true; UpdateSelection(); event.Skip(); } @@ -672,6 +676,7 @@ void CBOINCBaseView::RestoreSelections() { m_bIgnoreUIEvents = false; if (oldCount != newCount) { + m_bForceUpdateSelection = true; UpdateSelection(); } } @@ -716,51 +721,56 @@ void CBOINCBaseView::UpdateWebsiteSelection(long lControlGroup, PROJECT* project // Update the websites list // - if (m_TaskGroups.size() > 1) { + if (m_bForceUpdateSelection) { + if (m_TaskGroups.size() > 1) { - // Delete task group, objects, and controls. - pGroup = m_TaskGroups[lControlGroup]; + // Delete task group, objects, and controls. + pGroup = m_TaskGroups[lControlGroup]; - m_pTaskPane->DeleteTaskGroupAndTasks(pGroup); - for (i=0; im_Tasks.size(); i++) { - delete pGroup->m_Tasks[i]; + m_pTaskPane->DeleteTaskGroupAndTasks(pGroup); + for (i=0; im_Tasks.size(); i++) { + delete pGroup->m_Tasks[i]; + } + pGroup->m_Tasks.clear(); + delete pGroup; + + pGroup = NULL; + + m_TaskGroups.erase( m_TaskGroups.begin() + 1 ); } - pGroup->m_Tasks.clear(); - delete pGroup; - pGroup = NULL; + // If something is selected create the tasks and controls + if (m_pListPane->GetSelectedItemCount()) { + if (project) { + // Create the web sites task group + pGroup = new CTaskItemGroup( _("Web sites") ); + m_TaskGroups.push_back( pGroup ); - m_TaskGroups.erase( m_TaskGroups.begin() + 1 ); - } - - // If something is selected create the tasks and controls - if (m_pListPane->GetSelectedItemCount()) { - if (project) { - // Create the web sites task group - pGroup = new CTaskItemGroup( _("Web sites") ); - m_TaskGroups.push_back( pGroup ); - - // Default project url - pItem = new CTaskItem( - wxString(project->project_name.c_str(), wxConvUTF8), - wxT(""), - wxString(project->master_url.c_str(), wxConvUTF8), - ID_TASK_PROJECT_WEB_PROJDEF_MIN - ); - pGroup->m_Tasks.push_back(pItem); - - - // Project defined urls - for (i=0;(igui_urls.size())&&(i<=ID_TASK_PROJECT_WEB_PROJDEF_MAX);i++) { + // Default project url pItem = new CTaskItem( - wxGetTranslation(wxString(project->gui_urls[i].name.c_str(), wxConvUTF8)), - wxGetTranslation(wxString(project->gui_urls[i].description.c_str(), wxConvUTF8)), - wxString(project->gui_urls[i].url.c_str(), wxConvUTF8), - ID_TASK_PROJECT_WEB_PROJDEF_MIN + 1 + i + wxString(project->project_name.c_str(), wxConvUTF8), + wxT(""), + wxString(project->master_url.c_str(), wxConvUTF8), + ID_TASK_PROJECT_WEB_PROJDEF_MIN ); pGroup->m_Tasks.push_back(pItem); + + + // Project defined urls + for (i=0;(igui_urls.size())&&(i<=ID_TASK_PROJECT_WEB_PROJDEF_MAX);i++) { + pItem = new CTaskItem( + wxGetTranslation(wxString(project->gui_urls[i].name.c_str(), wxConvUTF8)), + wxGetTranslation(wxString(project->gui_urls[i].description.c_str(), wxConvUTF8)), + wxString(project->gui_urls[i].url.c_str(), wxConvUTF8), + ID_TASK_PROJECT_WEB_PROJDEF_MIN + 1 + i + ); + pGroup->m_Tasks.push_back(pItem); + } } + + m_bForceUpdateSelection = false; } + } } diff --git a/clientgui/BOINCBaseView.h b/clientgui/BOINCBaseView.h index a283cc28e2..ddfc18a3a0 100644 --- a/clientgui/BOINCBaseView.h +++ b/clientgui/BOINCBaseView.h @@ -179,6 +179,7 @@ protected: bool m_bProcessingTaskRenderEvent; bool m_bProcessingListRenderEvent; + bool m_bForceUpdateSelection; bool m_bIgnoreUIEvents; bool m_bNeedSort; diff --git a/clientgui/ViewProjects.cpp b/clientgui/ViewProjects.cpp index b6ca617ec6..2c19f96e48 100644 --- a/clientgui/ViewProjects.cpp +++ b/clientgui/ViewProjects.cpp @@ -304,6 +304,7 @@ void CViewProjects::OnProjectUpdate( wxCommandEvent& WXUNUSED(event) ) { } pFrame->UpdateStatusText(wxT("")); + m_bForceUpdateSelection = true; UpdateSelection(); pFrame->ResetReminderTimers(); pFrame->FireRefreshView(); @@ -345,6 +346,7 @@ void CViewProjects::OnProjectSuspend( wxCommandEvent& WXUNUSED(event) ) { } } + m_bForceUpdateSelection = true; UpdateSelection(); pFrame->FireRefreshView(); @@ -385,6 +387,7 @@ void CViewProjects::OnProjectNoNewWork( wxCommandEvent& WXUNUSED(event) ) { } } + m_bForceUpdateSelection = true; UpdateSelection(); pFrame->FireRefreshView(); @@ -444,6 +447,7 @@ void CViewProjects::OnProjectReset( wxCommandEvent& WXUNUSED(event) ) { pFrame->UpdateStatusText(wxT("")); + m_bForceUpdateSelection = true; UpdateSelection(); pFrame->FireRefreshView(); @@ -501,6 +505,7 @@ void CViewProjects::OnProjectDetach( wxCommandEvent& WXUNUSED(event) ) { pFrame->UpdateStatusText(wxT("")); + m_bForceUpdateSelection = true; UpdateSelection(); pFrame->FireRefreshView(); @@ -645,7 +650,7 @@ bool CViewProjects::IsSelectionManagementNeeded() { void CViewProjects::UpdateSelection() { CTaskItemGroup* pGroup = NULL; PROJECT* project = NULL; - CMainDocument* pDoc = wxGetApp().GetDocument(); + CMainDocument* pDoc = wxGetApp().GetDocument(); int i, n, row; bool wasSuspended=false, wasNoNewWork=false; bool enableUpdate = false;