[NTUSER] Scrollbar.c, improve co_IntSetScrollInfo() CORE-17769

Fixes CORE-17769 'Rapps Listview manual resize may erroneously not draw the triangles sometimes'
This could happen for both: themed and unthemed.

CORE-17769 was a regression introduced by 0.4.14-dev-1134-g 00adb1a3f9

We don't really like the added state in form of the static variables,
but the patch works good from a pure testing-perspective.

Many Thanks to the patches author: Doug Lyons
This commit is contained in:
Joachim Henze 2021-09-19 22:35:37 +02:00
parent 40ee59d609
commit dda9c3979e

View file

@ -495,6 +495,8 @@ co_IntSetScrollInfo(PWND Window, INT nBar, LPCSCROLLINFO lpsi, BOOL bRedraw)
/* [0] = HORZ, [1] = VERT */
static PWND PrevHwnd[2] = { 0 };
static DWORD PrevPos[2] = { 0 };
static DWORD PrevMax[2] = { 0 };
static INT PrevAction[2] = { 0 };
ASSERT_REFS_CO(Window);
@ -637,6 +639,16 @@ co_IntSetScrollInfo(PWND Window, INT nBar, LPCSCROLLINFO lpsi, BOOL bRedraw)
}
//done:
if ((Window != PrevHwnd[nBar]) || (action != PrevAction[nBar]))
{
if ((action == SA_SSI_SHOW) && (PrevAction[nBar] == SA_SSI_HIDE))
{
co_UserShowScrollBar(Window, nBar, TRUE, TRUE);
}
}
if ((action != PrevAction[nBar]) && action != 0)
PrevAction[nBar] = action;
if ( action & SA_SSI_HIDE )
{
co_UserShowScrollBar(Window, nBar, FALSE, FALSE);
@ -690,12 +702,14 @@ co_IntSetScrollInfo(PWND Window, INT nBar, LPCSCROLLINFO lpsi, BOOL bRedraw)
}
}
CurrentPos = lpsi->fMask & SIF_PREVIOUSPOS ? OldPos : pSBData->pos;
/* Check for changes to Window or CurrentPos */
if ((Window != PrevHwnd[nBar]) || (CurrentPos != PrevPos[nBar]))
/* Check for changes to Window or CurrentPos or lpsi->nMax */
if ((Window != PrevHwnd[nBar]) || (CurrentPos != PrevPos[nBar]) ||
(lpsi->nMax != PrevMax[nBar]))
{
co_UserRedrawWindow(Window, &UpdateRect, 0, RDW_INVALIDATE | RDW_FRAME);
PrevHwnd[nBar] = Window;
PrevPos[nBar] = CurrentPos;
PrevMax[nBar] = lpsi->nMax;
}
}
} // FIXME: Arrows