quickSettings: Add QuickMenuToggle
This is a convenience subclass for a quick toggle with a menu. The menu can be disabled dynamically and if enabled, an arrow is displayed that allows opening the menu. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2393>
This commit is contained in:
parent
3ce3034fdd
commit
4b9dcb3f89
@ -17,8 +17,26 @@
|
||||
|
||||
& > StBoxLayout { spacing: $base_padding; }
|
||||
|
||||
/* Move padding into the box; this is to allow menu arrows
|
||||
to extend to the border */
|
||||
&.button { padding: 0; }
|
||||
& > StBoxLayout { padding: 0 2 * $base_padding; }
|
||||
|
||||
.quick-toggle-label { font-weight: bold; }
|
||||
.quick-toggle-icon { icon-size: $base_icon_size; }
|
||||
.quick-toggle-icon, .quick-toggle-arrow { icon-size: $base_icon_size; }
|
||||
}
|
||||
|
||||
.quick-menu-toggle {
|
||||
&:ltr > StBoxLayout { padding-right: 0; }
|
||||
&:rtl > StBoxLayout { padding-left: 0; }
|
||||
|
||||
& .quick-toggle-arrow {
|
||||
background-color: transparentize($fg_color, 0.9);
|
||||
padding: 8px;
|
||||
|
||||
&:ltr { border-radius: 0 99px 99px 0; }
|
||||
&:rtl { border-radius: 99px 0 0 99px; }
|
||||
}
|
||||
}
|
||||
|
||||
.quick-toggle-menu {
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* exported QuickToggle, QuickSettingsMenu, SystemIndicator */
|
||||
/* exported QuickToggle, QuickMenuToggle, QuickSettingsMenu, SystemIndicator */
|
||||
const {Atk, Clutter, Gio, GLib, GObject, Graphene, Pango, St} = imports.gi;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
@ -94,6 +94,43 @@ var QuickToggle = GObject.registerClass({
|
||||
}
|
||||
});
|
||||
|
||||
var QuickMenuToggle = GObject.registerClass({
|
||||
Properties: {
|
||||
'menu-enabled': GObject.ParamSpec.boolean(
|
||||
'menu-enabled', '', '',
|
||||
GObject.ParamFlags.READWRITE,
|
||||
true),
|
||||
},
|
||||
}, class QuickMenuToggle extends QuickToggle {
|
||||
_init(params) {
|
||||
super._init({
|
||||
...params,
|
||||
hasMenu: true,
|
||||
});
|
||||
|
||||
this.add_style_class_name('quick-menu-toggle');
|
||||
|
||||
this._menuButton = new St.Button({
|
||||
child: new St.Icon({
|
||||
style_class: 'quick-toggle-arrow',
|
||||
icon_name: 'go-next-symbolic',
|
||||
}),
|
||||
x_expand: false,
|
||||
y_expand: true,
|
||||
});
|
||||
this._box.add_child(this._menuButton);
|
||||
|
||||
this.bind_property('menu-enabled',
|
||||
this._menuButton, 'visible',
|
||||
GObject.BindingFlags.DEFAULT);
|
||||
this._menuButton.connect('clicked', () => this.menu.open());
|
||||
this.connect('popup-menu', () => {
|
||||
if (this.menuEnabled)
|
||||
this.menu.open();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
class QuickToggleMenu extends PopupMenu.PopupMenuBase {
|
||||
constructor(sourceActor) {
|
||||
super(sourceActor, 'quick-toggle-menu');
|
||||
|
Loading…
Reference in New Issue
Block a user