[gnome-shell] extensions-tool: Add small indicator template
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] extensions-tool: Add small indicator template
- Date: Tue, 7 Apr 2020 20:33:52 +0000 (UTC)
commit 306b0059438e65c0b0beaaa84022b867192b1f34
Author: Florian Müllner <fmuellner gnome org>
Date: Wed Nov 6 10:44:28 2019 +0100
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(+)
---
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 765dbb72dc..745ea58f19 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 0000000000..0180ff5540
--- /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 684358c136..0db87c3c2c 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 @@
<gresources>
<gresource prefix="/org/gnome/extensions-tool">
<file>templates/00-plain.desktop</file>
+ <file>templates/indicator.desktop</file>
+ <file>templates/indicator/extension.js</file>
+ <file>templates/indicator/stylesheet.css</file>
<file>templates/plain/extension.js</file>
<file>templates/plain/stylesheet.css</file>
</gresource>
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 0000000000..1718e94032
--- /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 0000000000..fd84782a86
--- /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 <http://www.gnu.org/licenses/>.
+ *
+ * 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 0000000000..37b93f2191
--- /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 4f86ad4e22..670e2bf448 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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]