]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
Fix bug #6744: Crash when copying an inset from a deleted section.
[lyx.git] / src / BufferView.cpp
index 0d852f500e11da857257b974340d76f17a946c3c..5c49a8145a34e29bd306caacd80bf3cb17696fce 100644 (file)
@@ -315,6 +315,9 @@ BufferView::~BufferView()
        fp.pit = d->cursor_.bottom().pit();
        fp.pos = d->cursor_.bottom().pos();
        theSession().lastFilePos().save(buffer_.fileName(), fp);
+       
+       if (d->last_inset_)
+               d->last_inset_->setMouseHover(this, false);     
 
        delete d;
 }
@@ -1075,7 +1078,12 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
                flag.setOnOff(buffer_.params().compressed);
                break;
        }
-       
+
+       case LFUN_BUFFER_TOGGLE_OUTPUT_SYNC: {
+               flag.setOnOff(buffer_.params().output_sync);
+               break;
+       }
+
        case LFUN_SCREEN_UP:
        case LFUN_SCREEN_DOWN:
        case LFUN_SCROLL:
@@ -1585,6 +1593,10 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                buffer_.params().compressed = !buffer_.params().compressed;
                break;
 
+       case LFUN_BUFFER_TOGGLE_OUTPUT_SYNC:
+               buffer_.params().output_sync = !buffer_.params().output_sync;
+               break;
+
        case LFUN_SCREEN_UP:
        case LFUN_SCREEN_DOWN: {
                Point p = getPos(cur);
@@ -1895,18 +1907,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<Inset *>(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_ << ", "