diff --git a/js/extensions/prefs.js b/js/extensions/prefs.js index d60859a3d..f36b97138 100644 --- a/js/extensions/prefs.js +++ b/js/extensions/prefs.js @@ -1,3 +1,4 @@ +import Adw from 'gi://Adw'; import GObject from 'gi://GObject'; import {ExtensionBase, GettextWrapper} from './sharedInternals.js'; @@ -13,13 +14,45 @@ export class ExtensionPreferences extends ExtensionBase { return wrapper.defineTranslationFunctions(); } + /** + * Get the single widget that implements + * the extension's preferences. + * + * @returns {Gtk.Widget} + */ + getPreferencesWidget() { + throw new GObject.NotImplementedError(); + } + /** * Fill the preferences window with preferences. * - * @param {Adw.PreferencesWindow} _window - the preferences window + * The default implementation adds the widget + * returned by getPreferencesWidget(). + * + * @param {Adw.PreferencesWindow} window - the preferences window */ - fillPreferencesWindow(_window) { - throw new GObject.NotImplementedError(); + fillPreferencesWindow(window) { + const widget = this.getPreferencesWidget(); + const page = this._wrapWidget(widget); + window.add(page); + } + + _wrapWidget(widget) { + if (widget instanceof Adw.PreferencesPage) + return widget; + + const page = new Adw.PreferencesPage(); + if (widget instanceof Adw.PreferencesGroup) { + page.add(widget); + return page; + } + + const group = new Adw.PreferencesGroup(); + group.add(widget); + page.add(group); + + return page; } }