X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBuffer.cpp;h=fdce444aefa313e43a41cf6ce1766ae0f72b9819;hb=b37929fdb33222bf55505343647838d0665a9e02;hp=119e26dacdb6939c0f26fa97fb38e1ed20f54fd5;hpb=ee475b62fad9c899e80aba8543cf680fedf1c5ed;p=lyx.git diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 119e26dacd..fdce444aef 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -354,6 +354,9 @@ public: /// whether the bibinfo cache is valid mutable bool bibinfo_cache_valid_; + /// + mutable bool need_update; + private: int word_count_; int char_count_; @@ -460,7 +463,7 @@ Buffer::Impl::Impl(Buffer * owner, FileName const & file, bool readonly_, internal_buffer(false), read_only(readonly_), file_fully_loaded(false), need_format_backup(false), ignore_parent(false), macro_lock(false), externally_modified_(false), bibinfo_cache_valid_(false), - word_count_(0), char_count_(0), blank_count_(0) + need_update(false), word_count_(0), char_count_(0), blank_count_(0) { refreshFileMonitor(); if (!cloned_buffer_) { @@ -624,10 +627,9 @@ void Buffer::cloneWithChildren(BufferMap & bufmap, CloneList_ptr clones) const // The clone needs its own DocumentClass, since running updateBuffer() will // modify it, and we would otherwise be sharing it with the original Buffer. buffer_clone->params().makeDocumentClass(true); - ErrorList el; cap::switchBetweenClasses( params().documentClassPtr(), buffer_clone->params().documentClassPtr(), - static_cast(buffer_clone->inset()), el); + static_cast(buffer_clone->inset())); bufmap[this] = buffer_clone; clones->insert(buffer_clone); @@ -669,10 +671,9 @@ Buffer * Buffer::cloneBufferOnly() const { // The clone needs its own DocumentClass, since running updateBuffer() will // modify it, and we would otherwise be sharing it with the original Buffer. buffer_clone->params().makeDocumentClass(true); - ErrorList el; cap::switchBetweenClasses( params().documentClassPtr(), buffer_clone->params().documentClassPtr(), - static_cast(buffer_clone->inset()), el); + static_cast(buffer_clone->inset())); clones->insert(buffer_clone); buffer_clone->d->clone_list_ = clones; @@ -960,6 +961,7 @@ int Buffer::readHeader(Lexer & lex) params().biblatex_citestyle.erase(); params().multibib.erase(); params().lineno_opts.clear(); + params().spellignore().clear(); for (int i = 0; i < 4; ++i) { params().user_defined_bullet(i) = ITEMIZE_DEFAULTS[i]; @@ -988,7 +990,7 @@ int Buffer::readHeader(Lexer & lex) << token << '\''); string const result = - params().readToken(lex, token, d->filename.onlyPath()); + params().readToken(lex, token, d->filename); if (!result.empty()) { if (token == "\\textclass") { d->layout_position = result; @@ -2941,16 +2943,9 @@ void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr) undo().recordUndoBufferParams(CursorData()); branch_list.add(branch_name); branch = branch_list.find(branch_name); - string x11hexname; - string const bcolor = branch->color(); - if (bcolor.size() == 7 && bcolor[0] == '#') - x11hexname = bcolor; - else { - bool const darkmode = theApp() ? theApp()->isInDarkMode() : false; - x11hexname = lcolor.getX11HexName(lcolor.getFromLyXName(bcolor), darkmode); - } - docstring const str = branch_name + ' ' + from_ascii(x11hexname); - lyx::dispatch(FuncRequest(LFUN_SET_COLOR, str)); + if (branch) + // needed to update the color table for dark mode + branch->setColors("background", "background"); dr.setError(false); dr.screenUpdate(Update::Force); } @@ -3542,6 +3537,9 @@ void Buffer::collectChildren(ListOfBuffers & children, bool grand_children) cons // loop over children for (auto const & p : d->children_positions) { Buffer * child = const_cast(p.first); + // This can happen when called during GUI operations + if (!theBufferList().isLoaded(child)) + continue; // No duplicates ListOfBuffers::const_iterator bit = find(children.begin(), children.end(), child); if (bit != children.end()) @@ -5013,6 +5011,8 @@ void Buffer::updateBuffer(UpdateScope scope, UpdateType utype) const cbuf.tocBackend().update(true, utype); if (scope == UpdateMaster) cbuf.structureChanged(); + + d->need_update = false; } @@ -5295,6 +5295,18 @@ void Buffer::updateBuffer(ParIterator & parit, UpdateType utype, bool const dele } +void Buffer::forceUpdate() const +{ + d->need_update = true; +} + + +bool Buffer::needUpdate() const +{ + return d->need_update; +} + + int Buffer::spellCheck(DocIterator & from, DocIterator & to, WordLangTuple & word_lang, docstring_list & suggestions) const {