Piotr Caban : comctl32: Make iterator_remove_common_items working on one range iterators.
Alexandre Julliard
julliard at winehq.org
Tue Jun 28 17:25:14 CDT 2011
Module: wine
Branch: master
Commit: 8669fa7308ebddf83884bbd648dc6ef420f427e7
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8669fa7308ebddf83884bbd648dc6ef420f427e7
Author: Piotr Caban <piotr at codeweavers.com>
Date: Tue Jun 28 10:18:54 2011 +0200
comctl32: Make iterator_remove_common_items working on one range iterators.
---
dlls/comctl32/listview.c | 33 +++++++++++++++++++++++++++++++++
1 files changed, 33 insertions(+), 0 deletions(-)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index 1a71fed..033472c 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.lower<iter2->range.lower && iter1->range.upper>iter2->range.upper) ||
+ (iter1->range.lower>iter2->range.lower && iter1->range.upper<iter2->range.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);
More information about the wine-cvs
mailing list