2025-05-09 09:48:24 +02:00

134 lines
5.2 KiB
JavaScript

import Gdk from 'gi://Gdk';
import Gtk from 'gi://Gtk';
import * as Constants from './constants.js';
import {AboutPage} from './settings/AboutPage.js';
import {DonatePage} from './settings/DonatePage.js';
import {GeneralPage} from './settings/GeneralPage.js';
import {MenuButtonPage} from './settings/MenuButtonPage.js';
import {MenuPage} from './settings/MenuPage.js';
import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
export default class ArcMenuPrefs extends ExtensionPreferences {
constructor(metadata) {
super(metadata);
const iconPath = `${this.path}/icons`;
const iconTheme = Gtk.IconTheme.get_for_display(Gdk.Display.get_default());
if (!iconTheme.get_search_path().includes(iconPath))
iconTheme.add_search_path(iconPath);
}
fillPreferencesWindow(window) {
const settings = this.getSettings();
window.set_search_enabled(true);
window.set_default_size(settings.get_int('settings-width'), settings.get_int('settings-height'));
let pageChangedId = settings.connect('changed::prefs-visible-page', () => {
if (settings.get_int('prefs-visible-page') !== Constants.SettingsPage.MAIN)
this._setVisiblePage(window, settings);
});
let pinnedAppsChangedId = settings.connect('changed::pinned-apps', () => {
for (const page of window.pages) {
if (page instanceof MenuPage) {
const {settingPage} = page.pinnedAppsRow;
settingPage.updatePinnedApps();
}
}
});
window.connect('notify::visible-page', () => {
const page = window.visible_page;
const maybeScrolledWindowChild = [...page][0];
if (maybeScrolledWindowChild instanceof Gtk.ScrolledWindow)
maybeScrolledWindowChild.vadjustment.value = 0;
});
window.connect('close-request', () => {
if (pageChangedId) {
settings.disconnect(pageChangedId);
pageChangedId = null;
}
if (pinnedAppsChangedId) {
settings.disconnect(pinnedAppsChangedId);
pinnedAppsChangedId = null;
}
});
this._populateWindow(window, settings);
}
_populateWindow(window, settings) {
if (window.pages?.length > 0)
window.pages.forEach(page => window.remove(page));
window.pages = [];
const generalPage = new GeneralPage(settings);
window.add(generalPage);
window.pages.push(generalPage);
const menuPage = new MenuPage(settings, window);
window.add(menuPage);
window.pages.push(menuPage);
const menuButtonPage = new MenuButtonPage(settings);
window.add(menuButtonPage);
window.pages.push(menuButtonPage);
const donatePage = new DonatePage(this.metadata);
window.add(donatePage);
window.pages.push(donatePage);
const aboutPage = new AboutPage(settings, this.metadata, this.path);
window.add(aboutPage);
window.pages.push(aboutPage);
this._setVisiblePage(window, settings);
}
_setVisiblePage(window, settings) {
const prefsVisiblePage = settings.get_int('prefs-visible-page');
window.pop_subpage();
if (prefsVisiblePage === Constants.SettingsPage.MAIN) {
window.set_visible_page_name('GeneralPage');
} else if (prefsVisiblePage === Constants.SettingsPage.CUSTOMIZE_MENU) {
window.set_visible_page_name('MenuPage');
} else if (prefsVisiblePage === Constants.SettingsPage.MENU_LAYOUT) {
window.set_visible_page_name('MenuPage');
const page = window.get_visible_page();
page.presentSubpage(Constants.SettingsPage.MENU_LAYOUT);
} else if (prefsVisiblePage === Constants.SettingsPage.MENU_THEME) {
window.set_visible_page_name('MenuPage');
const page = window.get_visible_page();
page.presentSubpage(Constants.SettingsPage.MENU_THEME);
} else if (prefsVisiblePage === Constants.SettingsPage.BUTTON_APPEARANCE) {
window.set_visible_page_name('MenuButtonPage');
} else if (prefsVisiblePage === Constants.SettingsPage.RUNNER_TWEAKS) {
window.set_visible_page_name('MenuPage');
const page = window.get_visible_page();
page.presentSubpage(Constants.SettingsPage.RUNNER_TWEAKS);
} else if (prefsVisiblePage === Constants.SettingsPage.ABOUT) {
window.set_visible_page_name('AboutPage');
} else if (prefsVisiblePage === Constants.SettingsPage.GENERAL) {
window.set_visible_page_name('GeneralPage');
} else if (prefsVisiblePage === Constants.SettingsPage.DONATE) {
window.set_visible_page_name('DonatePage');
} else if (prefsVisiblePage === Constants.SettingsPage.WHATS_NEW) {
window.set_visible_page_name('AboutPage');
const page = window.get_visible_page();
page.showWhatsNewPage();
}
settings.set_int('prefs-visible-page', Constants.SettingsPage.MAIN);
}
}