Merge branch 'mac-input-detection'

This commit is contained in:
Xinyu Hou 2017-12-13 12:26:11 -05:00
commit a48ff8bcb5
1 changed files with 11 additions and 13 deletions

View File

@ -192,6 +192,7 @@ OSXScreen::OSXScreen(IEventQueue* events, bool isPrimary, bool autoShowHideCurso
this); this);
} }
else { else {
LOG((CLOG_DEBUG "creating quartz event tap"));
// there may be a better way to do this, but we register an event handler even if we're // there may be a better way to do this, but we register an event handler even if we're
// not on the primary display (acting as a client). This way, if a local event comes in // not on the primary display (acting as a client). This way, if a local event comes in
// (either keyboard or mouse), we can make sure to show the cursor if we've hidden it. // (either keyboard or mouse), we can make sure to show the cursor if we've hidden it.
@ -203,11 +204,13 @@ OSXScreen::OSXScreen(IEventQueue* events, bool isPrimary, bool autoShowHideCurso
if (!m_eventTapPort) { if (!m_eventTapPort) {
LOG((CLOG_ERR "failed to create quartz event tap")); LOG((CLOG_ERR "failed to create quartz event tap"));
m_events->addEvent(Event(Event::kQuit));
} }
m_eventTapRLSR = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, m_eventTapPort, 0); m_eventTapRLSR = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, m_eventTapPort, 0);
if (!m_eventTapRLSR) { if (!m_eventTapRLSR) {
LOG((CLOG_ERR "failed to create a CFRunLoopSourceRef for the quartz event tap")); LOG((CLOG_ERR "failed to create a CFRunLoopSourceRef for the quartz event tap"));
m_events->addEvent(Event(Event::kQuit));
} }
CFRunLoopAddSource(CFRunLoopGetCurrent(), m_eventTapRLSR, kCFRunLoopDefaultMode); CFRunLoopAddSource(CFRunLoopGetCurrent(), m_eventTapRLSR, kCFRunLoopDefaultMode);
@ -248,6 +251,13 @@ OSXScreen::~OSXScreen()
delete m_keyState; delete m_keyState;
delete m_screensaver; delete m_screensaver;
if (m_eventTapRLSR) {
LOG((CLOG_DEBUG "releasing quartz event tap"));
CFRunLoopRemoveSource(CFRunLoopGetCurrent(), m_eventTapRLSR, kCFRunLoopDefaultMode);
CFRelease(m_eventTapRLSR);
m_eventTapRLSR = nullptr;
}
if (m_eventTapPort) { if (m_eventTapPort) {
CGEventTapEnable(m_eventTapPort, false); CGEventTapEnable(m_eventTapPort, false);
CFRelease(m_eventTapPort); CFRelease(m_eventTapPort);
@ -752,19 +762,7 @@ OSXScreen::disable()
showCursor(); showCursor();
} }
// FIXME -- stop watching jump zones, stop capturing input // FIXME -- stop watching jump zones, stop capturing input
if (m_eventTapRLSR) {
CFRunLoopRemoveSource(CFRunLoopGetCurrent(), m_eventTapRLSR, kCFRunLoopDefaultMode);
CFRelease(m_eventTapRLSR);
m_eventTapRLSR = nullptr;
}
if (m_eventTapPort) {
CGEventTapEnable(m_eventTapPort, false);
CFRelease(m_eventTapPort);
m_eventTapPort = nullptr;
}
// FIXME -- allow system to enter power saving mode // FIXME -- allow system to enter power saving mode
// disable drag handling // disable drag handling