Skip to content

feat(desktop): swipe between threads in sidebar order - #9779

Open
maria-rcks wants to merge 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/desktop-thread-swipe-navigation
Open

feat(desktop): swipe between threads in sidebar order#9779
maria-rcks wants to merge 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/desktop-thread-swipe-navigation

Conversation

@maria-rcks

@maria-rcks maria-rcks commented Sep 4, 2026

Copy link
Copy Markdown
Collaborator

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.

Partial pull stays behind the sidebar

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.

DesktopThreadSwipeNavigation listens for pixel-mode horizontal wheel deltas (ignoring modifiers, mostly-vertical scroll, and horizontally scrollable targets), and is mounted from both Sidebar and LegacySidebar via a shared navigateToAdjacentThread helper that keyboard prev/next shortcuts now use as well.

CSS: global overscroll is limited to overscroll-behavior-y: none so the web app keeps Chromium’s horizontal history swipe; overscroll-behavior-x: none applies only under .electron so 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

  • Adds 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.
  • Extracts adjacent-thread resolution logic in LegacySidebar.tsx and Sidebar.tsx into a shared callback reused by both keyboard and swipe navigation.
  • Updates index.css so horizontal overscroll suppression is Electron-only; non-Electron browsers no longer suppress horizontal overscroll globally.
  • Risk: the non-passive window wheel listener in DesktopThreadSwipeNavigation.onWheel calls preventDefault on eligible horizontal gestures; events inside horizontally scrollable ancestors are excluded via canScrollHorizontally, but nested scroll containers not detected by the ancestor scan may still have their wheel events suppressed.

Macroscope summarized 49a440f.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Sep 4, 2026
@macroscopeapp

macroscopeapp Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant