From 306b0059438e65c0b0beaaa84022b867192b1f34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 6 Nov 2019 10:44:28 +0100 Subject: [PATCH] extensions-tool: Add small indicator template Adding an additional icon to the top bar is one of the more common patterns used by extensions. Make this easier by providing a template for it. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/812 --- po/POTFILES.in | 1 + po/POTFILES.skip | 1 + .../src/gnome-extensions-tool.gresource.xml | 3 + .../src/templates/indicator.desktop.in | 5 ++ .../src/templates/indicator/extension.js | 74 +++++++++++++++++++ .../src/templates/indicator/stylesheet.css | 1 + .../extensions-tool/src/templates/meson.build | 1 + 7 files changed, 86 insertions(+) create mode 100644 po/POTFILES.skip create mode 100644 subprojects/extensions-tool/src/templates/indicator.desktop.in create mode 100644 subprojects/extensions-tool/src/templates/indicator/extension.js create mode 100644 subprojects/extensions-tool/src/templates/indicator/stylesheet.css diff --git a/po/POTFILES.in b/po/POTFILES.in index 765dbb72d..745ea58f1 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -95,5 +95,6 @@ subprojects/extensions-tool/src/command-reset.c subprojects/extensions-tool/src/command-uninstall.c subprojects/extensions-tool/src/main.c subprojects/extensions-tool/src/templates/00-plain.desktop.in +subprojects/extensions-tool/src/templates/indicator.desktop.in # Please do not remove this file from POTFILES.in. Run "git submodule init && git submodule update" to get it. subprojects/gvc/gvc-mixer-control.c diff --git a/po/POTFILES.skip b/po/POTFILES.skip new file mode 100644 index 000000000..0180ff554 --- /dev/null +++ b/po/POTFILES.skip @@ -0,0 +1 @@ +subprojects/extensions-tool/src/templates/indicator/extension.js diff --git a/subprojects/extensions-tool/src/gnome-extensions-tool.gresource.xml b/subprojects/extensions-tool/src/gnome-extensions-tool.gresource.xml index 684358c13..0db87c3c2 100644 --- a/subprojects/extensions-tool/src/gnome-extensions-tool.gresource.xml +++ b/subprojects/extensions-tool/src/gnome-extensions-tool.gresource.xml @@ -2,6 +2,9 @@ templates/00-plain.desktop + templates/indicator.desktop + templates/indicator/extension.js + templates/indicator/stylesheet.css templates/plain/extension.js templates/plain/stylesheet.css diff --git a/subprojects/extensions-tool/src/templates/indicator.desktop.in b/subprojects/extensions-tool/src/templates/indicator.desktop.in new file mode 100644 index 000000000..1718e9403 --- /dev/null +++ b/subprojects/extensions-tool/src/templates/indicator.desktop.in @@ -0,0 +1,5 @@ +[Desktop Entry] +Type=Application +Name=Indicator +Comment=Add an icon to the top bar +Path=indicator diff --git a/subprojects/extensions-tool/src/templates/indicator/extension.js b/subprojects/extensions-tool/src/templates/indicator/extension.js new file mode 100644 index 000000000..fd84782a8 --- /dev/null +++ b/subprojects/extensions-tool/src/templates/indicator/extension.js @@ -0,0 +1,74 @@ +/* extension.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 + */ + +/* exported init */ + +const GETTEXT_DOMAIN = 'my-indicator-extension'; + +const { GObject, St } = imports.gi; + +const Gettext = imports.gettext.domain(GETTEXT_DOMAIN); +const _ = Gettext.gettext; + +const ExtensionUtils = imports.misc.extensionUtils; +const Main = imports.ui.main; +const PanelMenu = imports.ui.panelMenu; +const PopupMenu = imports.ui.popupMenu; + +const Indicator = GObject.registerClass( +class Indicator extends PanelMenu.Button { + _init() { + super._init(0.0, _('My Shiny Indicator')); + + let box = new St.BoxLayout({ style_class: 'panel-status-menu-box' }); + box.add_child(new St.Icon({ + icon_name: 'face-smile-symbolic', + style_class: 'system-status-icon', + })); + box.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM)); + this.add_child(box); + + let item = new PopupMenu.PopupMenuItem(_('Show Notification')); + item.connect('activate', () => { + Main.notify(_('Whatʼs up, folks?')); + }); + this.menu.addMenuItem(item); + } +}); + +class Extension { + constructor(uuid) { + this._uuid = uuid; + + ExtensionUtils.initTranslations(GETTEXT_DOMAIN); + } + + enable() { + this._indicator = new Indicator(); + Main.panel.addToStatusArea(this._uuid, this._indicator); + } + + disable() { + this._indicator.destroy(); + this._indicator = null; + } +} + +function init(meta) { + return new Extension(meta.uuid); +} diff --git a/subprojects/extensions-tool/src/templates/indicator/stylesheet.css b/subprojects/extensions-tool/src/templates/indicator/stylesheet.css new file mode 100644 index 000000000..37b93f219 --- /dev/null +++ b/subprojects/extensions-tool/src/templates/indicator/stylesheet.css @@ -0,0 +1 @@ +/* Add your custom extension styling here */ diff --git a/subprojects/extensions-tool/src/templates/meson.build b/subprojects/extensions-tool/src/templates/meson.build index 4f86ad4e2..670e2bf44 100644 --- a/subprojects/extensions-tool/src/templates/meson.build +++ b/subprojects/extensions-tool/src/templates/meson.build @@ -1,5 +1,6 @@ template_metas = [ '00-plain.desktop', + 'indicator.desktop', ] template_deps = [] foreach template : template_metas