From 5f51221d9c1b94040ef354e7f62a0ce9a838cdab Mon Sep 17 00:00:00 2001 From: Dylan Smith Date: Tue, 24 Feb 2009 02:38:49 -0500 Subject: [PATCH] richedit: Fixed scrollbar visiblility calculation after SetScrollInfo. The scrollbar visibility can be changed from SetScrollRange or SetScrollInfo, but the visiblity that is a result of these calls are not consistent with the calculation made by richedit controls to decide whether to show or hide the scrollbars. --- dlls/riched20/paint.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/dlls/riched20/paint.c b/dlls/riched20/paint.c index f235082d7b5..620ac69160c 100644 --- a/dlls/riched20/paint.c +++ b/dlls/riched20/paint.c @@ -1111,6 +1111,18 @@ void ME_ScrollRight(ME_TextEditor *editor, int cx) ME_HScrollAbs(editor, editor->horz_si.nPos + cx); } +/* Calculates the visiblity after a call to SetScrollRange or + * SetScrollInfo with SIF_RANGE. */ +static BOOL ME_PostSetScrollRangeVisibility(SCROLLINFO *si) +{ + if (si->fMask & SIF_DISABLENOSCROLL) + return TRUE; + + /* This must match the check in SetScrollInfo to determine whether + * to show or hide the scrollbars. */ + return si->nMin < si->nMax - max(si->nPage - 1, 0); +} + void ME_UpdateScrollBar(ME_TextEditor *editor) { /* Note that this is the only function that should ever call @@ -1158,15 +1170,14 @@ void ME_UpdateScrollBar(ME_TextEditor *editor) ITextHost_TxSetScrollRange(editor->texthost, SB_HORZ, si.nMin, si.nMax, FALSE); ITextHost_TxSetScrollPos(editor->texthost, SB_HORZ, si.nPos, TRUE); } + /* SetScrollInfo or SetScrollRange change scrollbar visibility. */ + bScrollBarWasVisible = ME_PostSetScrollRangeVisibility(&si); } } if (si.fMask & SIF_DISABLENOSCROLL) { bScrollBarWillBeVisible = TRUE; } else if (!(editor->styleFlags & WS_HSCROLL)) { - /* SetScrollInfo or SetScrollRange may cause the scrollbar to be - * shown, so hide the scrollbar if necessary. */ - bScrollBarWasVisible = bScrollBarWillBeVisible; bScrollBarWillBeVisible = FALSE; } @@ -1205,15 +1216,14 @@ void ME_UpdateScrollBar(ME_TextEditor *editor) ITextHost_TxSetScrollRange(editor->texthost, SB_VERT, si.nMin, si.nMax, FALSE); ITextHost_TxSetScrollPos(editor->texthost, SB_VERT, si.nPos, TRUE); } + /* SetScrollInfo or SetScrollRange change scrollbar visibility. */ + bScrollBarWasVisible = ME_PostSetScrollRangeVisibility(&si); } } if (si.fMask & SIF_DISABLENOSCROLL) { bScrollBarWillBeVisible = TRUE; } else if (!(editor->styleFlags & WS_VSCROLL)) { - /* SetScrollInfo or SetScrollRange may cause the scrollbar to be - * shown, so hide the scrollbar if necessary. */ - bScrollBarWasVisible = bScrollBarWillBeVisible; bScrollBarWillBeVisible = FALSE; }