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