From 8f2a52fbf2ec901f217d026da965ad2337eb606d Mon Sep 17 00:00:00 2001 From: Austin Wang Date: Sat, 21 Feb 2026 18:19:14 -0800 Subject: [PATCH] Fix stuck split resize cursor outside divider range (#291) * Keep split dividers visible in tiny panes * Fix collapsed split border resize hit-testing * Stabilize sidebar and split divider resize routing * Fix split divider resize cursor routing regressions * Fix stuck split resize cursor outside divider range --- Sources/BrowserWindowPortal.swift | 13 ++++++++----- Sources/TerminalWindowPortal.swift | 13 ++++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/Sources/BrowserWindowPortal.swift b/Sources/BrowserWindowPortal.swift index eea7e62d..8da7833c 100644 --- a/Sources/BrowserWindowPortal.swift +++ b/Sources/BrowserWindowPortal.swift @@ -49,7 +49,7 @@ final class WindowBrowserHostView: NSView { override func viewDidMoveToWindow() { super.viewDidMoveToWindow() if window == nil { - clearActiveDividerCursor() + clearActiveDividerCursor(restoreArrow: false) } window?.invalidateCursorRects(for: self) } @@ -111,7 +111,7 @@ final class WindowBrowserHostView: NSView { } override func mouseExited(with event: NSEvent) { - clearActiveDividerCursor() + clearActiveDividerCursor(restoreArrow: true) } override func hitTest(_ point: NSPoint) -> NSView? { @@ -180,22 +180,25 @@ final class WindowBrowserHostView: NSView { private func updateDividerCursor(at point: NSPoint) { if shouldPassThroughToSidebarResizer(at: point) { - clearActiveDividerCursor() + clearActiveDividerCursor(restoreArrow: false) return } guard let nextKind = splitDividerCursorKind(at: point) else { - clearActiveDividerCursor() + clearActiveDividerCursor(restoreArrow: true) return } activeDividerCursorKind = nextKind nextKind.cursor.set() } - private func clearActiveDividerCursor() { + private func clearActiveDividerCursor(restoreArrow: Bool) { guard activeDividerCursorKind != nil else { return } window?.invalidateCursorRects(for: self) activeDividerCursorKind = nil + if restoreArrow { + NSCursor.arrow.set() + } } private func splitDividerCursorKind(at point: NSPoint) -> DividerCursorKind? { diff --git a/Sources/TerminalWindowPortal.swift b/Sources/TerminalWindowPortal.swift index 77cf72f5..07831c71 100644 --- a/Sources/TerminalWindowPortal.swift +++ b/Sources/TerminalWindowPortal.swift @@ -51,7 +51,7 @@ final class WindowTerminalHostView: NSView { override func viewDidMoveToWindow() { super.viewDidMoveToWindow() if window == nil { - clearActiveDividerCursor() + clearActiveDividerCursor(restoreArrow: false) } window?.invalidateCursorRects(for: self) } @@ -113,7 +113,7 @@ final class WindowTerminalHostView: NSView { } override func mouseExited(with event: NSEvent) { - clearActiveDividerCursor() + clearActiveDividerCursor(restoreArrow: true) } override func hitTest(_ point: NSPoint) -> NSView? { @@ -212,22 +212,25 @@ final class WindowTerminalHostView: NSView { private func updateDividerCursor(at point: NSPoint) { if shouldPassThroughToSidebarResizer(at: point) { - clearActiveDividerCursor() + clearActiveDividerCursor(restoreArrow: false) return } guard let nextKind = splitDividerCursorKind(at: point) else { - clearActiveDividerCursor() + clearActiveDividerCursor(restoreArrow: true) return } activeDividerCursorKind = nextKind nextKind.cursor.set() } - private func clearActiveDividerCursor() { + private func clearActiveDividerCursor(restoreArrow: Bool) { guard activeDividerCursorKind != nil else { return } window?.invalidateCursorRects(for: self) activeDividerCursorKind = nil + if restoreArrow { + NSCursor.arrow.set() + } } private func splitDividerCursorKind(at point: NSPoint) -> DividerCursorKind? {