desktop: add x11 support (thanks krizej)
This commit is contained in:
parent
1640be4666
commit
6b8e1087bd
1 changed files with 24 additions and 1 deletions
|
@ -7,6 +7,9 @@
|
||||||
#include "../mod.h"
|
#include "../mod.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#ifdef MF_DESKTOP_X11
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
static const semver api_ver = {
|
static const semver api_ver = {
|
||||||
.major = 0,
|
.major = 0,
|
||||||
|
@ -36,7 +39,27 @@ uint8_t init(char **config) {
|
||||||
const char *get(void) {
|
const char *get(void) {
|
||||||
char *ret;
|
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)");
|
fprintf(stderr, "error: failed formatting (this shouldn't happen)");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue