File gnome-shell-fate324570-Make-GDM-background-image-configurable.patch of Package gnome-shell
Index: gnome-shell-48.rc/data/gnome-shell-theme.gresource.xml
===================================================================
--- gnome-shell-48.rc.orig/data/gnome-shell-theme.gresource.xml
+++ gnome-shell-48.rc/data/gnome-shell-theme.gresource.xml
@@ -7,6 +7,7 @@
<file>gnome-shell-light.css</file>
<file>gnome-shell-high-contrast.css</file>
<file>gnome-shell-start.svg</file>
+ <file>noise-texture.png</file>
<file>pad-osd.css</file>
<file>workspace-placeholder.svg</file>
</gresource>
Index: gnome-shell-48.rc/js/ui/screenShield.js
===================================================================
--- gnome-shell-48.rc.orig/js/ui/screenShield.js
+++ gnome-shell-48.rc/js/ui/screenShield.js
@@ -9,6 +9,7 @@ import St from 'gi://St';
import * as Signals from '../misc/signals.js';
+import * as Background from './background.js';
import * as GnomeSession from '../misc/gnomeSession.js';
import * as OVirt from '../gdm/oVirt.js';
import * as LoginManager from '../misc/loginManager.js';
@@ -21,6 +22,8 @@ import * as SmartcardManager from '../mi
import {adjustAnimationTime} from '../misc/animationUtils.js';
+const LOCKDIALOG_BACKGROUND_SCHEMA = 'org.gnome.desktop.background.lockdialog';
+
const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver';
const LOCK_ENABLED_KEY = 'lock-enabled';
const LOCK_DELAY_KEY = 'lock-delay';
@@ -30,6 +33,9 @@ const DISABLE_LOCK_KEY = 'disable-lock-s
const LOCKED_STATE_STR = 'screenShield.locked';
+const BLUR_BRIGHTNESS = 0.35;
+const BLUR_RADIUS = 90;
+
// ScreenShield animation time
// - STANDARD_FADE_TIME is used when the session goes idle
// - MANUAL_FADE_TIME is used for lowering the shield when asked by the user,
@@ -72,6 +78,16 @@ export class ScreenShield extends Signal
name: 'lockDialogGroup',
});
+ // Add background for this._lockDialogGroup
+ this._bgLockDialogGroup = new Clutter.Actor();
+ this._lockDialogGroup.add_child(this._bgLockDialogGroup);
+ this._lockDialogGroup.set_child_below_sibling(this._bgLockDialogGroup, null);
+ this._bgManagersLockDialogGroup = [];
+
+ this._updateBgLockDialogGroup();
+ this._monitorsChangedId =
+ Main.layoutManager.connect('monitors-changed', this._updateBgLockDialogGroup.bind(this));
+
this.actor.add_child(this._lockScreenGroup);
this.actor.add_child(this._lockDialogGroup);
@@ -140,6 +156,15 @@ export class ScreenShield extends Signal
this._cursorTracker = global.backend.get_cursor_tracker();
this._syncInhibitor();
+
+ this.connect('destroy', this._onDestroy.bind(this));
+ }
+
+ _onDestroy() {
+ if (this._monitorsChangedId) {
+ Main.layoutManager.disconnect(this._monitorsChangedId);
+ delete this._monitorsChangedId;
+ }
}
async _getLoginSession() {
@@ -515,6 +540,59 @@ export class ScreenShield extends Signal
this.emit('wake-up-screen');
}
+ _createBgLockDialogGroup(monitorIndex) {
+ let monitor = Main.layoutManager.monitors[monitorIndex];
+ let widget = new St.Widget({
+ style_class: 'bgLockDialogGroup-background',
+ x: monitor.x,
+ y: monitor.y,
+ width: monitor.width,
+ height: monitor.height,
+ effect: new Shell.BlurEffect({name: 'blur'}),
+ });
+
+ let bgManager = new Background.BackgroundManager({
+ container: widget,
+ monitorIndex,
+ controlPosition: false,
+ settingsSchema: LOCKDIALOG_BACKGROUND_SCHEMA
+ });
+
+ this._bgManagersLockDialogGroup.push(bgManager);
+
+ this._bgLockDialogGroup.add_child(widget);
+
+ const themeContext = St.ThemeContext.get_for_stage(global.stage);
+ themeContext.connectObject('notify::scale-factor',
+ () => this._updateBackgroundEffects(), this);
+ }
+
+ _updateBgLockDialogGroup() {
+ for (let i = 0; i < this._bgManagersLockDialogGroup.length; i++)
+ this._bgManagersLockDialogGroup[i].destroy();
+
+ this._bgManagersLockDialogGroup = [];
+ this._bgLockDialogGroup.destroy_all_children();
+
+ for (let i = 0; i < Main.layoutManager.monitors.length; i++)
+ this._createBgLockDialogGroup(i);
+ this._updateBackgroundEffects();
+ }
+
+ _updateBackgroundEffects() {
+ const themeContext = St.ThemeContext.get_for_stage(global.stage);
+
+ for (const widget of this._bgLockDialogGroup) {
+ const effect = widget.get_effect('blur');
+ if (effect) {
+ effect.set({
+ brightness: BLUR_BRIGHTNESS,
+ radius: BLUR_RADIUS * themeContext.scale_factor,
+ });
+ }
+ }
+ }
+
get locked() {
return this._isLocked;
}