Package: release.debian.org
Severity: normal
X-Debbugs-Cc: gnome-sh...@packages.debian.org, debian-desk...@lists.debian.org, 
debian-gtk-gn...@lists.debian.org
Control: affects -1 + src:gnome-shell
User: release.debian....@packages.debian.org
Usertags: unblock

[ Reason ]
- Improve how apps are split between the Dash (pinned favourite apps in
  bottom panel) and app grid (main menu) for the set of apps that get
  installed by default in trixie (#1099579)
- New upstream bug fix release

[ Impact ]
If not accepted:
- various upstream bugs including #1104630 and a crash bug will continue
  to be present
- new installations of our default desktop environment will not have the
  UX that we had hoped for

[ Tests ]
A functionally equivalent version is available from experimental. It 
works normally on my GNOME system.

Automated tests still pass. A lot of gnome-shell's functionality is not 
feasible to test via automated testing, but there is a new automated 
test for #1104630.

For the downstream changes for #1099579, I installed debian-installer 
rc1 with GNOME into a virtual machine, then upgraded gnome-shell to this 
version and emptied the user's home directory (to make sure that all 
changes took effect). See #1099579 for screenshots and discussion.

[ Risks ]
Key package, high visibility.

The upstream changes are narrowly-targeted bug fixes, and could easily 
be reverted via patches if they cause a problem.

The downstream changes are also narrowly-targeted and could easily be 
reverted if they cause a problem. The highest-risk of these changes is 
that we moved im-config.desktop from the top level of the app grid into 
a System folder, which could make it more difficult for new users to find.

[ 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 testing
      - the debdiff is testing vs experimental, what I'm proposing to
        upload to unstable is the experimental version plus a changelog
        entry

[ Other info ]
We could easily subdivide these changes by topic (#1099579 vs upstream 
bugfix release) or more narrowly (applying or reverting individual 
changes) if the release or desktop teams would like a subset of them but 
not the whole lot. Please let the GNOME team know what is preferred.
debdiff *.dsc | filterdiff -p1 -x'po/*.po' -x.gitlab-ci.yml

diff -Nru gnome-shell-48.1/data/default-apps/system-folder.txt gnome-shell-48.2/data/default-apps/system-folder.txt
--- gnome-shell-48.1/data/default-apps/system-folder.txt	2025-04-13 23:40:21.000000000 +0100
+++ gnome-shell-48.2/data/default-apps/system-folder.txt	2025-06-10 14:55:10.000000000 +0100
@@ -2,6 +2,7 @@
 org.gnome.DejaDup.desktop                 # Backups
 org.gnome.baobab.desktop                  # Disk Usage Analyzer
 org.gnome.DiskUtility.desktop             # Disks
+im-config.desktop                         # Input Method
 org.gnome.Logs.desktop                    # Logs
 org.freedesktop.MalcontentControl.desktop # Parental Controls
 org.freedesktop.GnomeAbrt.desktop         # Problem Reporting
diff -Nru gnome-shell-48.1/debian/changelog gnome-shell-48.2/debian/changelog
--- gnome-shell-48.1/debian/changelog	2025-04-17 18:38:58.000000000 +0100
+++ gnome-shell-48.2/debian/changelog	2025-06-10 14:16:06.000000000 +0100
@@ -1,3 +1,66 @@
+gnome-shell (48.2-2) experimental; urgency=medium
+
+  * Team upload
+  * Summarize upstream changes in previous changelog entry
+  * d/gnome-shell.gsettings-override: Update default pinned apps for trixie.
+    The pinned (favourite) apps appear in the Dash (the bottom panel),
+    instead of appearing in the main app grid.
+    This file is a Debian-specific override for upstream's default list.
+    The changes compared with previous versions in Debian:
+    - Remove Rhythmbox. We no longer install a music player by default or
+      have a recommended music player for GNOME; users are welcome to
+      install Amberol, GNOME Music, Lollypop, Rhythmbox or any other
+      music player of their choice.
+    - Remove LibreOffice Writer. Pinned apps don't appear in the app grid,
+      and it seems inconsistent to have Writer in the Dash (and not the
+      app grid) but every other LibreOffice component such as Calc in the
+      app grid (not the dash).
+    - Add gnome-text-editor, matching upstream.
+    - Add gnome-calculator, matching upstream.
+    The changes compared with upstream:
+    - Replace Epiphany (GNOME Web) with Firefox ESR, matching what we
+      install by default
+    - Replace GNOME Calendar with Evolution
+    - Add Yelp (GNOME Help)
+    This doesn't necessarily have any effect for existing users:
+    if the user has pinned or unpinned an app at least once, once,
+    then their list of pinned apps is saved and will be unaffected
+    by this override. Please test with a completely new installation,
+    a newly-created test user, or a user with an empty home directory.
+    (Closes: #1099579)
+  * d/patches: Move im-config from main app grid to the System folder,
+    as requested by Jeremy Bícha on #1099579.
+    A known issue is that this only has an effect for completely new
+    installations or newly-created users: if the user has logged in at
+    least once, then their app -> folder mapping is saved, even if they
+    never explicitly modified it.
+
+ -- Simon McVittie <s...@debian.org>  Tue, 10 Jun 2025 14:16:06 +0100
+
+gnome-shell (48.2-1) experimental; urgency=medium
+
+  * New upstream bugfix release
+    - Track screen-time for the Wellbeing feature correctly across
+      suspend/resume, not counting time spent suspended as screen time
+      (Closes: #1104630; gnome-shell!3707 upstream)
+    - Check for surrounding text before enabling that capability
+      (mutter#3102, gnome-shell!3666 upstream)
+    - Fix a crash that can occur during startup when an extension is
+      updated
+      (gnome-shell#8417 upstream)
+    - Fix a regression that broke the ability to run commands in
+      terminals via: Alt+F2, <command>, Ctrl+Enter
+      (gnome-shell#7516 upstream)
+    - Fix VPN toggle in system menu not working when clicking the switch
+      (gnome-shell#8204 upstream)
+    - Always close folders when clicking outside them
+      (gnome-shell#7541 upstream)
+    - Add comments to give context for translators
+      (gnome-shell!3716 upstream)
+    - Translation updates: ro
+
+ -- Jeremy Bícha <jbi...@ubuntu.com>  Fri, 06 Jun 2025 13:32:38 -0400
+
 gnome-shell (48.1-1) unstable; urgency=medium
 
   * New upstream release
diff -Nru gnome-shell-48.1/debian/.gitignore gnome-shell-48.2/debian/.gitignore
--- gnome-shell-48.1/debian/.gitignore	1970-01-01 01:00:00.000000000 +0100
+++ gnome-shell-48.2/debian/.gitignore	2025-06-10 14:16:06.000000000 +0100
@@ -0,0 +1,11 @@
+!*.patch
+/*.debhelper
+/*.debhelper.log
+/*.substvars
+/.debhelper/
+/debhelper-build-stamp
+/files
+/gnome-shell-common/
+/gnome-shell/
+/home/
+/tmp/
diff -Nru gnome-shell-48.1/debian/gnome-shell.gsettings-override gnome-shell-48.2/debian/gnome-shell.gsettings-override
--- gnome-shell-48.1/debian/gnome-shell.gsettings-override	2025-04-17 18:38:58.000000000 +0100
+++ gnome-shell-48.2/debian/gnome-shell.gsettings-override	2025-06-10 14:16:06.000000000 +0100
@@ -1,2 +1,2 @@
 [org.gnome.shell]
-favorite-apps=[ 'firefox-esr.desktop', 'org.gnome.Evolution.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'yelp.desktop' ]
+favorite-apps=[ 'firefox-esr.desktop', 'org.gnome.Evolution.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'org.gnome.TextEditor.desktop', 'org.gnome.Calculator.desktop', 'yelp.desktop' ]
diff -Nru gnome-shell-48.1/debian/patches/debian/data-Add-im-config.desktop-to-System-folder.patch gnome-shell-48.2/debian/patches/debian/data-Add-im-config.desktop-to-System-folder.patch
--- gnome-shell-48.1/debian/patches/debian/data-Add-im-config.desktop-to-System-folder.patch	1970-01-01 01:00:00.000000000 +0100
+++ gnome-shell-48.2/debian/patches/debian/data-Add-im-config.desktop-to-System-folder.patch	2025-06-10 14:16:06.000000000 +0100
@@ -0,0 +1,29 @@
+From: Simon McVittie <s...@debian.org>
+Date: Tue, 10 Jun 2025 11:42:17 +0100
+Subject: data: Add im-config.desktop to System folder
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 8bit
+
+Debian installs this by default, but most users will only need to run
+it once, or perhaps not at all.
+
+Thanks: Jeremy Bícha
+Helps: #1099579
+Forwarded: not-needed, Debian-specific
+---
+ data/default-apps/system-folder.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/data/default-apps/system-folder.txt b/data/default-apps/system-folder.txt
+index 2cda554..62cf6ba 100644
+--- a/data/default-apps/system-folder.txt
++++ b/data/default-apps/system-folder.txt
+@@ -2,6 +2,7 @@ nm-connection-editor.desktop              # Advanced Network Configuration
+ org.gnome.DejaDup.desktop                 # Backups
+ org.gnome.baobab.desktop                  # Disk Usage Analyzer
+ org.gnome.DiskUtility.desktop             # Disks
++im-config.desktop                         # Input Method
+ org.gnome.Logs.desktop                    # Logs
+ org.freedesktop.MalcontentControl.desktop # Parental Controls
+ org.freedesktop.GnomeAbrt.desktop         # Problem Reporting
diff -Nru gnome-shell-48.1/debian/patches/series gnome-shell-48.2/debian/patches/series
--- gnome-shell-48.1/debian/patches/series	2025-04-17 18:38:58.000000000 +0100
+++ gnome-shell-48.2/debian/patches/series	2025-06-10 14:16:06.000000000 +0100
@@ -10,3 +10,4 @@
 tray-icons/tray-na-tray-manager-Remove-outdated-comment-and-return-v.patch
 shell-app-Warn-instead-of-crashing-if-disposed-before-sta.patch
 st-theme-node-Forget-properties-cache-on-stylesheet-chang.patch
+debian/data-Add-im-config.desktop-to-System-folder.patch
diff -Nru gnome-shell-48.1/js/misc/breakManager.js gnome-shell-48.2/js/misc/breakManager.js
--- gnome-shell-48.1/js/misc/breakManager.js	2025-04-13 23:40:21.000000000 +0100
+++ gnome-shell-48.2/js/misc/breakManager.js	2025-05-25 16:24:49.000000000 +0100
@@ -1262,8 +1262,8 @@
             } else if (this._previousState === BreakState.IN_BREAK) {
                 const durationSecs = this._manager.getDurationForBreakType(nextBreakType);
                 const [countdownText, countdownValue, updateTimeoutSeconds] = this._formatTimeSpan(durationSecs - breakDueAgo);
+                /* Translators: %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour” */
                 const bodyText = Gettext.ngettext(
-                    /* %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour” */
                     'There is %s remaining in your break',
                     'There are %s remaining in your break',
                     countdownValue
@@ -1347,6 +1347,7 @@
             return;
 
         if (allowDelay) {
+            /* Translators: As in "Delay the break" */
             this._delayAction = this.addAction(_('Delay'), this._onDelayAction.bind(this));
         } else {
             this.removeAction(this._delayAction);
@@ -1368,6 +1369,7 @@
             return;
 
         if (allowSkip) {
+            /* Translators: As in "Skip the break" */
             this._skipAction = this.addAction(_('Skip'), this._onSkipAction.bind(this));
         } else {
             this.removeAction(this._skipAction);
@@ -1389,6 +1391,7 @@
             return;
 
         if (allowTake) {
+            /* Translators: As in "Take the break" */
             this._takeAction = this.addAction(_('Take'), this._onTakeAction.bind(this));
         } else {
             this.removeAction(this._takeAction);
diff -Nru gnome-shell-48.1/js/misc/fileUtils.js gnome-shell-48.2/js/misc/fileUtils.js
--- gnome-shell-48.1/js/misc/fileUtils.js	2025-04-13 23:40:21.000000000 +0100
+++ gnome-shell-48.2/js/misc/fileUtils.js	2025-05-25 16:24:49.000000000 +0100
@@ -52,7 +52,7 @@
     while ((info = children.next_file(null)) != null) {
         let type = info.get_file_type();
         let child = dir.get_child(info.get_name());
-        if (type === Gio.FileType.REGULAR)
+        if (type === Gio.FileType.REGULAR || type === Gio.FileType.SYMBOLIC_LINK)
             child.delete(null);
         else if (type === Gio.FileType.DIRECTORY)
             recursivelyDeleteDir(child, true);
@@ -78,7 +78,7 @@
         let type = info.get_file_type();
         let srcChild = srcDir.get_child(info.get_name());
         let destChild = destDir.get_child(info.get_name());
-        if (type === Gio.FileType.REGULAR)
+        if (type === Gio.FileType.REGULAR || type === Gio.FileType.SYMBOLIC_LINK)
             srcChild.move(destChild, Gio.FileCopyFlags.NONE, null, null);
         else if (type === Gio.FileType.DIRECTORY)
             recursivelyMoveDir(srcChild, destChild);
diff -Nru gnome-shell-48.1/js/misc/inputMethod.js gnome-shell-48.2/js/misc/inputMethod.js
--- gnome-shell-48.1/js/misc/inputMethod.js	2025-04-13 23:40:21.000000000 +0100
+++ gnome-shell-48.2/js/misc/inputMethod.js	2025-05-25 16:24:49.000000000 +0100
@@ -31,6 +31,9 @@
         this._preeditAnchor = 0;
         this._preeditVisible = false;
         this._hidePanelId = 0;
+        this._surroundingText = null;
+        this._surroundingTextCursor = null;
+        this._surroundingTextAnchor = null;
         this._ibus = IBus.Bus.new_async();
         this._ibus.connect('connected', this._onConnected.bind(this));
         this._ibus.connect('disconnected', this._clear.bind(this));
@@ -50,7 +53,10 @@
     }
 
     _updateCapabilities() {
-        let caps = IBus.Capabilite.PREEDIT_TEXT | IBus.Capabilite.FOCUS | IBus.Capabilite.SURROUNDING_TEXT;
+        let caps = IBus.Capabilite.PREEDIT_TEXT | IBus.Capabilite.FOCUS;
+
+        if (this._surroundingText !== null)
+            caps |= IBus.Capabilite.SURROUNDING_TEXT;
 
         if (Main.keyboard.visible)
             caps |= IBus.Capabilite.OSK;
@@ -124,6 +130,12 @@
     }
 
     _onDeleteSurroundingText(_context, offset, nchars) {
+        if (this._surroundingText === null) {
+            log('input-method engines should not call ' +
+                'the delete-surrounding-text API in case ' +
+                'the input context has no SURROUNDING_TEXT capability.');
+            return;
+        }
         try {
             this.delete_surrounding(offset, nchars);
         } catch {
@@ -241,6 +253,13 @@
     }
 
     vfunc_set_surrounding(text, cursor, anchor) {
+        // If the previous input context supports the surrounding-text feature.
+        const prevHasSurrounding = this._surroundingText !== null;
+        // If the current input context supports the surrounding-text feature.
+        const nowHasSurrounding = text !== null;
+        // If the SURROUNDING_TEXT capability is changed.
+        const updateCapabilities = prevHasSurrounding !== nowHasSurrounding;
+
         this._surroundingText = text;
         this._surroundingTextCursor = cursor;
         this._surroundingTextAnchor = anchor;
@@ -250,6 +269,11 @@
             return;
 
         let ibusText = IBus.Text.new_from_string(text);
+
+        if (updateCapabilities)
+            this._updateCapabilities();
+
+        // Call context.set_surrounding_text() after context.set_capabilities().
         this._context.set_surrounding_text(ibusText, cursor, anchor);
     }
 
diff -Nru gnome-shell-48.1/js/misc/timeLimitsManager.js gnome-shell-48.2/js/misc/timeLimitsManager.js
--- gnome-shell-48.1/js/misc/timeLimitsManager.js	2025-04-13 23:40:21.000000000 +0100
+++ gnome-shell-48.2/js/misc/timeLimitsManager.js	2025-05-25 16:24:49.000000000 +0100
@@ -175,6 +175,7 @@
         this._timerId = 0;
         this._timeChangeId = 0;
         this._clockOffsetSecs = 0;
+        this._ignoreClockOffsetChanges = false;
 
         // Start tracking timings
         this._updateSettings();
@@ -231,6 +232,9 @@
         this._clockOffsetSecs = this._getClockOffset();
         try {
             this._timeChangeId = this._clock.timeChangeNotify(() => {
+                if (this._ignoreClockOffsetChanges)
+                    return GLib.SOURCE_CONTINUE;
+
                 const newClockOffsetSecs = this._getClockOffset();
                 const oldClockOffsetSecs = this._clockOffsetSecs;
 
@@ -348,9 +352,14 @@
     }
 
     async _onPrepareForSleep(preparingForSleep) {
-        // Just come back from sleep, so take another inhibitor.
-        if (!preparingForSleep)
+        // Just come back from sleep, so take another inhibitor. Also update
+        // the clock offset to account for the monotonic clock not advancing
+        // during sleep.
+        if (!preparingForSleep) {
             this._ensureInhibitor();
+            this._clockOffsetSecs = this._getClockOffset();
+            this._ignoreClockOffsetChanges = false;
+        }
 
         try {
             await this._updateUserState(true);
@@ -358,9 +367,14 @@
             console.warn(`Failed to update user state: ${e.message}`);
         }
 
-        // Release the inhibitor if we’re preparing to sleep.
-        if (preparingForSleep)
+        // Release the inhibitor if we’re preparing to sleep. Also avoid
+        // adjusting the time due to offset changes caused by the monotonic
+        // clock not advancing during sleep until we have updated the current
+        // offset to account for this.
+        if (preparingForSleep) {
+            this._ignoreClockOffsetChanges = true;
             this._releaseInhibitor();
+        }
     }
 
     /** Shut down the state machine and write out the state file. */
diff -Nru gnome-shell-48.1/js/ui/appDisplay.js gnome-shell-48.2/js/ui/appDisplay.js
--- gnome-shell-48.1/js/ui/appDisplay.js	2025-04-13 23:40:21.000000000 +0100
+++ gnome-shell-48.2/js/ui/appDisplay.js	2025-05-25 16:24:49.000000000 +0100
@@ -2500,7 +2500,7 @@
             const actor =
                 global.stage.get_actor_at_pos(Clutter.PickMode.ALL, x, y);
 
-            if (actor === this)
+            if (!this._viewBox.contains(actor))
                 this.popdown();
         });
         this.add_action(clickAction);
diff -Nru gnome-shell-48.1/js/ui/extensionSystem.js gnome-shell-48.2/js/ui/extensionSystem.js
--- gnome-shell-48.1/js/ui/extensionSystem.js	2025-04-13 23:40:21.000000000 +0100
+++ gnome-shell-48.2/js/ui/extensionSystem.js	2025-05-25 16:24:49.000000000 +0100
@@ -669,8 +669,12 @@
                 FileUtils.recursivelyMoveDir(dir, extensionDir);
             } catch {
                 log(`Failed to install extension updates for ${uuid}`);
-            } finally {
+            }
+
+            try {
                 FileUtils.recursivelyDeleteDir(dir, true);
+            } catch (e) {
+                console.error(`Failed to delete extension update: ${e.message}`);
             }
         }
     }
diff -Nru gnome-shell-48.1/js/ui/runDialog.js gnome-shell-48.2/js/ui/runDialog.js
--- gnome-shell-48.1/js/ui/runDialog.js	2025-04-13 23:40:21.000000000 +0100
+++ gnome-shell-48.2/js/ui/runDialog.js	2025-05-25 16:24:49.000000000 +0100
@@ -70,6 +70,7 @@
         ShellEntry.addContextMenu(entry);
 
         this._entryText = entry.clutter_text;
+        this._entryText.activatable = false;
         content.add_child(entry);
         this.setInitialKeyFocus(this._entryText);
 
@@ -90,14 +91,6 @@
             gsettingsKey: HISTORY_KEY,
             entry: this._entryText,
         });
-        this._entryText.connect('activate', o => {
-            this.popModal();
-            this._run(o.get_text(),
-                Clutter.get_current_event().get_state() & Clutter.ModifierType.CONTROL_MASK);
-            if (!this._commandError ||
-                !this.pushModal())
-                this.close();
-        });
         this._entryText.connect('key-press-event', (o, e) => {
             let symbol = e.get_key_symbol();
             if (symbol === Clutter.KEY_Tab) {
@@ -113,6 +106,14 @@
                     o.set_cursor_position(text.length + postfix.length);
                 }
                 return Clutter.EVENT_STOP;
+            } else if ([Clutter.KEY_Return, Clutter.KEY_KP_Enter, Clutter.KEY_ISO_Enter].includes(symbol)) {
+                this.popModal();
+                this._run(o.get_text(),
+                    Clutter.get_current_event().get_state() & Clutter.ModifierType.CONTROL_MASK);
+                if (!this._commandError ||
+                    !this.pushModal())
+                    this.close();
+                return Clutter.EVENT_STOP;
             }
             return Clutter.EVENT_PROPAGATE;
         });
diff -Nru gnome-shell-48.1/js/ui/status/network.js gnome-shell-48.2/js/ui/status/network.js
--- gnome-shell-48.1/js/ui/status/network.js	2025-04-13 23:40:21.000000000 +0100
+++ gnome-shell-48.2/js/ui/status/network.js	2025-05-25 16:24:49.000000000 +0100
@@ -1323,6 +1323,16 @@
         this.bind_property('is-active',
             this._switch, 'state',
             GObject.BindingFlags.SYNC_CREATE);
+
+        // Switch handle is reactive, so events don't propagate to the item;
+        // activate it manually in that case
+        this._switch.connect('notify::state', () => {
+            if (this.is_active === this._switch.state)
+                return;
+
+            this.activate();
+        });
+
         this.bind_property('name',
             this._label, 'text',
             GObject.BindingFlags.SYNC_CREATE);
diff -Nru gnome-shell-48.1/meson.build gnome-shell-48.2/meson.build
--- gnome-shell-48.1/meson.build	2025-06-10 14:55:10.000000000 +0100
+++ gnome-shell-48.2/meson.build	2025-06-10 14:55:10.000000000 +0100
@@ -1,5 +1,5 @@
 project('gnome-shell', 'c',
-  version: '48.1',
+  version: '48.2',
   meson_version: '>= 1.1.0',
   license: 'GPL-2.0-or-later',
 )
diff -Nru gnome-shell-48.1/NEWS gnome-shell-48.2/NEWS
--- gnome-shell-48.1/NEWS	2025-04-13 23:40:21.000000000 +0100
+++ gnome-shell-48.2/NEWS	2025-05-25 16:24:49.000000000 +0100
@@ -1,3 +1,19 @@
+48.2
+====
+* Only enable surrounding-text IM capability when needed [Takao; !3666]
+* Fix launching command from terminal in run dialog [Balló; !3683]
+* Ignore offset changes caused by suspend for screen time [Sebastian; !3707]
+* Fix app folders sometimes not closing after outside clicks [Damien; !3713]
+* Fixed crash [Florian; !3721]
+* Misc. bug fixes and cleanups [Philipp, Alynx; !3716, !3711]
+
+Contributors:
+  Takao Fujiwara, Balló György, Sebastian Keller, Philipp Kiemle,
+  Florian Müllner, Damien Tournoud, Alynx Zhou
+
+Translators:
+  Antonio Marin [ro]
+
 48.1
 ====
 * Fix glitch in sliders when close to maximum [Sebastian; !3648]
diff -Nru gnome-shell-48.1/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in gnome-shell-48.2/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in
--- gnome-shell-48.1/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in	2025-04-13 23:40:21.000000000 +0100
+++ gnome-shell-48.2/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in	2025-05-25 16:24:49.000000000 +0100
@@ -55,6 +55,7 @@
   </description>
 
   <releases>
+    <release version="48.2" date="2025-05-24"/>
     <release version="48.1" date="2025-04-12"/>
     <release version="48.0" date="2025-03-16">
       <description>
diff -Nru gnome-shell-48.1/subprojects/extensions-app/meson.build gnome-shell-48.2/subprojects/extensions-app/meson.build
--- gnome-shell-48.1/subprojects/extensions-app/meson.build	2025-04-13 23:40:21.000000000 +0100
+++ gnome-shell-48.2/subprojects/extensions-app/meson.build	2025-05-25 16:24:49.000000000 +0100
@@ -1,5 +1,5 @@
 project('gnome-extensions-app',
-  version: '48.1',
+  version: '48.2',
   meson_version: '>= 0.58.0',
   license: 'GPL-2.0-or-later',
 )
diff -Nru gnome-shell-48.1/subprojects/extensions-app/subprojects/shew/meson.build gnome-shell-48.2/subprojects/extensions-app/subprojects/shew/meson.build
--- gnome-shell-48.1/subprojects/extensions-app/subprojects/shew/meson.build	2025-04-13 23:40:21.000000000 +0100
+++ gnome-shell-48.2/subprojects/extensions-app/subprojects/shew/meson.build	2025-05-25 16:24:49.000000000 +0100
@@ -1,5 +1,5 @@
 project('shew', 'c',
-  version: '48.1',
+  version: '48.2',
   meson_version: '>= 0.58.0',
   license: 'LGPL-2.1-or-later',
 )
diff -Nru gnome-shell-48.1/subprojects/extensions-tool/meson.build gnome-shell-48.2/subprojects/extensions-tool/meson.build
--- gnome-shell-48.1/subprojects/extensions-tool/meson.build	2025-04-13 23:40:21.000000000 +0100
+++ gnome-shell-48.2/subprojects/extensions-tool/meson.build	2025-05-25 16:24:49.000000000 +0100
@@ -1,5 +1,5 @@
 project('gnome-extensions-tool', 'c',
-  version: '48.1',
+  version: '48.2',
   meson_version: '>= 0.58.0',
   license: 'GPL-2.0-or-later',
 )
diff -Nru gnome-shell-48.1/subprojects/shew/meson.build gnome-shell-48.2/subprojects/shew/meson.build
--- gnome-shell-48.1/subprojects/shew/meson.build	2025-04-13 23:40:21.000000000 +0100
+++ gnome-shell-48.2/subprojects/shew/meson.build	2025-05-25 16:24:49.000000000 +0100
@@ -1,5 +1,5 @@
 project('shew', 'c',
-  version: '48.1',
+  version: '48.2',
   meson_version: '>= 0.58.0',
   license: 'LGPL-2.1-or-later',
 )
diff -Nru gnome-shell-48.1/tests/unit/timeLimitsManager.js gnome-shell-48.2/tests/unit/timeLimitsManager.js
--- gnome-shell-48.1/tests/unit/timeLimitsManager.js	2025-04-13 23:40:21.000000000 +0100
+++ gnome-shell-48.2/tests/unit/timeLimitsManager.js	2025-05-25 16:24:49.000000000 +0100
@@ -283,6 +283,12 @@
             newPreparingForSleepState: true,
         });
         this._insertEvent({
+            type: 'time-change',
+            time: TestHarness.timeStrToSecs(timeStr) + 1,
+            newTime: TestHarness.timeStrToSecs(timeStr) + duration - 1,
+            callback: null,
+        });
+        this._insertEvent({
             type: 'preparing-for-sleep-state-change',
             time: TestHarness.timeStrToSecs(timeStr) + duration,
             newPreparingForSleepState: false,
@@ -1309,6 +1315,19 @@
             'dailyLimitTime': TestHarness.timeStrToSecs('2024-06-01T17:00:00Z'),
         });
 
+        // Ensure the suspend event caused a state change to inactive and its
+        // time was not adjusted due to offset changes on resume
+        harness.addAssertionEvent('2024-06-01T15:00:02Z', () => {
+            const [, historyContents] = harness.mockHistoryFile.load_contents(null);
+            expect(JSON.parse(new TextDecoder().decode(historyContents)))
+                .withContext('History file contents')
+                .toContain({
+                    'oldState': UserState.ACTIVE,
+                    'newState': UserState.INACTIVE,
+                    'wallTimeSecs': TestHarness.timeStrToSecs('2024-06-01T12:00:01Z'),
+                });
+        });
+
         harness.shutdownManager('2024-06-01T15:20:00Z', timeLimitsManager);
 
         harness.run();

Reply via email to