125 lines
3.6 KiB
JavaScript
125 lines
3.6 KiB
JavaScript
|
const Gettext = imports.gettext
|
||
|
const GObject = imports.gi.GObject
|
||
|
const Gio = imports.gi.Gio
|
||
|
const Config = imports.misc.config
|
||
|
const Unite = imports.misc.extensionUtils.getCurrentExtension()
|
||
|
|
||
|
var SettingsManager = GObject.registerClass(
|
||
|
class UniteSettings extends Gio.Settings {
|
||
|
get DEFAULT_BINDING() {
|
||
|
return Gio.SettingsBindFlags.DEFAULT
|
||
|
}
|
||
|
|
||
|
get _types() {
|
||
|
return {
|
||
|
'autofocus-windows': 'boolean',
|
||
|
'hide-activities-button': 'enum',
|
||
|
'show-window-title': 'enum',
|
||
|
'show-desktop-name': 'boolean',
|
||
|
'desktop-name-text': 'string',
|
||
|
'extend-left-box': 'boolean',
|
||
|
'notifications-position': 'enum',
|
||
|
'use-system-fonts': 'boolean',
|
||
|
'show-legacy-tray': 'boolean',
|
||
|
'greyscale-tray-icons': 'boolean',
|
||
|
'show-window-buttons': 'enum',
|
||
|
'window-buttons-theme': 'enum',
|
||
|
'hide-window-titlebars': 'enum',
|
||
|
'window-buttons-placement': 'select',
|
||
|
'hide-dropdown-arrows': 'boolean',
|
||
|
'hide-aggregate-menu-arrow': 'boolean',
|
||
|
'hide-app-menu-arrow': 'boolean',
|
||
|
'hide-app-menu-icon': 'boolean',
|
||
|
'reduce-panel-spacing': 'boolean',
|
||
|
'restrict-to-primary-screen': 'boolean'
|
||
|
}
|
||
|
}
|
||
|
|
||
|
exists(key) {
|
||
|
return Object.keys(this._types).includes(key)
|
||
|
}
|
||
|
|
||
|
getSettingType(key) {
|
||
|
return this._types[key] || 'invalid'
|
||
|
}
|
||
|
|
||
|
getTypeSettings(type) {
|
||
|
return Object.keys(this._types).filter(key => this._types[key] == type)
|
||
|
}
|
||
|
|
||
|
getSetting(key) {
|
||
|
if (!this.exists(key)) return
|
||
|
|
||
|
let boolean = this.getSettingType(key) == 'boolean'
|
||
|
return boolean ? this.get_boolean(key) : this.get_string(key)
|
||
|
}
|
||
|
}
|
||
|
)
|
||
|
|
||
|
var PreferencesManager = GObject.registerClass(
|
||
|
class UnitePreferences extends Gio.Settings {
|
||
|
get window_buttons_position() {
|
||
|
let setting = this.get_string('button-layout')
|
||
|
return /(close|minimize|maximize).*:/.test(setting) ? 'left' : 'right'
|
||
|
}
|
||
|
|
||
|
get window_buttons_layout() {
|
||
|
let setting = this.get_string('button-layout')
|
||
|
return setting.match(/(close|minimize|maximize)/g)
|
||
|
}
|
||
|
|
||
|
exists(key) {
|
||
|
let fun = key.replace(/-/g, '_')
|
||
|
return (fun in this) || this.list_keys().includes(key)
|
||
|
}
|
||
|
|
||
|
getSetting(key) {
|
||
|
let fun = key.replace(/-/g, '_')
|
||
|
|
||
|
if (this.exists(fun)) return this[fun]
|
||
|
if (this.exists(key)) return this.get_string(key)
|
||
|
}
|
||
|
}
|
||
|
)
|
||
|
|
||
|
function initTranslations(domain) {
|
||
|
let textDomain = domain || Unite.metadata['gettext-domain']
|
||
|
let localeDir = Unite.dir.get_child('locale')
|
||
|
|
||
|
if (localeDir.query_exists(null))
|
||
|
localeDir = localeDir.get_path()
|
||
|
else
|
||
|
localeDir = Config.LOCALEDIR
|
||
|
|
||
|
Gettext.bindtextdomain(textDomain, localeDir)
|
||
|
}
|
||
|
|
||
|
function getSettings(schema) {
|
||
|
schema = schema || Unite.metadata['settings-schema']
|
||
|
|
||
|
let gioSSS = Gio.SettingsSchemaSource
|
||
|
let schemaDir = Unite.dir.get_child('schemas')
|
||
|
let schemaSource = gioSSS.get_default()
|
||
|
|
||
|
if (schemaDir.query_exists(null)) {
|
||
|
schemaDir = schemaDir.get_path()
|
||
|
schemaSource = gioSSS.new_from_directory(schemaDir, schemaSource, false)
|
||
|
}
|
||
|
|
||
|
let schemaObj = schemaSource.lookup(schema, true)
|
||
|
|
||
|
if (!schemaObj) {
|
||
|
let metaId = Unite.metadata.uuid
|
||
|
let message = `Schema ${schema} could not be found for extension ${metaId}.`
|
||
|
|
||
|
throw new Error(`${message} Please check your installation.`)
|
||
|
}
|
||
|
|
||
|
return new SettingsManager({ settings_schema: schemaObj })
|
||
|
}
|
||
|
|
||
|
function getPreferences() {
|
||
|
let schemaId = 'org.gnome.desktop.wm.preferences'
|
||
|
return new PreferencesManager({ schema_id: schemaId })
|
||
|
}
|