import CS gnome-shell-40.10-33.el9

This commit is contained in:
AlmaLinux RelEng Bot 2026-03-30 10:29:37 -04:00
parent 68628fa4d5
commit ee26bb5bd9
5 changed files with 324 additions and 20 deletions

View File

@ -197,25 +197,44 @@ closed on its side, the new session will start.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3134>
---
js/gdm/loginDialog.js | 77 ++++++++++++++++++++++++++++++++++++++++---
1 file changed, 73 insertions(+), 4 deletions(-)
.../org.freedesktop.login1.Session.xml | 1 +
js/gdm/loginDialog.js | 95 ++++++++++++++++++-
2 files changed, 92 insertions(+), 4 deletions(-)
diff --git a/data/dbus-interfaces/org.freedesktop.login1.Session.xml b/data/dbus-interfaces/org.freedesktop.login1.Session.xml
index ecab4bb..16dee1c 100644
--- a/data/dbus-interfaces/org.freedesktop.login1.Session.xml
+++ b/data/dbus-interfaces/org.freedesktop.login1.Session.xml
@@ -6,6 +6,7 @@
<property name="Class" type="s" access="read"/>
<property name="Id" type="s" access="read"/>
<property name="Name" type="s" access="read"/>
+ <property name="User" type="(uo)" access="read"/>
<property name="Remote" type="b" access="read"/>
<property name="Type" type="s" access="read"/>
<property name="State" type="s" access="read"/>
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
index 674ff24a5..25b86880d 100644
index 6cf8133..e3dac97 100644
--- a/js/gdm/loginDialog.js
+++ b/js/gdm/loginDialog.js
@@ -914,8 +914,8 @@ var LoginDialog = GObject.registerClass({
@@ -916,8 +916,14 @@ var LoginDialog = GObject.registerClass({
this._defaultSessionChangedId = this._greeter.connect('default-session-name-changed',
this._onDefaultSessionChanged.bind(this));
- this._sessionOpenedId = this._greeter.connect('session-opened',
- this._onSessionOpened.bind(this));
+ this._sessionOpenedId = this._greeter.connect('session-opened-with-session-id',
+ this._onSessionOpenedWithSessionId.bind(this));
+ // Connect to the new signal if available, otherwise fall back to the old signal
+ let signalId = GObject.signal_lookup('session-opened-with-session-id', this._greeter.constructor.$gtype);
+ if (signalId !== 0)
+ this._sessionOpenedId = this._greeter.connect('session-opened-with-session-id',
+ this._onSessionOpenedWithSessionId.bind(this));
+ else
+ this._sessionOpenedId = this._greeter.connect('session-opened',
+ this._onSessionOpened.bind(this));
this._timedLoginRequestedId = this._greeter.connect('timed-login-requested',
this._onTimedLoginRequested.bind(this));
}
@@ -1053,6 +1053,28 @@ var LoginDialog = GObject.registerClass({
@@ -1055,6 +1061,28 @@ var LoginDialog = GObject.registerClass({
});
}
@ -244,7 +263,7 @@ index 674ff24a5..25b86880d 100644
_startSession(serviceName) {
this._bindOpacity();
this.ease({
@@ -1066,8 +1088,55 @@ var LoginDialog = GObject.registerClass({
@@ -1068,8 +1096,67 @@ var LoginDialog = GObject.registerClass({
});
}
@ -261,24 +280,27 @@ index 674ff24a5..25b86880d 100644
+
+ async _findConflictingSession(startingSessionId) {
+ const loginManager = LoginManager.getLoginManager();
+ const sessions = await this._listSessions();
+ const [, , startingSessionOwner, ,] = sessions.find(([id, , , ,]) => id === startingSessionId);
+ for (const session of sessions.map(([id, , user, , path]) => ({id, user, path}))) {
+ if (startingSessionId === session.id)
+ let sessions = await this._listSessions();
+ sessions = sessions.map(([, , , , path]) => loginManager.getSession(path));
+ const startingSession = sessions.find(s => s.Id === startingSessionId);
+ for (const session of sessions) {
+ if (startingSession.Id === session.Id)
+ continue;
+
+ if (startingSessionOwner !== session.user)
+ if (startingSession.User[0] !== session.User[0]) // this is the uid
+ continue;
+
+ const sessionProxy = loginManager.getSession(session.path);
+
+ if (sessionProxy.Type !== 'wayland' && sessionProxy.Type !== 'x11')
+ if (startingSession.Type === 'x11' && session.Type === 'x11' &&
+ startingSession.Remote && session.Remote)
+ continue;
+
+ if (sessionProxy.State !== 'active' && sessionProxy.State !== 'online')
+ if (session.Type !== 'wayland' && session.Type !== 'x11')
+ continue;
+
+ return sessionProxy;
+ if (session.State !== 'active' && session.State !== 'online')
+ continue;
+
+ return session;
+ }
+
+ return null;
@ -298,12 +320,21 @@ index 674ff24a5..25b86880d 100644
+ } catch (error) {
+ logError(error, `Failed to start session '${sessionId}'`);
+ this._authPrompt.reset();
+ }
+ }
+
+ async _onSessionOpened(client, serviceName, sessionId) {
+ try {
+ this._authPrompt.finish(() => this._startSession(serviceName));
+ } catch (error) {
+ logError(error, `Failed to start session '${sessionId}'`);
+ this._authPrompt.reset();
+ }
}
_waitForItemForUser(userName) {
--
2.49.0
2.51.0
From b5dc399c0cdbecad7bd91bbae2287154e934981a Mon Sep 17 00:00:00 2001

View File

@ -0,0 +1,118 @@
From 1db8edbaf877a9ba8b972bd64871767866b3c9af Mon Sep 17 00:00:00 2001
From: Joan Torres Lopez <joantolo@redhat.com>
Date: Wed, 22 Oct 2025 13:32:15 +0200
Subject: [PATCH 1/2] authPrompt: Connect disable-show-password key with
password entry
---
js/gdm/authPrompt.js | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index e961f39..b6a323f 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -1,7 +1,7 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/* exported AuthPrompt */
-const { Clutter, GLib, GObject, Meta, Pango, Shell, St } = imports.gi;
+const { Clutter, Gio, GLib, GObject, Meta, Pango, Shell, St } = imports.gi;
const Animation = imports.ui.animation;
const AuthList = imports.gdm.authList;
@@ -20,6 +20,9 @@ var DEFAULT_BUTTON_WELL_ANIMATION_TIME = 300;
var MESSAGE_FADE_OUT_ANIMATION_TIME = 500;
+const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
+const DISABLE_SHOW_PASSWORD_KEY = 'disable-show-password';
+
var AuthPromptMode = {
UNLOCK_ONLY: 0,
UNLOCK_OR_LOG_IN: 1,
@@ -198,6 +201,11 @@ var AuthPrompt = GObject.registerClass({
this._mainBox.add_child(this._entry);
this._entry.grab_key_focus();
+ this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
+ this._lockdownSettings.connect(`changed::${DISABLE_SHOW_PASSWORD_KEY}`,
+ this._updateShowPasswordIcon.bind(this));
+ this._updateShowPasswordIcon();
+
this._timedLoginIndicator = new St.Bin({
style_class: 'login-dialog-timed-login-indicator',
scale_x: 0,
@@ -233,6 +241,13 @@ var AuthPrompt = GObject.registerClass({
this._defaultButtonWell.add_child(this._spinner);
}
+ _updateShowPasswordIcon() {
+ try {
+ const disableShowPassword = this._lockdownSettings.get_boolean(DISABLE_SHOW_PASSWORD_KEY);
+ this._passwordEntry.set_show_peek_icon(!disableShowPassword);
+ } catch (e) {}
+ }
+
showTimedLoginIndicator(time) {
let hold = new Batch.Hold();
--
2.51.0
From e308153f0d3cef060d38ffba0d781c4a53c6921a Mon Sep 17 00:00:00 2001
From: Joan Torres Lopez <joantolo@redhat.com>
Date: Wed, 22 Oct 2025 13:42:01 +0200
Subject: [PATCH 2/2] unlockDialog: Do not reset the auth prompt on every tap
Currently we have a tap event tracker that causes that every time a tap
happens in the lock screen, we reset the auth prompt and this can be
particularly annoying at least in three cases:
1. Just clicking everywhere in the screen may lead the unlock entry
content to be cleared
2. Clicking in the screen while an authentication is in progress,
cancels it
3. This may break a multi-factor authentication method, as a single
click may lead previous steps to be cancelled
So, while resetting the auth prompt is important when we're about to
show it, it's not something we want to do while an authentication has
started.
As per this also do not touch the auth prompt sensitivity unless we're
in an idle phase, or we may end up overriding the auth prompt state,
leading for example to a text entry being editable while we're verifying
the secret
Fixes: 37e55df29865dac13656116efdd7abec8056dea9
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3852>
---
js/ui/unlockDialog.js | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/js/ui/unlockDialog.js b/js/ui/unlockDialog.js
index 00e3eef..169043b 100644
--- a/js/ui/unlockDialog.js
+++ b/js/ui/unlockDialog.js
@@ -698,8 +698,15 @@ var UnlockDialog = GObject.registerClass({
this._promptBox.add_child(this._authPrompt);
}
- this._authPrompt.reset();
- this._authPrompt.updateSensitivity(true);
+ const {verificationStatus} = this._authPrompt;
+ switch (verificationStatus) {
+ case AuthPrompt.AuthPromptStatus.NOT_VERIFYING:
+ case AuthPrompt.AuthPromptStatus.VERIFICATION_CANCELLED:
+ case AuthPrompt.AuthPromptStatus.VERIFICATION_FAILED:
+ this._authPrompt.reset();
+ this._authPrompt.updateSensitivity(
+ verificationStatus === AuthPrompt.AuthPromptStatus.NOT_VERIFYING);
+ }
}
_maybeDestroyAuthPrompt() {
--
2.51.0

View File

@ -0,0 +1,46 @@
From 32a013304f8c507cb72a5419c7f4b7c553253520 Mon Sep 17 00:00:00 2001
From: Adrian Vovk <adrianvovk@gmail.com>
Date: Thu, 1 May 2025 18:34:52 -0400
Subject: [PATCH] main: Register session with GDM on startup
When no monitor is connected, gnome-shell starts but never emits
`startup-prepared` nor `startup-complete`. As a result, GDM never
detects that the shell has launched and plymouthd remains running,
preventing the system from reaching graphical.target.
Ensure that registerSessionWithGDM() is called even when no monitor
is connected, so GDM can terminate plymouthd and allow the system to
reach graphical.target properly.
Part of https://gitlab.gnome.org/GNOME/gdm/-/merge_requests/285
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3708>
---
js/ui/main.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/js/ui/main.js b/js/ui/main.js
index 7cfbba3..c753ab6 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -274,6 +274,8 @@ function _initializeUI() {
extensionManager = new ExtensionSystem.ExtensionManager();
extensionManager.init();
+ LoginManager.registerSessionWithGDM();
+
if (sessionMode.isGreeter && screenShield) {
layoutManager.connect('startup-prepared', () => {
screenShield.showDialog();
@@ -307,8 +309,6 @@ function _initializeUI() {
sessionMode.currentMode !== 'initial-setup')
_handleLockScreenWarning();
- LoginManager.registerSessionWithGDM();
-
let perfModuleName = GLib.getenv("SHELL_PERF_MODULE");
if (perfModuleName) {
let perfOutput = GLib.getenv("SHELL_PERF_OUTPUT");
--
2.51.0

View File

@ -0,0 +1,85 @@
From 8f6fe1b2290c112e2b4b75812e67ea82bdf7660d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Thu, 27 Nov 2025 14:28:16 +0100
Subject: [PATCH] shell/window-tracker: Track windows when finding app info
already
We'd get the Shell.App from the window, in order to get the app info for
find-app-info signal, but that had the side effect of creating and
starting the Shell.App instance, without tracking the window.
Fix this by simply fully tracking the window already at this stage.
---
src/shell-window-tracker.c | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/src/shell-window-tracker.c b/src/shell-window-tracker.c
index 2f2bd10eed..3d7c6bb2de 100644
--- a/src/shell-window-tracker.c
+++ b/src/shell-window-tracker.c
@@ -65,7 +65,7 @@ static void set_focus_app (ShellWindowTracker *tracker,
ShellApp *new_focus_app);
static void on_focus_window_changed (MetaDisplay *display, GParamSpec *spec, ShellWindowTracker *tracker);
-static void track_window (ShellWindowTracker *tracker, MetaWindow *window);
+static ShellApp * track_window (ShellWindowTracker *tracker, MetaWindow *window);
static void disassociate_window (ShellWindowTracker *tracker, MetaWindow *window);
static ShellApp * shell_startup_sequence_get_app (MetaStartupSequence *sequence);
@@ -543,7 +543,7 @@ on_window_unmanaged (MetaWindow *window,
disassociate_window (SHELL_WINDOW_TRACKER (user_data), window);
}
-static void
+static ShellApp *
track_window (ShellWindowTracker *self,
MetaWindow *window)
{
@@ -551,7 +551,7 @@ track_window (ShellWindowTracker *self,
app = get_app_for_window (self, window);
if (!app)
- return;
+ return NULL;
/* At this point we've stored the association from window -> application */
g_hash_table_insert (self->window_to_app, window, app);
@@ -564,6 +564,8 @@ track_window (ShellWindowTracker *self,
_shell_app_add_window (app, window);
g_signal_emit (self, signals[TRACKED_WINDOWS_CHANGED], 0);
+
+ return app;
}
static void
@@ -582,7 +584,10 @@ shell_window_tracker_on_window_added (MetaWorkspace *workspace,
MetaWindow *window,
gpointer user_data)
{
- track_window (SHELL_WINDOW_TRACKER (user_data), window);
+ ShellWindowTracker *self = user_data;
+
+ if (!g_hash_table_contains (self->window_to_app, window))
+ track_window (self, window);
}
static void
@@ -656,9 +661,12 @@ on_find_app_info (MetaDisplay *display,
MetaWindow *window,
ShellWindowTracker *tracker)
{
- g_autoptr (ShellApp) app = NULL;
+ ShellApp *app;
+
+ app = g_hash_table_lookup (tracker->window_to_app, window);
+ if (!app)
+ app = track_window (tracker, window);
- app = get_app_for_window (tracker, window);
if (!app)
return NULL;
--
2.47.3

View File

@ -8,7 +8,7 @@
Name: gnome-shell
Version: 40.10
Release: 28%{?dist}
Release: 33%{?dist}
Summary: Window management and application launching for GNOME
License: GPLv2+
@ -36,6 +36,8 @@ Patch17: fix-resetting-auth-prompt.patch
Patch18: 0001-authPrompt-Disregard-smartcard-status-changes-events.patch
Patch19: 0001-loginDialog-Show-session-menu-button-when-in-IN_PROG.patch
Patch20: 0001-systemActions-Optionally-allow-restart-shutdown-on-l.patch
Patch21: 0001-authPrompt-Connect-disable-show-password-key-with-pa.patch
Patch22: 0001-main-Register-session-with-GDM-on-startup.patch
# Misc.
Patch30: 0001-panel-add-an-icon-to-the-ActivitiesButton.patch
@ -75,6 +77,7 @@ Patch63: 0001-shell-window-tracker-Help-mutter-finding-app-info-s-.patch
Patch64: 0001-dnd-Don-t-leak-a-signal-connection.patch
Patch65: 0001-st-theme-Reuse-stylesheets-if-possible.patch
Patch66: 0001-Support-conflicting-session-dialog.patch
Patch67: 0001-shell-window-tracker-Track-windows-when-finding-app-.patch
%define eds_version 3.33.1
%define gnome_desktop_version 3.35.91
@ -304,6 +307,27 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/evolution-calendar.de
%endif
%changelog
* Tue Nov 18 2025 Joan Torres Lopez <joantolo@redhat.com> - 40.10-33
- Register session with GDM on startup
Resolves: RHEL-129287
* Thu Nov 27 2025 Jonas Ådahl <jadahl@redhat.com> - 40.10-32
- Avoid broken app instances with remote clients
Resolves: RHEL-68825
* Wed Oct 22 2025 Joan Torres <joantolo@redhat.com> - 40.10-31
- Don't fail if disable-show-password doesn't exist
Related: RHEL-109190
* Thu Oct 2 2025 Joan Torres <joantolo@redhat.com> - 40.10-30
- Fix regression on multiple remote sessions and same user
Also, add missing fix to keep API/ABI compatibility on GDM greeter proxy.
Resolves: RHEL-109190
* Tue Oct 21 2025 Joan Torres <joantolo@redhat.com> - 40.10-29
- Allow disabling showing password on login/unlock screens
Resolves: RHEL-123139
* Wed Jul 16 2025 Joan Torres <joantolo@redhat.com> - 40.10-28
- Allow restart/shutdown on lock screen
Resolves: RHEL-103984