XUnmapWindow()
完全從顯示屏上移除窗口。最小化窗口通過 EMWH ICCCM狀態發生,以便窗口管理器知道窗口仍以某種形式存在。 而且就像你已經認爲你負責重置屏幕分辨率。這是BTW在Windows中非常相似。
編輯:
儘量減少在Xlib的一個窗口與XIconifyWindow
完成,這會照顧確立正確的ICCCM屬性,將取消該窗口。這兩者都必須完成與WM的正確交互。然而,X11只定義了方法,而不是策略,所以當取消映射全屏窗口時,您還負責重置屏幕分辨率,就像我上面已經寫過的那樣。
在旁註:我建議您根本不要更改分辨率,但是如果可用,則渲染到目標大小的Framebuffer對象,並將最終結果映射到完整的本機屏幕尺寸。如果您將其與原生分辨率文本/ HUD疊加層結合使用(我假設這是用於遊戲或類似的),您可以獲得更高的質量並節省分辨率切換。你甚至可以把這個與桌面截圖結合起來並逐漸淡入你的內容。
EDIT 2供參考 : XIconifyWindow
只是一個輔助/便利功能,它的源代碼是
/*
* This function instructs the window manager to change this window from
* NormalState to IconicState.
*/
Status XIconifyWindow(Display *dpy, Window w, int screen)
{
XClientMessageEvent ev;
Atom prop;
prop = XInternAtom(dpy, "WM_CHANGE_STATE", False);
if(prop == None)
return False;
ev.type = ClientMessage;
ev.window = w;
ev.message_type = prop;
ev.format = 32;
ev.data.l[0] = IconicState;
return XSendEvent(dpy, RootWindow(dpy, screen), False,
SubstructureRedirectMask|SubstructureNotifyMask,
(XEvent *)&ev);
}
這個信息有點舊,但是當X Window處於全屏模式時,好像XIconifyWindow不起作用。這裏是鏈接:http://www.rdesktop.org/archive/2001/msg00981.html。它提到了一些解決方法,我可能會在某些時候嘗試。 – Jarrett 2011-06-17 22:35:41
感謝@VJo和@datenwolf的幫助! – Jarrett 2011-06-17 22:37:19
你在用什麼? gnome還是kde? – 2011-06-18 07:42:44