我正在使用第一個應用程序使用c和xlib進行製作,到目前爲止它很棒,正在做我想做的!這是一個無邊界窗口,當應用程序啓動時會自動完全屏蔽。xlib將窗口推到其他窗口的背面
我的應用程序將有一些實用程序,如桌面上的時鐘和當前天氣。
所以要做到這一點,我需要能夠把我的窗口推到所有其他窗口的後面,並保持在那裏。
我的問題是,我如何將窗口推到所有其他打開的窗口後面(並且理想情況下在cairo-dock後面,但不是必需的),並將其保留在那裏?
我正在使用第一個應用程序使用c和xlib進行製作,到目前爲止它很棒,正在做我想做的!這是一個無邊界窗口,當應用程序啓動時會自動完全屏蔽。xlib將窗口推到其他窗口的背面
我的應用程序將有一些實用程序,如桌面上的時鐘和當前天氣。
所以要做到這一點,我需要能夠把我的窗口推到所有其他窗口的後面,並保持在那裏。
我的問題是,我如何將窗口推到所有其他打開的窗口後面(並且理想情況下在cairo-dock後面,但不是必需的),並將其保留在那裏?
創建一個類型爲_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任務欄也仍然可見。
的幾個注意事項:
當我殺死程序時,我的舊桌面返回,但這可能不適用於其他窗口管理器。試試看。
這看起來可能是我需要的!我會在今晚開始的時候嘗試一下:) –
這樣做!非常感謝! :) –
如果有*兩個*程序想要將它們各自的窗口推到所有其他窗口的背面*並將它們保留在那裏*?鬥爭!話雖如此,您可能需要嘗試在開始時調用XLowerWindow,並且每次獲得由StructureNotifyMask選擇的事件時。 –
謝謝,這給了我一個工作的起點。關於與對方打架的窗口,我想我會在出現問題時找出解決辦法 –