瀏覽代碼

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
Martin Prikryl 7 年之前
父節點
當前提交
d35ac0a756
共有 1 個文件被更改,包括 15 次插入5 次删除
  1. 15 5
      source/forms/Login.cpp

+ 15 - 5
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();