java - SWT Shell 在 xfwm4 中未在上方突出

标签 java gtk swt

我在使用 xfwm4 时遇到问题。使用以下代码:

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

被其他 shell 覆盖的 Shell 窗口不会在上方凸起。使用 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 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,但是,是的,许多窗口管理器都有某种形式的输入窃取预防功能。

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

但是,窗口管理器实现此行为的方式有所不同。大多数应该(理想情况下)允许当前聚焦的应用程序将焦点集中到该应用程序的新创建的窗口,但我想并不是所有人都这样做。

关于java - SWT Shell 在 xfwm4 中未在上方突出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25892951/

相关文章:

Java SWT : Composite vs Shell

java - 使用Javamail连接到Gmail SMTP服务器忽略了指定的端口,并尝试使用25

java - 使用 Windows Builder 创建逻辑 GUI 组件组

java - 如何为 Android Studio 循环创建按钮删除 View

windows - 在 Windows 上更改 GTK+3 外观

python - Windows 中 GTK-GUI 翻译中的非 ASCII 符号不起作用?

无法打开由glade创建的子窗口

java - SWT 标签大小未正确更新

java - 是否可以将 null 参数传递给 Java JPA 2.1 中的存储过程?

java - 使用 Java API 从 GitHub 获取所有提交