fix(mac): ensure background clicks work correctly on macOS 27
This commit is contained in:
parent
48ee839357
commit
d38c69c05d
2 changed files with 19 additions and 0 deletions
|
|
@ -236,6 +236,9 @@ private:
|
|||
mutable int32_t m_xCursor, m_yCursor;
|
||||
mutable bool m_cursorPosValid;
|
||||
|
||||
// mouse event number (needed for macOS 27)
|
||||
uint32_t m_mouseEventNumber = 0;
|
||||
|
||||
/* FIXME: this data structure is explicitly marked mutable due
|
||||
to a need to track the state of buttons since the remote
|
||||
side only lets us know of change events, and because the
|
||||
|
|
|
|||
|
|
@ -547,6 +547,22 @@ void OSXScreen::fakeMouseButton(ButtonID id, bool press)
|
|||
|
||||
CGEventRef event = CGEventCreateMouseEvent(nullptr, type, pos, static_cast<CGMouseButton>(index));
|
||||
|
||||
if (NSProcessInfo.processInfo.operatingSystemVersion.majorVersion >= 27) {
|
||||
// Apps that use Carbon APIs on macOS 27 requires an incrementing event number for each synthetic click
|
||||
if (press) {
|
||||
if (m_mouseEventNumber == 0) {
|
||||
// For some unknown reason, the first click event number must be unique and greater (but in the same ballpark)
|
||||
// than the last event number used by the system.
|
||||
m_mouseEventNumber =
|
||||
CGEventSourceCounterForEventType(kCGEventSourceStateHIDSystemState, kCGEventLeftMouseDown) +
|
||||
CGEventSourceCounterForEventType(kCGEventSourceStateHIDSystemState, kCGEventRightMouseDown) +
|
||||
CGEventSourceCounterForEventType(kCGEventSourceStateHIDSystemState, kCGEventOtherMouseDown);
|
||||
}
|
||||
++m_mouseEventNumber;
|
||||
}
|
||||
CGEventSetIntegerValueField(event, kCGMouseEventNumber, m_mouseEventNumber);
|
||||
}
|
||||
|
||||
CGEventSetIntegerValueField(event, kCGMouseEventClickState, m_clickState);
|
||||
|
||||
// Fix for sticky keys
|
||||
|
|
|
|||
Loading…
Reference in a new issue