adium 3895:59f707927de3: Tooltips tracking, better way of tracki...

commits at adium.im commits at adium.im
Fri May 6 00:11:23 UTC 2011


details:	http://hg.adium.im/adium/rev/59f707927de3
revision:	3895:59f707927de3
branch:		(none)
author:		Adrian Godoroja <robotive at me.com>
date:		Fri May 06 03:03:40 2011 +0300

Tooltips tracking, better way of tracking mouse scrolling. Refs #3480

diffs (104 lines):

diff -r ccd2b155c06e -r 59f707927de3 Frameworks/AIUtilities Framework/Source/AISmoothTooltipTracker.h
--- a/Frameworks/AIUtilities Framework/Source/AISmoothTooltipTracker.h	Fri May 06 01:58:10 2011 +0300
+++ b/Frameworks/AIUtilities Framework/Source/AISmoothTooltipTracker.h	Fri May 06 03:03:40 2011 +0300
@@ -59,9 +59,8 @@
 	NSPoint				tooltipLocation;				//Last tooltip location we told our delegate about
     NSTrackingRectTag	tooltipTrackingTag;				//Tag for our tracking rect
     int 				tooltipCount;					//Used to determine how long before a tooltip appears
-	
-	id					scrollEventMonitor;				// Used to update a tooltip when mouse is scrolling
-	BOOL				mouseIsScrolling;				//
+
+	BOOL				mouseIsScrolling;				// Used to update a tooltip when mouse is scrolling
 }
 
 /*!
diff -r ccd2b155c06e -r 59f707927de3 Frameworks/AIUtilities Framework/Source/AISmoothTooltipTracker.m
--- a/Frameworks/AIUtilities Framework/Source/AISmoothTooltipTracker.m	Fri May 06 01:58:10 2011 +0300
+++ b/Frameworks/AIUtilities Framework/Source/AISmoothTooltipTracker.m	Fri May 06 03:03:40 2011 +0300
@@ -37,6 +37,8 @@
 - (void)_stopTrackingMouse;
 - (void)_hideTooltip;
 - (void)mouseMovementTimer:(NSTimer *)inTimer;
+
+- (void)contentViewBoundsDidChange;
 @end
 
 @interface NSWindow (SpacesDeterminationHackery)
@@ -57,6 +59,7 @@
 		delegate = inDelegate;
 		tooltipTrackingTag = -1;
 		tooltipLocation = NSZeroPoint;
+		mouseIsScrolling = NO;
 
 		//Reset cursor tracking when the view's frame changes
 		[[NSNotificationCenter defaultCenter] addObserver:self
@@ -68,6 +71,14 @@
 													 name:AIWindowToolbarDidToggleVisibility
 												   object:[view window]];
 
+		// Track contentView bounds changes (useful to detect scrolling)
+		if ([view isKindOfClass:[NSScrollView class]]) {
+			[[NSNotificationCenter defaultCenter] addObserver:self
+													 selector:@selector(contentViewBoundsDidChange)
+														 name:NSViewBoundsDidChangeNotification
+													   object:[(NSScrollView *)view contentView]];
+		}
+		
 		[self installCursorRect];
 	}
 	
@@ -211,6 +222,12 @@
 	[self _stopTrackingMouse];
 }
 
+// Handle Scrolling
+- (void)contentViewBoundsDidChange
+{
+	mouseIsScrolling = YES;
+}
+
 //Start tracking mouse movement
 - (void)_startTrackingMouse
 {
@@ -222,18 +239,6 @@
 																	userInfo:nil
 																	 repeats:YES] retain];
 	}
-	
-	if (!scrollEventMonitor) {
-		scrollEventMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:NSScrollWheelMask handler:^(NSEvent *anEvent) {
-			if ([anEvent window] == [view window]) {
-				mouseIsScrolling = true;	
-			} else {
-				mouseIsScrolling = false;
-			}
-
-			return anEvent;
-		}];
-	}
 }
 
 //Stop tracking mouse movement
@@ -251,10 +256,6 @@
 		[theTimer invalidate];
 		[theTimer release]; theTimer = nil;
 	}
-	
-	if (scrollEventMonitor) {
-		[NSEvent removeMonitor:scrollEventMonitor], scrollEventMonitor = nil;
-	}
 }
 
 - (void)_hideTooltip
@@ -300,8 +301,8 @@
 				[delegate showTooltipAtPoint:mouseLocation];
 				tooltipLocation = mouseLocation;
 				
-				// Reset scrolling data
-				mouseIsScrolling = false;
+				// Reset scrolling info
+				mouseIsScrolling = NO;
 			}
 			
 		} else {




More information about the commits mailing list