X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FText3.cpp;h=b5bdc3b4ec0816027853d61ae8722b37fcb9e7dc;hb=1797f5218b8819874f9dbe97b44445b3b5d598a0;hp=c6674850cfb460b69ba3eaadcca43b8fc13fd5b3;hpb=2a96bf93b2c0233e6e3b00eb338523a314b37286;p=lyx.git diff --git a/src/Text3.cpp b/src/Text3.cpp index c6674850cf..b5bdc3b4ec 100644 --- a/src/Text3.cpp +++ b/src/Text3.cpp @@ -633,16 +633,26 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) case LFUN_WORD_RIGHT: case LFUN_WORD_RIGHT_SELECT: - //FIXME: for visual cursor mode, really move right - if (reverseDirectionNeeded(cur)) { - cmd.action = cmd.action == LFUN_WORD_RIGHT_SELECT ? - LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD; + if (lyxrc.visual_cursor) { + needsUpdate |= cur.selHandle(cmd.action == LFUN_WORD_RIGHT_SELECT); + needsUpdate |= cursorVisRightOneWord(cur); + if (!needsUpdate && oldTopSlice == cur.top() + && cur.boundary() == oldBoundary) { + cur.undispatched(); + cmd = FuncRequest(LFUN_FINISHED_RIGHT); + } } else { - cmd.action = cmd.action == LFUN_WORD_RIGHT_SELECT ? - LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD; + if (reverseDirectionNeeded(cur)) { + cmd.action = cmd.action == LFUN_WORD_RIGHT_SELECT ? + LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD; + } else { + cmd.action = cmd.action == LFUN_WORD_RIGHT_SELECT ? + LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD; + } + dispatch(cur, cmd); + return; } - dispatch(cur, cmd); - return; + break; case LFUN_WORD_FORWARD: case LFUN_WORD_FORWARD_SELECT: @@ -652,16 +662,26 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) case LFUN_WORD_LEFT: case LFUN_WORD_LEFT_SELECT: - //FIXME: for visual cursor mode, really move left - if (reverseDirectionNeeded(cur)) { - cmd.action = cmd.action == LFUN_WORD_LEFT_SELECT ? - LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD; + if (lyxrc.visual_cursor) { + needsUpdate |= cur.selHandle(cmd.action == LFUN_WORD_LEFT_SELECT); + needsUpdate |= cursorVisLeftOneWord(cur); + if (!needsUpdate && oldTopSlice == cur.top() + && cur.boundary() == oldBoundary) { + cur.undispatched(); + cmd = FuncRequest(LFUN_FINISHED_LEFT); + } } else { - cmd.action = cmd.action == LFUN_WORD_LEFT_SELECT ? - LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD; + if (reverseDirectionNeeded(cur)) { + cmd.action = cmd.action == LFUN_WORD_LEFT_SELECT ? + LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD; + } else { + cmd.action = cmd.action == LFUN_WORD_LEFT_SELECT ? + LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD; + } + dispatch(cur, cmd); + return; } - dispatch(cur, cmd); - return; + break; case LFUN_WORD_BACKWARD: case LFUN_WORD_BACKWARD_SELECT: @@ -853,14 +873,20 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) break; case LFUN_INSET_SETTINGS: { - // if there is an inset at cursor, access this - Inset * inset = cur.nextInset(); - if (inset) { - inset->showInsetDialog(bv); + Inset & inset = cur.inset(); + if (cmd.getArg(0) == insetName(inset.lyxCode())) { + // This inset dialog has been explicitely requested. + inset.showInsetDialog(bv); + break; + } + // else, if there is an inset at the cursor, access this + Inset * next_inset = cur.nextInset(); + if (next_inset) { + next_inset->showInsetDialog(bv); break; } - // if not work, access the underlying inset. - cur.inset().showInsetDialog(bv); + // if not then access the underlying inset. + inset.showInsetDialog(bv); break; } @@ -981,15 +1007,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) break; } - case LFUN_SERVER_GET_FONT: - if (cur.current_font.fontInfo().shape() == ITALIC_SHAPE) - cur.message(from_ascii("E")); - else if (cur.current_font.fontInfo().shape() == SMALLCAPS_SHAPE) - cur.message(from_ascii("N")); - else - cur.message(from_ascii("0")); - break; - case LFUN_SERVER_GET_LAYOUT: cur.message(cur.paragraph().layout().name()); break; @@ -2184,7 +2201,6 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd, case LFUN_CHARS_TRANSPOSE: case LFUN_SERVER_GET_XY: case LFUN_SERVER_SET_XY: - case LFUN_SERVER_GET_FONT: case LFUN_SERVER_GET_LAYOUT: case LFUN_LAYOUT: case LFUN_DATE_INSERT: