Получение имени WM через X11 без EWMH?
Я пишу программу, которая должна определить имя работающего Window Manager (например, Compiz) на хосте Linux с X11.
В настоящее время я полагаюсь на спецификацию Extended Window Manager Hints, которая позволяет мне делать запросы _NET_SUPPORTING_WM_CHECK
через XGetWindowProperty
чтобы получить идентификатор Window
который я могу затем запросить (через другой вызов XGetWindowProperty
) для _NET_WM_NAME
имущество:
if ((disp = XOpenDisplay(NULL)))
{
if (!(XGetWindowProperty(disp, DefaultRootWindow(disp), XInternAtom(disp, "_NET_SUPPORTING_WM_CHECK", True),
0, 1024, False, XA_WINDOW, &actual_type, &actual_format, &nitems, &bytes, (unsigned char **) &wm_check_window)))
{
if (!(XGetWindowProperty(disp, *wm_check_window, XInternAtom(disp, "_NET_WM_NAME", True),
0, 1024, False, XInternAtom(disp, "UTF8_STRING", True), &actual_type,
&actual_format, &nitems, &bytes, (unsigned char **) &wm_name)))
{
strncpy(str, (char *) wm_name, MAX_STRLEN);
XFree(wm_name);
}
}
}
Это работает на удивление хорошо для EWMH-совместимых оконных менеджеров, но совсем не работает для несовместимых. Я пытался схватить WM_NAME
свойство на тех, но только содержит заголовок (или что-то связанное с заголовком) активного окна.
Есть ли способ получить настоящее имя Window Manager через X11 без EWMH?