diff --git a/src/backend/wayland.c b/src/backend/wayland.c index 804f77b..aef66c9 100644 --- a/src/backend/wayland.c +++ b/src/backend/wayland.c @@ -2570,8 +2570,24 @@ static void MwLLEndStateChangeImpl(MwLL handle) { } static int MwLLWaylandCallInitImpl(void) { + /* + * Order of precedence: + * - MILSKO_BACKEND + * - XDG_SESSION_TYPE + * - manually checking environment variables + */ #ifdef __linux__ - if(strcmp(getenv("XDG_SESSION_TYPE"), "wayland") == 0) { + MwBool loadWayland; + if(getenv("MILSKO_BACKEND")) { + loadWayland |= + (strcmp(getenv("MILSKO_BACKEND"), "wayland") == 0); + } else if(getenv("XDG_SESSION_TYPE")) { + loadWayland |= (strcmp(getenv("XDG_SESSION_TYPE"), "wayland") == 0); + } else if(getenv("WAYLAND_DISPLAY")) { + loadWayland |= (getenv("WAYLAND_DISPLAY") != NULL); + } + + if(loadWayland) { if(wayland_load_funcs()) { return 1; } diff --git a/src/backend/x11.c b/src/backend/x11.c index 6593938..c8442b1 100644 --- a/src/backend/x11.c +++ b/src/backend/x11.c @@ -1276,6 +1276,20 @@ static void MwLLEndStateChangeImpl(MwLL handle) { } static int MwLLX11CallInitImpl(void) { + MwBool loadX11; + if(getenv("MILSKO_BACKEND")) { + loadX11 |= + (strcmp(getenv("MILSKO_BACKEND"), "x11") == 0); + } else if(getenv("XDG_SESSION_TYPE")) { + loadX11 |= (strcmp(getenv("XDG_SESSION_TYPE"), "x11") == 0); + } else if(getenv("DISPLAY")) { + loadX11 |= (getenv("DISPLAY") != NULL); + } + + if(!loadX11) { + return 1; + } + xsymtbl.lib_xlib = MwDynamicOpen("libX11.so"); if(!xsymtbl.lib_xlib) { return 1;