Added support of blinking thumb as found in Windows scrollbar.

diff --git a/controls/scroll.c b/controls/scroll.c
index e1f9740..c11825e 100644
--- a/controls/scroll.c
+++ b/controls/scroll.c
@@ -816,6 +816,18 @@
         (SCROLL_TrackingBar == nBar))
         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);
 }
@@ -907,14 +919,15 @@
     switch(msg)
     {
       case WM_LBUTTONDOWN:  /* Initialise mouse tracking */
-	  SCROLL_trackVertical = vertical;
+          HideCaret(hwnd);  /* hide caret 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 (nBar == SB_CTL && (GetWindowLongA(hwnd, GWL_STYLE) & WS_TABSTOP)) SetFocus( hwnd );
           break;
 
       case WM_MOUSEMOVE:
@@ -925,6 +938,8 @@
       case WM_LBUTTONUP:
           hittest = SCROLL_NOWHERE;
           ReleaseCapture();
+          /* if scrollbar has focus, show back caret */
+          if (hwnd==GetFocus()) ShowCaret(hwnd);
           break;
 
       case WM_SYSTIMER:
@@ -1142,10 +1157,60 @@
         }
         break;
 
+    /* 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;
 
+    case WM_KEYUP:
+        ShowCaret(hwnd);
+        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:
+        {
+            RECT rect;
+            int arrowSize, thumbSize, thumbPos, vertical;
+            vertical = SCROLL_GetScrollBarRect( hwnd, SB_CTL, &rect,&arrowSize, &thumbSize, &thumbPos );
+            if (!vertical){
+                rect.left=thumbPos+1;
+                rect.right=rect.left+thumbSize;
+            }
+            else
+            {
+                rect.top=thumbPos+1;
+                rect.bottom=rect.top+thumbSize;
+            }
+            HideCaret(hwnd);
+            InvalidateRect(hwnd,&rect,0);
+            DestroyCaret();
+        }
+        break;
+
     case WM_ERASEBKGND:
          return 1;