mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
Fix bug #1839: Ctrl+arrows don't move to next/prev table cell.
Patch from Punyashloka Biswal. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@35812 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
9fbc3dd5ba
commit
ba19e8b5dd
@ -819,6 +819,26 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
|
||||
case LFUN_WORD_FORWARD_SELECT:
|
||||
needsUpdate |= cur.selHandle(cmd.action() == LFUN_WORD_FORWARD_SELECT);
|
||||
needsUpdate |= cursorForwardOneWord(cur);
|
||||
|
||||
if (!needsUpdate && oldTopSlice == cur.top()
|
||||
&& cur.boundary() == oldBoundary) {
|
||||
cur.undispatched();
|
||||
cmd = FuncRequest(LFUN_FINISHED_FORWARD);
|
||||
|
||||
// we will probably be moving out the inset, so we should execute
|
||||
// the depm-mechanism, but only when the cursor has a place to
|
||||
// go outside this inset, i.e. in a slice above.
|
||||
if (cur.depth() > 1 && cur.pos() == cur.lastpos()
|
||||
&& cur.pit() == cur.lastpit()) {
|
||||
// The cursor hasn't changed yet. To give the
|
||||
// DEPM the possibility of doing something we must
|
||||
// provide it with two different cursors.
|
||||
Cursor dummy = cur;
|
||||
dummy.pos() = dummy.pit() = 0;
|
||||
if (cur.bv().checkDepm(dummy, cur))
|
||||
cur.forceBufferUpdate();;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case LFUN_WORD_LEFT:
|
||||
@ -848,6 +868,27 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
|
||||
case LFUN_WORD_BACKWARD_SELECT:
|
||||
needsUpdate |= cur.selHandle(cmd.action() == LFUN_WORD_BACKWARD_SELECT);
|
||||
needsUpdate |= cursorBackwardOneWord(cur);
|
||||
|
||||
if (!needsUpdate && oldTopSlice == cur.top()
|
||||
&& cur.boundary() == oldBoundary) {
|
||||
cur.undispatched();
|
||||
cmd = FuncRequest(LFUN_FINISHED_BACKWARD);
|
||||
|
||||
// we will probably be moving out the inset, so we should execute
|
||||
// the depm-mechanism, but only when the cursor has a place to
|
||||
// go outside this inset, i.e. in a slice above.
|
||||
if (cur.depth() > 1 && cur.pos() == 0
|
||||
&& cur.pit() == 0) {
|
||||
// The cursor hasn't changed yet. To give the
|
||||
// DEPM the possibility of doing something we must
|
||||
// provide it with two different cursors.
|
||||
Cursor dummy = cur;
|
||||
dummy.pos() = cur.lastpos();
|
||||
dummy.pit() = cur.lastpit();
|
||||
if (cur.bv().checkDepm(dummy, cur))
|
||||
cur.forceBufferUpdate();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case LFUN_WORD_SELECT: {
|
||||
|
@ -3773,7 +3773,15 @@ void InsetTabular::doDispatch(Cursor & cur, FuncRequest & cmd)
|
||||
case LFUN_CHAR_RIGHT_SELECT:
|
||||
case LFUN_CHAR_RIGHT:
|
||||
case LFUN_CHAR_LEFT_SELECT:
|
||||
case LFUN_CHAR_LEFT: {
|
||||
case LFUN_CHAR_LEFT:
|
||||
case LFUN_WORD_FORWARD:
|
||||
case LFUN_WORD_FORWARD_SELECT:
|
||||
case LFUN_WORD_BACKWARD:
|
||||
case LFUN_WORD_BACKWARD_SELECT:
|
||||
case LFUN_WORD_RIGHT:
|
||||
case LFUN_WORD_RIGHT_SELECT:
|
||||
case LFUN_WORD_LEFT:
|
||||
case LFUN_WORD_LEFT_SELECT: {
|
||||
// determine whether we move to next or previous cell, where to enter
|
||||
// the new cell from, and which command to "finish" (i.e., exit the
|
||||
// inset) with:
|
||||
@ -3782,12 +3790,16 @@ void InsetTabular::doDispatch(Cursor & cur, FuncRequest & cmd)
|
||||
FuncCode finish_lfun;
|
||||
|
||||
if (act == LFUN_CHAR_FORWARD
|
||||
|| act == LFUN_CHAR_FORWARD_SELECT) {
|
||||
|| act == LFUN_CHAR_FORWARD_SELECT
|
||||
|| act == LFUN_WORD_FORWARD
|
||||
|| act == LFUN_WORD_FORWARD_SELECT) {
|
||||
next_cell = true;
|
||||
finish_lfun = LFUN_FINISHED_FORWARD;
|
||||
}
|
||||
else if (act == LFUN_CHAR_BACKWARD
|
||||
|| act == LFUN_CHAR_BACKWARD_SELECT) {
|
||||
|| act == LFUN_CHAR_BACKWARD_SELECT
|
||||
|| act == LFUN_WORD_BACKWARD
|
||||
|| act == LFUN_WORD_BACKWARD_SELECT) {
|
||||
next_cell = false;
|
||||
finish_lfun = LFUN_FINISHED_BACKWARD;
|
||||
}
|
||||
@ -3795,7 +3807,9 @@ void InsetTabular::doDispatch(Cursor & cur, FuncRequest & cmd)
|
||||
// table's direction.
|
||||
else {
|
||||
bool const right = act == LFUN_CHAR_RIGHT
|
||||
|| act == LFUN_CHAR_RIGHT_SELECT;
|
||||
|| act == LFUN_CHAR_RIGHT_SELECT
|
||||
|| act == LFUN_WORD_RIGHT
|
||||
|| act == LFUN_WORD_RIGHT_SELECT;
|
||||
next_cell = isRightToLeft(cur) != right;
|
||||
|
||||
if (lyxrc.visual_cursor)
|
||||
@ -3804,10 +3818,14 @@ void InsetTabular::doDispatch(Cursor & cur, FuncRequest & cmd)
|
||||
finish_lfun = right ? LFUN_FINISHED_RIGHT : LFUN_FINISHED_LEFT;
|
||||
}
|
||||
|
||||
bool const select = act == LFUN_CHAR_FORWARD_SELECT ||
|
||||
act == LFUN_CHAR_BACKWARD_SELECT ||
|
||||
act == LFUN_CHAR_RIGHT_SELECT ||
|
||||
act == LFUN_CHAR_LEFT_SELECT;
|
||||
bool const select = act == LFUN_CHAR_FORWARD_SELECT
|
||||
|| act == LFUN_CHAR_BACKWARD_SELECT
|
||||
|| act == LFUN_CHAR_RIGHT_SELECT
|
||||
|| act == LFUN_CHAR_LEFT_SELECT
|
||||
|| act == LFUN_WORD_FORWARD_SELECT
|
||||
|| act == LFUN_WORD_RIGHT_SELECT
|
||||
|| act == LFUN_WORD_BACKWARD_SELECT
|
||||
|| act == LFUN_WORD_LEFT_SELECT;
|
||||
|
||||
// If we have a multicell selection or we're
|
||||
// not doing some LFUN_*_SELECT thing anyway...
|
||||
|
Loading…
Reference in New Issue
Block a user