Compare commits
No commits in common. "c8" and "c8-beta" have entirely different histories.
@ -1,270 +0,0 @@
|
||||
From 1b3edde30bac1bb4944b56e59cbc7f1412a90a3d Mon Sep 17 00:00:00 2001
|
||||
From: Joan Torres Lopez <joantolo@redhat.com>
|
||||
Date: Wed, 17 Jun 2026 09:54:57 +0200
|
||||
Subject: [PATCH 1/5] loginDialog: Don't reconnect on each reset with gdmClient
|
||||
|
||||
When resetting the greeter proxy, it's destroyed and then recreated
|
||||
again.
|
||||
|
||||
This destroy/recreate thing doesn't give any info to GDM and the greeter
|
||||
interface destroyed has the same state as the newly created one.
|
||||
|
||||
Each time get_greeter_sync is called when greeter is destroyed makes GDM
|
||||
create a new connection which stores in a list. This means that for each
|
||||
reset a new unnecessary connection is created and stored.
|
||||
|
||||
GDM was leaking some objects which combined with this excessive connection
|
||||
creation was causing a fd leak on each reset.
|
||||
|
||||
To make better use of resources and avoid problems, use ensure instead
|
||||
of reset greeter proxy.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3749>
|
||||
---
|
||||
js/gdm/loginDialog.js | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
|
||||
index eb6846d..c5e8853 100644
|
||||
--- a/js/gdm/loginDialog.js
|
||||
+++ b/js/gdm/loginDialog.js
|
||||
@@ -815,11 +815,11 @@ var LoginDialog = GObject.registerClass({
|
||||
this._showPrompt();
|
||||
}
|
||||
|
||||
- _resetGreeterProxy() {
|
||||
+ _ensureGreeterProxy() {
|
||||
if (GLib.getenv('GDM_GREETER_TEST') != '1') {
|
||||
- if (this._greeter) {
|
||||
- this._greeter.run_dispose();
|
||||
- }
|
||||
+ if (this._greeter)
|
||||
+ return;
|
||||
+
|
||||
this._greeter = this._gdmClient.get_greeter_sync(null);
|
||||
|
||||
this._defaultSessionChangedId = this._greeter.connect('default-session-name-changed',
|
||||
@@ -832,7 +832,7 @@ var LoginDialog = GObject.registerClass({
|
||||
}
|
||||
|
||||
_onReset(authPrompt, beginRequest) {
|
||||
- this._resetGreeterProxy();
|
||||
+ this._ensureGreeterProxy();
|
||||
this._sessionMenuButton.updateSensitivity(true);
|
||||
|
||||
this._user = null;
|
||||
--
|
||||
2.54.0
|
||||
|
||||
|
||||
From fb0f4366393fef39e13a2b233c57900db6661198 Mon Sep 17 00:00:00 2001
|
||||
From: Joan Torres Lopez <joantolo@redhat.com>
|
||||
Date: Wed, 17 Jun 2026 09:56:25 +0200
|
||||
Subject: [PATCH 2/5] gdm/loginDialog: Reset the greeter proxy on connection
|
||||
closed
|
||||
|
||||
If gdm fails to start the display session the greeter proxy we are using
|
||||
gets disconnected, however since commit 56ea95f2 we are now preserving
|
||||
the greeter instance, and this will eventually lead to using an instance
|
||||
of a disconnected proxy.
|
||||
|
||||
This eventually implies that after a login failure, we would never get
|
||||
the `::session-opened` signal that actually triggers the session start.
|
||||
|
||||
And thus, even the user has properly authenticated, gdm will stick to
|
||||
the authentication page.
|
||||
|
||||
So, instead of reverting such commit (that isn't wrong per se), consume
|
||||
the greeter proxy connection `::closed` signal and use it to
|
||||
re-initialize the greeter instance.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3885>
|
||||
---
|
||||
js/gdm/loginDialog.js | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
|
||||
index c5e8853..613b97e 100644
|
||||
--- a/js/gdm/loginDialog.js
|
||||
+++ b/js/gdm/loginDialog.js
|
||||
@@ -822,6 +822,14 @@ var LoginDialog = GObject.registerClass({
|
||||
|
||||
this._greeter = this._gdmClient.get_greeter_sync(null);
|
||||
|
||||
+ this._greeterConnectionClosedId =
|
||||
+ this._greeter.get_connection().connect('closed', conn => {
|
||||
+ conn.disconnect(this._greeterConnectionClosedId);
|
||||
+ this._greeterConnectionClosedId = 0;
|
||||
+ this._greeter = null;
|
||||
+ this._ensureGreeterProxy();
|
||||
+ });
|
||||
+
|
||||
this._defaultSessionChangedId = this._greeter.connect('default-session-name-changed',
|
||||
this._onDefaultSessionChanged.bind(this));
|
||||
this._sessionOpenedId = this._greeter.connect('session-opened',
|
||||
@@ -1191,6 +1199,10 @@ var LoginDialog = GObject.registerClass({
|
||||
this._settings = null;
|
||||
}
|
||||
if (this._greeter) {
|
||||
+ if (this._greeterConnectionClosedId) {
|
||||
+ this._greeter.get_connection().disconnect(this._greeterConnectionClosedId);
|
||||
+ this._greeterConnectionClosedId = 0;
|
||||
+ }
|
||||
this._greeter.disconnect(this._defaultSessionChangedId);
|
||||
this._greeter.disconnect(this._sessionOpenedId);
|
||||
this._greeter.disconnect(this._timedLoginRequestedId);
|
||||
--
|
||||
2.54.0
|
||||
|
||||
|
||||
From be05549008e57ac8f73211abf43e183eeb661292 Mon Sep 17 00:00:00 2001
|
||||
From: Joan Torres Lopez <joantolo@redhat.com>
|
||||
Date: Wed, 17 Jun 2026 10:03:00 +0200
|
||||
Subject: [PATCH 3/5] gdm/util: Clear the request if user verifier connection
|
||||
is closed
|
||||
|
||||
Similarly to previous commit, in case the user verifier connection is
|
||||
closed we should just clear the user verifier instance, since starting
|
||||
from this point is going to be just invalid.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3885>
|
||||
---
|
||||
js/gdm/util.js | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/js/gdm/util.js b/js/gdm/util.js
|
||||
index 9e24913..5a5df21 100644
|
||||
--- a/js/gdm/util.js
|
||||
+++ b/js/gdm/util.js
|
||||
@@ -190,6 +190,10 @@ var ShellUserVerifier = class {
|
||||
|
||||
_clearUserVerifier() {
|
||||
if (this._userVerifier) {
|
||||
+ if (this._userVerifierConnectionClosedId) {
|
||||
+ this._userVerifier.get_connection().disconnect(this._userVerifierConnectionClosedId);
|
||||
+ this._userVerifierConnectionClosedId = 0;
|
||||
+ }
|
||||
this._userVerifier.run_dispose();
|
||||
this._userVerifier = null;
|
||||
if (this._userVerifierChoiceList) {
|
||||
@@ -370,6 +374,9 @@ var ShellUserVerifier = class {
|
||||
return;
|
||||
}
|
||||
|
||||
+ this._userVerifierConnectionClosedId =
|
||||
+ this._userVerifier.get_connection().connect('closed', () => this.clear());
|
||||
+
|
||||
if (client.get_user_verifier_choice_list)
|
||||
this._userVerifierChoiceList = client.get_user_verifier_choice_list();
|
||||
else
|
||||
@@ -392,6 +399,9 @@ var ShellUserVerifier = class {
|
||||
return;
|
||||
}
|
||||
|
||||
+ this._userVerifierConnectionClosedId =
|
||||
+ this._userVerifier.get_connection().connect('closed', () => this.clear());
|
||||
+
|
||||
if (client.get_user_verifier_choice_list)
|
||||
this._userVerifierChoiceList = client.get_user_verifier_choice_list();
|
||||
else
|
||||
--
|
||||
2.54.0
|
||||
|
||||
|
||||
From 87cef60e36c5ca402364f5cc99fb6ce834cf4827 Mon Sep 17 00:00:00 2001
|
||||
From: Joan Torres Lopez <joantolo@redhat.com>
|
||||
Date: Wed, 17 Jun 2026 10:06:32 +0200
|
||||
Subject: [PATCH 4/5] gdm/util: Do not run dispose on user verifier
|
||||
|
||||
This is not a good habit anywhere and especially in JS code, I assume
|
||||
the rationale for this was to ensure that cached instances of the proxy
|
||||
were cleared, but this did not work properly (as it happened on
|
||||
finalize), and it would still require [1].
|
||||
|
||||
So let's just avoid this and assume that the getters just return what we
|
||||
expect.
|
||||
|
||||
[1] https://gitlab.gnome.org/GNOME/gdm/-/merge_requests/321
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3885>
|
||||
---
|
||||
js/gdm/util.js | 6 +-----
|
||||
1 file changed, 1 insertion(+), 5 deletions(-)
|
||||
|
||||
diff --git a/js/gdm/util.js b/js/gdm/util.js
|
||||
index 5a5df21..58b5946 100644
|
||||
--- a/js/gdm/util.js
|
||||
+++ b/js/gdm/util.js
|
||||
@@ -194,12 +194,8 @@ var ShellUserVerifier = class {
|
||||
this._userVerifier.get_connection().disconnect(this._userVerifierConnectionClosedId);
|
||||
this._userVerifierConnectionClosedId = 0;
|
||||
}
|
||||
- this._userVerifier.run_dispose();
|
||||
this._userVerifier = null;
|
||||
- if (this._userVerifierChoiceList) {
|
||||
- this._userVerifierChoiceList.run_dispose();
|
||||
- this._userVerifierChoiceList = null;
|
||||
- }
|
||||
+ this._userVerifierChoiceList = null;
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.54.0
|
||||
|
||||
From 6b1fe48ea3b4dedae9344941e97f48a9a046c0a7 Mon Sep 17 00:00:00 2001
|
||||
From: Joan Torres Lopez <joantolo@redhat.com>
|
||||
Date: Wed, 17 Jun 2026 17:32:52 +0200
|
||||
Subject: [PATCH 5/5] gdm: Clear user verifier before starting new async operations
|
||||
in begin()
|
||||
|
||||
Move _clearUserVerifier() from the finish callbacks
|
||||
(_reauthenticationChannelOpened, _userVerifierGot) to the start of
|
||||
begin().
|
||||
|
||||
When a reauthentication retry happens, begin() creates a new
|
||||
cancellable and starts an async open_reauthentication_channel call.
|
||||
If the previous user verifier's connection 'closed' handler is still
|
||||
active, it can fire during the async operation and call this.clear(),
|
||||
which cancels the new cancellable. This causes the retry to fail with
|
||||
G_IO_ERROR_CANCELLED.
|
||||
|
||||
By clearing the user verifier at the start of begin(), the old
|
||||
connection's 'closed' handler is disconnected before the new
|
||||
cancellable is created, eliminating the window where closing the old
|
||||
connection can cancel the new operation.
|
||||
---
|
||||
js/gdm/util.js | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/js/gdm/util.js b/js/gdm/util.js
|
||||
index 58b5946..c86e638 100644
|
||||
--- a/js/gdm/util.js
|
||||
+++ b/js/gdm/util.js
|
||||
@@ -161,6 +161,7 @@ var ShellUserVerifier = class {
|
||||
}
|
||||
|
||||
begin(userName, hold) {
|
||||
+ this._clearUserVerifier();
|
||||
this._cancellable = new Gio.Cancellable();
|
||||
this._hold = hold;
|
||||
this._userName = userName;
|
||||
@@ -351,7 +352,6 @@ var ShellUserVerifier = class {
|
||||
|
||||
_reauthenticationChannelOpened(client, result) {
|
||||
try {
|
||||
- this._clearUserVerifier();
|
||||
this._userVerifier = client.open_reauthentication_channel_finish(result);
|
||||
} catch(e) {
|
||||
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
|
||||
@@ -386,7 +386,6 @@ var ShellUserVerifier = class {
|
||||
|
||||
_userVerifierGot(client, result) {
|
||||
try {
|
||||
- this._clearUserVerifier();
|
||||
this._userVerifier = client.get_user_verifier_finish(result);
|
||||
} catch(e) {
|
||||
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
|
||||
--
|
||||
2.54.0
|
||||
|
||||
@ -1,115 +0,0 @@
|
||||
From 7909d2f989e937e9300933a718e1721bf7346d9d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Wed, 29 Jan 2025 02:46:44 +0100
|
||||
Subject: [PATCH] st/theme: Reuse stylesheets if possible
|
||||
|
||||
The following happens when processing an `@import()` rule:
|
||||
|
||||
1. `_st_theme_resolve_url()` to resolve file
|
||||
2. `insert_stylesheet()` to track file/sheet
|
||||
a. take ownership of file/sheet (ref)
|
||||
b. use file as key in `stylesheets_by_file` hash table
|
||||
c. use file as value in `files_by_stylesheet` hash table
|
||||
3. release reference to file
|
||||
|
||||
This leads to a refcount error when importing a file that
|
||||
was already parsed before:
|
||||
|
||||
1. file start with refcount 1
|
||||
2. `insert_stylesheet()`
|
||||
a. increases refcount to 2
|
||||
b. inserting into `stylesheets_by_file` *decreases* the
|
||||
passed-in key if the key already exists
|
||||
c. `files_by_stylesheet` now tracks a file with recount 1
|
||||
3. releases the last reference to file
|
||||
|
||||
The file object tracked in `files_by_stylesheet` is now invalid,
|
||||
and accessing it results in a crash.
|
||||
|
||||
Avoid this issue by reusing existing stylesheets, so we don't insert
|
||||
a stylesheet that's already tracked.
|
||||
|
||||
As a side-effect, this also saves us from re-parsing the same file
|
||||
unnecessarily.
|
||||
|
||||
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7306
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3619>
|
||||
---
|
||||
src/st/st-theme.c | 32 ++++++++++++++++++++++++++------
|
||||
1 file changed, 26 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/st/st-theme.c b/src/st/st-theme.c
|
||||
index b567f7e5e3..3ecaf5ed1b 100644
|
||||
--- a/src/st/st-theme.c
|
||||
+++ b/src/st/st-theme.c
|
||||
@@ -249,6 +249,27 @@ insert_stylesheet (StTheme *theme,
|
||||
g_hash_table_insert (theme->files_by_stylesheet, stylesheet, file);
|
||||
}
|
||||
|
||||
+static CRStyleSheet *
|
||||
+resolve_stylesheet (StTheme *theme,
|
||||
+ GFile *file,
|
||||
+ GError **error)
|
||||
+{
|
||||
+ CRStyleSheet *sheet;
|
||||
+
|
||||
+ sheet = g_hash_table_lookup (theme->stylesheets_by_file, file);
|
||||
+ if (sheet)
|
||||
+ {
|
||||
+ cr_stylesheet_ref (sheet);
|
||||
+ return sheet;
|
||||
+ }
|
||||
+
|
||||
+ sheet = parse_stylesheet (file, error);
|
||||
+ if (sheet)
|
||||
+ insert_stylesheet (theme, file, sheet);
|
||||
+
|
||||
+ return sheet;
|
||||
+}
|
||||
+
|
||||
gboolean
|
||||
st_theme_load_stylesheet (StTheme *theme,
|
||||
GFile *file,
|
||||
@@ -256,13 +277,12 @@ st_theme_load_stylesheet (StTheme *theme,
|
||||
{
|
||||
CRStyleSheet *stylesheet;
|
||||
|
||||
- stylesheet = parse_stylesheet (file, error);
|
||||
+ stylesheet = resolve_stylesheet (theme, file, error);
|
||||
if (!stylesheet)
|
||||
return FALSE;
|
||||
|
||||
stylesheet->app_data = GUINT_TO_POINTER (TRUE);
|
||||
|
||||
- insert_stylesheet (theme, file, stylesheet);
|
||||
cr_stylesheet_ref (stylesheet);
|
||||
theme->custom_stylesheets = g_slist_prepend (theme->custom_stylesheets, stylesheet);
|
||||
g_signal_emit (theme, signals[STYLESHEETS_CHANGED], 0);
|
||||
@@ -873,6 +893,7 @@ add_matched_properties (StTheme *a_this,
|
||||
|
||||
if (import_rule->sheet == NULL)
|
||||
{
|
||||
+ CRStyleSheet *sheet = NULL;
|
||||
GFile *file = NULL;
|
||||
|
||||
if (import_rule->url->stryng && import_rule->url->stryng->str)
|
||||
@@ -880,13 +901,12 @@ add_matched_properties (StTheme *a_this,
|
||||
file = _st_theme_resolve_url (a_this,
|
||||
a_nodesheet,
|
||||
import_rule->url->stryng->str);
|
||||
- import_rule->sheet = parse_stylesheet (file, NULL);
|
||||
+ sheet = resolve_stylesheet (a_this, file, NULL);
|
||||
}
|
||||
|
||||
- if (import_rule->sheet)
|
||||
+ if (sheet)
|
||||
{
|
||||
- insert_stylesheet (a_this, file, import_rule->sheet);
|
||||
- /* refcount of stylesheets starts off at zero, so we don't need to unref! */
|
||||
+ import_rule->sheet = sheet;
|
||||
}
|
||||
else
|
||||
{
|
||||
--
|
||||
2.49.0
|
||||
|
||||
@ -1,65 +0,0 @@
|
||||
From d45377eaf231ac7ffa10a453c984381f5987f8ef Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Tue, 28 Jul 2020 17:50:58 +0200
|
||||
Subject: [PATCH 1/2] popupMenu: Ungrab when removing active menu
|
||||
|
||||
While we do have some handling for removing the active menu, it has
|
||||
been a no-op for years. The bit that we really care about from the
|
||||
PopupMenuManager's point of view is the existing grab though. Drop
|
||||
that instead of calling _closeMenu() directly; ungrabbing will still
|
||||
call the method indirectly, and it will still be a no-op :-)
|
||||
|
||||
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3022
|
||||
---
|
||||
js/ui/popupMenu.js | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js
|
||||
index d30c15788c..f62ea9db5d 100644
|
||||
--- a/js/ui/popupMenu.js
|
||||
+++ b/js/ui/popupMenu.js
|
||||
@@ -1217,7 +1217,7 @@ var PopupMenuManager = class {
|
||||
|
||||
removeMenu(menu) {
|
||||
if (menu == this.activeMenu)
|
||||
- this._closeMenu(false, menu);
|
||||
+ this._grabHelper.ungrab({ actor: menu.actor });
|
||||
|
||||
let position = this._findMenu(menu);
|
||||
if (position == -1) // not a menu we manage
|
||||
--
|
||||
2.53.0
|
||||
|
||||
|
||||
From a9e97a09d0fdeab7de434710440e041fa51ea386 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Tue, 28 Jul 2020 18:52:53 +0200
|
||||
Subject: [PATCH 2/2] panelMenu: Destroy menu before chaining up
|
||||
|
||||
This avoid some (harmless but annoying) warnings, and is closer to
|
||||
the original code prior to commit fc342fe8c5 and 557b232c896.
|
||||
|
||||
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3022
|
||||
---
|
||||
js/ui/panelMenu.js | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/js/ui/panelMenu.js b/js/ui/panelMenu.js
|
||||
index bafafc11e6..eba1c7a1b0 100644
|
||||
--- a/js/ui/panelMenu.js
|
||||
+++ b/js/ui/panelMenu.js
|
||||
@@ -186,10 +186,9 @@ var Button = GObject.registerClass({
|
||||
}
|
||||
|
||||
_onDestroy() {
|
||||
- super._onDestroy();
|
||||
-
|
||||
if (this.menu)
|
||||
this.menu.destroy();
|
||||
+ super._onDestroy();
|
||||
}
|
||||
});
|
||||
|
||||
--
|
||||
2.53.0
|
||||
|
||||
47
SOURCES/optional-portal-helper.patch
Normal file
47
SOURCES/optional-portal-helper.patch
Normal file
@ -0,0 +1,47 @@
|
||||
diff --git a/js/portalHelper/main.js b/js/portalHelper/main.js
|
||||
index e163d6574..c61f3b381 100644
|
||||
--- a/js/portalHelper/main.js
|
||||
+++ b/js/portalHelper/main.js
|
||||
@@ -1,6 +1,13 @@
|
||||
const Format = imports.format;
|
||||
const Gettext = imports.gettext;
|
||||
-const { Gio, GLib, GObject, Gtk, Pango, Soup, WebKit2: WebKit } = imports.gi;
|
||||
+const { Gio, GLib, GObject, Gtk, Pango, Soup } = imports.gi;
|
||||
+
|
||||
+let WebKit;
|
||||
+try {
|
||||
+ WebKit = imports.gi.WebKit2;
|
||||
+} catch {
|
||||
+ WebKit = null;
|
||||
+}
|
||||
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
@@ -340,6 +346,11 @@ function initEnvironment() {
|
||||
function main(argv) {
|
||||
initEnvironment();
|
||||
|
||||
+ if (!WebKit) {
|
||||
+ log('WebKit2 typelib is not installed, captive portal helper will be disabled');
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
if (!WebKit.WebContext.new_ephemeral) {
|
||||
log('WebKitGTK 2.16 is required for the portal-helper, see https://bugzilla.gnome.org/show_bug.cgi?id=780453');
|
||||
return 1;
|
||||
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
|
||||
index 421d2e7d2..13b6501e7 100644
|
||||
--- a/js/ui/status/network.js
|
||||
+++ b/js/ui/status/network.js
|
||||
@@ -2010,7 +2010,9 @@ var NMApplet = class extends PanelMenu.SystemIndicator {
|
||||
new PortalHelperProxy(Gio.DBus.session, 'org.gnome.Shell.PortalHelper',
|
||||
'/org/gnome/Shell/PortalHelper', (proxy, error) => {
|
||||
if (error) {
|
||||
- log('Error launching the portal helper: ' + error);
|
||||
+ // Timeout is expected if WebKit is unavailable
|
||||
+ if (!error.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.TIMED_OUT))
|
||||
+ log('Error launching the portal helper: ' + error);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -1,500 +0,0 @@
|
||||
From 6238062c4be992e64c9aa227c8cb3b9385a9778f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Wed, 12 Jun 2024 13:13:41 +0200
|
||||
Subject: [PATCH 1/3] network: Split out CaptivePortalHandler class
|
||||
|
||||
The handling of captive portals is going to be extended a bit,
|
||||
so split out a proper class instead of mixing it in with the
|
||||
indicator code.
|
||||
---
|
||||
js/ui/status/network.js | 154 ++++++++++++++++++++++------------------
|
||||
1 file changed, 84 insertions(+), 70 deletions(-)
|
||||
|
||||
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
|
||||
index ef04f7f3dd..67e8f36397 100644
|
||||
--- a/js/ui/status/network.js
|
||||
+++ b/js/ui/status/network.js
|
||||
@@ -1658,6 +1658,78 @@ var DeviceCategory = class extends PopupMenu.PopupMenuSection {
|
||||
}
|
||||
};
|
||||
|
||||
+class CaptivePortalHandler {
|
||||
+ constructor(checkUri) {
|
||||
+ this._checkUri = checkUri;
|
||||
+ this._connectivityQueue = new Set();
|
||||
+ this._portalHelperProxy = null;
|
||||
+ }
|
||||
+
|
||||
+ addConnection(path) {
|
||||
+ if (this._connectivityQueue.has(path))
|
||||
+ return;
|
||||
+
|
||||
+ this._launchPortalHelper(path);
|
||||
+ }
|
||||
+
|
||||
+ removeConnection(path) {
|
||||
+ if (this._connectivityQueue.delete(path) && this._portalHelperProxy)
|
||||
+ this._portalHelperProxy.CloseRemote(path);
|
||||
+ }
|
||||
+
|
||||
+ _portalHelperDone(parameters) {
|
||||
+ const [path, result] = parameters;
|
||||
+
|
||||
+ if (result === PortalHelperResult.CANCELLED) {
|
||||
+ // Keep the connection in the queue, so the user is not
|
||||
+ // spammed with more logins until we next flush the queue,
|
||||
+ // which will happen once they choose a better connection
|
||||
+ // or we get to full connectivity through other means
|
||||
+ } else if (result === PortalHelperResult.COMPLETED) {
|
||||
+ this.removeConnection(path);
|
||||
+ } else if (result === PortalHelperResult.RECHECK) {
|
||||
+ this.emit('recheck', path);
|
||||
+ } else {
|
||||
+ log(`Invalid result from portal helper: ${result}`);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ _launchPortalHelper(path) {
|
||||
+ const timestamp = global.get_current_time();
|
||||
+ if (this._portalHelperProxy) {
|
||||
+ this._portalHelperProxy.AuthenticateRemote(path, this._checkUri, timestamp);
|
||||
+ } else {
|
||||
+ new PortalHelperProxy(Gio.DBus.session,
|
||||
+ 'org.gnome.Shell.PortalHelper',
|
||||
+ '/org/gnome/Shell/PortalHelper',
|
||||
+ (proxy, error) => {
|
||||
+ if (error) {
|
||||
+ log(`Error launching the portal helper: ${e.message}`);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ this._portalHelperProxy = proxy;
|
||||
+ this._portalHelperProxy.connectSignal('Done',
|
||||
+ (proxy, emitter, params) => {
|
||||
+ this._portalHelperDone(params);
|
||||
+ });
|
||||
+ this._portalHelperProxy.AuthenticateRemote(path, this._checkUri, timestamp);
|
||||
+ });
|
||||
+ }
|
||||
+
|
||||
+ this._connectivityQueue.add(path);
|
||||
+ }
|
||||
+
|
||||
+ clear() {
|
||||
+ if (this._portalHelperProxy) {
|
||||
+ for (const item of this._connectivityQueue)
|
||||
+ this._portalHelperProxy.CloseRemote(item);
|
||||
+ }
|
||||
+ this._connectivityQueue.clear();
|
||||
+ }
|
||||
+}
|
||||
+Signals.addSignalMethods(CaptivePortalHandler.prototype);
|
||||
+
|
||||
var NMApplet = class extends PanelMenu.SystemIndicator {
|
||||
constructor() {
|
||||
super();
|
||||
@@ -1713,6 +1785,16 @@ var NMApplet = class extends PanelMenu.SystemIndicator {
|
||||
this._vpnSection.connect('icon-changed', this._updateIcon.bind(this));
|
||||
this.menu.addMenuItem(this._vpnSection.item);
|
||||
|
||||
+ const {connectivityCheckUri} = this._client;
|
||||
+ this._portalHandler = new CaptivePortalHandler(connectivityCheckUri);
|
||||
+ this._portalHandler.connect('recheck', async (o, path) => {
|
||||
+ try {
|
||||
+ const state = await this._client.check_connectivity_async(null);
|
||||
+ if (state >= NM.ConnectivityState.FULL)
|
||||
+ this._portalHandler.removeConnection(path);
|
||||
+ } catch (e) { }
|
||||
+ });
|
||||
+
|
||||
this._readConnections();
|
||||
this._readDevices();
|
||||
this._syncNMState();
|
||||
@@ -2029,54 +2111,10 @@ var NMApplet = class extends PanelMenu.SystemIndicator {
|
||||
this._syncConnectivity();
|
||||
}
|
||||
|
||||
- _flushConnectivityQueue() {
|
||||
- if (this._portalHelperProxy) {
|
||||
- for (let item of this._connectivityQueue)
|
||||
- this._portalHelperProxy.CloseRemote(item);
|
||||
- }
|
||||
-
|
||||
- this._connectivityQueue = [];
|
||||
- }
|
||||
-
|
||||
- _closeConnectivityCheck(path) {
|
||||
- let index = this._connectivityQueue.indexOf(path);
|
||||
-
|
||||
- if (index >= 0) {
|
||||
- if (this._portalHelperProxy)
|
||||
- this._portalHelperProxy.CloseRemote(path);
|
||||
-
|
||||
- this._connectivityQueue.splice(index, 1);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- _portalHelperDone(proxy, emitter, parameters) {
|
||||
- let [path, result] = parameters;
|
||||
-
|
||||
- if (result == PortalHelperResult.CANCELLED) {
|
||||
- // Keep the connection in the queue, so the user is not
|
||||
- // spammed with more logins until we next flush the queue,
|
||||
- // which will happen once he chooses a better connection
|
||||
- // or we get to full connectivity through other means
|
||||
- } else if (result == PortalHelperResult.COMPLETED) {
|
||||
- this._closeConnectivityCheck(path);
|
||||
- return;
|
||||
- } else if (result == PortalHelperResult.RECHECK) {
|
||||
- this._client.check_connectivity_async(null, (client, result) => {
|
||||
- try {
|
||||
- let state = client.check_connectivity_finish(result);
|
||||
- if (state >= NM.ConnectivityState.FULL)
|
||||
- this._closeConnectivityCheck(path);
|
||||
- } catch(e) { }
|
||||
- });
|
||||
- } else {
|
||||
- log('Invalid result from portal helper: ' + result);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
_syncConnectivity() {
|
||||
if (this._mainConnection == null ||
|
||||
this._mainConnection.state != NM.ActiveConnectionState.ACTIVATED) {
|
||||
- this._flushConnectivityQueue();
|
||||
+ this._portalHandler.clear();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2091,31 +2129,7 @@ var NMApplet = class extends PanelMenu.SystemIndicator {
|
||||
if (!isPortal || Main.sessionMode.isGreeter)
|
||||
return;
|
||||
|
||||
- let path = this._mainConnection.get_path();
|
||||
- for (let item of this._connectivityQueue) {
|
||||
- if (item == path)
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- let timestamp = global.get_current_time();
|
||||
- if (this._portalHelperProxy) {
|
||||
- this._portalHelperProxy.AuthenticateRemote(path, '', timestamp);
|
||||
- } else {
|
||||
- new PortalHelperProxy(Gio.DBus.session, 'org.gnome.Shell.PortalHelper',
|
||||
- '/org/gnome/Shell/PortalHelper', (proxy, error) => {
|
||||
- if (error) {
|
||||
- log('Error launching the portal helper: ' + error);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- this._portalHelperProxy = proxy;
|
||||
- proxy.connectSignal('Done', this._portalHelperDone.bind(this));
|
||||
-
|
||||
- proxy.AuthenticateRemote(path, '', timestamp);
|
||||
- });
|
||||
- }
|
||||
-
|
||||
- this._connectivityQueue.push(path);
|
||||
+ this._portalHandler.addConnection(this._mainConnection.get_path());
|
||||
}
|
||||
|
||||
_updateIcon() {
|
||||
--
|
||||
2.45.2
|
||||
|
||||
|
||||
From c4cc99ff934e17b9c267022e6f4db25bb666df39 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Wed, 12 Jun 2024 13:13:41 +0200
|
||||
Subject: [PATCH 2/3] status/network: Show notification when detecting captive
|
||||
portal
|
||||
|
||||
When NetworkManager detects limited connectivity, we currently
|
||||
pop up the portal helper window immediately. This can both be
|
||||
disruptive when it happens unexpectedly, and unnoticeable
|
||||
when it happens during screen lock.
|
||||
|
||||
In any case, it seems better to not pop up a window without
|
||||
explicit user action, so instead show a notification that
|
||||
launches the portal window when activated.
|
||||
|
||||
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7688
|
||||
---
|
||||
js/ui/status/network.js | 39 +++++++++++++++++++++++++++++++++++----
|
||||
1 file changed, 35 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
|
||||
index 67e8f36397..3f3158aff8 100644
|
||||
--- a/js/ui/status/network.js
|
||||
+++ b/js/ui/status/network.js
|
||||
@@ -1662,19 +1662,44 @@ class CaptivePortalHandler {
|
||||
constructor(checkUri) {
|
||||
this._checkUri = checkUri;
|
||||
this._connectivityQueue = new Set();
|
||||
+ this._notifications = new Map();
|
||||
this._portalHelperProxy = null;
|
||||
}
|
||||
|
||||
- addConnection(path) {
|
||||
- if (this._connectivityQueue.has(path))
|
||||
+ addConnection(name, path) {
|
||||
+ if (this._connectivityQueue.has(path) || this._notifications.has(path))
|
||||
return;
|
||||
|
||||
- this._launchPortalHelper(path);
|
||||
+ const source = new MessageTray.Source(
|
||||
+ _('System'),
|
||||
+ 'emblem-system-symbolic');
|
||||
+ Main.messageTray.add(source);
|
||||
+
|
||||
+ const notification = new MessageTray.Notification(
|
||||
+ source, _('Sign Into Wi–Fi Network'), name);
|
||||
+ notification.connect('activated',
|
||||
+ () => this._onNotificationActivated(path).catch(logError));
|
||||
+ notification.connect('destroy',
|
||||
+ () => this._notifications.delete(path));
|
||||
+ this._notifications.set(path, notification);
|
||||
+ source.notify(notification);
|
||||
}
|
||||
|
||||
+
|
||||
removeConnection(path) {
|
||||
if (this._connectivityQueue.delete(path) && this._portalHelperProxy)
|
||||
this._portalHelperProxy.CloseRemote(path);
|
||||
+ const notification = this._notifications.get(path);
|
||||
+ if (notification)
|
||||
+ notification.destroy(MessageTray.NotificationDestroyedReason.SOURCE_CLOSED);
|
||||
+ this._notifications.delete(path);
|
||||
+ }
|
||||
+
|
||||
+ _onNotificationActivated(path) {
|
||||
+ this._launchPortalHelper(path);
|
||||
+
|
||||
+ Main.overview.hide();
|
||||
+ Main.panel.closeCalendar();
|
||||
}
|
||||
|
||||
_portalHelperDone(parameters) {
|
||||
@@ -1726,6 +1751,10 @@ class CaptivePortalHandler {
|
||||
this._portalHelperProxy.CloseRemote(item);
|
||||
}
|
||||
this._connectivityQueue.clear();
|
||||
+
|
||||
+ for (const n of this._notifications.values())
|
||||
+ n.destroy(MessageTray.NotificationDestroyedReason.SOURCE_CLOSED);
|
||||
+ this._notifications.clear();
|
||||
}
|
||||
}
|
||||
Signals.addSignalMethods(CaptivePortalHandler.prototype);
|
||||
@@ -2129,7 +2158,9 @@ var NMApplet = class extends PanelMenu.SystemIndicator {
|
||||
if (!isPortal || Main.sessionMode.isGreeter)
|
||||
return;
|
||||
|
||||
- this._portalHandler.addConnection(this._mainConnection.get_path());
|
||||
+ this._portalHandler.addConnection(
|
||||
+ this._mainConnection.get_id(),
|
||||
+ this._mainConnection.get_path());
|
||||
}
|
||||
|
||||
_updateIcon() {
|
||||
--
|
||||
2.45.2
|
||||
|
||||
|
||||
From 3928c3ba5cd79bdcd9092d699af6b086cf00e76f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Wed, 12 Jun 2024 13:13:41 +0200
|
||||
Subject: [PATCH 3/3] build: Add option to disable portal-helper
|
||||
|
||||
The portal login window uses WebKit, which is a security-sensitive
|
||||
component that not all vendors want to support.
|
||||
|
||||
Support that case with a build option, and update the captive
|
||||
portal handler to use the user's default browser if the portal-helper
|
||||
is disabled.
|
||||
---
|
||||
data/icons/meson.build | 10 +++++++++-
|
||||
data/meson.build | 2 +-
|
||||
js/meson.build | 14 ++++++++------
|
||||
js/misc/config.js.in | 2 ++
|
||||
js/misc/meson.build | 1 +
|
||||
js/ui/status/network.js | 15 +++++++++++----
|
||||
meson.build | 5 +++++
|
||||
meson_options.txt | 6 ++++++
|
||||
src/meson.build | 2 +-
|
||||
9 files changed, 44 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/data/icons/meson.build b/data/icons/meson.build
|
||||
index eff6e4b530..277df017b2 100644
|
||||
--- a/data/icons/meson.build
|
||||
+++ b/data/icons/meson.build
|
||||
@@ -1 +1,9 @@
|
||||
-install_subdir('hicolor', install_dir: icondir)
|
||||
+excluded_icons=[]
|
||||
+if not have_portal_helper
|
||||
+ excluded_icons += [
|
||||
+ 'scalable/apps/org.gnome.Shell.CaptivePortal.svg',
|
||||
+ 'symbolic/apps/org.gnome.Shell.CaptivePortal-symbolic.svg',
|
||||
+ ]
|
||||
+endif
|
||||
+install_subdir('hicolor',
|
||||
+ install_dir: icondir, exclude_files: excluded_icons)
|
||||
diff --git a/data/meson.build b/data/meson.build
|
||||
index 33edb58c44..decc9fe091 100644
|
||||
--- a/data/meson.build
|
||||
+++ b/data/meson.build
|
||||
@@ -4,7 +4,7 @@ desktop_files = [
|
||||
]
|
||||
service_files = []
|
||||
|
||||
-if have_networkmanager
|
||||
+if have_portal_helper
|
||||
desktop_files += 'org.gnome.Shell.PortalHelper.desktop'
|
||||
service_files += 'org.gnome.Shell.PortalHelper.service'
|
||||
endif
|
||||
diff --git a/js/meson.build b/js/meson.build
|
||||
index 4a572c53ff..ced1311805 100644
|
||||
--- a/js/meson.build
|
||||
+++ b/js/meson.build
|
||||
@@ -7,12 +7,14 @@ js_resources = gnome.compile_resources(
|
||||
dependencies: [config_js]
|
||||
)
|
||||
|
||||
-portal_resources = gnome.compile_resources(
|
||||
- 'portal-resources', 'portal-resources.gresource.xml',
|
||||
- source_dir: ['.', meson.current_build_dir()],
|
||||
- c_name: 'portal_js_resources',
|
||||
- dependencies: [config_js]
|
||||
-)
|
||||
+if have_portal_helper
|
||||
+ portal_resources = gnome.compile_resources(
|
||||
+ 'portal-resources', 'portal-resources.gresource.xml',
|
||||
+ source_dir: ['.', meson.current_build_dir()],
|
||||
+ c_name: 'portal_js_resources',
|
||||
+ dependencies: [config_js]
|
||||
+ )
|
||||
+endif
|
||||
|
||||
prefs_resources = gnome.compile_resources(
|
||||
'prefs-resources', 'prefs-resources.gresource.xml',
|
||||
diff --git a/js/misc/config.js.in b/js/misc/config.js.in
|
||||
index 065d7a0a2a..dc14d6d095 100644
|
||||
--- a/js/misc/config.js.in
|
||||
+++ b/js/misc/config.js.in
|
||||
@@ -8,6 +8,8 @@ var PACKAGE_VERSION = '@PACKAGE_VERSION@';
|
||||
var HAVE_BLUETOOTH = @HAVE_BLUETOOTH@;
|
||||
/* 1 if networkmanager is available, 0 otherwise */
|
||||
var HAVE_NETWORKMANAGER = @HAVE_NETWORKMANAGER@;
|
||||
+/* 1 if portal helper is enabled, 0 otherwise */
|
||||
+var HAVE_PORTAL_HELPER = @HAVE_PORTAL_HELPER@;
|
||||
/* gettext package */
|
||||
var GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@';
|
||||
/* locale dir */
|
||||
diff --git a/js/misc/meson.build b/js/misc/meson.build
|
||||
index 5a4871762a..448a61556b 100644
|
||||
--- a/js/misc/meson.build
|
||||
+++ b/js/misc/meson.build
|
||||
@@ -5,6 +5,7 @@ jsconf.set('GETTEXT_PACKAGE', meson.project_name())
|
||||
jsconf.set('LIBMUTTER_API_VERSION', mutter_api_version)
|
||||
jsconf.set10('HAVE_BLUETOOTH', bt_dep.found())
|
||||
jsconf.set10('HAVE_NETWORKMANAGER', have_networkmanager)
|
||||
+jsconf.set10('HAVE_PORTAL_HELPER', have_portal_helper)
|
||||
jsconf.set('datadir', datadir)
|
||||
jsconf.set('libexecdir', libexecdir)
|
||||
jsconf.set('vpndir', vpndir)
|
||||
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
|
||||
index 3f3158aff8..b2c6679119 100644
|
||||
--- a/js/ui/status/network.js
|
||||
+++ b/js/ui/status/network.js
|
||||
@@ -4,6 +4,7 @@ const Mainloop = imports.mainloop;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const Animation = imports.ui.animation;
|
||||
+const Config = imports.misc.config;
|
||||
const Main = imports.ui.main;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
@@ -1678,7 +1679,7 @@ class CaptivePortalHandler {
|
||||
const notification = new MessageTray.Notification(
|
||||
source, _('Sign Into Wi–Fi Network'), name);
|
||||
notification.connect('activated',
|
||||
- () => this._onNotificationActivated(path).catch(logError));
|
||||
+ () => this._onNotificationActivated(path));
|
||||
notification.connect('destroy',
|
||||
() => this._notifications.delete(path));
|
||||
this._notifications.set(path, notification);
|
||||
@@ -1696,7 +1697,13 @@ class CaptivePortalHandler {
|
||||
}
|
||||
|
||||
_onNotificationActivated(path) {
|
||||
- this._launchPortalHelper(path);
|
||||
+ const context = global.create_app_launch_context(
|
||||
+ global.get_current_time(), -1);
|
||||
+
|
||||
+ if (Config.HAVE_PORTAL_HELPER)
|
||||
+ this._launchPortalHelper(path, context);
|
||||
+ else
|
||||
+ Gio.AppInfo.launch_default_for_uri(this._checkUri, context);
|
||||
|
||||
Main.overview.hide();
|
||||
Main.panel.closeCalendar();
|
||||
@@ -1719,8 +1726,8 @@ class CaptivePortalHandler {
|
||||
}
|
||||
}
|
||||
|
||||
- _launchPortalHelper(path) {
|
||||
- const timestamp = global.get_current_time();
|
||||
+ _launchPortalHelper(path, context) {
|
||||
+ const {timestamp} = context;
|
||||
if (this._portalHelperProxy) {
|
||||
this._portalHelperProxy.AuthenticateRemote(path, this._checkUri, timestamp);
|
||||
} else {
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 2dd1bbc7a3..7a5e4eb603 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -121,6 +121,11 @@ else
|
||||
have_networkmanager = false
|
||||
endif
|
||||
|
||||
+have_portal_helper = get_option('portal_helper')
|
||||
+if have_portal_helper and not have_networkmanager
|
||||
+ error('Portal helper requires networkmanager support')
|
||||
+endif
|
||||
+
|
||||
if get_option('systemd')
|
||||
libsystemd_dep = dependency('libsystemd')
|
||||
# XXX: see systemduserunitdir
|
||||
diff --git a/meson_options.txt b/meson_options.txt
|
||||
index 853ca98dce..1b8cd778ad 100644
|
||||
--- a/meson_options.txt
|
||||
+++ b/meson_options.txt
|
||||
@@ -16,6 +16,12 @@ option('networkmanager',
|
||||
description: 'Enable NetworkManager support'
|
||||
)
|
||||
|
||||
+option('portal_helper',
|
||||
+ type: 'boolean',
|
||||
+ value: true,
|
||||
+ description: 'Enable build-in network portal login'
|
||||
+)
|
||||
+
|
||||
option('systemd',
|
||||
type: 'boolean',
|
||||
value: true,
|
||||
diff --git a/src/meson.build b/src/meson.build
|
||||
index 2b911d3476..83037af1f8 100644
|
||||
--- a/src/meson.build
|
||||
+++ b/src/meson.build
|
||||
@@ -245,7 +245,7 @@ executable('gnome-shell-extension-prefs',
|
||||
)
|
||||
|
||||
|
||||
-if have_networkmanager
|
||||
+if have_portal_helper
|
||||
executable('gnome-shell-portal-helper',
|
||||
'gnome-shell-portal-helper.c', portal_resources,
|
||||
c_args: tools_cflags,
|
||||
--
|
||||
2.45.2
|
||||
|
||||
@ -1,12 +1,6 @@
|
||||
%if 0%{?rhel}
|
||||
%global portal_helper 0
|
||||
%else
|
||||
%global portal_helper 1
|
||||
%endif
|
||||
|
||||
Name: gnome-shell
|
||||
Version: 3.32.2
|
||||
Release: 60%{?dist}
|
||||
Release: 55%{?dist}
|
||||
Summary: Window management and application launching for GNOME
|
||||
|
||||
Group: User Interface/Desktops
|
||||
@ -17,109 +11,106 @@ URL: https://wiki.gnome.org/Projects/GnomeShell
|
||||
Source0: http://download.gnome.org/sources/gnome-shell/3.32/%{name}-%{version}.tar.xz
|
||||
|
||||
# Replace Epiphany with Firefox in the default favourite apps list
|
||||
Patch1001: gnome-shell-favourite-apps-firefox.patch
|
||||
Patch1002: gnome-shell-favourite-apps-yelp.patch
|
||||
Patch1003: gnome-shell-favourite-apps-terminal.patch
|
||||
Patch1: gnome-shell-favourite-apps-firefox.patch
|
||||
Patch2: gnome-shell-favourite-apps-yelp.patch
|
||||
Patch3: gnome-shell-favourite-apps-terminal.patch
|
||||
|
||||
# GDM/Lock stuff
|
||||
Patch2001: 0001-screenShield-unblank-when-inserting-smartcard.patch
|
||||
Patch2002: enforce-smartcard-at-unlock.patch
|
||||
Patch2003: disable-unlock-entry-until-question.patch
|
||||
Patch2004: allow-timed-login-with-no-user-list.patch
|
||||
Patch2005: 0001-data-install-process-working.svg-to-filesystem.patch
|
||||
Patch2006: 0001-loginDialog-make-info-messages-themed.patch
|
||||
Patch2007: 0001-gdm-add-AuthList-control.patch
|
||||
Patch2008: 0002-gdmUtil-enable-support-for-GDM-s-ChoiceList-PAM-exte.patch
|
||||
Patch2009: wake-up-on-deactivate.patch
|
||||
Patch2010: caps-lock-warning.patch
|
||||
Patch2011: gdm-networking.patch
|
||||
Patch2012: 0001-shellEntry-Disconnect-handler-on-destroy.patch
|
||||
Patch2013: fix-login-lock-screen.patch
|
||||
Patch2014: 0001-shellEntry-Determine-if-password-entry-from-content-.patch
|
||||
Patch2015: 0002-shellEntry-Give-password-menu-item-text-when-it-s-cr.patch
|
||||
Patch2016: 0003-shellEntry-Handle-password-item-from-dedication-func.patch
|
||||
Patch2017: 0004-shellEntry-Support-lockdown-of-Show-Text-menu-in-pas.patch
|
||||
Patch2018: 0005-shellEntry-Only-mask-text-in-password-entries.patch
|
||||
Patch2019: 0001-gdm-loginDialog-Reset-the-greeter-proxy-on-connectio.patch
|
||||
Patch12: 0001-screenShield-unblank-when-inserting-smartcard.patch
|
||||
Patch13: enforce-smartcard-at-unlock.patch
|
||||
Patch14: disable-unlock-entry-until-question.patch
|
||||
Patch15: allow-timed-login-with-no-user-list.patch
|
||||
Patch16: 0001-data-install-process-working.svg-to-filesystem.patch
|
||||
Patch17: 0001-loginDialog-make-info-messages-themed.patch
|
||||
Patch18: 0001-gdm-add-AuthList-control.patch
|
||||
Patch19: 0002-gdmUtil-enable-support-for-GDM-s-ChoiceList-PAM-exte.patch
|
||||
Patch20: wake-up-on-deactivate.patch
|
||||
Patch21: caps-lock-warning.patch
|
||||
Patch22: gdm-networking.patch
|
||||
Patch23: 0001-shellEntry-Disconnect-handler-on-destroy.patch
|
||||
Patch24: fix-login-lock-screen.patch
|
||||
Patch25: 0001-shellEntry-Determine-if-password-entry-from-content-.patch
|
||||
Patch26: 0002-shellEntry-Give-password-menu-item-text-when-it-s-cr.patch
|
||||
Patch27: 0003-shellEntry-Handle-password-item-from-dedication-func.patch
|
||||
Patch28: 0004-shellEntry-Support-lockdown-of-Show-Text-menu-in-pas.patch
|
||||
Patch29: 0005-shellEntry-Only-mask-text-in-password-entries.patch
|
||||
|
||||
# Misc.
|
||||
Patch3001: 0001-shellDBus-Add-a-DBus-method-to-load-a-single-extensi.patch
|
||||
Patch3002: 0001-extensions-Add-a-SESSION_MODE-extension-type.patch
|
||||
Patch3003: extension-updates.patch
|
||||
Patch3004: 0001-panel-add-an-icon-to-the-ActivitiesButton.patch
|
||||
Patch3005: 0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch
|
||||
Patch3006: 0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch
|
||||
Patch3007: 0001-shell-app-Handle-workspace-from-startup-notification.patch
|
||||
Patch3008: 0001-main-Dump-stack-on-segfaults-by-default.patch
|
||||
Patch3009: 0001-appDisplay-Show-full-app-name-on-hover.patch
|
||||
Patch3010: horizontal-workspace-support.patch
|
||||
Patch3011: 0001-animation-fix-unintentional-loop-while-polkit-dialog.patch
|
||||
Patch3012: 0001-workspacesView-Work-around-spurious-allocation-chang.patch
|
||||
Patch3013: 0001-layout-Make-the-hot-corner-optional.patch
|
||||
Patch3014: fix-app-view-leaks.patch
|
||||
Patch3015: root-warning.patch
|
||||
Patch3016: 0001-workspace-Pass-device-to-startDrag.patch
|
||||
Patch3017: 0001-a11y-Change-HC-icon-theme-first.patch
|
||||
Patch3018: perf-tool-wayland.patch
|
||||
Patch3019: 0001-padOsd-Re-query-action-labels-after-mode-switches.patch
|
||||
Patch3020: 0001-Do-not-change-Wacom-LEDs-through-g-s-d.patch
|
||||
Patch3021: 0001-st-texture-cache-Cancel-pending-requests-on-icon-the.patch
|
||||
Patch3022: introspect-backports.patch
|
||||
Patch3023: 0001-popupMenu-Handle-keypress-if-numlock-is-enabled.patch
|
||||
Patch3024: 0001-theme-Update-window-preview-style.patch
|
||||
Patch3025: warn-less.patch
|
||||
Patch3026: 0001-networkAgent-add-support-for-SAE-secrets.patch
|
||||
Patch3027: 0001-main-Unset-the-right-prevFocus-actor-after-the-focus.patch
|
||||
Patch3028: defend-against-corrupt-notifications.patch
|
||||
Patch3029: 0001-status-volume-Hide-sliders-initially.patch
|
||||
Patch3030: 0001-shell-recorder-Restore-cursor-recording.patch
|
||||
Patch3031: 0001-st-bin-Disallow-st_bin_set_child-with-already-parent.patch
|
||||
Patch3032: 0001-layout-Initialize-regions-unconditionally.patch
|
||||
Patch3033: fix-nm-device-settings.patch
|
||||
Patch3034: owe-support.patch
|
||||
Patch3035: 0001-windowMenu-Ignore-release.patch
|
||||
Patch3036: 0001-overview-Hide-the-overview-on-session-mode-hasOvervi.patch
|
||||
Patch3037: 0001-st-theme-Reuse-stylesheets-if-possible.patch
|
||||
Patch3038: fix-dropping-menu-grab.patch
|
||||
Patch30: 0001-shellDBus-Add-a-DBus-method-to-load-a-single-extensi.patch
|
||||
Patch31: 0001-extensions-Add-a-SESSION_MODE-extension-type.patch
|
||||
Patch32: extension-updates.patch
|
||||
Patch33: 0001-panel-add-an-icon-to-the-ActivitiesButton.patch
|
||||
Patch34: 0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch
|
||||
Patch35: 0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch
|
||||
Patch36: 0001-shell-app-Handle-workspace-from-startup-notification.patch
|
||||
Patch37: 0001-main-Dump-stack-on-segfaults-by-default.patch
|
||||
Patch38: 0001-appDisplay-Show-full-app-name-on-hover.patch
|
||||
Patch39: horizontal-workspace-support.patch
|
||||
Patch40: 0001-animation-fix-unintentional-loop-while-polkit-dialog.patch
|
||||
Patch41: 0001-workspacesView-Work-around-spurious-allocation-chang.patch
|
||||
Patch42: 0001-layout-Make-the-hot-corner-optional.patch
|
||||
Patch43: fix-app-view-leaks.patch
|
||||
Patch44: root-warning.patch
|
||||
Patch45: 0001-workspace-Pass-device-to-startDrag.patch
|
||||
Patch46: 0001-a11y-Change-HC-icon-theme-first.patch
|
||||
Patch47: perf-tool-wayland.patch
|
||||
Patch48: 0001-padOsd-Re-query-action-labels-after-mode-switches.patch
|
||||
Patch49: 0001-Do-not-change-Wacom-LEDs-through-g-s-d.patch
|
||||
Patch50: 0001-st-texture-cache-Cancel-pending-requests-on-icon-the.patch
|
||||
Patch51: introspect-backports.patch
|
||||
Patch52: 0001-popupMenu-Handle-keypress-if-numlock-is-enabled.patch
|
||||
Patch53: 0001-theme-Update-window-preview-style.patch
|
||||
Patch54: warn-less.patch
|
||||
Patch55: 0001-networkAgent-add-support-for-SAE-secrets.patch
|
||||
Patch56: 0001-main-Unset-the-right-prevFocus-actor-after-the-focus.patch
|
||||
Patch57: defend-against-corrupt-notifications.patch
|
||||
Patch58: 0001-status-volume-Hide-sliders-initially.patch
|
||||
Patch59: 0001-shell-recorder-Restore-cursor-recording.patch
|
||||
Patch60: 0001-st-bin-Disallow-st_bin_set_child-with-already-parent.patch
|
||||
Patch61: 0001-layout-Initialize-regions-unconditionally.patch
|
||||
Patch62: fix-nm-device-settings.patch
|
||||
Patch63: owe-support.patch
|
||||
Patch64: 0001-windowMenu-Ignore-release.patch
|
||||
Patch65: 0001-overview-Hide-the-overview-on-session-mode-hasOvervi.patch
|
||||
|
||||
# Backport JS invalid access warnings (#1651894, #1663171, #1642482, #1637622)
|
||||
Patch4001: fix-invalid-access-warnings.patch
|
||||
Patch4002: more-spurious-allocation-warnings.patch
|
||||
Patch4003: fix-some-js-warnings.patch
|
||||
Patch4004: fix-double-disposed-backgrounds.patch
|
||||
Patch70: fix-invalid-access-warnings.patch
|
||||
Patch71: more-spurious-allocation-warnings.patch
|
||||
Patch72: fix-some-js-warnings.patch
|
||||
Patch73: fix-double-disposed-backgrounds.patch
|
||||
|
||||
# Backport performance fixes under load (#1820760)
|
||||
Patch5001: 0001-environment-reduce-calls-to-g_time_zone_new_local.patch
|
||||
Patch5002: 0002-environment-Fix-date-conversion.patch
|
||||
Patch5003: 0003-shell-app-system-Monitor-for-icon-theme-changes.patch
|
||||
Patch5004: 0004-global-force-fsync-to-worker-thread-when-saving-stat.patch
|
||||
Patch5005: 0005-app-cache-add-ShellAppCache-for-GAppInfo-caching.patch
|
||||
Patch5006: 0006-js-Always-use-AppSystem-to-lookup-apps.patch
|
||||
Patch80: 0001-environment-reduce-calls-to-g_time_zone_new_local.patch
|
||||
Patch81: 0002-environment-Fix-date-conversion.patch
|
||||
Patch82: 0003-shell-app-system-Monitor-for-icon-theme-changes.patch
|
||||
Patch83: 0004-global-force-fsync-to-worker-thread-when-saving-stat.patch
|
||||
Patch84: 0005-app-cache-add-ShellAppCache-for-GAppInfo-caching.patch
|
||||
Patch85: 0006-js-Always-use-AppSystem-to-lookup-apps.patch
|
||||
|
||||
# Stop screen recording on monitor changes (#1705392)
|
||||
Patch6001: 0001-screencast-Stop-recording-when-screen-size-or-resour.patch
|
||||
Patch90: 0001-screencast-Stop-recording-when-screen-size-or-resour.patch
|
||||
|
||||
# Backport OSK fixes (#1871041)
|
||||
Patch7001: osk-fixes.patch
|
||||
Patch7002: 0001-keyboard-Only-enable-keyboard-if-ClutterDeviceManage.patch
|
||||
Patch95: osk-fixes.patch
|
||||
Patch96: 0001-keyboard-Only-enable-keyboard-if-ClutterDeviceManage.patch
|
||||
|
||||
# suspend/resume fix on nvidia (#1663440)
|
||||
Patch8001: 0001-background-refresh-after-suspend-on-wayland.patch
|
||||
Patch8002: 0002-background-rebuild-background-not-just-animation-on-.patch
|
||||
Patch8003: 0003-st-texture-cache-purge-on-resume.patch
|
||||
Patch8004: 0004-background-refresh-background-on-gl-video-memory-pur.patch
|
||||
Patch10001: 0001-background-refresh-after-suspend-on-wayland.patch
|
||||
Patch10002: 0002-background-rebuild-background-not-just-animation-on-.patch
|
||||
Patch10003: 0003-st-texture-cache-purge-on-resume.patch
|
||||
Patch10004: 0004-background-refresh-background-on-gl-video-memory-pur.patch
|
||||
|
||||
# Allow login screen extensions (#1651378)
|
||||
Patch9001: 0001-extensionSystem-Handle-added-or-removed-sessionMode-.patch
|
||||
Patch9002: 0002-extensionSystem-Get-rid-of-_enabled-boolean-optimiza.patch
|
||||
Patch9003: 0003-extensionSystem-Allow-extensions-to-run-on-the-login.patch
|
||||
Patch9004: 0004-sessionMode-Allow-extensions-at-the-login-and-unlock.patch
|
||||
Patch20001: 0001-extensionSystem-Handle-added-or-removed-sessionMode-.patch
|
||||
Patch20002: 0002-extensionSystem-Get-rid-of-_enabled-boolean-optimiza.patch
|
||||
Patch20003: 0003-extensionSystem-Allow-extensions-to-run-on-the-login.patch
|
||||
Patch20004: 0004-sessionMode-Allow-extensions-at-the-login-and-unlock.patch
|
||||
|
||||
# CVE-2020-17489
|
||||
Patch10001: 0001-loginDialog-Reset-auth-prompt-on-vt-switch-before-fa.patch
|
||||
Patch30001: 0001-loginDialog-Reset-auth-prompt-on-vt-switch-before-fa.patch
|
||||
|
||||
# Disable captive portal helper if WebKitGTK is not installed (RHEL-10488)
|
||||
Patch11001: portal-notify.patch
|
||||
Patch40001: optional-portal-helper.patch
|
||||
|
||||
%define libcroco_version 0.6.8
|
||||
%define eds_version 3.17.2
|
||||
@ -180,7 +171,7 @@ Requires: gnome-bluetooth%{?_isa} >= %{gnome_bluetooth_version}
|
||||
Requires: gnome-desktop3%{?_isa} >= %{gnome_desktop_version}
|
||||
%if 0%{?rhel} != 7
|
||||
# Disabled on RHEL 7 to allow logging into KDE session by default
|
||||
Recommends: gnome-session-xsession
|
||||
Requires: gnome-session-xsession
|
||||
%endif
|
||||
# wrapper script uses to restart old GNOME session if run --replace
|
||||
# from the command line
|
||||
@ -232,13 +223,7 @@ easy to use experience.
|
||||
%autosetup -S git
|
||||
|
||||
%build
|
||||
%meson \
|
||||
%if %{portal_helper}
|
||||
-Dportal_helper=true \
|
||||
%else
|
||||
-Dportal_helper=false \
|
||||
%endif
|
||||
%{nil}
|
||||
%meson
|
||||
%meson_build
|
||||
|
||||
%install
|
||||
@ -267,10 +252,12 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/evolution-calendar.de
|
||||
%{_datadir}/applications/org.gnome.Shell.desktop
|
||||
%{_datadir}/applications/gnome-shell-extension-prefs.desktop
|
||||
%{_datadir}/applications/evolution-calendar.desktop
|
||||
%{_datadir}/applications/org.gnome.Shell.PortalHelper.desktop
|
||||
%{_datadir}/gnome-control-center/keybindings/50-gnome-shell-system.xml
|
||||
%{_datadir}/gnome-shell/
|
||||
%{_datadir}/dbus-1/services/org.gnome.Shell.CalendarServer.service
|
||||
%{_datadir}/dbus-1/services/org.gnome.Shell.HotplugSniffer.service
|
||||
%{_datadir}/dbus-1/services/org.gnome.Shell.PortalHelper.service
|
||||
%{_datadir}/dbus-1/interfaces/org.gnome.Shell.Extensions.xml
|
||||
%{_datadir}/dbus-1/interfaces/org.gnome.Shell.Introspect.xml
|
||||
%{_datadir}/dbus-1/interfaces/org.gnome.Shell.PadOsd.xml
|
||||
@ -292,6 +279,7 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/evolution-calendar.de
|
||||
%{_libexecdir}/gnome-shell-calendar-server
|
||||
%{_libexecdir}/gnome-shell-perf-helper
|
||||
%{_libexecdir}/gnome-shell-hotplug-sniffer
|
||||
%{_libexecdir}/gnome-shell-portal-helper
|
||||
%{_libexecdir}/gnome-shell-overrides-migration.sh
|
||||
# Co own these directories instead of pulling in GConf
|
||||
# after all, we are trying to get rid of GConf with these files
|
||||
@ -300,34 +288,7 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/evolution-calendar.de
|
||||
%{_datadir}/GConf/gsettings/gnome-shell-overrides.convert
|
||||
%{_mandir}/man1/%{name}.1.gz
|
||||
|
||||
%if %{portal_helper}
|
||||
%{_datadir}/applications/org.gnome.Shell.PortalHelper.desktop
|
||||
%{_datadir}/dbus-1/services/org.gnome.Shell.PortalHelper.service
|
||||
%{_libexecdir}/gnome-shell-portal-helper
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Wed Jun 17 2026 Joan Torres Lopez <joantolo@redhat.com> - 3.32.2-60
|
||||
- Backport fix to recover userVerifier
|
||||
Resolves: RHEL-185731
|
||||
|
||||
* Wed May 13 2026 Florian Müllner <fmuellner@redhat.com> - 3.32.2-59
|
||||
- Fix dropping menu grab on destroy
|
||||
Resolves: RHEL-171948
|
||||
|
||||
* Thu Aug 21 2025 Joan Torres Lopez <joantolo@redhat.com> - 3.32.2-58
|
||||
- Don't hard depend on gnome-session-xsession to allow
|
||||
using other session types, e.g. wayland
|
||||
Resolves: RHEL-110531
|
||||
|
||||
* Thu May 15 2025 Florian Müllner <fmuellner@redhat.com> - 3.32.2-57
|
||||
- Fix refcount issue in stylesheet tracking
|
||||
Resolves: RHEL-91810
|
||||
|
||||
* Wed Jul 10 2024 Florian Müllner <fmuellner@redhat.com> - 3.32.2-56
|
||||
- Only open portal login in response to user action
|
||||
Resolves: RHEL-39097
|
||||
|
||||
* Thu Dec 21 2023 Florian Müllner <fmuellner@redhat.com> - 3.32.2-55
|
||||
- Hide the overview on lock
|
||||
Resolves: RHEL-17349
|
||||
|
||||
Loading…
Reference in New Issue
Block a user