diff options
Diffstat (limited to 'platform/linuxbsd')
-rw-r--r-- | platform/linuxbsd/detect.py | 3 | ||||
-rw-r--r-- | platform/linuxbsd/export/export_plugin.cpp | 5 | ||||
-rw-r--r-- | platform/linuxbsd/joypad_linux.cpp | 34 | ||||
-rw-r--r-- | platform/linuxbsd/os_linuxbsd.cpp | 34 | ||||
-rw-r--r-- | platform/linuxbsd/x11/display_server_x11.cpp | 8 |
5 files changed, 44 insertions, 40 deletions
diff --git a/platform/linuxbsd/detect.py b/platform/linuxbsd/detect.py index ce743fbf8a..a723bb5d58 100644 --- a/platform/linuxbsd/detect.py +++ b/platform/linuxbsd/detect.py @@ -291,6 +291,9 @@ def configure(env: "Environment"): # No pkgconfig file so far, hardcode expected lib name. env.Append(LIBS=["embree3"]) + if not env["builtin_openxr"]: + env.ParseConfig("pkg-config openxr --cflags --libs") + if env["fontconfig"]: if not env["use_sowrap"]: if os.system("pkg-config --exists fontconfig") == 0: # 0 means found diff --git a/platform/linuxbsd/export/export_plugin.cpp b/platform/linuxbsd/export/export_plugin.cpp index f74bdf3516..40151b1a02 100644 --- a/platform/linuxbsd/export/export_plugin.cpp +++ b/platform/linuxbsd/export/export_plugin.cpp @@ -521,11 +521,10 @@ EditorExportPlatformLinuxBSD::EditorExportPlatformLinuxBSD() { Ref<Image> img = memnew(Image); const bool upsample = !Math::is_equal_approx(Math::round(EDSCALE), EDSCALE); - ImageLoaderSVG img_loader; - img_loader.create_image_from_string(img, _linuxbsd_logo_svg, EDSCALE, upsample, false); + ImageLoaderSVG::create_image_from_string(img, _linuxbsd_logo_svg, EDSCALE, upsample, false); set_logo(ImageTexture::create_from_image(img)); - img_loader.create_image_from_string(img, _linuxbsd_run_icon_svg, EDSCALE, upsample, false); + ImageLoaderSVG::create_image_from_string(img, _linuxbsd_run_icon_svg, EDSCALE, upsample, false); run_icon = ImageTexture::create_from_image(img); #endif diff --git a/platform/linuxbsd/joypad_linux.cpp b/platform/linuxbsd/joypad_linux.cpp index ab79885fb4..342cff82e9 100644 --- a/platform/linuxbsd/joypad_linux.cpp +++ b/platform/linuxbsd/joypad_linux.cpp @@ -98,19 +98,20 @@ static bool detect_sandbox() { JoypadLinux::JoypadLinux(Input *in) { #ifdef UDEV_ENABLED -#ifdef SOWRAP_ENABLED -#ifdef DEBUG_ENABLED - int dylibloader_verbose = 1; -#else - int dylibloader_verbose = 0; -#endif if (detect_sandbox()) { // Linux binaries in sandboxes / containers need special handling because // libudev doesn't work there. So we need to fallback to manual parsing // of /dev/input in such case. use_udev = false; print_verbose("JoypadLinux: udev enabled, but detected incompatible sandboxed mode. Falling back to /dev/input to detect joypads."); - } else { + } +#ifdef SOWRAP_ENABLED + else { +#ifdef DEBUG_ENABLED + int dylibloader_verbose = 1; +#else + int dylibloader_verbose = 0; +#endif use_udev = initialize_libudev(dylibloader_verbose) == 0; if (use_udev) { if (!udev_new || !udev_unref || !udev_enumerate_new || !udev_enumerate_add_match_subsystem || !udev_enumerate_scan_devices || !udev_enumerate_get_list_entry || !udev_list_entry_get_next || !udev_list_entry_get_name || !udev_device_new_from_syspath || !udev_device_get_devnode || !udev_device_get_action || !udev_device_unref || !udev_enumerate_unref || !udev_monitor_new_from_netlink || !udev_monitor_filter_add_match_subsystem_devtype || !udev_monitor_enable_receiving || !udev_monitor_get_fd || !udev_monitor_receive_device || !udev_monitor_unref) { @@ -124,10 +125,11 @@ JoypadLinux::JoypadLinux(Input *in) { print_verbose("JoypadLinux: udev enabled, but couldn't be loaded. Falling back to /dev/input to detect joypads."); } } -#endif +#endif // SOWRAP_ENABLED #else print_verbose("JoypadLinux: udev disabled, parsing /dev/input to detect joypads."); -#endif +#endif // UDEV_ENABLED + input = in; monitor_joypads_thread.start(monitor_joypads_thread_func, this); joypad_events_thread.start(joypad_events_thread_func, this); @@ -391,6 +393,16 @@ void JoypadLinux::open_joypad(const char *p_path) { return; } + uint16_t vendor = BSWAP16(inpid.vendor); + uint16_t product = BSWAP16(inpid.product); + uint16_t version = BSWAP16(inpid.version); + + if (input->should_ignore_device(vendor, product)) { + // This can be true in cases where Steam is passing information into the game to ignore + // original gamepads when using virtual rebindings (See SteamInput). + return; + } + MutexLock lock(joypads_mutex[joy_num]); Joypad &joypad = joypads[joy_num]; joypad.reset(); @@ -399,10 +411,6 @@ void JoypadLinux::open_joypad(const char *p_path) { setup_joypad_properties(joypad); sprintf(uid, "%04x%04x", BSWAP16(inpid.bustype), 0); if (inpid.vendor && inpid.product && inpid.version) { - uint16_t vendor = BSWAP16(inpid.vendor); - uint16_t product = BSWAP16(inpid.product); - uint16_t version = BSWAP16(inpid.version); - sprintf(uid + String(uid).length(), "%04x%04x%04x%04x%04x%04x", vendor, 0, product, 0, version, 0); input->joy_connection_changed(joy_num, true, name, uid); } else { diff --git a/platform/linuxbsd/os_linuxbsd.cpp b/platform/linuxbsd/os_linuxbsd.cpp index 310778388b..14d02a73c8 100644 --- a/platform/linuxbsd/os_linuxbsd.cpp +++ b/platform/linuxbsd/os_linuxbsd.cpp @@ -954,45 +954,33 @@ static String get_mountpoint(const String &p_path) { } Error OS_LinuxBSD::move_to_trash(const String &p_path) { - String path = p_path.rstrip("/"); // Strip trailing slash when path points to a directory + // We try multiple methods, until we find one that works. + // So we only return on success until we exhausted possibilities. + String path = p_path.rstrip("/"); // Strip trailing slash when path points to a directory. int err_code; List<String> args; args.push_back(path); - args.push_front("trash"); // The command is `gio trash <file_name>` so we need to add it to args. + + args.push_front("trash"); // The command is `gio trash <file_name>` so we add it before the path. Error result = execute("gio", args, nullptr, &err_code); // For GNOME based machines. - 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 (result == OK && err_code == 0) { // Success. + return OK; } 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) { // 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 (result == OK && err_code == 0) { + return OK; } args.pop_front(); args.pop_back(); result = execute("gvfs-trash", args, nullptr, &err_code); // For older Linux machines. - 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 (result == OK && err_code == 0) { + return OK; } // If the commands `kioclient5`, `gio` or `gvfs-trash` don't work on the system we do it manually. diff --git a/platform/linuxbsd/x11/display_server_x11.cpp b/platform/linuxbsd/x11/display_server_x11.cpp index 8724bc871a..bdb160e6a6 100644 --- a/platform/linuxbsd/x11/display_server_x11.cpp +++ b/platform/linuxbsd/x11/display_server_x11.cpp @@ -4880,6 +4880,8 @@ void DisplayServerX11::set_icon(const Ref<Image> &p_icon) { Atom net_wm_icon = XInternAtom(x11_display, "_NET_WM_ICON", False); if (p_icon.is_valid()) { + ERR_FAIL_COND(p_icon->get_width() <= 0 || p_icon->get_height() <= 0); + Ref<Image> img = p_icon->duplicate(); img->convert(Image::FORMAT_RGBA8); @@ -5449,7 +5451,9 @@ DisplayServerX11::DisplayServerX11(const String &p_rendering_driver, WindowMode } #else #ifdef XKB_ENABLED - xkb_loaded = true; + bool xkb_loaded = true; + xkb_loaded_v05p = true; + xkb_loaded_v08p = true; #endif #endif @@ -5476,6 +5480,7 @@ DisplayServerX11::DisplayServerX11(const String &p_rendering_driver, WindowMode r_error = OK; +#ifdef SOWRAP_ENABLED { if (!XcursorImageCreate || !XcursorImageLoadCursor || !XcursorImageDestroy || !XcursorGetDefaultSize || !XcursorGetTheme || !XcursorLibraryLoadImage) { // There's no API to check version, check if functions are available instead. @@ -5484,6 +5489,7 @@ DisplayServerX11::DisplayServerX11(const String &p_rendering_driver, WindowMode return; } } +#endif for (int i = 0; i < CURSOR_MAX; i++) { cursors[i] = None; |