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