From: Vincent van Ravesteijn Date: Sun, 2 May 2010 19:12:25 +0000 (+0000) Subject: Fix another crash due to BufferView::last_inset_ being an invalid pointer. X-Git-Tag: 2.0.0~3305 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=750620765f8236b541ec9a3b02152d97c15599c6;p=features.git Fix another crash due to BufferView::last_inset_ being an invalid pointer. Now, we only want to let the last_inset_ pointer point at insets that accept the mouse_hover setting. Otherwise, the pointer is not cleared on deletion of the inset. See also r33908, r34117, r34348, r34353 and bug #3900. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@34354 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/BufferView.cpp b/src/BufferView.cpp index 0d852f500e..3050a7b498 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -1895,18 +1895,22 @@ void BufferView::updateHoveredInset() const return; bool need_redraw = false; - if (d->last_inset_) + if (d->last_inset_) { // Remove the hint on the last hovered inset (if any). need_redraw |= d->last_inset_->setMouseHover(this, false); + d->last_inset_ = 0; + } // const_cast because of setMouseHover(). Inset * inset = const_cast(covering_inset); - if (inset) - // Highlight the newly hovered inset (if any). - need_redraw |= inset->setMouseHover(this, true); + if (inset && inset->setMouseHover(this, true)) { + need_redraw = true; + // Only the insets that accept the hover state, do + // clear the last_inset_, so only set the last_inset_ + // member if the hovered setting is accepted. + d->last_inset_ = inset; + } - d->last_inset_ = inset; - if (need_redraw) { LYXERR(Debug::PAINTING, "Mouse hover detected at: (" << d->mouse_position_cache_.x_ << ", "