浏览代码

ADD: Save configuration on SIGTERM signal (issue #154)

Alexander Koblov 4 年之前
父节点
当前提交
4ccca9abfd
共有 1 个文件被更改,包括 27 次插入4 次删除
  1. 27 4
      src/platform/uosforms.pas

+ 27 - 4
src/platform/uosforms.pas

@@ -123,9 +123,9 @@ implementation
 
 uses
   ExtDlgs, LCLProc, Menus, Graphics, InterfaceBase, WSForms, LMessages, LCLIntf,
-  uConnectionManager
+  fMain, uConnectionManager
   {$IF DEFINED(MSWINDOWS)}
-  , LCLStrConsts, ComObj, fMain, DCOSUtils, uOSUtils, uFileSystemFileSource
+  , LCLStrConsts, ComObj, DCOSUtils, uOSUtils, uFileSystemFileSource
   , uTotalCommander, FileUtil, Windows, ShlObj, uShlObjAdditional
   , uWinNetFileSource, uVfsModule, uLng, uMyWindows, DCStrUtils
   , uDCReadSVG, uFileSourceUtil, uGdiPlusJPEG, uListGetPreviewBitmap
@@ -136,12 +136,12 @@ uses
     {$ENDIF}
   {$ENDIF}
   {$IFDEF UNIX}
-  , BaseUnix, fFileProperties, uJpegThumb
+  , BaseUnix, Errors, fFileProperties, uJpegThumb
     {$IF NOT DEFINED(DARWIN)}
     , uDCReadSVG, uMagickWand, uGio, uGioFileSource, uVfsModule, uVideoThumb
     , uDCReadWebP, uFolderThumb, uAudioThumb
     {$ELSE}
-    , MacOSAll, fMain, uQuickLook, uMyDarwin, uShowMsg, uLng
+    , MacOSAll, uQuickLook, uMyDarwin, uShowMsg, uLng
     {$ENDIF}
     {$IF NOT DEFINED(DARWIN)}
     , fOpenWith
@@ -892,6 +892,29 @@ begin
 end;
 {$ENDIF}
 
+{$IF DEFINED(UNIX)}
+procedure handle_sigterm(signal: longint); cdecl;
+begin
+  WriteLn('SIGTERM');
+  frmMain.Close;
+end;
+
+procedure RegisterHandler;
+var
+  sa: sigactionrec;
+begin
+  FillChar(sa, SizeOf(sa), #0);
+  sa.sa_handler := @handle_sigterm;
+  if (fpSigAction(SIGTERM, @sa, nil) = -1) then
+  begin
+    Errors.PError('fpSigAction', GetLastOSError);
+  end;
+end;
+
+initialization
+  RegisterHandler;
+{$ENDIF}
+
 finalization
   FreeThenNil(ShellContextMenu);