diff --git a/README.md b/README.md index 6b4a2b9..3b89fb0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Eruption Profile Switcher -A GNOME 40 Shell extension that can be used to switch between different +A GNOME 4x Shell extension that can be used to switch between different slots and profiles of the [`Eruption`](https://github.com/X3n0m0rph59/eruption) Linux input and LED driver for keyboards, mice and other devices. diff --git a/extension.js b/extension.js index 806263a..f979f18 100644 --- a/extension.js +++ b/extension.js @@ -326,7 +326,8 @@ var activeSlot, savedProfile, enableSfx, enableNetFxAmbient, brightness = 100, deviceStatus = [], - status_poll_source; + status_poll_source, + status_poll_source_toplevel; var settings; @@ -764,6 +765,38 @@ var ProfileMenuItem = GObject.registerClass( } ); +function _batteryLevelIcon(battery_level) { + var icon_name = "battery-missing-symbolic"; + + if (battery_level !== undefined ) { + if (battery_level >= 100) { + icon_name = "battery-level-100-symbolic"; + } else if (battery_level >= 90) { + icon_name = "battery-level-90-symbolic"; + } else if (battery_level >= 80) { + icon_name = "battery-level-80-symbolic"; + } else if (battery_level >= 70) { + icon_name = "battery-level-70-symbolic"; + } else if (battery_level >= 60) { + icon_name = "battery-level-60-symbolic"; + } else if (battery_level >= 50) { + icon_name = "battery-level-50-symbolic"; + } else if (battery_level >= 40) { + icon_name = "battery-level-40-symbolic"; + } else if (battery_level >= 30) { + icon_name = "battery-level-30-symbolic"; + } else if (battery_level >= 20) { + icon_name = "battery-level-20-symbolic"; + } else if (battery_level >= 10) { + icon_name = "battery-level-10-symbolic"; + } else { + icon_name = "battery-empty-symbolic"; + } + } + + return icon_name; +} + let EruptionMenuButton = GObject.registerClass( class ProfilesMenuButton extends PanelMenu.Button { _init() { @@ -1157,32 +1190,9 @@ let EruptionMenuButton = GObject.registerClass( // battery level indicator if (settings.get_boolean("show-battery-level")) { const battery_level = device.status["battery-level-percent"]; - if (battery_level !== undefined ) { - var icon_name = "battery-missing-symbolic"; - - if (battery_level >= 100) { - icon_name = "battery-level-100-symbolic"; - } else if (battery_level >= 90) { - icon_name = "battery-level-90-symbolic"; - } else if (battery_level >= 80) { - icon_name = "battery-level-80-symbolic"; - } else if (battery_level >= 70) { - icon_name = "battery-level-70-symbolic"; - } else if (battery_level >= 60) { - icon_name = "battery-level-60-symbolic"; - } else if (battery_level >= 50) { - icon_name = "battery-level-50-symbolic"; - } else if (battery_level >= 40) { - icon_name = "battery-level-40-symbolic"; - } else if (battery_level >= 30) { - icon_name = "battery-level-30-symbolic"; - } else if (battery_level >= 20) { - icon_name = "battery-level-20-symbolic"; - } else if (battery_level >= 10) { - icon_name = "battery-level-10-symbolic"; - } else { - icon_name = "battery-empty-symbolic"; - } + + if (battery_level !== undefined) { + const icon_name = _batteryLevelIcon(device.status["battery-level-percent"]); const icon = new St.Icon({ icon_name: icon_name, @@ -1199,6 +1209,7 @@ let EruptionMenuButton = GObject.registerClass( indicators += 1; } + } if (indicators > 0) { @@ -1424,6 +1435,87 @@ let EruptionMenuButton = GObject.registerClass( } ); +/* let IndicatorMenuButton = GObject.registerClass( + class IndicatorMenuButton extends PanelMenu.Button { + _init() { + this._device = 1; + + super._init(0.0, _(`${_getDeviceName()}`)); + + let hbox = new St.BoxLayout({ + style_class: "panel-status-menu-box" + }); + + const icon = new St.Icon({ + icon_name: "battery-missing-symbolic", + style_class: "system-status-icon" + }); + + const level_label = new St.Label({ + style_class: "indicator-item-label", + text: ``, + }); + + this.icon = icon; + this.label = level_label; + + hbox.add_child(icon); + + // battery level indicator + //if (settings.get_boolean("show-battery-level") && deviceStatus[this._device] !== undefined) { + if (deviceStatus[this._device] !== undefined) { + const battery_level = deviceStatus[this._device].status["battery-level-percent"]; + const icon_name = _batteryLevelIcon(deviceStatus[this._device].status["battery-level-percent"]); + + const icon = new St.Icon({ + icon_name: icon_name, + style_class: "system-status-icon" + }); + + const level_label = new St.Label({ + style_class: "indicator-item-label", + text: `${battery_level}%`, + }); + + this.icon = icon; + this.label = level_label; + + indicators += 1; + } + //} + + this.add_child(hbox); + } + + update() { + const battery_level = deviceStatus[this._device].status["battery-level-percent"]; + const icon_name = _batteryLevelIcon(deviceStatus[this._device].status["battery-level-percent"]); + + this.icon.icon_name = icon_name; + this.label.text = `${battery_level}%`; + } + + _getDeviceName() { + return "Device"; + } + } +); */ + +function _placeIndicators() { + // battery level indicator + /* if (settings.get_boolean("show-battery-level")) { + const indicatorMenuButton = new IndicatorMenuButton(1); + Main.panel.addToStatusArea("eruption-indicators", indicatorMenuButton, 2, "right"); + + + let status_poll_source_toplevel = Mainloop.timeout_add(STATUS_POLL_TIMEOUT_MILLIS, () => { + indicatorMenuButton.update(); + + return true; // keep timer enabled + }); + } */ +} + class ProfileSwitcherExtension { constructor() {} @@ -1432,9 +1524,14 @@ class ProfileSwitcherExtension { eruptionMenuButton = new EruptionMenuButton(); Main.panel.addToStatusArea("eruption-menu", eruptionMenuButton, 1, "right"); + + _placeIndicators(); } disable() { + Mainloop.source_remove(status_poll_source_toplevel); + status_poll_source_toplevel = null; + Mainloop.source_remove(status_poll_source); status_poll_source = null; diff --git a/metadata.json b/metadata.json index 2d0adf0..2e65f33 100644 --- a/metadata.json +++ b/metadata.json @@ -4,9 +4,11 @@ "settings-schema": "org.gnome.shell.extensions.eruption-profile-switcher", "shell-version": [ "40.beta", - "40" + "40", + "41", + "41.1" ], "url": "https://github.com/X3n0m0rph59/eruption-profile-switcher", "uuid": "eruption-profile-switcher@x3n0m0rph59.org", - "version": 18 + "version": 19 } diff --git a/prefs.js b/prefs.js index a2f1efc..446d79c 100644 --- a/prefs.js +++ b/prefs.js @@ -97,12 +97,16 @@ const MyBuilderScope = GObject.registerClass({ on_show_battery_level_toggled(w) { settings.set_boolean("show-battery-level", w.get_active()); - eruptionMenuButton.populateMenu(); + if (eruptionMenuButton) { + eruptionMenuButton.populateMenu(); + } } on_show_signal_strength_toggled(w) { settings.set_boolean("show-signal-strength", w.get_active()); - eruptionMenuButton.populateMenu(); + if (eruptionMenuButton) { + eruptionMenuButton.populateMenu(); + } } });