horzInfo.fMask = SIF_RANGE | SIF_PAGE;
horzInfo.nMax = max(horzInfo.nMax - 1, 0);
+#ifdef __REACTOS__ /* CORE-16466 part 1 of 4 */
+ horzInfo.nMax = (horzInfo.nPage == 0 ? 0 : horzInfo.nMax);
+#endif
dx = GetScrollPos(infoPtr->hwndSelf, SB_HORZ);
dx -= SetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &horzInfo, TRUE);
TRACE("horzInfo=%s\n", debugscrollinfo(&horzInfo));
ZeroMemory(&vertInfo, sizeof(SCROLLINFO));
vertInfo.cbSize = sizeof(SCROLLINFO);
+#ifdef __REACTOS__ /* CORE-16466 part 2 of 4 */
+ vertInfo.nPage = max((infoPtr->rcList.bottom - infoPtr->rcList.top), 0);
+#else
vertInfo.nPage = infoPtr->rcList.bottom - infoPtr->rcList.top;
+#endif
if (infoPtr->uView == LV_VIEW_DETAILS)
{
+#ifdef __REACTOS__ /* CORE-16466 part 3 of 4 */
+ if (vertInfo.nPage != 0)
+ {
+ vertInfo.nMax = infoPtr->nItemCount;
+
+ /* scroll by at least one page */
+ if (vertInfo.nPage < infoPtr->nItemHeight)
+ vertInfo.nPage = infoPtr->nItemHeight;
+
+ if (infoPtr->nItemHeight > 0)
+ vertInfo.nPage /= infoPtr->nItemHeight;
+ }
+#else
vertInfo.nMax = infoPtr->nItemCount;
/* scroll by at least one page */
if (infoPtr->nItemHeight > 0)
vertInfo.nPage /= infoPtr->nItemHeight;
+#endif
}
else if (infoPtr->uView != LV_VIEW_LIST) /* LV_VIEW_ICON, or LV_VIEW_SMALLICON */
{
vertInfo.fMask = SIF_RANGE | SIF_PAGE;
vertInfo.nMax = max(vertInfo.nMax - 1, 0);
+#ifdef __REACTOS__ /* CORE-16466 part 4 of 4 */
+ vertInfo.nMax = (vertInfo.nPage == 0 ? 0 : vertInfo.nMax);
+#endif
dy = GetScrollPos(infoPtr->hwndSelf, SB_VERT);
dy -= SetScrollInfo(infoPtr->hwndSelf, SB_VERT, &vertInfo, TRUE);
TRACE("vertInfo=%s\n", debugscrollinfo(&vertInfo));
}
/* Calculate the non client area for resizes, as this is used in the copy region */
- if (!(WinPos.flags & SWP_NOSIZE))
+ if ((WinPos.flags & (SWP_NOSIZE | SWP_FRAMECHANGED)) != SWP_NOSIZE)
{
VisBeforeJustClient = VIS_ComputeVisibleRegion(Window, TRUE, FALSE,
(Window->style & WS_CLIPSIBLINGS) ? TRUE : FALSE);
*/
CopyRgn = IntSysCreateRectpRgn(0, 0, 0, 0);
- if (WinPos.flags & SWP_NOSIZE)
+ if ((WinPos.flags & SWP_NOSIZE) && (WinPos.flags & SWP_NOCLIENTSIZE))
RgnType = IntGdiCombineRgn(CopyRgn, VisAfter, VisBefore, RGN_AND);
else if (VisBeforeJustClient != NULL)
{
RgnType = IntGdiCombineRgn(CopyRgn, VisAfter, VisBeforeJustClient, RGN_AND);
- REGION_Delete(VisBeforeJustClient);
+ }
+
+ if (VisBeforeJustClient != NULL)
+ {
+ REGION_Delete(VisBeforeJustClient);
}
/* Now use in copying bits which are in the update region. */