mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-27 19:59:46 +00:00
Avoid crash when selecting long text
In some (not yet understood) situations, the paragraph metrics cache
is empty in generateSyntheticMouseEvent(). We just avoid a crash in
this case, but there is probably an underlying problem that deserves
being fixed.
Fixes bug #10324.
(cherry picked from commit 4efb129ccb
)
This commit is contained in:
parent
9c0dd478df
commit
4fbb0f1770
@ -94,6 +94,8 @@ public:
|
|||||||
bool redoParagraph(pit_type const pit);
|
bool redoParagraph(pit_type const pit);
|
||||||
/// Clear cache of paragraph metrics
|
/// Clear cache of paragraph metrics
|
||||||
void clear() { par_metrics_.clear(); }
|
void clear() { par_metrics_.clear(); }
|
||||||
|
/// Is cache of paragraph metrics empty ?
|
||||||
|
bool empty() const { return par_metrics_.empty(); }
|
||||||
|
|
||||||
///
|
///
|
||||||
int ascent() const { return dim_.asc; }
|
int ascent() const { return dim_.asc; }
|
||||||
|
@ -1009,12 +1009,18 @@ void GuiWorkArea::generateSyntheticMouseEvent()
|
|||||||
|
|
||||||
// In which paragraph do we have to set the cursor ?
|
// In which paragraph do we have to set the cursor ?
|
||||||
Cursor & cur = d->buffer_view_->cursor();
|
Cursor & cur = d->buffer_view_->cursor();
|
||||||
// FIXME: we don't know howto handle math.
|
// FIXME: we don't know how to handle math.
|
||||||
Text * text = cur.text();
|
Text * text = cur.text();
|
||||||
if (!text)
|
if (!text)
|
||||||
return;
|
return;
|
||||||
TextMetrics const & tm = d->buffer_view_->textMetrics(text);
|
TextMetrics const & tm = d->buffer_view_->textMetrics(text);
|
||||||
|
|
||||||
|
// Quit gracefully if there are no metrics, since otherwise next
|
||||||
|
// line would crash (bug #10324).
|
||||||
|
// This situation seems related to a (not yet understood) timing problem.
|
||||||
|
if (tm.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
pair<pit_type, const ParagraphMetrics *> pp = up ? tm.first() : tm.last();
|
pair<pit_type, const ParagraphMetrics *> pp = up ? tm.first() : tm.last();
|
||||||
ParagraphMetrics const & pm = *pp.second;
|
ParagraphMetrics const & pm = *pp.second;
|
||||||
pit_type const pit = pp.first;
|
pit_type const pit = pp.first;
|
||||||
|
@ -91,6 +91,8 @@ What's new
|
|||||||
|
|
||||||
- Fix random crash when dissolving inset (bug 10667).
|
- Fix random crash when dissolving inset (bug 10667).
|
||||||
|
|
||||||
|
- Avoid crash when selecting long text (bug 10324).
|
||||||
|
|
||||||
- Avoid a case of stuck cursor after entering an inset (bug 10630).
|
- Avoid a case of stuck cursor after entering an inset (bug 10630).
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user