[gnome-shell] extensions-tool: Add small indicator template



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]