69 lines
2.7 KiB
JavaScript
Raw Normal View History

2024-07-08 22:46:35 +02:00
// SPDX-FileCopyrightText: Night Theme Switcher Contributors
// SPDX-License-Identifier: GPL-3.0-or-later
'use strict';
import Adw from 'gi://Adw';
import Gdk from 'gi://Gdk';
import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
import GObject from 'gi://GObject';
import Gtk from 'gi://Gtk';
import { ExtensionPreferences } from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
export default class NightThemeSwitcherPreferences extends ExtensionPreferences {
/**
* Fill the PreferencesWindow.
*
* @param {Adw.PreferencesWindow} window The PreferencesWindow to fill.
*/
async fillPreferencesWindow(window) {
// Load resources
const resource = Gio.Resource.load(GLib.build_filenamev([this.path, 'resources', 'preferences.gresource']));
Gio.resources_register(resource);
// Load icons
const iconTheme = Gtk.IconTheme.get_for_display(Gdk.Display.get_default());
iconTheme.add_resource_path('/org/gnome/Shell/Extensions/nightthemeswitcher/preferences/icons');
// Set window properties
window.search_enabled = true;
window.set_default_size(500, 630);
// Add a dummy page until the dynamics imports are done
const dummyPage = new Adw.PreferencesPage();
window.add(dummyPage);
// Dynamically import all classes
const { BackgroundButton } = await import('./preferences/BackgroundButton.js');
const { BackgroundsPage } = await import('./preferences/BackgroundsPage.js');
const { CommandsPage } = await import('./preferences/CommandsPage.js');
const { ContributePage } = await import('./preferences/ContributePage.js');
const { SchedulePage } = await import('./preferences/SchedulePage.js');
const { ShortcutButton } = await import('./preferences/ShortcutButton.js');
const { TimeChooser } = await import('./preferences/TimeChooser.js');
// Make sure all GObjects are registered
GObject.type_ensure(BackgroundButton);
GObject.type_ensure(BackgroundsPage);
GObject.type_ensure(CommandsPage);
GObject.type_ensure(ContributePage);
GObject.type_ensure(SchedulePage);
GObject.type_ensure(ShortcutButton);
GObject.type_ensure(TimeChooser);
// Remove the dummy page
window.remove(dummyPage);
// Add all pages
[
new SchedulePage({ settings: this.getSettings(`${this.metadata['settings-schema']}.time`) }),
new BackgroundsPage(),
new CommandsPage({ settings: this.getSettings(`${this.metadata['settings-schema']}.commands`) }),
new ContributePage(),
].forEach(page => window.add(page));
}
}