Package: release.debian.org Severity: normal Tags: bullseye User: release.debian....@packages.debian.org Usertags: pu X-Debbugs-Cc: debian-gtk-gn...@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 <s...@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 <s...@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+', )