parent
5b4afbc956
commit
291b4f917b
@ -2,7 +2,7 @@
|
||||
|
||||
Name: gnome-shell
|
||||
Version: 40.4
|
||||
Release: 3%{?dist}
|
||||
Release: 4%{?dist}
|
||||
Summary: Window management and application launching for GNOME
|
||||
|
||||
License: GPLv2+
|
||||
@ -252,6 +252,10 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/evolution-calendar.de
|
||||
%{_mandir}/man1/gnome-shell.1*
|
||||
|
||||
%changelog
|
||||
* Wed Oct 13 2021 Ray Strode <rstrode@redhat.com> - 40.4-4
|
||||
- Ensure extensions are reenabled after unlock
|
||||
Resolves: #2013801
|
||||
|
||||
* Mon Sep 27 2021 Ray Strode <rstrode@redhat.com> - 40.4-3
|
||||
- Allow extensions at the login screen
|
||||
Related: #2006985
|
||||
|
@ -1,7 +1,184 @@
|
||||
From 335b88a5508ae97c8da491e33fb07e823f405844 Mon Sep 17 00:00:00 2001
|
||||
From e7fe96d918ef75f59448664d7583eb51735be64d Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Tue, 10 Aug 2021 13:25:57 -0400
|
||||
Subject: [PATCH 1/3] extensionSystem: Get rid of _enabled boolean optimization
|
||||
|
||||
At the moment a session mode either allows extensions or it doesn't.
|
||||
If it allows extensions, then the entire available list of
|
||||
configured extensions get enabled as soon as the session mode is
|
||||
entered.
|
||||
|
||||
Since enabling or disabling extensions is an all or nothing situation,
|
||||
the code tracks whether extensions are already enabled when entering
|
||||
the session mode, and if so, avoids iterating through the extension list
|
||||
needlessly. It does this using a boolean named _enabled.
|
||||
|
||||
In the future, the extensions themselves will be given some say on
|
||||
whether or not they should be enabled in a given session mode. This
|
||||
means, the configured extension list may contain extensions that
|
||||
shouldn't be enabled for a given session mode, and the _enabled boolean
|
||||
will no longer be appropriated.
|
||||
|
||||
This commit drops the _enabled boolean optimization.
|
||||
---
|
||||
js/ui/extensionSystem.js | 10 ----------
|
||||
1 file changed, 10 deletions(-)
|
||||
|
||||
diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
|
||||
index 6b624fca0..9a8f1c9a2 100644
|
||||
--- a/js/ui/extensionSystem.js
|
||||
+++ b/js/ui/extensionSystem.js
|
||||
@@ -1,56 +1,55 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
/* exported init connect disconnect */
|
||||
|
||||
const { GLib, Gio, GObject, Shell, St } = imports.gi;
|
||||
const ByteArray = imports.byteArray;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const ExtensionDownloader = imports.ui.extensionDownloader;
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const FileUtils = imports.misc.fileUtils;
|
||||
const Main = imports.ui.main;
|
||||
const MessageTray = imports.ui.messageTray;
|
||||
|
||||
const { ExtensionState, ExtensionType } = ExtensionUtils;
|
||||
|
||||
const ENABLED_EXTENSIONS_KEY = 'enabled-extensions';
|
||||
const DISABLED_EXTENSIONS_KEY = 'disabled-extensions';
|
||||
const DISABLE_USER_EXTENSIONS_KEY = 'disable-user-extensions';
|
||||
const EXTENSION_DISABLE_VERSION_CHECK_KEY = 'disable-extension-version-validation';
|
||||
|
||||
const UPDATE_CHECK_TIMEOUT = 24 * 60 * 60; // 1 day in seconds
|
||||
|
||||
var ExtensionManager = class {
|
||||
constructor() {
|
||||
this._initialized = false;
|
||||
- this._enabled = false;
|
||||
this._updateNotified = false;
|
||||
|
||||
this._extensions = new Map();
|
||||
this._unloadedExtensions = new Map();
|
||||
this._enabledExtensions = [];
|
||||
this._extensionOrder = [];
|
||||
|
||||
Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
|
||||
}
|
||||
|
||||
init() {
|
||||
// The following file should exist for a period of time when extensions
|
||||
// are enabled after start. If it exists, then the systemd unit will
|
||||
// disable extensions should gnome-shell crash.
|
||||
// Should the file already exist from a previous login, then this is OK.
|
||||
let disableFilename = GLib.build_filenamev([GLib.get_user_runtime_dir(), 'gnome-shell-disable-extensions']);
|
||||
let disableFile = Gio.File.new_for_path(disableFilename);
|
||||
try {
|
||||
disableFile.create(Gio.FileCreateFlags.REPLACE_DESTINATION, null);
|
||||
} catch (e) {
|
||||
log('Failed to create file %s: %s'.format(disableFilename, e.message));
|
||||
}
|
||||
|
||||
GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 60, () => {
|
||||
disableFile.delete(null);
|
||||
return GLib.SOURCE_REMOVE;
|
||||
});
|
||||
|
||||
this._installExtensionUpdates();
|
||||
this._sessionUpdated();
|
||||
@@ -563,85 +562,76 @@ var ExtensionManager = class {
|
||||
|
||||
this._enabledExtensions = this._getEnabledExtensions();
|
||||
|
||||
let perUserDir = Gio.File.new_for_path(global.userdatadir);
|
||||
FileUtils.collectFromDatadirs('extensions', true, (dir, info) => {
|
||||
let fileType = info.get_file_type();
|
||||
if (fileType != Gio.FileType.DIRECTORY)
|
||||
return;
|
||||
let uuid = info.get_name();
|
||||
let existing = this.lookup(uuid);
|
||||
if (existing) {
|
||||
log('Extension %s already installed in %s. %s will not be loaded'.format(uuid, existing.path, dir.get_path()));
|
||||
return;
|
||||
}
|
||||
|
||||
let extension;
|
||||
let type = dir.has_prefix(perUserDir)
|
||||
? ExtensionType.PER_USER
|
||||
: ExtensionType.SYSTEM;
|
||||
try {
|
||||
extension = this.createExtensionObject(uuid, dir, type);
|
||||
} catch (e) {
|
||||
logError(e, 'Could not load extension %s'.format(uuid));
|
||||
return;
|
||||
}
|
||||
this.loadExtension(extension);
|
||||
});
|
||||
}
|
||||
|
||||
_enableAllExtensions() {
|
||||
- if (this._enabled)
|
||||
- return;
|
||||
-
|
||||
if (!this._initialized) {
|
||||
this._loadExtensions();
|
||||
this._initialized = true;
|
||||
} else {
|
||||
this._enabledExtensions.forEach(uuid => {
|
||||
this._callExtensionEnable(uuid);
|
||||
});
|
||||
}
|
||||
- this._enabled = true;
|
||||
}
|
||||
|
||||
_disableAllExtensions() {
|
||||
- if (!this._enabled)
|
||||
- return;
|
||||
-
|
||||
if (this._initialized) {
|
||||
this._extensionOrder.slice().reverse().forEach(uuid => {
|
||||
this._callExtensionDisable(uuid);
|
||||
});
|
||||
}
|
||||
-
|
||||
- this._enabled = false;
|
||||
}
|
||||
|
||||
_sessionUpdated() {
|
||||
// For now sessionMode.allowExtensions controls extensions from both the
|
||||
// 'enabled-extensions' preference and the sessionMode.enabledExtensions
|
||||
// property; it might make sense to make enabledExtensions independent
|
||||
// from allowExtensions in the future
|
||||
if (Main.sessionMode.allowExtensions) {
|
||||
// Take care of added or removed sessionMode extensions
|
||||
this._onEnabledExtensionsChanged();
|
||||
this._enableAllExtensions();
|
||||
} else {
|
||||
this._disableAllExtensions();
|
||||
}
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(ExtensionManager.prototype);
|
||||
|
||||
const ExtensionUpdateSource = GObject.registerClass(
|
||||
class ExtensionUpdateSource extends MessageTray.Source {
|
||||
_init() {
|
||||
let appSys = Shell.AppSystem.get_default();
|
||||
this._app = appSys.lookup_app('org.gnome.Extensions.desktop');
|
||||
|
||||
super._init(this._app.get_name());
|
||||
}
|
||||
|
||||
getIcon() {
|
||||
return this._app.app_info.get_icon();
|
||||
}
|
||||
--
|
||||
2.31.1
|
||||
|
||||
|
||||
From c96d908167b8bb088454e0e839d1c2d6e3638676 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Sat, 28 Aug 2021 13:54:39 -0400
|
||||
Subject: [PATCH 1/2] extensionSystem: Allow extensions to run on the login
|
||||
Subject: [PATCH 2/3] extensionSystem: Allow extensions to run on the login
|
||||
screen
|
||||
|
||||
At the moment it's not realy possible to extend the login screen to do
|
||||
@ -33,10 +210,10 @@ session.
|
||||
1 file changed, 29 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
|
||||
index 6b624fca0..278d31f08 100644
|
||||
index 9a8f1c9a2..bbf322ee7 100644
|
||||
--- a/js/ui/extensionSystem.js
|
||||
+++ b/js/ui/extensionSystem.js
|
||||
@@ -48,120 +48,142 @@ var ExtensionManager = class {
|
||||
@@ -47,120 +47,142 @@ var ExtensionManager = class {
|
||||
}
|
||||
|
||||
GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 60, () => {
|
||||
@ -180,7 +357,7 @@ index 6b624fca0..278d31f08 100644
|
||||
|
||||
try {
|
||||
extension.stateObj.enable();
|
||||
@@ -289,60 +311,61 @@ var ExtensionManager = class {
|
||||
@@ -288,60 +310,61 @@ var ExtensionManager = class {
|
||||
} catch (e) {
|
||||
throw new Error('Failed to load metadata.json: %s'.format(e.toString()));
|
||||
}
|
||||
@ -242,7 +419,7 @@ index 6b624fca0..278d31f08 100644
|
||||
if (enabled) {
|
||||
if (!this._callExtensionInit(extension.uuid))
|
||||
return;
|
||||
@@ -373,61 +396,61 @@ var ExtensionManager = class {
|
||||
@@ -372,61 +395,61 @@ var ExtensionManager = class {
|
||||
// If we did install an importer, it is now cached and it's
|
||||
// impossible to load a different version
|
||||
if (type === ExtensionType.PER_USER && extension.imports)
|
||||
@ -305,7 +482,7 @@ index 6b624fca0..278d31f08 100644
|
||||
} catch (e) {
|
||||
this.logExtensionError(uuid, e);
|
||||
return false;
|
||||
@@ -462,67 +485,69 @@ var ExtensionManager = class {
|
||||
@@ -461,67 +484,69 @@ var ExtensionManager = class {
|
||||
: ENABLED_EXTENSIONS_KEY;
|
||||
|
||||
extension.canChange =
|
||||
@ -378,12 +555,13 @@ index 6b624fca0..278d31f08 100644
|
||||
_installExtensionUpdates() {
|
||||
if (!this.updatesSupported)
|
||||
--
|
||||
2.32.0
|
||||
2.31.1
|
||||
|
||||
From 8153a4fd6c0526946afaf531a6e6f14e2da1ef1b Mon Sep 17 00:00:00 2001
|
||||
|
||||
From 407c537a5cd14c9e9494d954f27eacfa1589aed5 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Tue, 10 Aug 2021 15:31:00 -0400
|
||||
Subject: [PATCH 2/2] sessionMode: Allow extensions at the login and unlock
|
||||
Subject: [PATCH 3/3] sessionMode: Allow extensions at the login and unlock
|
||||
screens
|
||||
|
||||
Now extensions can specify which session modes they work in,
|
||||
@ -480,5 +658,5 @@ index 4d4fb2444..0534fd1d4 100644
|
||||
'keyring', 'autorunManager', 'automountManager']
|
||||
: ['polkitAgent', 'telepathyClient',
|
||||
--
|
||||
2.32.0
|
||||
2.31.1
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user