SWT外壳在xfwm4中没有上升到上面



我对xfwm4有问题。使用以下代码:

Shell s = windowVector.get(0).getShell();
s.setActive();

被其他外壳覆盖的外壳窗口不会升高到上面。使用kwin(KDE窗口管理器)可以正常工作。Shell是使用以下构造函数创建的:

shell = new Shell(mainShell, SWT.NO_TRIM | SWT.MODELESS);

在这两种情况下,SWT方法:

OS.gdk_window_focus (window, OS.GDK_CURRENT_TIME);

被调用,但在xfwm4 shell中获得焦点,并且没有高于所有其他shell窗口(在我的应用程序中)。这是xfwm4中的错误吗?也许是配置问题,或者我遗漏了什么。

编辑:

我可能不太准确。我尝试设置Active的Shell位于其他子Shell之下。以下代码解释并简化了我试图实现的目标:

Shell mainShell = new Shell(Display.getDefault(), SWT.NO_TRIM);
mainShell.setBounds(0, 0, 300, 200);
mainShell.open();
final Shell shell1 = new Shell(mainShell, SWT.NO_TRIM | SWT.MODELESS);
shell1.setBounds(0, 0, 300, 200);
shell1.open();
Shell shell2 = new Shell(mainShell, SWT.NO_TRIM | SWT.MODELESS);
shell2.setBounds(0, 0, 300, 200);
shell2.open();
Thread thread = new Thread() {
    @Override
    public void run() {
        try {
                Thread.sleep(2000);
                System.out.println("Raise shell1 above");
                shell1.setActive();
        }
        catch(InterruptedException e) {
            e.printStackTrace();
        }
    }
};
thread.start();
while( !mainShell.isDisposed()) {
    if( !Display.getDefault().readAndDispatch()) {
        Display.getDefault().sleep();
    }
}
Display.getDefault().dispose();

这段代码在kwin中正常工作,在xfwm4中shell1保持在shell2的"下面"并保持隐藏。

我不能具体谈论xfwm4,但是的,许多窗口管理器都有某种形式的输入窃取预防。

你不希望任何随机应用程序被允许窃取你的注意力或迫使你的注意力从你正在做的事情上转移。

然而,窗口管理器之间实现这种行为的方式各不相同。大多数应用程序(理想情况下)都应该允许当前关注的应用程序将焦点放在该应用程序新创建的窗口上,但我想并不是所有应用程序都这样做。

最新更新