55 lines
1.6 KiB
JavaScript
55 lines
1.6 KiB
JavaScript
const { GObject, Gtk, Gio } = imports.gi;
|
|
const ExtensionUtils = imports.misc.extensionUtils;
|
|
const getSettings = ExtensionUtils.getSettings;
|
|
const Me = ExtensionUtils.getCurrentExtension();
|
|
|
|
var AppRow = GObject.registerClass(
|
|
{
|
|
GTypeName: "AppRow",
|
|
Template: Me.dir.get_child("preferences/AppRow.xml").get_uri(),
|
|
InternalChildren: ["icon", "label", "revealButton", "revealer", "hidden"],
|
|
},
|
|
class AppRow extends Gtk.ListBoxRow {
|
|
_init(app) {
|
|
super._init();
|
|
this._appInfo = Gio.DesktopAppInfo.new(app.id);
|
|
this._settings = getSettings();
|
|
this._icon.gicon = this._appInfo.get_icon();
|
|
this._label.label = this._appInfo.get_display_name();
|
|
this._hidden.set_active(app.hidden);
|
|
this._hidden.connect("state-set", () => {
|
|
this._updateApp();
|
|
});
|
|
this.appId = this._appInfo.get_id();
|
|
}
|
|
|
|
toggleSettingsVisibility() {
|
|
this._revealer.reveal_child = !this._revealer.reveal_child;
|
|
|
|
if (this._revealer.reveal_child) {
|
|
this._revealButton.get_style_context().add_class("expanded");
|
|
} else {
|
|
this._revealButton.get_style_context().remove_class("expanded");
|
|
}
|
|
}
|
|
|
|
removeRow() {
|
|
const current = JSON.parse(this._settings.get_string("applications"));
|
|
const updated = current.filter((app) => app.id !== this.appId);
|
|
|
|
this._settings.set_string("applications", JSON.stringify(updated));
|
|
}
|
|
|
|
_updateApp() {
|
|
let apps = JSON.parse(this._settings.get_string("applications"));
|
|
const index = apps.findIndex((app) => app.id == this.appId);
|
|
apps[index] = {
|
|
id: this.appId,
|
|
hidden: this._hidden.get_active(),
|
|
};
|
|
|
|
this._settings.set_string("applications", JSON.stringify(apps));
|
|
}
|
|
}
|
|
);
|