Pārlūkot izejas kodu

Bug 1884: Optionally disable moving using drag&drop

https://winscp.net/tracker/1884

Source commit: b570887fb9aa2df599ed70a3bb163bcc054661fe
Martin Prikryl 5 gadi atpakaļ
vecāks
revīzija
ff23ec2ee2

+ 2 - 1
source/WinSCP.cbproj

@@ -104,8 +104,9 @@
 		<TASM_DisplaySourceLines>true</TASM_DisplaySourceLines>
 	</PropertyGroup>
 	<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
+		<Debugger_RunParams>/rawconfig Interface\DDDisableMove=1</Debugger_RunParams>
 		<ILINK_DisableIncrementalLinking>true</ILINK_DisableIncrementalLinking>
-		<ILINK_LibraryPath>$(INTERM_PATH)\Win32\Debug\;$(BDS)\lib\Win32\Debug\;$(BDS)\lib\Win32\Release\;$(BDS)\lib\Win32\Release\psdk\;$(ILINK_LibraryPath)</ILINK_LibraryPath>
+		<ILINK_LibraryPath>C:\Misto\bin\interm\Win32\Debug\;$(INTERM_PATH)\Win32\Debug\;$(BDS)\lib\Win32\Debug\;$(BDS)\lib\Win32\Release\;$(BDS)\lib\Win32\Release\psdk\;$(ILINK_LibraryPath)</ILINK_LibraryPath>
 		<LinkPackageStatics>vcl.lib;rtl.lib;vclx.lib;ws2_32.lib;secur32.lib;My.lib;DriveDir.lib;DragDropP.lib;tb2k.lib;tbxp.lib;bcbie.lib;Crypt32.lib;PngComponents.lib;xmlrtl.lib;vclactnband.lib;vclimg.lib;winhttp.lib;jcl.lib;vclie.lib;urlmon.lib;shlwapi.lib;powrprof.lib;soaprtl.lib;fmx.lib;dbrtl.lib;inet.lib;psapi.lib</LinkPackageStatics>
 	</PropertyGroup>
 	<PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">

+ 8 - 1
source/components/UnixDirView.cpp

@@ -48,6 +48,7 @@ __fastcall TUnixDirView::TUnixDirView(TComponent* Owner)
   FTerminal = NULL;
 #endif
   FCaseSensitive = true;
+  FDDAllowMove = false;
   FShowInaccesibleDirectories = true;
   FFullLoad = false;
   FDriveView = NULL;
@@ -826,7 +827,13 @@ void __fastcall TUnixDirView::DDChooseEffect(int grfKeyState, int &dwEffect, int
 //---------------------------------------------------------------------------
 TDropEffectSet __fastcall TUnixDirView::GetDragSourceEffects()
 {
-  return TDropEffectSet() << deCopy << deMove;
+  TDropEffectSet Result;
+  Result << deCopy;
+  if (DDAllowMove)
+  {
+    Result << deMove;
+  }
+  return Result;
 }
 //---------------------------------------------------------------------------
 void __fastcall TUnixDirView::ChangeDirectory(UnicodeString Path)

+ 2 - 0
source/components/UnixDirView.h

@@ -23,6 +23,7 @@ class PACKAGE TUnixDirView : public TCustomUnixDirView
 {
 friend class TCustomUnixDriveView;
 private:
+  bool FDDAllowMove;
   bool FDirLoadedAfterChangeDir;
   TNotifyEvent FOnDisplayProperties;
   bool FFullLoad;
@@ -103,6 +104,7 @@ public:
   __property bool Active = { read = GetActive };
   __property TTerminal *Terminal = { read = FTerminal, write = SetTerminal };
 __published:
+  __property bool DDAllowMove = { read = FDDAllowMove, write = FDDAllowMove, default = false };
   __property TDDDragFileName OnDDDragFileName = { read = FOnDDDragFileName,
     write = FOnDDDragFileName};
   __property OnBusy;

+ 8 - 1
source/components/UnixDriveView.cpp

@@ -47,6 +47,7 @@ __fastcall TCustomUnixDriveView::TCustomUnixDriveView(TComponent* Owner) :
   FRootName = Customunixdirview_SUnixDefaultRootName;
   FIgnoreChange = false;
   FPrevSelected = NULL;
+  FDDAllowMove = false;
   FShowInaccesibleDirectories = true;
   FDummyDragFile = NULL;
   FPendingDelete = new TList();
@@ -645,7 +646,13 @@ bool __fastcall TCustomUnixDriveView::DragCompleteFileList()
 //---------------------------------------------------------------------------
 TDropEffectSet __fastcall TCustomUnixDriveView::DDSourceEffects()
 {
-  return TDropEffectSet() << deCopy << deMove;
+  TDropEffectSet Result;
+  Result << deCopy;
+  if (DDAllowMove)
+  {
+    Result << deMove;
+  }
+  return Result;
 }
 //---------------------------------------------------------------------------
 UnicodeString __fastcall TCustomUnixDriveView::NodePathName(TTreeNode * Node)

+ 2 - 0
source/components/UnixDriveView.h

@@ -24,6 +24,7 @@ public:
 
   __property TUnixDirView * DirView = { read = FDirView, write = SetDirView };
   __property UnicodeString RootName = { read = FRootName, write = FRootName, stored = IsRootNameStored };
+  __property bool DDAllowMove = { read = FDDAllowMove, write = FDDAllowMove, default = false };
   __property TDDDragFileName OnDDDragFileName = { read = FOnDDDragFileName, write = FOnDDDragFileName};
   __property bool ShowInaccesibleDirectories = { read=FShowInaccesibleDirectories, write=SetShowInaccesibleDirectories, default=true  };
 
@@ -91,6 +92,7 @@ private:
   bool FDirectoryLoaded;
   bool FIgnoreChange;
   TTreeNode * FPrevSelected;
+  bool FDDAllowMove;
   TDDDragFileName FOnDDDragFileName;
   bool FShowInaccesibleDirectories;
   TRemoteFile * FDummyDragFile;

+ 2 - 0
source/forms/CustomScpExplorer.cpp

@@ -1017,6 +1017,7 @@ void __fastcall TCustomScpExplorerForm::ConfigurationChanged()
   Color = GetBtnFaceColor();
 
   DebugAssert(Configuration && RemoteDirView);
+  RemoteDirView->DDAllowMove = !WinConfiguration->DDDisableMove;
   RemoteDirView->DimmHiddenFiles = WinConfiguration->DimmHiddenFiles;
   RemoteDirView->ShowHiddenFiles = WinConfiguration->ShowHiddenFiles;
   RemoteDirView->FormatSizeBytes = WinConfiguration->FormatSizeBytes;
@@ -1030,6 +1031,7 @@ void __fastcall TCustomScpExplorerForm::ConfigurationChanged()
     RemoteDirView->Invalidate();
   }
 
+  RemoteDriveView->DDAllowMove = !WinConfiguration->DDDisableMove;
   RemoteDriveView->DimmHiddenDirs = WinConfiguration->DimmHiddenFiles;
   RemoteDriveView->ShowHiddenDirs = WinConfiguration->ShowHiddenFiles;
   RemoteDriveView->ShowInaccesibleDirectories = WinConfiguration->ShowInaccesibleDirectories;

+ 7 - 0
source/windows/WinConfiguration.cpp

@@ -527,6 +527,7 @@ void __fastcall TWinConfiguration::Default()
   int WorkAreaHeightScaled = DimensionToDefaultPixelsPerInch(Screen->WorkAreaHeight);
   UnicodeString PixelsPerInchToolbarValue = "PixelsPerInch=" + SaveDefaultPixelsPerInch();
 
+  FDDDisableMove = false;
   FDDTransferConfirmation = asAuto;
   FDDTemporaryDirectory = L"";
   FDDDrives = L"";
@@ -942,6 +943,7 @@ THierarchicalStorage * TWinConfiguration::CreateScpStorage(bool & SessionList)
   BLOCK(L"Interface", CANCREATE, \
     KEYEX(Integer,DoubleClickAction, L"CopyOnDoubleClick"); \
     KEY(Bool,     CopyOnDoubleClickConfirmation); \
+    KEY(Bool,     DDDisableMove); \
     KEYEX(Integer, DDTransferConfirmation, L"DDTransferConfirmation2"); \
     KEY(String,   DDTemporaryDirectory); \
     KEY(String,   DDDrives); \
@@ -1888,6 +1890,11 @@ void __fastcall TWinConfiguration::EndMasterPasswordSession()
   FMasterPasswordSessionAsked = false;
 }
 //---------------------------------------------------------------------------
+void __fastcall TWinConfiguration::SetDDDisableMove(bool value)
+{
+  SET_CONFIG_PROPERTY(DDDisableMove);
+}
+//---------------------------------------------------------------------------
 void __fastcall TWinConfiguration::SetDDTransferConfirmation(TAutoSwitch value)
 {
   SET_CONFIG_PROPERTY(DDTransferConfirmation);

+ 3 - 0
source/windows/WinConfiguration.h

@@ -356,6 +356,7 @@ private:
   UnicodeString FAutoStartSession;
   TDoubleClickAction FDoubleClickAction;
   bool FCopyOnDoubleClickConfirmation;
+  bool FDDDisableMove;
   TAutoSwitch FDDTransferConfirmation;
   bool FDeleteToRecycleBin;
   bool FDimmHiddenFiles;
@@ -474,6 +475,7 @@ private:
 
   void __fastcall SetDoubleClickAction(TDoubleClickAction value);
   void __fastcall SetCopyOnDoubleClickConfirmation(bool value);
+  void __fastcall SetDDDisableMove(bool value);
   void __fastcall SetDDTransferConfirmation(TAutoSwitch value);
   void __fastcall SetDeleteToRecycleBin(bool value);
   void __fastcall SetDimmHiddenFiles(bool value);
@@ -678,6 +680,7 @@ public:
   __property UnicodeString AutoStartSession = { read = FAutoStartSession, write = SetAutoStartSession };
   __property TDoubleClickAction DoubleClickAction = { read = FDoubleClickAction, write = SetDoubleClickAction };
   __property bool CopyOnDoubleClickConfirmation = { read = FCopyOnDoubleClickConfirmation, write = SetCopyOnDoubleClickConfirmation };
+  __property bool DDDisableMove = { read = FDDDisableMove, write = SetDDDisableMove };
   __property TAutoSwitch DDTransferConfirmation = { read = FDDTransferConfirmation, write = SetDDTransferConfirmation };
   __property bool DeleteToRecycleBin = { read = FDeleteToRecycleBin, write = SetDeleteToRecycleBin };
   __property bool DimmHiddenFiles = { read = FDimmHiddenFiles, write = SetDimmHiddenFiles };