diff --git a/Sources/AppDelegate.swift b/Sources/AppDelegate.swift index b743a4b7..ac461f9b 100644 --- a/Sources/AppDelegate.swift +++ b/Sources/AppDelegate.swift @@ -3962,7 +3962,6 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent guard let self else { return event } if event.type == .keyDown { #if DEBUG - let isEnterKey = event.keyCode == 36 || event.keyCode == 76 if (ProcessInfo.processInfo.environment["CMUX_KEY_LATENCY_PROBE"] == "1" || UserDefaults.standard.bool(forKey: "cmuxKeyLatencyProbe")), event.timestamp > 0 { @@ -3974,36 +3973,18 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent dlog( "monitor.keyDown: \(NSWindow.keyDescription(event)) fr=\(frType) addrBarId=\(self.browserAddressBarFocusedPanelId?.uuidString.prefix(8) ?? "nil") \(self.debugShortcutRouteSnapshot(event: event))" ) - if isEnterKey { - dlog( - "enter.trace stage=app.monitor.pre event=\(NSWindow.keyDescription(event)) " + - "fr=\(frType) addrBarId=\(self.browserAddressBarFocusedPanelId?.uuidString.prefix(8) ?? "nil")" - ) - } if let probeKind = self.developerToolsShortcutProbeKind(event: event) { self.logDeveloperToolsShortcutSnapshot(phase: "monitor.pre.\(probeKind)", event: event) } #endif if self.handleCustomShortcut(event: event) { #if DEBUG - if isEnterKey { - dlog( - "enter.trace stage=app.monitor.consume event=\(NSWindow.keyDescription(event)) " + - "reason=handleCustomShortcut" - ) - } dlog(" → consumed by handleCustomShortcut") DebugEventLog.shared.dump() #endif return nil // Consume the event } #if DEBUG - if isEnterKey { - dlog( - "enter.trace stage=app.monitor.pass event=\(NSWindow.keyDescription(event)) " + - "reason=handleCustomShortcutReturnedFalse" - ) - } DebugEventLog.shared.dump() #endif return event // Pass through @@ -5146,18 +5127,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent /// through the same app-level shortcut handler used by the local key monitor. @discardableResult func handleBrowserSurfaceKeyEquivalent(_ event: NSEvent) -> Bool { - let consumed = handleCustomShortcut(event: event) -#if DEBUG - if event.keyCode == 36 || event.keyCode == 76 { - let frType = NSApp.keyWindow?.firstResponder.map { String(describing: type(of: $0)) } ?? "nil" - dlog( - "enter.trace stage=app.browserSurfaceKeyEquivalent event=\(NSWindow.keyDescription(event)) " + - "consumed=\(consumed ? 1 : 0) fr=\(frType) " + - "addrBarId=\(browserAddressBarFocusedPanelId?.uuidString.prefix(8) ?? "nil")" - ) - } -#endif - return consumed + handleCustomShortcut(event: event) } #if DEBUG @@ -6615,19 +6585,9 @@ private extension NSWindow { } @objc func cmux_performKeyEquivalent(with event: NSEvent) -> Bool { - let isEnterKey = event.keyCode == 36 || event.keyCode == 76 #if DEBUG let frType = self.firstResponder.map { String(describing: type(of: $0)) } ?? "nil" dlog("performKeyEquiv: \(Self.keyDescription(event)) fr=\(frType)") - if isEnterKey { - let frGhostty = cmuxOwningGhosttyView(for: self.firstResponder) != nil - let frWeb = self.firstResponder.flatMap { Self.cmuxOwningWebView(for: $0) } != nil - dlog( - "enter.trace stage=window.performKeyEquivalent.start event=\(Self.keyDescription(event)) " + - "fr=\(frType) frGhostty=\(frGhostty ? 1 : 0) frWeb=\(frWeb ? 1 : 0) " + - "win=\(self.windowNumber)" - ) - } #endif // When the terminal surface is the first responder, prevent SwiftUI's @@ -6658,12 +6618,6 @@ private extension NSWindow { let result = ghosttyView.performKeyEquivalent(with: event) #if DEBUG dlog(" → ghostty direct: \(result)") - if isEnterKey { - dlog( - "enter.trace stage=window.performKeyEquivalent.ghosttyDirect " + - "event=\(Self.keyDescription(event)) consumed=\(result ? 1 : 0)" - ) - } #endif return result } @@ -6685,16 +6639,7 @@ private extension NSWindow { } } - let consumedByBrowserSurface = AppDelegate.shared?.handleBrowserSurfaceKeyEquivalent(event) == true -#if DEBUG - if isEnterKey { - dlog( - "enter.trace stage=window.performKeyEquivalent.browserSurface event=\(Self.keyDescription(event)) " + - "consumed=\(consumedByBrowserSurface ? 1 : 0)" - ) - } -#endif - if consumedByBrowserSurface { + if AppDelegate.shared?.handleBrowserSurfaceKeyEquivalent(event) == true { #if DEBUG dlog(" → consumed by handleBrowserSurfaceKeyEquivalent") #endif @@ -6733,12 +6678,6 @@ private extension NSWindow { let result = cmux_performKeyEquivalent(with: event) #if DEBUG if result { dlog(" → consumed by original performKeyEquivalent") } - if isEnterKey { - dlog( - "enter.trace stage=window.performKeyEquivalent.original event=\(Self.keyDescription(event)) " + - "consumed=\(result ? 1 : 0)" - ) - } #endif return result } diff --git a/Sources/Panels/CmuxWebView.swift b/Sources/Panels/CmuxWebView.swift index 788e417e..bcd77ed2 100644 --- a/Sources/Panels/CmuxWebView.swift +++ b/Sources/Panels/CmuxWebView.swift @@ -63,72 +63,6 @@ final class CmuxWebView: WKWebView { } var debugPointerFocusAllowanceDepth: Int { pointerFocusAllowanceDepth } -#if DEBUG - private func debugKeyDescription(_ event: NSEvent) -> String { - var parts: [String] = [] - let flags = event.modifierFlags.intersection(.deviceIndependentFlagsMask) - if flags.contains(.command) { parts.append("Cmd") } - if flags.contains(.shift) { parts.append("Shift") } - if flags.contains(.option) { parts.append("Opt") } - if flags.contains(.control) { parts.append("Ctrl") } - let chars = event.charactersIgnoringModifiers ?? "?" - parts.append("'\(chars)'(\(event.keyCode))") - return parts.joined(separator: "+") - } - - private func debugEnterTrace( - stage: String, - event: NSEvent, - consumed: Bool? = nil, - note: String? = nil - ) { - let firstResponderType = window?.firstResponder.map { String(describing: type(of: $0)) } ?? "nil" - let host = url?.host ?? "nil" - var line = - "enter.trace stage=\(stage) web=\(ObjectIdentifier(self)) " + - "event=\(debugKeyDescription(event)) fr=\(firstResponderType) " + - "win=\(window?.windowNumber ?? -1) host=\(host)" - if let consumed { - line += " consumed=\(consumed ? 1 : 0)" - } - if let note { - line += " note=\(note)" - } - dlog(line) - } - - private func debugLogActiveElementForEnter(stage: String) { - let js = """ - (() => { - const el = document.activeElement; - if (!el) return 'none'; - const tag = (el.tagName || '').toLowerCase(); - const id = el.id || '-'; - const name = el.getAttribute('name') || '-'; - const type = el.getAttribute('type') || '-'; - return `${tag}|${id}|${name}|${type}`; - })(); - """ - evaluateJavaScript(js) { [weak self] result, error in - guard let self else { return } - let activeSummary: String - if let error { - activeSummary = "error=\(error.localizedDescription)" - } else if let text = result as? String { - activeSummary = text - } else if let result { - activeSummary = String(describing: result) - } else { - activeSummary = "nil" - } - dlog( - "enter.trace stage=\(stage).dom web=\(ObjectIdentifier(self)) " + - "active=\(activeSummary)" - ) - } - } -#endif - override func becomeFirstResponder() -> Bool { guard allowsFirstResponderAcquisitionEffective else { #if DEBUG @@ -182,14 +116,6 @@ final class CmuxWebView: WKWebView { if event.keyCode == 36 || event.keyCode == 76 { // Always bypass app/menu key-equivalent routing for Return/Enter so WebKit // receives the keyDown path used by form submission handlers. -#if DEBUG - debugEnterTrace( - stage: "web.performKeyEquivalent.bypass", - event: event, - consumed: false, - note: "returnFalseForEnter" - ) -#endif return false } @@ -215,37 +141,14 @@ final class CmuxWebView: WKWebView { } override func keyDown(with event: NSEvent) { -#if DEBUG - if event.keyCode == 36 || event.keyCode == 76 { - debugEnterTrace(stage: "web.keyDown.pre", event: event, note: "beforeSuper") - debugLogActiveElementForEnter(stage: "web.keyDown.pre") - } -#endif - // Some Cmd-based key paths in WebKit don't consistently invoke performKeyEquivalent. // Route them through the same app-level shortcut handler as a fallback. if event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.command), AppDelegate.shared?.handleBrowserSurfaceKeyEquivalent(event) == true { -#if DEBUG - if event.keyCode == 36 || event.keyCode == 76 { - debugEnterTrace( - stage: "web.keyDown.commandConsumed", - event: event, - consumed: true, - note: "handleBrowserSurfaceKeyEquivalent" - ) - } -#endif return } super.keyDown(with: event) -#if DEBUG - if event.keyCode == 36 || event.keyCode == 76 { - debugEnterTrace(stage: "web.keyDown.post", event: event, note: "afterSuper") - debugLogActiveElementForEnter(stage: "web.keyDown.post") - } -#endif } // MARK: - Focus on click