Remove temporary Enter tracing instrumentation
This commit is contained in:
parent
ab1368828b
commit
df9f1a1e6c
2 changed files with 2 additions and 160 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue