// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Clutter = imports.gi.Clutter; const GObject = imports.gi.GObject; const Lang = imports.lang; const St = imports.gi.St; const Main = imports.ui.main; const PanelMenu = imports.ui.panelMenu; const PopupMenu = imports.ui.popupMenu; const VolumeMenu = imports.ui.status.volume; const FakeStatusIcon = new Lang.Class({ Name: 'FakeStatusIcon', _init: function(button) { this.actor = new St.BoxLayout({ style_class: 'panel-status-button-box' }); this._button = button; this._button.connect('icons-updated', Lang.bind(this, this._reconstructIcons)); this._button.actor.bind_property('visible', this.actor, 'visible', GObject.BindingFlags.SYNC_CREATE); this._reconstructIcons(); }, _reconstructIcons: function() { this.actor.destroy_all_children(); this._button.icons.forEach(Lang.bind(this, function(icon) { let newIcon = new St.Icon({ style_class: 'system-status-icon' }); icon.bind_property('gicon', newIcon, 'gicon', GObject.BindingFlags.SYNC_CREATE); icon.bind_property('visible', newIcon, 'visible', GObject.BindingFlags.SYNC_CREATE); this.actor.add_actor(newIcon); })); } }); const Indicator = new Lang.Class({ Name: 'LockScreenMenuIndicator', Extends: PanelMenu.SystemStatusButton, _init: function() { this.parent(null, _("Volume, network, battery")); this._box.style_class = 'lock-screen-status-button-box'; this._volumeControl = VolumeMenu.getMixerControl(); this._volumeMenu = new VolumeMenu.VolumeMenu(this._volumeControl); this.menu.addMenuItem(this._volumeMenu); this._volume = new FakeStatusIcon(Main.panel.statusArea.volume); this._box.add_child(this._volume.actor); // Network may not exist if the user doesn't have NetworkManager if (Main.panel.statusArea.network) { this._network = new FakeStatusIcon(Main.panel.statusArea.network); this._box.add_child(this._network.actor); } this._battery = new FakeStatusIcon(Main.panel.statusArea.battery); this._box.add_child(this._battery.actor); } });