https://git.reactos.org/?p=reactos.git;a=commitdiff;h=19fbdda95cb972f5d6f9652c238a2edc056538f3

commit 19fbdda95cb972f5d6f9652c238a2edc056538f3
Author:     Joachim Henze <joachim.he...@reactos.org>
AuthorDate: Sat Nov 9 15:50:10 2019 +0100
Commit:     Joachim Henze <joachim.he...@reactos.org>
CommitDate: Sat Nov 9 15:50:50 2019 +0100

    [WIN32SS] Prevent disabled scrollbars being clickable CORE-15557
    
    Thanks to JIRA user 'I_Kill_Bugs.
    
    VBox: https://reactos.org/testman/compare.php?ids=69671,69747
    KVM: https://reactos.org/testman/compare.php?ids=69672,69748
---
 win32ss/user/user32/controls/scrollbar.c | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/win32ss/user/user32/controls/scrollbar.c 
b/win32ss/user/user32/controls/scrollbar.c
index 3eb02429610..1e1249e296c 100644
--- a/win32ss/user/user32/controls/scrollbar.c
+++ b/win32ss/user/user32/controls/scrollbar.c
@@ -831,9 +831,13 @@ IntScrollHandleScrollEvent(HWND Wnd, INT SBType, UINT Msg, 
POINT Pt)
         PrevPt = Pt;
         if (SBType == SB_CTL && (GetWindowLongPtrW(Wnd, GWL_STYLE) & 
WS_TABSTOP)) SetFocus(Wnd);
         SetCapture(Wnd);
-        ScrollBarInfo.rgstate[ScrollTrackHitTest] |= STATE_SYSTEM_PRESSED;
-        NewInfo.rgstate[ScrollTrackHitTest] = 
ScrollBarInfo.rgstate[ScrollTrackHitTest];
-        NtUserSetScrollBarInfo(Wnd, IntScrollGetObjectId(SBType), &NewInfo);
+        /* Don't update scrollbar if disabled. */
+        if (ScrollBarInfo.rgstate[ScrollTrackHitTest] != 
STATE_SYSTEM_UNAVAILABLE)
+        {
+            ScrollBarInfo.rgstate[ScrollTrackHitTest] |= STATE_SYSTEM_PRESSED;
+            NewInfo.rgstate[ScrollTrackHitTest] = 
ScrollBarInfo.rgstate[ScrollTrackHitTest];
+            NtUserSetScrollBarInfo(Wnd, IntScrollGetObjectId(SBType), 
&NewInfo);
+        }
         break;
 
       case WM_MOUSEMOVE:
@@ -846,13 +850,16 @@ IntScrollHandleScrollEvent(HWND Wnd, INT SBType, UINT 
Msg, POINT Pt)
         ReleaseCapture();
         /* if scrollbar has focus, show back caret */
         if (Wnd == GetFocus()) ShowCaret(Wnd);
-        ScrollBarInfo.rgstate[ScrollTrackHitTest] &= ~STATE_SYSTEM_PRESSED;
-        NewInfo.rgstate[ScrollTrackHitTest] = 
ScrollBarInfo.rgstate[ScrollTrackHitTest];
-        NtUserSetScrollBarInfo(Wnd, IntScrollGetObjectId(SBType), &NewInfo);
-
-        IntDrawScrollInterior(Wnd,Dc,SBType,Vertical,&ScrollBarInfo);
-        IntDrawScrollArrows(Dc, &ScrollBarInfo, Vertical);
+        /* Don't update scrollbar if disabled. */
+        if (ScrollBarInfo.rgstate[ScrollTrackHitTest] != 
STATE_SYSTEM_UNAVAILABLE)
+        {
+            ScrollBarInfo.rgstate[ScrollTrackHitTest] &= ~STATE_SYSTEM_PRESSED;
+            NewInfo.rgstate[ScrollTrackHitTest] = 
ScrollBarInfo.rgstate[ScrollTrackHitTest];
+            NtUserSetScrollBarInfo(Wnd, IntScrollGetObjectId(SBType), 
&NewInfo);
 
+            IntDrawScrollInterior(Wnd,Dc,SBType,Vertical,&ScrollBarInfo);
+            IntDrawScrollArrows(Dc, &ScrollBarInfo, Vertical);
+        }
         break;
 
       case WM_SYSTIMER:

Reply via email to