Ignore:
Timestamp:
Jan 9, 2000, 3:14:25 PM (26 years ago)
Author:
cbratschi
Message:

scrollbar support and many other things

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/new/scroll.cpp

    r2290 r2381  
    1 /* $Id: scroll.cpp,v 1.7 2000-01-01 14:57:22 cbratschi Exp $ */
     1/* $Id: scroll.cpp,v 1.8 2000-01-09 14:14:23 cbratschi Exp $ */
    22/*
    33 * Scrollbar control
     
    7373static BOOL SCROLL_MovingThumb = FALSE;
    7474
    75 // Get the scrollbar handle: works only with frame/control handles
    76 
    77 static HWND SCROLL_GetScrollHandle(HWND hwnd,INT nBar)
    78 {
    79   switch(nBar)
    80   {
    81     case SB_HORZ:
    82     case SB_VERT:
    83       {
    84         Win32BaseWindow *win32wnd = Win32BaseWindow::GetWindowFromHandle(hwnd);
    85 
    86         if (!win32wnd) return 0;
    87 //CB: I removed WS_* check due to problems, but it should work
    88         if (nBar == SB_HORZ)
    89           return /*(win32wnd->getStyle() & WS_HSCROLL) ?*/ Win32BaseWindow::OS2ToWin32Handle(win32wnd->getHorzScrollHandle())/*:0*/;
    90         else
    91           return /*(win32wnd->getStyle() & WS_VSCROLL) ?*/ Win32BaseWindow::OS2ToWin32Handle(win32wnd->getVertScrollHandle())/*:0*/;
    92       }
    93 
    94     case SB_CTL:
    95       return hwnd;
    96 
    97     default:
    98       return 0;
    99   }
    100 }
    101 
    102 static HWND SCROLL_GetFrameHandle(HWND hwnd)
    103 {
    104   Win32BaseWindow *win32wnd = Win32BaseWindow::GetWindowFromHandle(hwnd);
    105 
    106   if (!win32wnd) return 0;
    107   return Win32BaseWindow::GetWindowFromOS2FrameHandle(OSLibWinQueryWindow(win32wnd->getOS2WindowHandle(),QWOS_OWNER))->getWindowHandle();
    108 }
    109 
    11075// Get the infoPtr: works only with scrollbar handles
    11176
     
    12085        case SB_VERT:
    12186          win32wnd = Win32BaseWindow::GetWindowFromHandle(hwnd);
    122           if (!win32wnd) return NULL;
    123           hwndFrame = OSLibWinQueryWindow(win32wnd->getOS2WindowHandle(),QWOS_OWNER);
    124           win32wnd = Win32BaseWindow::GetWindowFromOS2FrameHandle(hwndFrame);
    12587          if (!win32wnd) return NULL;
    12688          return win32wnd->getScrollInfo(nBar);
     
    157119    {
    158120      case SB_HORZ:
     121      {
     122        Win32BaseWindow *win32wnd = Win32BaseWindow::GetWindowFromHandle(hwnd);
     123        RECT rectClient;
     124
     125        if (!win32wnd) return FALSE;
     126        rectClient = *win32wnd->getClientRectPtr();
     127        mapWin32Rect(win32wnd->getParent() ? win32wnd->getParent()->getOS2WindowHandle():OSLIB_HWND_DESKTOP,win32wnd->getOS2FrameWindowHandle(),&rectClient);
     128        lprect->left   = rectClient.left;
     129        lprect->top    = rectClient.bottom;
     130        lprect->right  = rectClient.right;
     131        lprect->bottom = lprect->top+GetSystemMetrics(SM_CYHSCROLL);
     132        if (win32wnd->getStyle() & WS_BORDER)
     133        {
     134          lprect->left--;
     135          lprect->right++;
     136        } else if (win32wnd->getStyle() & WS_VSCROLL)
     137            lprect->right++;
     138        vertical = FALSE;
     139        break;
     140      }
     141
    159142      case SB_VERT:
     143      {
     144        Win32BaseWindow *win32wnd = Win32BaseWindow::GetWindowFromHandle(hwnd);
     145        RECT rectClient;
     146
     147        if (!win32wnd) return FALSE;
     148        rectClient = *win32wnd->getClientRectPtr();
     149        mapWin32Rect(win32wnd->getParent() ? win32wnd->getParent()->getOS2WindowHandle():OSLIB_HWND_DESKTOP,win32wnd->getOS2FrameWindowHandle(),&rectClient);
     150        lprect->left   = rectClient.right;
     151        lprect->top    = rectClient.top;
     152        lprect->right  = lprect->left+GetSystemMetrics(SM_CXVSCROLL);
     153        lprect->bottom = rectClient.bottom;
     154        if(win32wnd->getStyle() & WS_BORDER)
     155        {
     156          lprect->top--;
     157          lprect->bottom++;
     158        } else if (win32wnd->getStyle() & WS_HSCROLL)
     159          lprect->bottom++;
     160        vertical = TRUE;
     161        break;
     162      }
     163
     164      case SB_CTL:
     165      {
     166        DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE);
     167
    160168        GetClientRect( hwnd, lprect );
    161         vertical = (nBar == SB_VERT);
     169        vertical = ((dwStyle & SBS_VERT) != 0);
    162170        break;
    163 
    164       case SB_CTL:
    165         {
    166           DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE);
    167 
    168           GetClientRect( hwnd, lprect );
    169           vertical = ((dwStyle & SBS_VERT) != 0);
    170           break;
    171         }
     171      }
    172172
    173173    default:
     
    566566 * Redraw the whole scrollbar.
    567567 */
    568 void SCROLL_DrawScrollBar( HWND hwnd, HDC hdc, INT nBar,
    569                            BOOL arrows, BOOL interior )
     568void SCROLL_DrawScrollBar(HWND hwnd,HDC hdc,INT nBar,BOOL arrows,BOOL interior)
    570569{
    571570    INT arrowSize, thumbSize, thumbPos;
     
    584583        HBRUSH hBrush;
    585584
    586         hdc = GetDC(hwnd);
     585        hdc = GetDCEx(hwnd,0,DCX_CACHE | ((nBar == SB_CTL) ? 0 : DCX_WINDOW));
    587586        hBrush = GetSysColorBrush(COLOR_3DFACE);
    588587        GetClientRect(hwnd,&rect);
     
    635634                                     BOOL arrows, BOOL interior )
    636635{
    637   Win32BaseWindow *window;
    638   HDC hdc;
    639 
    640 
    641     hdc = GetDC(hwnd);
    642 
    643     if (!hdc) return;
    644 
    645     SCROLL_DrawScrollBar( hwnd, hdc, nBar, arrows, interior );
    646     ReleaseDC( hwnd, hdc );
     636  HDC hdc = GetDCEx(hwnd,0,DCX_CACHE | ((nBar == SB_CTL) ? 0:DCX_WINDOW));
     637
     638  if (!hdc) return;
     639
     640  SCROLL_DrawScrollBar( hwnd, hdc, nBar, arrows, interior );
     641  ReleaseDC( hwnd, hdc );
    647642}
    648643
     
    763758
    764759    vertical = SCROLL_GetScrollBarRect(hwnd,nBar,&rect,&arrowSize,&thumbSize,&thumbPos);
    765     if (nBar == SB_CTL) hwndOwner = GetParent(hwnd); else
    766     {
    767       Win32BaseWindow *win32wnd;
    768       HWND hwndFrame;
    769 
    770       win32wnd = Win32BaseWindow::GetWindowFromHandle(hwnd);
    771       if (!win32wnd) return res;
    772       hwndFrame = OSLibWinQueryWindow(win32wnd->getOS2WindowHandle(),QWOS_OWNER);
    773       win32wnd = Win32BaseWindow::GetWindowFromOS2FrameHandle(hwndFrame);
    774       if (!win32wnd) return res;
    775       hwndOwner = win32wnd->getWindowHandle();
    776     }
     760    hwndOwner = (nBar == SB_CTL) ? GetParent(hwnd):hwnd;
    777761
    778762    hwndCtl = (nBar == SB_CTL) ? hwnd:0;
     
    795779        if ((SCROLL_FocusWin == hwnd) && SCROLL_Highlighted)
    796780        {
    797           hdc = GetDC(hwnd);
     781          hdc = GetDCEx(hwnd,0,DCX_CACHE | ((nBar == SB_CTL) ? 0:DCX_WINDOW));
    798782          SCROLL_DrawScrollBar(hwnd,hdc,nBar,FALSE,TRUE);
    799783          ReleaseDC(hwnd,hdc);
     
    854838          {
    855839            SCROLL_Highlighted = FALSE;
    856             hdc = GetDC(hwnd);
     840            hdc = GetDCEx(hwnd,0,DCX_CACHE | ((nBar == SB_CTL) ? 0:DCX_WINDOW));
    857841            SCROLL_DrawScrollBar(hwnd,hdc,nBar,FALSE,TRUE);
    858842            ReleaseDC(hwnd,hdc);
     
    873857          if (!SCROLL_Scrolling)
    874858          {
    875             hdc = GetDC(hwnd);
     859            hdc = GetDCEx(hwnd,0,DCX_CACHE | ((nBar == SB_CTL) ? 0 : DCX_WINDOW));
    876860            SCROLL_DrawScrollBar(hwnd,hdc,nBar,FALSE,TRUE);
    877861            ReleaseDC(hwnd,hdc);
     
    884868    }
    885869
    886     hdc = GetDC(hwnd);
     870    hdc = GetDCEx(hwnd,0,DCX_CACHE | ((nBar == SB_CTL) ? 0 : DCX_WINDOW));
    887871
    888872    switch(SCROLL_trackHitTest)
     
    11031087  INT oldPos = infoPtr->CurVal;
    11041088
    1105   SetScrollRange((nBar == SB_CTL) ? hwnd:SCROLL_GetFrameHandle(hwnd),nBar,wParam,lParam,redraw);
     1089  SetScrollRange(hwnd,nBar,wParam,lParam,redraw);
    11061090  return (oldPos != infoPtr->CurVal) ? infoPtr->CurVal:0;
    11071091}
     
    11891173}
    11901174
    1191 /* frame handlers */
    1192 
    1193 VOID SCROLL_SubclassScrollBars(HWND hwndHorz,HWND hwndVert)
    1194 {
    1195   if (hwndHorz) SetWindowLongA(hwndHorz,GWL_WNDPROC,(ULONG)HorzScrollBarWndProc);
    1196   if (hwndVert) SetWindowLongA(hwndVert,GWL_WNDPROC,(ULONG)VertScrollBarWndProc);
    1197 }
    1198 
    1199 LRESULT WINAPI HorzScrollBarWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam )
    1200 {
    1201   switch (message)
    1202   {
    1203     case WM_LBUTTONDOWN:
    1204     case WM_LBUTTONUP:
    1205     case WM_NCHITTEST:
    1206     case WM_CAPTURECHANGED:
    1207     case WM_MOUSEMOVE:
    1208     case WM_SYSTIMER:
    1209     case WM_SETFOCUS:
    1210     case WM_KILLFOCUS:
    1211       return SCROLL_HandleScrollEvent(hwnd,wParam,lParam,SB_HORZ,message);
    1212 
    1213     case WM_ERASEBKGND:
    1214       return 1;
    1215 
    1216     case WM_GETDLGCODE:
    1217       return DLGC_WANTARROWS; /* Windows returns this value */
    1218 
    1219     case WM_PAINT:
    1220       return SCROLL_Paint(hwnd,wParam,lParam,SB_HORZ);
    1221 
    1222     case SBM_SETPOS:
    1223       return SetScrollPos(SCROLL_GetFrameHandle(hwnd),SB_HORZ,wParam,(BOOL)lParam);
    1224 
    1225     case SBM_GETPOS:
    1226       return GetScrollPos(SCROLL_GetFrameHandle(hwnd),SB_HORZ);
    1227 
    1228     case SBM_SETRANGE:
    1229       return SCROLL_SetRange(hwnd,wParam,lParam,SB_HORZ,FALSE);
    1230 
    1231     case SBM_GETRANGE:
    1232       GetScrollRange(SCROLL_GetFrameHandle(hwnd),SB_HORZ,(LPINT)wParam,(LPINT)lParam);
    1233       return 0;
    1234 
    1235     case SBM_ENABLE_ARROWS:
    1236       return EnableScrollBar(SCROLL_GetFrameHandle(hwnd),SB_HORZ,wParam);
    1237 
    1238     case SBM_SETRANGEREDRAW:
    1239       return SCROLL_SetRange(hwnd,wParam,lParam,SB_HORZ,TRUE);
    1240 
    1241     case SBM_SETSCROLLINFO:
    1242       return SetScrollInfo(SCROLL_GetFrameHandle(hwnd),SB_HORZ,(SCROLLINFO*)lParam,wParam);
    1243 
    1244     case SBM_GETSCROLLINFO:
    1245       return GetScrollInfo(SCROLL_GetFrameHandle(hwnd),SB_HORZ,(SCROLLINFO*)lParam);
    1246 
    1247     default:
    1248       return DefWindowProcA(hwnd,message,wParam,lParam);
    1249   }
    1250 
    1251   return 0;
    1252 }
    1253 
    1254 LRESULT WINAPI VertScrollBarWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam )
    1255 {
    1256   switch (message)
    1257   {
    1258     case WM_LBUTTONDOWN:
    1259     case WM_LBUTTONUP:
    1260     case WM_NCHITTEST:
    1261     case WM_CAPTURECHANGED:
    1262     case WM_MOUSEMOVE:
    1263     case WM_SYSTIMER:
    1264     case WM_SETFOCUS:
    1265     case WM_KILLFOCUS:
    1266       return SCROLL_HandleScrollEvent(hwnd,wParam,lParam,SB_VERT,message);
    1267 
    1268     case WM_ERASEBKGND:
    1269       return 1;
    1270 
    1271     case WM_GETDLGCODE:
    1272       return DLGC_WANTARROWS; /* Windows returns this value */
    1273 
    1274     case WM_PAINT:
    1275       return SCROLL_Paint(hwnd,wParam,lParam,SB_VERT);
    1276 
    1277     case SBM_SETPOS:
    1278       return SetScrollPos(SCROLL_GetFrameHandle(hwnd),SB_VERT,wParam,(BOOL)lParam);
    1279 
    1280     case SBM_GETPOS:
    1281       return GetScrollPos(SCROLL_GetFrameHandle(hwnd),SB_VERT);
    1282 
    1283     case SBM_SETRANGE:
    1284       return SCROLL_SetRange(hwnd,wParam,lParam,SB_VERT,FALSE);
    1285 
    1286     case SBM_GETRANGE:
    1287       GetScrollRange(SCROLL_GetFrameHandle(hwnd),SB_VERT,(LPINT)wParam,(LPINT)lParam);
    1288       return 0;
    1289 
    1290     case SBM_ENABLE_ARROWS:
    1291       return EnableScrollBar(SCROLL_GetFrameHandle(hwnd),SB_VERT,wParam);
    1292 
    1293     case SBM_SETRANGEREDRAW:
    1294       return SCROLL_SetRange(hwnd,wParam,lParam,SB_VERT,TRUE);
    1295 
    1296     case SBM_SETSCROLLINFO:
    1297       return SetScrollInfo(SCROLL_GetFrameHandle(hwnd),SB_VERT,(SCROLLINFO*)lParam,wParam);
    1298 
    1299     case SBM_GETSCROLLINFO:
    1300       return GetScrollInfo(SCROLL_GetFrameHandle(hwnd),SB_VERT,(SCROLLINFO*)lParam);
    1301 
    1302     default:
    1303       return DefWindowProcA(hwnd,message,wParam,lParam);
    1304   }
    1305 
    1306   return 0;
    1307 }
    1308 
    13091175/* Scrollbar API */
    13101176
     
    13311197    UINT new_flags;
    13321198    INT action = 0;
    1333     HWND hwndScroll = SCROLL_GetScrollHandle(hwnd,nBar);
    13341199
    13351200    dprintf(("USER32: SetScrollInfo"));
    13361201
    1337     if (!hwndScroll) return 0;
    1338     if (!(infoPtr = SCROLL_GetInfoPtr(hwndScroll,nBar))) return 0;
     1202    if (!(infoPtr = SCROLL_GetInfoPtr(hwnd,nBar))) return 0;
    13391203    if (info->fMask & ~(SIF_ALL | SIF_DISABLENOSCROLL)) return 0;
    13401204    if ((info->cbSize != sizeof(*info)) &&
     
    14451309        {
    14461310          if (action & SA_SSI_REFRESH)
    1447             SCROLL_RefreshScrollBar(hwndScroll,nBar,TRUE,TRUE);
     1311            SCROLL_RefreshScrollBar(hwnd,nBar,TRUE,TRUE);
    14481312          else
    14491313          {
    14501314            if (action & (SA_SSI_REPAINT_INTERIOR | SA_SSI_MOVE_THUMB))
    1451               SCROLL_RefreshScrollBar(hwndScroll,nBar,FALSE,TRUE);
     1315              SCROLL_RefreshScrollBar(hwnd,nBar,FALSE,TRUE);
    14521316            if (action & SA_SSI_REPAINT_ARROWS)
    1453               SCROLL_RefreshScrollBar(hwndScroll,nBar,TRUE,FALSE);
     1317              SCROLL_RefreshScrollBar(hwnd,nBar,TRUE,FALSE);
    14541318          }
    14551319        }
     
    14731337{
    14741338  SCROLLBAR_INFO *infoPtr;
    1475   HWND hwndScroll;
    14761339
    14771340    dprintf(("USER32: GetScrollInfo"));
    14781341
    1479     hwndScroll = SCROLL_GetScrollHandle(hwnd,nBar);
    1480     if (!hwndScroll || !(infoPtr = SCROLL_GetInfoPtr(hwndScroll,nBar))) return FALSE;
     1342    if (!(infoPtr = SCROLL_GetInfoPtr(hwnd,nBar))) return FALSE;
    14811343    if (info->fMask & ~(SIF_ALL | SIF_DISABLENOSCROLL)) return FALSE;
    14821344    if ((info->cbSize != sizeof(*info)) &&
     
    14861348    if (info->fMask & SIF_POS) info->nPos = infoPtr->CurVal;
    14871349    if ((info->fMask & SIF_TRACKPOS) && (info->cbSize == sizeof(*info)))
    1488       info->nTrackPos = (SCROLL_MovingThumb && SCROLL_TrackingWin == hwndScroll && SCROLL_TrackingBar == nBar) ? SCROLL_TrackingVal:infoPtr->CurVal;
     1350      info->nTrackPos = (SCROLL_MovingThumb && SCROLL_TrackingWin == hwnd && SCROLL_TrackingBar == nBar) ? SCROLL_TrackingVal:infoPtr->CurVal;
    14891351
    14901352    if (info->fMask & SIF_RANGE)
     
    15171379
    15181380    dprintf(("SetScrollPos %x %d %d %d", hwnd, nBar, nPos, bRedraw));
    1519     if (!(infoPtr = SCROLL_GetInfoPtr(SCROLL_GetScrollHandle(hwnd,nBar),nBar))) return 0;
     1381    if (!(infoPtr = SCROLL_GetInfoPtr(hwnd,nBar))) return 0;
    15201382    oldPos      = infoPtr->CurVal;
    15211383    info.cbSize = sizeof(info);
     
    15441406    dprintf(("GetScrollPos %x %d", hwnd, nBar));
    15451407
    1546     infoPtr = SCROLL_GetInfoPtr(SCROLL_GetScrollHandle(hwnd,nBar),nBar);
     1408    infoPtr = SCROLL_GetInfoPtr(hwnd,nBar);
    15471409    if (!infoPtr) return 0;
    15481410
     
    15861448  SCROLLBAR_INFO *infoPtr;
    15871449
    1588     infoPtr = SCROLL_GetInfoPtr(SCROLL_GetScrollHandle(hwnd,nBar),nBar);
     1450    infoPtr = SCROLL_GetInfoPtr(hwnd,nBar);
    15891451    if (!infoPtr)
    15901452    {
     
    16081470                    BOOL fShow  /* [I] TRUE = show, FALSE = hide  */)
    16091471{
     1472    Win32BaseWindow *win32wnd = Win32BaseWindow::GetWindowFromHandle(hwnd);
     1473    BOOL fShowH = (nBar == SB_HORZ) ? 0:fShow,fShowV = (nBar == SB_VERT) ? 0:fShow;
     1474
    16101475    dprintf(("ShowScrollBar %04x %d %d\n", hwnd, nBar, fShow));
    1611 
    1612     if (nBar == SB_CTL)
    1613     {
    1614       ShowWindow(hwnd,fShow ? SW_SHOW:SW_HIDE);
    1615 
    1616       return TRUE;
    1617     } else
    1618     {
    1619       Win32BaseWindow *window = Win32BaseWindow::GetWindowFromHandle(hwnd);
    1620       BOOL createHorz = FALSE,createVert = FALSE;
    1621 
    1622       if (!window)
    1623       {
    1624         dprintf(("ShowScrollBar window not found!"));
    1625         SetLastError(ERROR_INVALID_WINDOW_HANDLE);
    1626         return FALSE;
    1627       }
    1628 
    1629       return window->showScrollBars(nBar == SB_HORZ || nBar == SB_BOTH,nBar == SB_VERT || nBar == SB_BOTH,fShow);
     1476    if (!win32wnd) return FALSE;
     1477
     1478    switch(nBar)
     1479    {
     1480     case SB_CTL:
     1481       ShowWindow(hwnd,fShow ? SW_SHOW:SW_HIDE);
     1482       return TRUE;
     1483
     1484      case SB_BOTH:
     1485      case SB_HORZ:
     1486        if (fShow)
     1487        {
     1488            fShowH = !(win32wnd->getStyle() & WS_HSCROLL);
     1489            win32wnd->setStyle(win32wnd->getStyle() | WS_HSCROLL);
     1490        }
     1491        else  /* hide it */
     1492        {
     1493            fShowH = (win32wnd->getStyle() & WS_HSCROLL);
     1494            win32wnd->setStyle(win32wnd->getStyle() & ~WS_HSCROLL);
     1495        }
     1496        if( nBar == SB_HORZ )
     1497        {
     1498            fShowV = FALSE;
     1499            break;
     1500        }
     1501        /* fall through */
     1502
     1503    case SB_VERT:
     1504        if (fShowV)
     1505        {
     1506            fShowV = !(win32wnd->getStyle() & WS_VSCROLL);
     1507            win32wnd->setStyle(win32wnd->getStyle() | WS_VSCROLL);
     1508        }
     1509        else  /* hide it */
     1510        {
     1511            fShowV = (win32wnd->getStyle() & WS_VSCROLL);
     1512            win32wnd->setStyle(win32wnd->getStyle() & ~WS_VSCROLL);
     1513        }
     1514        if ( nBar == SB_VERT )
     1515           fShowH = FALSE;
     1516        break;
     1517
     1518    default:
     1519        return TRUE;  /* Nothing to do! */
     1520    }
     1521
     1522    if( fShowH || fShowV ) /* frame has been changed, let the window redraw itself */
     1523    {
     1524        SetWindowPos( hwnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE
     1525                    | SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED );
    16301526    }
    16311527
     
    16381534BOOL WINAPI EnableScrollBar( HWND hwnd, INT nBar, UINT flags)
    16391535{
    1640   Win32BaseWindow *window;
    1641   SCROLLBAR_INFO *infoPtr;
    1642 
    1643   dprintf(("EnableScrollBar %04x %d %d\n", hwnd, nBar, flags));
    1644 
    1645   if (nBar == SB_CTL)
    1646   {
    1647     if (!(infoPtr = SCROLL_GetInfoPtr(hwnd,nBar))) return FALSE;
    1648 
    1649     if (infoPtr->flags != flags)
    1650     {
    1651       infoPtr->flags = flags;
    1652       SCROLL_RefreshScrollBar(hwnd,nBar,TRUE,TRUE);
    1653     }
    1654 
     1536    BOOL bFineWithMe;
     1537    SCROLLBAR_INFO *infoPtr;
     1538
     1539    dprintf(("EnableScrollBar %04x %d %d\n", hwnd, nBar, flags));
     1540
     1541    flags &= ESB_DISABLE_BOTH;
     1542
     1543    if (nBar == SB_BOTH)
     1544    {
     1545        if (!(infoPtr = SCROLL_GetInfoPtr( hwnd, SB_VERT ))) return FALSE;
     1546        if (!(bFineWithMe = (infoPtr->flags == flags)) )
     1547        {
     1548            infoPtr->flags = flags;
     1549            SCROLL_RefreshScrollBar( hwnd, SB_VERT, TRUE, TRUE );
     1550        }
     1551        nBar = SB_HORZ;
     1552    }
     1553    else
     1554        bFineWithMe = TRUE;
     1555
     1556    if (!(infoPtr = SCROLL_GetInfoPtr( hwnd, nBar ))) return FALSE;
     1557    if (bFineWithMe && infoPtr->flags == flags) return FALSE;
     1558    infoPtr->flags = flags;
     1559
     1560    SCROLL_RefreshScrollBar( hwnd, nBar, TRUE, TRUE );
    16551561    return TRUE;
    1656   } else
    1657   {
    1658     Win32BaseWindow *window = Win32BaseWindow::GetWindowFromHandle(hwnd);
    1659 
    1660     if(!window)
    1661     {
    1662       dprintf(("EnableScrollBar window not found!"));
    1663       SetLastError(ERROR_INVALID_WINDOW_HANDLE);
    1664       return FALSE;
    1665     }
    1666 
    1667     if(window->getStyle() & (WS_HSCROLL | WS_VSCROLL))
    1668     {
    1669       BOOL rc = FALSE;
    1670 
    1671       if (((nBar == SB_VERT) || (nBar == SB_BOTH)) && (window->getStyle() & WS_VSCROLL))
    1672       {
    1673         HWND hwndScroll =  Win32BaseWindow::OS2ToWin32Handle(window->getVertScrollHandle());
    1674 
    1675         infoPtr = SCROLL_GetInfoPtr(hwndScroll,SB_VERT);
    1676         if (infoPtr)
    1677         {
    1678           if (infoPtr->flags != flags)
    1679           {
    1680             infoPtr->flags = flags;
    1681             SCROLL_RefreshScrollBar(hwndScroll,nBar,TRUE,TRUE);
    1682           }
    1683 
    1684           rc = TRUE;
    1685         }
    1686       }
    1687       if (((nBar == SB_HORZ) || (rc && (nBar == SB_BOTH))) && (window->getStyle() & WS_HSCROLL))
    1688       {
    1689         HWND hwndScroll =  Win32BaseWindow::OS2ToWin32Handle(window->getHorzScrollHandle());
    1690 
    1691         infoPtr = SCROLL_GetInfoPtr(hwndScroll,SB_VERT);
    1692         if (infoPtr)
    1693         {
    1694           if (infoPtr->flags != flags)
    1695           {
    1696             infoPtr->flags = flags;
    1697             SCROLL_RefreshScrollBar(hwndScroll,nBar,TRUE,TRUE);
    1698           }
    1699 
    1700           rc = TRUE;
    1701         }
    1702       }
    1703 
    1704       return rc;
    1705     }
    1706   }
    1707 
    1708   return TRUE;
    17091562}
    17101563
     
    17201573  }
    17211574
    1722   HWND hwndScroll;
    17231575  INT nBar,arrowSize;
    17241576
     
    17271579    case OBJID_CLIENT:
    17281580      nBar = SB_CTL;
    1729       hwndScroll = hwnd;
    17301581      break;
    17311582
    17321583    case OBJID_HSCROLL:
    17331584      nBar = SB_HORZ;
    1734       hwndScroll = SCROLL_GetScrollHandle(hwnd,SB_HORZ);
    17351585      break;
    17361586
    17371587    case OBJID_VSCROLL:
    17381588      nBar = SB_VERT;
    1739       hwndScroll = SCROLL_GetScrollHandle(hwnd,SB_VERT);
    17401589      break;
    17411590
     
    17441593  }
    17451594
    1746   if (!hwndScroll) return FALSE;
    1747 
    1748   SCROLL_GetScrollBarRect(hwndScroll,nBar,&psbi->rcScrollBar,&arrowSize,&psbi->dxyLineButton,&psbi->xyThumbTop);
     1595  SCROLL_GetScrollBarRect(hwnd,nBar,&psbi->rcScrollBar,&arrowSize,&psbi->dxyLineButton,&psbi->xyThumbTop);
    17491596  psbi->xyThumbBottom = psbi->xyThumbTop+psbi->dxyLineButton;
    17501597  psbi->bogus = 0; //CB: undocumented!
    1751   psbi->rgstate[0] = IsWindowVisible(hwndScroll) ? STATE_SYSTEM_INVISIBLE:0;
     1598  psbi->rgstate[0] = IsWindowVisible(hwnd) ? STATE_SYSTEM_INVISIBLE:0;
    17521599  psbi->rgstate[1] = psbi->rgstate[2] = psbi->rgstate[3] = psbi->rgstate[4] = psbi->rgstate[5] = psbi->rgstate[0]; //CB: todo
    17531600
Note: See TracChangeset for help on using the changeset viewer.