removeAllTrackingAreas

This commit is contained in:
Didier Korthoudt
2015-12-01 21:06:55 +01:00
parent 2bfebfee3c
commit f3709a41e3
4 changed files with 35 additions and 19 deletions
+1 -4
View File
@@ -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
+2 -5
View File
@@ -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++)
+1 -4
View File
@@ -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;
+31 -6
View File
@@ -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 views 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;