From 28ed8ff60f6ca073ec3ed91eb4d70a1793bed930 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Jan 08 2021 08:08:37 +0000 Subject: import gnome-shell-3.32.2-24.el8 --- diff --git a/SOURCES/0001-shell-app-Handle-workspace-from-startup-notification.patch b/SOURCES/0001-shell-app-Handle-workspace-from-startup-notification.patch new file mode 100644 index 0000000..e7f0db8 --- /dev/null +++ b/SOURCES/0001-shell-app-Handle-workspace-from-startup-notification.patch @@ -0,0 +1,78 @@ +From 391f262aee82ac12fcf99951d6b2df362f734b31 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Mon, 15 Jun 2020 20:41:45 +0200 +Subject: [PATCH] shell/app: Handle workspace from startup notifications + +Launching applications on a particular workspace works through +launch contexts and startup notifications. While this is no +longer required by a launcher/WM split, in theory this allows +us to reliably identify the correct window to apply startup +properties to. + +However in practice we fail more often than not: Missing support in +toolkits, differences between display protocols, D-Bus activation +and single-instance applications all provide their own pitfalls. + +So instead, take advantage of the fact that launcher and WM live in +the same process, and go with the unsophisticated approach: Just +remember the last workspace that was requested when launching an +app, then move the next window that is associated with the app to +that workspace. + +This will break X11 applications that set an initial workspace, but +that's legacy functionality anyway (given that there's no wayland +protocol for that functionality), and seems a price worth paying +for making launching apps on workspaces more reliable. +--- + src/shell-app.c | 19 +++++++++++-------- + 1 file changed, 11 insertions(+), 8 deletions(-) + +diff --git a/src/shell-app.c b/src/shell-app.c +index 7d40186c9..f716bc5f8 100644 +--- a/src/shell-app.c ++++ b/src/shell-app.c +@@ -1067,6 +1067,10 @@ _shell_app_add_window (ShellApp *app, + if (!app->running_state) + create_running_state (app); + ++ if (app->started_on_workspace >= 0) ++ meta_window_change_workspace_by_index (window, app->started_on_workspace, FALSE); ++ app->started_on_workspace = -1; ++ + app->running_state->window_sort_stale = TRUE; + app->running_state->windows = g_slist_prepend (app->running_state->windows, g_object_ref (window)); + g_signal_connect_object (window, "unmanaged", G_CALLBACK(shell_app_on_unmanaged), app, 0); +@@ -1156,16 +1160,14 @@ _shell_app_handle_startup_sequence (ShellApp *app, + shell_app_state_transition (app, SHELL_APP_STATE_STARTING); + meta_x11_display_focus_the_no_focus_window (x11_display, + meta_startup_sequence_get_timestamp (sequence)); +- app->started_on_workspace = meta_startup_sequence_get_workspace (sequence); + } + +- if (!starting) +- { +- if (app->running_state && app->running_state->windows) +- shell_app_state_transition (app, SHELL_APP_STATE_RUNNING); +- else /* application have > 1 .desktop file */ +- shell_app_state_transition (app, SHELL_APP_STATE_STOPPED); +- } ++ if (starting) ++ app->started_on_workspace = meta_startup_sequence_get_workspace (sequence); ++ else if (app->running_state && app->running_state->windows) ++ shell_app_state_transition (app, SHELL_APP_STATE_RUNNING); ++ else /* application have > 1 .desktop file */ ++ shell_app_state_transition (app, SHELL_APP_STATE_STOPPED); + } + + /** +@@ -1473,6 +1475,7 @@ static void + shell_app_init (ShellApp *self) + { + self->state = SHELL_APP_STATE_STOPPED; ++ self->started_on_workspace = -1; + } + + static void +-- +2.29.2 + diff --git a/SOURCES/caps-lock-warning.patch b/SOURCES/caps-lock-warning.patch new file mode 100644 index 0000000..d3c2daa --- /dev/null +++ b/SOURCES/caps-lock-warning.patch @@ -0,0 +1,488 @@ +From 7b514e637837e00372e20fa52f841e993966b734 Mon Sep 17 00:00:00 2001 +From: Umang Jain +Date: Fri, 13 Dec 2019 13:36:14 +0530 +Subject: [PATCH 1/7] shellEntry: Add CapsLockWarning class + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/619 +--- + data/theme/gnome-shell-sass/_common.scss | 5 +++ + js/ui/shellEntry.js | 39 +++++++++++++++++++++++- + 2 files changed, 43 insertions(+), 1 deletion(-) + +diff --git a/data/theme/gnome-shell-sass/_common.scss b/data/theme/gnome-shell-sass/_common.scss +index b1eeb0ce97..19a736ab7d 100644 +--- a/data/theme/gnome-shell-sass/_common.scss ++++ b/data/theme/gnome-shell-sass/_common.scss +@@ -391,6 +391,11 @@ StScrollBar { + padding-bottom: 8px; + } + ++ .prompt-dialog-caps-lock-warning { ++ @extend .prompt-dialog-error-label; ++ padding-left: 6.2em; ++ } ++ + .prompt-dialog-info-label { + font-size: 10pt; + padding-bottom: 8px; +diff --git a/js/ui/shellEntry.js b/js/ui/shellEntry.js +index 79f1aad3e7..c1738c4064 100644 +--- a/js/ui/shellEntry.js ++++ b/js/ui/shellEntry.js +@@ -1,6 +1,6 @@ + // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- + +-const { Clutter, Shell, St } = imports.gi; ++const { Clutter, GObject, Pango, Shell, St } = imports.gi; + + const BoxPointer = imports.ui.boxpointer; + const Main = imports.ui.main; +@@ -170,3 +170,40 @@ function addContextMenu(entry, params) { + entry._menuManager = null; + }); + } ++ ++var CapsLockWarning = GObject.registerClass( ++class CapsLockWarning extends St.Label { ++ _init(params) { ++ let defaultParams = { style_class: 'prompt-dialog-error-label' }; ++ super._init(Object.assign(defaultParams, params)); ++ ++ this.text = _('Caps lock is on.'); ++ ++ this._keymap = Clutter.get_default_backend().get_keymap(); ++ ++ this.connect('notify::mapped', () => { ++ if (this.is_mapped()) { ++ this.stateChangedId = this._keymap.connect('state-changed', ++ this._updateCapsLockWarningOpacity.bind(this)); ++ } else { ++ this._keymap.disconnect(this.stateChangedId); ++ this.stateChangedId = 0; ++ } ++ ++ this._updateCapsLockWarningOpacity(); ++ }); ++ ++ this.connect('destroy', () => { ++ if (this.stateChangedId > 0) ++ this._keymap.disconnect(this.stateChangedId); ++ }); ++ ++ this.clutter_text.ellipsize = Pango.EllipsizeMode.NONE; ++ this.clutter_text.line_wrap = true; ++ } ++ ++ _updateCapsLockWarningOpacity() { ++ let capsLockOn = this._keymap.get_caps_lock_state(); ++ this.opacity = capsLockOn ? 255 : 0; ++ } ++}); +-- +2.21.1 + + +From aa4938f261454f85c782e59e40d4e5a9e1a01dbc Mon Sep 17 00:00:00 2001 +From: Umang Jain +Date: Wed, 18 Dec 2019 01:33:45 +0530 +Subject: [PATCH 2/7] js: Add caps-lock Warning to the dialogs + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/619 +--- + js/gdm/authPrompt.js | 4 ++++ + js/ui/components/keyring.js | 6 ++++++ + js/ui/components/networkAgent.js | 8 ++++++++ + js/ui/components/polkitAgent.js | 2 ++ + js/ui/shellMountOperation.js | 3 +++ + 5 files changed, 23 insertions(+) + +diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js +index 71069e93b8..3ce9fd0d01 100644 +--- a/js/gdm/authPrompt.js ++++ b/js/gdm/authPrompt.js +@@ -113,6 +113,9 @@ var AuthPrompt = class { + + this._entry.grab_key_focus(); + ++ this._capsLockWarningLabel = new ShellEntry.CapsLockWarning(); ++ this.actor.add_child(this._capsLockWarningLabel); ++ + this._timedLoginIndicator = new St.Bin({ style_class: 'login-dialog-timed-login-indicator', + scale_x: 0 }); + +@@ -432,6 +435,7 @@ var AuthPrompt = class { + setPasswordChar(passwordChar) { + this._entry.clutter_text.set_password_char(passwordChar); + this._entry.menu.isPassword = passwordChar != ''; ++ this._capsLockWarningLabel.visible = passwordChar !== ''; + } + + setQuestion(question) { +diff --git a/js/ui/components/keyring.js b/js/ui/components/keyring.js +index 0d9f1e4663..3512fb63b1 100644 +--- a/js/ui/components/keyring.js ++++ b/js/ui/components/keyring.js +@@ -128,6 +128,12 @@ var KeyringDialog = class extends ModalDialog.ModalDialog { + this.prompt.set_password_actor(this._passwordEntry ? this._passwordEntry.clutter_text : null); + this.prompt.set_confirm_actor(this._confirmEntry ? this._confirmEntry.clutter_text : null); + ++ if (this._passwordEntry || this._confirmEntry) { ++ this._capsLockWarningLabel = new ShellEntry.CapsLockWarning(); ++ layout.attach(this._capsLockWarningLabel, 1, row, 1, 1); ++ row++; ++ } ++ + if (this.prompt.choice_visible) { + let choice = new CheckBox.CheckBox(); + this.prompt.bind_property('choice-label', choice.getLabelActor(), 'text', GObject.BindingFlags.SYNC_CREATE); +diff --git a/js/ui/components/networkAgent.js b/js/ui/components/networkAgent.js +index f871c732d9..32d40fb2b9 100644 +--- a/js/ui/components/networkAgent.js ++++ b/js/ui/components/networkAgent.js +@@ -95,6 +95,14 @@ var NetworkSecretDialog = class extends ModalDialog.ModalDialog { + secret.entry.clutter_text.set_password_char('\u25cf'); + } + ++ if (this._content.secrets.some(s => s.password)) { ++ this._capsLockWarningLabel = new ShellEntry.CapsLockWarning(); ++ if (rtl) ++ layout.attach(this._capsLockWarningLabel, 0, pos, 1, 1); ++ else ++ layout.attach(this._capsLockWarningLabel, 1, pos, 1, 1); ++ } ++ + contentBox.messageBox.add(secretTable); + + if (flags & NM.SecretAgentGetSecretsFlags.WPS_PBC_ACTIVE) { +diff --git a/js/ui/components/polkitAgent.js b/js/ui/components/polkitAgent.js +index 21feb40903..734a217335 100644 +--- a/js/ui/components/polkitAgent.js ++++ b/js/ui/components/polkitAgent.js +@@ -108,6 +108,8 @@ var AuthenticationDialog = class extends ModalDialog.ModalDialog { + + this.setInitialKeyFocus(this._passwordEntry); + this._passwordBox.hide(); ++ this._capsLockWarningLabel = new ShellEntry.CapsLockWarning({ style_class: 'prompt-dialog-caps-lock-warning' }); ++ content.messageBox.add(this._capsLockWarningLabel); + + this._errorMessageLabel = new St.Label({ style_class: 'prompt-dialog-error-label' }); + this._errorMessageLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE; +diff --git a/js/ui/shellMountOperation.js b/js/ui/shellMountOperation.js +index f976f400f4..3a2377ddaf 100644 +--- a/js/ui/shellMountOperation.js ++++ b/js/ui/shellMountOperation.js +@@ -305,6 +305,9 @@ var ShellMountPasswordDialog = class extends ModalDialog.ModalDialog { + this._passwordBox.add(this._passwordEntry, {expand: true }); + this.setInitialKeyFocus(this._passwordEntry); + ++ this._capsLockWarningLabel = new ShellEntry.CapsLockWarning(); ++ content.messageBox.add(this._capsLockWarningLabel); ++ + this._errorMessageLabel = new St.Label({ style_class: 'prompt-dialog-error-label', + text: _("Sorry, that didn’t work. Please try again.") }); + this._errorMessageLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE; +-- +2.21.1 + + +From 016cbd971711665844d40ec678d2779c160f791b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= +Date: Thu, 23 Jan 2020 22:37:06 +0100 +Subject: [PATCH 3/7] shellEntry: Make signal id variable private + +Signal connection IDs should be private variables, so make this one +private. + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/952 +--- + js/ui/shellEntry.js | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/js/ui/shellEntry.js b/js/ui/shellEntry.js +index c1738c4064..cd7c9a6c88 100644 +--- a/js/ui/shellEntry.js ++++ b/js/ui/shellEntry.js +@@ -183,19 +183,19 @@ class CapsLockWarning extends St.Label { + + this.connect('notify::mapped', () => { + if (this.is_mapped()) { +- this.stateChangedId = this._keymap.connect('state-changed', ++ this._stateChangedId = this._keymap.connect('state-changed', + this._updateCapsLockWarningOpacity.bind(this)); + } else { +- this._keymap.disconnect(this.stateChangedId); +- this.stateChangedId = 0; ++ this._keymap.disconnect(this._stateChangedId); ++ this._stateChangedId = 0; + } + + this._updateCapsLockWarningOpacity(); + }); + + this.connect('destroy', () => { +- if (this.stateChangedId > 0) +- this._keymap.disconnect(this.stateChangedId); ++ if (this._stateChangedId > 0) ++ this._keymap.disconnect(this._stateChangedId); + }); + + this.clutter_text.ellipsize = Pango.EllipsizeMode.NONE; +-- +2.21.1 + + +From ba65f9066d72731e345a5aced61f35d39c1c1376 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= +Date: Thu, 23 Jan 2020 23:26:45 +0100 +Subject: [PATCH 4/7] theme: Move caps-lock warning to entry widget stylesheet + +The caps-lock warning is more related to entries than dialogs and is +also used in gdm, which is not realated to dialogs at all. Rename the +css class to caps-lock-warning-label and move it to the entry +stylesheet. + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/952 +--- + data/theme/gnome-shell-sass/_common.scss | 12 +++++++----- + js/ui/shellEntry.js | 2 +- + 2 files changed, 8 insertions(+), 6 deletions(-) + +diff --git a/data/theme/gnome-shell-sass/_common.scss b/data/theme/gnome-shell-sass/_common.scss +index 19a736ab7d..4661533de2 100644 +--- a/data/theme/gnome-shell-sass/_common.scss ++++ b/data/theme/gnome-shell-sass/_common.scss +@@ -94,6 +94,13 @@ StEntry { + } + } + ++.caps-lock-warning-label { ++ padding-left: 6.2em; ++ @include fontsize($font-size - 1); ++ color: $warning_color; ++} ++ ++ + + /* Scrollbars */ + +@@ -391,11 +398,6 @@ StScrollBar { + padding-bottom: 8px; + } + +- .prompt-dialog-caps-lock-warning { +- @extend .prompt-dialog-error-label; +- padding-left: 6.2em; +- } +- + .prompt-dialog-info-label { + font-size: 10pt; + padding-bottom: 8px; +diff --git a/js/ui/shellEntry.js b/js/ui/shellEntry.js +index cd7c9a6c88..46eba88d54 100644 +--- a/js/ui/shellEntry.js ++++ b/js/ui/shellEntry.js +@@ -174,7 +174,7 @@ function addContextMenu(entry, params) { + var CapsLockWarning = GObject.registerClass( + class CapsLockWarning extends St.Label { + _init(params) { +- let defaultParams = { style_class: 'prompt-dialog-error-label' }; ++ let defaultParams = { style_class: 'caps-lock-warning-label' }; + super._init(Object.assign(defaultParams, params)); + + this.text = _('Caps lock is on.'); +-- +2.21.1 + + +From afd764c82febe21aec70bdfc19d256f3401530e1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= +Date: Thu, 23 Jan 2020 22:36:09 +0100 +Subject: [PATCH 5/7] shellEntry: Hide caps lock warning and use animation to + show it + +Since the caps-lock warning adds a lot of spacing to dialogs and the +lock screen, hide it by default and only show it when necessary. To make +the transition smooth instead of just showing the label, animate it in +using the height and opacity. + +Also add some bottom padding to the label so we can show or hide that +padding, too. + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/952 +--- + data/theme/gnome-shell-sass/_common.scss | 1 + + js/ui/shellEntry.js | 33 ++++++++++++++++++------ + 2 files changed, 26 insertions(+), 8 deletions(-) + +diff --git a/data/theme/gnome-shell-sass/_common.scss b/data/theme/gnome-shell-sass/_common.scss +index 4661533de2..9e0751c8c5 100644 +--- a/data/theme/gnome-shell-sass/_common.scss ++++ b/data/theme/gnome-shell-sass/_common.scss +@@ -95,6 +95,7 @@ StEntry { + } + + .caps-lock-warning-label { ++ padding-bottom: 8px; + padding-left: 6.2em; + @include fontsize($font-size - 1); + color: $warning_color; +diff --git a/js/ui/shellEntry.js b/js/ui/shellEntry.js +index 46eba88d54..fc8ee37a9a 100644 +--- a/js/ui/shellEntry.js ++++ b/js/ui/shellEntry.js +@@ -6,6 +6,7 @@ const BoxPointer = imports.ui.boxpointer; + const Main = imports.ui.main; + const Params = imports.misc.params; + const PopupMenu = imports.ui.popupMenu; ++const Tweener = imports.ui.tweener; + + var EntryMenu = class extends PopupMenu.PopupMenu { + constructor(entry) { +@@ -179,31 +180,47 @@ class CapsLockWarning extends St.Label { + + this.text = _('Caps lock is on.'); + ++ this.clutter_text.ellipsize = Pango.EllipsizeMode.NONE; ++ this.clutter_text.line_wrap = true; ++ + this._keymap = Clutter.get_default_backend().get_keymap(); + + this.connect('notify::mapped', () => { + if (this.is_mapped()) { + this._stateChangedId = this._keymap.connect('state-changed', +- this._updateCapsLockWarningOpacity.bind(this)); ++ () => this._sync(true)); + } else { + this._keymap.disconnect(this._stateChangedId); + this._stateChangedId = 0; + } + +- this._updateCapsLockWarningOpacity(); ++ this._sync(false); + }); + + this.connect('destroy', () => { +- if (this._stateChangedId > 0) ++ if (this._stateChangedId) + this._keymap.disconnect(this._stateChangedId); + }); +- +- this.clutter_text.ellipsize = Pango.EllipsizeMode.NONE; +- this.clutter_text.line_wrap = true; + } + +- _updateCapsLockWarningOpacity() { ++ _sync(animate) { + let capsLockOn = this._keymap.get_caps_lock_state(); +- this.opacity = capsLockOn ? 255 : 0; ++ ++ Tweener.removeTweens(this); ++ ++ this.natural_height_set = false; ++ let [, height] = this.get_preferred_height(-1); ++ this.natural_height_set = true; ++ ++ Tweener.addTween(this, { ++ height: capsLockOn ? height : 0, ++ opacity: capsLockOn ? 255 : 0, ++ time: animate ? 0.2 : 0, ++ transition: 'easeOutQuad', ++ onComplete: () => { ++ if (capsLockOn) ++ this.height = -1; ++ }, ++ }); + } + }); +-- +2.21.1 + + +From 1ef3dafb51da380c54635d0565dc098e40bbb3e1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 29 Jan 2020 17:48:57 +0100 +Subject: [PATCH 6/7] js: Initialize some properties + +Otherwise those can result in the (harmless) "reference to undefined +property" warnings. + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/970 +--- + js/ui/overview.js | 1 + + js/ui/shellEntry.js | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/js/ui/overview.js b/js/ui/overview.js +index dc6ad1821b..5bad4cbd62 100644 +--- a/js/ui/overview.js ++++ b/js/ui/overview.js +@@ -80,6 +80,7 @@ var Overview = class { + constructor() { + this._overviewCreated = false; + this._initCalled = false; ++ this._visible = false; + + Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); + this._sessionUpdated(); +diff --git a/js/ui/shellEntry.js b/js/ui/shellEntry.js +index fc8ee37a9a..55267e7c87 100644 +--- a/js/ui/shellEntry.js ++++ b/js/ui/shellEntry.js +@@ -184,6 +184,7 @@ class CapsLockWarning extends St.Label { + this.clutter_text.line_wrap = true; + + this._keymap = Clutter.get_default_backend().get_keymap(); ++ this._stateChangedId = 0; + + this.connect('notify::mapped', () => { + if (this.is_mapped()) { +-- +2.21.1 + + +From 273f7adb43cfee907342d017e1454ea90d42d262 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 21 Feb 2020 19:38:53 +0100 +Subject: [PATCH 7/7] shellEntry: Restore natural-height-set instead of forcing + it + +If we are transitioning the label from 0 to its natural height, we +must set natural-height-set again after querying the preferred height, +otherwise Clutter would skip the transition. + +However when transitioning in the opposite direction, setting the +property to true can go horribly wrong: +If the actor hasn't been allocated before, it will store a fixed +natural height of 0. But as there is no fixed min-height, we can +end up with min-height > natural-height, which is a fatal error. + +(This isn't an issue when *actually* setting a fixed height, as +that will set both natural and minimum height) + +So instead of always setting natural-height-set to true, restore +its previous value to fix the issue. + +https://gitlab.gnome.org/GNOME/gnome-shell/issues/2255 +--- + js/ui/shellEntry.js | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/js/ui/shellEntry.js b/js/ui/shellEntry.js +index 55267e7c87..4a30b22f7a 100644 +--- a/js/ui/shellEntry.js ++++ b/js/ui/shellEntry.js +@@ -209,9 +209,10 @@ class CapsLockWarning extends St.Label { + + Tweener.removeTweens(this); + ++ const naturalHeightSet = this.natural_height_set; + this.natural_height_set = false; + let [, height] = this.get_preferred_height(-1); +- this.natural_height_set = true; ++ this.natural_height_set = naturalHeightSet; + + Tweener.addTween(this, { + height: capsLockOn ? height : 0, +-- +2.21.1 + diff --git a/SOURCES/fix-some-js-warnings.patch b/SOURCES/fix-some-js-warnings.patch new file mode 100644 index 0000000..18b12eb --- /dev/null +++ b/SOURCES/fix-some-js-warnings.patch @@ -0,0 +1,182 @@ +From 43d6305bfbe079a3bf80a96d40a3a176c165ef7a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= +Date: Thu, 23 May 2019 06:12:56 +0200 +Subject: [PATCH 1/5] realmd: Set login format to null on start and update if + invalid + +We were checking an undefined property but that would lead to a a warning. +Instead we can consider the login format unset until is null, and in case +update it. + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/700 +--- + js/gdm/realmd.js | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/js/gdm/realmd.js b/js/gdm/realmd.js +index 50f3c5899..04cd99787 100644 +--- a/js/gdm/realmd.js ++++ b/js/gdm/realmd.js +@@ -21,6 +21,7 @@ var Manager = class { + '/org/freedesktop/realmd', + this._reloadRealms.bind(this)) + this._realms = {}; ++ this._loginFormat = null; + + this._signalId = this._aggregateProvider.connect('g-properties-changed', + (proxy, properties) => { +@@ -86,7 +87,7 @@ var Manager = class { + } + + get loginFormat() { +- if (this._loginFormat !== undefined) ++ if (this._loginFormat) + return this._loginFormat; + + this._updateLoginFormat(); +-- +2.21.1 + + +From 80836cd1ea4ef5d69a35bdfd7931b0e2c202f5b3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Tue, 9 Jun 2020 19:42:21 +0200 +Subject: [PATCH 2/5] popupMenu: Guard against non-menu-item children + +This avoid a harmless but annoying warning. +--- + js/ui/popupMenu.js | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js +index 44818533a..b5115d7f7 100644 +--- a/js/ui/popupMenu.js ++++ b/js/ui/popupMenu.js +@@ -696,7 +696,8 @@ var PopupMenuBase = class { + } + + _getMenuItems() { +- return this.box.get_children().map(a => a._delegate).filter(item => { ++ const children = this.box.get_children().filter(a => a._delegate !== undefined); ++ return children.map(a => a._delegate).filter(item => { + return item instanceof PopupBaseMenuItem || item instanceof PopupMenuSection; + }); + } +-- +2.21.1 + + +From f0af67381cf0fb9a9ab766fa6b3d3e6ff5707122 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Tue, 9 Jun 2020 19:48:06 +0200 +Subject: [PATCH 3/5] st/shadow: Check pipeline when painting + +We shouldn't simply assume that st_shadow_helper_update() has been +called before paint() or that the pipeline was created successfully. +--- + src/st/st-shadow.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +diff --git a/src/st/st-shadow.c b/src/st/st-shadow.c +index f3a22f034..7665de755 100644 +--- a/src/st/st-shadow.c ++++ b/src/st/st-shadow.c +@@ -289,9 +289,10 @@ st_shadow_helper_paint (StShadowHelper *helper, + ClutterActorBox *actor_box, + guint8 paint_opacity) + { +- _st_paint_shadow_with_opacity (helper->shadow, +- framebuffer, +- helper->pipeline, +- actor_box, +- paint_opacity); ++ if (helper->pipeline != NULL) ++ _st_paint_shadow_with_opacity (helper->shadow, ++ framebuffer, ++ helper->pipeline, ++ actor_box, ++ paint_opacity); + } +-- +2.21.1 + + +From a500f3c59a485755b8361e8f4dd48f8df4af95ba Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Tue, 5 Jan 2021 21:42:24 +0100 +Subject: [PATCH 4/5] viewSelector: Don't set page parent during construction + +gjs now aggressively garbage-collects objects that fall out of scope, +sometimes too aggressively: + + - we pass a child as construct property to StBin + - as a result, the child's ::parent-set handler runs + - when calling clutter_actor_get_parent() from that + handler, the returned object is garbage-collected + *before* the constructor returns (and thus the + assignment that would keep it alive) + +This is a bug on the gjs side that should be fixed, but we can easily +work around the issue by setting the child after constructing the +parent. +--- + js/ui/viewSelector.js | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/js/ui/viewSelector.js b/js/ui/viewSelector.js +index 77146552d..6529ac9a5 100644 +--- a/js/ui/viewSelector.js ++++ b/js/ui/viewSelector.js +@@ -301,11 +301,13 @@ var ViewSelector = class { + _addPage(actor, name, a11yIcon, params) { + params = Params.parse(params, { a11yFocus: null }); + +- let page = new St.Bin({ child: actor, +- x_align: St.Align.START, +- y_align: St.Align.START, +- x_fill: true, +- y_fill: true }); ++ let page = new St.Bin({ ++ x_align: St.Align.START, ++ y_align: St.Align.START, ++ x_fill: true, ++ y_fill: true, ++ }); ++ page.set_child(actor); + if (params.a11yFocus) + Main.ctrlAltTabManager.addGroup(params.a11yFocus, name, a11yIcon); + else +-- +2.21.1 + + +From a53d1a74fed3aee896a6930130bd7e3a39a24255 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 23 Oct 2020 23:44:48 +0200 +Subject: [PATCH 5/5] workspacesView: Don't set up MetaLater when unparented + +We already do the check in the later handler, but if we got +unparented because the actor is destroyed, then the call to +get_parent() itself will trigger a (harmless but annoying) +warning. +--- + js/ui/workspacesView.js | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js +index e302296a6..3270900b2 100644 +--- a/js/ui/workspacesView.js ++++ b/js/ui/workspacesView.js +@@ -715,6 +715,9 @@ var WorkspacesDisplay = class { + oldParent.disconnect(this._notifyOpacityId); + this._notifyOpacityId = 0; + ++ if (!this.actor.get_parent()) ++ return; ++ + Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => { + let newParent = this.actor.get_parent(); + if (!newParent) +-- +2.21.1 + diff --git a/SOURCES/wake-up-on-deactivate.patch b/SOURCES/wake-up-on-deactivate.patch new file mode 100644 index 0000000..b20cbbd --- /dev/null +++ b/SOURCES/wake-up-on-deactivate.patch @@ -0,0 +1,79 @@ +From d6ead50fe230df58ddab822966d69760b00ec920 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 1 Apr 2020 14:48:10 +0200 +Subject: [PATCH 1/2] screenShield: Switch lightboxes off before unlock + transition + +There is no point in animating a transition with fullscreen black +rectangles stacked on top, so switch them off before rather than +after the transition. + +https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1158 +--- + js/ui/screenShield.js | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js +index cd38f11fc8..282f29fa30 100644 +--- a/js/ui/screenShield.js ++++ b/js/ui/screenShield.js +@@ -1221,6 +1221,9 @@ var ScreenShield = class { + this._isModal = false; + } + ++ this._longLightbox.hide(); ++ this._shortLightbox.hide(); ++ + Tweener.addTween(this._lockDialogGroup, { + scale_x: 0, + scale_y: 0, +@@ -1237,8 +1240,6 @@ var ScreenShield = class { + this._dialog = null; + } + +- this._longLightbox.hide(); +- this._shortLightbox.hide(); + this.actor.hide(); + + if (this._becameActiveId != 0) { +-- +2.28.0 + + +From 39ac7cad68d8c00d98c900b35add637b01eddbbf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Tue, 31 Mar 2020 21:07:59 +0200 +Subject: [PATCH 2/2] screenShield: Wake up on deactivate() + +Usually the screen is woken up before the shield is deactivated, but +it is also possible to unlock the session programmatically via the +org.gnome.ScreenSaver D-Bus API. + +The intention is very likely not to unlock a turned off screen in +that case. Nor does it seem like a good idea to change the lock +state without any indication. + +Waking up the screen is more likely to meet expectations and is +more reasonable too, so do that. + +https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1158 +--- + js/ui/screenShield.js | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js +index 282f29fa30..2d0a429bee 100644 +--- a/js/ui/screenShield.js ++++ b/js/ui/screenShield.js +@@ -1200,6 +1200,8 @@ var ScreenShield = class { + if (Main.sessionMode.currentMode == 'unlock-dialog') + Main.sessionMode.popMode('unlock-dialog'); + ++ this.emit('wake-up-screen'); ++ + if (this._isGreeter) { + // We don't want to "deactivate" any more than + // this. In particular, we don't want to drop +-- +2.28.0 + diff --git a/SPECS/gnome-shell.spec b/SPECS/gnome-shell.spec index fdf549e..73ac400 100644 --- a/SPECS/gnome-shell.spec +++ b/SPECS/gnome-shell.spec @@ -1,6 +1,6 @@ Name: gnome-shell Version: 3.32.2 -Release: 21%{?dist} +Release: 24%{?dist} Summary: Window management and application launching for GNOME Group: User Interface/Desktops @@ -24,6 +24,8 @@ 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 # Misc. Patch30: 0001-shellDBus-Add-a-DBus-method-to-load-a-single-extensi.patch @@ -32,6 +34,7 @@ Patch32: 0001-extensionSystem-Notify-about-extension-issues-on-upd.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 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 @@ -51,6 +54,7 @@ Patch52: 0001-popupMenu-Handle-keypress-if-numlock-is-enabled.patch # Backport JS invalid access warnings (#1651894, #1663171, #1642482, #1637622) Patch54: fix-invalid-access-warnings.patch Patch55: more-spurious-allocation-warnings.patch +Patch56: fix-some-js-warnings.patch # Backport performance fixes under load (#1820760) Patch60: 0001-environment-reduce-calls-to-g_time_zone_new_local.patch @@ -239,6 +243,22 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/evolution-calendar.de %{_mandir}/man1/%{name}.1.gz %changelog +* Tue Jan 07 2021 Florian Müllner - 3.32.2-24 +- Handle workspace from startup notification + Resolves: #1671761 + +* Tue Jan 05 2021 Florian Müllner - 3.32.2-23 +- Work around aggressive garbage collection + Related: #1881312 + +* Fri Oct 23 2020 Florian Müllner - 3.32.2-22 +- Wake up lock screen when deactivated programmatically + Resolves: #1854290 +- Backport better caps-lock warning + Resolves: #1861357 +- Fix more (harmless) JS warnings + Resolves: #1881312 + * Thu Oct 01 2020 Michael Catanzaro - 3.32.2-21 - Fix JS warning in AuthList downstream patch Resolves: #1860946