Aktuell verwendetes Theme erkennen
Verfasst: Dienstag 3. Mai 2011, 18:51
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.
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.