Aktuell verwendetes Theme erkennen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wie kann ich unter Linux unabhängig von der Desktopumgebung und ohne Zuhilfenahme eines GUI-Toolkits erkennen, welches Theme der Benutzer aktuell verwendet? Ich frage mich gerade, ob so etwas überhaupt möglich ist, d.h. ob es dafür einen standardisierten Weg gibt. In der freedesktop.org-Dokumentation bin ich leider nicht fündig geworden. Die Icon Theme Specification beschreibt zwar, wie der Lookup hinsichtlich des genauen Dateipfads für ein Icon vonstatten gehen soll, wenn das Theme bekannt ist, nicht aber wie man das Theme an sich herausfinden kann.

Hintergrund des Ganzen (und nun hole ich etwas aus) ist halt wieder mein Launchit-Projekt. Ich finde dort in einem Modul heraus, welches Icon zu einem zu startenden Programm gehört, indem ich die Einträge aus den Menüs des Benutzers auswerte: Kommt der im Launcher aufzurufende Befehl in einem Menüeintrag vor, dann wird der zum Eintrag gehörige Dateiname für das Icon zurückgegeben. Dieser muss nämlich nicht zwangsläufig mit dem Programmnamen übereinstimmen. Das klappt in den meisten Fällen auch ganz gut, wird aber zum Problem, wenn z.B. das Icon für ``gedit`` benutzt werden soll: Dieses lautet ``accessories-text-editor``. Wenn ich dieses jetzt in einer konkreten Implementierung (in dem Fall das von Qt angebotene QIcon.fromTheme()) benutzen will, dann wird kein Icon angezeigt. Ich möchte dazu anmerken, dass ich kürzlich auf Linux Mint in der LXDE-Variante umgestiegen bin. Unter Ubuntus Gnome klappte die Anzeige des Icons noch. Eventuell hat Qt auch irgendwie Probleme bei der Erkennung von Themes für selten verwendete Desktopumgebungen. Naja, eine Suche ergab dann jedenfalls, dass sich der besagte Dateiname zwar im Theme ``gnome`` und in ``Mint-X`` befindet, nicht aber in dem als letzten Ausweg gedachten Theme ``hicolor`` vorhanden ist. Wenn ich jetzt auswerten könnte, welches Theme aktuell genutzt wird, dann würde ich dieses halt als Fallback verwenden. Denn bei expliziter Angabe von ``Mint-X`` als Theme funktioniert der Aufruf bzw die Anzeige wie gewünscht.

So, genug der Worte. Hoffe, nicht zuviel Verwirrung mit meinen Ausführungen gestiftet zu haben. Die eigentliche Frage befindet sich im ersten Absatz. ;)

EDIT: Was man natürlich auch noch in Betracht ziehen müsste, ist, dass eventuell Linux Mint sich nicht an Standards hält und Qt somit kaum Chancen hat, eine korrekte Erkennung durchzuführen. Sofern dies zutrifft, werde ich mich wohl auch von einer allgemeinen Erkennungsmethode verabschieden können. Naja, bin mal gespannt, ob jemand Licht ins Dunkle bringen kann. :)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich denke nicht dass das so Desktopübergreifend möglich ist. In GNOME2 würde ich in gconf schauen, in GNOME3 in GSettings. So ein Theme und/oder die bloße Existenz dessen ist ja doch relativ Desktopspezifisch ;)

(Aber ich würde jetzt auch nicht schwören dass es sowas nicht gibt)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ja, schon klar. In Gnome könnte man dies machen:

Code: Alles auswählen

gconftool-2 --get /desktop/gnome/interface/icon_theme
Und andere Environments haben da sicher auch alle ihre eigene Abfragemöglichkeit. Ich glaube, ich werde es letztlich als konfigurierbare Option anbieten als dass ich da wild rumrate (man könnte ja auch einfach die Themes durchprobieren solange bis etwas passt). Aber ganz sicher bin ich mir noch nicht. Die "allgemeinen" gehaltenen Icons werden ja so oder so gefunden, da ich bzw die von mir verwendete Funktion entsprechend der genannten Spezifikation vorgehen. Naja, mal sehen...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Was meinst du jetzt genau? Das Icon-Theme? Das Window-Manager-Theme? Denn das Icon-Theme sowie das Widget-Theme muss ja der App/dem Toolkit bekannt sein, damit sie weiß was für Icons sie zeichnen muss. Was für die Window Decoration bei X11 nicht gilt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich meine nur das Icon-Theme.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ein Blick in die qguiplatformplugin.cpp zeigt, dass Qt offenbar Support in der Hinsicht im Fall von Linux nur für Gnome und KDE mitbringt, siehe auch die dortige QGuiPlatformPlugin::systemIconThemeName().
Antworten