dotfiles/.local/share/gnome-shell/extensions/trayIconsReloaded@selfmade.pl/preferences/AppRow.js

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));
}
}
);