iso-profiles-settings/tromjaro/gnome/live-overlay/etc/skel/.local/share/gnome-shell/extensions/unite@hardpixel.eu/handlers.js
2019-07-09 04:57:09 +03:00

103 lines
2.5 KiB
JavaScript

const GObject = imports.gi.GObject;
const Unite = imports.misc.extensionUtils.getCurrentExtension();
const Convenience = Unite.imports.convenience;
var SignalsHandler = new GObject.Class({
Name: 'UniteSignalsHandler',
_init(context) {
this._signals = {};
this._context = context;
},
_getCallbackFunction(callback) {
if (typeof callback == 'string')
callback = this._context[callback] || this._context[`_${callback}`];
return callback;
},
_connectHandler(object, name, callbackObj) {
let callback = this._getCallbackFunction(callbackObj);
let signalId = object.connect(name, callback.bind(this._context));
return { object: object, signalId: signalId };
},
_addHandler(object, name, callback) {
let signalKey = `${object}[${name}#${callback}]`;
if (!this._signals[signalKey])
this._signals[signalKey] = this._connectHandler(object, name, callback);
return signalKey;
},
connect(object, name, callback) {
return this._addHandler(object, name, callback);
},
disconnect(signalKey) {
let signalData = this._signals[signalKey];
if (!signalData) return;
signalData.object.disconnect(signalData.signalId);
delete this._signals[signalKey];
},
disconnectMany(signalKeys) {
signalKeys.forEach(signalKey => { this.disconnect(signalKey) });
},
disconnectAll() {
this.disconnectMany(Object.keys(this._signals));
}
});
var SettingsHandler = new GObject.Class({
Name: 'UniteSettingsHandler',
Extends: SignalsHandler,
_init(context) {
this._enabler = null;
this._signals = {};
this._context = context;
this._settings = Convenience.getSettings();
this._wmPrefs = Convenience.getPreferences();
},
_getSettingObject(settingKey) {
if (this._settings.exists(settingKey))
return this._settings;
if (this._wmPrefs.exists(settingKey))
return this._wmPrefs;
},
connect(name, callback) {
let object = this._getSettingObject(name);
return this._addHandler(object, `changed::${name}`, callback);
},
enable(name, callback) {
if (this._enabler) return;
let signalObj = this._settings;
this._enabler = this._connectHandler(signalObj, `changed::${name}`, callback);
},
disable() {
if (!this._enabler) return;
this._settings.disconnect(this._enabler.signalId);
this._enabler = null;
},
get(settingKey) {
if (settingKey == null) return;
let object = this._getSettingObject(settingKey);
if (object) return object.getSetting(settingKey);
}
});