Java

如何在 Awesome WM 中修復 Java 應用程序滑鼠指針偏移?

  • August 5, 2016

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

  1. 安裝 OpenJDK 或 Oracle Java 7。兩者都觀察到了這個錯誤。
  2. 使用預設配置啟動一個新的 Awesome WM 會話。
  3. 啟動jEditPyCharm。兩者都觀察到了這個錯誤。
  • 移動滑鼠指針,觀察它是如何根據您將滑鼠懸停在程式碼、項目文件還是菜單上而變化的。這應該可以正常工作。
  • 點擊並鬆開文件菜單,進入其中一個子菜單,觀察滑鼠指針正下方的項目是如何一直聚焦的。
  1. 反复按Mod4+Space直到啟動浮動佈局(應用程序將幾乎全屏)在同一標籤中打開另一個應用程序。

在這一點上,我希望滑鼠的行為與“正常”應用程序一樣。相反,我觀察到以下內容:

  • 使用滑鼠點擊和導航菜單時,滑鼠指針和焦點菜單項將相互垂直偏移,看起來與狀態欄的高度相同。
  • 像以前一樣將滑鼠懸停在雜項上時,游標圖示將被設置為好像滑鼠指針在螢幕上更高。例如,將滑鼠懸停在文本的第一行上,您將看不到文本游標。

好像有些東西沒有檢測到視窗座標已經改變。

當您在同一個標籤中打開另一個應用程序時,會發生類似但更煩人的錯誤- 滑鼠行為就像視窗根本沒有移動一樣。

當您切換另一個已打開應用程序的標籤時, “虛擬滑鼠桌面”將移動到主螢幕的左上角

由於在 OpenJDK 和 Oracle Java 中都觀察到了這些錯誤,並且在不同的 Java 應用程序中,這些錯誤似乎很可能出現在 Awesome WM 中。

相關問題文章。我嘗試了_JAVA_AWT_WM_NONREPARENTINGwmname修復,但沒有去。

根據我的經驗,您需要為視窗管理器的源添加特殊定義。

幾年前,我在 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)");

此修復程序與 Web 瀏覽器世界中使用者代理字元串發生的事情有關,但它對我有用。

此外,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 編寫的非重父視窗管理器。

引用自:https://unix.stackexchange.com/questions/109002