Support more X11 dialogs for X11::alert()

Modern distributions such as Fedora do not ship 'xdialog' with their
default deployment. This commit adds support for Gnome's Zenity as well
as KDE's kdialog.
This commit is contained in:
Hein-Pieter van Braam 2018-08-24 22:41:29 +02:00
parent 6ce4078c5f
commit c8464eb69f
1 changed files with 59 additions and 5 deletions

View File

@ -2564,14 +2564,68 @@ void OS_X11::swap_buffers() {
}
void OS_X11::alert(const String &p_alert, const String &p_title) {
const char *message_programs[] = { "zenity", "kdialog", "Xdialog", "xmessage" };
String path = get_environment("PATH");
Vector<String> path_elems = path.split(":", false);
String program;
for (int i = 0; i < path_elems.size(); i++) {
for (unsigned int k = 0; k < sizeof(message_programs) / sizeof(char *); k++) {
String tested_path = path_elems[i] + "/" + message_programs[k];
if (FileAccess::exists(tested_path)) {
program = tested_path;
break;
}
}
if (program.length())
break;
}
List<String> args;
args.push_back("-center");
args.push_back("-title");
args.push_back(p_title);
args.push_back(p_alert);
execute("xmessage", args, true);
if (program.ends_with("zenity")) {
args.push_back("--error");
args.push_back("--width");
args.push_back("500");
args.push_back("--title");
args.push_back(p_title);
args.push_back("--text");
args.push_back(p_alert);
}
if (program.ends_with("kdialog")) {
args.push_back("--error");
args.push_back(p_alert);
args.push_back("--title");
args.push_back(p_title);
}
if (program.ends_with("Xdialog")) {
args.push_back("--title");
args.push_back(p_title);
args.push_back("--msgbox");
args.push_back(p_alert);
args.push_back("0");
args.push_back("0");
}
if (program.ends_with("xmessage")) {
args.push_back("-center");
args.push_back("-title");
args.push_back(p_title);
args.push_back(p_alert);
}
if (program.length()) {
execute(program, args, true);
} else {
print_line(p_alert);
}
return;
}
void OS_X11::set_icon(const Ref<Image> &p_icon) {