diff --git a/src/BufferView.cpp b/src/BufferView.cpp index c15b7d3b88..e7e69f63e0 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -2754,7 +2754,7 @@ bool BufferView::singleParUpdate() Text & buftext = buffer_.text(); pit_type const bottom_pit = d->cursor_.bottom().pit(); TextMetrics & tm = textMetrics(&buftext); - int old_height = tm.parMetrics(bottom_pit).height(); + Dimension const old_dim = tm.parMetrics(bottom_pit).dim(); // make sure inline completion pointer is ok if (d->inlineCompletionPos_.fixIfBroken()) @@ -2765,11 +2765,16 @@ bool BufferView::singleParUpdate() // (if this paragraph contains insets etc., rebreaking will // recursively descend) tm.redoParagraph(bottom_pit); - ParagraphMetrics const & pm = tm.parMetrics(bottom_pit); - if (pm.height() != old_height) + ParagraphMetrics & pm = tm.par_metrics_[bottom_pit]; + if (pm.height() != old_dim.height()) { // Paragraph height has changed so we cannot proceed to // the singlePar optimisation. return false; + } + // Since position() points to the baseline of the first row, we + // may have to update it. See ticket #11601 for an example where + // the height does not change but the ascent does. + pm.setPosition(pm.position() - old_dim.ascent() + pm.ascent()); tm.updatePosCache(bottom_pit); diff --git a/src/update_flags.h b/src/update_flags.h index a40e88c556..af71c0e78d 100644 --- a/src/update_flags.h +++ b/src/update_flags.h @@ -26,7 +26,6 @@ namespace Update { /// Force a full redraw (but no metrics computations) ForceDraw = 4, /// Try to rebreak only the current paragraph metrics. - /// (currently ignored!) SinglePar = 8, /// Only the inset decorations need to be redrawn, no text metrics /// update is needed. diff --git a/status.23x b/status.23x index 46c3f64fb7..944a0391a2 100644 --- a/status.23x +++ b/status.23x @@ -74,6 +74,8 @@ What's new - Fix the LyX icon in the Wayland dash (bug 11847). +- Fix display bug when typing in a paragraph where row heights change (bug 11601). + * INTERNALS