mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
60 lines
2.2 KiB
TypeScript
60 lines
2.2 KiB
TypeScript
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);
|
|
}
|
|
}); |