From d35ac0a7560344b3e30a241c8b6fb3a6894a15ee Mon Sep 17 00:00:00 2001 From: Martin Prikryl Date: Wed, 4 Apr 2018 10:28:14 +0000 Subject: [PATCH] Bug 1630: Login dialog opens slowly, when there is a lot of stored sites with a color https://winscp.net/tracker/1630 Source commit: 024d0e55f77182702ddf3e6247456974477f8e5b --- source/forms/Login.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/source/forms/Login.cpp b/source/forms/Login.cpp index 7002e6db4..2c66c0160 100644 --- a/source/forms/Login.cpp +++ b/source/forms/Login.cpp @@ -329,14 +329,22 @@ TTreeNode * __fastcall TLoginDialog::AddSession(TSessionData * Data) //--------------------------------------------------------------------------- void __fastcall TLoginDialog::UpdateNodeImages() { - TTreeNode * Node = SessionTree->Items->GetFirstNode(); - while (Node != NULL) + SessionTree->Images->BeginUpdate(); + try { - if (IsSiteNode(Node)) + TTreeNode * Node = SessionTree->Items->GetFirstNode(); + while (Node != NULL) { - UpdateNodeImage(Node); + if (IsSiteNode(Node)) + { + UpdateNodeImage(Node); + } + Node = Node->GetNext(); } - Node = Node->GetNext(); + } + __finally + { + SessionTree->Images->EndUpdate(); } } //--------------------------------------------------------------------------- @@ -387,6 +395,7 @@ void __fastcall TLoginDialog::LoadSessions() { TAutoFlag LoadingFlag(FLoading); SessionTree->Items->BeginUpdate(); + SessionTree->Images->BeginUpdate(); try { // optimization @@ -411,6 +420,7 @@ void __fastcall TLoginDialog::LoadSessions() // SortType is set (not having set the data property), so we would have to // call AlphaSort here explicitly SessionTree->SortType = Comctrls::stBoth; + SessionTree->Images->EndUpdate(); SessionTree->Items->EndUpdate(); } SessionTree->Selected = SessionTree->Items->GetFirstNode();