--- org/NSScroller.m	2003-01-23 09:51:09.000000000 -0200
+++ Source/NSScroller.m	2003-01-23 10:23:25.000000000 -0200
@@ -451,34 +451,36 @@
   /*
    * return what part of the scroller the mouse hit
    */
+  // thePoint is in window's coordinate system
   NSRect rect;
+  NSPoint location = [self convertPoint: thePoint fromView: nil];
 
-  if (thePoint.x <= 0 || thePoint.x >= _frame.size.width
-    || thePoint.y <= 0 || thePoint.y >= _frame.size.height)
+  if (location.x <= 0 || location.x >= _frame.size.width
+    || location.y <= 0 || location.y >= _frame.size.height)
     return NSScrollerNoPart;
 
   rect = [self rectForPart: NSScrollerDecrementLine];
-  if ([self mouse: thePoint inRect: rect])
+  if ([self mouse: location inRect: rect])
     return NSScrollerDecrementLine;
 
   rect = [self rectForPart: NSScrollerIncrementLine];
-  if ([self mouse: thePoint inRect: rect])
+  if ([self mouse: location inRect: rect])
     return NSScrollerIncrementLine;
 
   rect = [self rectForPart: NSScrollerKnob];
-  if ([self mouse: thePoint inRect: rect])
+  if ([self mouse: location inRect: rect])
     return NSScrollerKnob;
 
   rect = [self rectForPart: NSScrollerDecrementPage];
-  if ([self mouse: thePoint inRect: rect])
+  if ([self mouse: location inRect: rect])
     return NSScrollerDecrementPage;
 
   rect = [self rectForPart: NSScrollerIncrementPage];
-  if ([self mouse: thePoint inRect: rect])
+  if ([self mouse: location inRect: rect])
     return NSScrollerIncrementPage;
 
   rect = [self rectForPart: NSScrollerKnobSlot];
-  if ([self mouse: thePoint inRect: rect])
+  if ([self mouse: location inRect: rect])
     return NSScrollerKnobSlot;
 
   return NSScrollerNoPart;
@@ -522,10 +524,11 @@
 
 - (void) mouseDown: (NSEvent*)theEvent
 {
-  NSPoint location = [self convertPoint: [theEvent locationInWindow]
+  NSPoint locationInWindow = [theEvent locationInWindow];
+  NSPoint location = [self convertPoint: locationInWindow
 			       fromView: nil];
 
-  _hitPart = [self testPart: location];
+  _hitPart = [self testPart: locationInWindow];
   [self _setTargetAndActionToCells];
 
   switch (_hitPart)
@@ -644,8 +647,12 @@
               point = NSMakePoint(newPosition, newPosition);
 	      floatValue = [self _floatValueForMousePoint: point];
 
-	      [self setFloatValue: floatValue];
-	      [self sendAction: _action to: _target];
+              // Avoid sending action if value has not changed
+              if (floatValue != _floatValue)
+	        {
+	          [self setFloatValue: floatValue];
+	          [self sendAction: _action to: _target];
+		}
 
 	      lastPosition = newPosition;
             }
@@ -664,7 +671,6 @@
   NSApplication	*theApp = [NSApplication sharedApplication];
   unsigned int	eventMask = NSLeftMouseDownMask | NSLeftMouseUpMask |
 			  NSLeftMouseDraggedMask | NSMouseMovedMask;
-  NSPoint	location;
   BOOL		shouldReturn = NO;
   id		theCell = nil;
   NSRect	rect;
@@ -672,12 +678,11 @@
   NSDebugLog (@"trackScrollButtons");
   do
     {
-      location = [self convertPoint: [theEvent locationInWindow]fromView: nil];
-      _hitPart = [self testPart: location];
+      _hitPart = [self testPart: [theEvent locationInWindow]];
       rect = [self rectForPart: _hitPart];
 
       /*
-       * A hit on a scroller button should be a page meovement
+       * A hit on a scroller button should be a page movement
        * if the alt key is pressed.
        */
       switch (_hitPart)
@@ -791,6 +796,7 @@
 	break;
     }
 
+  [theCell setHighlighted: flag];
   [theCell drawWithFrame: rect inView: self];
 }
 
