diff --git a/SOURCES/0001-Do-not-change-Wacom-LEDs-through-g-s-d.patch b/SOURCES/0001-Do-not-change-Wacom-LEDs-through-g-s-d.patch new file mode 100644 index 0000000..9eb76be --- /dev/null +++ b/SOURCES/0001-Do-not-change-Wacom-LEDs-through-g-s-d.patch @@ -0,0 +1,25 @@ +From f5ddd0fc02e99597e4b8506ac35523a6fa8ac22f Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Wed, 4 Mar 2020 16:08:31 +0100 +Subject: [PATCH] Do not change Wacom LEDs through g-s-d + +Let the wacom kernel driver sort it out by itself. +--- + js/ui/windowManager.js | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js +index dfe1b44..b2e938c 100644 +--- a/js/ui/windowManager.js ++++ b/js/ui/windowManager.js +@@ -1037,7 +1037,6 @@ var WindowManager = class { + + if (this._gsdWacomProxy) { + this._gsdWacomProxy.SetOLEDLabelsRemote(pad.get_device_node(), labels); +- this._gsdWacomProxy.SetGroupModeLEDRemote(pad.get_device_node(), group, mode); + } + }); + +-- +2.24.1 + diff --git a/SOURCES/0001-a11y-Change-HC-icon-theme-first.patch b/SOURCES/0001-a11y-Change-HC-icon-theme-first.patch new file mode 100644 index 0000000..f5eebd6 --- /dev/null +++ b/SOURCES/0001-a11y-Change-HC-icon-theme-first.patch @@ -0,0 +1,58 @@ +From a94260b4f2f72ea9328a0194b8656f1fb3e98675 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Sat, 14 Dec 2019 19:15:53 +0100 +Subject: [PATCH] a11y: Change HC icon theme first + +There are two ways for applications to provide a high contrast icon: + + 1. install an icon into the HighContrast theme + 2. install a symbolic icon into the default hicolor theme + +The latter is preferred nowadays, and implemented in the high-contrast +CSS variant by enforcing the symbolic icon style. + +However together with the way we currently enable/disable high-contrast, +this can lead to the following race: + 1. the GTK theme is changed from HighContrast + 2. we reload the default stylesheet + 3. the icon style changes to "regular", so we request a + new icon from the HighContrast icon theme + 4. the icon theme is changed from HighContrast + 5. we evict existing icons from the cache + 6. we reload icons for the new icon theme; however as we + find a pending request (from 3), we re-use it + 7. the request from 3 finishes, and we end up with a + wrong icon in the cache + +The simplest fix is to change the icon theme before the GTK theme: Unlike the +theme name, the icon style is encoded in the cache key, so we won't re-use +an old (and incorrect) request in that case. +--- + js/ui/status/accessibility.js | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/js/ui/status/accessibility.js b/js/ui/status/accessibility.js +index 10223ec84..90948d465 100644 +--- a/js/ui/status/accessibility.js ++++ b/js/ui/status/accessibility.js +@@ -154,14 +154,14 @@ class ATIndicator extends PanelMenu.Button { + interfaceSettings.is_writable(KEY_ICON_THEME), + enabled => { + if (enabled) { +- interfaceSettings.set_string(KEY_GTK_THEME, HIGH_CONTRAST_THEME); + interfaceSettings.set_string(KEY_ICON_THEME, HIGH_CONTRAST_THEME); ++ interfaceSettings.set_string(KEY_GTK_THEME, HIGH_CONTRAST_THEME); + } else if(!hasHC) { +- interfaceSettings.set_string(KEY_GTK_THEME, gtkTheme); + interfaceSettings.set_string(KEY_ICON_THEME, iconTheme); ++ interfaceSettings.set_string(KEY_GTK_THEME, gtkTheme); + } else { +- interfaceSettings.reset(KEY_GTK_THEME); + interfaceSettings.reset(KEY_ICON_THEME); ++ interfaceSettings.reset(KEY_GTK_THEME); + } + }); + return highContrast; +-- +2.23.0 + diff --git a/SOURCES/0001-padOsd-Re-query-action-labels-after-mode-switches.patch b/SOURCES/0001-padOsd-Re-query-action-labels-after-mode-switches.patch new file mode 100644 index 0000000..bdbfc65 --- /dev/null +++ b/SOURCES/0001-padOsd-Re-query-action-labels-after-mode-switches.patch @@ -0,0 +1,80 @@ +From 2bb826291c420dd1b601758c7a686ac48e1086a6 Mon Sep 17 00:00:00 2001 +From: Carlos Garnacho +Date: Mon, 16 Dec 2019 12:39:49 +0100 +Subject: [PATCH] padOsd: Re-query action labels after mode switches + +Do this so the pad OSD is able to update dynamically to mode changes, +showing immediately the new actions for the current mode(s). + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/898 +--- + js/ui/padOsd.js | 31 ++++++++++++++++++++++++++++--- + 1 file changed, 28 insertions(+), 3 deletions(-) + +diff --git a/js/ui/padOsd.js b/js/ui/padOsd.js +index a4af47297..b4b3fe453 100644 +--- a/js/ui/padOsd.js ++++ b/js/ui/padOsd.js +@@ -555,6 +555,14 @@ var PadDiagram = GObject.registerClass({ + this.add_actor(label); + } + ++ updateLabels(callback) { ++ for (let i = 0; i < this._labels.length; i++) { ++ let [label, action, idx, dir] = this._labels[i]; ++ let str = callback(action, idx, dir); ++ label.set_text(str); ++ } ++ } ++ + _applyLabel(label, action, idx, dir, str) { + if (str != null) { + label.set_text(str); +@@ -758,17 +766,29 @@ var PadOsd = class { + global.display.request_pad_osd(pad, editionMode); + } + +- _createLabel(type, number, dir) { ++ _getActionText(type, number) { + let str = global.display.get_pad_action_label(this.padDevice, type, number); +- let label = new St.Label({ text: str ? str : _("None") }); ++ return str ? str : _("None"); ++ } ++ ++ _createLabel(type, number, dir) { ++ let label = new St.Label({ text: this._getActionText(type, number) }); + this._padDiagram.addLabel(label, type, number, dir); + } + ++ _updateActionLabels() { ++ this._padDiagram.updateLabels(this._getActionText.bind(this)); ++ } ++ + _onCapturedEvent(actor, event) { ++ let isModeSwitch = ++ (event.type() == Clutter.EventType.PAD_BUTTON_PRESS || ++ event.type() == Clutter.EventType.PAD_BUTTON_RELEASE) && ++ this.padDevice.get_mode_switch_button_group(event.get_button()) >= 0; ++ + if (event.type() == Clutter.EventType.PAD_BUTTON_PRESS && + event.get_source_device() == this.padDevice) { + this._padDiagram.activateButton(event.get_button()); +- let isModeSwitch = this.padDevice.get_mode_switch_button_group(event.get_button()) >= 0; + + /* Buttons that switch between modes cannot be edited */ + if (this._editionMode && !isModeSwitch) +@@ -777,6 +797,11 @@ var PadOsd = class { + } else if (event.type() == Clutter.EventType.PAD_BUTTON_RELEASE && + event.get_source_device() == this.padDevice) { + this._padDiagram.deactivateButton(event.get_button()); ++ ++ if (isModeSwitch) { ++ this._endActionEdition(); ++ this._updateActionLabels(); ++ } + return Clutter.EVENT_STOP; + } else if (event.type() == Clutter.EventType.KEY_PRESS && + (!this._editionMode || event.get_key_symbol() == Clutter.Escape)) { +-- +2.24.0 + diff --git a/SOURCES/0001-workspace-Pass-device-to-startDrag.patch b/SOURCES/0001-workspace-Pass-device-to-startDrag.patch new file mode 100644 index 0000000..7b4afba --- /dev/null +++ b/SOURCES/0001-workspace-Pass-device-to-startDrag.patch @@ -0,0 +1,31 @@ +From 9115f6e7962b97c3ee2fbef7b195b7116e62c070 Mon Sep 17 00:00:00 2001 +From: Carlos Garnacho +Date: Fri, 13 Dec 2019 18:14:51 +0100 +Subject: [PATCH] workspace: Pass device to startDrag() + +This is necessary to make DnD operations work from tablet devices on +wayland, as it's not the same onscreen pointer sprite than mice. Fixes +window DnD in the overview on tablet devices, no longer having them stick +to the wrong pointer. + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/897 +--- + js/ui/workspace.js | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/js/ui/workspace.js b/js/ui/workspace.js +index 1e9bedc28..d470f7f40 100644 +--- a/js/ui/workspace.js ++++ b/js/ui/workspace.js +@@ -431,7 +431,7 @@ var WindowClone = GObject.registerClass({ + return; + let [x, y] = action.get_coords(); + action.release(); +- this._draggable.startDrag(x, y, global.get_current_time(), this._dragTouchSequence); ++ this._draggable.startDrag(x, y, global.get_current_time(), this._dragTouchSequence, event.get_device()); + }); + } else { + this.emit('show-chrome'); +-- +2.23.0 + diff --git a/SOURCES/fix-app-view-leaks.patch b/SOURCES/fix-app-view-leaks.patch new file mode 100644 index 0000000..b74b9b2 --- /dev/null +++ b/SOURCES/fix-app-view-leaks.patch @@ -0,0 +1,421 @@ +From a518c9f57e5fe9c6b5ece5c6cb0534a83f0b2f2d Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Mon, 15 Jul 2019 13:52:58 -0400 +Subject: [PATCH 1/8] appDisplay: Don't leak duplicate items in AppView + +If an icon already exists in an app view with the same id, the +duplicate is not added on a call to addItem. Unfortunately, +since it's not added, the icon actor gets orphaned and leaked. + +This commit address the problem by introducing a new hasItem +method and disallowing callers to call addItem with a duplicate +in the first place. + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/628 +--- + js/ui/appDisplay.js | 15 ++++++++++++--- + 1 file changed, 12 insertions(+), 3 deletions(-) + +diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js +index a07db6573..fa22f47e0 100644 +--- a/js/ui/appDisplay.js ++++ b/js/ui/appDisplay.js +@@ -143,10 +143,14 @@ class BaseAppView { + return this._allItems; + } + ++ hasItem(id) { ++ return this._items[id] !== undefined; ++ } ++ + addItem(icon) { + let id = icon.id; +- if (this._items[id] !== undefined) +- return; ++ if (this.hasItem(id)) ++ throw new Error(`icon with id ${id} already added to view`) + + this._allItems.push(icon); + this._items[id] = icon; +@@ -386,6 +390,8 @@ var AllView = class AllView extends BaseAppView { + + let folders = this._folderSettings.get_strv('folder-children'); + folders.forEach(id => { ++ if (this.hasItem(id)) ++ return; + let path = this._folderSettings.path + 'folders/' + id + '/'; + let icon = new FolderIcon(id, path, this); + icon.connect('name-changed', this._itemNameChanged.bind(this)); +@@ -1165,7 +1171,10 @@ var FolderIcon = class FolderIcon { + let excludedApps = this._folder.get_strv('excluded-apps'); + let appSys = Shell.AppSystem.get_default(); + let addAppId = appId => { +- if (excludedApps.indexOf(appId) >= 0) ++ if (this.view.hasItem(appId)) ++ return; ++ ++ if (excludedApps.includes(appId)) + return; + + let app = appSys.lookup_app(appId); +-- +2.23.0 + + +From 2b6aa9aed98c4854c2ad015879ddcb8d2bf91e9e Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Mon, 22 Jul 2019 11:06:30 -0400 +Subject: [PATCH 2/8] iconGrid: Clear meta_later callback on destruction + +The IconGrid code sometimes sets up a callback to be invoked +later right before being destroyed. + +This commit adds a destroy handler to cancel the callback. + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/628 +--- + js/ui/iconGrid.js | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +diff --git a/js/ui/iconGrid.js b/js/ui/iconGrid.js +index d51a443e8..1f05e67f3 100644 +--- a/js/ui/iconGrid.js ++++ b/js/ui/iconGrid.js +@@ -210,6 +210,8 @@ var IconGrid = GObject.registerClass({ + this.rightPadding = 0; + this.leftPadding = 0; + ++ this._updateIconSizesLaterId = 0; ++ + this._items = []; + this._clonesAnimating = []; + // Pulled from CSS, but hardcode some defaults here +@@ -227,6 +229,14 @@ var IconGrid = GObject.registerClass({ + + this.connect('actor-added', this._childAdded.bind(this)); + this.connect('actor-removed', this._childRemoved.bind(this)); ++ this.connect('destroy', this._onDestroy.bind(this)); ++ } ++ ++ _onDestroy() { ++ if (this._updateIconSizesLaterId) { ++ Meta.later_remove (this._updateIconSizesLaterId); ++ this._updateIconSizesLaterId = 0; ++ } + } + + _keyFocusIn(actor) { +@@ -757,12 +767,14 @@ var IconGrid = GObject.registerClass({ + + this._updateSpacingForSize(availWidth, availHeight); + } +- Meta.later_add(Meta.LaterType.BEFORE_REDRAW, +- this._updateIconSizes.bind(this)); ++ if (!this._updateIconSizesLaterId) ++ this._updateIconSizesLaterId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, ++ this._updateIconSizes.bind(this)); + } + + // Note that this is ICON_SIZE as used by BaseIcon, not elsewhere in IconGrid; it's a bit messed up + _updateIconSizes() { ++ this._updateIconSizesLaterId = 0; + let scale = Math.min(this._fixedHItemSize, this._fixedVItemSize) / Math.max(this._hItemSize, this._vItemSize); + let newIconSize = Math.floor(ICON_SIZE * scale); + for (let i in this._items) { +-- +2.23.0 + + +From 14a2650548a5104d6a3ec7a1174a23264d79030a Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Mon, 22 Jul 2019 11:02:10 -0400 +Subject: [PATCH 3/8] appDisplay: Add AppFolderPopup destroy handler + +At the moment AppFolderPopup calls popdown on destruction, +which leads to open-state-changed getting emitted after +the actor associated with the popup is destroyed. + +This commit handles ungrabbing and closing from an +actor destroy handler to side-step the open-state-changed +signal. + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/628 +--- + js/ui/appDisplay.js | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js +index fa22f47e0..b75d095d5 100644 +--- a/js/ui/appDisplay.js ++++ b/js/ui/appDisplay.js +@@ -1329,6 +1329,15 @@ var AppFolderPopup = class AppFolderPopup { + }); + this._grabHelper.addActor(Main.layoutManager.overviewGroup); + this.actor.connect('key-press-event', this._onKeyPress.bind(this)); ++ this.actor.connect('destroy', this._onDestroy.bind(this)); ++ } ++ ++ _onDestroy() { ++ if (this._isOpen) { ++ this._isOpen = false; ++ this._grabHelper.ungrab({ actor: this.actor }); ++ this._grabHelper = null; ++ } + } + + _onKeyPress(actor, event) { +-- +2.23.0 + + +From c9fcb2d23141694ffa2182df20ba75687b01dacc Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Thu, 18 Jul 2019 10:06:38 -0400 +Subject: [PATCH 4/8] appDisplay: Clear AllView reference to current popup when + destroyed + +AllView contains a reference to the current popup that lingers after +the popup is destroyed. + +This commit fixes that, by explicitly nullifying when appropriate. + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/628 +--- + js/ui/appDisplay.js | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js +index b75d095d5..dabf63bfd 100644 +--- a/js/ui/appDisplay.js ++++ b/js/ui/appDisplay.js +@@ -300,6 +300,7 @@ var AllView = class AllView extends BaseAppView { + this._eventBlocker.add_action(this._clickAction); + + this._displayingPopup = false; ++ this._currentPopupDestroyId = 0; + + this._availWidth = 0; + this._availHeight = 0; +@@ -589,7 +590,22 @@ var AllView = class AllView extends BaseAppView { + this._stack.add_actor(popup.actor); + popup.connect('open-state-changed', (popup, isOpen) => { + this._eventBlocker.reactive = isOpen; +- this._currentPopup = isOpen ? popup : null; ++ ++ if (this._currentPopup) { ++ this._currentPopup.actor.disconnect(this._currentPopupDestroyId); ++ this._currentPopupDestroyId = 0; ++ } ++ ++ this._currentPopup = null; ++ ++ if (isOpen) { ++ this._currentPopup = popup; ++ this._currentPopupDestroyId = popup.actor.connect('destroy', () => { ++ this._currentPopup = null; ++ this._currentPopupDestroyId = 0; ++ this._eventBlocker.reactive = false; ++ }); ++ } + this._updateIconOpacities(isOpen); + if(!isOpen) + this._closeSpaceForPopup(); +-- +2.23.0 + + +From b7a3fd7fa4527ba9411dcd18debe6ccf88c34dc0 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Mon, 22 Jul 2019 10:57:57 -0400 +Subject: [PATCH 5/8] appDisplay: Add destroy handler for FolderIcon + +It is important that the FolderView of a FolderIcon always +gets destroyed before the AppFolderPopup, since the view +may or may not be in the popup, and the view should +get cleaned up exactly once in either case. + +This commit adds a destroy handler on FolderIcon to ensure +things get taken down in the right order, and to make sure +the view isn't leaked if it's not yet part of the popup. + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/628 +--- + js/ui/appDisplay.js | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js +index dabf63bfd..5a8f4f1bf 100644 +--- a/js/ui/appDisplay.js ++++ b/js/ui/appDisplay.js +@@ -1156,6 +1156,7 @@ var FolderIcon = class FolderIcon { + this.view.actor.vscroll.adjustment.value = 0; + this._openSpaceForPopup(); + }); ++ this.actor.connect('destroy', this.onDestroy.bind(this)); + this.actor.connect('notify::mapped', () => { + if (!this.actor.mapped && this._popup) + this._popup.popdown(); +@@ -1165,6 +1166,13 @@ var FolderIcon = class FolderIcon { + this._redisplay(); + } + ++ onDestroy() { ++ this.view.actor.destroy(); ++ ++ if (this._popup) ++ this._popup.actor.destroy(); ++ } ++ + getAppIds() { + return this.view.getAllItems().map(item => item.id); + } +-- +2.23.0 + + +From a90d7a97d21ffa596747cc8ecd0e3f500cb8a77c Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Thu, 18 Jul 2019 14:49:30 -0400 +Subject: [PATCH 6/8] appDisplay: Stop watching FolderIcon parent view when + destroyed + +When a FolderIcon is opened, it asks the parent view to allocate +space for it, which takes time. Eventually, the space-ready +signal is emitted on the view and the icon can make use of the new +space with its popup. If the icon gets destroyed in the +interim, though, space-ready signal handler still fires. + +This commit disconnects the signal handler so it doesn't get called +on a destroyed icon. + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/628 +--- + js/ui/appDisplay.js | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js +index 5a8f4f1bf..062ff222c 100644 +--- a/js/ui/appDisplay.js ++++ b/js/ui/appDisplay.js +@@ -1169,6 +1169,11 @@ var FolderIcon = class FolderIcon { + onDestroy() { + this.view.actor.destroy(); + ++ if (this._spaceReadySignalId) { ++ this._parentView.disconnect(this._spaceReadySignalId); ++ this._spaceReadySignalId = 0; ++ } ++ + if (this._popup) + this._popup.actor.destroy(); + } +@@ -1240,8 +1245,9 @@ var FolderIcon = class FolderIcon { + } + + _openSpaceForPopup() { +- let id = this._parentView.connect('space-ready', () => { +- this._parentView.disconnect(id); ++ this._spaceReadySignalId = this._parentView.connect('space-ready', () => { ++ this._parentView.disconnect(this._spaceReadySignalId); ++ this._spaceReadySignalId = 0; + this._popup.popup(); + this._updatePopupPosition(); + }); +-- +2.23.0 + + +From b57ab33dadf0f31c5bf2c800806593e94784050c Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Thu, 18 Jul 2019 10:19:13 -0400 +Subject: [PATCH 7/8] appDisplay: Add open method to FolderIcon + +At the moment the only way to open a folder icon is to click on it; +there's no API to open the icon programmatically. + +This commits adds an open method and makes the click handler use +it. + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/628 +--- + js/ui/appDisplay.js | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js +index 062ff222c..c0c6e3663 100644 +--- a/js/ui/appDisplay.js ++++ b/js/ui/appDisplay.js +@@ -1151,11 +1151,7 @@ var FolderIcon = class FolderIcon { + + this.view = new FolderView(); + +- this.actor.connect('clicked', () => { +- this._ensurePopup(); +- this.view.actor.vscroll.adjustment.value = 0; +- this._openSpaceForPopup(); +- }); ++ this.actor.connect('clicked', this.open.bind(this)); + this.actor.connect('destroy', this.onDestroy.bind(this)); + this.actor.connect('notify::mapped', () => { + if (!this.actor.mapped && this._popup) +@@ -1178,6 +1174,12 @@ var FolderIcon = class FolderIcon { + this._popup.actor.destroy(); + } + ++ open() { ++ this._ensurePopup(); ++ this.view.actor.vscroll.adjustment.value = 0; ++ this._openSpaceForPopup(); ++ } ++ + getAppIds() { + return this.view.getAllItems().map(item => item.id); + } +-- +2.23.0 + + +From baacab7922a56957d041aa59944c419b82e7a7e1 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Thu, 18 Jul 2019 11:13:27 -0400 +Subject: [PATCH 8/8] appDisplay: Keep popup open on refresh + +If the list of applications is refreshed we currently close +the open app folder. + +This commit adds logic to reopen the app folder on reload. + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/628 +--- + js/ui/appDisplay.js | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js +index c0c6e3663..7fad02cd0 100644 +--- a/js/ui/appDisplay.js ++++ b/js/ui/appDisplay.js +@@ -345,6 +345,21 @@ var AllView = class AllView extends BaseAppView { + super.removeAll(); + } + ++ _redisplay() { ++ let openFolderId = null; ++ if (this._displayingPopup && this._currentPopup) ++ openFolderId = this._currentPopup._source.id; ++ ++ super._redisplay(); ++ ++ if (openFolderId) { ++ let [folderToReopen] = this.folderIcons.filter(folder => folder.id == openFolderId); ++ ++ if (folderToReopen) ++ folderToReopen.open(); ++ } ++ } ++ + _itemNameChanged(item) { + // If an item's name changed, we can pluck it out of where it's + // supposed to be and reinsert it where it's sorted. +-- +2.23.0 + diff --git a/SOURCES/perf-tool-wayland.patch b/SOURCES/perf-tool-wayland.patch new file mode 100644 index 0000000..c7530a6 --- /dev/null +++ b/SOURCES/perf-tool-wayland.patch @@ -0,0 +1,124 @@ +From 3c4c37e4d0668d748ee792f7580defdf4780624a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 5 Dec 2019 14:12:47 +0100 +Subject: [PATCH 1/2] perf-helper: Add content for custom drawing + +Drawing windows got a lot more involved with the advent of client-side +decorations. Instead of accounting for visible and invisible borders, +titlebar and shadows when necessary, just add an empty child for the +custom drawing. + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/887 +--- + src/shell-perf-helper.c | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +diff --git a/src/shell-perf-helper.c b/src/shell-perf-helper.c +index f115dcbdc..ba1754e02 100644 +--- a/src/shell-perf-helper.c ++++ b/src/shell-perf-helper.c +@@ -119,9 +119,9 @@ on_window_map_event (GtkWidget *window, + } + + static gboolean +-on_window_draw (GtkWidget *window, +- cairo_t *cr, +- WindowInfo *info) ++on_child_draw (GtkWidget *window, ++ cairo_t *cr, ++ WindowInfo *info) + { + cairo_rectangle_int_t allocation; + double x_offset, y_offset; +@@ -203,6 +203,7 @@ create_window (int width, + gboolean redraws) + { + WindowInfo *info; ++ GtkWidget *child; + + info = g_new0 (WindowInfo, 1); + info->width = width; +@@ -218,10 +219,13 @@ create_window (int width, + info->pending = TRUE; + info->start_time = -1; + ++ child = g_object_new (GTK_TYPE_BOX, "visible", TRUE, "app-paintable", TRUE, NULL); ++ gtk_container_add (GTK_CONTAINER (info->window), child); ++ + gtk_widget_set_size_request (info->window, width, height); + gtk_widget_set_app_paintable (info->window, TRUE); + g_signal_connect (info->window, "map-event", G_CALLBACK (on_window_map_event), info); +- g_signal_connect (info->window, "draw", G_CALLBACK (on_window_draw), info); ++ g_signal_connect (child, "draw", G_CALLBACK (on_child_draw), info); + gtk_widget_show (info->window); + + if (info->redraws) +-- +2.23.0 + + +From 0185c288c3e6b82b76f2a0704aab0e2ab20b75b8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 5 Dec 2019 13:29:38 +0100 +Subject: [PATCH 2/2] perf-helper: Remove unused atoms + +Those aren't used for anything, but make the helper dependent on X11. + +https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/887 +--- + src/shell-perf-helper.c | 18 ------------------ + 1 file changed, 18 deletions(-) + +diff --git a/src/shell-perf-helper.c b/src/shell-perf-helper.c +index ba1754e02..a50376e2e 100644 +--- a/src/shell-perf-helper.c ++++ b/src/shell-perf-helper.c +@@ -12,7 +12,6 @@ + #include + + #include +-#include + + #define BUS_NAME "org.gnome.Shell.PerfHelper" + +@@ -60,12 +59,6 @@ static GOptionEntry opt_entries[] = + { NULL } + }; + +-static Display *xdisplay; +-static Window xroot; +-static Atom atom_wm_state; +-static Atom atom__net_wm_name; +-static Atom atom_utf8_string; +- + static guint timeout_id; + static GList *our_windows; + static GList *wait_windows_invocations; +@@ -350,8 +343,6 @@ on_name_lost (GDBusConnection *connection, + int + main (int argc, char **argv) + { +- GdkDisplay *display; +- GdkScreen *screen; + GOptionContext *context; + GError *error = NULL; + +@@ -367,15 +358,6 @@ main (int argc, char **argv) + return 1; + } + +- display = gdk_display_get_default (); +- screen = gdk_screen_get_default (); +- +- xdisplay = gdk_x11_display_get_xdisplay (display); +- xroot = gdk_x11_window_get_xid (gdk_screen_get_root_window (screen)); +- atom_wm_state = gdk_x11_get_xatom_by_name_for_display (display, "WM_STATE"); +- atom__net_wm_name = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_NAME"); +- atom_utf8_string = gdk_x11_get_xatom_by_name_for_display (display, "UTF8_STRING"); +- + g_bus_own_name (G_BUS_TYPE_SESSION, + BUS_NAME, + G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT | +-- +2.23.0 + diff --git a/SOURCES/root-warning.patch b/SOURCES/root-warning.patch new file mode 100644 index 0000000..35b2c44 --- /dev/null +++ b/SOURCES/root-warning.patch @@ -0,0 +1,71 @@ +From 45ddeeaa317fb0ffd045600d9e4b95143c9ca8b8 Mon Sep 17 00:00:00 2001 +From: Matthias Clasen +Date: Sat, 8 Jun 2013 13:32:35 -0400 +Subject: [PATCH 1/2] main: Show a warning when running as root + +gnome-session used to show a dialog in this case, but a +notification is more natural nowadays. Doing it in gnome-shell +avoids complicated synchronization between gnome-session and +gnome-shell. + +https://bugzilla.gnome.org/show_bug.cgi?id=701212 +--- + js/ui/main.js | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/js/ui/main.js b/js/ui/main.js +index 8d1755cf1..abf8a8765 100644 +--- a/js/ui/main.js ++++ b/js/ui/main.js +@@ -237,6 +237,12 @@ function _initializeUI() { + ['MESSAGE_ID=' + GNOMESHELL_STARTED_MESSAGE_ID]); + } + ++ let credentials = new Gio.Credentials(); ++ if (credentials.get_unix_user() === 0) { ++ notify(_('Logged in as a privileged user'), ++ _('Running a session as a privileged user should be avoided for security reasons. If possible, you should log in as a normal user.')); ++ } ++ + let perfModuleName = GLib.getenv("SHELL_PERF_MODULE"); + if (perfModuleName) { + let perfOutput = GLib.getenv("SHELL_PERF_OUTPUT"); +-- +2.23.0 + + +From 8e82907909b6a2e5af5da3f93b087df4b7eb48b5 Mon Sep 17 00:00:00 2001 +From: Matthias Clasen +Date: Sat, 8 Jun 2013 13:33:58 -0400 +Subject: [PATCH 2/2] main: Show a warning when gdm is missing + +If we are not running under gdm, some functionaliy (such as +the lock screen) does not work, and we should inform the +user about this. + +https://bugzilla.gnome.org/show_bug.cgi?id=701212 +--- + js/ui/main.js | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/js/ui/main.js b/js/ui/main.js +index abf8a8765..be49c750e 100644 +--- a/js/ui/main.js ++++ b/js/ui/main.js +@@ -243,6 +243,13 @@ function _initializeUI() { + _('Running a session as a privileged user should be avoided for security reasons. If possible, you should log in as a normal user.')); + } + ++ if (sessionMode.currentMode !== 'gdm' && ++ sessionMode.currentMode !== 'initial-setup' && ++ screenShield === null) { ++ notify(_('Screen Lock disabled'), ++ _('Screen Locking requires the GNOME display manager.')); ++ } ++ + let perfModuleName = GLib.getenv("SHELL_PERF_MODULE"); + if (perfModuleName) { + let perfOutput = GLib.getenv("SHELL_PERF_OUTPUT"); +-- +2.23.0 + diff --git a/SPECS/gnome-shell.spec b/SPECS/gnome-shell.spec index 8dacd95..ee37be1 100644 --- a/SPECS/gnome-shell.spec +++ b/SPECS/gnome-shell.spec @@ -1,6 +1,6 @@ Name: gnome-shell Version: 3.32.2 -Release: 9%{?dist} +Release: 14%{?dist} Summary: Window management and application launching for GNOME Group: User Interface/Desktops @@ -37,6 +37,13 @@ Patch39: horizontal-workspace-support.patch Patch40: 0001-animation-fix-unintentional-loop-while-polkit-dialog.patch Patch41: 0001-workspacesView-Work-around-spurious-allocation-chang.patch Patch42: 0001-layout-Make-the-hot-corner-optional.patch +Patch43: fix-app-view-leaks.patch +Patch44: root-warning.patch +Patch45: 0001-workspace-Pass-device-to-startDrag.patch +Patch46: 0001-a11y-Change-HC-icon-theme-first.patch +Patch47: perf-tool-wayland.patch +Patch48: 0001-padOsd-Re-query-action-labels-after-mode-switches.patch +Patch49: 0001-Do-not-change-Wacom-LEDs-through-g-s-d.patch # Backport JS invalid access warnings (#1651894, #1663171, #1642482, #1637622) Patch54: fix-invalid-access-warnings.patch @@ -73,6 +80,7 @@ BuildRequires: gjs-devel >= %{gjs_version} BuildRequires: glib2-devel >= %{glib2_version} BuildRequires: gobject-introspection >= %{gobject_introspection_version} BuildRequires: mesa-libGL-devel +BuildRequires: mesa-libEGL-devel BuildRequires: NetworkManager-libnm-devel BuildRequires: polkit-devel >= %{polkit_version} BuildRequires: startup-notification-devel @@ -96,7 +104,7 @@ BuildRequires: pulseaudio-libs-devel %ifnarch s390 s390x ppc ppc64 ppc64p7 BuildRequires: gnome-bluetooth-libs-devel >= %{gnome_bluetooth_version} %endif -BuildRequires: control-center +#BuildRequires: control-center # Bootstrap requirements BuildRequires: gtk-doc %ifnarch s390 s390x @@ -219,6 +227,30 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/evolution-calendar.de %{_mandir}/man1/%{name}.1.gz %changelog +* Wed Mar 04 2020 Carlos Garnacho - 3.32.2-14 +- Do not set Wacom LEDs through gnome-settings-daemon, rely on kernel driver + Resolves: #1687979 + +* Mon Dec 16 2019 Carlos Garnacho - 3.32.2-13 +- Update pad OSD on mode switching + Resolves: #1716774 + +* Fri Dec 13 2019 Carlos Garnacho - 3.32.2-12 +- Fix window dragging with tablets in the overview + Resolves: #1716767 +- Fix high-contrast/symbolic race + Resolves: #1730612 +- Make perf-tool usable on wayland + Resolves: #1652178 + +* Mon Dec 02 2019 Florian Müllner - 3.32.2-11 +- Warn when logging in as root + Resolves: #1746327 + +* Wed Nov 27 2019 Florian Müllner - 3.32.2-10 +- Fix leaks in app picker + Related: #1719819 + * Thu Aug 15 2019 Jonas Ådahl - 3.32.2-9 - Depend on correct gsettings-desktop-schemas version Related: #1704355