[英]How to restore a window with Xlib?
我設法使用XIconifyWindow
圖標化了一個窗口,但后來卻沒有設法恢復它。 我嘗試了以下方法:
XMapRaised (display, window);
和:
XMapWindow (display, window);
和:
XClientMessageEvent ev;
std::memset (&ev, 0, sizeof ev);
ev.type = ClientMessage;
ev.window = window;
ev.message_type = XInternAtom(display, "WM_CHANGE_STATE", False);
ev.format = 32;
ev.data.l[0] = NormalState;
XSendEvent (display, RootWindow(display, XDefaultScreen(display)), False,
SubstructureRedirectMask |SubstructureNotifyMask, (XEvent*)&ev);
XFlush (display);
沒有成功。 我在GNOME 3.14.0中使用Debian Jessie。
經過很多的努力,終於解決了!
在GNOME 3中,窗口沒有“圖標化/最小化”按鈕。 看來,無論是用戶還是代碼,都無法最小化窗口。 當我調用XIconifyWindow
,窗口沒有最小化。 如果已將其最小化,那么我將獲得一個“ UnmapNotify”事件,而我沒有。 確實發生的是,該窗口被隱藏了(“ _NET_WM_STATE_HIDDEN”已添加到該窗口的“ _NET_WM_STATE”屬性中),並且另一個窗口被激活。 因此,要使窗口“最小化”,我要做的就是激活它:
XClientMessageEvent ev;
std::memset (&ev, 0, sizeof ev);
ev.type = ClientMessage;
ev.window = window;
ev.message_type = XInternAtom(display, "_NET_ACTIVE_WINDOW", True);
ev.format = 32;
ev.data.l[0] = 1;
ev.data.l[1] = CurrentTime;
ev.data.l[2] = ev.data.l[3] = ev.data.l[4] = 0;
XSendEvent (display, RootWindow(display, XDefaultScreen(display)), False,
SubstructureRedirectMask |SubstructureNotifyMask, (XEvent*)&ev);
XFlush (display);
順便說一句,調用XRaiseWindow
無效,似乎必須激活它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.