https://git.reactos.org/?p=reactos.git;a=commitdiff;h=929a2c6637b18cc14e259…
commit 929a2c6637b18cc14e259fe2f2d3d9635a10b2e9
Author: Mark Jansen <mark.jansen(a)reactos.org>
AuthorDate: Sun Oct 21 19:09:09 2018 +0200
Commit: Mark Jansen <mark.jansen(a)reactos.org>
CommitDate: Sun Oct 28 13:02:27 2018 +0100
[WIN32SS] Disable scrollbars when SIF_DISABLENOSCROLL is used
CORE-13918
---
win32ss/user/ntuser/scrollbar.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/win32ss/user/ntuser/scrollbar.c b/win32ss/user/ntuser/scrollbar.c
index a8f7c66dd5..582a603c1f 100644
--- a/win32ss/user/ntuser/scrollbar.c
+++ b/win32ss/user/ntuser/scrollbar.c
@@ -58,6 +58,10 @@ DBG_DEFAULT_CHANNEL(UserScrollbar);
/* FUNCTIONS *****************************************************************/
+BOOL APIENTRY
+IntEnableScrollBar(BOOL Horz, PSCROLLBARINFO Info, UINT wArrows);
+
+
/* Ported from WINE20020904 */
/* Compute the scroll bar rectangle, in drawing coordinates (i.e. client coords for
SB_CTL, window coords for SB_VERT and
* SB_HORZ). 'arrowSize' returns the width or height of an arrow (depending on *
the orientation of the scrollbar),
@@ -203,6 +207,14 @@ IntCalculateThumb(PWND Wnd, LONG idObject, PSCROLLBARINFO psbi,
PSBDATA pSBData)
psbi->xyThumbBottom = 0;
ThumbPos = Thumb;
}
+ else if (psbi->rgstate[SBRG_TOPRIGHTBTN] == STATE_SYSTEM_UNAVAILABLE &&
+ psbi->rgstate[SBRG_BOTTOMLEFTBTN] == STATE_SYSTEM_UNAVAILABLE &&
+ pSBData->posMin >= (int)(pSBData->posMax - max(pSBData->page - 1,
0)))
+ {
+ /* Nothing to scroll */
+ psbi->xyThumbTop = 0;
+ psbi->xyThumbBottom = 0;
+ }
else
{
ThumbBox = pSBData->page ? MINTRACKTHUMB : UserGetSystemMetrics(SM_CXHTHUMB);
@@ -642,6 +654,12 @@ co_IntSetScrollInfo(PWND Window, INT nBar, LPCSCROLLINFO lpsi, BOOL
bRedraw)
co_UserRedrawWindow(Window, &UpdateRect, 0, RDW_INVALIDATE | RDW_FRAME);
}
*/ }
+
+ if (bChangeParams && (nBar == SB_HORZ || nBar == SB_VERT) &&
(lpsi->fMask & SIF_DISABLENOSCROLL))
+ {
+ IntEnableScrollBar(nBar == SB_HORZ, psbi, Window->pSBInfo->WSBflags);
+ }
+
/* Return current position */
return lpsi->fMask & SIF_PREVIOUSPOS ? OldPos : pSBData->pos;
}