mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
gex: rename gnome-44, add gnome-45
This commit is contained in:
60
desktop-extensions/gnome-44/src/modules/sliders/charge.ts
Normal file
60
desktop-extensions/gnome-44/src/modules/sliders/charge.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
import { Power } from "../dbus/power";
|
||||
import { addQuickSettingsItems } from "../helpers";
|
||||
|
||||
declare const imports: any;
|
||||
|
||||
const { GObject } = imports.gi;
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const QuickSettings = imports.ui.quickSettings;
|
||||
|
||||
export const SliderChargeLevel = GObject.registerClass(
|
||||
class SliderChargeLevel extends QuickSettings.QuickSlider {
|
||||
private _dbus_power: Power;
|
||||
|
||||
constructor(dbus_power: Power) {
|
||||
super({
|
||||
iconName: "selection-mode-symbolic",
|
||||
});
|
||||
this._dbus_power = dbus_power;
|
||||
|
||||
this._sliderChangedId = this.slider.connect("drag-end",
|
||||
this._onSliderChanged.bind(this));
|
||||
|
||||
// Binding the slider to a GSettings key
|
||||
this._settings = ExtensionUtils.getSettings();
|
||||
|
||||
this._settings.connect("changed::charge-level",
|
||||
this._onSettingsChanged.bind(this));
|
||||
|
||||
// Set an accessible name for the slider
|
||||
this.slider.accessible_name = "Charge level";
|
||||
|
||||
this._sync();
|
||||
this._onSettingsChanged();
|
||||
|
||||
addQuickSettingsItems([this], 2);
|
||||
}
|
||||
|
||||
_onSettingsChanged() {
|
||||
// Prevent the slider from emitting a change signal while being updated
|
||||
this.slider.block_signal_handler(this._sliderChangedId);
|
||||
this.slider.value = this._settings.get_uint("charge-level") / 100.0;
|
||||
this.slider.unblock_signal_handler(this._sliderChangedId);
|
||||
}
|
||||
|
||||
_onSliderChanged() {
|
||||
// Assuming our GSettings holds values between 0..100, adjust for the
|
||||
// slider taking values between 0..1
|
||||
const percent = Math.floor(this.slider.value * 100);
|
||||
const stored = Math.floor(this._settings.get_uint("charge-level") / 100.0);
|
||||
if (this.slider.value !== stored)
|
||||
this._dbus_power.setChargingLimit(percent);
|
||||
this._settings.set_uint("charge-level", percent);
|
||||
}
|
||||
|
||||
_sync() {
|
||||
const value = this._dbus_power.getChargingLimit();
|
||||
if (this.slider.value !== value / 100)
|
||||
this._settings.set_uint("charge-level", value);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user