Java 在xfwm4中,SWT外壳未升高到上方

Java 在xfwm4中,SWT外壳未升高到上方,java,gtk,swt,Java,Gtk,Swt,我对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_CU

我对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 get focus中,并没有在所有其他shell窗口(在我的应用程序中)之上提升。这是xfwm4中的错误吗?可能是配置问题,或者我遗漏了什么

编辑:

我可能不太准确。我尝试设置为活动的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
,但是的,许多窗口管理器都有某种形式的输入窃取预防

您不希望任何随机应用程序被允许窃取您的注意力或迫使您的注意力远离您正在做的事情


但是,窗口管理器之间实现此行为的方式有所不同。大多数应用程序(理想情况下)应该允许当前关注的应用程序关注该应用程序新创建的窗口,但我认为并非所有应用程序都会这样做。

我在一个应用程序中有多个shell。我的外壳正确获得焦点,但z顺序没有改变。根据SWT docs:setActive(),如果接收器可见,则将其移动到创建它的显示器的绘图顺序的顶部(以便该显示器上的所有其他壳(不是接收器的子壳)将在其后面绘制)并要求窗口管理器制作外壳active@Kuba问题是它实际上是如何进行这种提升的。如果它明确尝试提升窗口,或者信任wm在焦点改变或“呈现”请求时这样做。我不知道wm是否可以阻止明确的加薪(但我已经有一段时间没有使用X东西了,所以我有点生疏),但我知道对“礼物”请求的响应完全由wm决定。@Kuba问题也可能很简单,比如
xfwm4
kwin
执行时不执行“点击加薪”。此外,我假设在调用该函数时窗口实际上是可见的(无论在该上下文中“可见”是什么意思)。我已经尝试了~/.config/xfce4/xfcef/xfce perchannel xml/xfwm4.xml中的几乎所有选项,但没有任何帮助。