https://git.reactos.org/?p=reactos.git;a=commitdiff;h=929a2c6637b18cc14e259f...
commit 929a2c6637b18cc14e259fe2f2d3d9635a10b2e9 Author: Mark Jansen mark.jansen@reactos.org AuthorDate: Sun Oct 21 19:09:09 2018 +0200 Commit: Mark Jansen mark.jansen@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; }