1

День добрый, господа. Возникла проблемка, при программировании под чистый xlib. Значится по мере выполнения задачи возникла потребность - спрятать приложение из pager и так называемой панели задач, а так же постоянно держать форму поверх остальных окон. Долгое гугление и вдумчивое курение документации - навели меня на написание следующих строк:

//убираемся из панели задач и pager
    Atom a = XInternAtom(display, "_NET_WM_STATE", True);
    if (a != None) {
    Atom prop = XInternAtom(display, "_NET_WM_STATE_SKIP_TASKBAR", True);
    XChangeProperty(display, window, a, XA_ATOM, 32, PropModeAppend, (unsigned char *) &prop, 1);
    }
    a = XInternAtom(display, "_NET_WM_STATE", True);
    if (a != None) {
    Atom prop = XInternAtom(display, "_NET_WM_STATE_SKIP_PAGER", True);
    XChangeProperty(display, window, a, XA_ATOM, 32, PropModeAppend, (unsigned char *) &prop, 1);
    }
    //типа stay on top.
    a = XInternAtom(display, "_NET_WM_STATE", True);
    if (a != None) {
    Atom prop = XInternAtom(display, "_NET_WM_STATE_ABOVE", True);
    XChangeProperty(display, window, a, XA_ATOM, 32, PropModeAppend, (unsigned char *) &prop, 1);
    }

Все бы хорошо, однако - по непонятной причине - второй блок if - отрабатывает вообще рандомно, а третий - такое ощущение, что не отрабатывает вовсе. Тоесть - форма по только ей понятной причине: пропадает из панели задач, абсолютно случайно при н-м запуске пропадает из pager, а состояние поверх всех окон - пропадает при любом изменении фокуса. В браузер ткнулся, и все - форма уже не видна. Может быть - у кого нибудь уже есть опыт реализации подобной задачи, и он подскажет, что я таки делаю не так, и главное - как надо?

2

Решил сам, упростив конструкцию до:

 if (a != None) {
    Atom prop = XInternAtom(display, "_NET_WM_STATE_SKIP_TASKBAR", True);
    XChangeProperty(display, window, a, XA_ATOM, 32, PropModeAppend, (unsigned char *) &prop, 1);
    Atom prop1 = XInternAtom(display, "_NET_WM_STATE_SKIP_PAGER", True);
    XChangeProperty(display, window, a, XA_ATOM, 32, PropModeAppend, (unsigned char *) &prop1, 1);
    Atom prop2 = XInternAtom(display, "_NET_WM_STATE_ABOVE", True);
    XChangeProperty(display, window, a, XA_ATOM, 32, PropModeAppend, (unsigned char *) &prop2, 1);
    }

И начав вызывать до показа окна.