From a04e3bb80fe893b98f7bd4d66d4bb44ad50b5b13 Mon Sep 17 00:00:00 2001 From: Neil Hodgson Date: Tue, 15 Jul 2014 11:06:00 +1000 Subject: Switch from tracking rectangle to tracking area. This is the more recent Cocoa API and allows detection of mouse movement when the view does not have the focus which is needed for dwell events. --- cocoa/ScintillaView.h | 2 +- cocoa/ScintillaView.mm | 32 ++++++++++++++++++++++---------- 2 files changed, 23 insertions(+), 11 deletions(-) (limited to 'cocoa') diff --git a/cocoa/ScintillaView.h b/cocoa/ScintillaView.h index 419c2f28f..102bf3b60 100644 --- a/cocoa/ScintillaView.h +++ b/cocoa/ScintillaView.h @@ -75,7 +75,7 @@ extern NSString *const SCIUpdateUINotification; @private ScintillaView* mOwner; NSCursor* mCurrentCursor; - NSTrackingRectTag mCurrentTrackingRect; + NSTrackingArea *trackingArea; // Set when we are in composition mode and partial input is displayed. NSRange mMarkedTextRange; diff --git a/cocoa/ScintillaView.mm b/cocoa/ScintillaView.mm index 2ca7ed6bc..020fddeae 100644 --- a/cocoa/ScintillaView.mm +++ b/cocoa/ScintillaView.mm @@ -165,7 +165,7 @@ static NSCursor *cursorFromEnum(Window::Cursor cursor) { // Some initialization for our view. mCurrentCursor = [[NSCursor arrowCursor] retain]; - mCurrentTrackingRect = 0; + trackingArea = nil; mMarkedTextRange = NSMakeRange(NSNotFound, 0); [self registerForDraggedTypes: [NSArray arrayWithObjects: @@ -178,19 +178,31 @@ static NSCursor *cursorFromEnum(Window::Cursor cursor) //-------------------------------------------------------------------------------------------------- /** - * When the view is resized we need to update our tracking rectangle and let the backend know. + * When the view is resized or scrolled we need to update our tracking area. + */ +- (void) updateTrackingAreas +{ + if (trackingArea) + [self removeTrackingArea:trackingArea]; + + int opts = (NSTrackingActiveAlways | NSTrackingInVisibleRect | NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved); + trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] + options:opts + owner:self + userInfo:nil]; + [self addTrackingArea: trackingArea]; + [super updateTrackingAreas]; +} + +//-------------------------------------------------------------------------------------------------- + +/** + * When the view is resized we need to let the backend know. */ - (void) setFrame: (NSRect) frame { [super setFrame: frame]; - - // Make the content also a tracking rectangle for mouse events. - if (mCurrentTrackingRect != 0) - [self removeTrackingRect: mCurrentTrackingRect]; - mCurrentTrackingRect = [self addTrackingRect: [self bounds] - owner: self - userData: nil - assumeInside: YES]; + mOwner.backend->Resize(); } -- cgit v1.2.3