From 26d17250b6b0767d14ecf1f2427f74a6d5d37de2 Mon Sep 17 00:00:00 2001 From: Linus Dierheimer Date: Sat, 18 Jun 2022 14:55:56 +0200 Subject: [PATCH] Detect WSLg --- src/detection/displayserver/wmde.c | 6 ++++++ src/detection/displayserver/xcb.c | 2 +- src/detection/displayserver/xlib.c | 2 +- src/modules/cursor.c | 6 ++++++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/detection/displayserver/wmde.c b/src/detection/displayserver/wmde.c index 1cb4271b2..6c4069a14 100644 --- a/src/detection/displayserver/wmde.c +++ b/src/detection/displayserver/wmde.c @@ -5,6 +5,7 @@ #include #include #include +#include static const char* parseEnv() { @@ -42,6 +43,11 @@ static const char* parseEnv() if(getenv("TDE_FULL_SESSION") != NULL) return "Trinity"; + if( + getenv("WAYLAND_DISPLAY") != NULL && + ffFileExists("/mnt/wslg/", S_IFDIR) + ) return "WSLg"; + return NULL; } diff --git a/src/detection/displayserver/xcb.c b/src/detection/displayserver/xcb.c index 43f136bdd..0953aff9c 100644 --- a/src/detection/displayserver/xcb.c +++ b/src/detection/displayserver/xcb.c @@ -62,7 +62,7 @@ static void* xcbGetProperty(XcbPropertyData* data, xcb_connection_t* connection, static void xcbDetectWMfromEWMH(XcbPropertyData* data, xcb_connection_t* connection, xcb_window_t rootWindow, FFDisplayServerResult* result) { - if(result->wmProcessName.length > 0) + if(result->wmProcessName.length > 0 || ffStrbufCompS(&result->wmProtocolName, FF_DISPLAYSERVER_PROTOCOL_WAYLAND) == 0) return; xcb_window_t* wmWindow = (xcb_window_t*) xcbGetProperty(data, connection, rootWindow, "_NET_SUPPORTING_WM_CHECK"); diff --git a/src/detection/displayserver/xlib.c b/src/detection/displayserver/xlib.c index a20f16d58..178646661 100644 --- a/src/detection/displayserver/xlib.c +++ b/src/detection/displayserver/xlib.c @@ -35,7 +35,7 @@ static unsigned char* x11GetProperty(X11PropertyData* data, Display* display, Wi static void x11DetectWMFromEWMH(X11PropertyData* data, Display* display, FFDisplayServerResult* result) { - if(result->wmProcessName.length > 0) + if(result->wmProcessName.length > 0 || ffStrbufCompS(&result->wmProtocolName, FF_DISPLAYSERVER_PROTOCOL_WAYLAND) == 0) return; Window* wmWindow = (Window*) x11GetProperty(data, display, DefaultRootWindow(display), "_NET_SUPPORTING_WM_CHECK"); diff --git a/src/modules/cursor.c b/src/modules/cursor.c index e88a78b5b..9b978a620 100644 --- a/src/modules/cursor.c +++ b/src/modules/cursor.c @@ -193,6 +193,12 @@ void ffPrintCursor(FFinstance* instance) const FFDisplayServerResult* wmde = ffConnectDisplayServer(instance); + if(ffStrbufCompS(&wmde->wmPrettyName, "WSLg") == 0) + { + ffPrintError(instance, FF_CURSOR_MODULE_NAME, 0, &instance->config.cursor, "WSLg uses native windows cursor"); + return; + } + if(ffStrbufIgnCaseCompS(&wmde->wmProtocolName, "TTY") == 0) { ffPrintError(instance, FF_CURSOR_MODULE_NAME, 0, &instance->config.cursor, "Cursor isn't supported in TTY");