Prechádzať zdrojové kódy

Bug 1630: Login dialog opens slowly, when there is a lot of stored sites with a color

https://winscp.net/tracker/1630
(cherry picked from commit d35ac0a7560344b3e30a241c8b6fb3a6894a15ee)

Source commit: f3a7b5a771014dcba7c6e45ac1af1470612f436c
Martin Prikryl 7 rokov pred
rodič
commit
8d208a9c1b
1 zmenil súbory, kde vykonal 15 pridanie a 5 odobranie
  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();