dll/win32/comctl32/listview.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/dll/win32/comctl32/listview.c b/dll/win32/comctl32/listview.c index fb40d227df..9725d16ab0 100644 --- a/dll/win32/comctl32/listview.c +++ b/dll/win32/comctl32/listview.c @@ -2076,6 +2076,7 @@ static INT LISTVIEW_UpdateHScroll(LISTVIEW_INFO *infoPtr) horzInfo.fMask = SIF_RANGE | SIF_PAGE; horzInfo.nMax = max(horzInfo.nMax - 1, 0); + horzInfo.nMax = (horzInfo.nPage == 0 ? 0 : horzInfo.nMax); dx = GetScrollPos(infoPtr->hwndSelf, SB_HORZ); dx -= SetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &horzInfo, TRUE); TRACE("horzInfo=%s\n", debugscrollinfo(&horzInfo)); @@ -2099,18 +2100,21 @@ static INT LISTVIEW_UpdateVScroll(LISTVIEW_INFO *infoPtr) ZeroMemory(&vertInfo, sizeof(SCROLLINFO)); vertInfo.cbSize = sizeof(SCROLLINFO); - vertInfo.nPage = infoPtr->rcList.bottom - infoPtr->rcList.top; + vertInfo.nPage = max((infoPtr->rcList.bottom - infoPtr->rcList.top), 0); if (infoPtr->uView == LV_VIEW_DETAILS) { - vertInfo.nMax = infoPtr->nItemCount; + if (vertInfo.nPage != 0) + { + vertInfo.nMax = infoPtr->nItemCount; - /* scroll by at least one page */ - if(vertInfo.nPage < infoPtr->nItemHeight) - vertInfo.nPage = infoPtr->nItemHeight; + /* scroll by at least one page */ + if (vertInfo.nPage < infoPtr->nItemHeight) + vertInfo.nPage = infoPtr->nItemHeight; - if (infoPtr->nItemHeight > 0) - vertInfo.nPage /= infoPtr->nItemHeight; + if (infoPtr->nItemHeight > 0) + vertInfo.nPage /= infoPtr->nItemHeight; + } } else if (infoPtr->uView != LV_VIEW_LIST) /* LV_VIEW_ICON, or LV_VIEW_SMALLICON */ { @@ -2121,6 +2125,7 @@ static INT LISTVIEW_UpdateVScroll(LISTVIEW_INFO *infoPtr) vertInfo.fMask = SIF_RANGE | SIF_PAGE; vertInfo.nMax = max(vertInfo.nMax - 1, 0); + vertInfo.nMax = (vertInfo.nPage == 0 ? 0 : vertInfo.nMax); dy = GetScrollPos(infoPtr->hwndSelf, SB_VERT); dy -= SetScrollInfo(infoPtr->hwndSelf, SB_VERT, &vertInfo, TRUE); TRACE("vertInfo=%s\n", debugscrollinfo(&vertInfo));