popupMenu: Turn Switch state into a GObject property

A property is often more convenient than a method, as it can be used
with bind_property() and friends.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/239
This commit is contained in:
Florian Müllner 2020-01-21 14:52:15 +01:00 committed by Florian Müllner
parent 6eacbeb203
commit 4e26e0e53c

View File

@ -305,25 +305,44 @@ class PopupSeparatorMenuItem extends PopupBaseMenuItem {
}
});
var Switch = GObject.registerClass(
class Switch extends St.Bin {
var Switch = GObject.registerClass({
Properties: {
'state': GObject.ParamSpec.boolean(
'state', 'state', 'state',
GObject.ParamFlags.READWRITE,
false),
},
}, class Switch extends St.Bin {
_init(state) {
super._init({ style_class: 'toggle-switch',
accessible_role: Atk.Role.CHECK_BOX,
can_focus: true });
this.setToggleState(state);
this._state = false;
super._init({
style_class: 'toggle-switch',
accessible_role: Atk.Role.CHECK_BOX,
can_focus: true,
state,
});
}
setToggleState(state) {
get state() {
return this._state;
}
set state(state) {
if (this._state === state)
return;
if (state)
this.add_style_pseudo_class('checked');
else
this.remove_style_pseudo_class('checked');
this.state = state;
this._state = state;
this.notify('state');
}
toggle() {
this.setToggleState(!this.state);
this.state = !this.state;
}
});
@ -393,7 +412,7 @@ var PopupSwitchMenuItem = GObject.registerClass({
}
setToggleState(state) {
this._switch.setToggleState(state);
this._switch.state = state;
this.checkAccessibleState();
}