From: Andrew J. Hesford Date: Wed, 11 Dec 2024 19:57:07 +0000 (-0500) Subject: config: only default to xwayland persistence on old wlroots versions X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=df6081b52c6e77161c5ed58c3adf57d0843f1c57;p=proto%2Flabwc.git config: only default to xwayland persistence on old wlroots versions This is a compile-time check, so it will be too conservative if somebody updates wlroots after building labwc, but that is still better than the alternatives. --- diff --git a/docs/labwc-config.5.scd b/docs/labwc-config.5.scd index d9f939fa..1f48f62a 100644 --- a/docs/labwc-config.5.scd +++ b/docs/labwc-config.5.scd @@ -219,13 +219,12 @@ this is for compatibility with Openbox. ** [yes|no] Keep XWayland alive even when no clients are connected, rather than using a "lazy" policy that allows the server to launch on demand and die - when it is no longer needed. Default is yes. + when it is no longer needed. - This is only temporarily defaulting to yes to avoid a bug that is - present in wlroots <0.18.2 resulting in a compositor crash when - performing a drag-and-drop action at the same time as the XWayland - server is shutting down. This will be reverted to a default "no" when - wlroots-0.18.2 can be linked with. + When labwc is compiled with wlroots 0.18.2 or later, the default is no. + When labwc is compiled with wlroots < 0.18.2, the default is yes to + avoid a wlroots bug that can result in compositor crashes when + performing drag-and-drop actions when the XWayland server is shut down. Note: changing this setting requires a restart of labwc. diff --git a/src/config/rcxml.c b/src/config/rcxml.c index a8cb9d3b..bdd84291 100644 --- a/src/config/rcxml.c +++ b/src/config/rcxml.c @@ -14,6 +14,7 @@ #include #include #include +#include #include "action.h" #include "common/dir.h" #include "common/list.h" @@ -36,6 +37,9 @@ #include "window-rules.h" #include "workspaces.h" +#define LAB_WLR_VERSION_OLDER_THAN(major, minor, micro) \ + (WLR_VERSION_NUM < (((major) << 16) | ((minor) << 8) | (micro))) + static bool in_regions; static bool in_usable_area_override; static bool in_keybind; @@ -1089,16 +1093,14 @@ entry(xmlNode *node, char *nodename, char *content) } else if (!strcasecmp(nodename, "xwaylandPersistence.core")) { set_bool(content, &rc.xwayland_persistence); - /* - * TODO: Temporary warning message. Revert when wlroots-0.18.2 - * can be linked with. - */ +#if LAB_WLR_VERSION_OLDER_THAN(0, 18, 2) if (!rc.xwayland_persistence) { - wlr_log(WLR_ERROR, "setting xwaylandPersistence to 'no' " - "is not encouraged unless wlroots-0.18.2 is used " - "since it has a potential risk of crashing the " - "entire session. See #2371 for details."); + wlr_log(WLR_ERROR, "to avoid the risk of a fatal crash, " + "setting xwaylandPersistence to 'no' is only " + "recommended when labwc is compiled against " + "wlroots >= 0.18.2. See #2371 for details."); } +#endif } else if (!strcasecmp(nodename, "x.cascadeOffset.placement")) { rc.placement_cascade_offset_x = atoi(content); } else if (!strcasecmp(nodename, "y.cascadeOffset.placement")) { @@ -1463,7 +1465,16 @@ rcxml_init(void) rc.adaptive_sync = LAB_ADAPTIVE_SYNC_DISABLED; rc.allow_tearing = false; rc.reuse_output_mode = false; + +#if LAB_WLR_VERSION_OLDER_THAN(0, 18, 2) + /* + * For wlroots < 0.18.2, keep xwayland alive by default to work around + * a fatal crash when the X server is terminated during drag-and-drop. + */ rc.xwayland_persistence = true; +#else + rc.xwayland_persistence = false; +#endif init_font_defaults(&rc.font_activewindow); init_font_defaults(&rc.font_inactivewindow);