[client] added -Q feature to prevent accidental applicaiton closure

Closes #21
This commit is contained in:
Geoffrey McRae 2017-12-17 20:09:47 +11:00
parent e6c6c16d56
commit 71c7f30265

View File

@ -18,6 +18,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#include <getopt.h> #include <getopt.h>
#include <signal.h>
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include <SDL2/SDL_syswm.h> #include <SDL2/SDL_syswm.h>
#include <SDL2/SDL_ttf.h> #include <SDL2/SDL_ttf.h>
@ -81,6 +82,7 @@ struct AppParams
unsigned int spicePort; unsigned int spicePort;
bool scaleMouseInput; bool scaleMouseInput;
bool hideMouse; bool hideMouse;
bool ignoreQuit;
}; };
struct AppState state; struct AppState state;
@ -104,7 +106,8 @@ struct AppParams params =
.spiceHost = "127.0.0.1", .spiceHost = "127.0.0.1",
.spicePort = 5900, .spicePort = 5900,
.scaleMouseInput = true, .scaleMouseInput = true,
.hideMouse = true .hideMouse = true,
.ignoreQuit = false
}; };
inline void updatePositionInfo() inline void updatePositionInfo()
@ -469,7 +472,8 @@ int eventThread(void * arg)
switch(event.type) switch(event.type)
{ {
case SDL_QUIT: case SDL_QUIT:
state.running = false; if (!params.ignoreQuit)
state.running = false;
break; break;
case SDL_WINDOWEVENT: case SDL_WINDOWEVENT:
@ -643,6 +647,16 @@ int eventThread(void * arg)
return 0; return 0;
} }
void intHandler(int signal)
{
switch(signal)
{
case SIGINT:
state.running = false;
break;
}
}
int run() int run()
{ {
DEBUG_INFO("Looking Glass (" BUILD_VERSION ")"); DEBUG_INFO("Looking Glass (" BUILD_VERSION ")");
@ -658,6 +672,10 @@ int run()
return -1; return -1;
} }
// override SDL's SIGINIT handler so that we can tell the difference between
// SIGINT and the user sending a close event, such as ALT+F4
signal(SIGINT, intHandler);
if (params.showFPS) if (params.showFPS)
{ {
if (TTF_Init() < 0) if (TTF_Init() < 0)
@ -928,6 +946,7 @@ void doHelp(char * app)
" -y YPOS Initial window Y position [current: %s]\n" " -y YPOS Initial window Y position [current: %s]\n"
" -w WIDTH Initial window width [current: %u]\n" " -w WIDTH Initial window width [current: %u]\n"
" -b HEIGHT Initial window height [current: %u]\n" " -b HEIGHT Initial window height [current: %u]\n"
" -Q Ignore requests to quit (ie: Alt+F4)\n"
"\n" "\n"
" -l License information\n" " -l License information\n"
"\n", "\n",
@ -970,7 +989,7 @@ void doLicense()
int main(int argc, char * argv[]) int main(int argc, char * argv[])
{ {
int c; int c;
while((c = getopt(argc, argv, "hf:sc:p:jMmvkanrdFx:y:w:b:l")) != -1) while((c = getopt(argc, argv, "hf:sc:p:jMmvkanrdFx:y:w:b:Ql")) != -1)
switch(c) switch(c)
{ {
case '?': case '?':
@ -1053,6 +1072,10 @@ int main(int argc, char * argv[])
params.h = atoi(optarg); params.h = atoi(optarg);
break; break;
case 'Q':
params.ignoreQuit = true;
break;
case 'l': case 'l':
doLicense(); doLicense();
return 0; return 0;