Răsfoiți Sursa

Bug 1624: Failure when closing Find window while finding files

https://winscp.net/tracker/1624

Source commit: 192a8a18d2896605bc31466d16cdb14f417d05d5
Martin Prikryl 7 ani în urmă
părinte
comite
3bbccbc72f
2 a modificat fișierele cu 14 adăugiri și 2 ștergeri
  1. 13 2
      source/forms/FileFind.cpp
  2. 1 0
      source/forms/FileFind.h

+ 13 - 2
source/forms/FileFind.cpp

@@ -222,6 +222,7 @@ void __fastcall TFileFindDialog::Start()
   DebugAssert(FState != ffFinding);
   DebugAssert(FState != ffFinding);
 
 
   FState = ffFinding;
   FState = ffFinding;
+  FClosePending = false;
   try
   try
   {
   {
     FFrameAnimation.Start();
     FFrameAnimation.Start();
@@ -269,6 +270,12 @@ void __fastcall TFileFindDialog::Start()
 
 
     UpdateControls();
     UpdateControls();
   }
   }
+
+  if (FClosePending)
+  {
+    FClosePending = false;
+    Close();
+  }
 }
 }
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 void __fastcall TFileFindDialog::FileFound(TTerminal * /*Terminal*/,
 void __fastcall TFileFindDialog::FileFound(TTerminal * /*Terminal*/,
@@ -387,9 +394,13 @@ bool __fastcall TFileFindDialog::StopIfFinding()
 }
 }
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 void __fastcall TFileFindDialog::FormCloseQuery(TObject * /*Sender*/,
 void __fastcall TFileFindDialog::FormCloseQuery(TObject * /*Sender*/,
-  bool & /*CanClose*/)
+  bool & CanClose)
 {
 {
-  StopIfFinding();
+  if (StopIfFinding())
+  {
+    FClosePending = true;
+    CanClose = false;
+  }
 }
 }
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 void __fastcall TFileFindDialog::HelpButtonClick(TObject * /*Sender*/)
 void __fastcall TFileFindDialog::HelpButtonClick(TObject * /*Sender*/)

+ 1 - 0
source/forms/FileFind.h

@@ -113,6 +113,7 @@ private:
   UnicodeString FFocusPath;
   UnicodeString FFocusPath;
   typedef std::map<UnicodeString, TListItem *> TFileItemMap;
   typedef std::map<UnicodeString, TListItem *> TFileItemMap;
   TFileItemMap FFileItemMap;
   TFileItemMap FFileItemMap;
+  bool FClosePending;
 
 
   void __fastcall FileFound(TTerminal * Terminal,
   void __fastcall FileFound(TTerminal * Terminal,
     const UnicodeString FileName, const TRemoteFile * File, bool & Cancel);
     const UnicodeString FileName, const TRemoteFile * File, bool & Cancel);