mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-25 14:04:25 +00:00
Backport fix for #7872.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_2_0_X@40335 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
4c6e404039
commit
9f61659c00
@ -2028,14 +2028,6 @@ bool Buffer::getStatus(FuncRequest const & cmd, FuncStatus & flag)
|
||||
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:
|
||||
@ -2187,31 +2179,6 @@ void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr)
|
||||
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;
|
||||
|
@ -1162,6 +1162,17 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
|
||||
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;
|
||||
}
|
||||
@ -1906,6 +1917,41 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
|
||||
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);
|
||||
|
@ -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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user