Получение имени 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?

0 ответов

Другие вопросы по тегам