Explorar o código

Bug 1704: Ctrl+Enter tries to enter even a file

Source commit: ed6944cb3fa6faa4a6a25b8e101886b25ac11d37
Martin Prikryl %!s(int64=7) %!d(string=hai) anos
pai
achega
6410781157

+ 19 - 0
source/components/UnixDirView.cpp

@@ -83,6 +83,25 @@ void __fastcall TUnixDirView::DisplayPropertiesMenu()
   if (OnDisplayProperties) OnDisplayProperties(this);
   if (OnDisplayProperties) OnDisplayProperties(this);
 }
 }
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
+bool __fastcall TUnixDirView::DoExecFile(TListItem * Item, bool ForceEnter)
+{
+  bool Result;
+#ifndef DESIGN_ONLY
+  ASSERT_VALID_ITEM;
+  if (ForceEnter)
+  {
+    PathChanging(true);
+    ChangeDirectory(ITEMFILE->FileName);
+    Result = false;
+  }
+  else
+#endif
+  {
+    Result = TCustomDirView::DoExecFile(Item, ForceEnter);
+  }
+  return Result;
+}
+//---------------------------------------------------------------------------
 void __fastcall TUnixDirView::ExecuteFile(TListItem * Item)
 void __fastcall TUnixDirView::ExecuteFile(TListItem * Item)
 {
 {
 #ifndef DESIGN_ONLY
 #ifndef DESIGN_ONLY

+ 1 - 0
source/components/UnixDirView.h

@@ -47,6 +47,7 @@ protected:
   void __fastcall DoReadDirectory(TObject * Sender, bool ReloadOnly);
   void __fastcall DoReadDirectory(TObject * Sender, bool ReloadOnly);
   void __fastcall DoReadDirectoryImpl(TObject * Sender, bool ReloadOnly);
   void __fastcall DoReadDirectoryImpl(TObject * Sender, bool ReloadOnly);
   void __fastcall DoStartReadDirectory(TObject * Sender);
   void __fastcall DoStartReadDirectory(TObject * Sender);
+  virtual bool __fastcall DoExecFile(TListItem * Item, bool ForceEnter);
   virtual void __fastcall ExecuteFile(TListItem * Item);
   virtual void __fastcall ExecuteFile(TListItem * Item);
   virtual bool __fastcall GetDirOK();
   virtual bool __fastcall GetDirOK();
   virtual void __fastcall GetDisplayInfo(TListItem * ListItem, tagLVITEMW &DispInfo);
   virtual void __fastcall GetDisplayInfo(TListItem * ListItem, tagLVITEMW &DispInfo);

+ 18 - 18
source/packages/filemng/CustomDirView.pas

@@ -256,7 +256,8 @@ type
     function DragCompleteFileList: Boolean; virtual;
     function DragCompleteFileList: Boolean; virtual;
     procedure Edit(const HItem: TLVItem); override;
     procedure Edit(const HItem: TLVItem); override;
     procedure EndSelectionUpdate; override;
     procedure EndSelectionUpdate; override;
-    procedure Execute(Item: TListItem); virtual;
+    function DoExecFile(Item: TListItem; ForceEnter: Boolean): Boolean; virtual;
+    procedure Execute(Item: TListItem; ForceEnter: Boolean); virtual;
     procedure ExecuteFile(Item: TListItem); virtual; abstract;
     procedure ExecuteFile(Item: TListItem); virtual; abstract;
     procedure FocusSomething; override;
     procedure FocusSomething; override;
     function GetIsRoot: Boolean; virtual; abstract;
     function GetIsRoot: Boolean; virtual; abstract;
@@ -318,7 +319,7 @@ type
     function IsBusy: Boolean;
     function IsBusy: Boolean;
     procedure BusyOperation(Operation: TBusyOperation);
     procedure BusyOperation(Operation: TBusyOperation);
     procedure DoDisplayPropertiesMenu;
     procedure DoDisplayPropertiesMenu;
-    procedure DoExecute(Item: TListItem);
+    procedure DoExecute(Item: TListItem; ForceEnter: Boolean);
     procedure DoExecuteParentDirectory;
     procedure DoExecuteParentDirectory;
     procedure Load(DoFocusSomething: Boolean); virtual;
     procedure Load(DoFocusSomething: Boolean); virtual;
     procedure NeedImageLists(Recreate: Boolean);
     procedure NeedImageLists(Recreate: Boolean);
@@ -1384,9 +1385,9 @@ begin
     DisplayPropertiesMenu;
     DisplayPropertiesMenu;
 end;
 end;
 
 
-procedure TCustomDirView.DoExecute(Item: TListItem);
+procedure TCustomDirView.DoExecute(Item: TListItem; ForceEnter: Boolean);
 begin
 begin
-  BusyOperation(procedure begin Execute(Item); end);
+  BusyOperation(procedure begin Execute(Item, ForceEnter); end);
 end;
 end;
 
 
 procedure TCustomDirView.DoExecuteParentDirectory;
 procedure TCustomDirView.DoExecuteParentDirectory;
@@ -1409,7 +1410,7 @@ begin
          Key := 0;
          Key := 0;
          if (AKey = VK_RETURN) and (Shift = [ssAlt]) then DoDisplayPropertiesMenu
          if (AKey = VK_RETURN) and (Shift = [ssAlt]) then DoDisplayPropertiesMenu
            else
            else
-         if (AKey <> VK_RETURN) or (Shift = []) then DoExecute(ItemFocused);
+         if (AKey <> VK_RETURN) or (Shift = []) then DoExecute(ItemFocused, (AKey <> VK_RETURN));
       end;
       end;
     end
     end
       else
       else
@@ -1643,7 +1644,7 @@ begin
      (GetItemAt(Message.XPos, Message.YPos) = ItemFocused) then
      (GetItemAt(Message.XPos, Message.YPos) = ItemFocused) then
   begin
   begin
     if GetKeyState(VK_MENU) < 0 then DoDisplayPropertiesMenu
     if GetKeyState(VK_MENU) < 0 then DoDisplayPropertiesMenu
-      else DoExecute(ItemFocused);
+      else DoExecute(ItemFocused, False);
   end;
   end;
 end;
 end;
 
 
@@ -2434,27 +2435,26 @@ end; { EndUpdatingSelection }
 procedure TCustomDirView.ExecuteCurrentFile;
 procedure TCustomDirView.ExecuteCurrentFile;
 begin
 begin
   Assert(Assigned(ItemFocused));
   Assert(Assigned(ItemFocused));
-  Execute(ItemFocused);
+  Execute(ItemFocused, False);
 end;
 end;
 
 
-procedure TCustomDirView.Execute(Item: TListItem);
-var
-  AllowExec: Boolean;
+function TCustomDirView.DoExecFile(Item: TListItem; ForceEnter: Boolean): Boolean;
+begin
+  Result := True;
+  if Assigned(FOnExecFile) then FOnExecFile(Self, Item, Result);
+end;
+
+procedure TCustomDirView.Execute(Item: TListItem; ForceEnter: Boolean);
 begin
 begin
   Assert(Assigned(Item));
   Assert(Assigned(Item));
   if Assigned(Item) and Assigned(Item.Data) and (not Loading) then
   if Assigned(Item) and Assigned(Item.Data) and (not Loading) then
   begin
   begin
     if IsRecycleBin and (not ItemIsParentDirectory(Item)) then DisplayPropertiesMenu
     if IsRecycleBin and (not ItemIsParentDirectory(Item)) then DisplayPropertiesMenu
       else
       else
+    if DoExecFile(Item, ForceEnter) then
     begin
     begin
-      AllowExec := True;
-      if Assigned(FOnExecFile) then FOnExecFile(Self, Item, AllowExec);
-
-      if AllowExec then
-      begin
-        if ItemIsParentDirectory(Item) then ExecuteParentDirectory
-          else ExecuteFile(Item);
-      end;
+      if ItemIsParentDirectory(Item) then ExecuteParentDirectory
+        else ExecuteFile(Item);
     end;
     end;
   end;
   end;
 end;
 end;