summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWilly Barro2014-04-29 16:23:23 -0300
committerWilly Barro2014-04-29 19:23:08 -0300
commit4d41e7e74d935a87fca669fa86c25ddb1d60695d (patch)
treeae69437fd0324449825a825b966cb8c1cd8d3d78 /src
parent242fa1ee46f90f451c625e90f16927e13030c0a0 (diff)
downloadchocolate-doom-4d41e7e74d935a87fca669fa86c25ddb1d60695d.tar.gz
chocolate-doom-4d41e7e74d935a87fca669fa86c25ddb1d60695d.tar.bz2
chocolate-doom-4d41e7e74d935a87fca669fa86c25ddb1d60695d.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/i_system.c42
1 files changed, 39 insertions, 3 deletions
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();