Buggy code:
if ( ( startX <= x ) && ( x < ( startX + width ) ) ) { toolTipText = column . toolTipText ; rect . left = ( ( short ) ( startX ) ) ; rect . right = ( ( short ) ( ( rect . left ) + width ) ) ; rect . bottom = ( ( short ) ( ( rect . top ) + headerHeight ) ) ; tagSide = OS . kHMOutsideBottomRightAligned ; break ; } startX += width ; } } else { int columnIndex = 0 ; TableItem item = null ; TableColumn column = null ; int rc = OS . noErr ; for ( int i = getTopIndex ( ) ; ( ( i < ( itemCount ) ) && ( item == null ) ) && ( rc == ( OS . noErr ) ) ; i ++ ) { if ( ( columnCount ) == 0 ) { if ( ( rc = OS . GetDataBrowserItemPartBounds ( handle , ( i + 1 ) , column_id , kDataBrowserPropertyContentPart , rect ) ) == ( OS . noErr ) ) { if ( OS . PtInRect ( pt , rect ) ) { item = _getItem ( i ) ; break ; } } } else { for ( int j = 0 ; j < ( columnCount ) ; j ++ ) { column = columns [ j ] ; if ( ( rc = OS . GetDataBrowserItemPartBounds ( handle , ( i + 1 ) , column . id , kDataBrowserPropertyContentPart , rect ) ) == ( OS . noErr ) ) { if ( OS . PtInRect ( pt , rect ) ) { item = _getItem ( i ) ; columnIndex = j ; break ; } } } } } if ( item != null ) { GC gc = new GC ( this ) ; int inset = getInsetWidth ( ) ; int width = ( item . calculateWidth ( columnIndex , gc ) ) + inset ; gc . dispose ( ) ; short [ ] w = new short [ 1 ] ; OS . GetDataBrowserTableViewNamedColumnWidth ( handle , ( column == null ? column_id : column . id ) , w ) ; if ( width > ( w [ 0 ] ) ) { toolTipText = item . getText ( columnIndex ) ; Image image = item . getImage ( columnIndex ) ; int imageWidth = ( image != null ) ? ( image . getBounds ( ) . width ) + ( getGap ( ) ) : 0 ; int style = ( column == null ) ? SWT . LEFT : column . style ; if ( ( style & ( SWT . LEFT ) ) != 0 ) { rect . left += imageWidth ; rect . right = ( ( short ) ( ( ( ( rect . left ) + width ) - imageWidth ) - inset ) ) ; } if ( ( style & ( SWT . RIGHT ) ) != 0 ) { rect . left = ( ( short ) ( ( ( ( rect . right ) - width ) + imageWidth ) + inset ) ) ; } if ( ( style & ( SWT . CENTER ) ) != 0 ) { rect . left += imageWidth ; } } } } if ( ( toolTipText != null ) && ( ( toolTipText . length ( ) ) != 0 ) ) { char [ ] buffer = new char [ toolTipText . length ( ) ] ; toolTipText . getChars ( 0 , buffer . length , buffer , 0 ) ; int length = fixMnemonic ( buffer ) ; if ( ( display . helpString ) != 0 ) OS . CFRelease ( helpString ) ; display . helpString = OS . CFStringCreateWithCharacters ( kCFAllocatorDefault , buffer , length ) ; HMHelpContentRec helpContent = new HMHelpContentRec ( ) ; OS . memcpy ( helpContent , ioHelpContent , sizeof ) ; <START_BUG> display . helpControl = this ; <END_BUG> helpContent . version = OS . kMacHelpVersion ; helpContent . tagSide = ( ( short ) ( tagSide ) ) ; helpContent . absHotRect_left = ( ( short ) ( ( rect . left ) + windowLeft ) ) ; helpContent . absHotRect_top = ( ( short ) ( ( rect . top ) + windowTop ) ) ; helpContent . absHotRect_right = ( ( short ) ( ( rect . right ) + windowLeft ) ) ; helpContent . absHotRect_bottom = ( ( short ) ( ( rect . bottom ) + windowTop ) ) ; helpContent . content0_contentType = OS . kHMCFStringContent ; helpContent . content0_tagCFString = display . helpString ; helpContent . content1_contentType = OS . kHMCFStringContent ; helpContent . content1_tagCFString = display . helpString ; OS . memcpy ( ioHelpContent , helpContent , sizeof ) ; OS . memcpy ( outContentProvided , new int [ ] { OS . kHMContentProvided } , 4 ) ; return OS . noErr ; } } break ; } } return super . helpProc ( inControl , inGlobalMouse , inRequest , outContentProvided , ioHelpContent ) ; } int hitTestProc ( int browser , int id , int property , int theRect , int mouseRect ) { } void hookEvents ( ) { } public int indexOf ( TableColumn column ) { } public int indexOf ( TableItem item ) { } public boolean isSelected ( int index ) { } int itemCompareProc ( int browser , int itemOne , int itemTwo , int sortProperty ) { } int itemDataProc ( int browser , int id , int property , int itemData , int setValue ) { } int itemNotificationProc ( int browser , int id , int message ) { }

Fix:
display . helpWidget = this ;