Consume any handled keyDown events
- ID
a25e625- date
2023-06-11 19:49:55+00:00- author
Alex Chan <alex@alexwlchan.net>- parent
1a15e4b- message
Consume any handled keyDown events- changed files
1 file, 25 additions, 7 deletions
Changed files
BlinkReviewer/Blink/Views/PhotoReviewer.swift (14313) → BlinkReviewer/Blink/Views/PhotoReviewer.swift (15003)
diff --git a/BlinkReviewer/Blink/Views/PhotoReviewer.swift b/BlinkReviewer/Blink/Views/PhotoReviewer.swift
index f0b3fd7..4af0801 100644
--- a/BlinkReviewer/Blink/Views/PhotoReviewer.swift
+++ b/BlinkReviewer/Blink/Views/PhotoReviewer.swift
@@ -83,10 +83,10 @@ struct PhotoReviewer: View {
}
.background(.black)
.onAppear {
- NSEvent.addLocalMonitorForEvents(matching: .keyDown) { event in
- handleKeyDown(event)
- return event
- }
+ NSEvent.addLocalMonitorForEvents(
+ matching: .keyDown,
+ handler: handleKeyDown
+ )
}
// These two lines update the big image that fills most of the window.
// See the comments on FocusedImage for more explanation of why this is
@@ -217,7 +217,14 @@ struct PhotoReviewer: View {
self.focusedAssetIndex += (delta ?? 0)
}
- private func handleKeyDown(_ event: NSEvent) {
+ /// Handle any keypresses in the app.
+ ///
+ /// Note: this function should return `nil` for any events that it
+ /// processes; any events it returns will be passed to other event handlers
+ /// to see if anything else knows what to do with them. Among other
+ /// issues, this results in an annoying "funk" sound playing on
+ /// every event, because the OS thinks the event is unhandled.
+ private func handleKeyDown(_ event: NSEvent) -> NSEvent? {
let logger = Logger()
switch event {
@@ -226,12 +233,14 @@ struct PhotoReviewer: View {
if focusedAssetIndex < photosLibrary.assets.count - 1 {
focusedAssetIndex += 1
}
+ return nil
case let e where e.specialKey == NSEvent.SpecialKey.rightArrow:
print("to the right!")
if focusedAssetIndex > 0 {
focusedAssetIndex -= 1
}
+ return nil
case let e where e.characters == "1" || e.characters == "2" || e.characters == "3":
print("time to review!")
@@ -277,6 +286,7 @@ struct PhotoReviewer: View {
if focusedAssetIndex < photosLibrary.assets.count - 1 {
focusedAssetIndex += 1
}
+ return nil
case let e where e.characters == "c":
let crossStitch = getAlbum(withName: "Cross stitch")
@@ -285,19 +295,26 @@ struct PhotoReviewer: View {
focusedAsset.toggle(inAlbum: crossStitch)
}
+ return nil
+
case let e where e.characters == "f":
try! PHPhotoLibrary.shared().performChangesAndWait {
PHAssetChangeRequest(for: focusedAsset).isFavorite = !focusedAsset.isFavorite
}
+
+ return nil
case let e where e.characters == "d":
showDebug.toggle()
+ return nil
case let e where e.characters == "s":
showStatistics.toggle()
+ return nil
case let e where e.characters == "i":
showInfo.toggle()
+ return nil
case let e where e.characters == "u":
if photosLibrary.state(of: focusedAsset) != nil {
@@ -307,6 +324,7 @@ struct PhotoReviewer: View {
focusedAssetIndex = lastUnreviewed
}
}
+ return nil
case let e where e.characters == "?":
while true {
@@ -317,11 +335,11 @@ struct PhotoReviewer: View {
break
}
}
-
+ return nil
default:
logger.info("Received unhandled keyboard event: \(event, privacy: .public)")
- break
+ return event
}
}
}