2015-11-07 7 views
0

Я работаю над созданием первого приложения с использованием c и xlib, пока все идет отлично и делает то, что я хочу! Это окно без полей, которое автоматически открывается в полноэкранном режиме при запуске приложения.xlib push окно в обратную сторону других окон

Мое приложение будет иметь некоторые утилиты, такие как часы и текущая погода, которые сидят на рабочем столе.

Чтобы сделать это, мне нужно убрать свое окно на заднюю часть всех остальных окон и сохранить его там.

Вопрос в том, как я могу задвинуть окно позади всех остальных открытых окон (и идеально позади кайро-док-станции, но не обязательно) и сохранить его там?

+0

Что делать, если есть * две программы, которые хотят нажимать соответствующие окна на все остальные окна * и держать их там *? Борьба! Сказав это, вы можете попробовать вызвать XLowerWindow в начале и каждый раз, когда вы получаете событие, выбранное StructureNotifyMask. –

+0

Спасибо, что дает мне отправную точку для работы. Что касается окон, сражающихся друг с другом, я думаю, что я пойму, что с этим делать, когда я прихожу к проблеме. –

ответ

1

Создайте окно типа _NET_WM_WINDOW_TYPE_DESKTOP.

Как? Ну, это требует немного кодирования, но на следующий же трюк в моей системе:

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

int main(int argc, char *argv[]) 
{ 
    Display *display = XOpenDisplay(""); 
    Window win = XCreateSimpleWindow(display, XDefaultRootWindow(display), 0, 0, 1920, 1080, 0, 0, WhitePixel(display, DefaultScreen(display))); 

    Atom window_type = XInternAtom(display, "_NET_WM_WINDOW_TYPE", False); 
    Atom desktop = XInternAtom(display, "_NET_WM_WINDOW_TYPE_DESKTOP", False); 
    XChangeProperty (display, win, window_type, XA_ATOM, 32, PropModeReplace, (unsigned char *) &desktop, 1); 

    XClearWindow(display, win); 
    XMapWindow(display, win); 

    while (1) 
    { 
    XEvent event; 

    XNextEvent(display, &event); 
    } 

    XUnmapWindow(display, win); 
    XCloseDisplay(display); 
} 

Это показало белое окно, которое перекрывается мой существующий рабочий стол, но был помещен ниже окна программы; моя панель задач KDE также была видна.

Несколько замечаний:

  • Вы должны установить свойство перед выполнением XMapWindow
  • имеют размер окна должен совпадать с размером экрана (я жёстко мои ценности), или вы получите ошибку BadRequest.

Когда я убил программу, мой старый рабочий стол вернулся, но это может не работать с другими оконными менеджерами. Попробуйте.

+0

Похоже, что это, вероятно, то, что мне нужно! Я попробую, когда я смогу сегодня побывать :) –

+0

Вот и все! Большое спасибо! :) –

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

  • Нет связанных вопросов^_^