mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
FIX: In the startup splash screen, the Double Commander logo was not centered in the panel which was annoying. Now it is. FIX: In the "Favorite Tabs" configuration frame, text in drop box are now loaded with "ParseLineToList" from string ressources in "ulang.pas" file so this way, it will be translated for other languages. FIX: In the "Favorite Tabs" configuration frame, modify the anchors and auto size properties of various components so it will allow all required room for other langauges when it's translated. FIX: In the "File panels" sub-configuration frame of "Colors" configuration, change the achord of the "btnResetToDCDefault" so there is room when it's translated in other language. FIX: In the "Folder tabs" configuration frame, change to a combo drop box the option "Action to do when double click on a tab" so it is now below the other options. This solve text in Japaneese what when over it. FIX: In the "Folder tabs" configuration frame, text for the "Action to do when double click on a tab" is now loaded with "ParseLineToList" from string ressources in "ulang.pas" file so this way, it will be translated for other languages. FIX: In the "Directory Hotlist" configuration frame, text of combo boxes for configuring the sort column are now loaded with "ParseLineToList" from string ressources in "ulang.pas" file so this way, it will be translated for other languages. FIX: In the "Toolbar" configuration frame, set the autosize property for the "btnSuggestionTooltip" so when translated in other language with longer name it will still fit.
213 lines
6.2 KiB
ObjectPascal
213 lines
6.2 KiB
ObjectPascal
{ $threading on}
|
|
program doublecmd;
|
|
{%File 'doc/changelog.txt'}
|
|
|
|
{.$APPTYPE GUI}
|
|
uses
|
|
{$IFDEF DARWIN}
|
|
uAppleMagnifiedModeFix,
|
|
{$ENDIF}
|
|
{$IF DEFINED(WIN64) AND (FPC_FULLVERSION < 30000)}
|
|
uExceptionHandlerFix,
|
|
{$ENDIF}
|
|
{$IFDEF UNIX}
|
|
cthreads,
|
|
{$IFNDEF HEAPTRC}
|
|
cmem,
|
|
{$ENDIF}
|
|
cwstring,
|
|
clocale,
|
|
{$IFDEF LCLGTK2}
|
|
uOverlayScrollBarFix,
|
|
gtk2,
|
|
Gtk2Int,
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
DCConvertEncoding,
|
|
Interfaces,
|
|
LCLProc,
|
|
Classes,
|
|
SysUtils,
|
|
Forms,
|
|
LCLVersion,
|
|
Math,
|
|
{$IF DEFINED(NIGHTLY_BUILD)}
|
|
un_lineinfo,
|
|
{$ENDIF}
|
|
uGlobsPaths,
|
|
uGlobs,
|
|
fHackForm,
|
|
fMain,
|
|
fMkDir,
|
|
dmHigh, dmHelpManager, dmCommonData,
|
|
uShowMsg,
|
|
uCryptProc,
|
|
uPixMapManager,
|
|
uKeyboard,
|
|
uUniqueInstance,
|
|
uDCVersion,
|
|
uCmdLineParams,
|
|
uDebug,
|
|
uOSUtils,
|
|
uspecialdir,
|
|
fstartingsplash,
|
|
ulog,
|
|
uVariableMenuSupport
|
|
{$IFDEF MSWINDOWS}
|
|
, uMyWindows
|
|
{$ENDIF}
|
|
{$IFDEF UNIX}
|
|
, uMyUnix
|
|
{$ENDIF}
|
|
;
|
|
|
|
{$IF NOT (DEFINED(DARWIN) AND DEFINED(LCLQT))}
|
|
{$R *.res}
|
|
{$ENDIF}
|
|
|
|
{$IF DEFINED(MSWINDOWS)}
|
|
{$R doublecmd.manifest.rc}
|
|
{$ENDIF}
|
|
|
|
{$IFDEF HEAPTRC}
|
|
var
|
|
LogPath: String;
|
|
{$ENDIF}
|
|
|
|
begin
|
|
DCDebug('Starting Double Commander');
|
|
|
|
// Initialize random number generator
|
|
Randomize;
|
|
|
|
// Disable invalid floating point operation exception
|
|
SetExceptionMask(GetExceptionMask + [exInvalidOp]);
|
|
|
|
{$IF DEFINED(NIGHTLY_BUILD)}
|
|
InitLineInfo;
|
|
AddLineInfoPath(ExtractFileDir(ParamStr(0)));
|
|
{$ENDIF}
|
|
|
|
{$IFDEF HEAPTRC}
|
|
LogPath := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'logs';
|
|
CreateDir(LogPath);
|
|
SetHeapTraceOutput(LogPath + '/heaptrc-' + FormatDateTime('yyyy-mm-dd hh.mm.ss', Now) + '.log');
|
|
{$ENDIF}
|
|
|
|
{$IFDEF MSWINDOWS}
|
|
uMyWindows.InitErrorMode;
|
|
uMyWindows.FixCommandLineToUTF8;
|
|
{$ENDIF}
|
|
|
|
// Fix default BidiMode
|
|
// see http://bugs.freepascal.org/view.php?id=22044
|
|
Application.BidiMode:= bdLeftToRight;
|
|
|
|
Application.Title:= 'Double Commander';
|
|
Application.Initialize;
|
|
uDCVersion.InitializeVersionInfo;
|
|
// Initializing keyboard module on GTK needs GTKProc.InitKeyboardTables
|
|
// which is called by Application.Initialize.
|
|
uKeyboard.InitializeKeyboard;
|
|
|
|
// Use only current directory separator
|
|
AllowDirectorySeparators:= [DirectorySeparator];
|
|
{$IF lcl_fullversion >= 093100}
|
|
// Disable because we set a few of our own format settings and we don't want
|
|
// them to be changed. There's no way currently to react to Application.IntfSettingsChange.
|
|
// If in future we move to a Unicode RTL this could be removed.
|
|
{$PUSH}{$WARN SYMBOL_PLATFORM OFF}
|
|
Application.UpdateFormatSettings := False;
|
|
{$POP}
|
|
{$ENDIF}
|
|
DefaultFormatSettings.ThousandSeparator:= ' ';
|
|
{$IFDEF UNIX}
|
|
uMyUnix.FixDateTimeSeparators;
|
|
{$ENDIF}
|
|
FixDateNamesToUTF8;
|
|
|
|
DCDebug('Double Commander ' + dcVersion);
|
|
DCDebug('Revision: ' + dcRevision);
|
|
DCDebug('Build: ' + dcBuildDate);
|
|
DCDebug('Lazarus: ' + GetLazarusVersion);
|
|
DCDebug('Free Pascal: ' + fpcVersion);
|
|
DCDebug('Platform: ' + TargetCPU + '-' + TargetOS + '-' + TargetWS);
|
|
DCDebug('System: ' + OSVersion);
|
|
{$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)}
|
|
DCDebug('Desktop Environment: ' + DesktopName[DesktopEnv]);
|
|
{$ENDIF}
|
|
if WSVersion <> EmptyStr then
|
|
DCDebug('Widgetset library: ' + WSVersion);
|
|
DCDebug('This program is free software released under terms of GNU GPL 2');
|
|
DCDebug('(C)opyright 2006-2016 Alexander Koblov (alexx2000@mail.ru)');
|
|
DCDebug(' and contributors (see about dialog)');
|
|
|
|
Application.ShowMainForm:= False;
|
|
Application.CreateForm(TfrmHackForm, frmHackForm);
|
|
|
|
ProcessCommandLineParams; // before load paths
|
|
|
|
if not CommandLineParams.NoSplash then
|
|
begin
|
|
// Let's show the starting slash screen to confirm user application has been started
|
|
Application.CreateForm(TfrmStartingSplash, frmStartingSplash);
|
|
frmStartingSplash.Show;
|
|
end;
|
|
|
|
LoadPaths; // before loading config
|
|
LoadWindowsSpecialDir; // Load the list with special path. *Must* be located AFTER "LoadPaths" and BEFORE "InitGlobs"
|
|
LoadVariableMenuSupport; //Load support for the popup menu with variable
|
|
|
|
if InitGlobs then
|
|
//-- NOTE: before, only IsInstanceAllowed was called, and all the magic on creation
|
|
// new instance or sending params to the existing server happened inside
|
|
// IsInstanceAllowed() function as a side effect.
|
|
// Functions with side effects are generally bad, so,
|
|
// new function was added to explicitly initialize instance.
|
|
InitInstance;
|
|
if IsInstanceAllowed then
|
|
begin
|
|
if (log_start_shutdown in gLogOptions) then logWrite('Program start ('+GetCurrentUserName+'/'+GetComputerNetName+')');
|
|
|
|
InitPasswordStore;
|
|
LoadPixMapManager;
|
|
Application.CreateForm(TfrmMain, frmMain); // main form
|
|
Application.CreateForm(TdmHighl, dmHighl); // highlighters
|
|
Application.CreateForm(TdmComData, dmComData); // common data
|
|
Application.CreateForm(TdmHelpManager, dmHelpMgr); // help manager
|
|
Application.CreateForm(TfrmMkDir, frmMkDir); // 21.05.2009 - makedir form
|
|
|
|
{$IF DEFINED(LCLGTK2) AND (lcl_fullversion >= 093100)}
|
|
// LCLGTK2 uses Application.MainForm as the clipboard widget, however our
|
|
// MainForm is TfrmHackForm and it never gets realized. GTK2 doesn't
|
|
// seem to allow a not realized widget to have clipboard ownership.
|
|
// We switch to frmMain instead which will be realized at some point.
|
|
GTK2WidgetSet.SetClipboardWidget(PGtkWidget(frmMain.Handle));
|
|
{$ENDIF}
|
|
|
|
// Hooking on QT needs the handle of the main form which is created
|
|
// in Application.CreateForm above.
|
|
uKeyboard.HookKeyboardLayoutChanged;
|
|
|
|
if not CommandLineParams.NoSplash then
|
|
begin
|
|
// We may now remove the starting splash screen, most of the application has been started now
|
|
frmStartingSplash.Close;
|
|
frmStartingSplash.Release;
|
|
end;
|
|
|
|
Application.Run;
|
|
|
|
if not UniqueInstance.isAnotherDCRunningWhileIamRunning then
|
|
DeleteTempFolderDeletableAtTheEnd;
|
|
|
|
if (log_start_shutdown in gLogOptions) then logWrite('Program shutdown ('+GetCurrentUserName+'/'+GetComputerNetName+')');
|
|
end
|
|
else
|
|
begin
|
|
DCDebug('Another instance of DC is already running. Exiting.');
|
|
end;
|
|
|
|
uKeyboard.CleanupKeyboard;
|
|
DCDebug('Finished Double Commander');
|
|
end.
|