cf007dd472
As gnome-shell is moving to ESM, it will now load extensions as standard modules instead of using legacy imports. The change boils down to exporting the Extension class as default, but we can also start using standard imports for introspected modules now, so do that at the same time. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/259>
94 lines
2.8 KiB
JavaScript
94 lines
2.8 KiB
JavaScript
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
|
import Adw from 'gi://Adw';
|
|
import Gio from 'gi://Gio';
|
|
import GLib from 'gi://GLib';
|
|
import GObject from 'gi://GObject';
|
|
import Gtk from 'gi://Gtk';
|
|
|
|
const ExtensionUtils = imports.misc.extensionUtils;
|
|
|
|
const _ = ExtensionUtils.gettext;
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
export default class ExtensionPreferences {
|
|
constructor() {
|
|
ExtensionUtils.initTranslations();
|
|
}
|
|
|
|
fillPreferencesWindow(window) {
|
|
const page = new WindowListPrefsWidget();
|
|
window.add(page);
|
|
}
|
|
}
|