cmux/Sources
atani 3a5bd8494c
fix: avoid NSTextView tracking loop in omnibar mouseDown (#928)
* fix: avoid NSTextView tracking loop in omnibar mouseDown (#917)

Replace the synthetic mouseUp timeout workaround with direct cursor
positioning via NSTextView.characterIndexForInsertion(at:). The previous
approach posted a fake mouseUp event via NSApp.postEvent after 3 seconds,
but the NSTextView tracking loop does not always dequeue events from the
application event queue when stuck in an infinite
NSTextLayoutManager.enumerateTextLayoutFragments cycle, so the hang
persisted.

The new approach bypasses super.mouseDown entirely when the field editor
is already active, positioning the cursor (or extending the selection
with Shift+click) without entering the tracking loop. Drag-to-select is
not supported in this code path, but for a single-line omnibar this is
an acceptable trade-off.

* fix: handle double-click, UTF-16 length, and shift-click anchor

Address review feedback:

- Forward double/triple-click events to editor.mouseDown(with:) to
  preserve word and line selection without entering NSTextField's
  tracking loop
- Use (editor.string as NSString).length instead of String.count for
  NSRange clamping (NSRange uses UTF-16 indices)
- Track shift-click anchor independently via shiftClickAnchor property
  to correctly handle bidirectional selection extension

* fix: reset shiftClickAnchor on keyDown to prevent stale anchor

Clear the shift-click selection anchor whenever a key is pressed, so
that keyboard navigation (arrow keys, Shift+arrow, Home/End, etc.)
properly invalidates the mouse-originated anchor. A subsequent
Shift+click will then use the current selection position as anchor
instead of a stale value from a prior mouse interaction.

* fix: reset shiftClickAnchor in performKeyEquivalent and on re-focus

Key equivalents (Cmd+A, Cmd+V, etc.) bypass keyDown and go through
performKeyEquivalent, so the anchor must also be cleared there.
Similarly, re-focusing the field (currentEditor() == nil path) should
reset the anchor since selectAll changes the selection state.
2026-03-05 02:31:23 -08:00
..
Find Fix Cmd+F Escape passthrough into terminal (#918) 2026-03-04 19:26:05 -08:00
Panels fix: avoid NSTextView tracking loop in omnibar mouseDown (#928) 2026-03-05 02:31:23 -08:00
Update feat: add Japanese localization with String Catalog (#819) 2026-03-04 14:58:28 -08:00
AppDelegate.swift Fix terminal link opens to stay in source workspace (#912) 2026-03-04 19:21:45 -08:00
Backport.swift Polish browser suggestions, focus, and tagged reload flow 2026-02-14 21:33:28 -08:00
BrowserWindowPortal.swift Fix portal browser click focus after workspace switch (#908) 2026-03-04 18:36:26 -08:00
cmuxApp.swift Fix custom notification sound staging reliability (#919) 2026-03-04 19:19:07 -08:00
ContentView.swift Reduce typing lag by hiding invisible views from accessibility tree (#862) 2026-03-04 15:40:57 -08:00
GhosttyConfig.swift Honor Ghostty background-opacity across all cmux chrome (#667) 2026-03-01 03:48:46 -08:00
GhosttyTerminalView.swift Skip Ctrl fast path during IME composition (#790) 2026-03-05 00:24:40 -08:00
KeyboardLayout.swift Fix Cmd+plus zoom handling on non-US layouts (#680) 2026-02-28 00:16:03 -08:00
KeyboardShortcutSettings.swift feat: add Japanese localization with String Catalog (#819) 2026-03-04 14:58:28 -08:00
NotificationsPage.swift feat: add Japanese localization with String Catalog (#819) 2026-03-04 14:58:28 -08:00
PortScanner.swift Avoid main-thread hops for explicit socket scope 2026-02-20 23:58:47 -08:00
PostHogAnalytics.swift Add telemetry opt-out setting (#610) 2026-02-26 22:02:29 -08:00
SentryHelper.swift Auto-heal missing CLI listener socket (#679) 2026-02-28 01:19:38 -08:00
SessionPersistence.swift feat: add markdown viewer panel with live file watching (#883) 2026-03-04 17:48:28 -08:00
SidebarSelectionState.swift Implement session persistence pass 1 with multi-window restore 2026-02-22 15:39:59 -08:00
SocketControlSettings.swift feat: add Japanese localization with String Catalog (#819) 2026-03-04 14:58:28 -08:00
TabManager.swift Fix orphaned child processes when closing workspace tabs (#889) 2026-03-04 20:00:35 -08:00
TerminalController.swift Fix background terminal startup for unfocused workspaces (#920) 2026-03-04 19:21:32 -08:00
TerminalNotificationStore.swift Fix custom notification sound staging reliability (#919) 2026-03-04 19:19:07 -08:00
TerminalView.swift Add sidebar blur effect with withinWindow blending (#9) 2026-02-04 03:04:45 -08:00
TerminalWindowPortal.swift Fix ghost terminal surface rebind after close (#808) 2026-03-03 15:20:42 -08:00
UITestRecorder.swift Fix frozen terminals after split churn (#12) 2026-02-13 16:45:31 -08:00
WindowAccessor.swift Polish browser suggestions, focus, and tagged reload flow 2026-02-14 21:33:28 -08:00
WindowDecorationsController.swift Refine settings/about titlebar styling and controls alignment 2026-02-14 02:11:35 -08:00
WindowDragHandleView.swift Fix re-entrant exclusive-access crash in drag handle hit test (#771) 2026-03-02 19:20:14 -08:00
WindowToolbarController.swift Coalesce title notification updates to reduce main-thread hangs 2026-02-20 20:14:19 -08:00
Workspace.swift Fix orphaned child processes when closing workspace tabs (#889) 2026-03-04 20:00:35 -08:00
WorkspaceContentView.swift Honor Ghostty background-opacity across all cmux chrome (#667) 2026-03-01 03:48:46 -08:00