import CS gnome-shell-40.10-33.el9
This commit is contained in:
parent
68628fa4d5
commit
ee26bb5bd9
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
46
SOURCES/0001-main-Register-session-with-GDM-on-startup.patch
Normal file
46
SOURCES/0001-main-Register-session-with-GDM-on-startup.patch
Normal 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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user