a26380d56e
Commit 2582ab accidentally pointed out that the current theme loading code obfuscates which directories are searched for themes. Rewrite it with modern JS features to make it more obvious. https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/60
63 lines
1.7 KiB
JavaScript
63 lines
1.7 KiB
JavaScript
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
|
// Load shell theme from ~/.local/share/themes/name/gnome-shell
|
|
/* exported init */
|
|
|
|
const { Gio, GLib } = imports.gi;
|
|
const Main = imports.ui.main;
|
|
|
|
const SETTINGS_KEY = 'name';
|
|
|
|
const ExtensionUtils = imports.misc.extensionUtils;
|
|
|
|
class ThemeManager {
|
|
constructor() {
|
|
this._settings = ExtensionUtils.getSettings();
|
|
}
|
|
|
|
enable() {
|
|
this._changedId = this._settings.connect(`changed::${SETTINGS_KEY}`, this._changeTheme.bind(this));
|
|
this._changeTheme();
|
|
}
|
|
|
|
disable() {
|
|
if (this._changedId) {
|
|
this._settings.disconnect(this._changedId);
|
|
this._changedId = 0;
|
|
}
|
|
|
|
Main.setThemeStylesheet(null);
|
|
Main.loadTheme();
|
|
}
|
|
|
|
_changeTheme() {
|
|
let stylesheet = null;
|
|
let themeName = this._settings.get_string(SETTINGS_KEY);
|
|
|
|
if (themeName) {
|
|
let stylesheetPaths = [
|
|
[GLib.get_home_dir(), '.themes'],
|
|
[GLib.get_user_data_dir(), 'themes'],
|
|
...GLib.get_system_data_dirs().map(dir => [dir, 'themes'])
|
|
].map(themeDir => GLib.build_filenamev([
|
|
...themeDir, themeName, 'gnome-shell', 'gnome-shell.css'
|
|
]));
|
|
|
|
stylesheet = stylesheetPaths.find(path => {
|
|
let file = Gio.file_new_for_path(path);
|
|
return file.query_exists(null);
|
|
});
|
|
}
|
|
|
|
if (stylesheet)
|
|
global.log(`loading user theme: ${stylesheet}`);
|
|
else
|
|
global.log('loading default theme (Adwaita)');
|
|
Main.setThemeStylesheet(stylesheet);
|
|
Main.loadTheme();
|
|
}
|
|
}
|
|
|
|
function init() {
|
|
return new ThemeManager();
|
|
}
|