2009-06-04 90 views
1

我有一个应用程序将焦点发送到其他窗口,但这些窗口不会自动显示在前台,即在所有其他窗口之上。我在哪里可以配置我的窗口管理器的偏好,以便这是默认行为?当窗口已经有焦点时,如何让窗口移动到Gnome中其他窗口的顶部?

特别是我在MATLAB IDE中使用Ctrl-0和Ctrl-Shft-0快捷键在命令窗口和编辑器窗口之间移动,虽然焦点似乎被传送,但新窗口不会自动重新绘制自己的前景。

感谢

回答

2

不确定是否有键盘绑定功能,但如果您按住一个窗口(允许拖动一个窗口),它应该出现在前面。按照codeDr的建议,MATLAB对于重新绘制窗户也有点不好。如果您在执行代码时绘制一个图形,则该图形不会更新,除非您执行drawnow或在执行中有一些类似的暂停以允许重新绘制GUI。由于我们正在讨论MATLAB,因此figure命令也会使指示的数字出现在前面(实际上,很难将它变为而不是来到前面)。因此,您可以执行figure(gcf)以将当前数字放在前面,或将该数字保存为h = figure;,然后再执行figure(h)。顺便说一句,如果你想切换当前数字而不切换焦点,set(0, 'CurrentFigure', h)应该设置h到当前数字。

0

通常当窗口不重新绘制,这意味着应用程序的主应用程序循环不运行刷新窗口。当你在窗口之间切换时,它是否会做一些计算或磁盘活动?

1

你的窗口管理器(可能是Metacity?)实现了防范焦点窃取,这样流氓应用就不会弹出窗口来打扰你的打字。 Matlab需要提高其窗口,并使用正确的时间戳为其提供输入焦点。如果这是通过KeyPress事件处理程序完成的,则用于设置输入焦点的时间戳将是来自KeyPress事件(即导致窗口被提升/聚焦的用户生成事件的时间戳)的时间戳。

为了礼貌地将输入焦点放在窗口中,google为_NET_ACTIVE_WINDOW。