From 4d41e7e74d935a87fca669fa86c25ddb1d60695d Mon Sep 17 00:00:00 2001 From: Willy Barro Date: Tue, 29 Apr 2014 16:23:23 -0300 Subject: Add native notification box for errors on linux. Errors will now be shown as a message box, instead of only a console message. This fixes the user not seeing error messages, like if the IWAD is not provided. - Add zenity notification box call on I_Error --- src/i_system.c | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/i_system.c b/src/i_system.c index 041217b0..5b6989bf 100644 --- a/src/i_system.c +++ b/src/i_system.c @@ -262,6 +262,39 @@ void I_Quit (void) exit(0); } +#define ZENITY_BINARY "/usr/bin/zenity" + +// returns non-zero if zenity is available + +static int ZenityAvailable(void) +{ + return system(ZENITY_BINARY " --help >/dev/null 2>&1") == 0; +} + +// Open a native error box with a message using zenity + +static int ZenityErrorBox(char *message) +{ + int *result; + char *errorboxpath; + static size_t errorboxpath_size; + + if (!ZenityAvailable()) + { + return 0; + } + + errorboxpath_size = strlen(ZENITY_BINARY) + strlen(message) + 19; + errorboxpath = malloc(errorboxpath_size); + M_snprintf(errorboxpath, errorboxpath_size, "%s --error --text=\"%s\"", ZENITY_BINARY, message); + + result = system(errorboxpath); + + free(errorboxpath); + + return result; +} + // // I_Error // @@ -327,9 +360,7 @@ void I_Error (char *error, ...) MessageBoxW(NULL, wmsgbuf, L"", MB_OK); } -#endif - -#ifdef __MACOSX__ +#elif defined(__MACOSX__) if (exit_gui_popup && !I_ConsoleStdout()) { CFStringRef message; @@ -365,6 +396,11 @@ void I_Error (char *error, ...) message, NULL); } +#else + if (exit_gui_popup && !I_ConsoleStdout()) + { + ZenityErrorBox(error); + } #endif // abort(); -- cgit v1.2.3