Closed Bug 1968967 Opened 5 months ago Closed 3 months ago

Switching back to first 3pane tab causes long and annoying scrolling of message list when smooth scrolling it enabled and messages are sorted by date ascending

Categories

(Thunderbird :: Folder and Message Lists, defect, P1)

Thunderbird 139

Tracking

(relnote-thunderbird +, thunderbird_esr140? fixed, thunderbird140 wontfix, thunderbird141? wontfix)

VERIFIED FIXED
142 Branch
Tracking Status
relnote-thunderbird --- +
thunderbird_esr140 ? fixed
thunderbird140 --- wontfix
thunderbird141 ? wontfix

People

(Reporter: bhaalsen, Assigned: darktrojan)

References

(Blocks 1 open bug, Regression)

Details

(Keywords: perf:responsiveness, regression)

Attachments

(2 files)

Steps to reproduce:

I just upgraded from 128.11 ESR (which didn't have this issue) to 139 due to the notification showing up.

With auto-hide tabs enabled, unified folders disabled and messages sorted as newest at the bottom, open any email at the bottom of the folder.
This shows two tabs: the Inbox (backgrounded) and the opened message (foreground).
Close the message tab or switch to the Inbox tab.

Actual results:

As the Inbox tab goes active, the scrollbar appears to be at message 1 (the oldest, at the very top), and it appears to auto-select the message opened prior to this (which is at the very bottom). This gives a very annoying scroll effect going from all the way at the top to all the way at the bottom, taking about a second or two to complete. The end result is that the previously selected/opened message is selected again, but with a lot of unnecessary scrolling to get there.

This only happens for the first attempt; switching tabs again afterwards (or reopening the same message) does not cause this behavior. Selecting a different message however does it again. Other tabs (like settings) don't show this issue.

Expected results:

The Inbox folder should just stay put, scrolled to the bottom, with the message selected. No scrolling required, because the scroll position is already where it was.

Sorting messages descending by date (oldest at the bottom, newest at the top) makes this less appearant, since you'd have to scroll down first. But it happens there as well.

It is the message list that scrolls, correct?

Flags: needinfo?(bhaalsen)
Summary: Switching tabs animates the folder with long and annoying scrolling → Switching tabs causes long and annoying scrolling of message list

Yes, this is the message list. Not the tabs, not the message content or anything, the list of messages themselves (in whatever folder is currently open).

Flags: needinfo?(bhaalsen)
Attached image screen recording

Turns out I'm ok-ish with sharing this inbox, so here's a screen recording.

Can't reproduce.

Most of my mailboxes are IMAP from GMail, aka "don't ever delete any mail ever again". 1.000+ emails, some of them with 5.000+.
The smallest one I have is 915 messages, all of them read, and the effect still happens.

But I don't think it's related to the number of messages; one of my "Sent Mail" folders has 62 messages. Scrollbar is there, barely under 2 pages total (roughly 35-40 messages visible at once), and opening the last one in there gives me a jump to the first message, followed by a scrolling animation to the very last message. It roughly takes the same amount of time to scroll, but a lot slower, so I believe it is a fixed animation time there.

What's worse, it happened to me twice now that I opened one of those to quickly check what it was, close the tab (Ctrl+W, but it also happens without the hotkey), then click the mouse to drag the message into a different folder. I only opened it and used the hotkey, so the cursor is still over the email...right? Except it's not, due to scrolling and catching it within that second or two, I interrupted the scroll and selected a different email in the end (somewhere within the last 50-ish messages).

Is there anything else I can provide? A settings export, files from my profile (except for the accounts and emails, obviously)? Or does Thunderbird have a similar tool to Firefox that lets me run a bisect based on builds? I don't have a dev setup to compile TB myself, but I don't mind running a bisect if it helps get this sorted out.

I didn't really think about mozregression-gui; which I had around already for testing a Firefox issue. That result looks a bit weird though:

2025-06-21T20:29:05.991000: INFO : Narrowed nightly regression window from [2024-12-22, 2024-12-24] (2 days) to [2024-12-22, 2024-12-23] (1 days) (~0 steps left)
2025-06-21T20:29:05.994000: DEBUG : taskcluster.client: credentials key scrubbed from logging output
2025-06-21T20:29:05.995000: DEBUG : taskcluster.client: {'rootUrl': 'https://firefox-ci-tc.services.mozilla.com', 'maxRetries': 5, 'signedUrlExpiration': 900}
2025-06-21T20:29:05.995000: DEBUG : taskcluster.client: credentials key scrubbed from logging output
2025-06-21T20:29:05.995000: DEBUG : taskcluster.client: {'rootUrl': 'https://firefox-ci-tc.services.mozilla.com', 'maxRetries': 5, 'signedUrlExpiration': 900}
2025-06-21T20:29:05.995000: DEBUG : Using url: https://hg.mozilla.org/comm-central/json-pushes?changeset=55f5663c91fb13a75d59098a1414eb532440a443
2025-06-21T20:29:05.995000: DEBUG : redo: attempt 1/3
2025-06-21T20:29:05.995000: DEBUG : redo: retry: calling _default_get with args: ('https://hg.mozilla.org/comm-central/json-pushes?changeset=55f5663c91fb13a75d59098a1414eb532440a443',), kwargs: {}, attempt #1
2025-06-21T20:29:05.996000: DEBUG : urllib3.connectionpool: Starting new HTTPS connection (1): hg.mozilla.org:443
2025-06-21T20:29:06.701000: DEBUG : urllib3.connectionpool: https://hg.mozilla.org:443 "GET /comm-central/json-pushes?changeset=55f5663c91fb13a75d59098a1414eb532440a443 HTTP/1.1" 302 0
2025-06-21T20:29:06.703000: DEBUG : urllib3.connectionpool: Starting new HTTPS connection (1): hg-edge.mozilla.org:443
2025-06-21T20:29:07.375000: DEBUG : urllib3.connectionpool: https://hg-edge.mozilla.org:443 "GET /comm-central/json-pushes?changeset=55f5663c91fb13a75d59098a1414eb532440a443 HTTP/1.1" 200 None
2025-06-21T20:29:07.376000: DEBUG : Using url: https://hg.mozilla.org/comm-central/json-pushes?fromchange=55f5663c91fb13a75d59098a1414eb532440a443&tochange=8881e187ac9023ab23237ca153b169ca592e1fdd
2025-06-21T20:29:07.376000: DEBUG : redo: attempt 1/3
2025-06-21T20:29:07.376000: DEBUG : redo: retry: calling _default_get with args: ('https://hg.mozilla.org/comm-central/json-pushes?fromchange=55f5663c91fb13a75d59098a1414eb532440a443&tochange=8881e187ac9023ab23237ca153b169ca592e1fdd',), kwargs: {}, attempt #1
2025-06-21T20:29:07.378000: DEBUG : urllib3.connectionpool: Resetting dropped connection: hg.mozilla.org
2025-06-21T20:29:08.074000: DEBUG : urllib3.connectionpool: https://hg.mozilla.org:443 "GET /comm-central/json-pushes?fromchange=55f5663c91fb13a75d59098a1414eb532440a443&tochange=8881e187ac9023ab23237ca153b169ca592e1fdd HTTP/1.1" 302 0
2025-06-21T20:29:08.613000: DEBUG : urllib3.connectionpool: https://hg-edge.mozilla.org:443 "GET /comm-central/json-pushes?fromchange=55f5663c91fb13a75d59098a1414eb532440a443&tochange=8881e187ac9023ab23237ca153b169ca592e1fdd HTTP/1.1" 200 None
2025-06-21T20:29:08.635000: DEBUG : using taskcluster route 'comm.v2.comm-central.revision.55f5663c91fb13a75d59098a1414eb532440a443.thunderbird.win64-opt'
2025-06-21T20:29:08.635000: DEBUG : taskcluster.client: Using method(v1, v2, payload) calling convention
2025-06-21T20:29:08.635000: DEBUG : using taskcluster route 'comm.v2.comm-central.revision.8881e187ac9023ab23237ca153b169ca592e1fdd.thunderbird.win64-opt'
2025-06-21T20:29:08.635000: DEBUG : taskcluster.client: Found a positional argument: comm.v2.comm-central.revision.55f5663c91fb13a75d59098a1414eb532440a443.thunderbird.win64-opt
2025-06-21T20:29:08.636000: DEBUG : taskcluster.client: Using method(v1, v2, payload) calling convention
2025-06-21T20:29:08.636000: DEBUG : taskcluster.client: After processing positional arguments, we have: {'indexPath': 'comm.v2.comm-central.revision.55f5663c91fb13a75d59098a1414eb532440a443.thunderbird.win64-opt'}
2025-06-21T20:29:08.636000: DEBUG : taskcluster.client: Found a positional argument: comm.v2.comm-central.revision.8881e187ac9023ab23237ca153b169ca592e1fdd.thunderbird.win64-opt
2025-06-21T20:29:08.636000: DEBUG : taskcluster.client: After keyword arguments, we have: {'indexPath': 'comm.v2.comm-central.revision.55f5663c91fb13a75d59098a1414eb532440a443.thunderbird.win64-opt'}
2025-06-21T20:29:08.636000: DEBUG : taskcluster.client: After processing positional arguments, we have: {'indexPath': 'comm.v2.comm-central.revision.8881e187ac9023ab23237ca153b169ca592e1fdd.thunderbird.win64-opt'}
2025-06-21T20:29:08.636000: DEBUG : taskcluster.client: Full URL used is: https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/comm.v2.comm-central.revision.55f5663c91fb13a75d59098a1414eb532440a443.thunderbird.win64-opt
2025-06-21T20:29:08.636000: DEBUG : taskcluster.client: After keyword arguments, we have: {'indexPath': 'comm.v2.comm-central.revision.8881e187ac9023ab23237ca153b169ca592e1fdd.thunderbird.win64-opt'}
2025-06-21T20:29:08.636000: DEBUG : taskcluster.client: Not using hawk!
2025-06-21T20:29:08.636000: DEBUG : taskcluster.client: Full URL used is: https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/comm.v2.comm-central.revision.8881e187ac9023ab23237ca153b169ca592e1fdd.thunderbird.win64-opt
2025-06-21T20:29:08.636000: DEBUG : taskcluster.client: Making attempt 0
2025-06-21T20:29:08.637000: DEBUG : taskcluster.client: Not using hawk!
2025-06-21T20:29:08.637000: DEBUG : taskcluster.utils: Making a GET request to https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/comm.v2.comm-central.revision.55f5663c91fb13a75d59098a1414eb532440a443.thunderbird.win64-opt
2025-06-21T20:29:08.637000: DEBUG : taskcluster.client: Making attempt 0
2025-06-21T20:29:08.637000: DEBUG : taskcluster.utils: HTTP Headers: {}
2025-06-21T20:29:08.637000: DEBUG : taskcluster.utils: Making a GET request to https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/comm.v2.comm-central.revision.8881e187ac9023ab23237ca153b169ca592e1fdd.thunderbird.win64-opt
2025-06-21T20:29:08.637000: DEBUG : taskcluster.utils: HTTP Payload: None (limit 100 char)
2025-06-21T20:29:08.637000: DEBUG : taskcluster.utils: HTTP Headers: {}
2025-06-21T20:29:08.637000: DEBUG : taskcluster.utils: HTTP Payload: None (limit 100 char)
2025-06-21T20:29:08.641000: DEBUG : urllib3.connectionpool: Starting new HTTPS connection (1): firefox-ci-tc.services.mozilla.com:443
2025-06-21T20:29:08.642000: DEBUG : urllib3.connectionpool: Starting new HTTPS connection (1): firefox-ci-tc.services.mozilla.com:443
2025-06-21T20:29:08.944000: DEBUG : urllib3.connectionpool: https://firefox-ci-tc.services.mozilla.com:443 "GET /api/index/v1/task/comm.v2.comm-central.revision.8881e187ac9023ab23237ca153b169ca592e1fdd.thunderbird.win64-opt HTTP/1.1" 200 228
2025-06-21T20:29:08.944000: DEBUG : urllib3.connectionpool: https://firefox-ci-tc.services.mozilla.com:443 "GET /api/index/v1/task/comm.v2.comm-central.revision.55f5663c91fb13a75d59098a1414eb532440a443.thunderbird.win64-opt HTTP/1.1" 200 228
2025-06-21T20:29:08.946000: DEBUG : taskcluster.utils: Received HTTP Status:    200
2025-06-21T20:29:08.947000: DEBUG : taskcluster.utils: Received HTTP Status:    200
2025-06-21T20:29:08.947000: DEBUG : taskcluster.utils: Received HTTP Headers: {'Server': 'openresty', 'Date': 'Sat, 21 Jun 2025 18:29:08 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': '228', 'Content-Security-Policy': "report-uri /__cspreport__;default-src 'none';frame-ancestors 'none';", 'x-content-type-options': 'nosniff', 'x-for-trace-id': 'beb3e4f672d9ffff40aad9be599387f6', 'x-for-request-id': '710dd3bf-2875-4372-939d-6050366e16ba', 'Access-Control-Allow-Origin': '*', 'Access-Control-Max-Age': '900', 'Access-Control-Allow-Methods': 'OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT', 'Access-Control-Request-Method': '*', 'Access-Control-Allow-Headers': 'X-Requested-With,Content-Type,Authorization,Accept,Origin,Cache-Control', 'Cache-Control': 'no-store no-cache must-revalidate', 'ETag': 'W/"e4-2jgxAIDVTUBIKO4TIGsmc4QOZvs"', 'Strict-Transport-Security': 'max-age=31536000', 'Via': '1.1 google', 'Alt-Svc': 'clear'}
2025-06-21T20:29:08.947000: DEBUG : taskcluster.utils: Received HTTP Headers: {'Server': 'openresty', 'Date': 'Sat, 21 Jun 2025 18:29:08 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': '228', 'Content-Security-Policy': "report-uri /__cspreport__;default-src 'none';frame-ancestors 'none';", 'x-content-type-options': 'nosniff', 'x-for-trace-id': 'f5c3d3c75540348da786c8cd4ed208f5', 'x-for-request-id': 'f0cd2d5f-5fb9-4a7d-b52b-72c3fe4569f4', 'Access-Control-Allow-Origin': '*', 'Access-Control-Max-Age': '900', 'Access-Control-Allow-Methods': 'OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT', 'Access-Control-Request-Method': '*', 'Access-Control-Allow-Headers': 'X-Requested-With,Content-Type,Authorization,Accept,Origin,Cache-Control', 'Cache-Control': 'no-store no-cache must-revalidate', 'ETag': 'W/"e4-1IKm9mJFOPpWG0zVw/go6Njt3a0"', 'Strict-Transport-Security': 'max-age=31536000', 'Via': '1.1 google', 'Alt-Svc': 'clear'}
2025-06-21T20:29:08.947000: DEBUG : taskcluster.client: Using method(v1, v2, payload) calling convention
2025-06-21T20:29:08.947000: DEBUG : taskcluster.client: Using method(v1, v2, payload) calling convention
2025-06-21T20:29:08.947000: DEBUG : taskcluster.client: Found a positional argument: MTLDBfQ-SjmBd0_AZdRqIQ
2025-06-21T20:29:08.947000: DEBUG : taskcluster.client: Found a positional argument: ZhI8EjIPQky9WIy4iUkfrQ
2025-06-21T20:29:08.947000: DEBUG : taskcluster.client: After processing positional arguments, we have: {'taskId': 'MTLDBfQ-SjmBd0_AZdRqIQ'}
2025-06-21T20:29:08.947000: DEBUG : taskcluster.client: After processing positional arguments, we have: {'taskId': 'ZhI8EjIPQky9WIy4iUkfrQ'}
2025-06-21T20:29:08.947000: DEBUG : taskcluster.client: After keyword arguments, we have: {'taskId': 'MTLDBfQ-SjmBd0_AZdRqIQ'}
2025-06-21T20:29:08.947000: DEBUG : taskcluster.client: After keyword arguments, we have: {'taskId': 'ZhI8EjIPQky9WIy4iUkfrQ'}
2025-06-21T20:29:08.948000: DEBUG : taskcluster.client: Full URL used is: https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/MTLDBfQ-SjmBd0_AZdRqIQ/status
2025-06-21T20:29:08.948000: DEBUG : taskcluster.client: Full URL used is: https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/ZhI8EjIPQky9WIy4iUkfrQ/status
2025-06-21T20:29:08.948000: DEBUG : taskcluster.client: Not using hawk!
2025-06-21T20:29:08.948000: DEBUG : taskcluster.client: Not using hawk!
2025-06-21T20:29:08.948000: DEBUG : taskcluster.client: Making attempt 0
2025-06-21T20:29:08.948000: DEBUG : taskcluster.client: Making attempt 0
2025-06-21T20:29:08.948000: DEBUG : taskcluster.utils: Making a GET request to https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/MTLDBfQ-SjmBd0_AZdRqIQ/status
2025-06-21T20:29:08.948000: DEBUG : taskcluster.utils: Making a GET request to https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/ZhI8EjIPQky9WIy4iUkfrQ/status
2025-06-21T20:29:08.948000: DEBUG : taskcluster.utils: HTTP Headers: {}
2025-06-21T20:29:08.948000: DEBUG : taskcluster.utils: HTTP Headers: {}
2025-06-21T20:29:08.948000: DEBUG : taskcluster.utils: HTTP Payload: None (limit 100 char)
2025-06-21T20:29:08.948000: DEBUG : taskcluster.utils: HTTP Payload: None (limit 100 char)
2025-06-21T20:29:08.953000: DEBUG : urllib3.connectionpool: Starting new HTTPS connection (1): firefox-ci-tc.services.mozilla.com:443
2025-06-21T20:29:08.953000: DEBUG : urllib3.connectionpool: Starting new HTTPS connection (1): firefox-ci-tc.services.mozilla.com:443
2025-06-21T20:29:09.166000: DEBUG : urllib3.connectionpool: https://firefox-ci-tc.services.mozilla.com:443 "GET /api/queue/v1/task/ZhI8EjIPQky9WIy4iUkfrQ/status HTTP/1.1" 200 842
2025-06-21T20:29:09.168000: DEBUG : taskcluster.utils: Received HTTP Status:    200
2025-06-21T20:29:09.168000: DEBUG : taskcluster.utils: Received HTTP Headers: {'Server': 'openresty', 'Date': 'Sat, 21 Jun 2025 18:29:09 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': '842', 'Content-Security-Policy': "report-uri /__cspreport__;default-src 'none';frame-ancestors 'none';", 'x-content-type-options': 'nosniff', 'x-for-trace-id': '99e81dd70d7dfe80c030e5a6770985ca', 'x-for-request-id': '4ece2947-c162-4ae9-9a64-dada3b44097d', 'Access-Control-Allow-Origin': '*', 'Access-Control-Max-Age': '900', 'Access-Control-Allow-Methods': 'OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT', 'Access-Control-Request-Method': '*', 'Access-Control-Allow-Headers': 'X-Requested-With,Content-Type,Authorization,Accept,Origin,Cache-Control', 'Cache-Control': 'no-store no-cache must-revalidate', 'ETag': 'W/"34a-M8ASmIYUbNKt7qlNVPN04dQ3HYA"', 'Strict-Transport-Security': 'max-age=31536000', 'Via': '1.1 google', 'Alt-Svc': 'clear'}
2025-06-21T20:29:09.170000: DEBUG : taskcluster.client: Using method(v1, v2, payload) calling convention
2025-06-21T20:29:09.170000: DEBUG : taskcluster.client: Found a positional argument: ZhI8EjIPQky9WIy4iUkfrQ
2025-06-21T20:29:09.170000: DEBUG : taskcluster.client: Found a positional argument: 0
2025-06-21T20:29:09.170000: DEBUG : taskcluster.client: After processing positional arguments, we have: {'taskId': 'ZhI8EjIPQky9WIy4iUkfrQ', 'runId': 0}
2025-06-21T20:29:09.170000: DEBUG : taskcluster.client: After keyword arguments, we have: {'taskId': 'ZhI8EjIPQky9WIy4iUkfrQ', 'runId': 0}
2025-06-21T20:29:09.170000: DEBUG : taskcluster.client: Full URL used is: https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/ZhI8EjIPQky9WIy4iUkfrQ/runs/0/artifacts
2025-06-21T20:29:09.170000: DEBUG : taskcluster.client: Not using hawk!
2025-06-21T20:29:09.170000: DEBUG : taskcluster.client: Making attempt 0
2025-06-21T20:29:09.170000: DEBUG : taskcluster.utils: Making a GET request to https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/ZhI8EjIPQky9WIy4iUkfrQ/runs/0/artifacts
2025-06-21T20:29:09.170000: DEBUG : taskcluster.utils: HTTP Headers: {}
2025-06-21T20:29:09.170000: DEBUG : taskcluster.utils: HTTP Payload: None (limit 100 char)
2025-06-21T20:29:09.174000: DEBUG : urllib3.connectionpool: Starting new HTTPS connection (1): firefox-ci-tc.services.mozilla.com:443
2025-06-21T20:29:09.175000: DEBUG : urllib3.connectionpool: https://firefox-ci-tc.services.mozilla.com:443 "GET /api/queue/v1/task/MTLDBfQ-SjmBd0_AZdRqIQ/status HTTP/1.1" 200 845
2025-06-21T20:29:09.176000: DEBUG : taskcluster.utils: Received HTTP Status:    200
2025-06-21T20:29:09.177000: DEBUG : taskcluster.utils: Received HTTP Headers: {'Server': 'openresty', 'Date': 'Sat, 21 Jun 2025 18:29:09 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': '845', 'Content-Security-Policy': "report-uri /__cspreport__;default-src 'none';frame-ancestors 'none';", 'x-content-type-options': 'nosniff', 'x-for-trace-id': '290bf014353c432033a63c4ef0d9e28d', 'x-for-request-id': '06068b77-96da-47b7-be36-db95b6938285', 'Access-Control-Allow-Origin': '*', 'Access-Control-Max-Age': '900', 'Access-Control-Allow-Methods': 'OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT', 'Access-Control-Request-Method': '*', 'Access-Control-Allow-Headers': 'X-Requested-With,Content-Type,Authorization,Accept,Origin,Cache-Control', 'Cache-Control': 'no-store no-cache must-revalidate', 'ETag': 'W/"34d-b89p6Q1BW873iVHNljyUqwHwLrs"', 'Strict-Transport-Security': 'max-age=31536000', 'Via': '1.1 google', 'Alt-Svc': 'clear'}
2025-06-21T20:29:09.177000: DEBUG : taskcluster.client: Using method(v1, v2, payload) calling convention
2025-06-21T20:29:09.177000: DEBUG : taskcluster.client: Found a positional argument: MTLDBfQ-SjmBd0_AZdRqIQ
2025-06-21T20:29:09.177000: DEBUG : taskcluster.client: Found a positional argument: 0
2025-06-21T20:29:09.177000: DEBUG : taskcluster.client: After processing positional arguments, we have: {'taskId': 'MTLDBfQ-SjmBd0_AZdRqIQ', 'runId': 0}
2025-06-21T20:29:09.177000: DEBUG : taskcluster.client: After keyword arguments, we have: {'taskId': 'MTLDBfQ-SjmBd0_AZdRqIQ', 'runId': 0}
2025-06-21T20:29:09.177000: DEBUG : taskcluster.client: Full URL used is: https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/MTLDBfQ-SjmBd0_AZdRqIQ/runs/0/artifacts
2025-06-21T20:29:09.177000: DEBUG : taskcluster.client: Not using hawk!
2025-06-21T20:29:09.177000: DEBUG : taskcluster.client: Making attempt 0
2025-06-21T20:29:09.177000: DEBUG : taskcluster.utils: Making a GET request to https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/MTLDBfQ-SjmBd0_AZdRqIQ/runs/0/artifacts
2025-06-21T20:29:09.177000: DEBUG : taskcluster.utils: HTTP Headers: {}
2025-06-21T20:29:09.177000: DEBUG : taskcluster.utils: HTTP Payload: None (limit 100 char)
2025-06-21T20:29:09.181000: DEBUG : urllib3.connectionpool: Starting new HTTPS connection (1): firefox-ci-tc.services.mozilla.com:443
2025-06-21T20:29:09.422000: DEBUG : urllib3.connectionpool: https://firefox-ci-tc.services.mozilla.com:443 "GET /api/queue/v1/task/ZhI8EjIPQky9WIy4iUkfrQ/runs/0/artifacts HTTP/1.1" 200 None
2025-06-21T20:29:09.423000: DEBUG : urllib3.connectionpool: https://firefox-ci-tc.services.mozilla.com:443 "GET /api/queue/v1/task/MTLDBfQ-SjmBd0_AZdRqIQ/runs/0/artifacts HTTP/1.1" 200 None
2025-06-21T20:29:09.424000: DEBUG : taskcluster.utils: Received HTTP Status:    200
2025-06-21T20:29:09.424000: DEBUG : taskcluster.utils: Received HTTP Headers: {'Server': 'openresty', 'Date': 'Sat, 21 Jun 2025 18:29:09 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Vary': 'Accept-Encoding', 'Content-Security-Policy': "report-uri /__cspreport__;default-src 'none';frame-ancestors 'none';", 'x-content-type-options': 'nosniff', 'x-for-trace-id': '3d71d58200844663ceb18bb203484a4e', 'x-for-request-id': 'fbda96a0-d570-4562-aa80-9fde13437686', 'Access-Control-Allow-Origin': '*', 'Access-Control-Max-Age': '900', 'Access-Control-Allow-Methods': 'OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT', 'Access-Control-Request-Method': '*', 'Access-Control-Allow-Headers': 'X-Requested-With,Content-Type,Authorization,Accept,Origin,Cache-Control', 'Cache-Control': 'no-store no-cache must-revalidate', 'ETag': 'W/"1bff-GDsE0rvmv4LlKxtYnCxnZ1hHK90"', 'Strict-Transport-Security': 'max-age=31536000', 'Content-Encoding': 'gzip', 'Via': '1.1 google', 'Alt-Svc': 'clear', 'Transfer-Encoding': 'chunked'}
2025-06-21T20:29:09.425000: DEBUG : taskcluster.client: Using method(v1, v2, payload) calling convention
2025-06-21T20:29:09.425000: DEBUG : taskcluster.client: Found a positional argument: ZhI8EjIPQky9WIy4iUkfrQ
2025-06-21T20:29:09.425000: DEBUG : taskcluster.client: Found a positional argument: 0
2025-06-21T20:29:09.425000: DEBUG : taskcluster.client: Found a positional argument: public/build/target.zip
2025-06-21T20:29:09.425000: DEBUG : taskcluster.client: After processing positional arguments, we have: {'taskId': 'ZhI8EjIPQky9WIy4iUkfrQ', 'runId': 0, 'name': 'public/build/target.zip'}
2025-06-21T20:29:09.425000: DEBUG : taskcluster.client: After keyword arguments, we have: {'taskId': 'ZhI8EjIPQky9WIy4iUkfrQ', 'runId': 0, 'name': 'public/build/target.zip'}
2025-06-21T20:29:09.425000: DEBUG : taskcluster.utils: Received HTTP Status:    200
2025-06-21T20:29:09.426000: DEBUG : taskcluster.utils: Received HTTP Headers: {'Server': 'openresty', 'Date': 'Sat, 21 Jun 2025 18:29:09 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Vary': 'Accept-Encoding', 'Content-Security-Policy': "report-uri /__cspreport__;default-src 'none';frame-ancestors 'none';", 'x-content-type-options': 'nosniff', 'x-for-trace-id': '953651405c3a781e94c3deb845ab1cb0', 'x-for-request-id': '26c24cf6-60d2-4a5e-9777-183c0d57c37e', 'Access-Control-Allow-Origin': '*', 'Access-Control-Max-Age': '900', 'Access-Control-Allow-Methods': 'OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT', 'Access-Control-Request-Method': '*', 'Access-Control-Allow-Headers': 'X-Requested-With,Content-Type,Authorization,Accept,Origin,Cache-Control', 'Cache-Control': 'no-store no-cache must-revalidate', 'ETag': 'W/"1bff-rYEgmTvUZ5ZLWeo+hZISE8U1dOU"', 'Strict-Transport-Security': 'max-age=31536000', 'Content-Encoding': 'gzip', 'Via': '1.1 google', 'Alt-Svc': 'clear', 'Transfer-Encoding': 'chunked'}
2025-06-21T20:29:09.427000: DEBUG : taskcluster.client: Using method(v1, v2, payload) calling convention
2025-06-21T20:29:09.427000: DEBUG : taskcluster.client: Found a positional argument: MTLDBfQ-SjmBd0_AZdRqIQ
2025-06-21T20:29:09.427000: DEBUG : taskcluster.client: Found a positional argument: 0
2025-06-21T20:29:09.427000: DEBUG : taskcluster.client: Found a positional argument: public/build/target.zip
2025-06-21T20:29:09.427000: DEBUG : taskcluster.client: After processing positional arguments, we have: {'taskId': 'MTLDBfQ-SjmBd0_AZdRqIQ', 'runId': 0, 'name': 'public/build/target.zip'}
2025-06-21T20:29:09.427000: DEBUG : taskcluster.client: After keyword arguments, we have: {'taskId': 'MTLDBfQ-SjmBd0_AZdRqIQ', 'runId': 0, 'name': 'public/build/target.zip'}
2025-06-21T20:29:09.428000: DEBUG : using taskcluster route 'comm.v2.comm-central.revision.0fc30202e0d8776152c9ffd72bd24de4421328c5.thunderbird.win64-opt'
2025-06-21T20:29:09.428000: DEBUG : taskcluster.client: Using method(v1, v2, payload) calling convention
2025-06-21T20:29:09.429000: DEBUG : taskcluster.client: Found a positional argument: comm.v2.comm-central.revision.0fc30202e0d8776152c9ffd72bd24de4421328c5.thunderbird.win64-opt
2025-06-21T20:29:09.429000: DEBUG : taskcluster.client: After processing positional arguments, we have: {'indexPath': 'comm.v2.comm-central.revision.0fc30202e0d8776152c9ffd72bd24de4421328c5.thunderbird.win64-opt'}
2025-06-21T20:29:09.429000: DEBUG : taskcluster.client: After keyword arguments, we have: {'indexPath': 'comm.v2.comm-central.revision.0fc30202e0d8776152c9ffd72bd24de4421328c5.thunderbird.win64-opt'}
2025-06-21T20:29:09.429000: DEBUG : taskcluster.client: Full URL used is: https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/comm.v2.comm-central.revision.0fc30202e0d8776152c9ffd72bd24de4421328c5.thunderbird.win64-opt
2025-06-21T20:29:09.429000: DEBUG : taskcluster.client: Not using hawk!
2025-06-21T20:29:09.429000: DEBUG : taskcluster.client: Making attempt 0
2025-06-21T20:29:09.429000: DEBUG : taskcluster.utils: Making a GET request to https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/comm.v2.comm-central.revision.0fc30202e0d8776152c9ffd72bd24de4421328c5.thunderbird.win64-opt
2025-06-21T20:29:09.429000: DEBUG : taskcluster.utils: HTTP Headers: {}
2025-06-21T20:29:09.429000: DEBUG : taskcluster.utils: HTTP Payload: None (limit 100 char)
2025-06-21T20:29:09.432000: DEBUG : urllib3.connectionpool: Starting new HTTPS connection (1): firefox-ci-tc.services.mozilla.com:443
2025-06-21T20:29:09.670000: DEBUG : urllib3.connectionpool: https://firefox-ci-tc.services.mozilla.com:443 "GET /api/index/v1/task/comm.v2.comm-central.revision.0fc30202e0d8776152c9ffd72bd24de4421328c5.thunderbird.win64-opt HTTP/1.1" 404 440
2025-06-21T20:29:09.671000: DEBUG : taskcluster.utils: Received HTTP Status:    404
2025-06-21T20:29:09.671000: DEBUG : taskcluster.utils: Received HTTP Headers: {'Server': 'openresty', 'Date': 'Sat, 21 Jun 2025 18:29:09 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': '440', 'Content-Security-Policy': "report-uri /__cspreport__;default-src 'none';frame-ancestors 'none';", 'x-content-type-options': 'nosniff', 'x-for-trace-id': 'c4ac34cfa8821b3de3f42cfdf553b9c0', 'x-for-request-id': '98b30c10-3170-49cd-a57f-56826f42d1f7', 'Access-Control-Allow-Origin': '*', 'Access-Control-Max-Age': '900', 'Access-Control-Allow-Methods': 'OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT', 'Access-Control-Request-Method': '*', 'Access-Control-Allow-Headers': 'X-Requested-With,Content-Type,Authorization,Accept,Origin,Cache-Control', 'Cache-Control': 'no-store no-cache must-revalidate', 'ETag': 'W/"1b8-t7yBWeE6Z5yj8XLsdMomDc/YPbM"', 'Strict-Transport-Security': 'max-age=31536000', 'Via': '1.1 google', 'Alt-Svc': 'clear'}
2025-06-21T20:29:09.671000: DEBUG : nothing found via route 'comm.v2.comm-central.revision.0fc30202e0d8776152c9ffd72bd24de4421328c5.thunderbird.win64-opt'
2025-06-21T20:29:09.671000: WARNING : Skipping build 0fc30202e0d8: Unable to find build info using the taskcluster route 'comm.v2.comm-central.revision.0fc30202e0d8776152c9ffd72bd24de4421328c5.thunderbird.win64-opt'
2025-06-21T20:29:09.672000: DEBUG : using taskcluster route 'comm.v2.comm-central.revision.d02e01376d8632875c2b671d4a9a14ba46a04410.thunderbird.win64-opt'
2025-06-21T20:29:09.672000: DEBUG : taskcluster.client: Using method(v1, v2, payload) calling convention
2025-06-21T20:29:09.672000: DEBUG : taskcluster.client: Found a positional argument: comm.v2.comm-central.revision.d02e01376d8632875c2b671d4a9a14ba46a04410.thunderbird.win64-opt
2025-06-21T20:29:09.673000: DEBUG : taskcluster.client: After processing positional arguments, we have: {'indexPath': 'comm.v2.comm-central.revision.d02e01376d8632875c2b671d4a9a14ba46a04410.thunderbird.win64-opt'}
2025-06-21T20:29:09.673000: DEBUG : taskcluster.client: After keyword arguments, we have: {'indexPath': 'comm.v2.comm-central.revision.d02e01376d8632875c2b671d4a9a14ba46a04410.thunderbird.win64-opt'}
2025-06-21T20:29:09.673000: DEBUG : taskcluster.client: Full URL used is: https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/comm.v2.comm-central.revision.d02e01376d8632875c2b671d4a9a14ba46a04410.thunderbird.win64-opt
2025-06-21T20:29:09.674000: DEBUG : taskcluster.client: Not using hawk!
2025-06-21T20:29:09.674000: DEBUG : taskcluster.client: Making attempt 0
2025-06-21T20:29:09.674000: DEBUG : taskcluster.utils: Making a GET request to https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/comm.v2.comm-central.revision.d02e01376d8632875c2b671d4a9a14ba46a04410.thunderbird.win64-opt
2025-06-21T20:29:09.674000: DEBUG : taskcluster.utils: HTTP Headers: {}
2025-06-21T20:29:09.674000: DEBUG : taskcluster.utils: HTTP Payload: None (limit 100 char)
2025-06-21T20:29:09.677000: DEBUG : urllib3.connectionpool: Starting new HTTPS connection (1): firefox-ci-tc.services.mozilla.com:443
2025-06-21T20:29:09.950000: DEBUG : urllib3.connectionpool: https://firefox-ci-tc.services.mozilla.com:443 "GET /api/index/v1/task/comm.v2.comm-central.revision.d02e01376d8632875c2b671d4a9a14ba46a04410.thunderbird.win64-opt HTTP/1.1" 404 440
2025-06-21T20:29:09.952000: DEBUG : taskcluster.utils: Received HTTP Status:    404
2025-06-21T20:29:09.952000: DEBUG : taskcluster.utils: Received HTTP Headers: {'Server': 'openresty', 'Date': 'Sat, 21 Jun 2025 18:29:09 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': '440', 'Content-Security-Policy': "report-uri /__cspreport__;default-src 'none';frame-ancestors 'none';", 'x-content-type-options': 'nosniff', 'x-for-trace-id': 'bdbb049264148fe9c83c862668934bf4', 'x-for-request-id': 'f4fb66e9-0fa7-4645-a147-51c2256e7c05', 'Access-Control-Allow-Origin': '*', 'Access-Control-Max-Age': '900', 'Access-Control-Allow-Methods': 'OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT', 'Access-Control-Request-Method': '*', 'Access-Control-Allow-Headers': 'X-Requested-With,Content-Type,Authorization,Accept,Origin,Cache-Control', 'Cache-Control': 'no-store no-cache must-revalidate', 'ETag': 'W/"1b8-DgBRX2vCQOjt7qNxlGekM62HF38"', 'Strict-Transport-Security': 'max-age=31536000', 'Via': '1.1 google', 'Alt-Svc': 'clear'}
2025-06-21T20:29:09.952000: DEBUG : nothing found via route 'comm.v2.comm-central.revision.d02e01376d8632875c2b671d4a9a14ba46a04410.thunderbird.win64-opt'
2025-06-21T20:29:09.952000: WARNING : Skipping build d02e01376d86: Unable to find build info using the taskcluster route 'comm.v2.comm-central.revision.d02e01376d8632875c2b671d4a9a14ba46a04410.thunderbird.win64-opt'
2025-06-21T20:29:09.954000: DEBUG : Starting merge handling...
2025-06-21T20:29:09.954000: DEBUG : Using url: https://hg.mozilla.org/comm-central/json-pushes?changeset=8881e187ac9023ab23237ca153b169ca592e1fdd&full=1
2025-06-21T20:29:09.954000: DEBUG : redo: attempt 1/3
2025-06-21T20:29:09.954000: DEBUG : redo: retry: calling _default_get with args: ('https://hg.mozilla.org/comm-central/json-pushes?changeset=8881e187ac9023ab23237ca153b169ca592e1fdd&full=1',), kwargs: {}, attempt #1
2025-06-21T20:29:09.956000: DEBUG : urllib3.connectionpool: Resetting dropped connection: hg.mozilla.org
2025-06-21T20:29:10.655000: DEBUG : urllib3.connectionpool: https://hg.mozilla.org:443 "GET /comm-central/json-pushes?changeset=8881e187ac9023ab23237ca153b169ca592e1fdd&full=1 HTTP/1.1" 302 0
2025-06-21T20:29:11.292000: DEBUG : urllib3.connectionpool: https://hg-edge.mozilla.org:443 "GET /comm-central/json-pushes?changeset=8881e187ac9023ab23237ca153b169ca592e1fdd&full=1 HTTP/1.1" 200 None
2025-06-21T20:29:11.294000: DEBUG : Found commit message:
Bug 1802300 - Show net error page if request of POP3 URL fails. r=mkmelin


When downloading the rest of a partial POP3 message fails, display a network error page instead of an empty message pane. This can happen if offline mode is active, or if the UIDL for the message cannot be found on the server.

Differential Revision: https://phabricator.services.mozilla.com/D232646

2025-06-21T20:29:11.294000: DEBUG : Did not find a branch, checking all integration branches
2025-06-21T20:29:11.295000: INFO : The bisection is done.
2025-06-21T20:29:12.106000: INFO : Stopped

At first I thought that was because of my old mozregression-gui version, but I get the same result with the current 6.3.0.
Hope that helps someone.

Purely from staring at Phabricator in that date range, I'd point at D232803 (for Bug 1803713).

Thanks, lets tentatively mark is as regression - it does seem likely

Keywords: regression
Regressed by: 1803713
See Also: → 1975383

FYI, bug 1975383 mentions the setting ui.prefersReducedMotion=1 (which isn't there by default, needs to be added as "number") - that one reduces if not solves the issue, at least temporarily until there's a proper fix.

Blocks: tb140found
Status: UNCONFIRMED → NEW
Ever confirmed: true
Summary: Switching tabs causes long and annoying scrolling of message list → Switching tabs causes long and annoying scrolling of message list without ui.prefersReducedMotion=1

Me too, in 140.0esr. Although unlike the "Actual Results:" in the original poster's message, I see this "double-click newest message" -> Ctrl+W the message -> much scrolling, this happens every time I open the same message, not just the first time.

I'd suggest setting apz.paint_skipping.enabled to false. The machinery flagged by apz.paint_skipping.enabled has been broken before bug 1803713. So setting apz.paint_skipping.enabled to false would restore the previous behavior.

Though we haven't yet received any bug report on Firefox, it's possible this kind of bug happens on Firefox as well, so it would be nice to have a reduced test case for future work.

I'm afraid that doesn't work for me (on both Thunderbird 140.0.0 and 140.0.1, since it just offered me an update). Using ui.prefersReducedMotion=1 gets rid of the scrolling effect, but it isn't a default settings (and less tech-savvy users might struggle to add it). Using apz.paint_skipping.enabled=false (which is in the list by default) doesn't do anything; the scrolling comes back.

(Needless to say, I'm sticking to ui.prefersReducedMotion=1 for the time being.)

Oops. Botond pointed me out that the regressing patch (in comment 7) is not controlled by the pref. Indeed I had not read the comment 7 at all.

With the fact I would say Thunderbird's tab or some other XUL element usage is somewhat broken. The isFirstPaint touched in D232803 should be set only just once the target scroll container is painted.

Anyways, a reduced test case, even with XUL element would help to diagnose.

FWIW, bug 1946690 happened in DevTools looks similar to this bug, and that bug was fixed by some DevTools changes. See bug 1946690 comment 4.

See Also: → 1946690

Not at all a minimal case, but bug 1976182 is easily reproducible

See Also: → 1976182

With Magnus now on PTO for a while, could you please let me know the best course of action to fix the reports of issues coming in as we roll out ESR? Can we do anything to resolve?

Flags: needinfo?(hikezoe.birchill)

Instead of setting pref ui.prefersReducedMotion to 1, you can also switch smooth soft scrolling off in the UI.

Summary: Switching tabs causes long and annoying scrolling of message list without ui.prefersReducedMotion=1 → Switching tabs causes long and annoying scrolling of message list when soft scrolling it enabled

If you mean "Use smooth scrolling", thats the first thing I turned off since it sounded like something to try (same with "Use autoscrolling") - with no change, both are off for me. There's no "soft scrolling" setting as far as I can tell.

Yes, sorry. Switching smooth scrolling off fixes bug 1975383. In fact, if you look at the code, setting the hidden ui.prefersReducedMotion does change the smooth scrolling preference:
https://searchfox.org/mozilla-central/rev/11f8005ddf2523306a03685f57cc3f5e3bacddfb/layout/base/nsLayoutUtils.cpp#7722

Summary: Switching tabs causes long and annoying scrolling of message list when soft scrolling it enabled → Switching tabs causes long and annoying scrolling of message list when smooth scrolling it enabled
Duplicate of this bug: 1975383

Let's fix the summary. It's not about switching tabs, but switching back to the first tab. That can happen automatically by closing a mail message tab.

Summary: Switching tabs causes long and annoying scrolling of message list when smooth scrolling it enabled → Switching back to first 3pane tab causes long and annoying scrolling of message list when smooth scrolling it enabled and messages are sorted by date ascending

If it matters, I got the message pane disabled (which is why the "3 pane" thing confused me for a second). Also, smooth scrolling is disabled for me, and it still happens; so I'm not sure about that part of the summary.

(In reply to Toby Pilling [:tobyp] from comment #16)

With Magnus now on PTO for a while, could you please let me know the best course of action to fix the reports of issues coming in as we roll out ESR? Can we do anything to resolve?

A first step here is definitely to create a simple test case to reproduce this bug.

Flags: needinfo?(hikezoe.birchill)

(In reply to bhaalsen from comment #22)

If it matters, I got the message pane disabled (which is why the "3 pane" thing confused me for a second). Also, smooth scrolling is disabled for me, and it still happens; so I'm not sure about that part of the summary.

Well, with hidden pref ui.prefersReducedMotion not set (it's hidden anyway), and general.smoothScroll at false, the bug doesn't happen in TB 140.0.1 on Windows 11. Maybe someone else can confirm.

(In reply to Hiroyuki Ikezoe (:hiro) from comment #23)

A first step here is definitely to create a simple test case to reproduce this bug.

What's the definition of "simple test case"? A large folder with 10.000+ messages, sorted by date ascending (newest at the bottom). Open a message towards the bottom or the last message in a tab. Close the tab. The bug happens. Video in comment #3.

(In reply to Francesco from comment #24)

(In reply to bhaalsen from comment #22)

If it matters, I got the message pane disabled (which is why the "3 pane" thing confused me for a second). Also, smooth scrolling is disabled for me, and it still happens; so I'm not sure about that part of the summary.

Well, with hidden pref ui.prefersReducedMotion not set (it's hidden anyway), and general.smoothScroll at false, the bug doesn't happen in TB 140.0.1 on Windows 11. Maybe someone else can confirm.

(In reply to Hiroyuki Ikezoe (:hiro) from comment #23)

A first step here is definitely to create a simple test case to reproduce this bug.

What's the definition of "simple test case"? A large folder with 10.000+ messages, sorted by date ascending (newest at the bottom). Open a message towards the bottom or the last message in a tab. Close the tab. The bug happens. Video in comment #3.

I meant a simple html or some such. Yours is a simple "steps to reproduce".

Hi Hiroyuki, we have some automated tests with simple HTML pages in core.
This is one of the tests: https://searchfox.org/comm-central/rev/3266a17c89d80323d2b5b3b28c89179723f813fa/mail/base/test/widgets/browser_treeView.js

In that tests directory we have various HTML files with a simple implementation that we used for our tests, here's one: https://searchfox.org/comm-central/rev/3266a17c89d80323d2b5b3b28c89179723f813fa/mail/base/test/widgets/files/tree-element-test-scroll.xhtml

(In reply to Alessandro Castellani [:aleca] from comment #26)

Hi Hiroyuki, we have some automated tests with simple HTML pages in core.
This is one of the tests: https://searchfox.org/comm-central/rev/3266a17c89d80323d2b5b3b28c89179723f813fa/mail/base/test/widgets/browser_treeView.js

Okay so you meant some tests in the file now fail because of bug 1803713?

Though I am not sure it's feasible or not, if you guys want to fix this bug urgently, the easiest way is to revert bug 1803713 in comm-central. Other than the way, fixing this bug would take some amount of times, months or so.

I can confirm that the issue is with the resizeObserver here: https://searchfox.org/comm-central/rev/3266a17c89d80323d2b5b3b28c89179723f813fa/mail/base/content/widgets/tree-view.mjs#242

This gets triggered because when opening a message, the tab row is displayed, effectively changing the height of the tree and causing the dispatch of the reflow and selection.
In fact, if after the first "rescroll" switching between an open message and 3pane doesn't causes the reflow anymore because the height doesn't change.

I guess we could potentially put a hack that if the value of the delta of the resize is smaller than the height of a couple of rows we shouldn't reflow because we have a pretty safe buffer of top and bottom elements.

I'll experiment with something.
Anyone has any other suggestions?

I did a bit of editing in omni.ja. This fixes the issue for me:

diff --git a/mail/base/content/widgets/tree-view.mjs b/mail/base/content/widgets/tree-view.mjs
--- a/mail/base/content/widgets/tree-view.mjs
+++ b/mail/base/content/widgets/tree-view.mjs
@@ -1231,9 +1231,9 @@ export class TreeView extends HTMLElemen
     }

     // Call `scrollTo` even if the row is in view, to stop any earlier smooth
     // scrolling that might be happening.
-    this.scrollTo({ top: this.scrollTop, behavior });
+    this.scrollTo({ top: this.scrollTop, behavior: "instant" });
   }

   /**
    * Updates the list to reflect added or removed rows.

Curious why the scrollTo operation is necessary there. Looks like it was added in bug 1841711 to fix unexpected scroll position changes, but I wonder where the unexpected ones come from?

(In reply to Francesco from comment #29)

I did a bit of editing in omni.ja. This fixes the issue for me:

diff --git a/mail/base/content/widgets/tree-view.mjs b/mail/base/content/widgets/tree-view.mjs
--- a/mail/base/content/widgets/tree-view.mjs
+++ b/mail/base/content/widgets/tree-view.mjs
@@ -1231,9 +1231,9 @@ export class TreeView extends HTMLElemen
     }

     // Call `scrollTo` even if the row is in view, to stop any earlier smooth
     // scrolling that might be happening.
-    this.scrollTo({ top: this.scrollTop, behavior });
+    this.scrollTo({ top: this.scrollTop, behavior: "instant" });
   }

   /**
    * Updates the list to reflect added or removed rows.

This would break all smooth scrolling for keyboard and mouse action, but you pointing out this area drove me to the right direction.
We're triggering the single selection of the message too many times, even if it's already selected, which in combination with the resize observer and the scrollTo causes the issue.

I found out that my previous message was in correct and the resize observer doesn't trigger the reflow because the change in height from the tab bar is not enough to be needing a reflow, but the fact that the currently selected index changes, the code assumes that a completely different message was selected, so it needs to scroll to it.

I have a patch for it, pushing it to run some tests and checking if I broke another dozen of things.

Assignee: nobody → alessandro
Status: NEW → ASSIGNED

I just pushed a try-run and I'll have some test builds later for folks to try.

Well a bunch of tests are failing, which is not surprising.
I wonder if we should use this occasion to remove all the duplication of indexing and selection states that we have between TreeView and TreeSelection.
That would be a pretty hefty change compared to the fix I found, but maybe better long term.
Anyway, I’ll get back at this tomorrow and check those failing tests.

(In reply to Francesco from comment #24)

(In reply to bhaalsen from comment #22)

If it matters, I got the message pane disabled (which is why the "3 pane" thing confused me for a second). Also, smooth scrolling is disabled for me, and it still happens; so I'm not sure about that part of the summary.

Well, with hidden pref ui.prefersReducedMotion not set (it's hidden anyway), and general.smoothScroll at false, the bug doesn't happen in TB 140.0.1 on Windows 11. Maybe someone else can confirm.

I cannot confirm this on TB 140.0.1 on Windows 10. The scrolling still happens here. The only thing that makes the situation better for me is ui.prefersReducedMotion.

e2280ec5a13aac93aeaac3c951aac66c4f50720e does fix this though. (But it was harder to run that build than I'd like to admit, at least mozregression struggled to load anything from try-comm-central.)

(In reply to bhaalsen from comment #35)

I cannot confirm this on TB 140.0.1 on Windows 10.

I've just tried it on a Windows 10 machine with TB 140.0.1. Just disabling the smooth scroll solves the issue. Not that it matters, but you could try on a completely new profile.

Weirdly enough, general.smoothScroll is not in my prefs.js (while general.autoScroll is). Tbf, that profile was migrated over about 20-ish years from Mozilla to SeaMonkey to standalone Thunderbird (when SM dev stalled and I went to Fx/TB standalone), and it has ~1.4k settings in there; many of which don't even make sense for TB-only.

I just toggled it a bunch of times, and now it's in there. And it does work as you said before. Not sure what was going on there, but I'll just chalk it up to that old profile. Sorry for the noise.

(In reply to Alessandro Castellani [:aleca] from comment #31)

This would break all smooth scrolling for keyboard and mouse action, but you pointing out this area drove me to the right direction.

This comment is confusing:
https://searchfox.org/comm-central/rev/5570906c1ce51276aef5f98e5fdfaf5445ffad93/mail/base/content/widgets/tree-view.mjs#1240-1241
Why would you stop an ongoing smooth scroll with a another identical call without specifying behavior: "instant"?

Be that as it may, a fix has arrived in bug 1976637:
https://hg-edge.mozilla.org/try/rev/838c2d9e086b9d98b14b0422e6a5a9e62a656fcc#l1.12

You could test it in a local build or wait until that fix is in Daily.

See Also: → 1976637
Attachment #9500188 - Attachment description: Bug 1968967 - Always set the TreeView.currentIndex before the TreeSelection._selection is updated. r=#thunderbird-reviewers,darktrojan! → Bug 1968967 - Don't trigger item selection on double clicks and only handle single clicks. r=#thunderbird-reviewers,darktrojan!

@Francesco, thanks for the link to that bug and try run.
Unfortunately I tested it and still can reproduce the issue.

But luckily, we found a much better solution which is one line fix on our end and we could potentially easily uplift to ESR: https://hg-edge.mozilla.org/try-comm-central/rev/6aeb7eacab5c782f9b16b82c3ce082d28414db81

This fixes the issue since it stops the code from trying to set the same index twice on double click, so the scrollTo() doesn't happen when the view switches to another tab.
The double click to open a message is handled by the about3Pane and the TreeView widget should only care about single clicks.

I'm waiting for the try run to see if something gets broken by this, hoping everything looks good and we can fix this soon.
Thank you all for your help and support!

Attachment #9500188 - Attachment description: Bug 1968967 - Don't trigger item selection on double clicks and only handle single clicks. r=#thunderbird-reviewers,darktrojan! → Bug 1968967 - Don't trigger row selection if we're clicking on the same single selected row again. r=#thunderbird-reviewers,darktrojan!
Attachment #9500188 - Attachment description: Bug 1968967 - Don't trigger row selection if we're clicking on the same single selected row again. r=#thunderbird-reviewers,darktrojan! → Bug 1968967 - Don't trigger item selection on double clicks and only handle single click. r=#thunderbird-reviewers,darktrojan!
Target Milestone: --- → 142 Branch

Release Note Request (optional, but appreciated)
[Why is this notable]: Bug fix - Fixes the unwanted scroll of the message list when switching tabs.
[Suggested wording]: Prevent unwanted back scroll of the message list when switching back to the mail tab after opening a message.
[Links (documentation, blog post, etc)]:

Pushed by geoff@darktrojan.net:
https://hg.mozilla.org/comm-central/rev/5da6e60eb093
Don't trigger item selection on double clicks and only handle single click. r=darktrojan

Status: ASSIGNED → RESOLVED
Closed: 3 months ago
Resolution: --- → FIXED

Works in today's Daily, thanks for the fix!

Status: RESOLVED → VERIFIED

Comment on attachment 9500188 [details]
Bug 1968967 - Don't trigger item selection on double clicks and only handle single click. r=#thunderbird-reviewers,darktrojan!

Uplift Approval Request

  • Please state case for uplift consideration and ensure bug severity is set: Users are experiencing a jarring and unwanted sudden scroll of the message list when they switch between tabs. This is not a severe bug, and disabling smooth scrolling can solve it, but it's jarring and I suspect we might get a lot of bug reports and support complaints because it is an annoying bug.
    This only affects Windows.
  • User impact if declined: UI issues, potential motion sickness and visual overload triggers
  • Is this code covered by automated tests?: Yes
  • Has the fix been verified in Daily?: Yes
  • Has the fix been verified in Beta?: No
  • Needs manual test from QA?: No
  • If yes, steps to reproduce:
  • List of other uplifts needed: None
  • Risk to taking this patch: Low
  • Why is the change risky/not risky? (and alternatives if risky): The fix is a one line change to prevent double scrolling when double clicking on a message.
    We have a test that ensures that the selection is still valid and simulates the double click action.
    Unfortunately we don't have a test to verify that the message doesn't scroll, but that one line fix introduces a safe early return so it's pretty impossible that it would happen again.
  • Does the fix cause any migrations to be skipped?: No
  • String changes made/needed: none
Attachment #9500188 - Flags: approval-comm-esr140?
Attachment #9500188 - Flags: approval-comm-beta?
Severity: -- → S3
Priority: -- → P1

Comment on attachment 9500188 [details]
Bug 1968967 - Don't trigger item selection on double clicks and only handle single click. r=#thunderbird-reviewers,darktrojan!

[Triage Comment]
This will be included in Monday's merge of central->beta

Attachment #9500188 - Flags: approval-comm-beta? → approval-comm-beta-

Thanks for the relnote. I modified to shorten a bit and change to past tense: "Message list scrolled back when returning to mail tab after opening a message"

Duplicate of this bug: 1979339

Comment on attachment 9500188 [details]
Bug 1968967 - Don't trigger item selection on double clicks and only handle single click. r=#thunderbird-reviewers,darktrojan!

[Triage Comment]
Approved for esr140

Attachment #9500188 - Flags: approval-comm-esr140? → approval-comm-esr140+
See Also: 1975383
Assignee: alessandro → geoff
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: