Cocoa : activate multitouch trackpad features only on equipped macbooks

This commit is contained in:
Damien Plisson 2010-01-12 14:12:44 +00:00
parent 78798ba4df
commit 636b4a0663
2 changed files with 25 additions and 5 deletions

@ -277,6 +277,9 @@ protected:
* Needed because cocoa event delta cursor move takes setCursorPosition changes too. * Needed because cocoa event delta cursor move takes setCursorPosition changes too.
*/ */
GHOST_TInt32 m_cursorDelta_x, m_cursorDelta_y; GHOST_TInt32 m_cursorDelta_x, m_cursorDelta_y;
/** Multitouch trackpad availability */
bool m_hasMultiTouchTrackpad;
}; };
#endif // _GHOST_SYSTEM_COCOA_H_ #endif // _GHOST_SYSTEM_COCOA_H_

@ -509,6 +509,11 @@ int cocoa_request_qtcodec_settings(bContext *C, wmOperator *op)
GHOST_SystemCocoa::GHOST_SystemCocoa() GHOST_SystemCocoa::GHOST_SystemCocoa()
{ {
int mib[2];
struct timeval boottime;
size_t len;
char *rstring = NULL;
m_modifierMask =0; m_modifierMask =0;
m_pressedMouseButtons =0; m_pressedMouseButtons =0;
m_cursorDelta_x=0; m_cursorDelta_x=0;
@ -519,10 +524,6 @@ GHOST_SystemCocoa::GHOST_SystemCocoa()
m_displayManager->initialize(); m_displayManager->initialize();
//NSEvent timeStamp is given in system uptime, state start date is boot time //NSEvent timeStamp is given in system uptime, state start date is boot time
int mib[2];
struct timeval boottime;
size_t len;
mib[0] = CTL_KERN; mib[0] = CTL_KERN;
mib[1] = KERN_BOOTTIME; mib[1] = KERN_BOOTTIME;
len = sizeof(struct timeval); len = sizeof(struct timeval);
@ -530,6 +531,22 @@ GHOST_SystemCocoa::GHOST_SystemCocoa()
sysctl(mib, 2, &boottime, &len, NULL, 0); sysctl(mib, 2, &boottime, &len, NULL, 0);
m_start_time = ((boottime.tv_sec*1000)+(boottime.tv_usec/1000)); m_start_time = ((boottime.tv_sec*1000)+(boottime.tv_usec/1000));
//Detect multitouch trackpad
mib[0] = CTL_HW;
mib[1] = HW_MODEL;
sysctl( mib, 2, NULL, &len, NULL, 0 );
rstring = (char*)malloc( len );
sysctl( mib, 2, rstring, &len, NULL, 0 );
//Hack on MacBook revision, as multitouch avail. function missing
if (strstr(rstring,"MacBookAir") ||
(strstr(rstring,"MacBook") && (rstring[strlen(rstring)-3]>='5') && (rstring[strlen(rstring)-3]<='9')))
m_hasMultiTouchTrackpad = true;
else m_hasMultiTouchTrackpad = false;
free( rstring );
rstring = NULL;
m_ignoreWindowSizedMessages = false; m_ignoreWindowSizedMessages = false;
} }
@ -1336,7 +1353,7 @@ GHOST_TSuccess GHOST_SystemCocoa::handleMouseEvent(void *eventPtr)
case NSScrollWheel: case NSScrollWheel:
{ {
/* Send Wheel event if sent from the mouse, trackpad event otherwise */ /* Send Wheel event if sent from the mouse, trackpad event otherwise */
if ([event subtype] == NSMouseEventSubtype) { if (!m_hasMultiTouchTrackpad || ([event subtype] == NSMouseEventSubtype)) {
GHOST_TInt32 delta; GHOST_TInt32 delta;
double deltaF = [event deltaY]; double deltaF = [event deltaY];