Codebase list gnome-shell-extensions / a371739 extensions / window-list / prefs.js
a371739

Tree @a371739 (Download .tar.gz)

prefs.js @a371739raw · history · blame

// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
/* exported init buildPrefsWidget */

const { Adw, Gio, GLib, GObject, Gtk } = imports.gi;

const ExtensionUtils = imports.misc.extensionUtils;

const _ = ExtensionUtils.gettext;

/** */
function init() {
    ExtensionUtils.initTranslations();
}

class WindowListPrefsWidget extends Adw.PreferencesPage {
    static {
        GObject.registerClass(this);
    }

    constructor() {
        super();

        this._actionGroup = new Gio.SimpleActionGroup();
        this.insert_action_group('window-list', this._actionGroup);

        this._settings = ExtensionUtils.getSettings();
        this._actionGroup.add_action(
            this._settings.create_action('grouping-mode'));
        this._actionGroup.add_action(
            this._settings.create_action('show-on-all-monitors'));
        this._actionGroup.add_action(
            this._settings.create_action('display-all-workspaces'));

        const groupingGroup = new Adw.PreferencesGroup({
            title: _('Window Grouping'),
        });
        this.add(groupingGroup);

        const modes = [
            { mode: 'never', title: _('Never group windows') },
            { mode: 'auto', title: _('Group windows when space is limited') },
            { mode: 'always', title: _('Always group windows') },
        ];

        for (const { mode, title } of modes) {
            const check = new Gtk.CheckButton({
                action_name: 'window-list.grouping-mode',
                action_target: new GLib.Variant('s', mode),
            });
            const row = new Adw.ActionRow({
                activatable_widget: check,
                title,
            });
            row.add_prefix(check);
            groupingGroup.add(row);
        }

        const miscGroup = new Adw.PreferencesGroup();
        this.add(miscGroup);

        let toggle = new Gtk.Switch({
            action_name: 'window-list.show-on-all-monitors',
            valign: Gtk.Align.CENTER,
        });
        let row = new Adw.ActionRow({
            title: _('Show on all monitors'),
            activatable_widget: toggle,
        });
        row.add_suffix(toggle);
        miscGroup.add(row);

        toggle = new Gtk.Switch({
            action_name: 'window-list.display-all-workspaces',
            valign: Gtk.Align.CENTER,
        });
        this._settings.bind('display-all-workspaces',
            toggle, 'active', Gio.SettingsBindFlags.DEFAULT);
        row = new Adw.ActionRow({
            title: _('Show windows from all workspaces'),
            activatable_widget: toggle,
        });
        row.add_suffix(toggle);
        miscGroup.add(row);
    }
}

/**
 * @returns {Gtk.Widget} - the prefs widget
 */
function buildPrefsWidget() {
    return new WindowListPrefsWidget();
}