Retrieve Convenience from the extension helper object (Me), and pass no arguments to initTranslations and getSettings (since the metadata has all that is required)
74 lines
2.2 KiB
JavaScript
74 lines
2.2 KiB
JavaScript
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
|
// Load shell theme from ~/.themes/name/gnome-shell
|
|
|
|
const GLib = imports.gi.GLib;
|
|
const Gio = imports.gi.Gio;
|
|
const Lang = imports.lang;
|
|
const Main = imports.ui.main;
|
|
|
|
const SETTINGS_KEY = 'name';
|
|
|
|
const ExtensionUtils = imports.misc.extensionUtils;
|
|
const Me = ExtensionUtils.getCurrentExtension();
|
|
const Convenience = Me.imports.convenience;
|
|
|
|
function ThemeManager() {
|
|
this._init.apply(this, arguments);
|
|
}
|
|
|
|
ThemeManager.prototype = {
|
|
_init: function() {
|
|
this._settings = Convenience.getSettings();
|
|
},
|
|
|
|
enable: function() {
|
|
this._changedId = this._settings.connect('changed::'+SETTINGS_KEY, Lang.bind(this, this._changeTheme));
|
|
this._changeTheme();
|
|
},
|
|
|
|
disable: function() {
|
|
if (this._changedId) {
|
|
this._settings.disconnect(this._changedId);
|
|
this._changedId = 0;
|
|
}
|
|
|
|
Main.setThemeStylesheet(null);
|
|
Main.loadTheme();
|
|
},
|
|
|
|
_changeTheme: function() {
|
|
let _stylesheet = null;
|
|
let _themeName = this._settings.get_string(SETTINGS_KEY);
|
|
|
|
if (_themeName) {
|
|
let _userCssStylesheet = GLib.get_home_dir() + '/.themes/' + _themeName + '/gnome-shell/gnome-shell.css';
|
|
let file = Gio.file_new_for_path(_userCssStylesheet);
|
|
if (file.query_exists(null))
|
|
_stylesheet = _userCssStylesheet;
|
|
else {
|
|
let sysdirs = GLib.get_system_data_dirs();
|
|
for (let i = 0; i < sysdirs.length; i++) {
|
|
_userCssStylesheet = sysdirs[i] + '/themes/' + _themeName + '/gnome-shell/gnome-shell.css';
|
|
let file = Gio.file_new_for_path(_userCssStylesheet);
|
|
if (file.query_exists(null)) {
|
|
_stylesheet = _userCssStylesheet;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
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();
|
|
}
|