fix: improve reliability after sleep/wake

This commit is contained in:
lwouis
2026-03-24 18:32:55 +01:00
parent 6bd5f26e1c
commit 1ab419dd09
6 changed files with 48 additions and 0 deletions
+4
View File
@@ -93,6 +93,7 @@
AA974BA929B7D84C0099A29E /* PreviewPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA974BA829B7D84C0099A29E /* PreviewPanel.swift */; };
BF0C803A13C409E7F01FBCAB /* SkyLight.framework.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF0C8B94D7994AB9007F6391 /* SkyLight.framework.swift */; };
BF0C80484AA63306D0DB4DB2 /* SpacesEvents.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF0C8DF008F1EB5F23291A13 /* SpacesEvents.swift */; };
BF0C8A1B5C3D7E9F01234567 /* SleepWakeEvents.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF0C8B2C6D4E8FA012345678 /* SleepWakeEvents.swift */; };
BF0C8052AE41B1B10E42BFCE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = BF0C875C983226CB16DBD90F /* InfoPlist.strings */; };
BF0C8053A58DFB383A3E3351 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = BF0C8E237569FA2A8FE20707 /* InfoPlist.strings */; };
BF0C807D26E465F467B066F7 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = BF0C849EBA5A547912BD8BB9 /* Localizable.strings */; };
@@ -440,6 +441,7 @@
BF0C82009DCCA86287730F13 /* th */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = th; path = InfoPlist.strings; sourceTree = "<group>"; };
BF0C821029C1CBAC09232B0B /* nn */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = nn; path = InfoPlist.strings; sourceTree = "<group>"; };
BF0C822D3BEDAB1F1C9F775E /* ScreensEvents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScreensEvents.swift; sourceTree = "<group>"; };
BF0C8B2C6D4E8FA012345678 /* SleepWakeEvents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SleepWakeEvents.swift; sourceTree = "<group>"; };
BF0C82817AEE4AF34D03CA9D /* TilesPanelBackgroundView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TilesPanelBackgroundView.swift; sourceTree = "<group>"; };
BF0C828A0A852ACD660BC593 /* poeditor.ts */ = {isa = PBXFileReference; lastKnownFileType = file.ts; path = poeditor.ts; sourceTree = "<group>"; };
BF0C828AF7BCC4F47E70B28F /* menubar-1.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; path = "menubar-1.svg"; sourceTree = "<group>"; };
@@ -2029,6 +2031,7 @@
BF0C870C14C20C936BA4AF40 /* DockEvents.swift */,
BF0C8DF008F1EB5F23291A13 /* SpacesEvents.swift */,
BF0C822D3BEDAB1F1C9F775E /* ScreensEvents.swift */,
BF0C8B2C6D4E8FA012345678 /* SleepWakeEvents.swift */,
BF0C869E544F968051715452 /* SystemAppearanceEvents.swift */,
BF0C8B5D1A9658E64F8ECB56 /* SystemScrollerStyleEvents.swift */,
BF0C8643F524515224BF1618 /* KeyboardEventsTestable.swift */,
@@ -2623,6 +2626,7 @@
BF0C8A3F32B2177AF407DC7E /* DockEvents.swift in Sources */,
BF0C80484AA63306D0DB4DB2 /* SpacesEvents.swift in Sources */,
BF0C8203D0EFEDEED0F908E8 /* ScreensEvents.swift in Sources */,
BF0C8A1B5C3D7E9F01234567 /* SleepWakeEvents.swift in Sources */,
BF0C896B5D08B7DA8F2024AC /* KeyRepeatTimer.swift in Sources */,
BF0C8249228867A3188E13F3 /* SystemAppearanceEvents.swift in Sources */,
BF0C827A169F0DE86C8F12AD /* SystemScrollerStyleEvents.swift in Sources */,
+6
View File
@@ -24,6 +24,12 @@ class CursorEvents {
}
}
static func reEnableTapIfNeeded() {
guard let eventTap, shouldBeEnabled, !CGEvent.tapIsEnabled(tap: eventTap) else { return }
CGEvent.tapEnable(tap: eventTap, enable: true)
Logger.warning { "" }
}
private static func observe_() {
let eventMask = [CGEventType.leftMouseDown, CGEventType.leftMouseUp, CGEventType.rightMouseDown, CGEventType.rightMouseUp, CGEventType.otherMouseDown, CGEventType.otherMouseUp, CGEventType.mouseMoved].reduce(CGEventMask(0), { $0 | (1 << $1.rawValue) })
// CGEvent.tapCreate returns nil if ensureAccessibilityCheckboxIsChecked() didn't pass
+6
View File
@@ -51,6 +51,12 @@ class KeyboardEvents {
}
}
static func reEnableTapIfNeeded() {
guard let eventTap, !CGEvent.tapIsEnabled(tap: eventTap) else { return }
CGEvent.tapEnable(tap: eventTap, enable: true)
Logger.warning { "" }
}
static func addEventHandlers() {
addLocalMonitorForKeyDownAndKeyUp()
addCgEventTapForModifierFlags()
+6
View File
@@ -17,6 +17,12 @@ class ScrollwheelEvents {
}
}
static func reEnableTapIfNeeded() {
guard let eventTap, shouldBeEnabled, !CGEvent.tapIsEnabled(tap: eventTap) else { return }
CGEvent.tapEnable(tap: eventTap, enable: true)
Logger.warning { "" }
}
private static func observe_() {
// CGEvent.tapCreate returns null if ensureAccessibilityCheckboxIsChecked() didn't pass
eventTap = CGEvent.tapCreate(
+20
View File
@@ -0,0 +1,20 @@
import Cocoa
class SleepWakeEvents {
static func observe() {
NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(handleWake), name: NSWorkspace.didWakeNotification, object: nil)
}
@objc private static func handleWake(_ notification: Notification) {
Logger.info { "" }
reEnableAllTaps()
DispatchQueue.main.asyncAfter(deadline: .now() + 3) { reEnableAllTaps() }
}
private static func reEnableAllTaps() {
TrackpadEvents.reEnableTapIfNeeded()
ScrollwheelEvents.reEnableTapIfNeeded()
KeyboardEvents.reEnableTapIfNeeded()
CursorEvents.reEnableTapIfNeeded()
}
}
+6
View File
@@ -20,6 +20,12 @@ class TrackpadEvents {
}
}
static func reEnableTapIfNeeded() {
guard let eventTap, shouldBeEnabled, !CGEvent.tapIsEnabled(tap: eventTap) else { return }
Logger.warning { "" }
CGEvent.tapEnable(tap: eventTap, enable: true)
}
static func reset() {
ScrollwheelEvents.toggle(false)
NavigationSwipeDetector.reset()