mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-12 16:50:39 +00:00
branch: 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. see r37063. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_6_X@37071 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
7fb335c9ae
commit
679dfb5793
@ -1281,33 +1281,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();
|
||||
BufferParams const & bufparams = bv->buffer().params();
|
||||
InsetLayout const & ilayout = cur.inset().getLayout(bufparams);
|
||||
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
|
||||
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(bv->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(bv->buffer(), c, quote_type));
|
||||
cur.posForward();
|
||||
}
|
||||
else
|
||||
} else {
|
||||
// The cursor might have been invalidated by the replaceSelection.
|
||||
cur.buffer().changed();
|
||||
lyx::dispatch(FuncRequest(LFUN_SELF_INSERT, "\""));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -82,6 +82,9 @@ What's new
|
||||
- Fix crash when removing a math macro argument while instant preview
|
||||
is active (bug 7090).
|
||||
|
||||
- Fix crash when inserting quotes with a selection spanning multiple
|
||||
paragraphs (bug 7200).
|
||||
|
||||
- Fix the painting of the workarea for a non-standard DPI and using
|
||||
emulated scaling on Windows Vista and Windows 7 (bug 7187).
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user