Adam 2 месяцев назад
Родитель
Сommit
09997bb6c8
1 измененных файлов с 30 добавлено и 0 удалено
  1. 30 0
      packages/app/src/pages/session.tsx

+ 30 - 0
packages/app/src/pages/session.tsx

@@ -381,6 +381,22 @@ export default function Page() {
   let promptDock: HTMLDivElement | undefined
   let scroller: HTMLDivElement | undefined
 
+  const [scrollGesture, setScrollGesture] = createSignal(0)
+  const scrollGestureWindowMs = 250
+
+  const markScrollGesture = (target?: EventTarget | null) => {
+    const root = scroller
+    if (!root) return
+
+    const el = target instanceof Element ? target : undefined
+    const nested = el?.closest("[data-scrollable]")
+    if (nested && nested !== root) return
+
+    setScrollGesture(Date.now())
+  }
+
+  const hasScrollGesture = () => Date.now() - scrollGesture() < scrollGestureWindowMs
+
   createEffect(() => {
     if (!params.id) return
     sync.session.sync(params.id)
@@ -795,6 +811,12 @@ export default function Page() {
     // Don't autofocus chat if terminal panel is open
     if (view().terminal.opened()) return
 
+    // Only treat explicit scroll keys as potential "user scroll" gestures.
+    if (event.key === "PageUp" || event.key === "PageDown" || event.key === "Home" || event.key === "End") {
+      markScrollGesture()
+      return
+    }
+
     if (event.key.length === 1 && event.key !== "Unidentified" && !(event.ctrlKey || event.metaKey)) {
       inputRef?.focus()
     }
@@ -1385,7 +1407,15 @@ export default function Page() {
                       </div>
                       <div
                         ref={setScrollRef}
+                        onWheel={(e) => markScrollGesture(e.target)}
+                        onTouchMove={(e) => markScrollGesture(e.target)}
+                        onPointerDown={(e) => {
+                          if (e.target !== e.currentTarget) return
+                          markScrollGesture(e.target)
+                        }}
                         onScroll={(e) => {
+                          if (!hasScrollGesture()) return
+                          setScrollGesture(Date.now())
                           autoScroll.handleScroll()
                           if (isDesktop() && autoScroll.userScrolled()) scheduleScrollSpy(e.currentTarget)
                         }}