2015-07-11 4 views
2

Добрый день всем! Я работал над проектом, который требует базового окна без заголовка. После просмотра немного в Интернете я наткнулся на это сообщение create window without titlebar с ответом, в котором упоминается использование атома «_NET_WM_WINDOW_TYPE_DOCK». Я попытался создать в моем проекте, используя следующий код:простое окно без заголовка

Display* d = fl_display; 
XWindow w = XCreateSimpleWindow(d, RootWindow(d, fl_screen), 
    0, 0, 
    400, 100, 
    0, 
    0x000000, 0x000000); 

Atom window_type = XInternAtom(d, "_NET_WM_WINDOW_TYPE", False); 
long value = XInternAtom(d, "_NET_WM_WINDOW_TYPE_DOCK", False); 
XChangeProperty(d, w, window_type, XA_ATOM, 32, PropModeReplace, (uchar*) &value, 1); 

окно делает шоу, но она все еще имеет заголовок окна. Я нашел несколько других ресурсов в Интернете, но я не могу заставить это перестать показывать заголовок. Я понимаю, что ссылочный пост использует XCreateWindow, но не должен работать атомы на XCreateSimpleWindow. Любая помощь будет оценена!

Благодаря

+0

Существует также старый [ '_MOTIF_WM_HINTS'] (http://stackoverflow.com/questions/5134297/xlib-how-does-this-removing-window-decoration-work). Какой менеджер окон вы используете? – Leiaz

+0

Проект на самом деле WM :) Я пытаюсь создать окно alt-tab, чтобы показать запущенные окна. Я думаю, что DOCK больше подходит для этой задачи? – user1646428

+0

Итак ... вы рисуете эту строку заголовка в своем окне? Измените свой WM так, чтобы он выполнял подсказку '_NET_WM_WINDOW_TYPE' и не рисовал этот заголовок? :) – Leiaz

ответ

3

я продлил ваш пример немного, чтобы быть в состоянии проверить это, и это работает для меня - видеть, есть ли какие-либо значимые различия в коде.

#include <X11/Xlib.h> 
#include <X11/Xatom.h> 
#include <X11/Xutil.h> 

int main(int argc, char **argv) { 
    Display* d = XOpenDisplay(NULL); 
    int s = DefaultScreen(d); 
    Window w = XCreateSimpleWindow(d, RootWindow(d, s), 100, 100, 400, 100, 1, 
           BlackPixel(d, s), WhitePixel(d, s)); 
    Atom window_type = XInternAtom(d, "_NET_WM_WINDOW_TYPE", False); 
    long value = XInternAtom(d, "_NET_WM_WINDOW_TYPE_DOCK", False); 
    XEvent e; 
    XChangeProperty(d, w, window_type, XA_ATOM, 32, PropModeReplace, (unsigned char *) &value, 1); 
    XMapWindow(d, w); 
    while (1) { 
    XNextEvent(d, &e); 
    if (e.type == Expose) { 
     XFillRectangle(d, w, DefaultGC(d, s), 20, 20, 10, 10); 
    } 
    if (e.type == KeyPress) 
     break; 
    } 
    XCloseDisplay(d); 
    return 0; 
} 
+0

Спасибо за помощь vukung! В моей демонстрации есть еще два традиционных тестовых окна (заголовки, кнопки и т. Д.), И, если я реализую ваш код, все повязки исчезают из других окон и, похоже, блокируют вещи. Показывает дополнительное окно. Я использую разные значения для переменных 'd' и 's'. Мысли? – user1646428

Смежные вопросы