- // The cursor hasn't changed yet. This happens when
- // you e.g. move out of an inset. And to give the
- // DEPM the possibility of doing something we must
- // provide it with two different cursors. (Lgb, vfr)
- dummy.pos() = dummy.pos() == 0 ? dummy.lastpos() : 0;
- dummy.pit() = dummy.pit() == 0 ? dummy.lastpit() : 0;
- updateNeeded |= bv().checkDepm(dummy, *this);
+ bool valid_destination = false;
+ for(; dummy.depth(); dummy.pop())
+ if (!dummy.atFirstOrLastRow(up)) {
+ valid_destination = true;
+ break;
+ }
+
+ // will a next dispatch follow and if there is a new
+ // dispatch will it move the cursor out ?
+ if (depth() > 1 && valid_destination) {
+ // The cursor hasn't changed yet. This happens when
+ // you e.g. move out of an inset. And to give the
+ // DEPM the possibility of doing something we must
+ // provide it with two different cursors. (Lgb, vfr)
+ dummy = *this;
+ dummy.pos() = dummy.pos() == 0 ? dummy.lastpos() : 0;
+ dummy.pit() = dummy.pit() == 0 ? dummy.lastpit() : 0;
+
+ updateNeeded |= bv().checkDepm(dummy, *this);
+ updateTextTargetOffset();
+ }