Răsfoiți Sursa

Bug 1868: "Keep remote directory up to date" window cannot be restored after it was minimized to tray using Minimize to System Tray command, when the window was opened from command-line or using Start in New Window command

https://winscp.net/tracker/1868

Source commit: 6825fb743e1702fea64a249fb834039dd05e12c5
Martin Prikryl 5 ani în urmă
părinte
comite
c507c2536d

+ 11 - 2
source/forms/Synchronize.cpp

@@ -725,8 +725,17 @@ void __fastcall TSynchronizeDialog::Minimize1Click(TObject * Sender)
 //---------------------------------------------------------------------------
 void __fastcall TSynchronizeDialog::MinimizetoTray1Click(TObject * Sender)
 {
-  WinConfiguration->MinimizeToTrayOnce();
-  Minimize(Sender);
+  bool MinimizeToTrayPrev = WinConfiguration->MinimizeToTray;
+  DebugAssert(!MinimizeToTrayPrev);
+  WinConfiguration->MinimizeToTray = true;
+  try
+  {
+    Minimize(Sender);
+  }
+  __finally
+  {
+    WinConfiguration->MinimizeToTray = MinimizeToTrayPrev;
+  }
 }
 //---------------------------------------------------------------------------
 void __fastcall TSynchronizeDialog::MinimizeButtonDropDownClick(TObject * /*Sender*/)

+ 0 - 13
source/windows/WinConfiguration.cpp

@@ -580,7 +580,6 @@ void __fastcall TWinConfiguration::Default()
   FPathInCaption = picShort;
   FSessionTabNameFormat = stnfShortPathTrunc;
   FMinimizeToTray = false;
-  FMinimizeToTrayOnce = false;
   FBalloonNotifications = true;
   FNotificationsTimeout = 10;
   FNotificationsStickTime = 2;
@@ -2179,18 +2178,6 @@ void __fastcall TWinConfiguration::SetMinimizeToTray(bool value)
   SET_CONFIG_PROPERTY(MinimizeToTray);
 }
 //---------------------------------------------------------------------------
-void __fastcall TWinConfiguration::MinimizeToTrayOnce()
-{
-  FMinimizeToTrayOnce = true;
-}
-//---------------------------------------------------------------------------
-bool __fastcall TWinConfiguration::GetMinimizeToTray()
-{
-  bool Result = FMinimizeToTrayOnce || FMinimizeToTray;
-  FMinimizeToTrayOnce = false;
-  return Result;
-}
-//---------------------------------------------------------------------------
 void __fastcall TWinConfiguration::SetBalloonNotifications(bool value)
 {
   SET_CONFIG_PROPERTY(BalloonNotifications);

+ 1 - 4
source/windows/WinConfiguration.h

@@ -413,7 +413,6 @@ private:
   TPathInCaption FPathInCaption;
   TSessionTabNameFormat FSessionTabNameFormat;
   bool FMinimizeToTray;
-  bool FMinimizeToTrayOnce;
   bool FBalloonNotifications;
   unsigned int FNotificationsTimeout;
   unsigned int FNotificationsStickTime;
@@ -521,7 +520,6 @@ private:
   void __fastcall SetPathInCaption(TPathInCaption value);
   void __fastcall SetSessionTabNameFormat(TSessionTabNameFormat value);
   void __fastcall SetMinimizeToTray(bool value);
-  bool __fastcall GetMinimizeToTray();
   void __fastcall SetBalloonNotifications(bool value);
   void __fastcall SetNotificationsTimeout(unsigned int value);
   void __fastcall SetNotificationsStickTime(unsigned int value);
@@ -645,7 +643,6 @@ public:
   void __fastcall DeleteWorkspaceFromJumpList(UnicodeString Workspace);
   void __fastcall UpdateJumpList();
   virtual void __fastcall UpdateStaticUsage();
-  void __fastcall MinimizeToTrayOnce();
   void __fastcall CustomCommandShortCuts(TShortCuts & ShortCuts) const;
   UnicodeString __fastcall GetUserExtensionsPath();
   UnicodeString __fastcall GetExtensionId(const UnicodeString & ExtensionPath);
@@ -718,7 +715,7 @@ public:
   __property UnicodeString AutoWorkspace = { read = FAutoWorkspace, write = SetAutoWorkspace };
   __property TPathInCaption PathInCaption = { read = FPathInCaption, write = SetPathInCaption };
   __property TSessionTabNameFormat SessionTabNameFormat = { read = FSessionTabNameFormat, write = FSessionTabNameFormat };
-  __property bool MinimizeToTray = { read = GetMinimizeToTray, write = SetMinimizeToTray };
+  __property bool MinimizeToTray = { read = FMinimizeToTray, write = SetMinimizeToTray };
   __property bool BalloonNotifications = { read = FBalloonNotifications, write = SetBalloonNotifications };
   __property unsigned int NotificationsTimeout = { read = FNotificationsTimeout, write = SetNotificationsTimeout };
   __property unsigned int NotificationsStickTime = { read = FNotificationsStickTime, write = SetNotificationsStickTime };

+ 16 - 1
source/windows/WinInterface.cpp

@@ -1351,11 +1351,25 @@ void __fastcall CallGlobalMinimizeHandler(TObject * Sender)
   }
 }
 //---------------------------------------------------------------------------
+bool MinimizedToTray = false;
+//---------------------------------------------------------------------------
 static void __fastcall DoApplicationMinimizeRestore(bool Minimize)
 {
   TForm * MainForm = Application->MainForm;
   TForm * MainLikeForm = GetMainForm();
-  if ((MainLikeForm != MainForm) && !WinConfiguration->MinimizeToTray)
+  bool MinimizeToTray;
+  if (Minimize)
+  {
+    MinimizeToTray = WinConfiguration->MinimizeToTray;
+  }
+  else
+  {
+    // Use tray restore code, even if minimization to tray is not on anymore when restoring.
+    // This is particularly used for ad-hoc minimize to tray from "keep up to date" dialog.
+    MinimizeToTray = MinimizedToTray;
+  }
+  MinimizedToTray = false; // reset in any case, even if we somehow got restored from tray without invoking this code
+  if ((MainLikeForm != MainForm) && !MinimizeToTray)
   {
     static TWindowState PreviousWindowState = wsNormal;
     if (Minimize)
@@ -1393,6 +1407,7 @@ static void __fastcall DoApplicationMinimizeRestore(bool Minimize)
       if (Minimize)
       {
         Application->Minimize();
+        MinimizedToTray = WinConfiguration->MinimizeToTray;
       }
       else
       {