comctl32: Scroll listview if changing scroll bounds changes the scroll pos.
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index 808dc93..4878778 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -1634,6 +1634,7 @@
 {
     UINT uView = infoPtr->dwStyle & LVS_TYPEMASK;
     SCROLLINFO horzInfo, vertInfo;
+    INT dx, dy;
 
     if ((infoPtr->dwStyle & LVS_NOSCROLL) || !is_redrawing(infoPtr)) return;
 
@@ -1666,7 +1667,8 @@
   
     horzInfo.fMask = SIF_RANGE | SIF_PAGE;
     horzInfo.nMax = max(horzInfo.nMax - 1, 0);
-    SetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &horzInfo, TRUE);
+    dx = GetScrollPos(infoPtr->hwndSelf, SB_HORZ);
+    dx -= SetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &horzInfo, TRUE);
     TRACE("horzInfo=%s\n", debugscrollinfo(&horzInfo));
 
     /* Setting the horizontal scroll can change the listview size
@@ -1697,9 +1699,19 @@
 
     vertInfo.fMask = SIF_RANGE | SIF_PAGE;
     vertInfo.nMax = max(vertInfo.nMax - 1, 0);
-    SetScrollInfo(infoPtr->hwndSelf, SB_VERT, &vertInfo, TRUE);
+    dy = GetScrollPos(infoPtr->hwndSelf, SB_VERT);
+    dy -= SetScrollInfo(infoPtr->hwndSelf, SB_VERT, &vertInfo, TRUE);
     TRACE("vertInfo=%s\n", debugscrollinfo(&vertInfo));
 
+    /* Change of the range may have changed the scroll pos. If so move the content */
+    if (dx != 0 || dy != 0)
+    {
+        RECT listRect;
+        listRect = infoPtr->rcList;
+        ScrollWindowEx(infoPtr->hwndSelf, dx, dy, &listRect, &listRect, 0, 0,
+            SW_ERASE | SW_INVALIDATE);
+    }
+
     /* Update the Header Control */
     if (uView == LVS_REPORT)
     {