]> git.lyx.org Git - lyx.git/blobdiff - src/Text3.cpp
Merge branch 'master' of git.lyx.org:lyx
[lyx.git] / src / Text3.cpp
index 9edda1b65267f02126d01bafbb82103ed736845d..0467aa8b69f4fa26dac881bbd683894140d23f2c 100644 (file)
@@ -178,7 +178,7 @@ static void mathDispatch(Cursor & cur, FuncRequest const & cmd)
                        LASSERT(cur.inMathed(), return);
                        cur.pos() = 0;
                        cur.resetAnchor();
-                       cur.setSelection(true);
+                       cur.selection(true);
                        cur.pos() = cur.lastpos();
                        if (cmd.action() != LFUN_MATH_MODE)
                                // LFUN_MATH_MODE has a different meaning in math mode
@@ -370,7 +370,7 @@ static void outline(OutlineOp mode, Cursor & cur)
        ParagraphList & pars = buf.text().paragraphs();
        ParagraphList::iterator const bgn = pars.begin();
        // The first paragraph of the area to be copied:
-       ParagraphList::iterator start = next(bgn, pit);
+       ParagraphList::iterator start = lyx::next(bgn, pit);
        // The final paragraph of area to be copied:
        ParagraphList::iterator finish = start;
        ParagraphList::iterator const end = pars.end();
@@ -808,7 +808,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                ParagraphList & pars = buf.text().paragraphs();
                ParagraphList::iterator bgn = pars.begin();
                // The first paragraph of the area to be selected:
-               ParagraphList::iterator start = next(bgn, pit);
+               ParagraphList::iterator start = lyx::next(bgn, pit);
                // The final paragraph of area to be selected:
                ParagraphList::iterator finish = start;
                ParagraphList::iterator end = pars.end();
@@ -1048,22 +1048,11 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
 
        case LFUN_CHAR_DELETE_FORWARD:
                if (!cur.selection()) {
-                       bool was_separator = cur.paragraph().isEnvSeparator(cur.pos());
                        if (cur.pos() == cur.paragraph().size())
                                // Par boundary, force full-screen update
                                singleParUpdate = false;
                        needsUpdate |= erase(cur);
                        cur.resetAnchor();
-                       if (was_separator && cur.pos() == cur.paragraph().size()
-                           && (!cur.paragraph().layout().isEnvironment()
-                               || cur.paragraph().size() > 0)) {
-                               // Force full-screen update
-                               singleParUpdate = false;
-                               needsUpdate |= erase(cur);
-                               cur.resetAnchor();
-                       }
-                       // It is possible to make it a lot faster still
-                       // just comment out the line below...
                } else {
                        cutSelection(cur, true, false);
                        singleParUpdate = false;
@@ -1097,6 +1086,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                cap::replaceSelection(cur);
                pit_type pit = cur.pit();
                Paragraph const & par = pars_[pit];
+               bool lastpar = (pit == pit_type(pars_.size() - 1));
+               Paragraph const & nextpar = lastpar ? par : pars_[pit + 1];
                pit_type prev = pit;
                if (pit > 0) {
                        if (!pars_[pit - 1].layout().isEnvironment())
@@ -1105,25 +1096,28 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                                prev = pit - 1;
                }
                if (prev < pit && cur.pos() == par.beginOfBody()
-                   && !par.isEnvSeparator(cur.pos())
+                   && !par.size() && !par.isEnvSeparator(cur.pos())
                    && !par.layout().isCommand()
                    && pars_[prev].layout() != par.layout()
-                   && pars_[prev].layout().isEnvironment()) {
+                   && pars_[prev].layout().isEnvironment()
+                   && !nextpar.isEnvSeparator(nextpar.beginOfBody())) {
                        if (par.layout().isEnvironment()
                            && pars_[prev].getDepth() == par.getDepth()) {
                                docstring const layout = par.layout().name();
                                DocumentClass const & tc = bv->buffer().params().documentClass();
                                lyx::dispatch(FuncRequest(LFUN_LAYOUT, tc.plainLayout().name()));
-                               lyx::dispatch(FuncRequest(LFUN_SEPARATOR_INSERT, "parbreak"));
+                               lyx::dispatch(FuncRequest(LFUN_SEPARATOR_INSERT, "plain"));
                                lyx::dispatch(FuncRequest(LFUN_PARAGRAPH_BREAK, "inverse"));
                                lyx::dispatch(FuncRequest(LFUN_LAYOUT, layout));
                        } else {
-                               lyx::dispatch(FuncRequest(LFUN_SEPARATOR_INSERT, "parbreak"));
+                               lyx::dispatch(FuncRequest(LFUN_SEPARATOR_INSERT, "plain"));
                                breakParagraph(cur);
                        }
                        Font const f(inherit_font, cur.current_font.language());
                        pars_[cur.pit() - 1].resetFonts(f);
                } else {
+                       if (par.isEnvSeparator(cur.pos()))
+                               cur.posForward();
                        breakParagraph(cur, cmd.argument() == "inverse");
                }
                cur.resetAnchor();
@@ -1667,6 +1661,9 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
 
                tm->setCursorFromCoordinates(cur, cmd.x(), y);
                cur.setTargetX(cmd.x());
+               // Don't allow selecting a separator inset
+               if (cur.pos() && cur.paragraph().isEnvSeparator(cur.pos() - 1))
+                       cur.posBackward();
                if (cmd.y() >= wh)
                        lyx::dispatch(FuncRequest(LFUN_DOWN_SELECT));
                else if (cmd.y() < 0)
@@ -1681,7 +1678,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                // We continue with our existing selection or start a new one, so don't
                // reset the anchor.
                bvcur.setCursor(cur);
-               bvcur.setSelection(true);
+               bvcur.selection(true);
                if (cur.top() == old) {
                        // We didn't move one iota, so no need to update the screen.
                        cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
@@ -2063,7 +2060,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        cur.push(*inset);
                        cur.top().pos() = cur.top().lastpos();
                        cur.resetAnchor();
-                       cur.setSelection(true);
+                       cur.selection(true);
                        cur.top().pos() = 0;
                }
                break;
@@ -2439,7 +2436,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
 
        case LFUN_ESCAPE:
                if (cur.selection()) {
-                       cur.setSelection(false);
+                       cur.selection(false);
                } else {
                        cur.undispatched();
                        // This used to be LFUN_FINISHED_RIGHT, I think FORWARD is more
@@ -2724,7 +2721,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_CAPTION_INSERT: {
                code = CAPTION_CODE;
                string arg = cmd.getArg(0);
-               bool varia = arg != "LongTableNoNumber"
+               bool varia = arg != "Unnumbered"
                        && cur.inset().allowsCaptionVariation(arg);
                // not allowed in description items,
                // and in specific insets
@@ -3112,7 +3109,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                docstring layout = cmd.argument();
                if (layout.empty())
                        layout = tclass.defaultLayoutName();
-               enable = !cur.inset().forcePlainLayout() && tclass.hasLayout(layout);
+               enable = !owner_->forcePlainLayout() && tclass.hasLayout(layout);
 
                flag.setOnOff(layout == cur.paragraph().layout().name());
                break;
@@ -3148,7 +3145,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_PARAGRAPH_PARAMS:
        case LFUN_PARAGRAPH_PARAMS_APPLY:
        case LFUN_PARAGRAPH_UPDATE:
-               enable = cur.inset().allowParagraphCustomization();
+               enable = owner_->allowParagraphCustomization();
                break;
 
        // FIXME: why are accent lfuns forbidden with pass_thru layouts?