Jean-Marc Lasgouttes wrote:
> It would be nice to get a backtrace to see why these things are
> called. It is very weird.
>
> Label contents should not have anything to do with LFUN_GOTO_PARAGRAPH.

I can only provide the following "manual" backtrace:

insetcite.C:
1. InsetCitation::getScreenLabel
-> InsetCitation::generateLabel
-> getNatbibLabel
        -> buffer.fillWithBibKeys(bibkeys)

Buffer.C (fillWithBibKeys):
for (InsetIterator it = inset_iterator_begin(inset()); it; ++it) {
                if (it->lyxCode() == InsetBase::BIBTEX_CODE) {
                        InsetBibtex const & inset =
                                dynamic_cast<InsetBibtex const &>(*it);
                        inset.fillWithBibKeys(*this, keys);

Then InsetBibtex::fillWithBibKeys scans the databases.

Note that lyx 1.3 had some more tests in getNatbibLabel:

        // Only load the bibkeys once if we're loading up the buffer,
        // else load them afresh each time.
        map<Buffer const *, bool>::iterator lit = loading_buffer.find(buffer);
        if (lit == loading_buffer.end())
                loading_buffer[buffer] = true;

        bool loadkeys = !loading_buffer[buffer];
        if (!loadkeys) {
                CachedMap::iterator kit = cached_keys.find(buffer);
                loadkeys = kit == cached_keys.end();
        }

        if (loadkeys) {
                // build the keylist
[...]

In 1.4, it reads:

        // Only start the process off after the buffer is loaded from file.
        if (!buffer.fully_loaded())
                return string();

        typedef std::map<Buffer const *, biblio::InfoMap> CachedMap;
        static CachedMap cached_keys;

        // build the keylist
[...]


Maybe this is the culprit?

Jürgen

Reply via email to