diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2018-08-25 10:42:08 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-25 10:42:08 +0200 |
commit | 19af8a59993b4edf7d23d564d0d7fe3064a39ce4 (patch) | |
tree | 287f0052555c9ebdb0be7cec8de5a36bdb2b8f95 | |
parent | db0a2563c11b7a6c10618d4f719f1a5f879e4330 (diff) | |
parent | c8464eb69f97bba44000e596b80f3cd56dba940f (diff) |
Merge pull request #21382 from hpvb/more-x11-dialog-programs
Support more X11 dialogs for X11::alert()
-rw-r--r-- | platform/x11/os_x11.cpp | 64 |
1 files changed, 59 insertions, 5 deletions
diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index 56b0c975c4..ca9fd68412 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -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) { |