[gnome-shell] extensionSystem: Add methods to enable/disable extensions
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] extensionSystem: Add methods to enable/disable extensions
- Date: Sat, 20 Jul 2019 14:49:04 +0000 (UTC)
commit 4589da957b30e9b3e99075782ab3253bce790ebb
Author: Didier Roche <didrocks ubuntu com>
Date: Wed Jan 17 13:43:11 2018 +0100
extensionSystem: Add methods to enable/disable extensions
Extensions are currently enabled or disabled by directly changing the
list in the 'enabled-extensions' GSettings key. As we will soon add
an overriding 'disabled-extensions' key as well, it makes sense to
offer explicit API for enabling/disabling to avoid duplicating the
logic.
For the corresponding D-Bus API, the methods were even mentioned in
the GSettings schema, albeit unimplemented until now.
https://bugzilla.gnome.org/show_bug.cgi?id=789852
.../dbus-interfaces/org.gnome.Shell.Extensions.xml | 24 ++++++++++++++++++++
js/ui/extensionDownloader.js | 10 ++-------
js/ui/extensionSystem.js | 26 ++++++++++++++++++++++
js/ui/shellDBus.js | 8 +++++++
4 files changed, 60 insertions(+), 8 deletions(-)
---
diff --git a/data/dbus-interfaces/org.gnome.Shell.Extensions.xml
b/data/dbus-interfaces/org.gnome.Shell.Extensions.xml
index 34a65af44..309a9f207 100644
--- a/data/dbus-interfaces/org.gnome.Shell.Extensions.xml
+++ b/data/dbus-interfaces/org.gnome.Shell.Extensions.xml
@@ -173,6 +173,30 @@
<arg type="s" direction="in" name="uuid"/>
</method>
+ <!--
+ EnableExtension:
+ @uuid: The UUID of the extension
+ @success: Whether the operation was successful
+
+ Enable an extension.
+ -->
+ <method name="EnableExtension"> \
+ <arg type="s" direction="in" name="uuid"/> \
+ <arg type="b" direction="out" name="success"/> \
+ </method> \
+
+ <!--
+ DisableExtension:
+ @uuid: The UUID of the extension
+ @success: Whether the operation was successful
+
+ Disable an extension.
+ -->
+ <method name="DisableExtension"> \
+ <arg type="s" direction="in" name="uuid"/> \
+ <arg type="b" direction="out" name="success"/> \
+ </method> \
+
<!--
LaunchExtensionPrefs:
@uuid: The UUID of the extension
diff --git a/js/ui/extensionDownloader.js b/js/ui/extensionDownloader.js
index 25027a3aa..aa5d7b94d 100644
--- a/js/ui/extensionDownloader.js
+++ b/js/ui/extensionDownloader.js
@@ -5,7 +5,6 @@ const { Clutter, Gio, GLib, GObject, Soup } = imports.gi;
const Config = imports.misc.config;
const Dialog = imports.ui.dialog;
const ExtensionUtils = imports.misc.extensionUtils;
-const ExtensionSystem = imports.ui.extensionSystem;
const FileUtils = imports.misc.fileUtils;
const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog;
@@ -225,16 +224,11 @@ class InstallExtensionDialog extends ModalDialog.ModalDialog {
}
function callback() {
- // Add extension to 'enabled-extensions' for the user, always...
- let enabledExtensions = global.settings.get_strv(ExtensionSystem.ENABLED_EXTENSIONS_KEY);
- if (!enabledExtensions.includes(uuid)) {
- enabledExtensions.push(uuid);
- global.settings.set_strv(ExtensionSystem.ENABLED_EXTENSIONS_KEY, enabledExtensions);
- }
-
try {
let extension = ExtensionUtils.createExtensionObject(uuid, dir,
ExtensionUtils.ExtensionType.PER_USER);
Main.extensionManager.loadExtension(extension);
+ if (!Main.extensionManager.enableExtension(uuid))
+ throw new Error(`Cannot add ${uuid} to enabled extensions gsettings key`);
} catch (e) {
uninstallExtension(uuid);
errback('LoadExtensionError', e);
diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
index a16aa22f0..0b22783cc 100644
--- a/js/ui/extensionSystem.js
+++ b/js/ui/extensionSystem.js
@@ -126,6 +126,32 @@ var ExtensionManager = class {
}
}
+ enableExtension(uuid) {
+ if (!ExtensionUtils.extensions[uuid])
+ return false;
+
+ let enabledExtensions = global.settings.get_strv(ENABLED_EXTENSIONS_KEY);
+ if (!enabledExtensions.includes(uuid)) {
+ enabledExtensions.push(uuid);
+ global.settings.set_strv(ENABLED_EXTENSIONS_KEY, enabledExtensions);
+ }
+
+ return true;
+ }
+
+ disableExtension(uuid) {
+ if (!ExtensionUtils.extensions[uuid])
+ return false;
+
+ let enabledExtensions = global.settings.get_strv(ENABLED_EXTENSIONS_KEY);
+ if (enabledExtensions.includes(uuid)) {
+ enabledExtensions = enabledExtensions.filter(item => item !== uuid);
+ global.settings.set_strv(ENABLED_EXTENSIONS_KEY, enabledExtensions);
+ }
+
+ return true;
+ }
+
logExtensionError(uuid, error) {
let extension = ExtensionUtils.extensions[uuid];
if (!extension)
diff --git a/js/ui/shellDBus.js b/js/ui/shellDBus.js
index 7976eeaae..fad3cf0a2 100644
--- a/js/ui/shellDBus.js
+++ b/js/ui/shellDBus.js
@@ -320,6 +320,14 @@ var GnomeShellExtensions = class {
return ExtensionDownloader.uninstallExtension(uuid);
}
+ EnableExtension(uuid) {
+ return Main.extensionManager.enableExtension(uuid);
+ }
+
+ DisableExtension(uuid) {
+ return Main.extensionManager.disableExtension(uuid);
+ }
+
LaunchExtensionPrefs(uuid) {
let appSys = Shell.AppSystem.get_default();
let app = appSys.lookup_app('gnome-shell-extension-prefs.desktop');
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]