]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetBranch.cpp
listerrors.lyx : Update a link.
[lyx.git] / src / insets / InsetBranch.cpp
index 459941a8c65179fd82035b157f19d86e278ae8dc..6ab2fb79e73e5712a08c3face65b7bafc933eb6c 100644 (file)
@@ -126,18 +126,26 @@ void InsetBranch::doDispatch(Cursor & cur, FuncRequest & cmd)
        }
        case LFUN_BRANCH_ACTIVATE:
        case LFUN_BRANCH_DEACTIVATE: {
-               // FIXME: I do not like this cast, but have no other idea...
-               Buffer const * buf = buffer().masterBuffer();
-               BranchList const & branchlist = buf->params().branchlist();
-               Branch * our_branch = const_cast<Branch *>(branchlist.find(params_.branch));
-               if (!our_branch) {
+               Buffer * buf = const_cast<Buffer *>(buffer().masterBuffer());
+               // is the branch in our master buffer?
+               bool branch_in_master = (buf != &buffer());
+
+               Branch * our_branch = buf->params().branchlist().find(params_.branch);
+               if (branch_in_master && !our_branch) {
                        // child only?
                        our_branch = buffer().params().branchlist().find(params_.branch);
                        if (!our_branch)
                                break;
+                       branch_in_master = false;
                }
                bool const activate = (cmd.action() == LFUN_BRANCH_ACTIVATE);
                if (our_branch->isSelected() != activate) {
+                       // FIXME If the branch is in the master document, we cannot
+                       // call recordUndo..., becuase the master may be hidden, and
+                       // the code presently assumes that hidden documents can never
+                       // be dirty. See GuiView::closeBufferAll(), for example.
+                       if (!branch_in_master)
+                               buffer().undo().recordUndoFullDocument(cur);
                        our_branch->setSelected(activate);
                        cur.forceBufferUpdate();
                }
@@ -230,8 +238,12 @@ int InsetBranch::docbook(odocstream & os,
 
 docstring InsetBranch::xhtml(XHTMLStream & xs, OutputParams const & rp) const
 {
-       if (isBranchSelected())
-               xhtmlParagraphs(text(), buffer(), xs, rp);
+       if (isBranchSelected()) {
+               OutputParams newrp = rp;
+               newrp.par_begin = 0;
+               newrp.par_end = text().paragraphs().size();
+               xhtmlParagraphs(text(), buffer(), xs, newrp);
+       }
        return docstring();
 }
 
@@ -257,9 +269,9 @@ void InsetBranch::validate(LaTeXFeatures & features) const
 }
 
 
-docstring InsetBranch::contextMenuName() const
+string InsetBranch::contextMenuName() const
 {
-       return from_ascii("context-branch");
+       return "context-branch";
 }
 
 
@@ -315,7 +327,7 @@ void InsetBranchParams::write(ostream & os) const
 void InsetBranchParams::read(Lexer & lex)
 {
        lex.eatLine();
-       branch = branch = lex.getDocString();
+       branch = lex.getDocString();
 }
 
 } // namespace lyx