Menüdialoge ausgegraut unter Linux

Hi,

seit dem letzten Update auf Version 0.40.1 unter linux, lassen sich über die Menüleiste keine Funktionen mehr aufrufen, d.h. z.B., dass sich die Kurse nicht mehr manuell aktualisieren lassen. Das gleiche gilt auch für den Speichern Dialog und die meisten anderen Dialoge (Ansicht, Buchung, Online). Fast alle Dialoge sind ausgegraut. Lediglich Öffnen oder die Hilfe Dialoge funktionieren noch.

Anbei eine Fehlermeldung, die angezeigt wird. Ich weiß nicht inwieweit das zusammen hängt:

Mon Jul 22 20:43:46 CEST 2019
Problems occurred when invoking code from plug-in: "org.eclipse.equinox.app".

java.lang.NoClassDefFoundError: org/eclipse/swt/accessibility/AccessibleObject
	at org.eclipse.equinox.launcher.JNIBridge._takedown_splash(Native Method)
	at org.eclipse.equinox.launcher.JNIBridge.takeDownSplash(JNIBridge.java:173)
	at org.eclipse.equinox.launcher.Main.takeDownSplash(Main.java:2219)
	at org.eclipse.equinox.launcher.Main$SplashHandler.run(Main.java:120)
	at org.eclipse.core.runtime.internal.adaptor.DefaultStartupMonitor.applicationRunning(DefaultStartupMonitor.java:70)
	at org.eclipse.equinox.internal.app.EclipseAppHandle$1.run(EclipseAppHandle.java:271)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.applicationRunning(EclipseAppHandle.java:261)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1108)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1062)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156)
	at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:165)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:199)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:391)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:246)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:595)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1501)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1474)
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.accessibility.AccessibleObject
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	... 26 more

Das Workspace Verzeichnis habe ich testweise gelöscht. Hat aber keine Änderung bewirkt.

Viele Grüße

Thomas

Die Exception NoClassDefFoundError: org/eclipse/swt/accessibility/AccessibleObject tritt leider auf Linux immer auf - liegt wohl an der Eclipse Version - ist aber nicht so schlimm weil es die Funktion nicht beeinträchtigt. @Thomas die müssen wir nicht unbedingt zusammenführen.

Ich denke das Problem von @speedywonder ist noch mal ein anderes. Ich habe an dem Menü-Handling unter Linux tatsächlich was ändern müssen.

Welchen Desktop verwendest Du? Unity unter Ubuntu?

Was ist die Ausgabe von:

echo %XDG_CURRENT_DESKTOP

Probier mal ob Du folgendes Property der PortfolioPerformance.init Datei hinzufügen kannst:

-Dname.abuchen.portfolio.unity-desktop=true

Ich nutze KDE unter Debian stable (buster). Der unity hook scheint aber geholfen zu haben. Die Menüfunktionen lassen sich wieder aufrufen. :+1:

$ echo $XDG_CURRENT_DESKTOP                                                                  
KDE
$ cat /etc/debian_version                                                                                                                                                                                                                                                    
10.0

Ich weiß nicht ob das relevant ist, aber ich habe auch das globale Menü unter KDE aktiviert. Evtl. hängt das das damit zusammen.

Ja, damit hängt das zusammen.

Beim Unity Desktop (ebenfalls mit globalen Menü) ist das Problem, dass nur einmal, ganz am Anfang abgefragt wird, ob die Menüpunkte verfügbar/ausgegraut sind. Und dann nie wieder. Beim ersten Mal ist aber meist noch keine Datei offen und darum die Menüpunkt auf den anderen Betriebssystemen ausgegraut.

Mit dem “Hook” sind die Menüs halt immer enabled - egal ob eine Datei offen ist oder nicht.

Wenn ich wüsste wie man erkennen kann, ob KDE globale Menüleisten verwendet oder nicht, dann würde ich das Verhalten automatisch anpassen. Weißt Du da was?

Zwar nicht auf Anhieb aber ich versuch mal was herauszufinden. Evtl. gibt es eine Umgebungsvariable o.ä das man abfragen könnte. Als Pakete habe ich appmenu-qt und ein appmenu-registrar installiert. Das letztere ist wohl ein dbus service, der ursprünglich für unity entwickelt wurde. Genaueres kann ich dir dazu aber gerade auch nicht sagen, hab mich bisher noch nicht damit befasst.

/Edit

Ich hab mal ein wenig herumgesucht und ein paar Ansätze gefunden, evtl. ist schon etwas brauchbares für dich dabei.

Hier findest du eine Lösung in C, die für alle Linux Distros funktionieren soll (ungetestet):

https://askubuntu.com/questions/66657/how-to-detect-if-appmenu-is-active

Dann habe ich noch ein wenig mit dbus herumgespielt, hiermit lassen sich alle Statusinformationen zu einem dbus service abfragen.

qdbus com.canonical.AppMenu.Registrar

Evtl. reicht dir das schon, falls nicht, dann gib Bescheid, evtl. kann ich dir dann noch weiter helfen. Wäre schön, wenn es da eine brauchbare Lösung gibt, die für alle funktioniert.

Viele Grüße

Thomas