@@ -1999,17 +1999,6 @@ void AnyTreeItemStateHasChanged(ClientHandle clientHandle, const TreeItem* self,
19991999 // TODO: remove self from any representation to avoid accessing it's dangling pointer
20002000 break ;
20012001 case NC_Creating:
2002- assert (IsMainThread ());
2003- if (!s_TreeViewRefreshPending)
2004- {
2005- s_TreeViewRefreshPending = true ;
2006- QTimer::singleShot (0 , mainWindow->m_treeview , [mainWindow]()
2007- {
2008- s_TreeViewRefreshPending = false ;
2009- mainWindow->m_treeview ->update ();
2010- }
2011- );
2012- }
20132002 break ;
20142003 case CC_CreateMdiChild:
20152004 {
@@ -2028,17 +2017,27 @@ void AnyTreeItemStateHasChanged(ClientHandle clientHandle, const TreeItem* self,
20282017 assert (IsMainThread ());
20292018 mainWindow->showStatisticsDirectly (self);
20302019 }
2031- // MainWindow could have been destroyed
2032- if (s_CurrMainWindow)
2020+
2021+ // this actually only invalidates any drawn area and causes repaint later, but time anyway to avoid too many repaints
2022+ if (!s_TreeViewRefreshPending)
20332023 {
2034- assert (s_CurrMainWindow == mainWindow);
2035- auto tv = mainWindow->m_treeview ;
2036- if (IsMainThread ())
2037- tv->update (); // this actually only invalidates any drawn area and causes repaint later
2038- else
2039- QTimer::singleShot (0 , tv, [tv]() { tv->update (); });
2040- mainWindow->m_detail_pages ->onTreeItemStateChange ();
2024+ s_TreeViewRefreshPending = true ;
2025+ QTimer::singleShot (1000 , []()
2026+ {
2027+ // MainWindow could have been destroyed
2028+ if (!s_CurrMainWindow)
2029+ return ;
2030+
2031+ s_TreeViewRefreshPending = false ;
2032+ auto tv = s_CurrMainWindow->m_treeview ;
2033+ if (tv)
2034+ tv->update ();
2035+ }
2036+ );
20412037 }
2038+
2039+ if (s_CurrMainWindow && self == s_CurrMainWindow->getCurrentTreeItem ())
2040+ s_CurrMainWindow->m_detail_pages ->onTreeItemStateChange ();
20422041}
20432042
20442043#include " waiter.h"
0 commit comments