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.
This commit is contained in:
Andrew J. Hesford 2024-12-11 14:57:07 -05:00 committed by Consolatis
parent ea58ab0259
commit df6081b52c
2 changed files with 24 additions and 14 deletions

View file

@ -14,6 +14,7 @@
#include <wayland-server-core.h>
#include <wlr/util/box.h>
#include <wlr/util/log.h>
#include <wlr/version.h>
#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);