如何在 Awesome WM 中修复 Java 应用程序鼠标指针偏移?

l0b*_*0b0 15 java awesome

如何在 Awesome WM v3.5.2 到 3.5.5(到目前为止)中重现:

  1. 安装 OpenJDK 或 Oracle Java 7。两者均已观察到此错误。
  2. 使用默认配置启动一个新的 Awesome WM 会话。
  3. 启动jEditPyCharm。两者均已观察到此错误。
    • 四处移动鼠标指针,观察鼠标悬停在代码、项目文件或菜单上的变化。这应该正常工作。
    • 文件菜单上单击并释放,进入其中一个子菜单,观察鼠标指针正下方的项目是如何一直聚焦的。
  4. 重复按Mod4+Space直到激活浮动布局(应用程序将几乎全屏显示)在同一标签中打开另一个应用程序。

在这一点上,我希望鼠标的行为与“普通”应用程序一样。相反,我观察到以下几点:

  • 当使用鼠标单击和导航菜单时,鼠标指针和聚焦的菜单项将彼此垂直偏移,看起来与状态栏的高度相同的像素量。
  • 当像以前一样悬停在杂项上时,光标图标将被设置为鼠标指针在屏幕上的更高位置。例如,将鼠标悬停在文本的顶行上,您将不会看到文本光标。

就好像有些东西没有检测到窗口坐标发生了变化。

当您在同一标签中打开另一个应用程序时,会发生类似但更烦人的错误- 鼠标行为就好像窗口根本没有移动一样。

当您切换另一个已打开应用程序的标签时- “虚拟鼠标桌面”将移至主屏幕的左上角

由于在 OpenJDK 和 Oracle Java 中都观察到了这些错误,在不同的 Java 应用程序中,该错误似乎很可能在 Awesome WM 中。

相关问题文章。我试过_JAVA_AWT_WM_NONREPARENTINGwmname修复,但没有去。

Wya*_*ard 1

根据我的经验,您需要向窗口管理器的源代码添加特殊定义。

几年前,我在 MATE 桌面的marco窗口管理器中就遇到过这种情况;“修复”是让 marco 假装是其父项目 metacity,以利用 JDK 的内置修复来修复 metacity。

src/core/display.c

meta_prop_set_utf8_string_hint (the_display,
                                the_display->leader_window,
                                the_display->atom__NET_WM_NAME,
                                "Metacity (Marco)");
Run Code Online (Sandbox Code Playgroud)

这个修复有点像网络浏览器世界中用户代理字符串所发生的情况,但它对我有用。

此外,arch wiki 甚至在有关模拟其他窗口管理器的部分中提到了 Awesome WM,其中推荐wmname
https ://wiki.archlinux.org/index.php/Java#Impersonate_another_window_manager

您可以使用suckless.org 中的wmname 来使JVM 相信您正在运行不同的窗口管理器。这可以解决在 Awesome、Dwm 或 Ratpoison 等窗口管理器中出现的 Java GUI 渲染问题。

$ wmname LG3D

发出 wmname 命令后,您必须重新启动相关应用程序。

这是可行的,因为 JVM 包含已知的、非重新父子窗口管理器的硬编码列表。为了最大程度地讽刺,一些用户更喜欢模仿 LG3D,这是 Sun 用 Ja​​va 编写的非重新父子窗口管理器。