X11:等待窗口可见?

6

我正在一个网络连接缓慢的环境中运行X。如何知道一个窗口何时变为可见?我需要等待,以便在可见窗口上执行另一个操作。

xterm -T foo &
# how to flush the display, or wait until the window is visible?
# polling the visibility would be acceptable as well
xmovewindow foo  10 20 

更新:由于Jim Lewis的贡献,这里有一个快速完成任务的shell函数。
function xwait() {
    while ! xwininfo -name $1|grep 'Map State: IsViewable';do sleep 1;done
}
xterm -T foo &
xwait foo
xmovewindow foo  10 20 

1
如果我没记错的话,Solaris有一个名为“toolwait”的命令,可以尝试做到这一点。然而,我记得它是在子进程创建窗口时检测到的,而不一定是在显示上。 - Jonathan Leffler
1个回答

6
您可能想知道远程X服务器何时映射了应用程序的主窗口。 xwininfo命令将允许您通过窗口名称查询X服务器 - 我认为它是标准X11安装的一部分。 但是,您必须自己进行轮询,重新运行命令,直到“Map State”属性返回“IsViewable”。
Jonathan Leffler还提到了Sun的toolwait实用程序(文档在此处here)。 toolwait启动一个进程(在本例中为xterm命令),并在应用程序映射顶层窗口时返回...它会为您进行轮询。 在www.ibiblio.org的X11 / xutils目录中有一个声称是toolwait的Linux克隆的软件包(here)。

toolwait的历史可以追溯到OpenWindows时期——那可是老派的X窗口编程啊!我手头有一份1994年的Solaris man页面,上面写着:“未来版本可能不再支持OpenWindows环境。您可能需要迁移到CDE,即Common Desktop Environment……”


正是我所需要的,谢谢!而 OpenWindows,那确实让我回忆起了过去... :-) - Mark Harrison

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接