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

Bug#993655: bullseye-pu: package gnome-shell/3.38.6-1~deb11u1



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+',
 )

Reply to: