From 8669fa7308ebddf83884bbd648dc6ef420f427e7 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Tue, 28 Jun 2011 10:18:54 +0200 Subject: [PATCH] comctl32: Make iterator_remove_common_items working on one range iterators. --- dlls/comctl32/listview.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c index 1a71fed321d..033472cc8da 100644 --- a/dlls/comctl32/listview.c +++ b/dlls/comctl32/listview.c @@ -1501,6 +1501,39 @@ static BOOL iterator_visibleitems(ITERATOR *i, const LISTVIEW_INFO *infoPtr, HDC /* Passed iterators have to point on the first elements */ static BOOL iterator_remove_common_items(ITERATOR *iter1, ITERATOR *iter2) { + if(!iter1->ranges || !iter2->ranges) { + int lower, upper; + + if(iter1->ranges || iter2->ranges || + (iter1->range.lowerrange.lower && iter1->range.upper>iter2->range.upper) || + (iter1->range.lower>iter2->range.lower && iter1->range.upperrange.upper)) { + ERR("result is not a one range iterator\n"); + return FALSE; + } + + if(iter1->range.lower==-1 || iter2->range.lower==-1) + return TRUE; + + lower = iter1->range.lower; + upper = iter1->range.upper; + + if(lower < iter2->range.lower) + iter1->range.upper = iter2->range.lower; + else if(upper > iter2->range.upper) + iter1->range.lower = iter2->range.upper; + else + iter1->range.lower = iter1->range.upper = -1; + + if(iter2->range.lower < lower) + iter2->range.upper = lower; + else if(iter2->range.upper > upper) + iter2->range.lower = upper; + else + iter2->range.lower = iter2->range.upper = -1; + + return TRUE; + } + iterator_next(iter1); iterator_next(iter2);