Added a hint to prevent SDL from installing signal handlers.

Fixes Bugzilla #2431.
main
Ryan C. Gordon 2015-03-24 14:29:25 -04:00
parent 162ef5eae9
commit a91a5604cd
2 changed files with 26 additions and 1 deletions

View File

@ -546,6 +546,18 @@ extern "C" {
*/
#define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT"
/**
* \brief Tell SDL not to handle SIGINT.
*
* This hint only applies to Unix-like platforms.
*
* The variable can be set to the following values:
* "0" - SDL will install a SIGINT handler, and when it catches the
* signal, conver it into an SDL_QUIT event.
* "1" - SDL will not install a SIGINT handler.
*/
#define SDL_HINT_DISABLE_SIGINT_HANDLER "SDL_DISABLE_SIGINT_HANDLER"
/**
* \brief An enumeration of hint priorities
*/

View File

@ -19,6 +19,7 @@
3. This notice may not be removed or altered from any source distribution.
*/
#include "../SDL_internal.h"
#include "SDL_hints.h"
/* General quit handling code for SDL */
@ -30,6 +31,8 @@
#include "SDL_events_c.h"
static SDL_bool disable_signals = SDL_FALSE;
#ifdef HAVE_SIGNAL_H
static void
SDL_HandleSIG(int sig)
@ -46,6 +49,12 @@ SDL_HandleSIG(int sig)
int
SDL_QuitInit(void)
{
const char *hint = SDL_GetHint(SDL_HINT_DISABLE_SIGINT_HANDLER);
disable_signals = hint && (SDL_atoi(hint) == 1);
if (disable_signals) {
return 0;
}
#ifdef HAVE_SIGACTION
struct sigaction action;
sigaction(SIGINT, NULL, &action);
@ -80,12 +89,16 @@ SDL_QuitInit(void)
#endif /* HAVE_SIGNAL_H */
/* That's it! */
return (0);
return 0;
}
void
SDL_QuitQuit(void)
{
if (disable_signals) {
return;
}
#ifdef HAVE_SIGACTION
struct sigaction action;
sigaction(SIGINT, NULL, &action);