X11 / GLX - Полноэкранный режим?

Я пытаюсь создать приложение 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 с одним и тем же файлом!)

14
задан DigitalMan 1 February 2012 в 08:00
поделиться