#
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
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 })
|
||||
}
|
Reference in New Issue
Block a user