diff --git a/po/POTFILES.skip b/po/POTFILES.skip index 36fe39be5..02aa312ff 100644 --- a/po/POTFILES.skip +++ b/po/POTFILES.skip @@ -2,4 +2,5 @@ data/org.gnome.Shell@wayland.service.in data/org.gnome.Shell@x11.service.in js/ui/init.js subprojects/extensions-tool/src/templates/indicator/extension.js +subprojects/extensions-tool/src/templates/prefs.js subprojects/extensions-tool/src/templates/quick-settings/extension.js diff --git a/subprojects/extensions-tool/man/gnome-extensions.txt b/subprojects/extensions-tool/man/gnome-extensions.txt index cd55191fb..0d6b5eaff 100644 --- a/subprojects/extensions-tool/man/gnome-extensions.txt +++ b/subprojects/extensions-tool/man/gnome-extensions.txt @@ -137,6 +137,9 @@ Creates a new extension from a template. *--template*='TEMPLATE'::: Use 'TEMPLATE' as base for the new extension + *--prefs*::: + Include a prefs.js template + *-i*::: *--interactive*::: Prompt for any extension metadata that hasn't been provided diff --git a/subprojects/extensions-tool/src/command-create.c b/subprojects/extensions-tool/src/command-create.c index 879047cb2..1f65b265d 100644 --- a/subprojects/extensions-tool/src/command-create.c +++ b/subprojects/extensions-tool/src/command-create.c @@ -253,6 +253,23 @@ copy_extension_template (const char *template, GFile *target_dir, GError **error return TRUE; } +static gboolean +copy_prefs_template (GFile *target_dir, GError **error) +{ + g_autoptr (GFile) target = NULL; + g_autoptr (GFile) source = NULL; + g_autofree char *uri = NULL; + + uri = g_strdup ("resource://" TEMPLATES_PATH "/prefs.js"); + source = g_file_new_for_uri (uri); + target = g_file_get_child (target_dir, "prefs.js"); + + if (!g_file_copy (source, target, G_FILE_COPY_TARGET_DEFAULT_PERMS, NULL, NULL, NULL, error)) + return FALSE; + + return TRUE; +} + static gboolean launch_extension_source (GFile *dir, GError **error) { @@ -282,7 +299,8 @@ create_extension (const char *uuid, const char *description, const char *gettext_domain, const char *settings_schema, - const char *template) + const char *template, + gboolean prefs) { g_autoptr (GFile) dir = NULL; g_autoptr (GError) error = NULL; @@ -320,6 +338,12 @@ create_extension (const char *uuid, return FALSE; } + if (prefs && !copy_prefs_template (dir, &error)) + { + g_printerr ("%s\n", error->message); + return FALSE; + } + if (!launch_extension_source (dir, &error)) { g_printerr ("%s\n", error->message); @@ -481,6 +505,7 @@ handle_create (int argc, char *argv[], gboolean do_help) g_autofree char *gettext_domain = NULL; g_autofree char *settings_schema = NULL; g_autofree char *template = NULL; + gboolean prefs = FALSE; gboolean interactive = FALSE; gboolean list_templates = FALSE; GOptionEntry entries[] = { @@ -508,6 +533,9 @@ handle_create (int argc, char *argv[], gboolean do_help) .arg = G_OPTION_ARG_STRING, .arg_data = &template, .arg_description = _("TEMPLATE"), .description = _("The template to use for the new extension") }, + { .long_name = "prefs", + .arg = G_OPTION_ARG_NONE, .arg_data = &prefs, + .description = _("Include prefs.js template") }, { .long_name = "list-templates", .arg = G_OPTION_ARG_NONE, .arg_data = &list_templates, .flags = G_OPTION_FLAG_HIDDEN }, @@ -568,5 +596,5 @@ handle_create (int argc, char *argv[], gboolean do_help) return 1; } - return create_extension (uuid, name, description, gettext_domain, settings_schema, template) ? 0 : 2; + return create_extension (uuid, name, description, gettext_domain, settings_schema, template, prefs) ? 0 : 2; } diff --git a/subprojects/extensions-tool/src/gnome-extensions-tool.gresource.xml b/subprojects/extensions-tool/src/gnome-extensions-tool.gresource.xml index 4a64c6195..c81b4bc9a 100644 --- a/subprojects/extensions-tool/src/gnome-extensions-tool.gresource.xml +++ b/subprojects/extensions-tool/src/gnome-extensions-tool.gresource.xml @@ -7,6 +7,7 @@ templates/indicator/stylesheet.css templates/plain/extension.js templates/plain/stylesheet.css + templates/prefs.js templates/quick-settings.desktop templates/quick-settings/extension.js templates/quick-settings/stylesheet.css diff --git a/subprojects/extensions-tool/src/templates/prefs.js b/subprojects/extensions-tool/src/templates/prefs.js new file mode 100644 index 000000000..3651b6a90 --- /dev/null +++ b/subprojects/extensions-tool/src/templates/prefs.js @@ -0,0 +1,44 @@ +/* prefs.js + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +import Adw from 'gi://Adw'; +import GObject from 'gi://GObject'; + +import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'; + +const MyPreferencesWidget = GObject.registerClass( +class MyPreferencesWidget extends Adw.PreferencesGroup { + constructor() { + super({ + title: _('Section'), + }); + + this.add(new Adw.SwitchRow({ + title: _('Title'), + subtitle: _('Subtitle'), + active: true, + })); + } +}); + +export default class MyPreferences extends ExtensionPreferences { + getPreferencesWidget() { + return new MyPreferencesWidget(); + } +} +