cur.clearSelection(); // bug 393
cur.finishUndo();
InsetText * insetText = dynamic_cast<InsetText *>(inset);
- if (insetText && !insetText->allowMultiPar() || cur.lastpit() == 0) {
+ if (insetText && (!insetText->allowMultiPar() || cur.lastpit() == 0)) {
// reset first par to default
cur.text()->paragraphs().begin()
->setPlainOrDefaultLayout(bparams.documentClass());
} else {
cur.leaveInset(*inset);
// reset surrounding par to default
- docstring const layoutname = insetText->usePlainLayout()
- ? bparams.documentClass().plainLayoutName()
- : bparams.documentClass().defaultLayoutName();
+ DocumentClass const & dc = bparams.documentClass();
+ docstring const layoutname = inset->usePlainLayout()
+ ? dc.plainLayoutName()
+ : dc.defaultLayoutName();
text->setLayout(cur, layoutname);
}
else
c = par.getChar(pos - 1);
string arg = to_utf8(cmd.argument());
- cur.insert(new InsetQuotes(c, bufparams.quotes_language,
- (arg == "single") ? InsetQuotes::SingleQuotes
- : InsetQuotes::DoubleQuotes));
+ cur.insert(new InsetQuotes(bv->buffer(), c, (arg == "single")
+ ? InsetQuotes::SingleQuotes : InsetQuotes::DoubleQuotes));
cur.posForward();
}
else
case mouse_button::button2:
// Middle mouse pasting.
+ bv->mouseSetCursor(cur);
if (!cap::selection()) {
// There is no local selection in the current buffer, so try to
// paste primary selection instead.
bv->cursor().finishUndo();
break;
- case mouse_button::button3:
- if (cur.selection()) {
- DocIterator const selbeg = cur.selectionBegin();
- DocIterator const selend = cur.selectionEnd();
- Cursor tmpcur = cur;
- tm.setCursorFromCoordinates(tmpcur, cmd.x, cmd.y);
- // Don't do anything if we right-click a selection, a selection
- // context menu should popup instead.
- if (tmpcur < selbeg || tmpcur >= selend) {
- cur.noUpdate();
- return;
- }
+ case mouse_button::button3: {
+ Cursor const & bvcur = cur.bv().cursor();
+ // Don't do anything if we right-click a
+ // selection, a context menu will popup.
+ if (bvcur.selection() && cur >= bvcur.selectionBegin()
+ && cur < bvcur.selectionEnd()) {
+ cur.noUpdate();
+ return;
}
- if (!bv->mouseSetCursor(cur, false)) {
+ if (!bv->mouseSetCursor(cur, false))
cur.updateFlags(Update::SinglePar | Update::FitCursor);
- break;
- }
+ break;
+ }
+
default:
break;
} // switch (cmd.button())
// otherwise, single click does not clear persistent selection
// buffer.
if (cur.selection()) {
- // Finish selection.
- // If double click, cur is moved to the end of word by selectWord
- // but bvcur is current mouse position.
- cur.bv().cursor().selection() = true;
+ // Finish selection. If double click,
+ // cur is moved to the end of word by
+ // selectWord but bvcur is current
+ // mouse position.
+ cur.bv().cursor().setSelection();
}
// FIXME: We could try to handle drag and drop of selection here.
cur.noUpdate();
MacroType type = MacroTypeNewcommand;
if (s2 == "def")
type = MacroTypeDef;
- cur.insert(new MathMacroTemplate(from_utf8(token(s, ' ', 0)), nargs, false, type));
- //cur.nextInset()->edit(cur, true);
+ MathMacroTemplate * inset = new MathMacroTemplate(from_utf8(token(s, ' ', 0)), nargs, false, type);
+ inset->setBuffer(bv->buffer());
+ insertInset(cur, inset);
+
+ // enter macro inset and select the name
+ cur.push(*inset);
+ cur.top().pos() = cur.top().lastpos();
+ cur.resetAnchor();
+ cur.selection() = true;
+ cur.top().pos() = 0;
}
break;
case LFUN_MATH_MATRIX:
case LFUN_MATH_DELIM:
case LFUN_MATH_BIGDELIM: {
+ cur.recordUndo();
cap::replaceSelection(cur);
cur.insert(new InsetMathHull(hullSimple));
checkAndActivateInset(cur, true);
tclass.defaultLayoutName();
setLayout(cur, laystr);
ParagraphParameters p;
+ // FIXME If this call were replaced with one to clearParagraphParams(),
+ // then we could get rid of this method altogether.
setParagraphs(cur, p);
// FIXME This should be simplified when InsetFloatList takes a
// Buffer in its constructor.