15#include <Carbon/Carbon.h>
16#include <IOKit/IOMessage.h>
17#include <IOKit/pwr_mgt/IOPMLib.h>
18#include <mach/mach_init.h>
19#include <mach/mach_interface.h>
20#include <mach/mach_port.h>
35template <
class T>
class CondVar;
60 void getShape(int32_t &x, int32_t &y, int32_t &width, int32_t &height)
const override;
61 void getCursorPos(int32_t &x, int32_t &y)
const override;
66 void warpCursor(int32_t x, int32_t y)
override;
84 void enter()
override;
86 void leave()
override;
107 bool updateComputerShape();
108 bool updateComputerShape(
const CGDirectDisplayID,
const CGDisplayChangeSummaryFlags);
109 void postMouseEvent(CGPoint &)
const;
116 bool onMouseMove(CGEventRef event);
120 bool onMouseButton(
bool pressed, uint16_t macButton);
121 bool onMouseWheel(int32_t xDelta, int32_t yDelta)
const;
123 void constructMouseButtonEventMap();
125 bool onKey(CGEventRef event);
127 void onMediaKey(CGEventRef event);
129 bool onHotKey(EventRef event)
const;
136 ButtonID mapDeskflowButtonToMac(uint16_t)
const;
139 ButtonID mapMacButtonToDeskflow(uint16_t)
const;
142 int32_t mapScrollWheelToDeskflow(int32_t)
const;
145 double getScrollSpeed()
const;
148 static void displayReconfigurationCallback(CGDirectDisplayID, CGDisplayChangeSummaryFlags,
void *);
151 static pascal OSStatus userSwitchCallback(EventHandlerCallRef nextHandler, EventRef theEvent,
void *inUserData);
154 void watchSystemPowerThread(
const void *);
155 static void testCanceled(CFRunLoopTimerRef timer,
void *info);
156 static void powerChangeCallback(
void *refcon, io_service_t service, natural_t messageType,
void *messageArgument);
157 void handlePowerChangeRequest(natural_t messageType,
void *messageArgument);
159 void handleConfirmSleep(
const Event &event);
161 bool checkAXPermissions();
164 static bool isGlobalHotKeyOperatingModeAvailable();
165 static void setGlobalHotKeysEnabled(
bool enabled);
166 static bool getGlobalHotKeysEnabled();
169 static CGEventRef handleCGInputEvent(CGEventTapProxy proxy, CGEventType
type, CGEventRef event,
void *refcon);
171 handleCGInputEventSecondary(CGEventTapProxy proxy, CGEventType
type, CGEventRef event,
void *refcon);
174 static char *CFStringRefToUTF8String(CFStringRef aString);
180 HotKeyItem(uint32_t, uint32_t);
181 HotKeyItem(EventHotKeyRef, uint32_t, uint32_t);
183 EventHotKeyRef getRef()
const;
185 bool operator<(
const HotKeyItem &)
const;
188 EventHotKeyRef m_ref;
193 enum EMouseButtonState
201 class MouseButtonState
204 void set(uint32_t button, EMouseButtonState state);
207 void overwrite(uint32_t buttons);
209 bool test(uint32_t button)
const;
210 int8_t getFirstButtonDown()
const;
213 std::bitset<NumButtonIDs> m_buttons;
216 using HotKeyMap = std::map<uint32_t, HotKeyItem>;
217 using HotKeyIDList = std::vector<uint32_t>;
218 using ModifierHotKeyMap = std::map<KeyModifierMask, uint32_t>;
219 using HotKeyToIDMap = std::map<HotKeyItem, uint32_t>;
228 CGDirectDisplayID m_displayID;
230 uint32_t m_activeSides = 0;
234 int32_t m_xCenter, m_yCenter;
237 mutable int32_t m_xCursor, m_yCursor;
238 mutable bool m_cursorPosValid;
241 uint32_t m_mouseEventNumber = 0;
249 mutable MouseButtonState m_buttonState;
250 using MouseButtonEventMapType = std::map<uint16_t, CGEventType>;
251 std::vector<MouseButtonEventMapType> MouseButtonEventMap;
256 OSXKeyState *m_keyState;
259 OSXClipboard m_pasteboard;
260 uint32_t m_sequenceNumber;
263 OSXScreenSaver *m_screensaver;
264 bool m_screensaverNotify;
268 EventQueueTimer *m_clipboardTimer;
270 EventQueueTimer *m_axTimer;
274 WindowRef m_hiddenWindow;
277 WindowRef m_userInputWindow;
280 EventHandlerRef m_switchEventHandlerRef;
284 Thread *m_pmWatchThread;
285 CondVar<bool> *m_pmThreadReady;
286 CFRunLoopRef m_pmRunloop;
287 io_connect_t m_pmRootPort;
288 IOPMAssertionID m_userActivityAssertionID = kIOPMNullAssertionID;
292 HotKeyIDList m_oldHotKeyIDs;
293 ModifierHotKeyMap m_modifierHotKeys;
294 uint32_t m_activeModifierHotKey;
296 HotKeyToIDMap m_hotKeyToIDMap;
299 static bool s_testedForGHOM;
300 static bool s_hasGHOM;
303 CFMachPortRef m_eventTapPort;
304 CFRunLoopSourceRef m_eventTapRLSR;
305 std::thread m_eventTapThread;
306 CFRunLoopRef m_eventTapRunLoop =
nullptr;
309 double m_lastClickTime;
311 int32_t m_lastSingleClickXCursor;
312 int32_t m_lastSingleClickYCursor;
314 IEventQueue *m_events;
316 std::unique_ptr<Thread> m_getDropTargetThread;
317 std::string m_dropTarget;
319 Mutex *m_carbonLoopMutex;
320 CondVar<bool> *m_carbonLoopReady;
322 OSXPowerManager m_powerManager;
324 class OSXComputerImpl *m_impl;
static int type
Definition ArchNetworkWinsock.cpp:46
uint8_t ClipboardID
Clipboard ID.
Definition ClipboardTypes.h:16
Coordinate ScrollDelta
Definition Coordinate.h:21
uint32_t KeyID
Key ID.
Definition KeyTypes.h:22
uint32_t KeyModifierMask
Modifier key mask.
Definition KeyTypes.h:45
uint8_t ButtonID
Mouse button ID.
Definition MouseTypes.h:16
CGError CGSSetConnectionProperty(CGSConnectionID cid, CGSConnectionID targetCID, CFStringRef key, CFTypeRef value)
int CGSConnectionID
Definition OSXComputer.h:30
int _CGSDefaultConnection()
std::vector< uint32_t > OptionsList
Definition OptionTypes.h:27
Condition variable.
Definition CondVar.h:121
Definition EventQueueTimer.h:12
Event.
Definition Event.h:43
Clipboard interface.
Definition IClipboard.h:19
Event queue interface.
Definition IEventQueue.h:29
Key state interface.
Definition IKeyState.h:23
Mutual exclusion.
Definition Mutex.h:22
void fakeMouseMove(int32_t x, int32_t y) override
Fake mouse move.
Definition OSXComputer.mm:587
void screensaver(bool activate) override
Activate/deactivate screen saver.
Definition OSXComputer.mm:870
int32_t getJumpZoneSize() const override
Get jump zone size.
Definition OSXComputer.mm:301
bool isAnyMouseButtonDown(uint32_t &buttonID) const override
Test if mouse is pressed.
Definition OSXComputer.mm:306
void disable() override
Disable computer.
Definition OSXComputer.mm:749
void setSequenceNumber(uint32_t) override
Set clipboard sequence number.
Definition OSXComputer.mm:889
IEventQueue * getEvents() const
Definition OSXComputer.h:52
void enter() override
Enter computer.
Definition OSXComputer.mm:790
void checkClipboards() override
Check clipboard owner.
Definition OSXComputer.mm:845
bool isPrimary() const override
Test if is primary computer.
Definition OSXComputer.mm:894
IKeyState * getKeyState() const override
Get the key state.
Definition OSXComputer.mm:1301
void unregisterHotKey(uint32_t id) override
Unregister a system hotkey.
Definition OSXComputer.mm:375
void updateButtons() override
Update mouse buttons.
Definition OSXComputer.mm:1294
void setOptions(const OptionsList &options) override
Notify of options changes.
Definition OSXComputer.mm:884
uint32_t registerHotKey(KeyID key, KeyModifierMask mask) override
Register a system hotkey.
Definition OSXComputer.mm:322
OSXComputer(IEventQueue *events, bool isPrimary, bool enableLangSync=false)
Definition OSXComputer.mm:86
void fakeInputBegin() override
Prepare to synthesize input on primary computer.
Definition OSXComputer.mm:291
uint32_t activeSides() override
activeSides
Definition OSXComputer.mm:264
void handleSystemEvent(const Event &e) override
Handle system event.
Definition OSXComputer.mm:912
bool setClipboard(ClipboardID, const IClipboard *) override
Set clipboard.
Definition OSXComputer.mm:836
void fakeInputEnd() override
Done synthesizing input on primary computer.
Definition OSXComputer.mm:296
void leave() override
Leave computer.
Definition OSXComputer.mm:819
void openScreensaver(bool notify) override
Open screen saver.
Definition OSXComputer.mm:855
void enable() override
Enable computer.
Definition OSXComputer.mm:690
void fakeMouseRelativeMove(int32_t dx, int32_t dy) const override
Fake mouse move.
Definition OSXComputer.mm:601
void closeScreensaver() override
Close screen saver.
Definition OSXComputer.mm:863
void reconfigure(uint32_t activeSides) override
Update configuration.
Definition OSXComputer.mm:257
void getCursorPos(int32_t &x, int32_t &y) const override
Get cursor position.
Definition OSXComputer.mm:245
bool getClipboard(ClipboardID id, IClipboard *) const override
Get clipboard.
Definition OSXComputer.mm:231
void resetOptions() override
Notify of options changes.
Definition OSXComputer.mm:879
bool canLeave() override
Leave computer.
Definition OSXComputer.mm:814
void getCursorCenter(int32_t &x, int32_t &y) const override
Get cursor center position.
Definition OSXComputer.mm:316
void waitForCarbonLoop() const
Definition OSXComputer.mm:1801
void getShape(int32_t &x, int32_t &y, int32_t &width, int32_t &height) const override
Get computer shape.
Definition OSXComputer.mm:237
void warpCursor(int32_t x, int32_t y) override
Warp cursor.
Definition OSXComputer.mm:269
void fakeMouseWheel(ScrollDelta delta) const override
Synthesize a mouse wheel event of amount This Implmentation for this method should call applyScrollMo...
Definition OSXComputer.mm:625
void fakeMouseButton(ButtonID id, bool press) override
Fake mouse press/release.
Definition OSXComputer.mm:504
void * getEventTarget() const override
Get event target.
Definition OSXComputer.mm:226
std::string getSecureInputApp() const override
Determine the name of the app causing a secure input state.
Definition OSXComputer.mm:1823
OS X key state.
Definition OSXKeyState.h:25
OSX screen saver implementation.
Definition OSXScreenSaver.h:18
Thread handle.
Definition Thread.h:33
EventTypes
Definition EventTypes.h:13