Control: retitle -1 bookworm-pu: package gnome-shell/43.6-1~deb12u1

On Sun, 28 May 2023 at 00:29:58 +0100, Simon McVittie wrote:
> The gnome-shell 43.5 release from GNOME upstream seems like something
> we should have in a bookworm update.

So does 43.6.

> This requires mutter 43.5, for which see #1036856.

Still true.

[ 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.
I'll upload to unstable when bookworm has been released.

[ 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.

[ 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 bookworm
  [ ] the issue is verified as fixed in unstable
      - intentionally not done during the full freeze

[ Changes ]
js/misc/ibusManager.js:
    - Fix input method popup getting stuck on screen during engine changes
      (gnome-shell#6717)

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/components/polkitAgent.js:
    - When cancelling the polkit agent prompt while using
      gnome-remote-desktop, don't break subsequent polkit prompts
      (gnome-shell!2761)

js/ui/dash.js:
    - Avoid destroying labels twice, most commonly when using
      gnome-shell-extension-dash-to-dock (gnome-shell!2739)

js/ui/dnd.js:
    - Fix "TypeError: this._dragActor is null" warnings related to
      drag-and-drop (gnome-shell!2770)

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)

src/shell-window-preview-layout.c:
    - Fix a crash when a window preview is destroyed (gnome-shell#6570)

[ 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.

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.

Thanks,
    smcv
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..87adbee86 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,34 @@
+43.6
+====
+* Fix stuck authentication dialog in remote sessions [Joan; !2761]
+* Fix IM popup getting stuck on engine changes [Daniel; !2774]
+* Fixed crash [Carlos; !2756]
+* Misc. bug fixes and cleanups [Zacharie; !2770]
+
+Contributors:
+  Daniel Drake, Zacharie DUBRULLE, Carlos Garnacho, Joan Torres
+
+Translators:
+  Leônidas Araújo [pt_BR]
+
+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..8e1e86e7c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,53 @@
+gnome-shell (43.6-1) UNRELEASED; urgency=medium
+
+  * New upstream stable release 43.5
+    - 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
+  * New upstream stable release 43.6
+    - Fix a crash when a window preview is destroyed (gnome-shell#6570)
+    - When cancelling the polkit agent prompt while using
+      gnome-remote-desktop, don't break subsequent polkit prompts
+      (gnome-shell!2761)
+    - Fix "TypeError: this._dragActor is null" warnings related to
+      drag-and-drop (gnome-shell!2770)
+    - Fix input method popup getting stuck on screen during engine changes
+      (gnome-shell#6717)
+    - Translation update: pt_BR
+  * 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
+
+ -- Simon McVittie <s...@debian.org>  Tue, 06 Jun 2023 18:33:01 +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/series b/debian/patches/series
index 5e452a3d3..cbdcdddc1 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1,2 @@
-Update-Abkhazian-translation.patch
 debian/gnome-shell-extension-prefs-Give-Debian-specific-advice.patch
 debian/Revert-build-Port-to-gcr4.patch
diff --git a/js/misc/ibusManager.js b/js/misc/ibusManager.js
index 820ee827c..969556dc2 100644
--- a/js/misc/ibusManager.js
+++ b/js/misc/ibusManager.js
@@ -3,6 +3,7 @@
 
 const { Gio, GLib, IBus, Meta, Shell } = imports.gi;
 const Signals = imports.misc.signals;
+const BoxPointer = imports.ui.boxpointer;
 
 const IBusCandidatePopup = imports.ui.ibusCandidatePopup;
 
@@ -253,6 +254,7 @@ var IBusManager = class extends Signals.EventEmitter {
             return;
 
         this._currentEngineName = engineName;
+        this._candidatePopup.close(BoxPointer.PopupAnimation.NONE);
 
         if (this._registerPropertiesId != 0)
             return;
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/components/polkitAgent.js b/js/ui/components/polkitAgent.js
index 74b89090c..1da02e5b4 100644
--- a/js/ui/components/polkitAgent.js
+++ b/js/ui/components/polkitAgent.js
@@ -391,7 +391,6 @@ var AuthenticationDialog = GObject.registerClass({
     }
 
     cancel() {
-        this.close(global.get_current_time());
         this._emitDone(true);
     }
 
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/dnd.js b/js/ui/dnd.js
index 63ce5a020..613402d68 100644
--- a/js/ui/dnd.js
+++ b/js/ui/dnd.js
@@ -551,6 +551,7 @@ var _Draggable = class _Draggable extends Signals.EventEmitter {
                 let result = motionFunc(dragEvent);
                 if (result != DragMotionResult.CONTINUE) {
                     global.display.set_cursor(DRAG_CURSOR_MAP[result]);
+                    dragEvent.targetActor.disconnect(targetActorDestroyHandlerId);
                     return GLib.SOURCE_REMOVE;
                 }
             }
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..8b04a7e9c 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
 project('gnome-shell', 'c',
-  version: '43.4',
+  version: '43.6',
   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/src/shell-window-preview-layout.c b/src/shell-window-preview-layout.c
index 8d8596af4..fa3cc1f6d 100644
--- a/src/shell-window-preview-layout.c
+++ b/src/shell-window-preview-layout.c
@@ -394,8 +394,8 @@ shell_window_preview_layout_add_window (ShellWindowPreviewLayout *self,
     g_signal_connect (window, "position-changed",
                       G_CALLBACK (on_window_size_position_changed), self);
   window_info->window_actor_destroy_id =
-    g_signal_connect (window_actor, "destroy",
-                      G_CALLBACK (on_window_destroyed), actor);
+    g_signal_connect_swapped (window_actor, "destroy",
+                              G_CALLBACK (on_window_destroyed), actor);
   window_info->destroy_id =
     g_signal_connect (actor, "destroy",
                       G_CALLBACK (on_actor_destroyed), self);
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..eebbc8d30 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,8 @@
   </description>
 
   <releases>
+    <release version="43.6" date="2023-06-03"/>
+    <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..77af7a529 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.6',
   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..17e3bbe4f 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.6',
   meson_version: '>= 0.58.0',
   license: 'GPLv2+'
 )
diff --git a/subprojects/shew/meson.build b/subprojects/shew/meson.build
index 62d5c3b45..ac0f62724 100644
--- a/subprojects/shew/meson.build
+++ b/subprojects/shew/meson.build
@@ -1,5 +1,5 @@
 project('shew', 'c',
-  version: '43.4',
+  version: '43.6',
   meson_version: '>= 0.58.0',
   license: 'LGPLv2+',
 )

Reply via email to