From c16426270c3d7ddbe948ada16bc74be6642a14a4 Mon Sep 17 00:00:00 2001 From: igor Date: Tue, 14 Jan 2025 18:33:00 -0800 Subject: [PATCH] Clean up. --- src/AppDelegate.swift | 54 ------------- src/EditableNSTextField.swift | 34 +++------ src/GlobalEventTap.swift | 76 ------------------- src/Makefile | 4 +- ...ableViewCell.swift => ProgramsTable.swift} | 8 +- src/ProgramsTableView.swift | 5 -- src/SearchViewController.swift | 4 +- src/SettingsViewController.swift | 8 +- src/ShadowView.swift | 1 - 9 files changed, 25 insertions(+), 169 deletions(-) delete mode 100644 src/GlobalEventTap.swift rename src/{ProgramTableViewCell.swift => ProgramsTable.swift} (93%) delete mode 100644 src/ProgramsTableView.swift diff --git a/src/AppDelegate.swift b/src/AppDelegate.swift index 4c72ef1..c0ea758 100644 --- a/src/AppDelegate.swift +++ b/src/AppDelegate.swift @@ -46,12 +46,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate { } } - //func applicationWillTerminate(_ notification: Notification) { - //} - - func windowDidBecomeKey(_ notification: Notification) { - } - func windowDidResignKey(_ notification: Notification) { if window.isVisible { window.orderOut(nil) @@ -86,51 +80,3 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate { } } } - -extension String { - subscript(index: Int) -> Character { - return self[self.index(self.startIndex, offsetBy: index)] - } -} - -extension String { - public func levenshtein(_ other: String) -> Int { - let sCount = self.count - let oCount = other.count - - guard sCount != 0 else { - return oCount - } - - guard oCount != 0 else { - return sCount - } - - let line : [Int] = Array(repeating: 0, count: oCount + 1) - var mat : [[Int]] = Array(repeating: line, count: sCount + 1) - - for i in 0...sCount { - mat[i][0] = i - } - - for j in 0...oCount { - mat[0][j] = j - } - - for j in 1...oCount { - for i in 1...sCount { - if self[i - 1] == other[j - 1] { - mat[i][j] = mat[i - 1][j - 1] // no operation - } - else { - let del = mat[i - 1][j] + 1 // deletion - let ins = mat[i][j - 1] + 1 // insertion - let sub = mat[i - 1][j - 1] + 1 // substitution - mat[i][j] = min(min(del, ins), sub) - } - } - } - - return mat[sCount][oCount] - } -} diff --git a/src/EditableNSTextField.swift b/src/EditableNSTextField.swift index ecc6333..d7a06bf 100644 --- a/src/EditableNSTextField.swift +++ b/src/EditableNSTextField.swift @@ -1,53 +1,43 @@ import Cocoa +import Carbon protocol EditableNSTextFieldDelegate: AnyObject { func lostFocus() } final class EditableNSTextField: NSTextField { - private let commandKey = NSEvent.ModifierFlags.command.rawValue - private let commandShiftKey = NSEvent.ModifierFlags.command.rawValue | - NSEvent.ModifierFlags.shift.rawValue - weak var auxiliaryDelegate: EditableNSTextFieldDelegate? override func performKeyEquivalent(with event: NSEvent) -> Bool { if event.type == NSEvent.EventType.keyDown { - if (event.modifierFlags.rawValue & - NSEvent.ModifierFlags.deviceIndependentFlagsMask.rawValue) - == commandKey - { - // TODO: Use virtual key codes instead of characters. - switch event.charactersIgnoringModifiers! { - case "x": + let modifiers = event.modifierFlags.rawValue + let key = event.keyCode + + if modsContains(keys: OSCmd, in: modifiers) { + if key == kVK_ANSI_X { if NSApp.sendAction(#selector(NSText.cut(_:)), to: nil, from: self) { return true } - case "c": + } else if key == kVK_ANSI_C { if NSApp.sendAction(#selector(NSText.copy(_:)), to: nil, from: self) { return true } - case "v": + } else if key == kVK_ANSI_V { if NSApp.sendAction(#selector(NSText.paste(_:)), to: nil, from: self) { return true } - case "z": + } else if key == kVK_ANSI_Z { if NSApp.sendAction(Selector(("undo:")), to: nil, from: self) { return true } - case "a": + } else if key == kVK_ANSI_A { if NSApp.sendAction( #selector(NSResponder.selectAll(_:)), to: nil, from: self) { return true } - default: - break } - } else if (event.modifierFlags.rawValue & - NSEvent.ModifierFlags.deviceIndependentFlagsMask.rawValue) - == commandShiftKey - { - if event.charactersIgnoringModifiers == "Z" { + } else if modsContains(keys: OSCmd | OSShift, in: modifiers) { + if key == kVK_ANSI_Z { if NSApp.sendAction(Selector(("redo:")), to: nil, from: self) { return true } diff --git a/src/GlobalEventTap.swift b/src/GlobalEventTap.swift deleted file mode 100644 index cc68cf1..0000000 --- a/src/GlobalEventTap.swift +++ /dev/null @@ -1,76 +0,0 @@ -import AppKit -import Carbon -import OSLog - -fileprivate func handleGlobalEvents(proxy: CGEventTapProxy, - type: CGEventType, event: CGEvent, - refcon: UnsafeMutableRawPointer? - ) -> Unmanaged? { - let logger = Logger( - subsystem: Bundle.main.bundleIdentifier!, - category: String(describing: AppDelegate.self) - ) - - switch type { - case .keyDown: - //logger.debug(".keyDown") - - let keyCode = "keyCode: \(event.getIntegerValueField(.keyboardEventKeycode))" - logger.debug("\(keyCode, privacy: .public)") - - //if (event.flags.rawValue & CGEventFlags.maskAlternate.rawValue) == CGEventFlags.maskAlternate.rawValue && - // (event.flags.rawValue & (CGEventFlags.maskShift.rawValue | CGEventFlags.maskControl.rawValue | CGEventFlags.maskCommand.rawValue)) == 0 { - // logger.debug("maskAlternate") - //} - //logger.debug("Option rawValue=\(CGEventFlags.maskAlternate.rawValue)") - - // var keyCode = event.getIntegerValueField(.keyboardEventKeycode) - //if keyCode == 49 { - // logger.debug("EVENT TAP") - // return nil - //} - case .keyUp: - //logger.debug(".keyUp") - break - default: - break - } - - - //event.setIntegerValueField(.keyboardEventKeycode, value: keyCode) // NOTE: ??? - - return Unmanaged.passUnretained(event) -} - -final class GlobalEventTap { - fileprivate static let logger = Logger( - subsystem: Bundle.main.bundleIdentifier!, - category: String(describing: GlobalEventTap.self) - ) - - static let shared = GlobalEventTap() - - private init() {} - - deinit {} - - func enable() { - let eventMask = (1 << CGEventType.keyDown.rawValue) | (1 << CGEventType.keyUp.rawValue) - guard let eventTap = CGEvent.tapCreate(tap: .cgSessionEventTap, - place: .headInsertEventTap, - options: .defaultTap, - eventsOfInterest: CGEventMask(eventMask), - callback: handleGlobalEvents, - userInfo: nil) else { - Self.logger.debug("Failed to create event.") - return - } - - Self.logger.debug("Event was created.") - - let runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0) - CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, .commonModes) - CGEvent.tapEnable(tap: eventTap, enable: true) - CFRunLoopRun() - } -} diff --git a/src/Makefile b/src/Makefile index ba066da..f935ccc 100644 --- a/src/Makefile +++ b/src/Makefile @@ -8,10 +8,10 @@ XCODE_PATH = $(shell xcode-select --print-path) EXEC = Grapp SRCMODULES = Helpers.swift EditableNSTextField.swift EventMonitor.swift \ - GlobalEventTap.swift PopoverPanel.swift SearchViewController.swift \ + PopoverPanel.swift SearchViewController.swift \ SettingsViewController.swift HotKeyManager.swift \ KeyDetectorButton.swift PathManager.swift PathsTableCellView.swift \ - ProgramTableViewCell.swift ProgramsTableView.swift ShadowView.swift \ + ProgramsTable.swift ShadowView.swift \ AppDelegate.swift main.swift ARMOBJMODULES = $(addprefix ./arm64/,$(SRCMODULES:.swift=.o)) X86OBJMODULES = $(addprefix ./x86_64/,$(SRCMODULES:.swift=.o)) diff --git a/src/ProgramTableViewCell.swift b/src/ProgramsTable.swift similarity index 93% rename from src/ProgramTableViewCell.swift rename to src/ProgramsTable.swift index 511d971..26f6fff 100644 --- a/src/ProgramTableViewCell.swift +++ b/src/ProgramsTable.swift @@ -1,6 +1,10 @@ import AppKit -class ProgramTableRowView: NSTableRowView { +final class ProgramsTableView: NSTableView { + override var acceptsFirstResponder: Bool { false } +} + +class ProgramsTableRowView: NSTableRowView { override func drawSelection(in dirtyRect: NSRect) { if self.selectionHighlightStyle != .none { let selectionColor = NSColor.controlAccentColor @@ -11,7 +15,7 @@ class ProgramTableRowView: NSTableRowView { } } -class ProgramTableViewCell: NSTableCellView { +class ProgramsTableViewCell: NSTableCellView { var id: Int = -1 private(set) var isEditing = false diff --git a/src/ProgramsTableView.swift b/src/ProgramsTableView.swift deleted file mode 100644 index 0338ead..0000000 --- a/src/ProgramsTableView.swift +++ /dev/null @@ -1,5 +0,0 @@ -import AppKit - -final class ProgramsTableView: NSTableView { - override var acceptsFirstResponder: Bool { false } -} diff --git a/src/SearchViewController.swift b/src/SearchViewController.swift index 631997f..c2a0f27 100644 --- a/src/SearchViewController.swift +++ b/src/SearchViewController.swift @@ -395,13 +395,13 @@ class SearchViewController: NSViewController, NSTextFieldDelegate, func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? { - return ProgramTableRowView() + return ProgramsTableRowView() } func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? { - let cell = ProgramTableViewCell() + let cell = ProgramsTableViewCell() let program = programsList[row] // PERF: This is very slow, even with 10 items on the list! It has diff --git a/src/SettingsViewController.swift b/src/SettingsViewController.swift index eb3942c..a322bf1 100644 --- a/src/SettingsViewController.swift +++ b/src/SettingsViewController.swift @@ -3,8 +3,9 @@ import Carbon import ServiceManagement class SettingsViewController: NSViewController, NSTextFieldDelegate, - KeyDetectorButtonDelegate, NSTableViewDataSource, NSTableViewDelegate, - PathsTableCellViewDelegate + KeyDetectorButtonDelegate, + NSTableViewDataSource, NSTableViewDelegate, + PathsTableCellViewDelegate { private var recording = false @@ -546,7 +547,4 @@ class SettingsViewController: NSViewController, NSTextFieldDelegate, cell.id = row return cell } - - func tableViewSelectionDidChange(_ notification: Notification) { - } } diff --git a/src/ShadowView.swift b/src/ShadowView.swift index c990391..f29186d 100644 --- a/src/ShadowView.swift +++ b/src/ShadowView.swift @@ -12,7 +12,6 @@ class ShadowView: NSView { private func setupView() { wantsLayer = true - guard let layer = layer else { return } let shadow = NSShadow()