mirror of
https://github.com/reactos/reactos.git
synced 2025-07-30 14:42:11 +00:00
[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:
parent
40ee59d609
commit
dda9c3979e
1 changed files with 16 additions and 2 deletions
|
@ -495,6 +495,8 @@ co_IntSetScrollInfo(PWND Window, INT nBar, LPCSCROLLINFO lpsi, BOOL bRedraw)
|
||||||
/* [0] = HORZ, [1] = VERT */
|
/* [0] = HORZ, [1] = VERT */
|
||||||
static PWND PrevHwnd[2] = { 0 };
|
static PWND PrevHwnd[2] = { 0 };
|
||||||
static DWORD PrevPos[2] = { 0 };
|
static DWORD PrevPos[2] = { 0 };
|
||||||
|
static DWORD PrevMax[2] = { 0 };
|
||||||
|
static INT PrevAction[2] = { 0 };
|
||||||
|
|
||||||
ASSERT_REFS_CO(Window);
|
ASSERT_REFS_CO(Window);
|
||||||
|
|
||||||
|
@ -637,6 +639,16 @@ co_IntSetScrollInfo(PWND Window, INT nBar, LPCSCROLLINFO lpsi, BOOL bRedraw)
|
||||||
}
|
}
|
||||||
|
|
||||||
//done:
|
//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 )
|
if ( action & SA_SSI_HIDE )
|
||||||
{
|
{
|
||||||
co_UserShowScrollBar(Window, nBar, FALSE, FALSE);
|
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;
|
CurrentPos = lpsi->fMask & SIF_PREVIOUSPOS ? OldPos : pSBData->pos;
|
||||||
/* Check for changes to Window or CurrentPos */
|
/* Check for changes to Window or CurrentPos or lpsi->nMax */
|
||||||
if ((Window != PrevHwnd[nBar]) || (CurrentPos != PrevPos[nBar]))
|
if ((Window != PrevHwnd[nBar]) || (CurrentPos != PrevPos[nBar]) ||
|
||||||
|
(lpsi->nMax != PrevMax[nBar]))
|
||||||
{
|
{
|
||||||
co_UserRedrawWindow(Window, &UpdateRect, 0, RDW_INVALIDATE | RDW_FRAME);
|
co_UserRedrawWindow(Window, &UpdateRect, 0, RDW_INVALIDATE | RDW_FRAME);
|
||||||
PrevHwnd[nBar] = Window;
|
PrevHwnd[nBar] = Window;
|
||||||
PrevPos[nBar] = CurrentPos;
|
PrevPos[nBar] = CurrentPos;
|
||||||
|
PrevMax[nBar] = lpsi->nMax;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // FIXME: Arrows
|
} // FIXME: Arrows
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue