BOOST_ASSERT(cur.text() == this);
BufferView * bv = &cur.bv();
CursorSlice oldTopSlice = cur.top();
+ bool oldBoundary = cur.boundary();
bool sel = cur.selection();
bool needsUpdate = !lyxaction.funcHasFlag(cmd.action, LyXAction::NoUpdate);
needsUpdate = cursorLeft(cur);
else
needsUpdate = cursorRight(cur);
- if (!needsUpdate && oldTopSlice == cur.top()) {
+
+ if (!needsUpdate && oldTopSlice == cur.top()
+ && cur.boundary() == oldBoundary) {
cur.undispatched();
cmd = FuncRequest(LFUN_FINISHED_RIGHT);
}
needsUpdate = cursorRight(cur);
else
needsUpdate = cursorLeft(cur);
- if (oldTopSlice == cur.top()) {
+
+ if (!needsUpdate && oldTopSlice == cur.top()
+ && cur.boundary() == oldBoundary) {
cur.undispatched();
cmd = FuncRequest(LFUN_FINISHED_LEFT);
}
update(cur);
//lyxerr << "handle LFUN_UP[SEL]:\n" << cur << endl;
cur.selHandle(cmd.action == LFUN_UPSEL);
+
needsUpdate = cursorUp(cur);
- if (oldTopSlice == cur.top()) {
+ if (!needsUpdate && oldTopSlice == cur.top()
+ && cur.boundary() == oldBoundary) {
cur.undispatched();
cmd = FuncRequest(LFUN_FINISHED_UP);
}
//lyxerr << "handle LFUN_DOWN[SEL]:\n" << cur << endl;
cur.selHandle(cmd.action == LFUN_DOWNSEL);
needsUpdate = cursorDown(cur);
- if (oldTopSlice == cur.top()) {
+ if (!needsUpdate && oldTopSlice == cur.top() &&
+ cur.boundary() == oldBoundary)
+ {
cur.undispatched();
cmd = FuncRequest(LFUN_FINISHED_DOWN);
}
cur.clearSelection();
string const clip = bv->getClipboard();
if (!clip.empty()) {
+ recordUndo(cur);
if (cmd.argument == "paragraph")
insertStringAsParagraphs(cur, clip);
else
cur.selection() = false;
} else {
cur.undispatched();
- cmd = FuncRequest(LFUN_FINISHED_LEFT);
+ cmd = FuncRequest(LFUN_FINISHED_RIGHT);
}
break;
default:
- lyxerr << BOOST_CURRENT_FUNCTION
- << " Not DISPATCHED by LyXText" << endl;
+ lyxerr[Debug::ACTION]
+ << BOOST_CURRENT_FUNCTION
+ << ": Command " << cmd
+ << " not DISPATCHED by LyXText" << endl;
cur.undispatched();
break;
}