Procházet zdrojové kódy

Bug fix: When files on another session tab, the "Duplicate via local temporary copy" could be unchecked (and was initially unchecked), leading to the file being duplicated incorrectly within the current session.

Source commit: 13421d66790539ab9b528efa162857e9aeb94184
Martin Prikryl před 9 roky
rodič
revize
93b2991c7d

+ 1 - 1
source/forms/CustomScpExplorer.cpp

@@ -3647,7 +3647,7 @@ bool __fastcall TCustomScpExplorerForm::RemoteTransferDialog(TTerminal *& Sessio
         }
         void * ASession = Session;
         Result = DoRemoteCopyDialog(Sessions, Directories, AllowDirectCopy,
-          Multi, ASession, Target, FileMask, DirectCopy);
+          Multi, ASession, Target, FileMask, DirectCopy, TTerminalManager::Instance()->ActiveTerminal);
         Session = static_cast<TTerminal *>(ASession);
       }
       __finally

+ 20 - 12
source/forms/RemoteTransfer.cpp

@@ -20,13 +20,13 @@
 //---------------------------------------------------------------------------
 bool __fastcall DoRemoteCopyDialog(TStrings * Sessions, TStrings * Directories,
   TDirectRemoteCopy AllowDirectCopy, bool Multi, void *& Session, UnicodeString & Target, UnicodeString & FileMask,
-  bool & DirectCopy)
+  bool & DirectCopy, void * CurrentSession)
 {
   bool Result;
   TRemoteTransferDialog * Dialog = SafeFormCreate<TRemoteTransferDialog>();
   try
   {
-    Dialog->Init(Multi, Sessions, Directories, AllowDirectCopy);
+    Dialog->Init(Multi, Sessions, Directories, AllowDirectCopy, CurrentSession);
     Result = Dialog->Execute(Session, Target, FileMask, DirectCopy);
   }
   __finally
@@ -45,7 +45,7 @@ __fastcall TRemoteTransferDialog::TRemoteTransferDialog(TComponent * Owner)
 }
 //---------------------------------------------------------------------------
 void __fastcall TRemoteTransferDialog::Init(bool Multi, TStrings * Sessions,
-  TStrings * Directories, TDirectRemoteCopy AllowDirectCopy)
+  TStrings * Directories, TDirectRemoteCopy AllowDirectCopy, void * CurrentSession)
 {
   FMulti = Multi;
   SessionCombo->Items = Sessions;
@@ -53,27 +53,25 @@ void __fastcall TRemoteTransferDialog::Init(bool Multi, TStrings * Sessions,
   DebugAssert(SessionCombo->Items->Count > 0);
   DebugAssert(SessionCombo->Items->Count == FDirectories->Count);
   FAllowDirectCopy = AllowDirectCopy;
+  FCurrentSession = CurrentSession;
   LoadDialogImage(Image, L"Duplicate");
 }
 //---------------------------------------------------------------------------
 bool __fastcall TRemoteTransferDialog::Execute(void *& Session, UnicodeString & Target,
   UnicodeString & FileMask, bool & DirectCopy)
 {
-  FCurrentSession = -1;
   for (int Index = 0; Index < SessionCombo->Items->Count; Index++)
   {
     if (SessionCombo->Items->Objects[Index] == Session)
     {
-      FCurrentSession = Index;
       SessionCombo->ItemIndex = Index;
       break;
     }
   }
-  DebugAssert(FCurrentSession >= 0);
   DirectoryEdit->Items = CustomWinConfiguration->History[L"RemoteTarget"];
   DirectoryEdit->Text = UnixIncludeTrailingBackslash(Target) + FileMask;
   FDirectCopy = DirectCopy;
-  NotDirectCopyCheck->Checked = !DirectCopy;
+  UpdateNotDirectCopyCheck();
   bool Result = (ShowModal() == DefaultResult(this));
   if (Result)
   {
@@ -94,7 +92,7 @@ UnicodeString __fastcall TRemoteTransferDialog::GetFileMask()
 void __fastcall TRemoteTransferDialog::UpdateControls()
 {
   EnableControl(NotDirectCopyCheck,
-    (SessionCombo->ItemIndex == FCurrentSession) &&
+    IsCurrentSessionSelected() &&
     (FAllowDirectCopy != drcDisallow));
   EnableControl(OkButton, !DirectoryEdit->Text.IsEmpty());
 }
@@ -122,7 +120,13 @@ void __fastcall TRemoteTransferDialog::SessionComboChange(TObject * /*Sender*/)
   DirectoryEdit->Text =
     UnixIncludeTrailingBackslash(FDirectories->Strings[SessionCombo->ItemIndex]) +
     UnixExtractFileName(DirectoryEdit->Text);
-  if (SessionCombo->ItemIndex == FCurrentSession)
+  UpdateNotDirectCopyCheck();
+  UpdateControls();
+}
+//---------------------------------------------------------------------------
+void __fastcall TRemoteTransferDialog::UpdateNotDirectCopyCheck()
+{
+  if (IsCurrentSessionSelected())
   {
     NotDirectCopyCheck->Checked = !FDirectCopy;
   }
@@ -130,7 +134,6 @@ void __fastcall TRemoteTransferDialog::SessionComboChange(TObject * /*Sender*/)
   {
     NotDirectCopyCheck->Checked = true;
   }
-  UpdateControls();
 }
 //---------------------------------------------------------------------------
 void __fastcall TRemoteTransferDialog::FormCloseQuery(TObject * /*Sender*/,
@@ -148,7 +151,7 @@ void __fastcall TRemoteTransferDialog::FormCloseQuery(TObject * /*Sender*/,
       }
     }
 
-    if ((SessionCombo->ItemIndex == FCurrentSession) &&
+    if (IsCurrentSessionSelected() &&
         (FAllowDirectCopy == drcConfirmCommandSession) &&
         !NotDirectCopyCheck->Checked &&
         GUIConfiguration->ConfirmCommandSession)
@@ -171,9 +174,14 @@ void __fastcall TRemoteTransferDialog::FormCloseQuery(TObject * /*Sender*/,
 void __fastcall TRemoteTransferDialog::NotDirectCopyCheckClick(
   TObject * /*Sender*/)
 {
-  if (SessionCombo->ItemIndex == FCurrentSession)
+  if (IsCurrentSessionSelected())
   {
     FDirectCopy = !NotDirectCopyCheck->Checked;
   }
 }
 //---------------------------------------------------------------------------
+bool __fastcall TRemoteTransferDialog::IsCurrentSessionSelected()
+{
+  return (SessionCombo->Items->Objects[SessionCombo->ItemIndex] == FCurrentSession);
+}
+//---------------------------------------------------------------------------

+ 4 - 2
source/forms/RemoteTransfer.h

@@ -34,17 +34,19 @@ public:
   __fastcall TRemoteTransferDialog(TComponent * Owner);
 
   void __fastcall Init(bool Multi, TStrings * Sessions, TStrings * Directories,
-    TDirectRemoteCopy AllowDirectCopy);
+    TDirectRemoteCopy AllowDirectCopy, void * CurrentSession);
   bool __fastcall Execute(void *& Session, UnicodeString & Target,
     UnicodeString & FileMask, bool & DirectCopy);
 
 protected:
   void __fastcall UpdateControls();
   UnicodeString __fastcall GetFileMask();
+  bool __fastcall IsCurrentSessionSelected();
+  void __fastcall UpdateNotDirectCopyCheck();
 
 private:
   TStrings * FDirectories;
-  int FCurrentSession;
+  void * FCurrentSession;
   bool FDirectCopy;
   bool FMulti;
   TDirectRemoteCopy FAllowDirectCopy;

+ 1 - 1
source/windows/WinInterface.h

@@ -287,7 +287,7 @@ bool __fastcall DoRemoteMoveDialog(bool Multi, UnicodeString & Target, UnicodeSt
 enum TDirectRemoteCopy { drcDisallow, drcAllow, drcConfirmCommandSession };
 bool __fastcall DoRemoteCopyDialog(TStrings * Sessions, TStrings * Directories,
   TDirectRemoteCopy AllowDirectCopy, bool Multi, void *& Session,
-  UnicodeString & Target, UnicodeString & FileMask, bool & DirectCopy);
+  UnicodeString & Target, UnicodeString & FileMask, bool & DirectCopy, void * CurrentSession);
 
 // forms\SelectMask.cpp
 #ifdef CustomdirviewHPP