}
}
- --pos();
- plainErase();
+ if (hasPrevAtom() && prevAtom()->nargs() > 0) {
+ // let's require two backspaces for 'big stuff' and
+ // highlight on the first
+ left(true);
+ } else {
+ --pos();
+ plainErase();
+ }
return true;
}
case LFUN_MOUSE_RELEASE:
case LFUN_MOUSE_DOUBLE: {
CursorPos & pos = Cursor_.back();
- DispatchResult res = UNDISPATCHED;
- int x = 0, y = 0;
+ int x = 0;
+ int y = 0;
getPos(x, y);
if (x < cmd.x && hasPrevAtom()) {
- res = prevAtom().nucleus()->dispatch(cmd, pos.idx_, pos.pos_);
- if (res != UNDISPATCHED)
+ DispatchResult const res =
+ prevAtom().nucleus()->dispatch(cmd, pos.idx_, pos.pos_);
+ if (res.dispatched())
return res;
}
if (x > cmd.x && hasNextAtom()) {
- res = nextAtom().nucleus()->dispatch(cmd, pos.idx_, pos.pos_);
- if (res != UNDISPATCHED)
+ DispatchResult const res =
+ nextAtom().nucleus()->dispatch(cmd, pos.idx_, pos.pos_);
+ if (res.dispatched())
return res;
}
}
for (int i = Cursor_.size() - 1; i >= 0; --i) {
CursorPos & pos = Cursor_[i];
- DispatchResult res = pos.inset_->dispatch(cmd, pos.idx_, pos.pos_);
- if (res != UNDISPATCHED) {
- if (res == DISPATCHED_POP) {
+ DispatchResult const res =
+ pos.inset_->dispatch(cmd, pos.idx_, pos.pos_);
+ if (res.dispatched()) {
+ if (res.val() == FINISHED) {
Cursor_.shrink(i + 1);
selClear();
}
return res;
}
}
- return UNDISPATCHED;
+ return DispatchResult(false);
}