Я пытаюсь создать приложение Linux - в данном случае хранитель экрана - и оказывается, замечательно трудно найти информацию о простой задаче сделать окно полным. -экран. Даже в коде существующих скринсейверов не упоминается, как они им управляют, и я еще не видел никаких очевидных функций вроде XRemoveDecoration ()
.
После долгих поисков мне удалось создать окно того же размера, что и рабочий стол, с помощью этого:
Window win = DefaultRootWindow(disp);
XWindowAttributes getWinAttr;
XGetWindowAttributes(disp, win, &getWinAttr);
win = XCreateWindow(disp, win, 0, 0, getWinAttr.width, getWinAttr.height, 0, vInfo->depth, InputOutput, vInfo->visual, CWBorderPixel|CWColormap|CWEventMask|CWOverrideRedirect, &winAttr );
Но это ничего не помогает избавиться от заголовка и границ. Я знаю, что есть способ, очевидно, но мне еще предстоит найти что-либо, даже указывающее в этом направлении, которое не полагалось бы на какую-то другую массивную библиотеку, которая была добавлена поверх (которые существующие хранители экрана определенно не используют).
РЕДАКТИРОВАТЬ: Пожалуйста, не удаляйте информацию из моих сообщений.Есть очень веская причина, по которой я явно указал, что существующие заставки не используют необязательные библиотеки, и это потому, что я анализировал исходный код большую часть прошедшего дня.
Я выбрал ответ, который наиболее прямо отвечает на вопрос и применим к приложениям в целом.
Если вы нашли этот вопрос, исследуя xscreensavers ... то же самое по-прежнему. Да, у xscreensaver есть собственный API, который сложен и требует написания большего количества строк кода (да, серьезно). Если вы хотите, чтобы OpenGL использовался в вашей заставке, вам нужно пройти через другой API (xlockmore, конкурирующая система) и уровень совместимости, который преобразует его в xscreensaver.
Однако xscreensaver может запускать любую программу, которая может использовать виртуальные корневые окна (загляните в vroot.h) в качестве заставки. Так что мой совет - просто сделайте это - у вас будет больше контроля, без ограничений API и лучшая переносимость. (Один из примеров, на который я смотрел, можно даже скомпилировать для Linux или Windows с одним и тем же файлом!)