Package: release.debian.org Severity: normal Tags: bookworm User: release.debian....@packages.debian.org Usertags: pu X-Debbugs-Cc: gnome-sh...@packages.debian.org Control: affects -1 + src:gnome-shell Control: block -1 by 1036856
The gnome-shell 43.5 release from GNOME upstream seems like something we should have in a bookworm update. I don't think it's urgent enough to break the full freeze for. This could be converted into an unblock request if the release team or other GNOME team members want to break full freeze for this. This requires mutter 43.5, for which see #1036856. [ Reason ] New upstream stable release [ Impact ] If not accepted, our default desktop will have several known bugs. [ Tests ] Manual testing: I'm running this version on my main laptop and gaming PC. [ Risks ] There's the potential for regressions of similar magnitude to what we're fixing. GNOME is our default desktop, so any regressions will be highly visible; I'd like to mitigate this by getting some wider real-world testing in unstable during the closing stages of the freeze. [ Checklist ] [x] *all* changes are documented in the d/changelog [x] I reviewed all changes and I approve them [x] attach debdiff against the package in (old)stable [ ] the issue is verified as fixed in unstable [ Changes ] js/misc/objectManager.js: - Receive notifications of removed objects from D-Bus ObjectManager instances correctly (gnome-shell!2730). This is utility code used in multiple places, I don't know what user-visible impact this has. js/ui/appDisplay.js: - Fix an assertion failure during shutdown (gnome-shell#6512) js/ui/components/autorunManager.js: - Fix a regression in 43~beta involving detection of hotplugged media with autorunnable content (gnome-shell!2745) js/ui/dash.js: - Avoid destroying labels twice, most commonly when using gnome-shell-extension-dash-to-dock (gnome-shell!2739) js/ui/messageTray.js: - Fix queued notifications getting into a state where they can no longer be removed (gnome-shell!2736) js/ui/modalDialog.js: - After 60 second timeout in logout/reboot/poweroff confirmation dialog, do the requested action instead of leaving the Shell in a broken state (gnome-shell#6506) js/ui/panelMenu.js: - Avoid keyboard navigation focus getting stuck on top bar buttons with no associated menu (gnome-shell!2734; does not solve #1032319 but is helpful when working around it) js/ui/screenshot.js (first hunk), d/control.in: - Fix a regression in which the cursor would not be included in screenshots since mutter 43.1 (gnome-shell!2710). This needs mutter 43.5; strictly speaking it isn't a required dependency, but if mutter is too old then the regression won't be fixed, so to simplify things I made it a dependency. js/ui/screenshot.js (second and third hunks): - Fix a cursor appearing at 0,0 in screenshots that should not include it (gnome-shell!2702) js/ui/search.js: - Make search results fill unused space as intended (gnome-shell#5924) js/ui/status/location.js: - Fix an assertion failure if Geoclue isn't D-Bus-activatable (gnome-shell!2689) js/ui/windowPreview.js: - Fix assertion failures after a window preview is destroyed (gnome-shell#5512, gnome-shell#6065) js/ui/workspacesView.js: - Update visibility of workspaces in workspace switcher when required (gnome-shell#6519) src/shell-app-system.c: - Improve matching of app StartupWMClass to a .desktop file, giving priority to apps that were not hidden by OnlyShowIn under the current desktop environment, in particular preferring gnome-system-monitor's non-KDE-specific .desktop file while running GNOME (gnome-shell!2721) [ Other info ] I have not uploaded to unstable due to the full freeze, and I can't upload to experimental because GNOME 44 is already there. May I upload this to unstable as 43.5-1 to get it some more testing, on the understanding that if there is an unforeseen urgent change to mutter, these fixes can either be included with it or avoided by using t-p-u? If I do that, presumably the upload to bookworm would become 43.5-1~deb12u1. The attached diff is between patched trees, excluding the patches themselves to avoid duplicating the changes, and is lightly filtered to ignore translations (very verbose) and upstream CI stuff (not used or relevant in Debian). I normally upload using dgit, so if I'm the uploader, the uploaded .dsc will be checked for an exact match to what's in git.
git diff patch-queue/43.4.. | filterdiff -p1 -x'debian/patches/*.patch' -x.gitlab-ci.yml -x'.gitlab-ci/*' -x'po/*.po' diff --git a/NEWS b/NEWS index d20f27985..16c30eea1 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,21 @@ +43.5 +==== +* Fix window screenshots with pointer [Ivan; !2710, !2702] +* Fix notifications getting stuck indefinitely [msizanoen1; !2736] +* Fix keynav of menu-less buttons [Florian; !2734] +* Fix corner cases when matching apps on StartupWmClass [Marco; !2721] +* Fix occasional misalignment of search results [Sebastian; !2744] +* Fix regression in content-type sniffing on autorun [Balló; !2745] +* Misc. bug fixes and cleanups [Will, Daniel, Florian, Jonas, Marco, Sebastian; + !2689, !2693, !2696, !2699, !2730, !2739, !2738, !2712] + +Contributors: + Jonas Dreßler, Balló György, Sebastian Keller, Ivan Molodetskikh, msizanoen1, + Florian Müllner, Will Thompson, Marco Trevisan (Treviño), Daniel van Vugt + +Translators: + Nart Tlisha [ab], Boyuan Yang [zh_CN] + 43.4 ==== * Plugged leak [Sebastian; !2652] diff --git a/debian/changelog b/debian/changelog index f44e61c0c..bdc1f210d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,45 @@ +gnome-shell (43.5-0+deb12u1) UNRELEASED; urgency=medium + + * New upstream stable release + - Fix a regression in 43~beta involving detection of hotplugged media + with autorunnable content (gnome-shell!2745) + - Make search results fill unused space as intended (gnome-shell#5924) + - Improve matching of app StartupWMClass to a .desktop file, giving + priority to apps that were not hidden by OnlyShowIn under the current + desktop environment, in particular preferring gnome-system-monitor's + non-KDE-specific .desktop file while running GNOME (gnome-shell!2721) + - Fix assertion failures after a window preview is destroyed + (gnome-shell#5512, gnome-shell#6065) + - Avoid destroying labels twice, most commonly when using + gnome-shell-extension-dash-to-dock (gnome-shell!2739) + - Avoid keyboard navigation focus getting stuck on top bar buttons with + no associated menu (gnome-shell!2734, might help #1032319) + - Fix queued notifications getting into a state where they can no + longer be removed (gnome-shell!2736) + - Receive notifications of removed objects from D-Bus ObjectManager + instances correctly (gnome-shell!2730) + - Fix a cursor appearing at 0,0 in screenshots that should not + include it (gnome-shell!2702) + - Update visibility of workspaces in workspace switcher when required + (gnome-shell#6519) + - After 60 second timeout in logout/reboot/poweroff confirmation + dialog, do the requested action instead of leaving the Shell in a + broken state (gnome-shell#6506) + - Fix an assertion failure during shutdown (gnome-shell#6512) + - Fix an assertion failure if Geoclue isn't D-Bus-activatable + (gnome-shell!2689) + - Fix a regression in which the cursor would not be included in + screenshots since mutter 43.1 (gnome-shell!2710) + - Upstream CI fixes not relevant to Debian + - Translation update: zh_CN + * d/control.in: Build-depend on mutter 43.5, for a newly-public utility + function needed by gnome-shell!2710 + * d/patches: Drop ab translation patch, applied upstream + * d/patches: Update to gnome-43 branch commit 43.5-1-g2936e966a + - Translation update: pt_BR + + -- Simon McVittie <s...@debian.org> Sat, 27 May 2023 16:03:49 +0100 + gnome-shell (43.4-1) unstable; urgency=medium * Team upload diff --git a/debian/control b/debian/control index 20815c4c6..78f01daa7 100644 --- a/debian/control +++ b/debian/control @@ -48,8 +48,8 @@ Build-Depends: appstream, libgtk-4-dev, libibus-1.0-dev (>= 1.5.22-2ubuntu2~), libjson-glib-dev, - libmutter-11-dev (>= 43.0), - libmutter-test-11 (>= 43.0) <!nocheck>, + libmutter-11-dev (>= 43.5), + libmutter-test-11 (>= 43.5) <!nocheck>, libnm-dev [linux-any], libpipewire-0.3-dev (>= 0.3.10) [linux-any], libpolkit-agent-1-dev, @@ -62,7 +62,7 @@ Build-Depends: appstream, libxml2-dev, mesa-common-dev, meson (>= 0.58.0), - mutter (>= 43.0) <!nocheck>, + mutter (>= 43.5) <!nocheck>, pkg-config, sassc, systemd [linux-any], @@ -96,7 +96,7 @@ Depends: gir1.2-accountsservice-1.0, gir1.2-gweather-4.0 (>= 4.1), gir1.2-freedesktop, gir1.2-ibus-1.0 (>= 1.5.22-2ubuntu2~), - gir1.2-mutter-11 (>= 43.0), + gir1.2-mutter-11 (>= 43.5), gir1.2-nm-1.0 [linux-any], gir1.2-nma-1.0 [linux-any], gir1.2-pango-1.0, diff --git a/debian/control.in b/debian/control.in index f035c1d13..11fd3cabe 100644 --- a/debian/control.in +++ b/debian/control.in @@ -44,8 +44,8 @@ Build-Depends: appstream, libgtk-4-dev, libibus-1.0-dev (>= 1.5.22-2ubuntu2~), libjson-glib-dev, - libmutter-11-dev (>= 43.0), - libmutter-test-11 (>= 43.0) <!nocheck>, + libmutter-11-dev (>= 43.5), + libmutter-test-11 (>= 43.5) <!nocheck>, libnm-dev [linux-any], libpipewire-0.3-dev (>= 0.3.10) [linux-any], libpolkit-agent-1-dev, @@ -58,7 +58,7 @@ Build-Depends: appstream, libxml2-dev, mesa-common-dev, meson (>= 0.58.0), - mutter (>= 43.0) <!nocheck>, + mutter (>= 43.5) <!nocheck>, pkg-config, sassc, systemd [linux-any], @@ -92,7 +92,7 @@ Depends: gir1.2-accountsservice-1.0, gir1.2-gweather-4.0 (>= 4.1), gir1.2-freedesktop, gir1.2-ibus-1.0 (>= 1.5.22-2ubuntu2~), - gir1.2-mutter-11 (>= 43.0), + gir1.2-mutter-11 (>= 43.5), gir1.2-nm-1.0 [linux-any], gir1.2-nma-1.0 [linux-any], gir1.2-pango-1.0, diff --git a/debian/patches/Update-Brazilian-Portuguese-translation.patch b/debian/patches/Update-Brazilian-Portuguese-translation.patch new file mode 100644 index 000000000..2b16a8e3b diff --git a/debian/patches/series b/debian/patches/series index 5e452a3d3..0d3bde233 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,3 +1,3 @@ -Update-Abkhazian-translation.patch +Update-Brazilian-Portuguese-translation.patch debian/gnome-shell-extension-prefs-Give-Debian-specific-advice.patch debian/Revert-build-Port-to-gcr4.patch diff --git a/js/misc/objectManager.js b/js/misc/objectManager.js index c40975988..a1dcde3a7 100644 --- a/js/misc/objectManager.js +++ b/js/misc/objectManager.js @@ -130,7 +130,7 @@ var ObjectManager = class extends Signals.EventEmitter { this.emit('interface-removed', interfaceName, proxy); - this._objects[objectPath][interfaceName] = null; + delete this._objects[objectPath][interfaceName]; if (Object.keys(this._objects[objectPath]).length === 0) { delete this._objects[objectPath]; diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index 6a36f8f78..61fd0bc77 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -1201,7 +1201,8 @@ var BaseAppView = GObject.registerClass({ } vfunc_unmap() { - this._swipeTracker.enabled = false; + if (this._swipeTracker) + this._swipeTracker.enabled = false; this._disconnectDnD(); super.vfunc_unmap(); } diff --git a/js/ui/components/autorunManager.js b/js/ui/components/autorunManager.js index 0e3fa9385..d94be397d 100644 --- a/js/ui/components/autorunManager.js +++ b/js/ui/components/autorunManager.js @@ -102,7 +102,7 @@ var ContentTypeDiscoverer = class { if (contentTypes.length === 0) { const root = mount.get_root(); const hotplugSniffer = new HotplugSniffer(); - [contentTypes] = hotplugSniffer.SniffURIAsync(root.get_uri()); + [contentTypes] = await hotplugSniffer.SniffURIAsync(root.get_uri()); } } diff --git a/js/ui/dash.js b/js/ui/dash.js index 202fed0c6..165f8ea63 100644 --- a/js/ui/dash.js +++ b/js/ui/dash.js @@ -71,6 +71,7 @@ class DashItemContainer extends St.Widget { this.label = new St.Label({ style_class: 'dash-label' }); this.label.hide(); Main.layoutManager.addChrome(this.label); + this.label.connectObject('destroy', () => (this.label = null), this); this.label_actor = this.label; this.child = null; @@ -82,7 +83,7 @@ class DashItemContainer extends St.Widget { this.connect('destroy', () => { if (this.child != null) this.child.destroy(); - this.label.destroy(); + this.label?.destroy(); }); } diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index e001f2202..1edd932f6 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -1006,9 +1006,8 @@ var MessageTray = GObject.registerClass({ } _onNotificationDestroy(notification) { - this._notificationRemoved = this._notification === notification; - - if (this._notificationRemoved) { + if (this._notification === notification) { + this._notificationRemoved = true; if (this._notificationState === State.SHOWN || this._notificationState === State.SHOWING) { this._updateNotificationTimeout(0); diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js index 64800a376..0561b8b15 100644 --- a/js/ui/modalDialog.js +++ b/js/ui/modalDialog.js @@ -282,7 +282,7 @@ var ModalDialog = GObject.registerClass({ opacity: 0, duration: FADE_OUT_DIALOG_TIME, mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => (this.state = State.FADED_OUT), + onComplete: () => this._setState(State.FADED_OUT), }); } }); diff --git a/js/ui/panelMenu.js b/js/ui/panelMenu.js index 75b6ba5f5..a5445ce87 100644 --- a/js/ui/panelMenu.js +++ b/js/ui/panelMenu.js @@ -108,6 +108,9 @@ var Button = GObject.registerClass({ this.menu = new PopupMenu.PopupDummyMenu(this); else this.setMenu(new PopupMenu.PopupMenu(this, menuAlignment, St.Side.TOP, 0)); + + this.connect('key-press-event', + (o, ev) => global.focus_manager.navigate_from_event(ev)); } setSensitive(sensitive) { diff --git a/js/ui/screenshot.js b/js/ui/screenshot.js index b2ea6fad2..4d9e42e51 100644 --- a/js/ui/screenshot.js +++ b/js/ui/screenshot.js @@ -787,7 +787,7 @@ class UIWindowSelectorWindow extends St.Button { this._cursor = null; this._cursorPoint = { x: 0, y: 0 }; - this._shouldShowCursor = actor.get_children().some(c => c.has_pointer); + this._shouldShowCursor = window.has_pointer && window.has_pointer(); this.connect('destroy', this._onDestroy.bind(this)); } @@ -917,6 +917,10 @@ class UIWindowSelectorWindow extends St.Button { this.insert_child_below(this._cursor, this._border); } + getCursorTexture() { + return this._cursor?.content; + } + setCursorVisible(visible) { if (!this._cursor) return; @@ -1805,7 +1809,7 @@ var ScreenshotUI = GObject.registerClass({ const texture = content.get_texture(); - let cursorTexture = this._cursor.content?.get_texture(); + let cursorTexture = window.getCursorTexture()?.get_texture(); if (!this._cursor.visible) cursorTexture = null; diff --git a/js/ui/search.js b/js/ui/search.js index 71870a039..1029f311f 100644 --- a/js/ui/search.js +++ b/js/ui/search.js @@ -534,7 +534,12 @@ var SearchResultsView = GObject.registerClass({ Signals: { 'terms-changed': {} }, }, class SearchResultsView extends St.BoxLayout { _init() { - super._init({ name: 'searchResults', vertical: true }); + super._init({ + name: 'searchResults', + vertical: true, + x_expand: true, + y_expand: true, + }); this._parentalControlsManager = ParentalControlsManager.getDefault(); this._parentalControlsManager.connect('app-filter-changed', this._reloadRemoteProviders.bind(this)); diff --git a/js/ui/status/location.js b/js/ui/status/location.js index a2481f4c3..45f6b7ac8 100644 --- a/js/ui/status/location.js +++ b/js/ui/status/location.js @@ -160,7 +160,7 @@ var GeoclueAgent = GObject.registerClass({ } _onGeoclueVanished() { - this._managerProxy.disconnectObject(this); + this._managerProxy?.disconnectObject(this); this._managerProxy = null; this.notify('in-use'); diff --git a/js/ui/windowPreview.js b/js/ui/windowPreview.js index e7e1ed92b..c6504141f 100644 --- a/js/ui/windowPreview.js +++ b/js/ui/windowPreview.js @@ -525,6 +525,7 @@ var WindowPreview = GObject.registerClass({ _onDestroy() { this.metaWindow._delegate = null; this._delegate = null; + this._destroyed = true; if (this._longPressLater) { Meta.later_remove(this._longPressLater); @@ -553,6 +554,9 @@ var WindowPreview = GObject.registerClass({ } vfunc_leave_event(crossingEvent) { + if (this._destroyed) + return super.vfunc_leave_event(crossingEvent); + if ((crossingEvent.flags & Clutter.EventFlags.FLAG_GRAB_NOTIFY) !== 0 && global.stage.get_grab_actor() === this._closeButton) return super.vfunc_leave_event(crossingEvent); diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js index 511847250..660fcf624 100644 --- a/js/ui/workspacesView.js +++ b/js/ui/workspacesView.js @@ -118,7 +118,6 @@ class WorkspacesView extends WorkspacesViewBase { global.window_manager.connectObject('switch-workspace', this._activeWorkspaceChanged.bind(this), this); - this._updateVisibility(); } _getFirstFitAllWorkspaceBox(box, spacing, vertical) { @@ -465,6 +464,7 @@ class WorkspacesView extends WorkspacesViewBase { } this._updateWorkspacesState(); + this._updateVisibility(); } _activeWorkspaceChanged(_wm, _from, _to, _direction) { diff --git a/meson.build b/meson.build index 0ab89552f..a58c2e36b 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('gnome-shell', 'c', - version: '43.4', + version: '43.5', meson_version: '>= 0.58.0', license: 'GPLv2+' ) diff --git a/src/shell-app-system.c b/src/shell-app-system.c index a5b76362d..289954410 100644 --- a/src/shell-app-system.c +++ b/src/shell-app-system.c @@ -91,21 +91,43 @@ static void shell_app_system_class_init(ShellAppSystemClass *klass) G_TYPE_NONE, 0); } +/* + * Check whether @wm_class matches @id exactly when ignoring the .desktop suffix + */ +static gboolean +startup_wm_class_is_exact_match (const char *id, + const char *wm_class) +{ + size_t wm_class_len; + + if (!g_str_has_prefix (id, wm_class)) + return FALSE; + + wm_class_len = strlen (wm_class); + if (id[wm_class_len] == '\0') + return TRUE; + + return g_str_equal (id + wm_class_len, ".desktop"); +} + static void scan_startup_wm_class_to_id (ShellAppSystem *self) { ShellAppSystemPrivate *priv = self->priv; + g_autoptr(GPtrArray) no_show_ids = NULL; const GList *l; GList *all; g_hash_table_remove_all (priv->startup_wm_class_to_id); all = shell_app_cache_get_all (shell_app_cache_get_default ()); + no_show_ids = g_ptr_array_new (); for (l = all; l != NULL; l = l->next) { GAppInfo *info = l->data; const char *startup_wm_class, *id, *old_id; + gboolean should_show; id = g_app_info_get_id (info); startup_wm_class = g_desktop_app_info_get_startup_wm_class (G_DESKTOP_APP_INFO (info)); @@ -113,10 +135,23 @@ scan_startup_wm_class_to_id (ShellAppSystem *self) if (startup_wm_class == NULL) continue; + should_show = g_app_info_should_show (info); + if (!should_show) + g_ptr_array_add (no_show_ids, (char *) id); + /* In case multiple .desktop files set the same StartupWMClass, prefer * the one where ID and StartupWMClass match */ old_id = g_hash_table_lookup (priv->startup_wm_class_to_id, startup_wm_class); - if (old_id == NULL || strcmp (id, startup_wm_class) == 0) + + if (old_id && startup_wm_class_is_exact_match (id, startup_wm_class)) + old_id = NULL; + + /* Give priority to the desktop files that should be shown */ + if (old_id && should_show && + g_ptr_array_find_with_equal_func (no_show_ids, old_id, g_str_equal, NULL)) + old_id = NULL; + + if (!old_id) g_hash_table_insert (priv->startup_wm_class_to_id, g_strdup (startup_wm_class), g_strdup (id)); } diff --git a/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in b/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in index f7f8c11bb..79acefc58 100644 --- a/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in +++ b/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in @@ -39,6 +39,7 @@ </description> <releases> + <release version="43.5" date="2023-04-24"/> <release version="43.4" date="2023-03-19"/> <release version="43.3" date="2023-02-13"/> <release version="43.2" date="2022-12-06"/> diff --git a/subprojects/extensions-app/generate-translations.sh b/subprojects/extensions-app/generate-translations.sh index 71ee4d31f..591eb7671 100755 --- a/subprojects/extensions-app/generate-translations.sh +++ b/subprojects/extensions-app/generate-translations.sh @@ -12,7 +12,7 @@ done builddir=$(mktemp -d -p.) -meson $builddir +meson setup $builddir meson compile -C $builddir gnome-extensions-app-pot meson compile -C $builddir gnome-extensions-app-update-po diff --git a/subprojects/extensions-app/meson.build b/subprojects/extensions-app/meson.build index 451ec3dc0..6048fa153 100644 --- a/subprojects/extensions-app/meson.build +++ b/subprojects/extensions-app/meson.build @@ -1,5 +1,5 @@ project('gnome-extensions-app', - version: '43.4', + version: '43.5', meson_version: '>= 0.58.0', license: 'GPLv2+' ) diff --git a/subprojects/extensions-tool/generate-translations.sh b/subprojects/extensions-tool/generate-translations.sh index f7cf44789..3521a4477 100755 --- a/subprojects/extensions-tool/generate-translations.sh +++ b/subprojects/extensions-tool/generate-translations.sh @@ -12,7 +12,7 @@ done builddir=$(mktemp -d -p.) -meson -Dman=False $builddir +meson setup -Dman=False $builddir meson compile -C $builddir gnome-extensions-tool-pot meson compile -C $builddir gnome-extensions-tool-update-po diff --git a/subprojects/extensions-tool/meson.build b/subprojects/extensions-tool/meson.build index 7f5680a22..408c644f2 100644 --- a/subprojects/extensions-tool/meson.build +++ b/subprojects/extensions-tool/meson.build @@ -1,5 +1,5 @@ project('gnome-extensions-tool', 'c', - version: '43.4', + version: '43.5', meson_version: '>= 0.58.0', license: 'GPLv2+' ) diff --git a/subprojects/shew/meson.build b/subprojects/shew/meson.build index 62d5c3b45..673610c92 100644 --- a/subprojects/shew/meson.build +++ b/subprojects/shew/meson.build @@ -1,5 +1,5 @@ project('shew', 'c', - version: '43.4', + version: '43.5', meson_version: '>= 0.58.0', license: 'LGPLv2+', )