New way to connect a job_t.
[apps/madmutt.git] / lib-sys / mutt_signal.c
index 4807fa1..2728656 100644 (file)
@@ -9,7 +9,7 @@
 
 #include <lib-lib/lib-lib.h>
 
-#include <lib-ui/curses.h>
+#include <lib-ui/lib-ui.h>
 
 #include "mutt_signal.h"
 
@@ -20,39 +20,20 @@ static struct sigaction SysOldQuit;
 static int IsEndwin = 0;
 
 /* Attempt to catch "ordinary" signals and shut down gracefully. */
-RETSIGTYPE exit_handler (int sig)
+static void exit_handler (int sig)
 {
-  curs_set (1);
-  endwin ();                    /* just to be safe */
-#ifdef SYS_SIGLIST_DECLARED
-  printf (_("%s...  Exiting.\n"), sys_siglist[sig]);
-#else
-#if defined(__sun__) && defined(__svr4__)
-  printf (_("Caught %s...  Exiting.\n"), _sys_siglist[sig]);
-#else
-#if defined(__alpha) && defined(__osf__)
-  printf (_("Caught %s...  Exiting.\n"), __sys_siglist[sig]);
-#else
-  printf (_("Caught signal %d...  Exiting.\n"), sig);
-#endif
-#endif
-#endif
-  exit (0);
-}
-
-RETSIGTYPE chld_handler(int sig __attribute__((unused)))
-{
-  /* empty */
+    curs_set(1);
+    endwin();                    /* just to be safe */
+    printf(_("Caught %s...  Exiting.\n"), strsignal(sig));
+    exit(0);
 }
 
-RETSIGTYPE sighandler (int sig)
+static void sighandler (int sig)
 {
   int save_errno = errno;
 
   switch (sig) {
   case SIGTSTP:                /* user requested a suspend */
-    if (!option (OPTSUSPEND))
-      break;
     IsEndwin = isendwin ();
     curs_set (1);
     if (!IsEndwin)
@@ -61,36 +42,25 @@ RETSIGTYPE sighandler (int sig)
 
   case SIGCONT:
     if (!IsEndwin)
-      refresh ();
+      refresh();
     mutt_curs_set (-1);
-#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
     /* We don't receive SIGWINCH when suspended; however, no harm is done by
      * just assuming we received one, and triggering the 'resize' anyway. */
+  case SIGWINCH:
     SigWinch = 1;
-#endif
     break;
 
-#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
-  case SIGWINCH:
-    SigWinch = 1;
+  case SIGCHLD:
+    SigChild = 1;
     break;
-#endif
 
   case SIGINT:
     SigInt = 1;
     break;
-
   }
   errno = save_errno;
 }
 
-#ifdef USE_SLANG_CURSES
-int mutt_intr_hook (void)
-{
-  return (-1);
-}
-#endif /* USE_SLANG_CURSES */
-
 void mutt_signal_initialize (void)
 {
   struct sigaction act;
@@ -124,30 +94,16 @@ void mutt_signal_initialize (void)
   sigaction (SIGCONT, &act, NULL);
   sigaction (SIGTSTP, &act, NULL);
   sigaction (SIGINT, &act, NULL);
-#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
   sigaction (SIGWINCH, &act, NULL);
-#endif
 
   /* POSIX doesn't allow us to ignore SIGCHLD,
    * so we just install a dummy handler for it
    */
-  act.sa_handler = chld_handler;
   /* don't need to block any other signals here */
   sigemptyset (&act.sa_mask);
   /* we don't want to mess with stopped children */
   act.sa_flags |= SA_NOCLDSTOP;
   sigaction (SIGCHLD, &act, NULL);
-
-#ifdef USE_SLANG_CURSES
-  /* This bit of code is required because of the implementation of
-   * SLcurses_wgetch().  If a signal is received (like SIGWINCH) when we
-   * are in blocking mode, SLsys_getkey() will not return an error unless
-   * a handler function is defined and it returns -1.  This is needed so
-   * that if the user resizes the screen while at a prompt, it will just
-   * abort and go back to the main-menu.
-   */
-  SLang_getkey_intr_hook = mutt_intr_hook;
-#endif
 }
 
 /* signals which are important to block while doing critical ops */
@@ -159,9 +115,7 @@ void mutt_block_signals (void)
     sigaddset (&Sigset, SIGHUP);
     sigaddset (&Sigset, SIGTSTP);
     sigaddset (&Sigset, SIGINT);
-#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
     sigaddset (&Sigset, SIGWINCH);
-#endif
     sigprocmask (SIG_BLOCK, &Sigset, 0);
     set_option (OPTSIGNALSBLOCKED);
   }