我有一个应用程序将焦点发送到其他窗口,但那些窗口不会自动显示在前台,即在所有其他窗口的顶部。我在哪里可以配置窗口管理器的首选项,以便这是默认行为?
特别是我在MATLAB IDE中使用Ctrl-0和Ctrl-Shft-0快捷方式在命令窗口和编辑器窗口之间移动,虽然焦点似乎被转移,但新窗口不会自动重绘本身就在前台。
由于
答案 0 :(得分:2)
不确定手上是否有一个键绑定,但是如果你在一个窗口上进行alt-单击(允许你拖动一个窗口),它应该会出现在前面。
正如codeDr建议的那样,MATLAB对于重新绘制窗口也有点不好。如果在代码执行时绘制到图形,则图形不会更新,除非您执行drawnow
或在执行中有一些类似的暂停以允许GUI重绘。由于我们讨论的是MATLAB,figure
命令也会使指示的数字出现在前面(事实上,它更难以让而不是来到前面)。因此,您可以figure(gcf)
将当前数字放在前面,或者使用h = figure;
保存图号,然后再figure(h)
。顺便提一下,如果您想切换当前数字而不切换焦点,set(0, 'CurrentFigure', h)
应将h
设置为当前数字。
答案 1 :(得分:1)
您的窗口管理器(可能是Metacity?)实现了防止焦点窃取,以便恶意应用程序不会弹出会干扰您输入的窗口。 Matlab需要提高窗口,并使用正确的时间戳给它输入焦点。如果这是从KeyPress事件处理程序完成的,则设置输入焦点的时间戳将是来自KeyPress事件的时间戳(即导致窗口被提升/聚焦的用户生成事件的时间戳)。
礼貌地将输入焦点提供给一个窗口,谷歌为_NET_ACTIVE_WINDOW。
答案 2 :(得分:0)
通常当窗口不重绘时,意味着应用程序的主应用程序循环没有运行来刷新窗口。当你在窗口之间切换时,Matlab会做一些计算或磁盘活动吗?