1
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
2
// Load shell theme from ~/.themes/name/gnome-shell
4
const GLib = imports.gi.GLib;
5
const Gio = imports.gi.Gio;
6
const Lang = imports.lang;
7
const Main = imports.ui.main;
9
const SETTINGS_KEY = 'name';
11
const ExtensionUtils = imports.misc.extensionUtils;
12
const Me = ExtensionUtils.getCurrentExtension();
13
const Convenience = Me.imports.convenience;
15
const ThemeManager = new Lang.Class({
16
Name: 'UserTheme.ThemeManager',
19
this._settings = Convenience.getSettings();
23
this._changedId = this._settings.connect('changed::'+SETTINGS_KEY, Lang.bind(this, this._changeTheme));
28
if (this._changedId) {
29
this._settings.disconnect(this._changedId);
33
Main.setThemeStylesheet(null);
37
_changeTheme: function() {
38
let _stylesheet = null;
39
let _themeName = this._settings.get_string(SETTINGS_KEY);
42
let _userCssStylesheet = GLib.get_home_dir() + '/.themes/' + _themeName + '/gnome-shell/gnome-shell.css';
43
let file = Gio.file_new_for_path(_userCssStylesheet);
44
if (file.query_exists(null))
45
_stylesheet = _userCssStylesheet;
47
let sysdirs = GLib.get_system_data_dirs();
48
for (let i = 0; i < sysdirs.length; i++) {
49
_userCssStylesheet = sysdirs[i] + '/themes/' + _themeName + '/gnome-shell/gnome-shell.css';
50
let file = Gio.file_new_for_path(_userCssStylesheet);
51
if (file.query_exists(null)) {
52
_stylesheet = _userCssStylesheet;
60
global.log('loading user theme: ' + _stylesheet);
62
global.log('loading default theme (Adwaita)');
63
Main.setThemeStylesheet(_stylesheet);
69
return new ThemeManager();