enable = params().isExportable("program");
break;
- case LFUN_BRANCH_ACTIVATE:
- case LFUN_BRANCH_DEACTIVATE: {
- BranchList const & branchList = params().branchlist();
- docstring const branchName = cmd.argument();
- enable = !branchName.empty() && branchList.find(branchName);
- break;
- }
-
case LFUN_BRANCH_ADD:
case LFUN_BRANCHES_RENAME:
case LFUN_BUFFER_PRINT:
break;
}
- case LFUN_BRANCH_ACTIVATE:
- case LFUN_BRANCH_DEACTIVATE: {
- BranchList & branchList = params().branchlist();
- docstring const branchName = func.argument();
- // the case without a branch name is handled elsewhere
- if (branchName.empty()) {
- dispatched = false;
- break;
- }
- Branch * branch = branchList.find(branchName);
- if (!branch) {
- LYXERR0("Branch " << branchName << " does not exist.");
- dr.setError(true);
- docstring const msg =
- bformat(_("Branch \"%1$s\" does not exist."), branchName);
- dr.setMessage(msg);
- } else {
- branch->setSelected(func.action() == LFUN_BRANCH_ACTIVATE);
- dr.setError(false);
- dr.screenUpdate(Update::Force);
- dr.forceBufferUpdate();
- }
- break;
- }
-
case LFUN_BRANCHES_RENAME: {
if (func.argument().empty())
break;
break;
}
+ // FIXME We do not really want this here, but at present we need to
+ // handle their dispatch here, for reasons explained there, so we'll
+ // handle this here, too, for consistency.
+ case LFUN_BRANCH_ACTIVATE:
+ case LFUN_BRANCH_DEACTIVATE: {
+ BranchList const & branchList = buffer().params().branchlist();
+ docstring const branchName = cmd.argument();
+ flag.setEnabled(!branchName.empty() && branchList.find(branchName));
+ break;
+ }
+
default:
return false;
}
break;
}
+ // FIXME We do not really want this here, but it has to be at present
+ // because we need a cursor for the recordUndoFullDocument call. What
+ // we would really like is a recordUndoBufferParams call that did not
+ // need a cursor, but we do not have that yet.
+ // So, if this does get fixed, this code can be moved back to Buffer.cpp,
+ // and the corresponding code in getStatus() should be moved back, too.
+ case LFUN_BRANCH_ACTIVATE:
+ case LFUN_BRANCH_DEACTIVATE: {
+ BranchList & branch_list = buffer().params().branchlist();
+ docstring const branch_name = cmd.argument();
+ // the case without a branch name is handled elsewhere
+ if (branch_name.empty()) {
+ dispatched = false;
+ break;
+ }
+ Branch * branch = branch_list.find(branch_name);
+ if (!branch) {
+ LYXERR0("Branch " << branch_name << " does not exist.");
+ dr.setError(true);
+ docstring const msg =
+ bformat(_("Branch \"%1$s\" does not exist."), branch_name);
+ dr.setMessage(msg);
+ break;
+ }
+ bool activate = cmd.action() == LFUN_BRANCH_ACTIVATE;
+ if (branch->isSelected() != activate) {
+ branch->setSelected(activate);
+ cur.recordUndoFullDocument();
+ dr.setError(false);
+ dr.screenUpdate(Update::Force);
+ dr.forceBufferUpdate();
+ }
+ break;
+ }
+
default:
// OK, so try the Buffer itself...
buffer_.dispatch(cmd, dr);
}
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();
}