summaryrefslogtreecommitdiff
path: root/UMain.pas
diff options
context:
space:
mode:
Diffstat (limited to 'UMain.pas')
-rw-r--r--UMain.pas181
1 files changed, 18 insertions, 163 deletions
diff --git a/UMain.pas b/UMain.pas
index 1767a24..6d01b9a 100644
--- a/UMain.pas
+++ b/UMain.pas
@@ -1737,7 +1737,6 @@ var ListView: TGTKListView;
s: string;
i, Sel: integer;
b: boolean;
- tt: TDateTime;
DataList, DirList: TList;
SelectedFiles: TStringList;
ANotebook: TEphyNotebook;
@@ -1768,6 +1767,7 @@ var ListView: TGTKListView;
OpenDirThread.ASelItem := '';
OpenDirThread.AAutoFallBack := AutoFallback;
OpenDirThread.ADirList := DirList;
+ OpenDirThread.DialogsParentWindow := Self;
if Plugin <> nil then begin
DebugMsg(['Plugin <> nil']);
OpenDirThread.APlugin := Plugin;
@@ -1775,51 +1775,8 @@ var ListView: TGTKListView;
OpenDirThread.AHighlightItem := HiliString2;
end;
DebugMsg(['(II) TFMain.ChangingDir: begin thread']);
- tt := Now;
- b := False;
- FRemoteWait := TFRemoteWait.Create(Application);
- FRemoteWait.ParentForm := FMain;
-
- // WARNING: For an unknown reason, there's a race condition in Kylix (FPC is fine).
- // The thread must be started *after* the FRemoteWait is created.
OpenDirThread.Resume;
- repeat
- Sleep(ConstInternalProgressTimer);
-// DebugMsg([' (II) TFMain.ChangingDir: sleep.']);
- Application.ProcessMessages;
- if not b and (MilliSecondsBetween(tt, Now) >= ConstRemoteWaitDialogDelay) then begin
- FRemoteWait.ShowModal;
- b := True;
- end;
- if FRemoteWait.Cancelled then OpenDirThread.CancelIt := True;
- if OpenDirThread.VFSAskQuestion_Display then begin
- OpenDirThread.VFSAskQuestion_Display := False;
- DebugMsg(['Main thread: displaying question dialog']);
- if FRemoteWait.Visible then DialogParent := FRemoteWait.FWidget
- else DialogParent := FWidget;
- HandleVFSAskQuestionCallback(DialogParent, OpenDirThread.VFSAskQuestion_Message, OpenDirThread.VFSAskQuestion_Choices, OpenDirThread.VFSAskQuestion_Choice);
- OpenDirThread.VFSCallbackEvent.SetEvent;
- end;
- if OpenDirThread.VFSAskPassword_Display then begin
- OpenDirThread.VFSAskPassword_Display := False;
- DebugMsg(['Main thread: displaying password prompt']);
- if FRemoteWait.Visible then DialogParent := FRemoteWait.FWidget
- else DialogParent := FWidget;
- OpenDirThread.VFSAskPassword_Result := HandleVFSAskPasswordCallback(DialogParent,
- OpenDirThread.VFSAskPassword_Message,
- OpenDirThread.VFSAskPassword_default_user,
- OpenDirThread.VFSAskPassword_default_domain,
- OpenDirThread.VFSAskPassword_default_password,
- OpenDirThread.VFSAskPassword_flags,
- OpenDirThread.VFSAskPassword_username,
- OpenDirThread.VFSAskPassword_password,
- OpenDirThread.VFSAskPassword_anonymous,
- OpenDirThread.VFSAskPassword_domain,
- OpenDirThread.VFSAskPassword_password_save);
- OpenDirThread.VFSCallbackEvent.SetEvent;
- end;
- until OpenDirThread.Finished;
- FRemoteWait.Free;
+ ProcessThreadEvents(OpenDirThread);
DebugMsg(['(II) TFMain.ChangingDir: end thread, running time = ', OpenDirThread.RunningTime, 'ms']);
except
on E: Exception do DebugMsg(['*** Exception raised in TFMain.ChangingDir:DoThread (', E.ClassName, '): ', E.Message]);
@@ -2447,7 +2404,6 @@ var i, j : integer;
s, s2, smsg, NextItem1, NextItem2: string;
Data: PDataItem;
AWorkingThread: TWorkerThread;
- AFProgress: TFProgress;
begin
try
InternalLock;
@@ -2489,40 +2445,16 @@ begin
FindNextSelected(ListView, DataList, NextItem1, NextItem2);
AWorkingThread := TWorkerThread.Create;
DebugMsg(['TFMain.DoDelete: Creating thread...']);
- AFProgress := TFProgress.Create(Self);
try
- AFProgress.SetNumBars(False);
-// AFProgress.ProgressBar.Max := 100;
- AFProgress.ProgressBar.Value := 0;
- AWorkingThread.ProgressForm := AFProgress;
+ AWorkingThread.DialogsParentWindow := Self;
if Assigned(ListView.Selected) then AWorkingThread.SelectedItem := ListView.Selected.Data;
AWorkingThread.Engine := Engine;
AWorkingThread.LeftPanel := LeftPanel;
AWorkingThread.DataList := DataList;
AWorkingThread.WorkerProcedure := DeleteFilesWorker;
AWorkingThread.Resume;
-
-// AFProgress.Run;
-
- AFProgress.ParentForm := FMain;
- AFProgress.ShowModal;
- ProcessProgressThread(AWorkingThread, AFProgress);
- AFProgress.Close;
-
-
-{ FProgress.ShowModal;
- Application.ProcessMessages;
- repeat
- Sleep(100);
- Application.ProcessMessages;
-// FProgress.Run;
- until False; }
-
-{ FProgress.ShowModal;
- DeleteFiles(FProgress, ListView, Engine, LeftPanel, DataList); }
-
+ ProcessThreadEvents(AWorkingThread);
finally
- AFProgress.Free;
AWorkingThread.Free;
DebugMsg(['TFMain.DoDelete: Freeing thread...']);
end;
@@ -2610,7 +2542,6 @@ var i: integer;
SelCount: longint;
NewPath, NewPathx, SelSingle, NextItem1, NextItem2: string;
AWorkingThread: TWorkerThread;
- AFProgress: TFProgress;
OppositeEngine: TPanelEngine;
p: PChar;
BypassSelAll: boolean;
@@ -2683,13 +2614,8 @@ begin
AWorkingThread := TWorkerThread.Create;
DebugMsg(['TFMain.DoCopyMove: Creating thread...']);
- AFProgress := TFProgress.Create(Self);
try
- if CopyMode then AFProgress.Label1.Caption := LANGCopySC
- else AFProgress.Label1.Caption := LANGMoveRenameSC;
- AFProgress.SetNumBars(True);
- AFProgress.ProgressBar.Value := 0;
- AWorkingThread.ProgressForm := AFProgress;
+ AWorkingThread.DialogsParentWindow := Self;
if Assigned(ListView.Selected) then AWorkingThread.SelectedItem := ListView.Selected.Data;
// Determine target engine according to absolute/relative path
if (NewPath[1] = '/') or (NewPath[1] = '~') then AWorkingThread.DestEngine := OppositeEngine
@@ -2715,11 +2641,6 @@ begin
end;
end;
}
- if AWorkingThread = nil then begin // Something went terribly wrong
- Application.MessageBox(LANGCannotDetermineDestinationEngine, [mbOK], mbError, mbOK, mbOK);
- Exit;
- end;
-
// Strip the engine prefix
// if Pos(ConstPathDelim, NewPath) > 0 then Delete(NewPath, 1, Pos(ConstPathDelim, NewPath));
@@ -2732,22 +2653,11 @@ begin
AWorkingThread.ParamString1 := NewPath;
AWorkingThread.ParamDataItem1 := nil;
- AFProgress.ParentForm := FMain;
- AFProgress.ShowModal;
- Application.ProcessMessages;
-
DebugMsg(['*** Copy: AWorkingThread.Resume']);
-// DebugMsg(['*** Copy: xg_thread_supported = ', xg_thread_supported()]);
AWorkingThread.Resume;
-// AWorkingThread.WorkerProcedure(AWorkingThread);
DebugMsg(['*** Copy: AWorkingThread.Resumed.']);
- ProcessProgressThread(AWorkingThread, AFProgress);
-// DebugMsg(['***************************x1']);
- AFProgress.Close;
-// Beep;
+ ProcessThreadEvents(AWorkingThread);
finally
-// DebugMsg(['** ddddddddddddddd ???']);
- AFProgress.Free;
DebugMsg(['TFMain.DoCopyMove: Freeing thread...']);
AWorkingThread.Free;
end;
@@ -2944,7 +2854,6 @@ var AListView: TGTKListView;
DataList: TList;
Engine: TPanelEngine;
AWorkingThread: TWorkerThread;
- AFProgress: TFProgress;
i: integer;
s1, s2: string;
begin
@@ -2970,12 +2879,8 @@ begin
begin
AWorkingThread := TWorkerThread.Create;
DebugMsg(['TFMain.ListViewEdited: Creating thread...']);
- AFProgress := TFProgress.Create(Self);
try
- AFProgress.SetNumBars(True);
- AFProgress.ProgressBar.Value := 0;
- AFProgress.Label1.Caption := LANGMoveRenameSC;
- AWorkingThread.ProgressForm := AFProgress;
+ AWorkingThread.DialogsParentWindow := Self;
if Assigned(AListView.Selected) then AWorkingThread.SelectedItem := AListView.Selected.Data;
AWorkingThread.SrcEngine := Engine;
AWorkingThread.DestEngine := Engine;
@@ -2987,13 +2892,8 @@ begin
AWorkingThread.ParamString1 := UTF8ToStr(NewText);
AWorkingThread.ParamDataItem1 := InplaceEditItem.Data;
AWorkingThread.Resume;
-// AWorkingThread.WorkerProcedure(AWorkingThread);
- AFProgress.ParentForm := FMain;
- AFProgress.ShowModal;
- ProcessProgressThread(AWorkingThread, AFProgress);
- AFProgress.Close;
+ ProcessThreadEvents(AWorkingThread);
finally
- AFProgress.Free;
DebugMsg(['TFMain.ListViewEdited: Freeing thread...']);
AWorkingThread.Free;
end;
@@ -3300,7 +3200,6 @@ var LeftPanel, HasInitialCRC: boolean;
TargetCRC: LongWord;
TargetSize: Int64;
AWorkingThread: TWorkerThread;
- AFProgress: TFProgress;
begin
try
InternalLock;
@@ -3341,8 +3240,8 @@ begin
AWorkingThread := TWorkerThread.Create;
DebugMsg(['TFMain.miMergeFilesClick: Creating thread...']);
- AFProgress := TFProgress.Create(Self);
try
+ AWorkingThread.DialogsParentWindow := Self;
AWorkingThread.ParamString1 := FilePath;
AWorkingThread.ParamString2 := IncludeTrailingPathDelimiter(Engine.Path) + PDataItem(AListView.Selected.Data)^.FName;
HasInitialCRC := CRCGetInfo(AWorkingThread.ParamString2, Engine, TargetName, TargetCRC, TargetSize);
@@ -3350,21 +3249,13 @@ begin
AWorkingThread.ParamBool1 := HasInitialCRC;
AWorkingThread.ParamLongWord1 := TargetCRC;
AWorkingThread.ParamInt64 := TargetSize;
- AFProgress.SetNumBars(HasInitialCRC);
- AFProgress.ProgressBar.Value := 0;
- AFProgress.Label1.Caption := LANGMergeSC;
- AWorkingThread.ProgressForm := AFProgress;
AWorkingThread.Engine := Engine;
AWorkingThread.LeftPanel := LeftPanel;
AWorkingThread.WorkerProcedure := MergeFilesWorker;
AWorkingThread.Resume;
- AFProgress.ParentForm := FMain;
- AFProgress.ShowModal;
- ProcessProgressThread(AWorkingThread, AFProgress);
- AFProgress.Close;
+ ProcessThreadEvents(AWorkingThread);
s := AWorkingThread.ParamString3;
finally
- AFProgress.Free;
DebugMsg(['TFMain.miMergeFilesClick: Freeing thread...']);
AWorkingThread.Free;
end;
@@ -3387,7 +3278,6 @@ var LeftPanel: boolean;
MaxSize: Int64;
i: integer;
AWorkingThread: TWorkerThread;
- AFProgress: TFProgress;
begin
try
InternalLock;
@@ -3436,26 +3326,18 @@ begin
AWorkingThread := TWorkerThread.Create;
DebugMsg(['TFMain.miSplitFileClick: Creating thread...']);
- AFProgress := TFProgress.Create(Self);
try
+ AWorkingThread.DialogsParentWindow := Self;
AWorkingThread.ParamString1 := IncludeTrailingPathDelimiter(Engine.Path) + PDataItem(AListView.Selected.Data)^.FName;
AWorkingThread.ParamString2 := FilePath;
AWorkingThread.ParamBool1 := DeleteTarget;
AWorkingThread.ParamInt64 := MaxSize;
- AFProgress.SetNumBars(MaxSize > 0);
- AFProgress.ProgressBar.Value := 0;
- AFProgress.Label1.Caption := LANGSplitSC;
- AWorkingThread.ProgressForm := AFProgress;
AWorkingThread.Engine := Engine;
AWorkingThread.LeftPanel := LeftPanel;
AWorkingThread.WorkerProcedure := SplitFilesWorker;
AWorkingThread.Resume;
- AFProgress.ParentForm := FMain;
- AFProgress.ShowModal;
- ProcessProgressThread(AWorkingThread, AFProgress);
- AFProgress.Close;
+ ProcessThreadEvents(AWorkingThread);
finally
- AFProgress.Free;
DebugMsg(['TFMain.miSplitFileClick: Freeing thread...']);
AWorkingThread.Free;
end;
@@ -4044,7 +3926,6 @@ var LeftPanel: boolean;
Stat: PDataItem;
UsrManager: TUserManager;
AWorkingThread: TWorkerThread;
- AFProgress: TFProgress;
begin
try
InternalLock;
@@ -4096,12 +3977,8 @@ begin
FindNextSelected(AListView, DataList, NextItem1, NextItem2);
AWorkingThread := TWorkerThread.Create;
- AFProgress := TFProgress.Create(Self);
try
- AFProgress.SetNumBars(False);
- AFProgress.ProgressBar.Value := 0;
- AFProgress.Label1.Caption := LANGChmodProgress;
- AWorkingThread.ProgressForm := AFProgress;
+ AWorkingThread.DialogsParentWindow := Self;
if Assigned(AListView.Selected) then AWorkingThread.SelectedItem := AListView.Selected.Data;
AWorkingThread.ParamBool1 := FChmod.RecursiveCheckButton.Checked;
AWorkingThread.ParamInt1 := FChmod.RecursiveOptionMenu.ItemIndex;
@@ -4111,12 +3988,8 @@ begin
AWorkingThread.DataList := DataList;
AWorkingThread.WorkerProcedure := ChmodFilesWorker;
AWorkingThread.Resume;
- AFProgress.ParentForm := FMain;
- if (SelCount > 1) or FChmod.RecursiveCheckButton.Checked then AFProgress.ShowModal;
- ProcessProgressThread(AWorkingThread, AFProgress);
- AFProgress.Close;
+ ProcessThreadEvents(AWorkingThread);
finally
- AFProgress.Free;
AWorkingThread.Free;
end;
ChangingDir(LeftPanel, Engine.Path, NextItem1, NextItem2);
@@ -4142,7 +4015,6 @@ var LeftPanel: boolean;
AFile, NextItem1, NextItem2: string;
Stat: PDataItem;
AWorkingThread: TWorkerThread;
- AFProgress: TFProgress;
begin
try
InternalLock;
@@ -4189,12 +4061,8 @@ begin
FindNextSelected(AListView, DataList, NextItem1, NextItem2);
AWorkingThread := TWorkerThread.Create;
- AFProgress := TFProgress.Create(Self);
try
- AFProgress.SetNumBars(False);
- AFProgress.ProgressBar.Value := 0;
- AFProgress.Label1.Caption := LANGChownProgress;
- AWorkingThread.ProgressForm := AFProgress;
+ AWorkingThread.DialogsParentWindow := Self;
if Assigned(AListView.Selected) then AWorkingThread.SelectedItem := AListView.Selected.Data;
AWorkingThread.ParamBool1 := FChown.RecursiveCheckButton.Checked;
AWorkingThread.ParamCardinal1 := FChown.LastUID;
@@ -4204,12 +4072,8 @@ begin
AWorkingThread.DataList := DataList;
AWorkingThread.WorkerProcedure := ChownFilesWorker;
AWorkingThread.Resume;
- AFProgress.ParentForm := FMain;
- if (SelCount > 1) or FChown.RecursiveCheckButton.Checked then AFProgress.ShowModal;
- ProcessProgressThread(AWorkingThread, AFProgress);
- AFProgress.Close;
+ ProcessThreadEvents(AWorkingThread);
finally
- AFProgress.Free;
AWorkingThread.Free;
end;
@@ -6565,7 +6429,6 @@ end;
function TFMain.ExtractFromArchive(var NewPath: string; Engine: TPanelEngine; const FilePath: string; ExtractAll: boolean): boolean;
var s: string;
AWorkingThread: TWorkerThread;
- AFProgress: TFProgress;
tmp: PChar;
LocalEngine: TLocalTreeEngine;
DataList: TList;
@@ -6588,15 +6451,11 @@ begin
else DataList := RightPanelData;
LocalEngine := TLocalTreeEngine.Create;
- AFProgress := TFProgress.Create(Self);
AWorkingThread := TWorkerThread.Create;
try
DebugMsg(['TFMain.ExtractFromArchive: Creating thread...']);
- AFProgress.Label1.Caption := LANGCopySC;
- AFProgress.SetNumBars(True);
- AFProgress.ProgressBar.Value := 0;
- AWorkingThread.ProgressForm := AFProgress;
LocalEngine.SetPath(tmp);
+ AWorkingThread.DialogsParentWindow := Self;
AWorkingThread.ExtractFromVFSMode := True;
AWorkingThread.DestEngine := LocalEngine;
AWorkingThread.SrcEngine := Engine;
@@ -6613,15 +6472,11 @@ begin
DebugMsg(['*** Copy: AWorkingThread.Resume']);
AWorkingThread.Resume;
DebugMsg(['*** Copy: AWorkingThread.Resumed.']);
- AFProgress.ParentForm := FMain;
- AFProgress.ShowModal;
- ProcessProgressThread(AWorkingThread, AFProgress);
- AFProgress.Close;
+ ProcessThreadEvents(AWorkingThread);
Result := (not AWorkingThread.FCancelled) and (not AWorkingThread.ErrorHappened);
finally
DebugMsg(['TFMain.ExtractFromArchive: Freeing thread...']);
LocalEngine.Free;
- AFProgress.Free;
AWorkingThread.Free;
end;