removing 10.4 code, adding webkit trick for showing dynamic tooltips
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70841 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -87,21 +87,16 @@ NSRect wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const
|
|||||||
|
|
||||||
@interface wxNSView : NSView
|
@interface wxNSView : NSView
|
||||||
{
|
{
|
||||||
NSTrackingRectTag rectTag;
|
BOOL _hasToolTip;
|
||||||
#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
|
NSTrackingRectTag _lastToolTipTrackTag;
|
||||||
|
id _lastToolTipOwner;
|
||||||
|
void* _lastUserData;
|
||||||
|
|
||||||
NSTrackingArea* _trackingArea;
|
NSTrackingArea* _trackingArea;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// the tracking tag is needed to track mouse enter / exit events
|
|
||||||
- (void) setTrackingTag: (NSTrackingRectTag)tag;
|
|
||||||
- (NSTrackingRectTag) trackingTag;
|
|
||||||
#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
|
|
||||||
// under 10.5 we can also track mouse moved events on non-focused windows if
|
|
||||||
// we use the new NSTrackingArea APIs.
|
|
||||||
- (void) updateTrackingArea;
|
- (void) updateTrackingArea;
|
||||||
- (NSTrackingArea*) trackingArea;
|
- (NSTrackingArea*) trackingArea;
|
||||||
#endif
|
|
||||||
@end // wxNSView
|
@end // wxNSView
|
||||||
|
|
||||||
@interface NSView(PossibleMethods)
|
@interface NSView(PossibleMethods)
|
||||||
@@ -137,27 +132,6 @@ NSRect wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const
|
|||||||
- (void)setImagePosition:(NSCellImagePosition)aPosition;
|
- (void)setImagePosition:(NSCellImagePosition)aPosition;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// in case we want to use the native tooltip callbacks
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
|
|
||||||
@interface NSView(wxToolTip)
|
|
||||||
- (NSString *)view:(NSView *)view stringForToolTip:(NSToolTipTag)tag point:(NSPoint)point userData:(void *)userData;
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation NSView(wxToolTip)
|
|
||||||
|
|
||||||
- (NSString *)view:(NSView *)view stringForToolTip:(NSToolTipTag)tag point:(NSPoint)point userData:(void *)userData {
|
|
||||||
wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( view );
|
|
||||||
if (impl == NULL)
|
|
||||||
return nil;
|
|
||||||
|
|
||||||
return @"Tag";
|
|
||||||
}
|
|
||||||
@end
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// The following code is a combination of the code listed here:
|
// The following code is a combination of the code listed here:
|
||||||
// http://lists.apple.com/archives/cocoa-dev/2008/Apr/msg01582.html
|
// http://lists.apple.com/archives/cocoa-dev/2008/Apr/msg01582.html
|
||||||
// (which can't be used because KLGetCurrentKeyboardLayout etc aren't 64-bit)
|
// (which can't be used because KLGetCurrentKeyboardLayout etc aren't 64-bit)
|
||||||
@@ -710,17 +684,6 @@ void wxWidgetCocoaImpl::SetupMouseEvent( wxMouseEvent &wxevent , NSEvent * nsEve
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setTrackingTag: (NSTrackingRectTag)tag
|
|
||||||
{
|
|
||||||
rectTag = tag;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSTrackingRectTag) trackingTag
|
|
||||||
{
|
|
||||||
return rectTag;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
|
|
||||||
- (void) updateTrackingArea
|
- (void) updateTrackingArea
|
||||||
{
|
{
|
||||||
if (_trackingArea)
|
if (_trackingArea)
|
||||||
@@ -741,7 +704,88 @@ void wxWidgetCocoaImpl::SetupMouseEvent( wxMouseEvent &wxevent , NSEvent * nsEve
|
|||||||
{
|
{
|
||||||
return _trackingArea;
|
return _trackingArea;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
/* idea taken from webkit sources: overwrite the methods that (private) NSToolTipManager will use to attach its tracking rectangle
|
||||||
|
* then when changing the tooltip send fake view-exit and view-enter methods which will lead to a tooltip refresh
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
- (void)_sendToolTipMouseExited
|
||||||
|
{
|
||||||
|
// Nothing matters except window, trackingNumber, and userData.
|
||||||
|
NSEvent *fakeEvent = [NSEvent enterExitEventWithType:NSMouseExited
|
||||||
|
location:NSMakePoint(0, 0)
|
||||||
|
modifierFlags:0
|
||||||
|
timestamp:0
|
||||||
|
windowNumber:[[self window] windowNumber]
|
||||||
|
context:NULL
|
||||||
|
eventNumber:0
|
||||||
|
trackingNumber:_lastToolTipTrackTag
|
||||||
|
userData:_lastUserData];
|
||||||
|
[_lastToolTipOwner mouseExited:fakeEvent];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_sendToolTipMouseEntered
|
||||||
|
{
|
||||||
|
// Nothing matters except window, trackingNumber, and userData.
|
||||||
|
NSEvent *fakeEvent = [NSEvent enterExitEventWithType:NSMouseEntered
|
||||||
|
location:NSMakePoint(0, 0)
|
||||||
|
modifierFlags:0
|
||||||
|
timestamp:0
|
||||||
|
windowNumber:[[self window] windowNumber]
|
||||||
|
context:NULL
|
||||||
|
eventNumber:0
|
||||||
|
trackingNumber:_lastToolTipTrackTag
|
||||||
|
userData:_lastUserData];
|
||||||
|
[_lastToolTipOwner mouseEntered:fakeEvent];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setToolTip:(NSString *)string;
|
||||||
|
{
|
||||||
|
if (string)
|
||||||
|
{
|
||||||
|
if ( _hasToolTip )
|
||||||
|
{
|
||||||
|
[self _sendToolTipMouseExited];
|
||||||
|
}
|
||||||
|
|
||||||
|
[super setToolTip:string];
|
||||||
|
_hasToolTip = YES;
|
||||||
|
[self _sendToolTipMouseEntered];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( _hasToolTip )
|
||||||
|
{
|
||||||
|
[self _sendToolTipMouseExited];
|
||||||
|
[super setToolTip:nil];
|
||||||
|
_hasToolTip = NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSTrackingRectTag)addTrackingRect:(NSRect)rect owner:(id)owner userData:(void *)data assumeInside:(BOOL)assumeInside
|
||||||
|
{
|
||||||
|
NSTrackingRectTag tag = [super addTrackingRect:rect owner:owner userData:data assumeInside:assumeInside];
|
||||||
|
if ( owner != self )
|
||||||
|
{
|
||||||
|
_lastUserData = data;
|
||||||
|
_lastToolTipOwner = owner;
|
||||||
|
_lastToolTipTrackTag = tag;
|
||||||
|
}
|
||||||
|
return tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)removeTrackingRect:(NSTrackingRectTag)tag
|
||||||
|
{
|
||||||
|
if (tag == _lastToolTipTrackTag)
|
||||||
|
{
|
||||||
|
_lastUserData = NULL;
|
||||||
|
_lastToolTipOwner = nil;
|
||||||
|
_lastToolTipTrackTag = 0;
|
||||||
|
}
|
||||||
|
[super removeTrackingRect:tag];
|
||||||
|
}
|
||||||
@end // wxNSView
|
@end // wxNSView
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1968,18 +2012,9 @@ void wxWidgetCocoaImpl::Move(int x, int y, int width, int height)
|
|||||||
[[m_osxView superview] setNeedsDisplayInRect:r];
|
[[m_osxView superview] setNeedsDisplayInRect:r];
|
||||||
|
|
||||||
wxNSView* wxview = (wxNSView*)m_osxView;
|
wxNSView* wxview = (wxNSView*)m_osxView;
|
||||||
#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
|
|
||||||
if ([wxview respondsToSelector:@selector(updateTrackingArea)] )
|
if ([wxview respondsToSelector:@selector(updateTrackingArea)] )
|
||||||
[wxview updateTrackingArea];
|
[wxview updateTrackingArea];
|
||||||
#else
|
|
||||||
if ([m_osxView respondsToSelector:@selector(trackingTag)] )
|
|
||||||
{
|
|
||||||
if ( [wxview trackingTag] )
|
|
||||||
[wxview removeTrackingRect: [wxview trackingTag]];
|
|
||||||
|
|
||||||
[wxview setTrackingTag: [wxview addTrackingRect: [m_osxView bounds] owner: wxview userData: nil assumeInside: NO]];
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxWidgetCocoaImpl::GetPosition( int &x, int &y ) const
|
void wxWidgetCocoaImpl::GetPosition( int &x, int &y ) const
|
||||||
@@ -2340,32 +2375,17 @@ void wxWidgetCocoaImpl::SetFont(wxFont const& font, wxColour const&col, long, bo
|
|||||||
alpha:(CGFloat) (col.Alpha() / 255.0)]];
|
alpha:(CGFloat) (col.Alpha() / 255.0)]];
|
||||||
}
|
}
|
||||||
|
|
||||||
NSToolTipTag tt = 0;
|
|
||||||
|
|
||||||
void wxWidgetCocoaImpl::SetToolTip(wxToolTip* tooltip)
|
void wxWidgetCocoaImpl::SetToolTip(wxToolTip* tooltip)
|
||||||
{
|
{
|
||||||
if (tooltip)
|
if ( tooltip )
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
if ( tt != 0 )
|
|
||||||
{
|
|
||||||
[m_osxView removeToolTip:tt];
|
|
||||||
tt = 0;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
wxCFStringRef cf( tooltip->GetTip() , m_wxPeer->GetFont().GetEncoding() );
|
wxCFStringRef cf( tooltip->GetTip() , m_wxPeer->GetFont().GetEncoding() );
|
||||||
[m_osxView setToolTip: cf.AsNSString()];
|
[m_osxView setToolTip: cf.AsNSString()];
|
||||||
// tt = [m_osxView addToolTipRect:[m_osxView bounds] owner:m_osxView userData:nil];
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( tt != 0 )
|
[m_osxView setToolTip:nil];
|
||||||
{
|
|
||||||
[m_osxView removeToolTip:tt];
|
|
||||||
tt = 0;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxWidgetCocoaImpl::InstallEventHandler( WXWidget control )
|
void wxWidgetCocoaImpl::InstallEventHandler( WXWidget control )
|
||||||
@@ -2448,8 +2468,11 @@ bool wxWidgetCocoaImpl::DoHandleMouseEvent(NSEvent *event)
|
|||||||
{
|
{
|
||||||
wxMouseEvent wxevent(wxEVT_LEFT_DOWN);
|
wxMouseEvent wxevent(wxEVT_LEFT_DOWN);
|
||||||
SetupMouseEvent(wxevent , event) ;
|
SetupMouseEvent(wxevent , event) ;
|
||||||
|
wxWindow* wxp = GetWXPeer();
|
||||||
return GetWXPeer()->HandleWindowEvent(wxevent);
|
#if wxUSE_TOOLTIPS
|
||||||
|
wxToolTip::RelayEvent( wxp , wxevent);
|
||||||
|
#endif
|
||||||
|
return wxp->HandleWindowEvent(wxevent);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxWidgetCocoaImpl::DoNotifyFocusEvent(bool receivedFocus, wxWidgetImpl* otherWindow)
|
void wxWidgetCocoaImpl::DoNotifyFocusEvent(bool receivedFocus, wxWidgetImpl* otherWindow)
|
||||||
|
Reference in New Issue
Block a user