diff options
| author | Tomas Bzatek <tbzatek@users.sourceforge.net> | 2009-09-24 13:56:43 +0200 |
|---|---|---|
| committer | Tomas Bzatek <tbzatek@users.sourceforge.net> | 2009-09-24 13:56:43 +0200 |
| commit | ad9cdb8339e0b141dd3979206aaca345df4a2003 (patch) | |
| tree | 7512256c65389383bfd6d7de0b375417607f7999 | |
| parent | eb81ef02a3460d7e11c07884924d28a96abd3e26 (diff) | |
| download | tuxcmd-ad9cdb8339e0b141dd3979206aaca345df4a2003.tar.xz | |
Allow moving tab containing non-local engine to the opposite panel
| -rw-r--r-- | UMain.pas | 48 |
1 files changed, 27 insertions, 21 deletions
@@ -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; |
