[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#993655: marked as done (bullseye-pu: package gnome-shell/3.38.6-1~deb11u1)



Your message dated Sat, 09 Oct 2021 12:09:40 +0100
with message-id <81741a2f4e370c14a3bec08b7fe6e2b10c32267b.camel@adam-barratt.org.uk>
and subject line Closing p-u bugs for updates in 11.1
has caused the Debian Bug report #993655,
regarding bullseye-pu: package gnome-shell/3.38.6-1~deb11u1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
993655: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=993655
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: bullseye
User: release.debian.org@packages.debian.org
Usertags: pu
X-Debbugs-Cc: debian-gtk-gnome@lists.debian.org

I updated mutter and gnome-shell along the 3.38.x branch in unstable
while we're waiting for the gnome-shell 40 transition to be ready,
and I think it could make sense to backport them to bullseye and take
the benefit of upstream's stable-branch maintenance.

[ Reason ]
New upstream bugfix release backported from unstable.

[ Impact ]
If not updated, assorted bugs fixed on upstream's 3.38.x stable branch
remain unfixed, including several crashes:

    - gdm user interface fixes
      + Don't limit timed-login progress bar to the width of the username
        if it's short
      + Make sure authentication cancellation is handled correctly
      + Improve fingerprint authentication handling
      + Don't retry authentication if services are unavailable
    - Fix word suggestions in on-screen keyboard
    - Fix double-free crash in calendar on non-x86 (LP: #1915929)
    - Fix input-method popup visibility over fullscreen applications
    - Fix a crash if an app moves between monitors during startup
    - Fix D-Bus-initiated app focus changes
    - Make sure to return a value from D-Bus methods so callers won't
      time out (apparently this fixes #992980)
    - Fix runtime warnings related to magnifier and shutdown
    - Make sure power menu stays in sync with upower

[ Tests ]
autopkgtests pass, routine use of GNOME on a desktop seems fine, and the
version it's based on has been in unstable for a while with no new bug
reports.

[ Risks ]
It's a key package and high-visibility, but upstream's stable branches
tend to be good about sticking to bugfix-only.

The changes in js/ui/status/power.js are noisier than I'd like (they
include reformatting, unfortunately) but seem harmless.

[ 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
      - I have filtered this to exclude the content of translation updates
  [x] the issue is verified as fixed in unstable

[ Changes ]
* New upstream release, with:
  + Bug fixes as described in "Impact"
  + Forward-compatibility fixes that are unnecessary but harmless
    for bullseye:
    - Fix freeze after closing some modal dialogs with gjs 1.68.x
      (LP: #1918666)
    - Improve OSK compatibility with gjs 1.68.x (LP: #1918738)
    - Use mallinfo2() instead of deprecated mallinfo() if glibc is new
      enough

[ Other info ]
I have also proposed a mutter update. These have only been tested
together, although they should be separable.
diffstat for gnome-shell-3.38.4 gnome-shell-3.38.6

 NEWS                                                                          |   30 +
 config.h.meson                                                                |    3 
 debian/changelog                                                              |   34 +
 debian/control                                                                |    2 
 debian/control.in                                                             |    2 
 debian/gbp.conf                                                               |    2 
 js/gdm/authPrompt.js                                                          |    7 
 js/gdm/loginDialog.js                                                         |    1 
 js/gdm/util.js                                                                |   47 ++
 js/ui/audioDeviceSelection.js                                                 |   14 
 js/ui/boxpointer.js                                                           |    9 
 js/ui/dialog.js                                                               |    2 
 js/ui/iconGrid.js                                                             |    4 
 js/ui/keyboard.js                                                             |    4 
 js/ui/magnifier.js                                                            |   32 +
 js/ui/shellDBus.js                                                            |   10 
 js/ui/status/network.js                                                       |    2 
 js/ui/status/power.js                                                         |   72 ++-
 meson.build                                                                   |    3 
 po/pt.po                                                                      |  119 +++--
 po/tr.po                                                                      |  199 +++++-----
 src/calendar-server/gnome-shell-calendar-server.c                             |    3 
 src/main.c                                                                    |   10 
 src/shell-app.c                                                               |    6 
 src/shell-global.c                                                            |    5 
 subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in |    2 
 subprojects/extensions-app/meson.build                                        |    2 
 subprojects/extensions-app/subprojects/shew/meson.build                       |    2 
 subprojects/extensions-tool/meson.build                                       |    2 
 subprojects/shew/meson.build                                                  |    2 
 30 files changed, 391 insertions(+), 241 deletions(-)

diff -Nru gnome-shell-3.38.4/config.h.meson gnome-shell-3.38.6/config.h.meson
--- gnome-shell-3.38.4/config.h.meson	2021-03-15 21:28:44.984285000 +0000
+++ gnome-shell-3.38.6/config.h.meson	2021-08-18 00:33:58.054246000 +0100
@@ -13,6 +13,9 @@
 /* Define to 1 if you have the `mallinfo' function. */
 #mesondefine HAVE_MALLINFO
 
+/* Define to 1 if you have the `mallinfo2' function. */
+#mesondefine HAVE_MALLINFO2
+
 /* Define to 1 fi you have the <sys/resource.h> header file. */
 #mesondefine HAVE_SYS_RESOURCE_H
 
diff -Nru gnome-shell-3.38.4/debian/changelog gnome-shell-3.38.6/debian/changelog
--- gnome-shell-3.38.4/debian/changelog	2021-03-17 09:52:47.000000000 +0000
+++ gnome-shell-3.38.6/debian/changelog	2021-09-01 21:18:10.000000000 +0100
@@ -1,3 +1,37 @@
+gnome-shell (3.38.6-1~deb11u1) bullseye; urgency=medium
+
+  * Rebuild for bullseye
+
+ -- Simon McVittie <smcv@debian.org>  Wed, 01 Sep 2021 21:18:10 +0100
+
+gnome-shell (3.38.6-1) unstable; urgency=medium
+
+  * Team upload
+  * New upstream release
+    - gdm user interface fixes
+      + Don't limit timed-login progress bar to the width of the username
+        if it's short
+      + Make sure authentication cancellation is handled correctly
+      + Improve fingerprint authentication handling
+      + Don't retry authentication if services are unavailable
+    - Fix word suggestions in on-screen keyboard
+    - Fix freeze after closing some modal dialogs with gjs 1.68.x
+      (LP: #1918666)
+    - Fix double-free crash in calendar on non-x86 (LP: #1915929)
+    - Improve OSK compatibility with gjs 1.68.x (LP: #1918738)
+    - Fix input-method popup visibility over fullscreen applications
+    - Fix a crash if an app moves between monitors during startup
+    - Fix D-Bus-initiated app focus changes
+    - Make sure to return a value from D-Bus methods so callers won't
+      time out
+    - Fix runtime warnings related to magnifier and shutdown
+    - Make sure power menu stays in sync with upower
+    - Use mallinfo2() instead of deprecated mallinfo() if glibc is new
+      enough (not applicable in Debian yet)
+  * d/gbp.conf, d/control.in: Update VCS details for debian/unstable branch
+
+ -- Simon McVittie <smcv@debian.org>  Thu, 26 Aug 2021 08:50:50 +0100
+
 gnome-shell (3.38.4-1) unstable; urgency=medium
 
   * Team upload
diff -Nru gnome-shell-3.38.4/debian/control gnome-shell-3.38.6/debian/control
--- gnome-shell-3.38.4/debian/control	2021-03-17 09:52:47.000000000 +0000
+++ gnome-shell-3.38.6/debian/control	2021-09-01 21:18:10.000000000 +0100
@@ -68,7 +68,7 @@
 Rules-Requires-Root: no
 Standards-Version: 4.5.1
 Homepage: https://wiki.gnome.org/Projects/GnomeShell
-Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell.git
+Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell.git -b debian/unstable
 Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell
 
 Package: gnome-shell
diff -Nru gnome-shell-3.38.4/debian/control.in gnome-shell-3.38.6/debian/control.in
--- gnome-shell-3.38.4/debian/control.in	2021-03-17 09:52:47.000000000 +0000
+++ gnome-shell-3.38.6/debian/control.in	2021-09-01 21:18:10.000000000 +0100
@@ -64,7 +64,7 @@
 Rules-Requires-Root: no
 Standards-Version: 4.5.1
 Homepage: https://wiki.gnome.org/Projects/GnomeShell
-Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell.git
+Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell.git -b debian/unstable
 Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell
 
 Package: gnome-shell
diff -Nru gnome-shell-3.38.4/debian/gbp.conf gnome-shell-3.38.6/debian/gbp.conf
--- gnome-shell-3.38.4/debian/gbp.conf	2021-03-17 09:52:47.000000000 +0000
+++ gnome-shell-3.38.6/debian/gbp.conf	2021-09-01 21:18:10.000000000 +0100
@@ -1,6 +1,6 @@
 [DEFAULT]
 pristine-tar = True
-debian-branch = debian/master
+debian-branch = debian/bullseye
 upstream-branch = upstream/3.38.x
 upstream-vcs-tag = %(version)s
 
diff -Nru gnome-shell-3.38.4/js/gdm/authPrompt.js gnome-shell-3.38.6/js/gdm/authPrompt.js
--- gnome-shell-3.38.4/js/gdm/authPrompt.js	2021-03-15 21:28:45.003284500 +0000
+++ gnome-shell-3.38.6/js/gdm/authPrompt.js	2021-08-18 00:33:58.075246000 +0100
@@ -29,6 +29,7 @@
     VERIFYING: 1,
     VERIFICATION_FAILED: 2,
     VERIFICATION_SUCCEEDED: 3,
+    VERIFICATION_CANCELLED: 4,
 };
 
 var BeginRequestType = {
@@ -479,12 +480,16 @@
 
         if (oldStatus == AuthPromptStatus.VERIFICATION_FAILED)
             this.emit('failed');
+        else if (oldStatus === AuthPromptStatus.VERIFICATION_CANCELLED)
+            this.emit('cancelled');
 
         let beginRequestType;
 
         if (this._mode == AuthPromptMode.UNLOCK_ONLY) {
             // The user is constant at the unlock screen, so it will immediately
             // respond to the request with the username
+            if (oldStatus === AuthPromptStatus.VERIFICATION_CANCELLED)
+                return;
             beginRequestType = BeginRequestType.PROVIDE_USERNAME;
         } else if (this._userVerifier.serviceIsForeground(OVirt.SERVICE_NAME) ||
                    this._userVerifier.serviceIsForeground(Vmware.SERVICE_NAME) ||
@@ -540,7 +545,7 @@
         if (this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED)
             return;
 
+        this.verificationStatus = AuthPromptStatus.VERIFICATION_CANCELLED;
         this.reset();
-        this.emit('cancelled');
     }
 });
diff -Nru gnome-shell-3.38.4/js/gdm/loginDialog.js gnome-shell-3.38.6/js/gdm/loginDialog.js
--- gnome-shell-3.38.4/js/gdm/loginDialog.js	2021-03-15 21:28:45.004284400 +0000
+++ gnome-shell-3.38.6/js/gdm/loginDialog.js	2021-08-18 00:33:58.075246000 +0100
@@ -42,7 +42,6 @@
     _init(user) {
         let layout = new St.BoxLayout({
             vertical: true,
-            x_align: Clutter.ActorAlign.START,
         });
         super._init({
             style_class: 'login-dialog-user-list-item',
diff -Nru gnome-shell-3.38.4/js/gdm/util.js gnome-shell-3.38.6/js/gdm/util.js
--- gnome-shell-3.38.4/js/gdm/util.js	2021-03-15 21:28:45.004284400 +0000
+++ gnome-shell-3.38.6/js/gdm/util.js	2021-08-18 00:33:58.076246000 +0100
@@ -159,6 +159,7 @@
         this.reauthenticating = false;
 
         this._failCounter = 0;
+        this._unavailableServices = new Set();
 
         this._credentialManagers = {};
         this._credentialManagers[OVirt.SERVICE_NAME] = OVirt.getOVirtCredentialsManager();
@@ -220,7 +221,7 @@
     }
 
     destroy() {
-        this.clear();
+        this.cancel();
 
         this._settings.run_dispose();
         this._settings = null;
@@ -240,9 +241,11 @@
         if (!this.hasPendingMessages) {
             this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
         } else {
+            const cancellable = this._cancellable;
             let signalId = this.connect('no-more-messages', () => {
                 this.disconnect(signalId);
-                this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
+                if (!cancellable.is_cancelled())
+                    this._userVerifier.call_answer_query(serviceName, answer, cancellable, null);
             });
         }
     }
@@ -406,6 +409,7 @@
         this._userVerifier.connect('info-query', this._onInfoQuery.bind(this));
         this._userVerifier.connect('secret-info-query', this._onSecretInfoQuery.bind(this));
         this._userVerifier.connect('conversation-stopped', this._onConversationStopped.bind(this));
+        this._userVerifier.connect('service-unavailable', this._onServiceUnavailable.bind(this));
         this._userVerifier.connect('reset', this._onReset.bind(this));
         this._userVerifier.connect('verification-complete', this._onVerificationComplete.bind(this));
     }
@@ -425,6 +429,11 @@
         return serviceName == this._defaultService;
     }
 
+    serviceIsFingerprint(serviceName) {
+        return serviceName === FINGERPRINT_SERVICE_NAME &&
+            this._haveFingerprintReader;
+    }
+
     _updateDefaultService() {
         if (this._settings.get_boolean(PASSWORD_AUTHENTICATION_KEY))
             this._defaultService = PASSWORD_SERVICE_NAME;
@@ -452,6 +461,11 @@
         } catch (e) {
             if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
                 return;
+            if (!this.serviceIsForeground(serviceName)) {
+                logError(e, 'Failed to start %s for %s'.format(serviceName, this._userName));
+                this._hold.release();
+                return;
+            }
             this._reportInitError(this._userName
                 ? 'Failed to start verification for user'
                 : 'Failed to start verification', e);
@@ -470,8 +484,7 @@
     _onInfo(client, serviceName, info) {
         if (this.serviceIsForeground(serviceName)) {
             this._queueMessage(info, MessageType.INFO);
-        } else if (serviceName == FINGERPRINT_SERVICE_NAME &&
-            this._haveFingerprintReader) {
+        } else if (this.serviceIsFingerprint(serviceName)) {
             // We don't show fingerprint messages directly since it's
             // not the main auth service. Instead we use the messages
             // as a cue to display our own message.
@@ -483,7 +496,9 @@
     }
 
     _onProblem(client, serviceName, problem) {
-        if (!this.serviceIsForeground(serviceName))
+        const isFingerprint = this.serviceIsFingerprint(serviceName);
+
+        if (!this.serviceIsForeground(serviceName) && !isFingerprint)
             return;
 
         this._queueMessage(problem, MessageType.ERROR);
@@ -515,6 +530,7 @@
     _onReset() {
         // Clear previous attempts to authenticate
         this._failCounter = 0;
+        this._unavailableServices.clear();
         this._updateDefaultService();
 
         this.emit('reset');
@@ -530,6 +546,7 @@
     }
 
     _retry() {
+        this.cancel();
         this.begin(this._userName, new Batch.Hold());
     }
 
@@ -548,9 +565,10 @@
             if (!this.hasPendingMessages) {
                 this._retry();
             } else {
+                const cancellable = this._cancellable;
                 let signalId = this.connect('no-more-messages', () => {
                     this.disconnect(signalId);
-                    if (this._cancellable && !this._cancellable.is_cancelled())
+                    if (!cancellable.is_cancelled())
                         this._retry();
                 });
             }
@@ -559,9 +577,11 @@
             if (!this.hasPendingMessages) {
                 this._cancelAndReset();
             } else {
+                const cancellable = this._cancellable;
                 let signalId = this.connect('no-more-messages', () => {
                     this.disconnect(signalId);
-                    this._cancelAndReset();
+                    if (!cancellable.is_cancelled())
+                        this._cancelAndReset();
                 });
             }
         }
@@ -569,6 +589,16 @@
         this.emit('verification-failed', canRetry);
     }
 
+    _onServiceUnavailable(_client, serviceName, errorMessage) {
+        this._unavailableServices.add(serviceName);
+
+        if (!errorMessage)
+            return;
+
+        if (this.serviceIsForeground(serviceName) || this.serviceIsFingerprint(serviceName))
+            this._queueMessage(errorMessage, MessageType.ERROR);
+    }
+
     _onConversationStopped(client, serviceName) {
         // If the login failed with the preauthenticated oVirt credentials
         // then discard the credentials and revert to default authentication
@@ -582,6 +612,9 @@
             return;
         }
 
+        if (this._unavailableServices.has(serviceName))
+            return;
+
         // if the password service fails, then cancel everything.
         // But if, e.g., fingerprint fails, still give
         // password authentication a chance to succeed
diff -Nru gnome-shell-3.38.4/js/ui/audioDeviceSelection.js gnome-shell-3.38.6/js/ui/audioDeviceSelection.js
--- gnome-shell-3.38.4/js/ui/audioDeviceSelection.js	2021-03-15 21:28:45.010284400 +0000
+++ gnome-shell-3.38.6/js/ui/audioDeviceSelection.js	2021-08-18 00:33:58.081246100 +0100
@@ -51,12 +51,16 @@
         this.contentLayout.add_child(content);
 
         if (Main.sessionMode.allowSettings) {
-            this.addButton({ action: this._openSettings.bind(this),
-                             label: _("Sound Settings") });
+            this.addButton({
+                action: this._openSettings.bind(this),
+                label: _('Sound Settings'),
+            });
         }
-        this.addButton({ action: this.close.bind(this),
-                         label: _("Cancel"),
-                         key: Clutter.KEY_Escape });
+        this.addButton({
+            action: () => this.close(),
+            label: _('Cancel'),
+            key: Clutter.KEY_Escape,
+        });
     }
 
     _getDeviceLabel(device) {
diff -Nru gnome-shell-3.38.4/js/ui/boxpointer.js gnome-shell-3.38.6/js/ui/boxpointer.js
--- gnome-shell-3.38.4/js/ui/boxpointer.js	2021-03-15 21:28:45.011284400 +0000
+++ gnome-shell-3.38.6/js/ui/boxpointer.js	2021-08-18 00:33:58.082246000 +0100
@@ -1,7 +1,7 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 /* exported BoxPointer */
 
-const { Clutter, GObject, St } = imports.gi;
+const { Clutter, GObject, Meta, St } = imports.gi;
 
 const Main = imports.ui.main;
 
@@ -48,6 +48,13 @@
         this._sourceAlignment = 0.5;
         this._muteInput = true;
 
+        this.connect('notify::visible', () => {
+            if (this.visible)
+                Meta.disable_unredirect_for_display(global.display);
+            else
+                Meta.enable_unredirect_for_display(global.display);
+        });
+
         this.connect('destroy', this._onDestroy.bind(this));
     }
 
diff -Nru gnome-shell-3.38.4/js/ui/dialog.js gnome-shell-3.38.6/js/ui/dialog.js
--- gnome-shell-3.38.4/js/ui/dialog.js	2021-03-15 21:28:45.016284200 +0000
+++ gnome-shell-3.38.6/js/ui/dialog.js	2021-08-18 00:33:58.086246000 +0100
@@ -133,7 +133,7 @@
             y_expand: true,
             label,
         });
-        button.connect('clicked', action);
+        button.connect('clicked', () => action());
 
         buttonInfo['button'] = button;
 
diff -Nru gnome-shell-3.38.4/js/ui/iconGrid.js gnome-shell-3.38.6/js/ui/iconGrid.js
--- gnome-shell-3.38.4/js/ui/iconGrid.js	2021-03-15 21:28:45.019284000 +0000
+++ gnome-shell-3.38.6/js/ui/iconGrid.js	2021-08-18 00:33:58.088246000 +0100
@@ -1311,7 +1311,8 @@
             row_spacing: 0,
         });
         const layoutManager = new IconGridLayout(layoutParams);
-        layoutManager.connect('pages-changed', () => this.emit('pages-changed'));
+        const pagesChangedId = layoutManager.connect('pages-changed',
+            () => this.emit('pages-changed'));
 
         super._init({
             style_class: 'icon-grid',
@@ -1327,6 +1328,7 @@
 
         this.connect('actor-added', this._childAdded.bind(this));
         this.connect('actor-removed', this._childRemoved.bind(this));
+        this.connect('destroy', () => layoutManager.disconnect(pagesChangedId));
     }
 
     _getChildrenToAnimate() {
diff -Nru gnome-shell-3.38.4/js/ui/keyboard.js gnome-shell-3.38.6/js/ui/keyboard.js
--- gnome-shell-3.38.4/js/ui/keyboard.js	2021-03-15 21:28:45.020284000 +0000
+++ gnome-shell-3.38.6/js/ui/keyboard.js	2021-08-18 00:33:58.089246000 +0100
@@ -197,7 +197,7 @@
     add(word, callback) {
         let button = new St.Button({ label: word });
         button.connect('clicked', callback);
-        this.add(button);
+        this.add_child(button);
     }
 
     clear() {
@@ -326,7 +326,7 @@
     }
 
     _getKeyval(key) {
-        let unicode = key.charCodeAt(0);
+        let unicode = key.length ? key.charCodeAt(0) : undefined;
         return Clutter.unicode_to_keysym(unicode);
     }
 
diff -Nru gnome-shell-3.38.4/js/ui/magnifier.js gnome-shell-3.38.6/js/ui/magnifier.js
--- gnome-shell-3.38.4/js/ui/magnifier.js	2021-03-15 21:28:45.023284000 +0000
+++ gnome-shell-3.38.6/js/ui/magnifier.js	2021-08-18 00:33:58.091246100 +0100
@@ -100,15 +100,12 @@
         this._mouseSprite = new Clutter.Actor({ request_mode: Clutter.RequestMode.CONTENT_SIZE });
         this._mouseSprite.content = new MouseSpriteContent();
 
-        this._cursorRoot = new Clutter.Actor();
-        this._cursorRoot.add_actor(this._mouseSprite);
-
         // Create the first ZoomRegion and initialize it according to the
         // magnification settings.
 
         [this.xMouse, this.yMouse] = global.get_pointer();
 
-        let aZoomRegion = new ZoomRegion(this, this._cursorRoot);
+        let aZoomRegion = new ZoomRegion(this, this._mouseSprite);
         this._zoomRegions.push(aZoomRegion);
         this._settingsInit(aZoomRegion);
         aZoomRegion.scrollContentsTo(this.xMouse, this.yMouse);
@@ -175,6 +172,9 @@
             this.stopTrackingMouse();
         }
 
+        if (this._crossHairs)
+            this._crossHairs.setEnabled(activate);
+
         // Make sure system mouse pointer is shown when all zoom regions are
         // invisible.
         if (!activate)
@@ -269,7 +269,7 @@
      * @returns {ZoomRegion} the newly created ZoomRegion.
      */
     createZoomRegion(xMagFactor, yMagFactor, roi, viewPort) {
-        let zoomRegion = new ZoomRegion(this, this._cursorRoot);
+        let zoomRegion = new ZoomRegion(this, this._mouseSprite);
         zoomRegion.setViewPort(viewPort);
 
         // We ignore the redundant width/height on the ROI
@@ -830,6 +830,12 @@
         let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
         let [xCaret, yCaret] = [extents.x * scaleFactor, extents.y * scaleFactor];
 
+        // Ignore event(s) if the caret size is none (0x0). This happens a lot if
+        // the cursor offset can't be translated into a location. This is a work
+        // around.
+        if (extents.width === 0 && extents.height === 0)
+            return;
+
         if (this._xCaret !== xCaret || this._yCaret !== yCaret) {
             [this._xCaret, this._yCaret] = [xCaret, yCaret];
             this._centerFromCaretPosition();
@@ -1169,6 +1175,8 @@
                 this._yDelayed = null;
             }
 
+            this._scrollContentsTimerId = 0;
+
             return GLib.SOURCE_REMOVE;
         });
 
@@ -1679,9 +1687,7 @@
         this._clipSize = [0, 0];
         this._clones = [];
         this.reCenter();
-
-        Main.layoutManager.connect('monitors-changed',
-                                   this._monitorsChanged.bind(this));
+        this._monitorsChangedId = 0;
     }
 
     _monitorsChanged() {
@@ -1689,6 +1695,16 @@
         this.reCenter();
     }
 
+    setEnabled(enabled) {
+        if (enabled && this._monitorsChangedId === 0) {
+            this._monitorsChangedId = Main.layoutManager.connect(
+                'monitors-changed', this._monitorsChanged.bind(this));
+        } else if (!enabled && this._monitorsChangedId !== 0) {
+            Main.layoutManager.disconnect(this._monitorsChangedId);
+            this._monitorsChangedId = 0;
+        }
+    }
+
     /**
     * addToZoomRegion
     * Either add the crosshairs actor to the given ZoomRegion, or, if it is
diff -Nru gnome-shell-3.38.4/js/ui/shellDBus.js gnome-shell-3.38.6/js/ui/shellDBus.js
--- gnome-shell-3.38.4/js/ui/shellDBus.js	2021-03-15 21:28:45.035283600 +0000
+++ gnome-shell-3.38.6/js/ui/shellDBus.js	2021-08-18 00:33:58.099246000 +0100
@@ -111,7 +111,7 @@
         let [accel, modeFlags, grabFlags] = params;
         let sender = invocation.get_sender();
         let bindingAction = this._grabAcceleratorForSender(accel, modeFlags, grabFlags, sender);
-        return invocation.return_value(GLib.Variant.new('(u)', [bindingAction]));
+        invocation.return_value(GLib.Variant.new('(u)', [bindingAction]));
     }
 
     GrabAcceleratorsAsync(params, invocation) {
@@ -122,7 +122,7 @@
             let [accel, modeFlags, grabFlags] = accels[i];
             bindingActions.push(this._grabAcceleratorForSender(accel, modeFlags, grabFlags, sender));
         }
-        return invocation.return_value(GLib.Variant.new('(au)', [bindingActions]));
+        invocation.return_value(GLib.Variant.new('(au)', [bindingActions]));
     }
 
     UngrabAcceleratorAsync(params, invocation) {
@@ -130,7 +130,7 @@
         let sender = invocation.get_sender();
         let ungrabSucceeded = this._ungrabAcceleratorForSender(action, sender);
 
-        return invocation.return_value(GLib.Variant.new('(b)', [ungrabSucceeded]));
+        invocation.return_value(GLib.Variant.new('(b)', [ungrabSucceeded]));
     }
 
     UngrabAcceleratorsAsync(params, invocation) {
@@ -141,7 +141,7 @@
         for (let i = 0; i < actions.length; i++)
             ungrabSucceeded &= this._ungrabAcceleratorForSender(actions[i], sender);
 
-        return invocation.return_value(GLib.Variant.new('(b)', [ungrabSucceeded]));
+        invocation.return_value(GLib.Variant.new('(b)', [ungrabSucceeded]));
     }
 
     _emitAcceleratorActivated(action, device, timestamp) {
@@ -215,11 +215,13 @@
         let sender = invocation.get_sender();
         let [dict] = params;
         Main.osdMonitorLabeler.show(sender, dict);
+        invocation.return_value(null);
     }
 
     HideMonitorLabelsAsync(params, invocation) {
         let sender = invocation.get_sender();
         Main.osdMonitorLabeler.hide(sender);
+        invocation.return_value(null);
     }
 
     _checkOverviewVisibleChanged() {
diff -Nru gnome-shell-3.38.4/js/ui/status/network.js gnome-shell-3.38.6/js/ui/status/network.js
--- gnome-shell-3.38.4/js/ui/status/network.js	2021-03-15 21:28:45.037283700 +0000
+++ gnome-shell-3.38.6/js/ui/status/network.js	2021-08-18 00:33:58.102246000 +0100
@@ -936,7 +936,7 @@
 
         this.contentLayout.add_child(this._stack);
 
-        this._disconnectButton = this.addButton({ action: this.close.bind(this),
+        this._disconnectButton = this.addButton({ action: () => this.close(),
                                                   label: _("Cancel"),
                                                   key: Clutter.KEY_Escape });
         this._connectButton = this.addButton({ action: this._connect.bind(this),
diff -Nru gnome-shell-3.38.4/js/ui/status/power.js gnome-shell-3.38.6/js/ui/status/power.js
--- gnome-shell-3.38.4/js/ui/status/power.js	2021-03-15 21:28:45.037283700 +0000
+++ gnome-shell-3.38.6/js/ui/status/power.js	2021-08-18 00:33:58.102246000 +0100
@@ -22,29 +22,34 @@
     _init() {
         super._init();
 
-        this._desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' });
-        this._desktopSettings.connect('changed::%s'.format(SHOW_BATTERY_PERCENTAGE),
-                                      this._sync.bind(this));
+        this._desktopSettings = new Gio.Settings({
+            schema_id: 'org.gnome.desktop.interface',
+        });
+        this._desktopSettings.connect(
+            'changed::%s'.format(SHOW_BATTERY_PERCENTAGE), this._sync.bind(this));
 
         this._indicator = this._addIndicator();
-        this._percentageLabel = new St.Label({ y_expand: true,
-                                               y_align: Clutter.ActorAlign.CENTER });
+        this._percentageLabel = new St.Label({
+            y_expand: true,
+            y_align: Clutter.ActorAlign.CENTER,
+        });
         this.add_child(this._percentageLabel);
         this.add_style_class_name('power-status');
 
         this._proxy = new PowerManagerProxy(Gio.DBus.system, BUS_NAME, OBJECT_PATH,
-                                            (proxy, error) => {
-                                                if (error) {
-                                                    log(error.message);
-                                                    return;
-                                                }
-                                                this._proxy.connect('g-properties-changed',
-                                                                    this._sync.bind(this));
-                                                this._sync();
-                                            });
-
-        this._item = new PopupMenu.PopupSubMenuMenuItem("", true);
-        this._item.menu.addSettingsAction(_("Power Settings"), 'gnome-power-panel.desktop');
+            (proxy, error) => {
+                if (error) {
+                    log(error.message);
+                } else {
+                    this._proxy.connect('g-properties-changed',
+                        this._sync.bind(this));
+                }
+                this._sync();
+            });
+
+        this._item = new PopupMenu.PopupSubMenuMenuItem('', true);
+        this._item.menu.addSettingsAction(_('Power Settings'),
+            'gnome-power-panel.desktop');
         this.menu.addMenuItem(this._item);
 
         Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
@@ -59,36 +64,38 @@
     _getStatus() {
         let seconds = 0;
 
-        if (this._proxy.State == UPower.DeviceState.FULLY_CHARGED)
-            return _("Fully Charged");
-        else if (this._proxy.State == UPower.DeviceState.CHARGING)
+        if (this._proxy.State === UPower.DeviceState.FULLY_CHARGED)
+            return _('Fully Charged');
+        else if (this._proxy.State === UPower.DeviceState.CHARGING)
             seconds = this._proxy.TimeToFull;
-        else if (this._proxy.State == UPower.DeviceState.DISCHARGING)
+        else if (this._proxy.State === UPower.DeviceState.DISCHARGING)
             seconds = this._proxy.TimeToEmpty;
-        else if (this._proxy.State == UPower.DeviceState.PENDING_CHARGE)
-            return _("Not Charging");
+        else if (this._proxy.State === UPower.DeviceState.PENDING_CHARGE)
+            return _('Not Charging');
         // state is PENDING_DISCHARGE
         else
-            return _("Estimating…");
+            return _('Estimating…');
 
         let time = Math.round(seconds / 60);
-        if (time == 0) {
+        if (time === 0) {
             // 0 is reported when UPower does not have enough data
             // to estimate battery life
-            return _("Estimating…");
+            return _('Estimating…');
         }
 
         let minutes = time % 60;
         let hours = Math.floor(time / 60);
 
-        if (this._proxy.State == UPower.DeviceState.DISCHARGING) {
+        if (this._proxy.State === UPower.DeviceState.DISCHARGING) {
             // Translators: this is <hours>:<minutes> Remaining (<percentage>)
-            return _("%d\u2236%02d Remaining (%d\u2009%%)").format(hours, minutes, this._proxy.Percentage);
+            return _('%d\u2236%02d Remaining (%d\u2009%%)').format(
+                hours, minutes, this._proxy.Percentage);
         }
 
-        if (this._proxy.State == UPower.DeviceState.CHARGING) {
+        if (this._proxy.State === UPower.DeviceState.CHARGING) {
             // Translators: this is <hours>:<minutes> Until Full (<percentage>)
-            return _("%d\u2236%02d Until Full (%d\u2009%%)").format(hours, minutes, this._proxy.Percentage);
+            return _('%d\u2236%02d Until Full (%d\u2009%%)').format(
+                hours, minutes, this._proxy.Percentage);
         }
 
         return null;
@@ -99,7 +106,8 @@
         let visible = this._proxy.IsPresent;
         if (visible) {
             this._item.show();
-            this._percentageLabel.visible = this._desktopSettings.get_boolean(SHOW_BATTERY_PERCENTAGE);
+            this._percentageLabel.visible =
+                this._desktopSettings.get_boolean(SHOW_BATTERY_PERCENTAGE);
         } else {
             // If there's no battery, then we use the power icon.
             this._item.hide();
@@ -109,7 +117,7 @@
         }
 
         // The icons
-        let chargingState = this._proxy.State == UPower.DeviceState.CHARGING
+        let chargingState = this._proxy.State === UPower.DeviceState.CHARGING
             ? '-charging' : '';
         let fillLevel = 10 * Math.floor(this._proxy.Percentage / 10);
         const charged =
diff -Nru gnome-shell-3.38.4/meson.build gnome-shell-3.38.6/meson.build
--- gnome-shell-3.38.4/meson.build	2021-03-15 21:28:45.044283400 +0000
+++ gnome-shell-3.38.6/meson.build	2021-08-18 00:33:58.108246000 +0100
@@ -1,5 +1,5 @@
 project('gnome-shell', 'c',
-  version: '3.38.4',
+  version: '3.38.6',
   meson_version: '>= 0.53.0',
   license: 'GPLv2+'
 )
@@ -155,6 +155,7 @@
 )
 cdata.set('HAVE_FDWALK', cc.has_function('fdwalk'))
 cdata.set('HAVE_MALLINFO', cc.has_function('mallinfo'))
+cdata.set('HAVE_MALLINFO2', cc.has_function('mallinfo2'))
 cdata.set('HAVE_SYS_RESOURCE_H', cc.has_header('sys/resource.h'))
 cdata.set('HAVE__NL_TIME_FIRST_WEEKDAY',
   cc.has_header_symbol('langinfo.h', '_NL_TIME_FIRST_WEEKDAY')
diff -Nru gnome-shell-3.38.4/NEWS gnome-shell-3.38.6/NEWS
--- gnome-shell-3.38.4/NEWS	2021-03-15 21:28:44.983285000 +0000
+++ gnome-shell-3.38.6/NEWS	2021-08-18 00:33:58.054246000 +0100
@@ -1,3 +1,33 @@
+3.38.6
+======
+* Fix IM popup visibility when in fullscreen [Florian; !1900]
+* magnifier: Fix view jumps when using caret tracking [Lee; !1823]
+* Fixed crash [Florian; !1885]
+* Misc. bug fixes and cleanups [Florian, Carlos, Robert; !1891, !1902,
+  !1901, !1786, !1909]
+
+Contributors:
+  Carlos Garnacho, Lee, Robert Mader, Florian Müllner
+
+Translators:
+  Hugo Carvalho [pt]
+
+3.38.5
+======
+* Improve handling of authentication cancellation at login [Marco; !1783]
+* Fix word suggestions in on-screen keyboard [Jia; !1806]
+* Fix freeze after cancelling (some) system-modal dialogs
+  [Daniel, Florian; !1757, !1819]
+* Fixed crashes [Gustavo; !1848]
+* Misc. bug fixes [Daniel; !1758]
+
+Contributors:
+  Jia Chao, Florian Müllner, Gustavo Noronha Silva, Marco Trevisan (Treviño),
+  Daniel van Vugt
+
+Translators:
+  Emin Tufan Çetin [tr]
+
 3.38.4
 ======
 * Fix stuck grab after failed area screenshots [Sebastian; !1600]
diff -Nru gnome-shell-3.38.4/po/pt.po gnome-shell-3.38.6/po/pt.po
diff -Nru gnome-shell-3.38.4/po/tr.po gnome-shell-3.38.6/po/tr.po
diff -Nru gnome-shell-3.38.4/src/calendar-server/gnome-shell-calendar-server.c gnome-shell-3.38.6/src/calendar-server/gnome-shell-calendar-server.c
--- gnome-shell-3.38.4/src/calendar-server/gnome-shell-calendar-server.c	2021-03-15 21:28:45.193279300 +0000
+++ gnome-shell-3.38.6/src/calendar-server/gnome-shell-calendar-server.c	2021-08-18 00:33:58.188246500 +0100
@@ -405,8 +405,7 @@
                                  (gboolean) appt->is_all_day,
                                  (gint64) start_time,
                                  (gint64) end_time,
-                                 extras_builder);
-          g_variant_builder_clear (&extras_builder);
+                                 &extras_builder);
         }
     }
 
diff -Nru gnome-shell-3.38.4/src/main.c gnome-shell-3.38.6/src/main.c
--- gnome-shell-3.38.4/src/main.c	2021-03-15 21:28:45.195279400 +0000
+++ gnome-shell-3.38.6/src/main.c	2021-08-18 00:33:58.191246500 +0100
@@ -2,7 +2,7 @@
 
 #include "config.h"
 
-#ifdef HAVE_MALLINFO
+#if defined (HAVE_MALLINFO) || defined (HAVE_MALLINFO2)
 #include <malloc.h>
 #endif
 #include <stdlib.h>
@@ -256,8 +256,12 @@
 malloc_statistics_callback (ShellPerfLog *perf_log,
                             gpointer      data)
 {
-#ifdef HAVE_MALLINFO
+#if defined (HAVE_MALLINFO) || defined (HAVE_MALLINFO2)
+#ifdef HAVE_MALLINFO2
+  struct mallinfo2 info = mallinfo2 ();
+#else
   struct mallinfo info = mallinfo ();
+#endif
 
   shell_perf_log_update_statistic_i (perf_log,
                                      "malloc.arenaSize",
@@ -268,7 +272,7 @@
   shell_perf_log_update_statistic_i (perf_log,
                                      "malloc.usedSize",
                                      info.uordblks);
-#endif
+#endif /* defined (HAVE_MALLINFO) || defined (HAVE_MALLINFO2) */
 }
 
 static void
diff -Nru gnome-shell-3.38.4/src/shell-app.c gnome-shell-3.38.6/src/shell-app.c
--- gnome-shell-3.38.4/src/shell-app.c	2021-03-15 21:28:45.197279200 +0000
+++ gnome-shell-3.38.6/src/shell-app.c	2021-08-18 00:33:58.193246400 +0100
@@ -1046,10 +1046,11 @@
 {
   ShellApp *app = user_data;
   ShellOrgGtkApplication *proxy;
+  g_autoptr (GError) error = NULL;
 
   g_assert (SHELL_IS_APP (app));
 
-  proxy = shell_org_gtk_application_proxy_new_finish (result, NULL);
+  proxy = shell_org_gtk_application_proxy_new_finish (result, &error);
   if (proxy != NULL)
     {
       app->running_state->application_proxy = proxy;
@@ -1061,7 +1062,8 @@
         g_object_notify (G_OBJECT (app), "busy");
     }
 
-  if (app->running_state != NULL)
+  if (app->running_state != NULL &&
+      !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
     g_clear_object (&app->running_state->cancellable);
 
   g_object_unref (app);
diff -Nru gnome-shell-3.38.4/src/shell-global.c gnome-shell-3.38.6/src/shell-global.c
--- gnome-shell-3.38.4/src/shell-global.c	2021-03-15 21:28:45.199279000 +0000
+++ gnome-shell-3.38.6/src/shell-global.c	2021-08-18 00:33:58.194246500 +0100
@@ -32,11 +32,6 @@
 #define GNOME_DESKTOP_USE_UNSTABLE_API
 #include <libgnome-desktop/gnome-systemd.h>
 
-/* Memory report bits */
-#ifdef HAVE_MALLINFO
-#include <malloc.h>
-#endif
-
 #if defined __OpenBSD__ || defined __FreeBSD__
 #include <sys/sysctl.h>
 #endif
diff -Nru gnome-shell-3.38.4/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in gnome-shell-3.38.6/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in
--- gnome-shell-3.38.4/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in	2021-03-15 21:28:45.222278600 +0000
+++ gnome-shell-3.38.6/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in	2021-08-18 00:33:58.223246600 +0100
@@ -39,6 +39,8 @@
   </description>
 
   <releases>
+    <release version="3.38.6" date="2021-08-18"/>
+    <release version="3.38.5" date="2021-06-10"/>
     <release version="3.38.4" date="2021-03-15"/>
     <release version="3.38.3" date="2021-01-14"/>
     <release version="3.38.2" date="2020-12-02"/>
diff -Nru gnome-shell-3.38.4/subprojects/extensions-app/meson.build gnome-shell-3.38.6/subprojects/extensions-app/meson.build
--- gnome-shell-3.38.4/subprojects/extensions-app/meson.build	2021-03-15 21:28:45.223278500 +0000
+++ gnome-shell-3.38.6/subprojects/extensions-app/meson.build	2021-08-18 00:33:58.224246500 +0100
@@ -1,5 +1,5 @@
 project('gnome-extensions-app',
-  version: '3.38.4',
+  version: '3.38.6',
   meson_version: '>= 0.53.0',
   license: 'GPLv2+'
 )
diff -Nru gnome-shell-3.38.4/subprojects/extensions-app/subprojects/shew/meson.build gnome-shell-3.38.6/subprojects/extensions-app/subprojects/shew/meson.build
--- gnome-shell-3.38.4/subprojects/extensions-app/subprojects/shew/meson.build	2021-03-15 21:28:45.225278400 +0000
+++ gnome-shell-3.38.6/subprojects/extensions-app/subprojects/shew/meson.build	2021-08-18 00:33:58.228246700 +0100
@@ -1,5 +1,5 @@
 project('shew', 'c',
-  version: '3.38.4',
+  version: '3.38.6',
   meson_version: '>= 0.53.0',
   license: 'LGPLv2+',
 )
diff -Nru gnome-shell-3.38.4/subprojects/extensions-tool/meson.build gnome-shell-3.38.6/subprojects/extensions-tool/meson.build
--- gnome-shell-3.38.4/subprojects/extensions-tool/meson.build	2021-03-15 21:28:45.224278500 +0000
+++ gnome-shell-3.38.6/subprojects/extensions-tool/meson.build	2021-08-18 00:33:58.226246600 +0100
@@ -1,5 +1,5 @@
 project('gnome-extensions-tool', 'c',
-  version: '3.38.4',
+  version: '3.38.6',
   meson_version: '>= 0.53.0',
   license: 'GPLv2+'
 )
diff -Nru gnome-shell-3.38.4/subprojects/shew/meson.build gnome-shell-3.38.6/subprojects/shew/meson.build
--- gnome-shell-3.38.4/subprojects/shew/meson.build	2021-03-15 21:28:45.225278400 +0000
+++ gnome-shell-3.38.6/subprojects/shew/meson.build	2021-08-18 00:33:58.228246700 +0100
@@ -1,5 +1,5 @@
 project('shew', 'c',
-  version: '3.38.4',
+  version: '3.38.6',
   meson_version: '>= 0.53.0',
   license: 'LGPLv2+',
 )

--- End Message ---
--- Begin Message ---
Package: release.debian.org
Version: 11.1

Hi,

The updates relating to these bugs were included in this morning's 11.1
point release for bullseye.

Regards,

Adam

--- End Message ---

Reply to: