mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +00:00
Fix bug #7200: Crash when replacing newline by InsetQuote.
We have to call cap::replaceSelection before determining whether we can insert an InsetQuote or a normal quote. At least we should have updated the par variable after calling cap::replaceSelection, because the paragraph might have been deleted. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@37063 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
8d5acc2235
commit
a3a7c046be
@ -1348,33 +1348,37 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
|
||||
}
|
||||
|
||||
case LFUN_QUOTE_INSERT: {
|
||||
Paragraph & par = cur.paragraph();
|
||||
// this avoids a double undo
|
||||
// FIXME: should not be needed, ideally
|
||||
if (!cur.selection())
|
||||
cur.recordUndo();
|
||||
cap::replaceSelection(cur);
|
||||
|
||||
Paragraph const & par = cur.paragraph();
|
||||
pos_type pos = cur.pos();
|
||||
BufferParams const & bufparams = bv->buffer().params();
|
||||
|
||||
Layout const & style = par.layout();
|
||||
InsetLayout const & ilayout = cur.inset().getLayout();
|
||||
if (!style.pass_thru && !ilayout.isPassThru()
|
||||
&& par.getFontSettings(bufparams, pos).language()->lang() != "hebrew") {
|
||||
// this avoids a double undo
|
||||
// FIXME: should not be needed, ideally
|
||||
if (!cur.selection())
|
||||
cur.recordUndo();
|
||||
cap::replaceSelection(cur);
|
||||
pos = cur.pos();
|
||||
char_type c;
|
||||
if (pos == 0)
|
||||
c = ' ';
|
||||
else if (cur.prevInset() && cur.prevInset()->isSpace())
|
||||
c = ' ';
|
||||
else
|
||||
BufferParams const & bufparams = bv->buffer().params();
|
||||
bool const hebrew =
|
||||
par.getFontSettings(bufparams, pos).language()->lang() == "hebrew";
|
||||
bool const allow_inset_quote =
|
||||
!(style.pass_thru || ilayout.isPassThru() || hebrew);
|
||||
|
||||
if (allow_inset_quote) {
|
||||
char_type c = ' ';
|
||||
if (pos > 0 && (!cur.prevInset() || !cur.prevInset()->isSpace()))
|
||||
c = par.getChar(pos - 1);
|
||||
string arg = to_utf8(cmd.argument());
|
||||
cur.insert(new InsetQuotes(cur.buffer(), c, (arg == "single")
|
||||
? InsetQuotes::SingleQuotes : InsetQuotes::DoubleQuotes));
|
||||
string const arg = to_utf8(cmd.argument());
|
||||
InsetQuotes::QuoteTimes const quote_type = (arg == "single")
|
||||
? InsetQuotes::SingleQuotes : InsetQuotes::DoubleQuotes;
|
||||
cur.insert(new InsetQuotes(cur.buffer(), c, quote_type));
|
||||
cur.posForward();
|
||||
}
|
||||
else
|
||||
} else {
|
||||
// The cursor might have been invalidated by the replaceSelection.
|
||||
cur.buffer()->changed(true);
|
||||
lyx::dispatch(FuncRequest(LFUN_SELF_INSERT, "\""));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -2207,7 +2211,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
|
||||
cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!needsUpdate
|
||||
&& &oldTopSlice.inset() == &cur.inset()
|
||||
&& oldTopSlice.idx() == cur.idx()
|
||||
|
Loading…
Reference in New Issue
Block a user