From b989e47ce49adde93997bae2240984f24911610c Mon Sep 17 00:00:00 2001 From: Pavel Yosifovich Date: Thu, 2 Nov 2023 11:03:44 -0400 Subject: [PATCH] possible fix for stuck refresh --- RegExp/MainFrame.cpp | 27 +++++++++++++++++---------- RegExp/RegExp.rc | Bin 66240 -> 66240 bytes RegExp/TreeHelper.cpp | 2 +- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/RegExp/MainFrame.cpp b/RegExp/MainFrame.cpp index 33241b2..fd29ff2 100644 --- a/RegExp/MainFrame.cpp +++ b/RegExp/MainFrame.cpp @@ -677,11 +677,15 @@ LRESULT CMainFrame::OnListItemChanged(int, LPNMHDR, BOOL&) { } LRESULT CMainFrame::OnViewRefresh(WORD, WORD, HWND, BOOL&) { - m_Tree.SetRedraw(FALSE); - RefreshFull(m_hStdReg); - RefreshFull(m_hRealReg); - m_Tree.SetRedraw(TRUE); - UpdateList(); + auto hCurrent = m_Tree.GetSelectedItem(); + TreeHelper th(m_Tree); + th.DoForEachItem(m_hStdReg, 0, [this](auto hItem, auto state) { + RefreshItem(hItem); + }); + th.DoForEachItem(m_hRealReg, 0, [this](auto hItem, auto state) { + RefreshItem(hItem); + }); + m_Tree.EnsureVisible(hCurrent); return 0; } @@ -1978,7 +1982,7 @@ void CMainFrame::RefreshFull(HTREEITEM hItem) { } else { // really expanded - RefreshFull(hItem); + //RefreshFull(hItem); auto key = Registry::OpenKey(GetFullNodePath(hItem), KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS); if (key) { auto keys = th.GetChildItems(hItem); @@ -2148,15 +2152,18 @@ CString CMainFrame::GetValueDetails(const RegistryItem& item) const { } bool CMainFrame::RefreshItem(HTREEITEM hItem) { - auto expanded = m_Tree.GetItemState(hItem, TVIS_EXPANDED); - m_Tree.LockWindowUpdate(); + auto expanded = m_Tree.GetItemState(hItem, TVIS_EXPANDED | TVIS_EXPANDEDONCE); + if (expanded == 0) + return false; + + m_Tree.SetRedraw(FALSE); m_Tree.Expand(hItem, TVE_COLLAPSE | TVE_COLLAPSERESET); TreeHelper th(m_Tree); th.DeleteChildren(hItem); m_Tree.InsertItem(L"\\\\", hItem, TVI_LAST); - if (expanded) + if (expanded & TVIS_EXPANDED) m_Tree.Expand(hItem, TVE_EXPAND); - m_Tree.LockWindowUpdate(FALSE); + m_Tree.SetRedraw(); UpdateList(); return true; } diff --git a/RegExp/RegExp.rc b/RegExp/RegExp.rc index a6ab52dff1f850c50ab8ed7e37d5e5b8ee8fbc5d..92b160b55f4686d86b9e0736518ae30b764d694c 100644 GIT binary patch delta 44 xcmX@m%5tEUWkcROMzhKJ?+h8uHZOelkqO9o_(^y3fsaoZ!A$YZdp@)90|4Bm6`ueA delta 44 xcmX@m%5tEUWkcROM$^gp?+h7DH!pnmkqO9o_(^y3fsaoZ!A$YZdp@)90|4Ae6`KG6 diff --git a/RegExp/TreeHelper.cpp b/RegExp/TreeHelper.cpp index 9cda6d1..f3111d5 100644 --- a/RegExp/TreeHelper.cpp +++ b/RegExp/TreeHelper.cpp @@ -55,7 +55,7 @@ void TreeHelper::DoForEachItem(HTREEITEM hRoot, DWORD mask, std::function