... continuing ...

In LyXFunc::dispatch():

L950:
       case LFUN_BUILD_PROGRAM:
           LASSERT(lyx_view_ && buffer, /**/);
           buffer->doExport("program", true);
           break;

       case LFUN_BUFFER_CHKTEX:
           LASSERT(lyx_view_ && buffer, /**/);
           buffer->runChktex();
           break;

       case LFUN_BUFFER_EXPORT:
           LASSERT(lyx_view_ && buffer, /**/);
           if (argument == "custom")
               dispatch(FuncRequest(LFUN_DIALOG_SHOW, "sendto"));
           else
               buffer->doExport(argument, false);
           break;

       case LFUN_BUFFER_EXPORT_CUSTOM: {
           LASSERT(lyx_view_ && buffer, /**/);

isn't it 'doc_buffer' instead of 'buffer', in all of the above ?

Also here:

       case LFUN_BUFFER_AUTO_SAVE:
           buffer->autoSave();
           break;

L1053:

       // --- version control -------------------------------
       case LFUN_VC_REGISTER:
           LASSERT(lyx_view_ && buffer, /**/);
           if (!ensureBufferClean(lyx_view_->documentBufferView()))

and following VC_* LFUNs, all asserts are on buffer ( == current), but code seems to work on documentBuffer.

L1313:
       case LFUN_BUFFER_CHILD_OPEN: {
           LASSERT(lyx_view_ && buffer, /**/);
           FileName filename = makeAbsPath(argument, buffer->filePath());
           lyx_view_->documentBufferView()->saveBookmark(false);

Guess we want to open the child of the doc_buffer, don't we ? ('buffer' ==> 'doc_buffer')

L1384:

       case LFUN_COMMAND_SEQUENCE: {
           // argument contains ';'-terminated commands
           string arg = argument;
           if (theBufferList().isLoaded(buffer))
               buffer->undo().beginUndoGroup();
           while (!arg.empty()) {
               string first;
               arg = split(arg, first, ';');
               FuncRequest func(lyxaction.lookupFunc(first));
               func.origin = cmd.origin;
               dispatch(func);
           }
           if (theBufferList().isLoaded(buffer))
               buffer->undo().endUndoGroup();
           break;
       }

we don't know if the sequence of LFUN is going to affect what buffer (or both ?), so perhaps we want to do beginUndoGroup() and endUndoGroup() on both 'buffer' and 'doc_buffer' (if they are != 0 and isLoaded()) ?

After the while() loop dispatching LFUNs, I can't imagine what may happen (but this may not be allowed to happen of course) if one of those LFUNs closed the current or document buffer.

L1520:

       case LFUN_LAYOUT_MODULES_CLEAR: {
           LASSERT(lyx_view_ && lyx_view_->documentBufferView(), /**/);
DocumentClass const * const oldClass = buffer->params().documentClassPtr(); lyx_view_->documentBufferView()->cursor().recordUndoFullDocument();
           buffer->params().clearLayoutModules();
           buffer->params().makeDocumentClass();

half code working on doc_buffer, half on buffer ?

Same question on LFUN_LAYOUT_MODULE_ADD, and LFUN_TEXTCLASS_APPLY

L1631:
       case LFUN_VC_COMMAND: {
           string flag = cmd.getArg(0);
           if (buffer && contains(flag, 'R')
               && !ensureBufferClean(lyx_view_->documentBufferView()))
               break;

mix of buffer and documentBV() ?

finally, L1674:

default:
...
           if (theBufferList().isLoaded(buffer))
               buffer->undo().beginUndoGroup();

and later, all dispatch goes to currentBV() and/or current buffer (I think).

Hope these comments help (apologies for the length, it was not expected).

   T.

Reply via email to