Update to 40.1
This commit is contained in:
parent
9d11163049
commit
0fa492bb66
1
.gitignore
vendored
1
.gitignore
vendored
@ -191,3 +191,4 @@ gnome-shell-2.31.5.tar.bz2
|
|||||||
/gnome-shell-40.beta-79-g7a57528bd.tar.xz
|
/gnome-shell-40.beta-79-g7a57528bd.tar.xz
|
||||||
/gnome-shell-40.rc.tar.xz
|
/gnome-shell-40.rc.tar.xz
|
||||||
/gnome-shell-40.0.tar.xz
|
/gnome-shell-40.0.tar.xz
|
||||||
|
/gnome-shell-40.1.tar.xz
|
||||||
|
@ -1,422 +0,0 @@
|
|||||||
From 3aa4ec6dc18a117a0124cae5e2bddfe7cf6ea0b7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
|
||||||
Date: Tue, 13 Apr 2021 10:59:49 -0400
|
|
||||||
Subject: [PATCH] loginDialog: Allow timed login with disabled user list
|
|
||||||
|
|
||||||
At the moment the timed login feature is implemented in the user list.
|
|
||||||
If there's no user list, we don't show the indicator anywhere and
|
|
||||||
don't proceed with timed login.
|
|
||||||
|
|
||||||
This commit allows timed login to work when the user list is disabled.
|
|
||||||
It accomplishes this by putting the timed login indicator on the
|
|
||||||
auth prompt in that scenario.
|
|
||||||
---
|
|
||||||
.../widgets/_login-dialog.scss | 5 +++
|
|
||||||
js/gdm/authPrompt.js | 41 ++++++++++++++++++-
|
|
||||||
js/gdm/loginDialog.js | 24 ++++++++++-
|
|
||||||
subprojects/gvc | 2 +-
|
|
||||||
4 files changed, 68 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/data/theme/gnome-shell-sass/widgets/_login-dialog.scss b/data/theme/gnome-shell-sass/widgets/_login-dialog.scss
|
|
||||||
index d6608fc30..1789beca9 100644
|
|
||||||
--- a/data/theme/gnome-shell-sass/widgets/_login-dialog.scss
|
|
||||||
+++ b/data/theme/gnome-shell-sass/widgets/_login-dialog.scss
|
|
||||||
@@ -124,46 +124,51 @@
|
|
||||||
&:ltr .user-widget { padding-right: 1em; }
|
|
||||||
&:rtl .user-widget { padding-left: 1em; }
|
|
||||||
.login-dialog-timed-login-indicator {
|
|
||||||
height: 2px;
|
|
||||||
margin-top: 6px;
|
|
||||||
background-color: $osd_fg_color;
|
|
||||||
}
|
|
||||||
&:focus .login-dialog-timed-login-indicator { background-color: $selected_fg_color; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.user-widget-label {
|
|
||||||
color: $osd_fg_color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.user-widget.horizontal .user-widget-label {
|
|
||||||
@include fontsize($base_font_size + 2);
|
|
||||||
font-weight: bold;
|
|
||||||
padding-left: 15px;
|
|
||||||
|
|
||||||
&:ltr { padding-left: 14px; text-align: left; }
|
|
||||||
&:rtl { padding-right: 14px; text-align: right; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.user-widget.vertical .user-widget-label {
|
|
||||||
@include fontsize($base_font_size + 5);
|
|
||||||
text-align: center;
|
|
||||||
font-weight: normal;
|
|
||||||
padding-top: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
+.login-dialog-timed-login-indicator {
|
|
||||||
+ height: 2px;
|
|
||||||
+ background-color: darken($fg_color,40%);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
.login-dialog-prompt-layout {
|
|
||||||
padding-top: 24px;
|
|
||||||
padding-bottom: 12px;
|
|
||||||
spacing: $base_spacing * 2;
|
|
||||||
width: 23em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.login-dialog-prompt-entry {
|
|
||||||
height: 1.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.login-dialog-prompt-label {
|
|
||||||
color: darken($osd_fg_color, 20%);
|
|
||||||
@include fontsize($base_font_size + 1);
|
|
||||||
padding-top: 1em;
|
|
||||||
}
|
|
||||||
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
|
|
||||||
index d2c9a1659..07de0f8d2 100644
|
|
||||||
--- a/js/gdm/authPrompt.js
|
|
||||||
+++ b/js/gdm/authPrompt.js
|
|
||||||
@@ -1,34 +1,34 @@
|
|
||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
||||||
/* exported AuthPrompt */
|
|
||||||
|
|
||||||
-const { Clutter, GObject, Pango, Shell, St } = imports.gi;
|
|
||||||
+const { Clutter, GLib, GObject, Pango, Shell, St } = imports.gi;
|
|
||||||
|
|
||||||
const Animation = imports.ui.animation;
|
|
||||||
const Batch = imports.gdm.batch;
|
|
||||||
const GdmUtil = imports.gdm.util;
|
|
||||||
const OVirt = imports.gdm.oVirt;
|
|
||||||
const Vmware = imports.gdm.vmware;
|
|
||||||
const Params = imports.misc.params;
|
|
||||||
const ShellEntry = imports.ui.shellEntry;
|
|
||||||
const UserWidget = imports.ui.userWidget;
|
|
||||||
const Util = imports.misc.util;
|
|
||||||
|
|
||||||
var DEFAULT_BUTTON_WELL_ICON_SIZE = 16;
|
|
||||||
var DEFAULT_BUTTON_WELL_ANIMATION_DELAY = 1000;
|
|
||||||
var DEFAULT_BUTTON_WELL_ANIMATION_TIME = 300;
|
|
||||||
|
|
||||||
var MESSAGE_FADE_OUT_ANIMATION_TIME = 500;
|
|
||||||
|
|
||||||
var AuthPromptMode = {
|
|
||||||
UNLOCK_ONLY: 0,
|
|
||||||
UNLOCK_OR_LOG_IN: 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
var AuthPromptStatus = {
|
|
||||||
NOT_VERIFYING: 0,
|
|
||||||
VERIFYING: 1,
|
|
||||||
VERIFICATION_FAILED: 2,
|
|
||||||
VERIFICATION_SUCCEEDED: 3,
|
|
||||||
VERIFICATION_CANCELLED: 4,
|
|
||||||
VERIFICATION_IN_PROGRESS: 5,
|
|
||||||
};
|
|
||||||
@@ -143,88 +143,127 @@ var AuthPrompt = GObject.registerClass({
|
|
||||||
reactive: this._hasCancelButton,
|
|
||||||
can_focus: this._hasCancelButton,
|
|
||||||
x_align: Clutter.ActorAlign.START,
|
|
||||||
y_align: Clutter.ActorAlign.CENTER,
|
|
||||||
child: new St.Icon({ icon_name: 'go-previous-symbolic' }),
|
|
||||||
});
|
|
||||||
if (this._hasCancelButton)
|
|
||||||
this.cancelButton.connect('clicked', () => this.cancel());
|
|
||||||
else
|
|
||||||
this.cancelButton.opacity = 0;
|
|
||||||
this._mainBox.add_child(this.cancelButton);
|
|
||||||
|
|
||||||
let entryParams = {
|
|
||||||
style_class: 'login-dialog-prompt-entry',
|
|
||||||
can_focus: true,
|
|
||||||
x_expand: true,
|
|
||||||
};
|
|
||||||
|
|
||||||
this._entry = null;
|
|
||||||
|
|
||||||
this._textEntry = new St.Entry(entryParams);
|
|
||||||
ShellEntry.addContextMenu(this._textEntry, { actionMode: Shell.ActionMode.NONE });
|
|
||||||
|
|
||||||
this._passwordEntry = new St.PasswordEntry(entryParams);
|
|
||||||
ShellEntry.addContextMenu(this._passwordEntry, { actionMode: Shell.ActionMode.NONE });
|
|
||||||
|
|
||||||
this._entry = this._passwordEntry;
|
|
||||||
this._mainBox.add_child(this._entry);
|
|
||||||
this._entry.grab_key_focus();
|
|
||||||
|
|
||||||
+ this._timedLoginIndicator = new St.Bin({ style_class: 'login-dialog-timed-login-indicator',
|
|
||||||
+ scale_x: 0 });
|
|
||||||
+
|
|
||||||
+ this.actor.add(this._timedLoginIndicator);
|
|
||||||
+
|
|
||||||
[this._textEntry, this._passwordEntry].forEach(entry => {
|
|
||||||
entry.clutter_text.connect('text-changed', () => {
|
|
||||||
if (!this._userVerifier.hasPendingMessages)
|
|
||||||
this._fadeOutMessage();
|
|
||||||
});
|
|
||||||
|
|
||||||
entry.clutter_text.connect('activate', () => {
|
|
||||||
let shouldSpin = entry === this._passwordEntry;
|
|
||||||
if (entry.reactive)
|
|
||||||
this._activateNext(shouldSpin);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
this._defaultButtonWell = new St.Widget({
|
|
||||||
layout_manager: new Clutter.BinLayout(),
|
|
||||||
x_align: Clutter.ActorAlign.END,
|
|
||||||
y_align: Clutter.ActorAlign.CENTER,
|
|
||||||
});
|
|
||||||
this._defaultButtonWell.add_constraint(new Clutter.BindConstraint({
|
|
||||||
source: this.cancelButton,
|
|
||||||
coordinate: Clutter.BindCoordinate.WIDTH,
|
|
||||||
}));
|
|
||||||
this._mainBox.add_child(this._defaultButtonWell);
|
|
||||||
|
|
||||||
this._spinner = new Animation.Spinner(DEFAULT_BUTTON_WELL_ICON_SIZE);
|
|
||||||
this._defaultButtonWell.add_child(this._spinner);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ showTimedLoginIndicator(time) {
|
|
||||||
+ let hold = new Batch.Hold();
|
|
||||||
+
|
|
||||||
+ this.hideTimedLoginIndicator();
|
|
||||||
+
|
|
||||||
+ let startTime = GLib.get_monotonic_time();
|
|
||||||
+
|
|
||||||
+ this._timedLoginTimeoutId = GLib.timeout_add (GLib.PRIORITY_DEFAULT, 33,
|
|
||||||
+ () => {
|
|
||||||
+ let currentTime = GLib.get_monotonic_time();
|
|
||||||
+ let elapsedTime = (currentTime - startTime) / GLib.USEC_PER_SEC;
|
|
||||||
+ this._timedLoginIndicator.scale_x = elapsedTime / time;
|
|
||||||
+ if (elapsedTime >= time) {
|
|
||||||
+ this._timedLoginTimeoutId = 0;
|
|
||||||
+ hold.release();
|
|
||||||
+ return GLib.SOURCE_REMOVE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return GLib.SOURCE_CONTINUE;
|
|
||||||
+ });
|
|
||||||
+
|
|
||||||
+ GLib.Source.set_name_by_id(this._timedLoginTimeoutId, '[gnome-shell] this._timedLoginTimeoutId');
|
|
||||||
+
|
|
||||||
+ return hold;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ hideTimedLoginIndicator() {
|
|
||||||
+ if (this._timedLoginTimeoutId) {
|
|
||||||
+ GLib.source_remove(this._timedLoginTimeoutId);
|
|
||||||
+ this._timedLoginTimeoutId = 0;
|
|
||||||
+ }
|
|
||||||
+ this._timedLoginIndicator.scale_x = 0.;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
_activateNext(shouldSpin) {
|
|
||||||
this.verificationStatus = AuthPromptStatus.VERIFICATION_IN_PROGRESS;
|
|
||||||
this.updateSensitivity(false);
|
|
||||||
|
|
||||||
if (shouldSpin)
|
|
||||||
this.startSpinning();
|
|
||||||
|
|
||||||
if (this._queryingService)
|
|
||||||
this._userVerifier.answerQuery(this._queryingService, this._entry.text);
|
|
||||||
else
|
|
||||||
this._preemptiveAnswer = this._entry.text;
|
|
||||||
|
|
||||||
this.emit('next');
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateEntry(secret) {
|
|
||||||
if (secret && this._entry !== this._passwordEntry) {
|
|
||||||
this._mainBox.replace_child(this._entry, this._passwordEntry);
|
|
||||||
this._entry = this._passwordEntry;
|
|
||||||
} else if (!secret && this._entry !== this._textEntry) {
|
|
||||||
this._mainBox.replace_child(this._entry, this._textEntry);
|
|
||||||
this._entry = this._textEntry;
|
|
||||||
}
|
|
||||||
this._capsLockWarningLabel.visible = secret;
|
|
||||||
}
|
|
||||||
|
|
||||||
_onAskQuestion(verifier, serviceName, question, secret) {
|
|
||||||
if (this._queryingService)
|
|
||||||
this.clear();
|
|
||||||
|
|
||||||
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
|
|
||||||
index 6f66a2759..72d3322db 100644
|
|
||||||
--- a/js/gdm/loginDialog.js
|
|
||||||
+++ b/js/gdm/loginDialog.js
|
|
||||||
@@ -735,60 +735,63 @@ var LoginDialog = GObject.registerClass({
|
|
||||||
}
|
|
||||||
|
|
||||||
_ensureUserListLoaded() {
|
|
||||||
if (!this._userManager.is_loaded) {
|
|
||||||
this._userManagerLoadedId = this._userManager.connect('notify::is-loaded',
|
|
||||||
() => {
|
|
||||||
if (this._userManager.is_loaded) {
|
|
||||||
this._loadUserList();
|
|
||||||
this._userManager.disconnect(this._userManagerLoadedId);
|
|
||||||
this._userManagerLoadedId = 0;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, this._loadUserList.bind(this));
|
|
||||||
GLib.Source.set_name_by_id(id, '[gnome-shell] _loadUserList');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateDisableUserList() {
|
|
||||||
let disableUserList = this._settings.get_boolean(GdmUtil.DISABLE_USER_LIST_KEY);
|
|
||||||
|
|
||||||
// Disable user list when there are no users.
|
|
||||||
if (this._userListLoaded && this._userList.numItems() == 0)
|
|
||||||
disableUserList = true;
|
|
||||||
|
|
||||||
if (disableUserList != this._disableUserList) {
|
|
||||||
this._disableUserList = disableUserList;
|
|
||||||
|
|
||||||
if (this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
|
|
||||||
this._authPrompt.reset();
|
|
||||||
+
|
|
||||||
+ if (this._disableUserList && this._timedLoginUserListHold)
|
|
||||||
+ this._timedLoginUserListHold.release();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateCancelButton() {
|
|
||||||
let cancelVisible;
|
|
||||||
|
|
||||||
// Hide the cancel button if the user list is disabled and we're asking for
|
|
||||||
// a username
|
|
||||||
if (this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING && this._disableUserList)
|
|
||||||
cancelVisible = false;
|
|
||||||
else
|
|
||||||
cancelVisible = true;
|
|
||||||
|
|
||||||
this._authPrompt.cancelButton.visible = cancelVisible;
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateBanner() {
|
|
||||||
let enabled = this._settings.get_boolean(GdmUtil.BANNER_MESSAGE_KEY);
|
|
||||||
let text = this._settings.get_string(GdmUtil.BANNER_MESSAGE_TEXT_KEY);
|
|
||||||
|
|
||||||
if (enabled && text) {
|
|
||||||
this._bannerLabel.set_text(text);
|
|
||||||
this._bannerLabel.show();
|
|
||||||
} else {
|
|
||||||
this._bannerLabel.hide();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_fadeInBannerView() {
|
|
||||||
this._bannerView.show();
|
|
||||||
@@ -1021,91 +1024,108 @@ var LoginDialog = GObject.registerClass({
|
|
||||||
|
|
||||||
this._timedLoginIdleTimeOutId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, _TIMED_LOGIN_IDLE_THRESHOLD,
|
|
||||||
() => {
|
|
||||||
this._timedLoginIdleTimeOutId = 0;
|
|
||||||
hold.release();
|
|
||||||
return GLib.SOURCE_REMOVE;
|
|
||||||
});
|
|
||||||
GLib.Source.set_name_by_id(this._timedLoginIdleTimeOutId, '[gnome-shell] this._timedLoginIdleTimeOutId');
|
|
||||||
return hold;
|
|
||||||
}
|
|
||||||
|
|
||||||
_startTimedLogin(userName, delay) {
|
|
||||||
let firstRun = true;
|
|
||||||
|
|
||||||
// Cancel execution of old batch
|
|
||||||
if (this._timedLoginBatch) {
|
|
||||||
this._timedLoginBatch.cancel();
|
|
||||||
this._timedLoginBatch = null;
|
|
||||||
firstRun = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset previous idle-timeout
|
|
||||||
if (this._timedLoginIdleTimeOutId) {
|
|
||||||
GLib.source_remove(this._timedLoginIdleTimeOutId);
|
|
||||||
this._timedLoginIdleTimeOutId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
let loginItem = null;
|
|
||||||
let animationTime;
|
|
||||||
|
|
||||||
- let tasks = [() => this._waitForItemForUser(userName),
|
|
||||||
+ let tasks = [() => {
|
|
||||||
+ if (this._disableUserList)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ this._timedLoginUserListHold = this._waitForItemForUser(userName);
|
|
||||||
+
|
|
||||||
+ return this._timedLoginUserListHold;
|
|
||||||
+ },
|
|
||||||
|
|
||||||
() => {
|
|
||||||
- loginItem = this._userList.getItemFromUserName(userName);
|
|
||||||
+ this._timedLoginUserListHold = null;
|
|
||||||
+
|
|
||||||
+ loginItem = this._disableUserList
|
|
||||||
+ ? this._authPrompt
|
|
||||||
+ : this._userList.getItemFromUserName(userName);
|
|
||||||
|
|
||||||
// If there is an animation running on the item, reset it.
|
|
||||||
loginItem.hideTimedLoginIndicator();
|
|
||||||
},
|
|
||||||
|
|
||||||
() => {
|
|
||||||
+ if (this._disableUserList)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
// If we're just starting out, start on the right item.
|
|
||||||
if (!this._userManager.is_loaded)
|
|
||||||
this._userList.jumpToItem(loginItem);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => {
|
|
||||||
// This blocks the timed login animation until a few
|
|
||||||
// seconds after the user stops interacting with the
|
|
||||||
// login screen.
|
|
||||||
|
|
||||||
// We skip this step if the timed login delay is very short.
|
|
||||||
if (delay > _TIMED_LOGIN_IDLE_THRESHOLD) {
|
|
||||||
animationTime = delay - _TIMED_LOGIN_IDLE_THRESHOLD;
|
|
||||||
return this._blockTimedLoginUntilIdle();
|
|
||||||
} else {
|
|
||||||
animationTime = delay;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
() => {
|
|
||||||
+ if (this._disableUserList)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
// If idle timeout is done, make sure the timed login indicator is shown
|
|
||||||
if (delay > _TIMED_LOGIN_IDLE_THRESHOLD &&
|
|
||||||
this._authPrompt.visible)
|
|
||||||
this._authPrompt.cancel();
|
|
||||||
|
|
||||||
if (delay > _TIMED_LOGIN_IDLE_THRESHOLD || firstRun) {
|
|
||||||
this._userList.scrollToItem(loginItem);
|
|
||||||
loginItem.grab_key_focus();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
() => loginItem.showTimedLoginIndicator(animationTime),
|
|
||||||
|
|
||||||
() => {
|
|
||||||
this._timedLoginBatch = null;
|
|
||||||
this._greeter.call_begin_auto_login_sync(userName, null);
|
|
||||||
}];
|
|
||||||
|
|
||||||
this._timedLoginBatch = new Batch.ConsecutiveBatch(this, tasks);
|
|
||||||
|
|
||||||
return this._timedLoginBatch.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
_onTimedLoginRequested(client, userName, seconds) {
|
|
||||||
if (this._timedLoginBatch)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._startTimedLogin(userName, seconds);
|
|
||||||
|
|
||||||
// Restart timed login on user interaction
|
|
@ -1,63 +0,0 @@
|
|||||||
From fc54e0bed8dbab238394f6852d611d64b81f314e Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
|
||||||
Date: Thu, 8 Apr 2021 17:19:37 +0200
|
|
||||||
Subject: [PATCH 1/2] workspacesView: Fix PgUp/PgDown shortcut
|
|
||||||
|
|
||||||
We still try to switch to the workspace above/below, which doesn't
|
|
||||||
do anything since the layout is now horizontal.
|
|
||||||
|
|
||||||
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1798>
|
|
||||||
---
|
|
||||||
js/ui/workspacesView.js | 28 ++++++++++++++++++++++------
|
|
||||||
1 file changed, 22 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
|
|
||||||
index 1af45d88d..2c9da5c9b 100644
|
|
||||||
--- a/js/ui/workspacesView.js
|
|
||||||
+++ b/js/ui/workspacesView.js
|
|
||||||
@@ -1144,20 +1144,36 @@ class WorkspacesDisplay extends St.Widget {
|
|
||||||
_onKeyPressEvent(actor, event) {
|
|
||||||
if (!this.mapped)
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
|
||||||
- let workspaceManager = global.workspace_manager;
|
|
||||||
- let activeWs = workspaceManager.get_active_workspace();
|
|
||||||
- let ws;
|
|
||||||
+
|
|
||||||
+ const { workspaceManager } = global;
|
|
||||||
+ const vertical = workspaceManager.layout_rows === -1;
|
|
||||||
+ const rtl = this.get_text_direction() === Clutter.TextDirection.RTL;
|
|
||||||
+
|
|
||||||
+ let dir;
|
|
||||||
switch (event.get_key_symbol()) {
|
|
||||||
case Clutter.KEY_Page_Up:
|
|
||||||
- ws = activeWs.get_neighbor(Meta.MotionDirection.UP);
|
|
||||||
+ if (vertical)
|
|
||||||
+ dir = Meta.MotionDirection.UP;
|
|
||||||
+ else if (rtl)
|
|
||||||
+ dir = Meta.MotionDirection.RIGHT;
|
|
||||||
+ else
|
|
||||||
+ dir = Meta.MotionDirection.LEFT;
|
|
||||||
break;
|
|
||||||
case Clutter.KEY_Page_Down:
|
|
||||||
- ws = activeWs.get_neighbor(Meta.MotionDirection.DOWN);
|
|
||||||
+ if (vertical)
|
|
||||||
+ dir = Meta.MotionDirection.DOWN;
|
|
||||||
+ else if (rtl)
|
|
||||||
+ dir = Meta.MotionDirection.LEFT;
|
|
||||||
+ else
|
|
||||||
+ dir = Meta.MotionDirection.RIGHT;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
|
||||||
}
|
|
||||||
- Main.wm.actionMoveWorkspace(ws);
|
|
||||||
+
|
|
||||||
+ const ws = workspaceManager.get_active_workspace().get_neighbor(dir);
|
|
||||||
+ if (ws)
|
|
||||||
+ Main.wm.actionMoveWorkspace(ws);
|
|
||||||
return Clutter.EVENT_STOP;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
From dd7d33622875c70f3f5965f387e4de7c99fbf330 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
|
||||||
Date: Thu, 8 Apr 2021 17:31:54 +0200
|
|
||||||
Subject: [PATCH 2/2] workspacesView: Don't tie PgUp/PgDown to mapped state
|
|
||||||
|
|
||||||
Both app grid and window picker are now always visible in the overview,
|
|
||||||
so their handling of the PgUp/PgDown keys conflicts.
|
|
||||||
|
|
||||||
Resolve that by checking for the overview state instead.
|
|
||||||
|
|
||||||
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1798>
|
|
||||||
---
|
|
||||||
js/ui/workspacesView.js | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
|
|
||||||
index 2c9da5c9b..502590418 100644
|
|
||||||
--- a/js/ui/workspacesView.js
|
|
||||||
+++ b/js/ui/workspacesView.js
|
|
||||||
@@ -1142,7 +1142,8 @@ class WorkspacesDisplay extends St.Widget {
|
|
||||||
}
|
|
||||||
|
|
||||||
_onKeyPressEvent(actor, event) {
|
|
||||||
- if (!this.mapped)
|
|
||||||
+ const { ControlsState } = OverviewControls;
|
|
||||||
+ if (this._overviewAdjustment.value !== ControlsState.WINDOW_PICKER)
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
|
||||||
|
|
||||||
const { workspaceManager } = global;
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
221
1821.patch
221
1821.patch
@ -1,221 +0,0 @@
|
|||||||
From e7998b4d5547d65d88c56d428a65c9fb3bbeadb0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
|
||||||
Date: Wed, 28 Apr 2021 10:36:46 -0400
|
|
||||||
Subject: [PATCH 1/5] authPrompt: Don't clear querying service unless querying
|
|
||||||
service fails
|
|
||||||
|
|
||||||
At the moment we treat a failure in any service as a signal to stop
|
|
||||||
tracking users responses to service questions.
|
|
||||||
|
|
||||||
This commit makes sure we don't stop waiting for answers if a background
|
|
||||||
service fails.
|
|
||||||
---
|
|
||||||
js/gdm/authPrompt.js | 7 +++++--
|
|
||||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
|
|
||||||
index d2c9a16594..c182d74318 100644
|
|
||||||
--- a/js/gdm/authPrompt.js
|
|
||||||
+++ b/js/gdm/authPrompt.js
|
|
||||||
@@ -280,8 +280,11 @@ var AuthPrompt = GObject.registerClass({
|
|
||||||
|
|
||||||
_onVerificationFailed(userVerifier, serviceName, canRetry) {
|
|
||||||
const wasQueryingService = this._queryingService === serviceName;
|
|
||||||
- this._queryingService = null;
|
|
||||||
- this.clear();
|
|
||||||
+
|
|
||||||
+ if (wasQueryingService) {
|
|
||||||
+ this._queryingService = null;
|
|
||||||
+ this.clear();
|
|
||||||
+ }
|
|
||||||
|
|
||||||
this.updateSensitivity(canRetry);
|
|
||||||
this.setActorInDefaultButtonWell(null);
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
|
|
||||||
From ca290737ab3ecb028f03c9189dac6131e2dcf3bc Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
|
||||||
Date: Wed, 28 Apr 2021 10:38:58 -0400
|
|
||||||
Subject: [PATCH 2/5] authPrompt: Don't fail auth prompt until user is out of
|
|
||||||
retries
|
|
||||||
|
|
||||||
At the moment we set the state of the auth prompt to failed any
|
|
||||||
time the user fails an attempt. But verification is still going
|
|
||||||
on until the user exhausts all attempts, so that's wrong.
|
|
||||||
|
|
||||||
This commit changes it to only set the state to failed when the
|
|
||||||
user is out of tries.
|
|
||||||
---
|
|
||||||
js/gdm/authPrompt.js | 4 +++-
|
|
||||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
|
|
||||||
index c182d74318..d111cadd1b 100644
|
|
||||||
--- a/js/gdm/authPrompt.js
|
|
||||||
+++ b/js/gdm/authPrompt.js
|
|
||||||
@@ -288,7 +288,9 @@ var AuthPrompt = GObject.registerClass({
|
|
||||||
|
|
||||||
this.updateSensitivity(canRetry);
|
|
||||||
this.setActorInDefaultButtonWell(null);
|
|
||||||
- this.verificationStatus = AuthPromptStatus.VERIFICATION_FAILED;
|
|
||||||
+
|
|
||||||
+ if (!canRetry)
|
|
||||||
+ this.verificationStatus = AuthPromptStatus.VERIFICATION_FAILED;
|
|
||||||
|
|
||||||
if (wasQueryingService)
|
|
||||||
Util.wiggle(this._entry);
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
|
|
||||||
From 36ccf63b7a219b7e0eb11158f39c8823a25eb058 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
|
||||||
Date: Wed, 28 Apr 2021 10:42:14 -0400
|
|
||||||
Subject: [PATCH 3/5] gdm: Flip canRetry boolean to doneTrying on verification
|
|
||||||
failure
|
|
||||||
|
|
||||||
This commit just flips a boolean in the verification failed handler
|
|
||||||
to make things easier to read.
|
|
||||||
---
|
|
||||||
js/gdm/util.js | 33 +++++++++++++++++----------------
|
|
||||||
1 file changed, 17 insertions(+), 16 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/js/gdm/util.js b/js/gdm/util.js
|
|
||||||
index 1ee84acde2..bb120a81c2 100644
|
|
||||||
--- a/js/gdm/util.js
|
|
||||||
+++ b/js/gdm/util.js
|
|
||||||
@@ -685,29 +685,19 @@ var ShellUserVerifier = class {
|
|
||||||
(this._reauthOnly || this._failCounter < this.allowedFailures);
|
|
||||||
}
|
|
||||||
|
|
||||||
- _verificationFailed(serviceName, retry) {
|
|
||||||
+ _verificationFailed(serviceName, shouldRetry) {
|
|
||||||
// For Not Listed / enterprise logins, immediately reset
|
|
||||||
// the dialog
|
|
||||||
// Otherwise, when in login mode we allow ALLOWED_FAILURES attempts.
|
|
||||||
// After that, we go back to the welcome screen.
|
|
||||||
|
|
||||||
- const canRetry = retry && this._canRetry();
|
|
||||||
-
|
|
||||||
this._disconnectSignals();
|
|
||||||
+
|
|
||||||
this._filterServiceMessages(serviceName, MessageType.ERROR);
|
|
||||||
|
|
||||||
- if (canRetry) {
|
|
||||||
- if (!this.hasPendingMessages) {
|
|
||||||
- this._retry(serviceName);
|
|
||||||
- } else {
|
|
||||||
- const cancellable = this._cancellable;
|
|
||||||
- let signalId = this.connect('no-more-messages', () => {
|
|
||||||
- this.disconnect(signalId);
|
|
||||||
- if (!cancellable.is_cancelled())
|
|
||||||
- this._retry(serviceName);
|
|
||||||
- });
|
|
||||||
- }
|
|
||||||
- } else {
|
|
||||||
+ const doneTrying = !shouldRetry || !this._canRetry();
|
|
||||||
+
|
|
||||||
+ if (doneTrying) {
|
|
||||||
// eslint-disable-next-line no-lonely-if
|
|
||||||
if (!this.hasPendingMessages) {
|
|
||||||
this._cancelAndReset();
|
|
||||||
@@ -721,7 +711,18 @@ var ShellUserVerifier = class {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- this.emit('verification-failed', serviceName, canRetry);
|
|
||||||
+ this.emit('verification-failed', serviceName, !doneTrying);
|
|
||||||
+
|
|
||||||
+ if (!this.hasPendingMessages) {
|
|
||||||
+ this._retry(serviceName);
|
|
||||||
+ } else {
|
|
||||||
+ const cancellable = this._cancellable;
|
|
||||||
+ let signalId = this.connect('no-more-messages', () => {
|
|
||||||
+ this.disconnect(signalId);
|
|
||||||
+ if (!cancellable.is_cancelled())
|
|
||||||
+ this._retry(serviceName);
|
|
||||||
+ });
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
_onServiceUnavailable(_client, serviceName, errorMessage) {
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
|
|
||||||
From de06a365e968691a4c2b39de8d5903a92f3663ec Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
|
||||||
Date: Wed, 28 Apr 2021 10:44:56 -0400
|
|
||||||
Subject: [PATCH 4/5] gdm: Only disconect verification signals when not going
|
|
||||||
to retry
|
|
||||||
|
|
||||||
At the moment a failure in a background service can lead to the
|
|
||||||
various verification signals getting disconnected, even though
|
|
||||||
we still need them for a foreground service.
|
|
||||||
|
|
||||||
This commit changes the code to only disconnect when we've run
|
|
||||||
out of tries.
|
|
||||||
---
|
|
||||||
js/gdm/util.js | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/js/gdm/util.js b/js/gdm/util.js
|
|
||||||
index bb120a81c2..bdc14b7519 100644
|
|
||||||
--- a/js/gdm/util.js
|
|
||||||
+++ b/js/gdm/util.js
|
|
||||||
@@ -691,13 +691,13 @@ var ShellUserVerifier = class {
|
|
||||||
// Otherwise, when in login mode we allow ALLOWED_FAILURES attempts.
|
|
||||||
// After that, we go back to the welcome screen.
|
|
||||||
|
|
||||||
- this._disconnectSignals();
|
|
||||||
-
|
|
||||||
this._filterServiceMessages(serviceName, MessageType.ERROR);
|
|
||||||
|
|
||||||
const doneTrying = !shouldRetry || !this._canRetry();
|
|
||||||
|
|
||||||
if (doneTrying) {
|
|
||||||
+ this._disconnectSignals();
|
|
||||||
+
|
|
||||||
// eslint-disable-next-line no-lonely-if
|
|
||||||
if (!this.hasPendingMessages) {
|
|
||||||
this._cancelAndReset();
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
|
|
||||||
From 70f1e4a0d41956a5e91c31bea4d0060c9eb0bf45 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Benjamin Berg <bberg@redhat.com>
|
|
||||||
Date: Wed, 28 Apr 2021 18:32:22 +0200
|
|
||||||
Subject: [PATCH 5/5] gdm: Remove pending fingerprint verification failure
|
|
||||||
|
|
||||||
It can happen that we get a problem report and a verification failure at
|
|
||||||
the same time. For fingerprint, a problem report can result in an
|
|
||||||
internal verification failure to be queued.
|
|
||||||
|
|
||||||
Remove this queued failure again if we got a failure already from GDM
|
|
||||||
directly.
|
|
||||||
---
|
|
||||||
js/gdm/util.js | 5 +++++
|
|
||||||
1 file changed, 5 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/js/gdm/util.js b/js/gdm/util.js
|
|
||||||
index bdc14b7519..b02cd4d734 100644
|
|
||||||
--- a/js/gdm/util.js
|
|
||||||
+++ b/js/gdm/util.js
|
|
||||||
@@ -686,6 +686,11 @@ var ShellUserVerifier = class {
|
|
||||||
}
|
|
||||||
|
|
||||||
_verificationFailed(serviceName, shouldRetry) {
|
|
||||||
+ if (serviceName === FINGERPRINT_SERVICE_NAME) {
|
|
||||||
+ if (this._fingerprintFailedId)
|
|
||||||
+ GLib.source_remove(this._fingerprintFailedId);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
// For Not Listed / enterprise logins, immediately reset
|
|
||||||
// the dialog
|
|
||||||
// Otherwise, when in login mode we allow ALLOWED_FAILURES attempts.
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
|||||||
%global tarball_version %%(echo %{version} | tr '~' '.')
|
%global tarball_version %%(echo %{version} | tr '~' '.')
|
||||||
|
|
||||||
Name: gnome-shell
|
Name: gnome-shell
|
||||||
Version: 40.0
|
Version: 40.1
|
||||||
Release: 6%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Window management and application launching for GNOME
|
Summary: Window management and application launching for GNOME
|
||||||
|
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
@ -12,18 +12,8 @@ Source0: http://download.gnome.org/sources/gnome-shell/40/%{name}-%{tarball_vers
|
|||||||
# Replace Epiphany with Firefox in the default favourite apps list
|
# Replace Epiphany with Firefox in the default favourite apps list
|
||||||
Patch1: gnome-shell-favourite-apps-firefox.patch
|
Patch1: gnome-shell-favourite-apps-firefox.patch
|
||||||
|
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1940618
|
# Some users might have a broken PAM config, so we really need this
|
||||||
Patch10001: 0001-loginDialog-Allow-timed-login-with-disabled-user-lis.patch
|
# downstream patch to stop trying on configuration errors.
|
||||||
# Fix PgUp/PgDn for scrolling between workspaces / app grid pages
|
|
||||||
# https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1798
|
|
||||||
# https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4086
|
|
||||||
Patch10002: 0001-workspacesView-Fix-PgUp-PgDown-shortcut.patch
|
|
||||||
Patch10003: 0002-workspacesView-Don-t-tie-PgUp-PgDown-to-mapped-state.patch
|
|
||||||
|
|
||||||
# Some users might have a broken PAM config, so we really need this.
|
|
||||||
# The upstream patchset fixes password auth after a fingerprint failure.
|
|
||||||
# The second is a downstream patch to stop trying on configuration errors.
|
|
||||||
Patch10004: https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1821.patch
|
|
||||||
Patch10005: 0001-gdm-Work-around-failing-fingerprint-auth.patch
|
Patch10005: 0001-gdm-Work-around-failing-fingerprint-auth.patch
|
||||||
|
|
||||||
|
|
||||||
@ -242,6 +232,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/evolution-calendar.de
|
|||||||
%{_mandir}/man1/gnome-shell.1*
|
%{_mandir}/man1/gnome-shell.1*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu May 13 2021 Florian Müllner <fmuellner@redhat.com> - 40.1-1
|
||||||
|
- Update to 40.1
|
||||||
|
|
||||||
* Fri Apr 30 2021 Kalev Lember <klember@redhat.com> - 40.0-6
|
* Fri Apr 30 2021 Kalev Lember <klember@redhat.com> - 40.0-6
|
||||||
- Move gnome-tour dep here from gnome-initial-setup (#1955179)
|
- Move gnome-tour dep here from gnome-initial-setup (#1955179)
|
||||||
|
|
||||||
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (gnome-shell-40.0.tar.xz) = fc4ca3fbd3dafd4a81f97a765e53b74fa4902018721e25a767c0d353d127b0cdc69c64171188272e3f5b48f11d6ad52064cc237e35210f5e09dfcd763ceb00c4
|
SHA512 (gnome-shell-40.1.tar.xz) = 48b2800ef500b5a5102c974d8ab718946406653803942b063100c813bd4bda9ae3e1b3492872fd8158c0e44c95f6582174101fb852613ff047602efed83b6d37
|
||||||
|
Loading…
Reference in New Issue
Block a user