我在使用 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/