Mercurial > grim > libgnt
changeset 1248:19c1a4a2e5cc
Add a Windows signal handler.
author | Elliott Sales de Andrade <quantum.analyst@gmail.com> |
---|---|
date | Fri, 26 Apr 2019 18:40:51 -0400 |
parents | 9c0f0847ae76 |
children | 1eaceab078ca |
files | gntmain.c |
diffstat | 1 files changed, 22 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/gntmain.c Fri Apr 26 17:32:54 2019 -0400 +++ b/gntmain.c Fri Apr 26 18:40:51 2019 -0400 @@ -533,6 +533,21 @@ static void (*org_winch_handler_sa)(int, siginfo_t *, void *); #endif +#ifdef _WIN32 +static BOOL WINAPI +CtrlHandler(DWORD fdwCtrlType) +{ + switch (fdwCtrlType) { + case CTRL_C_EVENT: + case CTRL_CLOSE_EVENT: + ask_before_exit(); + return TRUE; + + default: + return FALSE; + } +} +#else static void sighandler(int sig, siginfo_t *info, void *data) { @@ -557,6 +572,7 @@ break; } } +#endif static void init_wm(void) @@ -581,10 +597,12 @@ { char *filename; const char *locale; +#ifndef _WIN32 struct sigaction act; #ifdef SIGWINCH struct sigaction oact; #endif +#endif if (channel) return; @@ -636,6 +654,9 @@ werase(stdscr); wrefresh(stdscr); +#ifdef _WIN32 + SetConsoleCtrlHandler(CtrlHandler, TRUE); +#else act.sa_sigaction = sighandler; sigemptyset(&act.sa_mask); act.sa_flags = SA_SIGINFO; @@ -656,6 +677,7 @@ sigaction(SIGCHLD, &act, NULL); sigaction(SIGINT, &act, NULL); signal(SIGPIPE, SIG_IGN); +#endif init_wm(); refresh_screen();