1
0
Эх сурвалжийг харах

Bug 1916: Displaying, what directory is being read at the end of login to a server, in a tooltip

https://winscp.net/tracker/1916
(cherry picked from commit 14c15ca6611be9a4f78b34e5d78aba18f38fc40c)

Source commit: 992bfc506be5e4b7973aaf6ce1c5c811495cf99b
Martin Prikryl 5 жил өмнө
parent
commit
17d5e0d1e5

+ 4 - 2
source/core/Queue.cpp

@@ -64,7 +64,7 @@ public:
   {
     if (OnInformation != NULL)
     {
-      OnInformation(Terminal, Str, Status, Phase);
+      OnInformation(Terminal, Str, Status, Phase, Additional);
     }
   }
 
@@ -80,6 +80,7 @@ public:
   UnicodeString Str;
   bool Status;
   int Phase;
+  UnicodeString Additional;
 };
 //---------------------------------------------------------------------------
 class TQueryUserAction : public TUserAction
@@ -2783,13 +2784,14 @@ void __fastcall TTerminalThread::WaitForUserAction(TUserAction * UserAction)
 }
 //---------------------------------------------------------------------------
 void __fastcall TTerminalThread::TerminalInformation(
-  TTerminal * Terminal, const UnicodeString & Str, bool Status, int Phase)
+  TTerminal * Terminal, const UnicodeString & Str, bool Status, int Phase, const UnicodeString & Additional)
 {
   TInformationUserAction Action(FOnInformation);
   Action.Terminal = Terminal;
   Action.Str = Str;
   Action.Status = Status;
   Action.Phase = Phase;
+  Action.Additional = Additional;
 
   WaitForUserAction(&Action);
 }

+ 1 - 1
source/core/Queue.h

@@ -443,7 +443,7 @@ private:
   void __fastcall TerminalReopenEvent(TObject * Sender);
 
   void __fastcall TerminalInformation(
-    TTerminal * Terminal, const UnicodeString & Str, bool Status, int Phase);
+    TTerminal * Terminal, const UnicodeString & Str, bool Status, int Phase, const UnicodeString & Additional);
   void __fastcall TerminalQueryUser(TObject * Sender,
     const UnicodeString Query, TStrings * MoreMessages, unsigned int Answers,
     const TQueryParams * Params, unsigned int & Answer, TQueryType Type, void * Arg);

+ 2 - 2
source/core/Script.cpp

@@ -2255,8 +2255,8 @@ bool __fastcall TManagementScript::QueryCancel()
   return Result;
 }
 //---------------------------------------------------------------------------
-void __fastcall TManagementScript::TerminalInformation(TTerminal * ATerminal,
-  const UnicodeString & Str, bool /*Status*/, int Phase)
+void __fastcall TManagementScript::TerminalInformation(
+  TTerminal * ATerminal, const UnicodeString & Str, bool DebugUsedArg(Status), int Phase, const UnicodeString & DebugUsedArg(Additional))
 {
   DebugAssert(ATerminal != NULL);
   if ((Phase < 0) && (ATerminal->Status == ssOpening))

+ 2 - 2
source/core/Script.h

@@ -231,8 +231,8 @@ protected:
 
   virtual void __fastcall ResetTransfer();
   void __fastcall Input(const UnicodeString Prompt, UnicodeString & Str, bool AllowEmpty);
-  void __fastcall TerminalInformation(TTerminal * Terminal, const UnicodeString & Str,
-    bool Status, int Phase);
+  void __fastcall TerminalInformation(
+    TTerminal * Terminal, const UnicodeString & Str, bool Status, int Phase, const UnicodeString & Additional);
   void __fastcall TerminalOperationProgress(TFileOperationProgressType & ProgressData);
   void __fastcall TerminalOperationFinished(TFileOperation Operation, TOperationSide Side,
     bool Temp, const UnicodeString & FileName, Boolean Success,

+ 4 - 4
source/core/Terminal.cpp

@@ -1930,15 +1930,15 @@ void __fastcall TTerminal::ShowExtendedException(Exception * E)
   }
 }
 //---------------------------------------------------------------------------
-void __fastcall TTerminal::DoInformation(const UnicodeString & Str, bool Status,
-  int Phase)
+void __fastcall TTerminal::DoInformation(
+  const UnicodeString & Str, bool Status, int Phase, const UnicodeString & Additional)
 {
   if (OnInformation)
   {
     TCallbackGuard Guard(this);
     try
     {
-      OnInformation(this, Str, Status, Phase);
+      OnInformation(this, Str, Status, Phase, Additional);
       Guard.Verify();
     }
     catch (Exception & E)
@@ -2656,7 +2656,7 @@ void __fastcall TTerminal::DoEndTransaction(bool Inform)
         {
           if (Inform)
           {
-            DoInformation(LoadStr(STATUS_OPEN_DIRECTORY), true);
+            DoInformation(LoadStr(STATUS_OPEN_DIRECTORY), true, -1, CurrentDirectory);
           }
           ReadDirectory(!FReadCurrentDirectoryPending);
         }

+ 3 - 2
source/core/Terminal.h

@@ -64,7 +64,7 @@ typedef void __fastcall (__closure *TDeleteLocalFileEvent)(
 typedef int __fastcall (__closure *TDirectoryModifiedEvent)
   (TTerminal * Terminal, const UnicodeString Directory, bool SubDirs);
 typedef void __fastcall (__closure *TInformationEvent)
-  (TTerminal * Terminal, const UnicodeString & Str, bool Status, int Phase);
+  (TTerminal * Terminal, const UnicodeString & Str, bool Status, int Phase, const UnicodeString & Additional);
 typedef void __fastcall (__closure *TCustomCommandEvent)
   (TTerminal * Terminal, const UnicodeString & Command, bool & Handled);
 //---------------------------------------------------------------------------
@@ -373,7 +373,8 @@ protected:
     TStrings * Response);
   void __fastcall OpenTunnel();
   void __fastcall CloseTunnel();
-  void __fastcall DoInformation(const UnicodeString & Str, bool Status, int Phase = -1);
+  void __fastcall DoInformation(
+    const UnicodeString & Str, bool Status, int Phase = -1, const UnicodeString & Additional = UnicodeString());
   bool __fastcall PromptUser(TSessionData * Data, TPromptKind Kind,
     UnicodeString Name, UnicodeString Instructions, UnicodeString Prompt, bool Echo,
     int MaxLen, UnicodeString & Result);

+ 19 - 1
source/forms/Authenticate.cpp

@@ -45,10 +45,12 @@ void __fastcall TAuthenticateForm::Init(TTerminal * Terminal)
   FHorizontalLogPadding = ScaleByTextHeight(this, 4);
   FVerticalLogPadding = ScaleByTextHeight(this, 3);
   FLogTextFormat << tfNoPrefix << tfWordBreak << tfVerticalCenter;
+  FHintIndex = -1;
 }
 //---------------------------------------------------------------------------
 __fastcall TAuthenticateForm::~TAuthenticateForm()
 {
+  Application->CancelHint();
   if (ReleaseAsModal(this, FShowAsModalStorage))
   {
     UnhookFormActivation(this);
@@ -146,7 +148,7 @@ void __fastcall TAuthenticateForm::FormShow(TObject * /*Sender*/)
   FFrameAnimation.Start();
 }
 //---------------------------------------------------------------------------
-void __fastcall TAuthenticateForm::Log(const UnicodeString Message)
+void __fastcall TAuthenticateForm::Log(const UnicodeString & Message, const UnicodeString & Additional)
 {
   // HACK
   // The first call to Repaint from TFrameAnimation happens
@@ -159,6 +161,7 @@ void __fastcall TAuthenticateForm::Log(const UnicodeString Message)
   }
 
   int Index = LogView->Items->Add(Message);
+  FHints.push_back(Additional);
   MakeLogItemVisible(Index);
   LogView->Repaint();
 }
@@ -631,3 +634,18 @@ void __fastcall TAuthenticateForm::BannerMonospacedFontActionExecute(TObject * /
   UpdateBannerFont();
 }
 //---------------------------------------------------------------------------
+void __fastcall TAuthenticateForm::LogViewMouseMove(TObject *, TShiftState, int X, int Y)
+{
+  int Index = LogView->ItemAtPos(TPoint(X, Y), true);
+
+  if (FHintIndex != Index)
+  {
+    Application->CancelHint();
+    FHintIndex = Index;
+    if (Index >= 0)
+    {
+      LogView->Hint = FHints[Index];
+    }
+  }
+}
+//---------------------------------------------------------------------------

+ 3 - 0
source/forms/Authenticate.dfm

@@ -38,9 +38,12 @@ object AuthenticateForm: TAuthenticateForm
       BorderStyle = bsNone
       DoubleBuffered = True
       ParentDoubleBuffered = False
+      ParentShowHint = False
+      ShowHint = True
       TabOrder = 0
       OnDrawItem = LogViewDrawItem
       OnMeasureItem = LogViewMeasureItem
+      OnMouseMove = LogViewMouseMove
     end
     object LeftPanel: TPanel
       Left = 0

+ 4 - 1
source/forms/Authenticate.h

@@ -59,6 +59,7 @@ __published:
   void __fastcall FormResize(TObject *Sender);
   void __fastcall BannerMemoContextPopup(TObject *Sender, TPoint &MousePos, bool &Handled);
   void __fastcall BannerMonospacedFontActionExecute(TObject *Sender);
+  void __fastcall LogViewMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
 
 public:
   __fastcall TAuthenticateForm(TComponent * Owner);
@@ -66,7 +67,7 @@ public:
 
   void __fastcall Init(TTerminal * Terminal);
   void __fastcall ShowAsModal();
-  void __fastcall Log(const UnicodeString Message);
+  void __fastcall Log(const UnicodeString & Message, const UnicodeString & Additional = UnicodeString());
   bool __fastcall PromptUser(TPromptKind Kind, UnicodeString Name, UnicodeString Instructions,
     TStrings * Prompts, TStrings * Results, bool ForceLog, bool StoredCredentialsTried);
   void __fastcall Banner(const UnicodeString & Banner, bool & NeverShowAgain,
@@ -115,6 +116,8 @@ private:
   int FVerticalLogPadding;
   TTextFormat FLogTextFormat;
   bool FShowNoActivate;
+  std::vector<UnicodeString> FHints;
+  int FHintIndex;
 
   INTERFACE_HOOK;
 };

+ 2 - 2
source/windows/TerminalManager.cpp

@@ -1267,7 +1267,7 @@ void __fastcall TTerminalManager::AuthenticatingDone()
 }
 //---------------------------------------------------------------------------
 void __fastcall TTerminalManager::TerminalInformation(
-  TTerminal * Terminal, const UnicodeString & Str, bool /*Status*/, int Phase)
+  TTerminal * Terminal, const UnicodeString & Str, bool DebugUsedArg(Status), int Phase, const UnicodeString & Additional)
 {
 
   if (Phase == 1)
@@ -1293,7 +1293,7 @@ void __fastcall TTerminalManager::TerminalInformation(
         FAuthenticateForm = MakeAuthenticateForm(Terminal);
         ShowPending = true;
       }
-      FAuthenticateForm->Log(Str);
+      FAuthenticateForm->Log(Str, Additional);
       if (ShowPending)
       {
         FAuthenticateForm->ShowAsModal();

+ 2 - 2
source/windows/TerminalManager.h

@@ -145,8 +145,8 @@ private:
     Exception * E, void * Arg);
   void __fastcall TerminalReadDirectoryProgress(TObject * Sender, int Progress,
     int ResolvedLinks, bool & Cancel);
-  void __fastcall TerminalInformation(TTerminal * Terminal, const UnicodeString & Str,
-    bool Status, int Phase);
+  void __fastcall TerminalInformation(
+    TTerminal * Terminal, const UnicodeString & Str, bool Status, int Phase, const UnicodeString & Additional);
   void __fastcall TerminalCustomCommand(TTerminal * Terminal, const UnicodeString & Command, bool & Handled);
   void __fastcall FreeAll();
   void __fastcall TerminalReady();