154 lines
5.1 KiB
JavaScript
154 lines
5.1 KiB
JavaScript
'use strict'
|
|
|
|
import GLib from 'gi://GLib';
|
|
import Adw from 'gi://Adw';
|
|
import GObject from 'gi://GObject';
|
|
import Gio from 'gi://Gio';
|
|
|
|
export const Thinkpad = GObject.registerClass({
|
|
GTypeName: 'ThinkpadPrefs',
|
|
Template: GLib.Uri.resolve_relative(import.meta.url, '../ui/thinkpad.ui',GLib.UriFlags.NONE),
|
|
InternalChildren: [
|
|
'start_bat0',
|
|
'end_bat0',
|
|
'start_bat1',
|
|
'end_bat1',
|
|
'reset',
|
|
'apply_bat0',
|
|
'apply_bat1',
|
|
'reset_thresholds_dialog',
|
|
'disabled_start_bat0',
|
|
'disabled_start_bat1',
|
|
'warn_bat0',
|
|
'warn_bat1'
|
|
],
|
|
}, class Thinkpad extends Adw.PreferencesPage {
|
|
constructor(window) {
|
|
super({});
|
|
|
|
window._settings.bind(
|
|
'start-bat0',
|
|
this._start_bat0,
|
|
'value',
|
|
Gio.SettingsBindFlags.DEFAULT
|
|
);
|
|
window._settings.bind(
|
|
'end-bat0',
|
|
this._end_bat0,
|
|
'value',
|
|
Gio.SettingsBindFlags.DEFAULT
|
|
);
|
|
window._settings.bind(
|
|
'start-bat1',
|
|
this._start_bat1,
|
|
'value',
|
|
Gio.SettingsBindFlags.DEFAULT
|
|
);
|
|
window._settings.bind(
|
|
'end-bat1',
|
|
this._end_bat1,
|
|
'value',
|
|
Gio.SettingsBindFlags.DEFAULT
|
|
);
|
|
window._settings.bind(
|
|
'disabled-start-bat0-value',
|
|
this._disabled_start_bat0,
|
|
'value',
|
|
Gio.SettingsBindFlags.DEFAULT
|
|
);
|
|
window._settings.bind(
|
|
'disabled-start-bat1-value',
|
|
this._disabled_start_bat1,
|
|
'value',
|
|
Gio.SettingsBindFlags.DEFAULT
|
|
);
|
|
|
|
window._settings.connect('changed::start-bat0', () => {
|
|
if (this._start_bat0.value >= this._end_bat0.value) {
|
|
this._end_bat0.value = this._start_bat0.value + 1;
|
|
}
|
|
this._updateWarnings();
|
|
});
|
|
window._settings.connect('changed::end-bat0', () => {
|
|
if (this._start_bat0.value >= this._end_bat0.value) {
|
|
this._start_bat0.value = this._end_bat0.value - 1;
|
|
}
|
|
this._updateWarnings();
|
|
});
|
|
window._settings.connect('changed::start-bat1', () => {
|
|
if (this._start_bat1.value >= this._end_bat1.value) {
|
|
this._end_bat1.value = this._start_bat1.value + 1;
|
|
}
|
|
this._updateWarnings();
|
|
});
|
|
window._settings.connect('changed::end-bat1', () => {
|
|
if (this._start_bat1.value >= this._end_bat1.value) {
|
|
this._start_bat1.value = this._end_bat1.value - 1;
|
|
}
|
|
this._updateWarnings();
|
|
});
|
|
window._settings.connect('changed::disabled-start-bat0-value', () => {
|
|
this._updateWarnings();
|
|
});
|
|
window._settings.connect('changed::disabled-start-bat1-value', () => {
|
|
this._updateWarnings();
|
|
});
|
|
|
|
const bat0 = window._driver.batteries.find(battery => battery.name === 'BAT0');
|
|
const bat1 = window._driver.batteries.find(battery => battery.name === 'BAT1');
|
|
|
|
this._apply_bat0.connect('clicked', () => {
|
|
bat0.enable();
|
|
});
|
|
this._apply_bat1.connect('clicked', () => {
|
|
bat1.enable();
|
|
});
|
|
|
|
this._apply_bat0.visible = bat0.isAvailable;
|
|
bat0.connect('notify::is-available', () => {
|
|
this._apply_bat0.visible = bat0.isAvailable;
|
|
});
|
|
this._apply_bat0.sensitive = bat0.pendingChanges;
|
|
bat0.connect('notify::pending-changes', () => {
|
|
this._apply_bat0.sensitive = bat0.pendingChanges;
|
|
});
|
|
|
|
this._apply_bat1.visible = bat1.isAvailable;
|
|
bat1.connect('notify::is-available', () => {
|
|
this._apply_bat1.visible = bat1.isAvailable;
|
|
});
|
|
this._apply_bat1.sensitive = bat1.pendingChanges;
|
|
bat1.connect('notify::pending-changes', () => {
|
|
this._apply_bat1.sensitive = bat1.pendingChanges;
|
|
});
|
|
|
|
this._updateWarnings();
|
|
|
|
this._reset_thresholds_dialog.connect('response', (obj, response, data) => {
|
|
if (response === 'reset') {
|
|
const keys = [
|
|
'start-bat0',
|
|
'end-bat0',
|
|
'start-bat1',
|
|
'end-bat1',
|
|
'disabled-start-bat0-value',
|
|
'disabled-start-bat1-value',
|
|
];
|
|
keys.forEach(key => {
|
|
window._settings.reset(key);
|
|
});
|
|
window._driver.enableAll();
|
|
}
|
|
});
|
|
|
|
this._reset.connect('clicked', () => {
|
|
this._reset_thresholds_dialog.transientFor = this.root;
|
|
this._reset_thresholds_dialog.present();
|
|
});
|
|
}
|
|
|
|
_updateWarnings() {
|
|
this._warn_bat0.reveal_child = this._start_bat0.value === this._disabled_start_bat0.value && this._end_bat0.value === 100;
|
|
this._warn_bat1.reveal_child = this._start_bat1.value === this._disabled_start_bat1.value && this._end_bat1.value === 100;
|
|
}
|
|
}); |