mirror of
https://github.com/reactos/reactos.git
synced 2024-10-20 08:01:05 +00:00
[User32]
- Release capture if the scroll is not tracking events. This fixes CORE-7075. - Minor sync porting to minimize differences. svn path=/trunk/; revision=59201
This commit is contained in:
parent
d929b4bc83
commit
9a3038538e
|
@ -63,11 +63,13 @@ static HWND ScrollTrackingWin = 0;
|
||||||
static INT ScrollTrackingBar = 0;
|
static INT ScrollTrackingBar = 0;
|
||||||
static INT ScrollTrackingPos = 0;
|
static INT ScrollTrackingPos = 0;
|
||||||
static INT ScrollTrackingVal = 0;
|
static INT ScrollTrackingVal = 0;
|
||||||
static BOOL ScrollMovingThumb = FALSE;
|
/* Hit test code of the last button-down event */
|
||||||
|
|
||||||
static DWORD ScrollTrackHitTest = SCROLL_NOWHERE;
|
static DWORD ScrollTrackHitTest = SCROLL_NOWHERE;
|
||||||
static BOOL ScrollTrackVertical;
|
static BOOL ScrollTrackVertical;
|
||||||
|
|
||||||
|
/* Is the moving thumb being displayed? */
|
||||||
|
static BOOL ScrollMovingThumb = FALSE;
|
||||||
|
|
||||||
HBRUSH DefWndControlColor(HDC hDC, UINT ctlType);
|
HBRUSH DefWndControlColor(HDC hDC, UINT ctlType);
|
||||||
|
|
||||||
UINT_PTR WINAPI SetSystemTimer(HWND,UINT_PTR,UINT,TIMERPROC);
|
UINT_PTR WINAPI SetSystemTimer(HWND,UINT_PTR,UINT,TIMERPROC);
|
||||||
|
@ -766,6 +768,12 @@ IntScrollHandleScrollEvent(HWND Wnd, INT SBType, UINT Msg, POINT Pt)
|
||||||
}
|
}
|
||||||
if ((ScrollTrackHitTest == SCROLL_NOWHERE) && (Msg != WM_LBUTTONDOWN))
|
if ((ScrollTrackHitTest == SCROLL_NOWHERE) && (Msg != WM_LBUTTONDOWN))
|
||||||
{
|
{
|
||||||
|
//// ReactOS : Justin Case something goes wrong.
|
||||||
|
if (Wnd == GetCapture())
|
||||||
|
{
|
||||||
|
ReleaseCapture();
|
||||||
|
}
|
||||||
|
////
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -773,7 +781,7 @@ IntScrollHandleScrollEvent(HWND Wnd, INT SBType, UINT Msg, POINT Pt)
|
||||||
NewInfo.reserved = ScrollBarInfo.reserved;
|
NewInfo.reserved = ScrollBarInfo.reserved;
|
||||||
memcpy(NewInfo.rgstate, ScrollBarInfo.rgstate, (CCHILDREN_SCROLLBAR + 1) * sizeof(DWORD));
|
memcpy(NewInfo.rgstate, ScrollBarInfo.rgstate, (CCHILDREN_SCROLLBAR + 1) * sizeof(DWORD));
|
||||||
|
|
||||||
if (SB_CTL == SBType && 0 != (GetWindowLongPtrW(Wnd, GWL_STYLE) & (SBS_SIZEGRIP | SBS_SIZEBOX)))
|
if (SBType == SB_CTL && (GetWindowLongPtrW(Wnd, GWL_STYLE) & (SBS_SIZEGRIP | SBS_SIZEBOX)))
|
||||||
{
|
{
|
||||||
switch(Msg)
|
switch(Msg)
|
||||||
{
|
{
|
||||||
|
@ -826,7 +834,7 @@ IntScrollHandleScrollEvent(HWND Wnd, INT SBType, UINT Msg, POINT Pt)
|
||||||
LastMousePos = LastClickPos;
|
LastMousePos = LastClickPos;
|
||||||
TrackThumbPos = ScrollBarInfo.xyThumbTop;
|
TrackThumbPos = ScrollBarInfo.xyThumbTop;
|
||||||
PrevPt = Pt;
|
PrevPt = Pt;
|
||||||
if (SB_CTL == SBType && 0 != (GetWindowLongPtrW(Wnd, GWL_STYLE) & WS_TABSTOP)) SetFocus(Wnd);
|
if (SBType == SB_CTL && (GetWindowLongPtrW(Wnd, GWL_STYLE) & WS_TABSTOP)) SetFocus(Wnd);
|
||||||
SetCapture(Wnd);
|
SetCapture(Wnd);
|
||||||
ScrollBarInfo.rgstate[ScrollTrackHitTest] |= STATE_SYSTEM_PRESSED;
|
ScrollBarInfo.rgstate[ScrollTrackHitTest] |= STATE_SYSTEM_PRESSED;
|
||||||
NewInfo.rgstate[ScrollTrackHitTest] = ScrollBarInfo.rgstate[ScrollTrackHitTest];
|
NewInfo.rgstate[ScrollTrackHitTest] = ScrollBarInfo.rgstate[ScrollTrackHitTest];
|
||||||
|
@ -1226,9 +1234,15 @@ ScrollBarWndProc_common(WNDPROC DefWindowProc, HWND Wnd, UINT Msg, WPARAM wParam
|
||||||
|
|
||||||
case WM_LBUTTONDBLCLK:
|
case WM_LBUTTONDBLCLK:
|
||||||
case WM_LBUTTONDOWN:
|
case WM_LBUTTONDOWN:
|
||||||
|
if (GetWindowLongW( Wnd, GWL_STYLE ) & SBS_SIZEGRIP)
|
||||||
|
{
|
||||||
|
SendMessageW( GetParent(Wnd), WM_SYSCOMMAND,
|
||||||
|
SC_SIZE + ((GetWindowLongW( Wnd, GWL_EXSTYLE ) & WS_EX_LAYOUTRTL) ?
|
||||||
|
WMSZ_BOTTOMLEFT : WMSZ_BOTTOMRIGHT), lParam );
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
POINT Pt;
|
POINT Pt;
|
||||||
|
|
||||||
Pt.x = (short)LOWORD(lParam);
|
Pt.x = (short)LOWORD(lParam);
|
||||||
Pt.y = (short)HIWORD(lParam);
|
Pt.y = (short)HIWORD(lParam);
|
||||||
ScrollTrackScrollBar(Wnd, SB_CTL, Pt);
|
ScrollTrackScrollBar(Wnd, SB_CTL, Pt);
|
||||||
|
@ -1240,7 +1254,6 @@ ScrollBarWndProc_common(WNDPROC DefWindowProc, HWND Wnd, UINT Msg, WPARAM wParam
|
||||||
case WM_SYSTIMER:
|
case WM_SYSTIMER:
|
||||||
{
|
{
|
||||||
POINT Pt;
|
POINT Pt;
|
||||||
|
|
||||||
Pt.x = (short)LOWORD(lParam);
|
Pt.x = (short)LOWORD(lParam);
|
||||||
Pt.y = (short)HIWORD(lParam);
|
Pt.y = (short)HIWORD(lParam);
|
||||||
IntScrollHandleScrollEvent(Wnd, SB_CTL, Msg, Pt);
|
IntScrollHandleScrollEvent(Wnd, SB_CTL, Msg, Pt);
|
||||||
|
@ -1540,7 +1553,7 @@ GetScrollPos(HWND Wnd, INT Bar)
|
||||||
}
|
}
|
||||||
|
|
||||||
SetLastError(ERROR_NO_SCROLLBARS);
|
SetLastError(ERROR_NO_SCROLLBARS);
|
||||||
ERR("GetScrollPos No Scroll Info\n");
|
TRACE("GetScrollPos No Scroll Info\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
SetLastError(ERROR_INVALID_PARAMETER);
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
|
|
Loading…
Reference in a new issue