}
+bool DocIterator::hasPart(DocIterator const & it) const
+{
+ // it can't be a part if it is larger
+ if (it.size() > size())
+ return false;
+
+ // as inset adresses are the 'last' level
+ return &it.back().inset() == &operator[](it.size() - 1).inset();
+}
+
+
std::ostream & operator<<(std::ostream & os, DocIterator const & dit)
{
for (size_t i = 0, n = dit.size(); i != n; ++i)
/// move backward one inset
void backwardInset();
+ /// are we some 'extension' (i.e. deeper nested) of the given iterator
+ bool hasPart(DocIterator const & it) const;
+
/// output
friend std::ostream &
operator<<(std::ostream & os, DocIterator const & cur);
if (cmd.button() == mouse_button::button1) {
LCursor & bvcur = cur.bv().cursor();
if (abs(cmd.x - first_x) + abs(cmd.y - first_y) > 4
- && cur.size() <= bvcur.anchor_.size()) {
+ && bvcur.anchor_.hasPart(cur)) {
first_x = cmd.x;
first_y = cmd.y;
// ignore motions deeper nested than the real anchor
LCursor & bvcur = cur.bv().cursor();
- if (bvcur.anchor_.size() < cur.size())
+ if (!bvcur.anchor_.hasPart(cur))
break;
-
+
CursorSlice old = cur.top();
setCursorFromCoordinates(cur, cmd.x, cmd.y);