mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +00:00
Fix bug #7641: Freeze when removing itemized first paragraph
Text::outerFont looks recursively for paragraphs before the current one which has a lower depth. If such a paragraph cannot be found, depthHook and outerHook return the current paragraph. As such, we end up in an infinite loop. So, if we find a par_depth that was the same as the previous one, we apparently can't find a suitable paragraph and we should quit the loop.
This commit is contained in:
parent
93ebb7a863
commit
b17250d7eb
@ -267,11 +267,13 @@ Font const Text::outerFont(pit_type par_offset) const
|
|||||||
{
|
{
|
||||||
depth_type par_depth = pars_[par_offset].getDepth();
|
depth_type par_depth = pars_[par_offset].getDepth();
|
||||||
FontInfo tmpfont = inherit_font;
|
FontInfo tmpfont = inherit_font;
|
||||||
|
depth_type prev_par_depth = 0;
|
||||||
// Resolve against environment font information
|
// Resolve against environment font information
|
||||||
while (par_offset != pit_type(pars_.size())
|
while (par_offset != pit_type(pars_.size())
|
||||||
|
&& par_depth != prev_par_depth
|
||||||
&& par_depth
|
&& par_depth
|
||||||
&& !tmpfont.resolved()) {
|
&& !tmpfont.resolved()) {
|
||||||
|
prev_par_depth = par_depth;
|
||||||
par_offset = outerHook(par_offset);
|
par_offset = outerHook(par_offset);
|
||||||
if (par_offset != pit_type(pars_.size())) {
|
if (par_offset != pit_type(pars_.size())) {
|
||||||
tmpfont.realize(pars_[par_offset].layout().font);
|
tmpfont.realize(pars_[par_offset].layout().font);
|
||||||
|
@ -323,9 +323,14 @@ public:
|
|||||||
bool insertCompletion(Cursor & cur, docstring const & s, bool /*finished*/);
|
bool insertCompletion(Cursor & cur, docstring const & s, bool /*finished*/);
|
||||||
///
|
///
|
||||||
docstring completionPrefix(Cursor const & cur) const;
|
docstring completionPrefix(Cursor const & cur) const;
|
||||||
/// for the environments
|
/// find a paragraph before \p par with the given \p depth, if such
|
||||||
|
/// a paragraph cannot be found, \p par is returned
|
||||||
pit_type depthHook(pit_type par, depth_type depth) const;
|
pit_type depthHook(pit_type par, depth_type depth) const;
|
||||||
///
|
/// find a paragraph before \p par with depth less than the
|
||||||
|
/// depth of \p par. If such paragraph cannot be found because
|
||||||
|
/// \p par already has depth 0, lastpar + 1 is returned. If
|
||||||
|
/// such paragraph cannot be found because there isn't a par
|
||||||
|
/// with less depth before this one, \p par is returned.
|
||||||
pit_type outerHook(pit_type par) const;
|
pit_type outerHook(pit_type par) const;
|
||||||
/// Is it the first par with same depth and layout?
|
/// Is it the first par with same depth and layout?
|
||||||
bool isFirstInSequence(pit_type par) const;
|
bool isFirstInSequence(pit_type par) const;
|
||||||
|
Loading…
Reference in New Issue
Block a user