]> git.lyx.org Git - lyx.git/blobdiff - src/Text2.cpp
fix a crash when the inset containing the new word at cursor is deleted
[lyx.git] / src / Text2.cpp
index d83402b3c37edd145b5f4f0ce468a93f56a7cbe0..24a3317cf7cafcf14c7438dcd739b22574ea3d8b 100644 (file)
 #include "CutAndPaste.h"
 #include "DispatchResult.h"
 #include "ErrorList.h"
-#include "FuncRequest.h"
 #include "Language.h"
 #include "Layout.h"
 #include "Lexer.h"
-#include "LyXFunc.h"
+#include "LyX.h"
 #include "LyXRC.h"
 #include "Paragraph.h"
 #include "ParagraphParameters.h"
@@ -94,7 +93,7 @@ FontInfo Text::layoutFont(pit_type const pit) const
 
        FontInfo font = layout.font;
        // Realize with the fonts of lesser depth.
-       //font.realize(outerFont(pit, paragraphs()));
+       //font.realize(outerFont(pit));
        font.realize(owner_->buffer().params().getFont().fontInfo());
 
        return font;
@@ -144,7 +143,7 @@ void Text::setCharFont(pit_type pit,
                while (!layoutfont.resolved() &&
                       tp != pit_type(paragraphs().size()) &&
                       pars_[tp].getDepth()) {
-                       tp = outerHook(tp, paragraphs());
+                       tp = outerHook(tp);
                        if (tp != pit_type(paragraphs().size()))
                                layoutfont.realize(pars_[tp].layout().font);
                }
@@ -231,7 +230,7 @@ void Text::setLayout(Cursor & cur, docstring const & layout)
        pit_type undopit = undoSpan(end - 1);
        recUndo(cur, start, undopit - 1);
        setLayout(start, end, layout);
-       cur.buffer()->updateLabels();
+       cur.forceBufferUpdate();
 }
 
 
@@ -290,7 +289,7 @@ void Text::changeDepth(Cursor & cur, DEPTH_CHANGE type)
        }
        // this handles the counter labels, and also fixes up
        // depth values for follow-on (child) paragraphs
-       cur.buffer()->updateLabels();
+       cur.forceBufferUpdate();
 }
 
 
@@ -357,6 +356,9 @@ void Text::setFont(BufferView const & bv, CursorSlice const & begin,
                Font f = tm.displayFont(pit, pos);
                f.update(font, language, toggleall);
                setCharFont(pit, pos, f, tm.font_);
+               // font change may change language... 
+               // spell checker has to know that
+               pars_[pit].requestSpellCheck(pos);
        }
 }
 
@@ -436,8 +438,8 @@ void Text::setLabelWidthStringToSequence(pit_type const par_offset,
 {
        pit_type offset = par_offset;
        // Find first of same layout in sequence
-       while (!isFirstInSequence(offset, pars_)) {
-               offset = depthHook(offset, pars_, pars_[offset].getDepth());
+       while (!isFirstInSequence(offset)) {
+               offset = depthHook(offset, pars_[offset].getDepth());
        }
 
        // now apply label width string to every par
@@ -548,12 +550,12 @@ void Text::setCursor(CursorSlice & cur, pit_type par, pos_type pos)
 
        // None of these should happen, but we're scaredy-cats
        if (pos < 0) {
-               lyxerr << "dont like -1" << endl;
+               lyxerr << "don't like -1" << endl;
                LASSERT(false, /**/);
        }
 
        if (pos > para.size()) {
-               lyxerr << "dont like 1, pos: " << pos
+               lyxerr << "don't like 1, pos: " << pos
                       << " size: " << para.size()
                       << " par: " << par << endl;
                LASSERT(false, /**/);
@@ -618,7 +620,7 @@ bool Text::checkAndActivateInsetVisual(Cursor & cur, bool movingForward, bool mo
 bool Text::cursorBackward(Cursor & cur)
 {
        // Tell BufferView to test for FitCursor in any case!
-       cur.updateFlags(Update::FitCursor);
+       cur.screenUpdateFlags(Update::FitCursor);
 
        // not at paragraph start?
        if (cur.pos() > 0) {
@@ -686,7 +688,7 @@ bool Text::cursorVisRight(Cursor & cur, bool skip_inset)
 bool Text::cursorForward(Cursor & cur)
 {
        // Tell BufferView to test for FitCursor in any case!
-       cur.updateFlags(Update::FitCursor);
+       cur.screenUpdateFlags(Update::FitCursor);
 
        // not at paragraph end?
        if (cur.pos() != cur.lastpos()) {
@@ -917,8 +919,9 @@ void Text::deleteEmptyParagraphMechanism(pit_type first, pit_type last, bool tra
                        }
                }
 
-               // don't delete anything if this is the only remaining paragraph within the given range
-               // note: Text::acceptOrRejectChanges() sets the cursor to 'first' after calling DEPM
+               // don't delete anything if this is the only remaining paragraph
+               // within the given range. Note: Text::acceptOrRejectChanges()
+               // sets the cursor to 'first' after calling DEPM
                if (first == last)
                        continue;