diff --git a/CMakeLists.txt b/CMakeLists.txt index 4dca34f3..7c0eaaf2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -165,14 +165,17 @@ if (UNIX) string(REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION}) message(STATUS "DARWIN_VERSION=${DARWIN_VERSION}") if (DARWIN_VERSION LESS 9) - # 10.4: universal (32-bit intel and power pc) + # 10.4: Universal (32-bit Intel and PowerPC) set(CMAKE_OSX_ARCHITECTURES "ppc;i386" CACHE STRING "" FORCE) - else() - # 10.5+: 32-bit only -- missing funcs in 64-bit os libs - # such as GetGlobalMouse. + else (DARWIN_VERSION LESS 10) + # 10.5: 32-bit Intel only set(CMAKE_OSX_ARCHITECTURES "i386" CACHE STRING "" FORCE) + else() + # 10.6+: Intel only + set(CMAKE_OSX_ARCHITECTURES "i386;x86_64" + CACHE STRING "" FORCE) endif() set(CMAKE_CXX_FLAGS "--sysroot ${CMAKE_OSX_SYSROOT} ${CMAKE_CXX_FLAGS} -DGTEST_USE_OWN_TR1_TUPLE=1") diff --git a/ext/toolchain/commands1.py b/ext/toolchain/commands1.py index 1eee3a41..5374bcd2 100644 --- a/ext/toolchain/commands1.py +++ b/ext/toolchain/commands1.py @@ -554,7 +554,24 @@ class InternalCommands: return (major, minor, rev) def getMacSdkDir(self): - return "/Developer/SDKs/MacOSX" + self.macSdk + ".sdk" + sdkName = "macosx" + self.macSdk + + # Ideally we'll use xcrun (which is influenced by $DEVELOPER_DIR), then try a couple + # fallbacks to known paths if xcrun is not available + status, sdkPath = commands.getstatusoutput("xcrun --show-sdk-path --sdk " + sdkName) + if status == 0 and sdkPath: + return sdkPath + + developerDir = os.getenv("DEVELOPER_DIR") + if not developerDir: + developerDir = "/Applications/Xcode.app/Contents/Developer" + + sdkDirName = sdkName.replace("macosx", "MacOSX") + sdkPath = developerDir + "/Platforms/MacOSX.platform/Developer/SDKs/" + sdkDirName + ".sdk" + if os.path.exists(sdkPath): + return sdkPath + + return "/Developer/SDKs/" + sdkDirName + ".sdk" # http://tinyurl.com/cs2rxxb def fixCmakeEclipseBug(self): diff --git a/src/lib/common/basic_types.h b/src/lib/common/basic_types.h index 7f20cb5a..b2aa999d 100644 --- a/src/lib/common/basic_types.h +++ b/src/lib/common/basic_types.h @@ -72,6 +72,9 @@ // Added this because it doesn't compile on OS X 10.6 because they are already defined in Carbon #if !defined(__MACTYPES__) +#if defined(__APPLE__) +#include +#else typedef signed TYPE_OF_SIZE_1 SInt8; typedef signed TYPE_OF_SIZE_2 SInt16; typedef signed TYPE_OF_SIZE_4 SInt32; @@ -79,6 +82,7 @@ typedef unsigned TYPE_OF_SIZE_1 UInt8; typedef unsigned TYPE_OF_SIZE_2 UInt16; typedef unsigned TYPE_OF_SIZE_4 UInt32; #endif +#endif // // clean up // diff --git a/src/lib/platform/OSXScreen.cpp b/src/lib/platform/OSXScreen.cpp index 47e5af8e..fd2ceea9 100644 --- a/src/lib/platform/OSXScreen.cpp +++ b/src/lib/platform/OSXScreen.cpp @@ -296,13 +296,14 @@ COSXScreen::getShape(SInt32& x, SInt32& y, SInt32& w, SInt32& h) const void COSXScreen::getCursorPos(SInt32& x, SInt32& y) const { - Point mouse; - GetGlobalMouse(&mouse); - x = mouse.h; - y = mouse.v; + CGEventRef event = CGEventCreate(NULL); + CGPoint mouse = CGEventGetLocation(event); + x = mouse.x; + y = mouse.y; m_cursorPosValid = true; m_xCursor = x; m_yCursor = y; + CFRelease(event); } void @@ -700,15 +701,16 @@ COSXScreen::fakeMouseRelativeMove(SInt32 dx, SInt32 dy) const // we can do. // get current position - Point oldPos; - GetGlobalMouse(&oldPos); + CGEventRef event = CGEventCreate(NULL); + CGPoint oldPos = CGEventGetLocation(event); + CFRelease(event); // synthesize event CGPoint pos; - m_xCursor = static_cast(oldPos.h); - m_yCursor = static_cast(oldPos.v); - pos.x = oldPos.h + dx; - pos.y = oldPos.v + dy; + m_xCursor = static_cast(oldPos.x); + m_yCursor = static_cast(oldPos.y); + pos.x = oldPos.x + dx; + pos.y = oldPos.y + dy; postMouseEvent(pos); // we now assume we don't know the current cursor position @@ -1056,7 +1058,7 @@ COSXScreen::handleSystemEvent(const CEvent& event, void*) // get scroll amount r = GetEventParameter(*carbonEvent, kSynergyMouseScrollAxisX, - typeLongInteger, + typeSInt32, NULL, sizeof(xScroll), NULL, @@ -1066,7 +1068,7 @@ COSXScreen::handleSystemEvent(const CEvent& event, void*) } r = GetEventParameter(*carbonEvent, kSynergyMouseScrollAxisY, - typeLongInteger, + typeSInt32, NULL, sizeof(yScroll), NULL, @@ -1094,7 +1096,10 @@ COSXScreen::handleSystemEvent(const CEvent& event, void*) break; case kEventClassWindow: - SendEventToWindow(*carbonEvent, m_userInputWindow); + // 2nd param was formerly GetWindowEventTarget(m_userInputWindow) which is 32-bit only, + // however as m_userInputWindow is never initialized to anything we can take advantage of + // the fact that GetWindowEventTarget(NULL) == NULL + SendEventToEventTarget(*carbonEvent, NULL); switch (GetEventKind(*carbonEvent)) { case kEventWindowActivated: LOG((CLOG_DEBUG1 "window activated")); @@ -1518,15 +1523,16 @@ COSXScreen::getScrollSpeedFactor() const void COSXScreen::enableDragTimer(bool enable) { - UInt32 modifiers; - MouseTrackingResult res; - if (enable && m_dragTimer == NULL) { m_dragTimer = m_events->newTimer(0.01, NULL); m_events->adoptHandler(CEvent::kTimer, m_dragTimer, new TMethodEventJob(this, &COSXScreen::handleDrag)); - TrackMouseLocationWithOptions(NULL, 0, 0, &m_dragLastPoint, &modifiers, &res); + CGEventRef event = CGEventCreate(NULL); + CGPoint mouse = CGEventGetLocation(event); + m_dragLastPoint.h = (short)mouse.x; + m_dragLastPoint.v = (short)mouse.y; + CFRelease(event); } else if (!enable && m_dragTimer != NULL) { m_events->removeHandler(CEvent::kTimer, m_dragTimer); @@ -1538,15 +1544,14 @@ COSXScreen::enableDragTimer(bool enable) void COSXScreen::handleDrag(const CEvent&, void*) { - Point p; - UInt32 modifiers; - MouseTrackingResult res; + CGEventRef event = CGEventCreate(NULL); + CGPoint p = CGEventGetLocation(event); + CFRelease(event); - TrackMouseLocationWithOptions(NULL, 0, 0, &p, &modifiers, &res); - - if (res != kMouseTrackingTimedOut && (p.h != m_dragLastPoint.h || p.v != m_dragLastPoint.v)) { - m_dragLastPoint = p; - onMouseMove((SInt32)p.h, (SInt32)p.v); + if ((short)p.x != m_dragLastPoint.h || (short)p.y != m_dragLastPoint.v) { + m_dragLastPoint.h = (short)p.x; + m_dragLastPoint.v = (short)p.y; + onMouseMove((SInt32)p.x, (SInt32)p.y); } } diff --git a/src/lib/platform/OSXScreenSaver.cpp b/src/lib/platform/OSXScreenSaver.cpp index 8ae9dc5c..c393077f 100644 --- a/src/lib/platform/OSXScreenSaver.cpp +++ b/src/lib/platform/OSXScreenSaver.cpp @@ -142,7 +142,7 @@ COSXScreenSaver::launchTerminationCallback( OSStatus result; ProcessSerialNumber psn; EventParamType actualType; - UInt32 actualSize; + ByteCount actualSize; result = GetEventParameter(theEvent, kEventParamProcessID, typeProcessSerialNumber, &actualType, diff --git a/src/lib/synergy/DaemonApp.cpp b/src/lib/synergy/DaemonApp.cpp index e8e8007b..aa03ee32 100644 --- a/src/lib/synergy/DaemonApp.cpp +++ b/src/lib/synergy/DaemonApp.cpp @@ -302,9 +302,9 @@ CDaemonApp::handleIpcMessage(const CEvent& e, void*) LOG((CLOG_DEBUG "new command, elevate=%d command=%s", cm->elevate(), command.c_str())); CString debugArg("--debug"); - UInt32 debugArgPos = static_cast(command.find(debugArg)); + size_t debugArgPos = command.find(debugArg); if (debugArgPos != CString::npos) { - UInt32 from = debugArgPos + static_cast(debugArg.size()) + 1; + UInt32 from = static_cast(debugArgPos) + static_cast(debugArg.size()) + 1; UInt32 nextSpace = static_cast(command.find(" ", from)); CString logLevel(command.substr(from, nextSpace - from)); diff --git a/src/micro/uSynergy.c b/src/micro/uSynergy.c index 439b917a..a8d01da4 100644 --- a/src/micro/uSynergy.c +++ b/src/micro/uSynergy.c @@ -166,21 +166,6 @@ static void sSendMouseCallback(uSynergyContext *context) -/** -@brief Call mouse relative callback after a mouse event -**/ -static void sSendMouseRelativeCallback(uSynergyContext *context, int16_t x, int16_t y) -{ - // Skip if no callback is installed - if (context->m_mouseRelativeCallback == 0L) - return; - - // Send callback - context->m_mouseRelativeCallback(context->m_cookie, x, y); -} - - - /** @brief Send keyboard callback when a key has been pressed or released **/ @@ -334,13 +319,6 @@ static void sProcessMessage(uSynergyContext *context, const uint8_t *message) context->m_mouseY = sNetToNative16(message+10); sSendMouseCallback(context); } - else if (USYNERGY_IS_PACKET("DMRM")) - { - // Mouse relative. Reply with CNOP - // kMsgDMouseRelMove = "DMRM%2i%2i" - sSendMouseRelativeCallback(context, sNetToNative16(message+8), - sNetToNative16(message+10)); - } else if (USYNERGY_IS_PACKET("DMWM")) { // Mouse wheel @@ -459,6 +437,7 @@ static void sProcessMessage(uSynergyContext *context, const uint8_t *message) // kMsgCScreenSaver = "CSEC%1i" // kMsgDKeyRepeat = "DKRP%2i%2i%2i%2i" // kMsgDKeyRepeat1_0 = "DKRP%2i%2i%2i" + // kMsgDMouseRelMove = "DMRM%2i%2i" // kMsgEIncompatible = "EICV%2i%2i" // kMsgEBusy = "EBSY" // kMsgEUnknown = "EUNK" @@ -535,10 +514,6 @@ static void sUpdateContext(uSynergyContext *context) /* Eat packets */ for (;;) { - /* If less than 4 bytes left in buffer, we can't even get the next packet length yet */ - if (context->m_receiveOfs < 4) - return; - /* Grab packet length and bail out if the packet goes beyond the end of the buffer */ packlen = sNetToNative32(context->m_receiveBuffer); if (packlen+4 > context->m_receiveOfs) diff --git a/src/micro/uSynergy.h b/src/micro/uSynergy.h index 2de72bf6..ef1efaa6 100644 --- a/src/micro/uSynergy.h +++ b/src/micro/uSynergy.h @@ -255,19 +255,6 @@ typedef void (*uSynergyMouseCallback)(uSynergyCookie cookie, uint16_t x, uint16 -/** -@brief Mouse relative callback - -This callback is called when a mouse relative event happens. - -@param cookie Cookie supplied in the Synergy context -@param x Mouse X motion -@param y Mouse Y motion -**/ -typedef void (*uSynergyMouseRelativeCallback)(uSynergyCookie cookie, int16_t x, int16_t y); - - - /** @brief Key event callback @@ -345,7 +332,6 @@ typedef struct uSynergyTraceFunc m_traceFunc; /* Function for tracing status (can be NULL) */ uSynergyScreenActiveCallback m_screenActiveCallback; /* Callback for entering and leaving screen */ uSynergyMouseCallback m_mouseCallback; /* Callback for mouse events */ - uSynergyMouseRelativeCallback m_mouseRelativeCallback; /* Callback for mouse relative events */ uSynergyKeyboardCallback m_keyboardCallback; /* Callback for keyboard events */ uSynergyJoystickCallback m_joystickCallback; /* Callback for joystick events */ uSynergyClipboardCallback m_clipboardCallback; /* Callback for clipboard events */