XLIB Как сделать окно полноэкранным? - PullRequest
1 голос
/ 12 марта 2019

Я использую Xlib для написания своей собственной библиотеки платформ (я знаю, гений играет), но я не могу получить полноэкранный режим для работы с DE на основе GNOME.Он работает на I3 и Xfce, но не на GNOME или Unity.Вот что у меня есть.

XSizeHints* size_hints;
long hints = 0;

size_hints = XAllocSizeHints();

if (XGetWMSizeHints(_platform.display, _window.window, size_hints, &hints,
    XInternAtom(_platform.display, "WM_SIZE_HINTS", False)) == 0) {
    puts("Failed.");
} 

XLowerWindow(_platform.display, _window.window);
XUnmapWindow(_platform.display, _window.window);
XSync(_platform.display, False);

printf("%ld\n", hints);

XFree(size_hints);

Atom atoms[2] = { XInternAtom(_platform.display, "_NET_WM_STATE_FULLSCREEN", False), None };

XChangeProperty(
    _platform.display,
    _window.window,
    XInternAtom(_platform.display, "_NET_WM_STATE", False),
    XA_ATOM, 32, PropModeReplace, (unsigned char*)atoms, 1);

XMapWindow(_platform.display, _window.window);
XRaiseWindow(_platform.display, _window.window);

За исключением всего кода XGetWMSizeHints, этот код отлично работает на других WM и DE.Согласно другим вопросам переполнения стека, способ получить полноэкранный режим работы в GNOME состоит в том, чтобы либо изменить некоторые WM-NORMAL_HINT значения, либо полностью их удалить ( Как открыть неукрашенное полноэкранное окно в Ubuntu и Полноэкранное окно без Gnome Panel ).

Чтобы сделать что-либо, я должен использовать XGetWMSizeHints, но функция не работает.Нужно ли сначала создать свойство для окна, а затем использовать эту функцию?Какие значения я должен установить в XSizeHints?

...