modfetch/modules/desktop.c

64 lines
1.4 KiB
C
Raw Normal View History

2024-02-10 00:04:36 +01:00
/* DESKTOP - desktop environment / window manager / compositor module for modfetch
*
* author: jacekpoz
* 09 Feb 2024
*/
#include <mod.h>
2024-02-09 12:05:06 +01:00
#include <stdio.h>
#include <stdlib.h>
#ifdef MF_DESKTOP_X11
#include <X11/Xlib.h>
#endif
2024-02-09 12:05:06 +01:00
2024-02-10 14:11:26 +01:00
static const semver _version = {
.major = 0,
.minor = 1,
.patch = 0,
};
semver version(void) { return _version; }
2024-02-10 14:51:50 +01:00
const char *name(void) { return "desktop"; }
2024-02-09 12:05:06 +01:00
2024-02-11 19:37:41 +01:00
uint8_t init(semver api_ver, char **config) {
2024-02-11 17:50:10 +01:00
if (!sveq(api_ver, API_VERSION)) {
return MFERR_APIVER;
}
2024-02-09 12:05:06 +01:00
(void)config;
2024-02-11 17:50:10 +01:00
return 0;
2024-02-09 12:05:06 +01:00
}
const char *get(void) {
char *ret;
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) {
2024-02-09 12:05:06 +01:00
fprintf(stderr, "error: failed formatting (this shouldn't happen)");
exit(EXIT_FAILURE);
}
return ret;
}