diff options
| -rw-r--r-- | ChangeLog | 5 | ||||
| -rw-r--r-- | src/document-subset.cpp | 35 |
2 files changed, 22 insertions, 18 deletions
@@ -1,3 +1,8 @@ +2006-05-16 Jon A. Cruz <jon@joncruz.org> + + * src/document-subset.cpp: + Corrected ordering of children in subset. + 2006-05-15 Jon A. Cruz <jon@joncruz.org> * src/Makefile_insert, src/desktop.cpp, src/desktop.h, src/layer-manager.cpp, src/menus-skeleton.h, src/verbs.cpp, diff --git a/src/document-subset.cpp b/src/document-subset.cpp index 4e7e9f694..4ef547320 100644 --- a/src/document-subset.cpp +++ b/src/document-subset.cpp @@ -57,29 +57,28 @@ struct DocumentSubset::Relations : public GC::Managed<GC::ATOMIC>, } else { Siblings::const_iterator first=children.begin(); Siblings::const_iterator last=children.end() - 1; - if ( children.size() == 1 ) { - int pos = sp_object_compare_position(*first, obj); + + while ( first != last ) { + Siblings::const_iterator mid = first + ( last - first + 1 ) / 2; + int pos = sp_object_compare_position(*mid, obj); if ( pos < 0 ) { - // All good. + first = mid; } else if ( pos > 0 ) { - last++; + if ( last == mid ) { + last = mid - 1; // already at the top limit + } else { + last = mid; + } } else { g_assert_not_reached(); } - } else { - while ( first != last ) { - Siblings::const_iterator mid=first + ( last - first + 1 ) / 2; - int pos=sp_object_compare_position(*mid, obj); - if ( pos < 0 ) { - first = mid; - } else if ( pos > 0 ) { - if ( last == mid ) { - break; - } - last = mid; - } else { - g_assert_not_reached(); - } + } + + if ( first == last ) { + // compare to the single possiblity left + int pos = sp_object_compare_position(*last, obj); + if ( pos < 0 ) { + last++; } } |
