Korrekte Javas Swing Menüs im GTK LaF von Linux Mint

Seit Einführung von GTK 3 in den gängigen GNU/Linux Distributionen, zeigen Javas Swing Anwendungen, die im GTK Look and Feel (LaF) laufen, bei der Darstellung in den Menüs Fehler

Bei Linux Mint Cinnamon:

  • Keinen Rahmen um die Dropdown- und Kontextmenüs
  • Falsche Schriftfarbe bei aktiven Checkbox- und Radiobutton-Menüeinträgen (Schrift hat die Hintergrundfarbe und ist nicht sichtbar)
  • Keine Menü-Separatoren

Im Netz gibt es einigen Lösungsvorschläge für Ubuntu und Mint. Allerdings hat nur einer wirklich das Problem bei meinem Linux Mint gelöst (siehe „Interessante Links“ w.u.) .

Dieses How-to zeigt nicht nur, wie man die o.g. Fehler in Linux Mint 17.x Cinnamon beseitigt, sondern liefert auch ein Bash-Skript (swing-menu-corr.sh), das die Einstellungen automatisch vornimmt.

Für Ubuntu ist es ähnlich. Ein Hinweis ist w.u. zu finden.

Die unten dargestellte Screenshot-Animation zeigt das Problem an einem Beispielprogramm vor der Fehlerbeseitigung und die korrigierte Darstellung nach Anwendung des Skripts.

Menübug in Swings GTK LaF vor und nach der Fehlerbeseitigung

Menübug in Swings GTK LaF vor und nach der Fehlerbeseitigung

Das Problem sind Einstellungen in den „menus.rc“ Dateien der einzelnen Mint-Themes unter /usr/share/themes/[mint-theme]/gtk-2.0/style.

Unter Ubuntu sind es andere Konfigurationsdateien (gtkrc), z.B. /usr/share/themes/Adwaita/gtk-2.0/gtkrc. Die Einträge sind dort aber ähnlich. Suche nach dem Abschnitt styles „menu“ und dort nach den Einträgen xthickness und ythickness und setze sie auf „1„. Alternativ installiere die Globale Menü/HUD-Unterstützung für Java Swing Apps, wenn du Unity verwendest (siehe Natives Java GTK-Look-and-Feel in Ubuntu.

Manuelle Korrektur

Man öffnet sich im Pfad /usr/share/themes/[mint-theme]/gtk-2.0/style  den verwendeten Mint-Theme-Ordner (z.B. „Mint-X“) als root und editiert die Datei menus.rc.

Im Bereich style „menu“ ändert man:

xthickness = 0
ythickness = 0
text[ACTIVE] = @base_color

zu:

xthickness = 1
ythickness = 1
text[ACTIVE] = @fg_color

Im Bereich style „menu-item-separator“ muss der Eintrag:

ythickness = 0

nach:

ythickness = 1

geändert werden.

Damit hat man das Problem für ein Theme gelöst. Um alle Mint-Themes anzupassen empfehle ich das Skript „swing-menu-corr.sh“ (s.w.u).

Die Änderungen der Theme-Dateien hatten keine negativen Auswirkungen auf klassische GTK-Programme.

Automatische Korrektur

Das manuelle Anpassen aller menus.rc Dateien in allen Mint-Themes ist mühsam und zeitaufwendig.

Das Bash-Skript „swing-menu-corr.sh“ ändert die Einträge in Linux Mints Themes automatisch.

Swing-menu-corr.sh-Skript

Swing-menu-corr.sh-Skript

Es werden nur Änderungen in den in Version 17 mitgelieferten Mint-Themes vorgenommen! Das Skript funktioniert gut mit den Cinnamon und Xfce Versionen.

Update 2017-01-29: Es werden nur Änderungen in den ab Version 17 mitgelieferten Mint-X und Adwaita Themen vorgenommen. Mint-Y Themen werden (noch) nicht unterstützt. Bis auf Weiteres verwende den Workaround in meinem Kommentar. Das Skript funktioniert gut unter Cinnamon- und Xfce-Mint-Versionen.

Das Skript legt Sicherheitskopien der Originaldateien an, die wiederum mit meinem Skript „swing-menu-undo.sh“ zurück gespielt werden können, um den Ausgangszustand wieder herzustellen.

Das Skript überprüft, ob es unter Linux Mint 17.x läuft und gibt ggf. eine Warnmeldung aus. Kaputtmachen kann das Skript nichts, da man zur Not den Originalzustand der Konfigurationsdateien mit dem „Undo“-Skript wieder herstellen kann.

Download

logo_mint „swing-menu-corr.sh“ auf GitHub
Logo Java Java-Testprogramm „Menutest.tar.gz

 

2 Kommentare

  • An alternative to this…. use LXDE

  • Derzeit korrigiert „swing-menu-corr.sh“ auch unter Linux Mint 18 alle Mint-X und Adwaita Themen (ohne Warnmeldung). Leider umfasst es (noch) nicht die Mint-Y Themen. Als Workaround verwende im Themen-Dialog unter „Steuerung“ bis auf Weiteres die Mint-X Einstellung (siehe Screenshot w.u.). Oder bleibe bei den Mint-X oder Adwaita Themen. Die Mint-Y Themen sind anders aufgebaut und ich weiß nicht ob und wie schnell ich eine Anpassung liefern kann.

    Now „swing-menu-corr.sh“ works on Linux Mint 18 without any warning on all Mint-X and Adwaita themes. Unfortunately it does not work on Mint-Y themes. As a workaround use in the Theme dialog at „Controls“ the Mint-X setting for now (refer screenshot below) or still use the Mint-X or Adwaita themes. The Mint-Y themes are designed differently to the Mint-X themes. I do not know whether or when I can provide a working solution.

    Mint-Y Workaround

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.