messageTray: Chain up in NotificationPolicy constructor

We currently deliberately avoid chaining up in derived policy
constructors to not override properties with their defaults.
That's a neat trick that will stop working when porting to ES6
classes, as chaining up is necessary to actually initialize the
object there (including "this").

Address this by turning all properties into (overridable) getters
that are backed by private properties by default.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/350
This commit is contained in:
Florian Müllner 2018-12-11 11:17:30 +01:00 committed by Florian Müllner
parent 8f15193b40
commit a6763e7731

View File

@ -146,13 +146,40 @@ var NotificationPolicy = new Lang.Class({
showInLockScreen: true, showInLockScreen: true,
detailsInLockScreen: false detailsInLockScreen: false
}); });
Lang.copyProperties(params, this); Object.getOwnPropertyNames(params).forEach(key => {
let desc = Object.getOwnPropertyDescriptor(params, key);
Object.defineProperty(this, `_${key}`, desc);
});
}, },
// Do nothing for the default policy. These methods are only useful for the // Do nothing for the default policy. These methods are only useful for the
// GSettings policy. // GSettings policy.
store() { }, store() { },
destroy() { } destroy() { },
get enable() {
return this._enable;
},
get enableSound() {
return this._enableSound;
},
get showBanners() {
return this._showBanners;
},
get forceExpanded() {
return this._forceExpanded;
},
get showInLockScreen() {
return this._showInLockScreen;
},
get detailsInLockScreen() {
return this._detailsInLockScreen;
}
}); });
Signals.addSignalMethods(NotificationPolicy.prototype); Signals.addSignalMethods(NotificationPolicy.prototype);
@ -161,8 +188,7 @@ var NotificationGenericPolicy = new Lang.Class({
Extends: NotificationPolicy, Extends: NotificationPolicy,
_init() { _init() {
// Don't chain to parent, it would try setting this.parent();
// our properties to the defaults
this.id = 'generic'; this.id = 'generic';
@ -180,28 +206,12 @@ var NotificationGenericPolicy = new Lang.Class({
this.emit('policy-changed', key); this.emit('policy-changed', key);
}, },
get enable() {
return true;
},
get enableSound() {
return true;
},
get showBanners() { get showBanners() {
return this._masterSettings.get_boolean('show-banners'); return this._masterSettings.get_boolean('show-banners');
}, },
get forceExpanded() {
return false;
},
get showInLockScreen() { get showInLockScreen() {
return this._masterSettings.get_boolean('show-in-lock-screen'); return this._masterSettings.get_boolean('show-in-lock-screen');
},
get detailsInLockScreen() {
return false;
} }
}); });
@ -210,8 +220,7 @@ var NotificationApplicationPolicy = new Lang.Class({
Extends: NotificationPolicy, Extends: NotificationPolicy,
_init(id) { _init(id) {
// Don't chain to parent, it would try setting this.parent();
// our properties to the defaults
this.id = id; this.id = id;
this._canonicalId = this._canonicalizeId(id); this._canonicalId = this._canonicalizeId(id);