https://git.reactos.org/?p=reactos.git;a=commitdiff;h=929a2c6637b18cc14e259fe2f2d3d9635a10b2e9

commit 929a2c6637b18cc14e259fe2f2d3d9635a10b2e9
Author:     Mark Jansen <[email protected]>
AuthorDate: Sun Oct 21 19:09:09 2018 +0200
Commit:     Mark Jansen <[email protected]>
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;
 }

Reply via email to