День добрый, господа. Возникла проблемка, при программировании под чистый 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, а состояние поверх всех окон - пропадает при любом изменении фокуса. В браузер ткнулся, и все - форма уже не видна. Может быть - у кого нибудь уже есть опыт реализации подобной задачи, и он подскажет, что я таки делаю не так, и главное - как надо?
Пользователь решил продолжить мысль 22 Февраля 2012, 21:19:03:
Решил сам.Упростил конструкцию, до:
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);
}
И начал вызывать До того, как окно стало видимым. Отсюда вывод - надо лучше читать документацию-(