summaryrefslogtreecommitdiffstats
path: root/platform/linuxbsd
diff options
context:
space:
mode:
Diffstat (limited to 'platform/linuxbsd')
-rw-r--r--platform/linuxbsd/os_linuxbsd.cpp45
-rw-r--r--platform/linuxbsd/x11/display_server_x11.cpp9
-rw-r--r--platform/linuxbsd/x11/display_server_x11.h1
3 files changed, 41 insertions, 14 deletions
diff --git a/platform/linuxbsd/os_linuxbsd.cpp b/platform/linuxbsd/os_linuxbsd.cpp
index ebdbd061d1..310778388b 100644
--- a/platform/linuxbsd/os_linuxbsd.cpp
+++ b/platform/linuxbsd/os_linuxbsd.cpp
@@ -496,11 +496,19 @@ bool OS_LinuxBSD::_check_internal_feature_support(const String &p_feature) {
return font_config_initialized;
}
#endif
+
+#ifndef __linux__
+ // `bsd` includes **all** BSD, not only "other BSD" (see `get_name()`).
+ if (p_feature == "bsd") {
+ return true;
+ }
+#endif
+
if (p_feature == "pc") {
return true;
}
- // Match against the specific OS (linux, freebsd, etc).
+ // Match against the specific OS (`linux`, `freebsd`, `netbsd`, `openbsd`).
if (p_feature == get_name().to_lower()) {
return true;
}
@@ -953,32 +961,41 @@ Error OS_LinuxBSD::move_to_trash(const String &p_path) {
args.push_back(path);
args.push_front("trash"); // The command is `gio trash <file_name>` so we need to add it to args.
Error result = execute("gio", args, nullptr, &err_code); // For GNOME based machines.
- if (result == OK && !err_code) {
- return OK;
- } else if (err_code == 2) {
- return ERR_FILE_NOT_FOUND;
+ if (result == OK) { // The `execute` function has done its job without errors.
+ if (!err_code) { // The shell command has been executed without errors.
+ return OK;
+ } else if (err_code == 1) {
+ ERR_PRINT("move_to_trash: No such file or directory as " + path + ".");
+ return ERR_FILE_NOT_FOUND;
+ }
}
args.pop_front();
args.push_front("move");
args.push_back("trash:/"); // The command is `kioclient5 move <file_name> trash:/`.
result = execute("kioclient5", args, nullptr, &err_code); // For KDE based machines.
- if (result == OK && !err_code) {
- return OK;
- } else if (err_code == 2) {
- return ERR_FILE_NOT_FOUND;
+ if (result == OK) { // The `execute` function has done its job without errors.
+ if (!err_code) { // The shell command has been executed without errors.
+ return OK;
+ } else if (err_code == 1) {
+ ERR_PRINT("move_to_trash: No such file or directory as " + path + ".");
+ return ERR_FILE_NOT_FOUND;
+ }
}
args.pop_front();
args.pop_back();
result = execute("gvfs-trash", args, nullptr, &err_code); // For older Linux machines.
- if (result == OK && !err_code) {
- return OK;
- } else if (err_code == 2) {
- return ERR_FILE_NOT_FOUND;
+ if (result == OK) { // The `execute` function has done its job without errors.
+ if (!err_code) { // The shell command has been executed without errors.
+ return OK;
+ } else if (err_code == 1) {
+ ERR_PRINT("move_to_trash: No such file or directory as " + path + ".");
+ return ERR_FILE_NOT_FOUND;
+ }
}
- // If the commands `kioclient5`, `gio` or `gvfs-trash` don't exist on the system we do it manually.
+ // If the commands `kioclient5`, `gio` or `gvfs-trash` don't work on the system we do it manually.
String trash_path = "";
String mnt = get_mountpoint(path);
diff --git a/platform/linuxbsd/x11/display_server_x11.cpp b/platform/linuxbsd/x11/display_server_x11.cpp
index 83b6fb7628..a607e26ac5 100644
--- a/platform/linuxbsd/x11/display_server_x11.cpp
+++ b/platform/linuxbsd/x11/display_server_x11.cpp
@@ -2626,6 +2626,15 @@ void DisplayServerX11::window_move_to_foreground(WindowID p_window) {
XFlush(x11_display);
}
+bool DisplayServerX11::window_is_focused(WindowID p_window) const {
+ _THREAD_SAFE_METHOD_
+
+ ERR_FAIL_COND_V(!windows.has(p_window), false);
+ const WindowData &wd = windows[p_window];
+
+ return wd.focused;
+}
+
bool DisplayServerX11::window_can_draw(WindowID p_window) const {
//this seems to be all that is provided by X11
return window_get_mode(p_window) != WINDOW_MODE_MINIMIZED;
diff --git a/platform/linuxbsd/x11/display_server_x11.h b/platform/linuxbsd/x11/display_server_x11.h
index 176a1ffb9a..180362923b 100644
--- a/platform/linuxbsd/x11/display_server_x11.h
+++ b/platform/linuxbsd/x11/display_server_x11.h
@@ -477,6 +477,7 @@ public:
virtual void window_request_attention(WindowID p_window = MAIN_WINDOW_ID) override;
virtual void window_move_to_foreground(WindowID p_window = MAIN_WINDOW_ID) override;
+ virtual bool window_is_focused(WindowID p_window = MAIN_WINDOW_ID) const override;
virtual bool window_can_draw(WindowID p_window = MAIN_WINDOW_ID) const override;