Compare commits

..
2 Commits
Author SHA1 Message Date
TZGyn 8332661504 Guard against event-tap teardown crashes; log result-window display
A tap-disabled callback force-unwrapped the tap port, which could crash
the app mid-capture (no result window, dead hotkey). Guard it and log
re-enables. Result window display is now logged with the image size.

💘 Generated with Crush

Assisted-by: Crush:deepseek-v4-flash-0731
2026-09-09 12:29:53 +08:00
TZGyn 832a18b06c Exclude the cursor from captures
💘 Generated with Crush

Assisted-by: Crush:deepseek-v4-flash-0731
2026-09-09 12:26:12 +08:00
2 changed files with 10 additions and 8 deletions
+8 -6
View File
@@ -265,11 +265,12 @@ final class CaptureController: NSObject {
guard isSelecting else { return event }
switch type {
case .tapDisabledByUserInput:
CGEvent.tapEnable(tap: eventTap!, enable: true)
return event
case .tapDisabledByTimeout:
CGEvent.tapEnable(tap: eventTap!, enable: true)
case .tapDisabledByUserInput, .tapDisabledByTimeout:
// A timed-out tap must be re-enabled; guard against a torn-down tap.
if let tap = eventTap {
CGEvent.tapEnable(tap: tap, enable: true)
CaptureController.log("tap: re-enabled after \(type)")
}
return event
case .keyDown:
if event.getIntegerValueField(.keyboardEventKeycode) == 53 {
@@ -342,6 +343,7 @@ final class CaptureController: NSObject {
ResultWindow.shared.show(image: ResultWindow.failureImage("Capture failed. Check Screen Recording permission."))
return
}
CaptureController.log("capture done: \(image.width)x\(image.height) — showing result window")
ResultWindow.shared.show(image: image)
}
}
@@ -440,7 +442,7 @@ final class ScreenCapture {
let backingScale = screen.backingScaleFactor
config.width = Int(CGFloat(display.width) * backingScale)
config.height = Int(CGFloat(display.height) * backingScale)
config.showsCursor = true
config.showsCursor = false
// ScreenCaptureKit uses a different origin than AppKit for
// screens stacked around the main display: per-display,
+2 -2
View File
@@ -108,9 +108,9 @@ cat > "$APP/Contents/Info.plist" <<'PLIST'
<key>CFBundleIconFile</key>
<string>Icon</string>
<key>CFBundleShortVersionString</key>
<string>1.7.1</string>
<string>1.7.3</string>
<key>CFBundleVersion</key>
<string>71</string>
<string>73</string>
<key>LSUIElement</key>
<true/>
<key>NSHighResolutionCapable</key>