Browse Source

Bug fix: After reconnect remote panel flickers (after bf7b9448)

See also f963b033

Source commit: 2c5e0ae2e72577f7e1513bb12ec6bb3d439dca00
Martin Prikryl 5 months ago
parent
commit
53addb69d0

+ 6 - 1
source/forms/CustomScpExplorer.cpp

@@ -9478,7 +9478,12 @@ void __fastcall TCustomScpExplorerForm::UpdateControls()
     // ReconnectSessionAction is hidden when disabled, so enabling it actualy resizes the toolbar
     CenterReconnectToolbar();
 
-    bool HasTerminal = HasAvailableTerminal();
+    // The only place, where we use IsOpenedTerminal and not IsAvailableTerminal
+    // (i.e. not checking for reconnecting status)
+    // Otherwise it causes flicker [particularly in dark mode] during the short time
+    // between the authentication window is closed and FOpeningTerminal is cleared.
+    // Should be solved smarter.
+    bool HasTerminal = TTerminalManager::Instance()->IsOpenedTerminal(Terminal);
 
     RemoteDirView->Enabled = HasTerminal;
     RemoteDirView->Color = HasTerminal ? PanelColor() : DisabledPanelColor();

+ 8 - 2
source/windows/TerminalManager.cpp

@@ -2124,11 +2124,17 @@ void __fastcall TTerminalManager::SaveWorkspace(TList * DataList)
   }
 }
 //---------------------------------------------------------------------------
-bool TTerminalManager::IsAvailableTerminal(TTerminal * Terminal)
+bool TTerminalManager::IsOpenedTerminal(TTerminal * Terminal)
 {
   return
     (Terminal != NULL) &&
-    Terminal->Active &&
+    Terminal->Active;
+}
+//---------------------------------------------------------------------------
+bool TTerminalManager::IsAvailableTerminal(TTerminal * Terminal)
+{
+  return
+    IsOpenedTerminal(Terminal) &&
     !IsReconnectingTerminal(Terminal);
 }
 //---------------------------------------------------------------------------

+ 2 - 1
source/windows/TerminalManager.h

@@ -114,8 +114,9 @@ public:
   void __fastcall HandleException(Exception * E);
   void __fastcall SaveWorkspace(TList * DataList);
   void __fastcall QueueStatusUpdated();
-  bool IsAvailableTerminal(TTerminal * Terminal);
+  bool IsOpenedTerminal(TTerminal * Terminal);
   bool IsReconnectingTerminal(TTerminal * Terminal);
+  bool IsAvailableTerminal(TTerminal * Terminal);
   bool IsAvailableTerminalForSite(TTerminal * Terminal, TSessionData * Data);
   TManagedTerminal * __fastcall FindActiveTerminalForSite(TSessionData * Data);
   TTerminalQueue * __fastcall FindQueueForTerminal(TTerminal * Terminal);