diff --git a/modules/desktop.c b/modules/desktop.c index 88be1b4..1165305 100644 --- a/modules/desktop.c +++ b/modules/desktop.c @@ -8,6 +8,9 @@ #include #include +#ifdef MF_DESKTOP_X11 +#include +#endif static const semver _version = { .major = 0, @@ -31,7 +34,27 @@ uint8_t init(semver api_ver, char **config) { const char *get(void) { char *ret; - if (asprintf(&ret, "Desktop: %s", getenv("XDG_CURRENT_DESKTOP")) < 0) { + char *current_desktop = getenv("XDG_CURRENT_DESKTOP"); + + if (current_desktop == NULL) { +#ifdef MF_DESKTOP_X11 + Display *disp = XOpenDisplay(NULL); + Window root = XDefaultRootWindow(disp); + Atom atom = XInternAtom(disp, "_NET_WM_NAME", 0); + Atom type; + int fmt; + unsigned long num_items; + unsigned long bytes_after; + unsigned char *prop; + XGetWindowProperty(disp, root, atom, 0, 4096 / sizeof(int32_t), 0, AnyPropertyType, + &type, &fmt, &num_items, &bytes_after, &prop); + current_desktop = prop; +#else + current_desktop = "Unknown"; +#endif + } + + if (asprintf(&ret, "Desktop: %s", current_desktop) < 0) { fprintf(stderr, "error: failed formatting (this shouldn't happen)"); exit(EXIT_FAILURE); }