summaryrefslogtreecommitdiff
path: root/UMain.pas
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@users.sourceforge.net>2009-09-24 13:56:43 +0200
committerTomas Bzatek <tbzatek@users.sourceforge.net>2009-09-24 13:56:43 +0200
commitad9cdb8339e0b141dd3979206aaca345df4a2003 (patch)
tree7512256c65389383bfd6d7de0b375417607f7999 /UMain.pas
parenteb81ef02a3460d7e11c07884924d28a96abd3e26 (diff)
downloadtuxcmd-ad9cdb8339e0b141dd3979206aaca345df4a2003.tar.xz
Allow moving tab containing non-local engine to the opposite panel
Diffstat (limited to 'UMain.pas')
-rw-r--r--UMain.pas48
1 files changed, 27 insertions, 21 deletions
diff --git a/UMain.pas b/UMain.pas
index f202302..66e9d3d 100644
--- a/UMain.pas
+++ b/UMain.pas
@@ -230,7 +230,7 @@ type
procedure FillPluginMenu;
procedure NewTab(LeftPanel, SendSelectedDirToBg: boolean; CustomPath: string = '');
procedure SwitchTab(TabNo: integer; LeftPanel, SetFocus: boolean);
- procedure CloseTab(TabNo: integer; LeftPanel: boolean);
+ procedure CloseTab(TabNo: integer; LeftPanel, CloseVFSEngine: boolean);
procedure AddTabs(LeftPanel: boolean; TabList: TStringList; TabSortIDs, TabSortTypes: TList; SetTabActive: integer);
function HandleVFSArchive(LeftPanel: boolean; const FullPath, HighlightItem, TargetPath: string): boolean;
function CloseVFS(LeftPanel, SuppressRefresh: boolean): string;
@@ -5631,22 +5631,22 @@ end;
procedure TFMain.miCloseTabClick(Sender: TObject);
begin
if not CommandLineCombo.Entry.Focused then
- if LeftListView.Focused then CloseTab(LeftPanelNotebook.PageIndex, True) else
- if RightListView.Focused then CloseTab(RightPanelNotebook.PageIndex, False) else
- if (Sender is TGTKMenuItem) and LeftTabPopup then CloseTab(LeftPanelNotebook.PageIndex, True) else
- if (Sender is TGTKMenuItem) and (not LeftTabPopup) then CloseTab(RightPanelNotebook.PageIndex, False) else
+ if LeftListView.Focused then CloseTab(LeftPanelNotebook.PageIndex, True, True) else
+ if RightListView.Focused then CloseTab(RightPanelNotebook.PageIndex, False, True) else
+ if (Sender is TGTKMenuItem) and LeftTabPopup then CloseTab(LeftPanelNotebook.PageIndex, True, True) else
+ if (Sender is TGTKMenuItem) and (not LeftTabPopup) then CloseTab(RightPanelNotebook.PageIndex, False, True) else
DebugMsg(['Couldn''t close tab: No listview focused.']);
end;
procedure TFMain.miCloseAllTabsClick(Sender: TObject);
begin
if Application.MessageBox(LANGAreYouSureCloseAllTabs, [mbYes, mbNo], mbQuestion, mbYes, mbNo) = mbYes then
- if (Sender is TGTKMenuItem) and LeftTabPopup then CloseTab(-1, True) else
- if (Sender is TGTKMenuItem) and (not LeftTabPopup) then CloseTab(-1, False) else
+ if (Sender is TGTKMenuItem) and LeftTabPopup then CloseTab(-1, True, True) else
+ if (Sender is TGTKMenuItem) and (not LeftTabPopup) then CloseTab(-1, False, True) else
DebugMsg(['Couldn''t close all tabs: No listview focused.']);
end;
-procedure TFMain.CloseTab(TabNo: integer; LeftPanel: boolean);
+procedure TFMain.CloseTab(TabNo: integer; LeftPanel, CloseVFSEngine: boolean);
var ATabList: TStringList;
PathsHighlight: TStringList;
ANotebook: TEphyNotebook;
@@ -5686,7 +5686,7 @@ begin
if TabNo > 0 then begin
Engine := TabEngines[TabNo];
- if (Engine is TVFSEngine) and (not CheckForUnsavedConnection(Engine as TVFSEngine, True)) then Exit;
+ if (Engine is TVFSEngine) and CloseVFSEngine and (not CheckForUnsavedConnection(Engine as TVFSEngine, True)) then Exit;
end;
if (ANotebook.ChildrenCount > 2) and (TabNo >= 0) then begin
@@ -5707,13 +5707,14 @@ begin
TabSortIDs.Delete(TabNo);
TabSortTypes.Delete(TabNo);
// Try to close the VFS engine
- while Engine is TVFSEngine do
- try
- xEngine := Engine;
- Engine := xEngine.ParentEngine;
- if not TVFSEngine(xEngine).VFSClose then DebugMsg(['Error closing the engine...']);
- xEngine.Free;
- except end;
+ if CloseVFSEngine then
+ while Engine is TVFSEngine do
+ try
+ xEngine := Engine;
+ Engine := xEngine.ParentEngine;
+ if not TVFSEngine(xEngine).VFSClose then DebugMsg(['Error closing the engine...']);
+ xEngine.Free;
+ except end;
end else begin // Close last/all tabs, hide the tab bar
// Change dir to the opposite
@@ -5730,7 +5731,7 @@ begin
ATabList.Clear;
PathsHighlight.Clear;
for i := 0 to TabEngines.Count - 1 do
- if (TPanelEngine(TabEngines[i]) is TVFSEngine) and ((LeftPanel and (LeftPanelEngine <> TabEngines[i])) or
+ if (TPanelEngine(TabEngines[i]) is TVFSEngine) and CloseVFSEngine and ((LeftPanel and (LeftPanelEngine <> TabEngines[i])) or
((not LeftPanel) and (RightPanelEngine <> TabEngines[i])))
then begin
Engine := TabEngines[i];
@@ -5866,13 +5867,13 @@ end;
procedure TFMain.NotebookTabClosed(Sender: TObject; const TabNum: integer; var CanClose: boolean);
begin
- CloseTab(TabNum, Sender = LeftPanelNotebook);
+ CloseTab(TabNum, Sender = LeftPanelNotebook, True);
CanClose := False;
end;
procedure TFMain.NotebookTabDoubleClick(Sender: TObject; const TabNum: integer);
begin
- CloseTab(TabNum, Sender = LeftPanelNotebook);
+ CloseTab(TabNum, Sender = LeftPanelNotebook, True);
end;
function TFMain.NotebookFindNotebookAtPointerEvent(Sender: TObject; const AbsX, AbsY: integer): TEphyNotebook;
@@ -5959,6 +5960,8 @@ begin
end;
APath := TPanelEngine(ASrcTabEngines[SourceTabNo]).Path;
+
+(* -- disabled, we allow to _move_ (not duplicate) non-local engine
if TPanelEngine(ASrcTabEngines[SourceTabNo]) is TVFSEngine then begin
while TPanelEngine(ASrcTabEngines[SourceTabNo]) is TVFSEngine do begin
APath := TPanelEngine(ASrcTabEngines[SourceTabNo]).SavePath;
@@ -5976,11 +5979,14 @@ begin
while ATargetEngine is TVFSEngine do
ATargetEngine := ATargetEngine.ParentEngine;
+*)
dst_no := DestTabNo;
if dst_no < 0 then dst_no := ATargetTabList.Count + Ord(ATargetTabList.Count = 0);
- CloseTab(SourceTabNo, LeftPanel);
- NewTabInternal(not LeftPanel, ATargetEngine, APath, dst_no, True);
+ CloseTab(SourceTabNo, LeftPanel, False);
+ if not (ASrcEngine is TLocalTreeEngine)
+ then NewTabInternal(not LeftPanel, ASrcEngine, APath, dst_no, True)
+ else NewTabInternal(not LeftPanel, ATargetEngine, APath, dst_no, True);
Result := True;
end;