-
- case LFUN_MOUSE_PRESS:
- if (cmd.button() != mouse_button::button3)
- InsetCollapsable::doDispatch(cur, cmd);
- else
- cur.undispatched();
- break;
-
- case LFUN_INSET_DIALOG_UPDATE:
- InsetBranchMailer(*this).updateDialog(&cur.bv());
- break;
-
- case LFUN_MOUSE_RELEASE:
- if (cmd.button() == mouse_button::button3 && hitButton(cmd))
- InsetBranchMailer(*this).showDialog(&cur.bv());
- else
- InsetCollapsable::doDispatch(cur, cmd);
+ case LFUN_BRANCH_ACTIVATE:
+ case LFUN_BRANCH_DEACTIVATE:
+ case LFUN_BRANCH_MASTER_ACTIVATE:
+ case LFUN_BRANCH_MASTER_DEACTIVATE: {
+ bool const master = (cmd.action() == LFUN_BRANCH_MASTER_ACTIVATE
+ || cmd.action() == LFUN_BRANCH_MASTER_DEACTIVATE);
+ Buffer * buf = master ? const_cast<Buffer *>(buffer().masterBuffer())
+ : &buffer();
+
+ Branch * our_branch = buf->params().branchlist().find(params_.branch);
+ if (!our_branch)
+ break;
+
+ bool const activate = (cmd.action() == LFUN_BRANCH_ACTIVATE
+ || cmd.action() == LFUN_BRANCH_MASTER_ACTIVATE);
+ if (our_branch->isSelected() != activate) {
+ // FIXME If the branch is in the master document, we cannot
+ // call recordUndo..., because the master may be hidden, and
+ // the code presently assumes that hidden documents can never
+ // be dirty. See GuiView::closeBufferAll(), for example.
+ if (!master)
+ buffer().undo().recordUndoFullDocument(cur);
+ our_branch->setSelected(activate);
+ cur.forceBufferUpdate();
+ }