Removed a number of direct accesses to the WND structure, replacing
them by API calls.
diff --git a/controls/scroll.c b/controls/scroll.c
index 25a277d..d9384ca 100644
--- a/controls/scroll.c
+++ b/controls/scroll.c
@@ -144,11 +144,12 @@
/***********************************************************************
- * SCROLL_GetPtrScrollInfo
+ * SCROLL_GetScrollInfo
*/
-static SCROLLBAR_INFO *SCROLL_GetPtrScrollInfo( WND* wndPtr, INT nBar )
+static SCROLLBAR_INFO *SCROLL_GetScrollInfo( HWND hwnd, INT nBar )
{
SCROLLBAR_INFO *infoPtr;
+ WND *wndPtr = WIN_FindWndPtr( hwnd );
if (!wndPtr) return NULL;
switch(nBar)
@@ -156,7 +157,9 @@
case SB_HORZ: infoPtr = (SCROLLBAR_INFO *)wndPtr->pHScroll; break;
case SB_VERT: infoPtr = (SCROLLBAR_INFO *)wndPtr->pVScroll; break;
case SB_CTL: infoPtr = (SCROLLBAR_INFO *)wndPtr->wExtra; break;
- default: return NULL;
+ default:
+ WIN_ReleaseWndPtr( wndPtr );
+ return NULL;
}
if (!infoPtr) /* Create the info structure if needed */
@@ -171,24 +174,12 @@
}
if (!hUpArrow) SCROLL_LoadBitmaps();
}
+ WIN_ReleaseWndPtr( wndPtr );
return infoPtr;
}
/***********************************************************************
- * SCROLL_GetScrollInfo
- */
-static SCROLLBAR_INFO *SCROLL_GetScrollInfo( HWND hwnd, INT nBar )
-{
- SCROLLBAR_INFO *retvalue;
- WND *wndPtr = WIN_FindWndPtr( hwnd );
- retvalue = SCROLL_GetPtrScrollInfo( wndPtr, nBar );
- WIN_ReleaseWndPtr(wndPtr);
- return retvalue;
-}
-
-
-/***********************************************************************
* SCROLL_GetScrollBarRect
*
* Compute the scroll bar rectangle, in drawing coordinates (i.e. client
@@ -258,7 +249,7 @@
}
else
{
- SCROLLBAR_INFO *info = SCROLL_GetPtrScrollInfo( wndPtr, nBar );
+ SCROLLBAR_INFO *info = SCROLL_GetScrollInfo( hwnd, nBar );
*arrowSize = GetSystemMetrics(SM_CXVSCROLL);
pixels -= (2 * (GetSystemMetrics(SM_CXVSCROLL) - SCROLL_ARROW_THUMB_OVERLAP));
@@ -793,7 +784,7 @@
RECT rect;
BOOL vertical;
WND *wndPtr = WIN_FindWndPtr( hwnd );
- SCROLLBAR_INFO *infoPtr = SCROLL_GetPtrScrollInfo( wndPtr, nBar );
+ SCROLLBAR_INFO *infoPtr = SCROLL_GetScrollInfo( hwnd, nBar );
BOOL Save_SCROLL_MovingThumb = SCROLL_MovingThumb;
if (!wndPtr || !infoPtr ||
@@ -877,9 +868,8 @@
*/
static void SCROLL_HandleKbdEvent( HWND hwnd, WPARAM wParam )
{
- WND *wndPtr = WIN_FindWndPtr( hwnd );
WPARAM msg;
-
+
switch(wParam)
{
case VK_PRIOR: msg = SB_PAGEUP; break;
@@ -888,14 +878,11 @@
case VK_END: msg = SB_BOTTOM; break;
case VK_UP: msg = SB_LINEUP; break;
case VK_DOWN: msg = SB_LINEDOWN; break;
- default:
- WIN_ReleaseWndPtr(wndPtr);
- return;
+ default: return;
}
SendMessageW( GetParent(hwnd),
- (wndPtr->dwStyle & SBS_VERT) ? WM_VSCROLL : WM_HSCROLL,
- msg, hwnd );
- WIN_ReleaseWndPtr(wndPtr);
+ (GetWindowLongA( hwnd, GWL_STYLE ) & SBS_VERT) ? WM_VSCROLL : WM_HSCROLL,
+ msg, hwnd );
}
@@ -1651,30 +1638,33 @@
*
* Updates both scrollbars at the same time. Used by MDI CalcChildScroll().
*/
-INT SCROLL_SetNCSbState(WND* wndPtr, int vMin, int vMax, int vPos,
- int hMin, int hMax, int hPos)
+INT SCROLL_SetNCSbState(HWND hwnd, int vMin, int vMax, int vPos,
+ int hMin, int hMax, int hPos)
{
INT vA, hA;
SCROLLINFO vInfo, hInfo;
-
+
vInfo.cbSize = hInfo.cbSize = sizeof(SCROLLINFO);
- vInfo.nMin = vMin; hInfo.nMin = hMin;
- vInfo.nMax = vMax; hInfo.nMax = hMax;
- vInfo.nPos = vPos; hInfo.nPos = hPos;
+ vInfo.nMin = vMin;
+ vInfo.nMax = vMax;
+ vInfo.nPos = vPos;
+ hInfo.nMin = hMin;
+ hInfo.nMax = hMax;
+ hInfo.nPos = hPos;
vInfo.fMask = hInfo.fMask = SIF_RANGE | SIF_POS;
- SCROLL_SetScrollInfo( wndPtr->hwndSelf, SB_VERT, &vInfo, &vA );
- SCROLL_SetScrollInfo( wndPtr->hwndSelf, SB_HORZ, &hInfo, &hA );
+ SCROLL_SetScrollInfo( hwnd, SB_VERT, &vInfo, &vA );
+ SCROLL_SetScrollInfo( hwnd, SB_HORZ, &hInfo, &hA );
- if( !SCROLL_ShowScrollBar( wndPtr->hwndSelf, SB_BOTH,
+ if( !SCROLL_ShowScrollBar( hwnd, SB_BOTH,
(hA & SA_SSI_SHOW),(vA & SA_SSI_SHOW) ) )
{
/* SetWindowPos() wasn't called, just redraw the scrollbars if needed */
if( vA & SA_SSI_REFRESH )
- SCROLL_RefreshScrollBar( wndPtr->hwndSelf, SB_VERT, FALSE, TRUE );
+ SCROLL_RefreshScrollBar( hwnd, SB_VERT, FALSE, TRUE );
if( hA & SA_SSI_REFRESH )
- SCROLL_RefreshScrollBar( wndPtr->hwndSelf, SB_HORZ, FALSE, TRUE );
+ SCROLL_RefreshScrollBar( hwnd, SB_HORZ, FALSE, TRUE );
}
return 0;
}