From f3709a41e3eed5411515d9cee6b7a83bb684c9f1 Mon Sep 17 00:00:00 2001 From: Didier Korthoudt Date: Tue, 1 Dec 2015 21:06:55 +0100 Subject: [PATCH] removeAllTrackingAreas --- AppKit/CPControl.j | 5 +---- AppKit/CPSplitView.j | 7 ++----- AppKit/CPTableHeaderView.j | 5 +---- AppKit/CPView.j | 37 +++++++++++++++++++++++++++++++------ 4 files changed, 35 insertions(+), 19 deletions(-) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index c113a0973..d4b7515b1 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -1060,10 +1060,7 @@ var CPControlBlackColor = [CPColor blackColor]; - (void)updateTrackingAreas { - var myTrackingAreas = [self trackingAreas]; - - for (var i = 0; i < myTrackingAreas.length; i++) - [self removeTrackingArea:myTrackingAreas[i]]; + [self removeAllTrackingAreas]; [self addTrackingArea:[[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect diff --git a/AppKit/CPSplitView.j b/AppKit/CPSplitView.j index 2b330b48e..0bd1043ed 100644 --- a/AppKit/CPSplitView.j +++ b/AppKit/CPSplitView.j @@ -1190,11 +1190,8 @@ The sum of the views and the sum of the dividers should be equal to the size of - (void)updateTrackingAreas { - var myTrackingAreas = [self trackingAreas]; - - for (var i = 0; i < myTrackingAreas.length; i++) - [self removeTrackingArea:myTrackingAreas[i]]; - + [self removeAllTrackingAreas]; + var options = CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow; for (var i = 0; i < _subviews.length - 1; i++) diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j index b745b5ff7..c70aba33c 100644 --- a/AppKit/CPTableHeaderView.j +++ b/AppKit/CPTableHeaderView.j @@ -465,10 +465,7 @@ var CPTableHeaderViewResizeZone = 3.0, - (void)updateTrackingAreas { - var myTrackingAreas = [self trackingAreas]; - - for (var i = 0; i < myTrackingAreas.length; i++) - [self removeTrackingArea:myTrackingAreas[i]]; + [self removeAllTrackingAreas]; var options = CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow; diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 97665ef71..36656fdf8 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -3459,12 +3459,8 @@ setBoundsOrigin: if (![_trackingAreas containsObject:trackingArea]) [CPException raise:CPInternalInconsistencyException reason:"Trying to remove unreferenced trackingArea"]; - - if (_window) - [_window _removeTrackingArea:trackingArea]; - - [trackingArea _setReferencingView:nil]; - [_trackingAreas removeObject:trackingArea]; + + [self _removeTrackingArea:trackingArea]; } // Invoked automatically when the view’s geometry changes such that its tracking areas need to be recalculated. @@ -3485,6 +3481,35 @@ setBoundsOrigin: // This enables you to use updateTrackingArea to initially attach your tracking areas to the view. } +- (void)removeAllTrackingAreas +{ + // This utility method is intended for CPView subclasses overwriting updateTrackingAreas + // + // Typical use would be : + // + // - (void)updateTrackingAreas + // { + // [self removeAllTrackingAreas]; + // + // ... add your specific updated tracking areas ... + // } + + while (_trackingAreas.length > 0) + [self _removeTrackingArea:_trackingAreas[0]]; +} + +// Internal methods + +- (void)_removeTrackingArea:(CPTrackingArea)trackingArea +{ + if (_window) + [_window _removeTrackingArea:trackingArea]; + + [trackingArea _setReferencingView:nil]; + + [_trackingAreas removeObject:trackingArea]; +} + - (void)_notifyUpdateTrackingAreas { _inhibitUpdateTrackingAreasNotifications = YES;