diff --git a/src/Cursor.cpp b/src/Cursor.cpp index c1458dc8a7..09407a3853 100644 --- a/src/Cursor.cpp +++ b/src/Cursor.cpp @@ -1303,7 +1303,7 @@ void Cursor::plainInsert(MathAtom const & t) ++pos(); inset().setBuffer(bv_->buffer()); inset().initView(); - forceBufferUpdate(); + checkBufferStructure(); } diff --git a/src/DocIterator.cpp b/src/DocIterator.cpp index 352aa3a65e..a059ad18d2 100644 --- a/src/DocIterator.cpp +++ b/src/DocIterator.cpp @@ -226,6 +226,15 @@ CursorSlice const & DocIterator::innerTextSlice() const } +DocIterator DocIterator::getInnerText() const +{ + DocIterator texted = *this; + while (!texted.inTexted()) + texted.pop_back(); + return texted; +} + + pit_type DocIterator::lastpit() const { return inMathed() ? 0 : text()->paragraphs().size() - 1; diff --git a/src/DocIterator.h b/src/DocIterator.h index 74dd47438f..471f52d4be 100644 --- a/src/DocIterator.h +++ b/src/DocIterator.h @@ -167,6 +167,8 @@ public: Paragraph & innerParagraph() const; /// return the inner text slice. CursorSlice const & innerTextSlice() const; + /// returns a DocIterator for the containing text inset + DocIterator getInnerText() const; /// the first and last positions of a word at top cursor slice /// \warning only works within text! FontSpan locateWord(word_location const loc) const; diff --git a/src/TocBackend.cpp b/src/TocBackend.cpp index e47ca9b630..5599e1f362 100644 --- a/src/TocBackend.cpp +++ b/src/TocBackend.cpp @@ -17,6 +17,7 @@ #include "Buffer.h" #include "BufferParams.h" +#include "Cursor.h" #include "FloatList.h" #include "FuncRequest.h" #include "InsetList.h" @@ -266,8 +267,11 @@ shared_ptr TocBackend::builder(string const & type) // TocItem creation and update should be made in a dedicated function and // updateItem should be rewritten to uniformly update the matching items from // all TOCs. -bool TocBackend::updateItem(DocIterator const & dit) +bool TocBackend::updateItem(DocIterator const & dit_in) { + // we need a text + DocIterator dit = dit_in.getInnerText(); + if (dit.text()->getTocLevel(dit.pit()) == Layout::NOT_IN_TOC) return false;