feat(desktop): swipe between threads in sidebar order - #9779
Open
maria-rcks wants to merge 1 commit into
Open
Conversation
Contributor
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This PR adds an automatically active Electron swipe gesture that intercepts wheel events, renders navigation feedback, and changes thread routes in both sidebar implementations. It also changes global horizontal overscroll defaults, so the interaction and cross-platform gesture effects warrant human review. You can add or adjust custom eligibility rules. Learn more. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds desktop trackpad navigation between threads in sidebar order, with a small pull indicator clipped behind the sidebar. Web clients never mount the gesture component and retain native horizontal browser history gestures; vertical mouse scrolling, modifier gestures, line/page wheel events, and horizontally scrollable content are left alone.
Verified web typecheck, focused lint, and 53 existing keybinding tests. The screenshot shows the partially pulled indicator at the timeline boundary; updated interaction recording and CI verification are in progress.
Implemented with gpt-6 in the Codex harness.
Note
Low Risk
Desktop-only UI and navigation wiring with deliberate guards; web behavior is unchanged aside from splitting vertical vs horizontal overscroll CSS.
Overview
Adds Electron-only trackpad horizontal swipe to move to the previous/next thread in sidebar order, with a fixed edge arrow indicator whose opacity and position reflect gesture progress until a ~120px threshold triggers navigation.
DesktopThreadSwipeNavigationlistens for pixel-mode horizontal wheel deltas (ignoring modifiers, mostly-vertical scroll, and horizontally scrollable targets), and is mounted from bothSidebarandLegacySidebarvia a sharednavigateToAdjacentThreadhelper that keyboard prev/next shortcuts now use as well.CSS: global overscroll is limited to
overscroll-behavior-y: noneso the web app keeps Chromium’s horizontal history swipe;overscroll-behavior-x: noneapplies only under.electronso the desktop app can own that gesture for thread traversal.Reviewed by Cursor Bugbot for commit 49a440f. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Add horizontal swipe navigation between threads in Electron sidebar
DesktopThreadSwipeNavigation, an Electron-only component that listens for non-passive horizontal wheel gestures and navigates to the adjacent thread (in sidebar order) after 120px of accumulated movement, showing a directional edge indicator during the gesture.DesktopThreadSwipeNavigation.onWheelcallspreventDefaulton eligible horizontal gestures; events inside horizontally scrollable ancestors are excluded viacanScrollHorizontally, but nested scroll containers not detected by the ancestor scan may still have their wheel events suppressed.Macroscope summarized 49a440f.