mirror of
https://gitlab.gnome.org/june/top-bar-organizer.git
synced 2026-01-11 08:46:34 +01:00
69 lines
2.4 KiB
TypeScript
69 lines
2.4 KiB
TypeScript
"use strict";
|
|
|
|
import GObject from "gi://GObject";
|
|
import Adw from "gi://Adw";
|
|
import GLib from "gi://GLib";
|
|
import type Gio from "gi://Gio";
|
|
import type Gtk from "gi://Gtk";
|
|
|
|
import { ExtensionPreferences } from "resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js";
|
|
|
|
export default class PrefsBoxOrderItemOptionsDialog extends Adw.Dialog {
|
|
static {
|
|
GObject.registerClass({
|
|
GTypeName: "PrefsBoxOrderItemOptionsDialog",
|
|
Template: GLib.uri_resolve_relative(import.meta.url, "../ui/prefs-box-order-item-options-dialog.ui", GLib.UriFlags.NONE),
|
|
InternalChildren: [
|
|
"visibility-row",
|
|
],
|
|
}, this);
|
|
}
|
|
|
|
declare _visibility_row: Adw.ComboRow;
|
|
#settings: Gio.Settings;
|
|
item: string;
|
|
|
|
constructor(params = {}, item: string) {
|
|
super(params);
|
|
|
|
// Associate `this` with an item.
|
|
this.item = item;
|
|
// Load the settings.
|
|
this.#settings = ExtensionPreferences.lookupByURL(import.meta.url)!.getSettings();
|
|
|
|
// Set the selected visibility row choice to the settings value.
|
|
const itemsToHide = new Set(this.#settings.get_strv("hide"));
|
|
const itemsToShow = new Set(this.#settings.get_strv("show"));
|
|
if (itemsToHide.has(this.item)) {
|
|
this._visibility_row.set_selected(1);
|
|
} else if (itemsToShow.has(this.item)) {
|
|
this._visibility_row.set_selected(2);
|
|
} else {
|
|
this._visibility_row.set_selected(0);
|
|
}
|
|
}
|
|
|
|
onVisibilityRowSelectionChanged(): void {
|
|
const visibility = (this._visibility_row.get_selected_item() as Gtk.StringObject).get_string();
|
|
const itemsToHide = new Set(this.#settings.get_strv("hide"));
|
|
const itemsToShow = new Set(this.#settings.get_strv("show"));
|
|
|
|
switch (visibility) {
|
|
case "Forcefully Hide":
|
|
itemsToHide.add(this.item)
|
|
itemsToShow.delete(this.item);
|
|
break;
|
|
case "Forcefully Show":
|
|
itemsToHide.delete(this.item)
|
|
itemsToShow.add(this.item);
|
|
break;
|
|
case "Default":
|
|
itemsToHide.delete(this.item)
|
|
itemsToShow.delete(this.item);
|
|
break;
|
|
}
|
|
|
|
this.#settings.set_strv("hide", Array.from(itemsToHide));
|
|
this.#settings.set_strv("show", Array.from(itemsToShow));
|
|
}
|
|
}
|