Index: controls/scroll.c
===================================================================
RCS file: /home/wine/wine/controls/scroll.c,v
retrieving revision 1.23
diff -u -r1.23 scroll.c
--- controls/scroll.c	2000/03/28 20:22:59	1.23
+++ controls/scroll.c	2000/07/25 13:52:26
@@ -814,7 +814,19 @@
     if (Save_SCROLL_MovingThumb &&
         (SCROLL_TrackingWin == hwnd) &&
         (SCROLL_TrackingBar == nBar))
-        SCROLL_DrawMovingThumb( hdc, &rect, vertical, arrowSize, thumbSize );
+        SCROLL_DrawMovingThumb( hdc, &rect, vertical, arrowSize, thumbSize );
+
+	if(hwnd==GetFocus())	/* if scroll bar has focus, reposition the caret*/
+	{			
+		if (!vertical)
+		{
+			SetCaretPos(thumbPos+1, rect.top+1);
+		}
+		else
+		{			
+			SetCaretPos(rect.top+1, thumbPos+1);
+		}		
+	}
 
 END:
     WIN_ReleaseWndPtr(wndPtr);
@@ -906,15 +918,18 @@
 
     switch(msg)
     {
-      case WM_LBUTTONDOWN:  /* Initialise mouse tracking */
-	  SCROLL_trackVertical = vertical;
+      case WM_LBUTTONDOWN:  /* Initialise mouse tracking */
+	  	  HideCaret(hwnd);	/* hide carat while holding down LBUTTON*/
+		  SCROLL_trackVertical = vertical;
           SCROLL_trackHitTest  = hittest = SCROLL_HitTest( hwnd, nBar, pt, FALSE );
           lastClickPos  = vertical ? (pt.y - rect.top) : (pt.x - rect.left);
           lastMousePos  = lastClickPos;
           trackThumbPos = thumbPos;
           prevPt = pt;
           SetCapture( hwnd );
-          if (nBar == SB_CTL) SetFocus( hwnd );
+          if (GetWindowLongA(hwnd, GWL_STYLE)&WS_TABSTOP){			
+			if (nBar == SB_CTL) SetFocus( hwnd );			
+		  }
           break;
 
       case WM_MOUSEMOVE:
@@ -924,7 +939,10 @@
 
       case WM_LBUTTONUP:
           hittest = SCROLL_NOWHERE;
-          ReleaseCapture();
+          ReleaseCapture();
+		  if(hwnd==GetFocus()){ /*if scrollbar has focus*/			
+			ShowCaret(hwnd);    /* show back caret*/
+		  }
           break;
 
       case WM_SYSTIMER:
@@ -1141,9 +1159,42 @@
         }
         break;
 
-    case WM_KEYDOWN:
+    /* if key event is received, the scrollbar has the focus*/
+    case WM_KEYDOWN:
+		HideCaret(hwnd);		/*hide caret to prevent flicker*/
         SCROLL_HandleKbdEvent( hwnd, wParam );
-        break;
+        break;
+
+	case WM_KEYUP:
+		ShowCaret(hwnd);	   /*show caret */
+        break;
+		
+	case WM_SETFOCUS:
+		{
+		    /* Create a caret when a ScrollBar get focus*/
+			RECT rect;
+			int arrowSize, thumbSize, thumbPos, vertical;									
+			if(hwnd==GetFocus()){
+				vertical = SCROLL_GetScrollBarRect( hwnd, SB_CTL, &rect,
+                                        &arrowSize, &thumbSize, &thumbPos );
+				if (!vertical)
+				{
+					CreateCaret(hwnd,1, thumbSize-2, rect.bottom-rect.top-2);
+					SetCaretPos(thumbPos+1, rect.top+1);
+				}
+				else
+				{
+					CreateCaret(hwnd,1, rect.right-rect.left-2,thumbSize-2);
+					SetCaretPos(rect.top+1, thumbPos+1);
+				}			
+				ShowCaret(hwnd);
+			}
+		}
+		break;
+	case WM_KILLFOCUS:
+		HideCaret(hwnd);
+		DestroyCaret();
+		break;
 
     case WM_ERASEBKGND:
          return 1;
