]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView_pimpl.C
don't rm emergency saves ever
[lyx.git] / src / BufferView_pimpl.C
index a2f74e21a1a8148baacdd20a54010cc0e0d176cd..eafdf9d1377f1807c74930bda3497ae10a96cc6d 100644 (file)
@@ -377,6 +377,8 @@ void BufferView::Pimpl::scrollDocView(int value)
        if (!buffer_)
                return;
 
+       screen().hideCursor();
+
        screen().draw(bv_->text, bv_, value);
 
        if (!lyxrc.cursor_follows_scrollbar)
@@ -424,6 +426,18 @@ void BufferView::Pimpl::workAreaKeyPress(LyXKeySymPtr key,
                                         key_modifier::state state)
 {
        bv_->owner()->getLyXFunc().processKeySym(key, state);
+
+       /* This is perhaps a bit of a hack. When we move
+        * around, or type, it's nice to be able to see
+        * the cursor immediately after the keypress. So
+        * we reset the toggle timeout and force the visibility
+        * of the cursor. Note we cannot do this inside
+        * dispatch() itself, because that's called recursively.
+        */
+       if (available()) {
+               cursor_timeout.restart();
+               screen().showCursor(*bv_);
+       }
 }
 
 
@@ -456,10 +470,9 @@ void BufferView::Pimpl::selectionRequested()
 void BufferView::Pimpl::selectionLost()
 {
        if (available()) {
-               hideCursor();
+               screen().hideCursor();
                toggleSelection();
                bv_->getLyXText()->clearSelection();
-               showCursor();
                bv_->text->xsel_cache.set(false);
        }
 }
@@ -565,11 +578,7 @@ void BufferView::Pimpl::cursorToggle()
                return;
        }
 
-       if (!bv_->theLockingInset()) {
-               screen().cursorToggle(bv_);
-       } else {
-               bv_->theLockingInset()->toggleInsetCursor(bv_);
-       }
+       screen().toggleCursor(*bv_);
 
        cursor_timeout.restart();
 }
@@ -698,22 +707,6 @@ void BufferView::Pimpl::insetUnlock()
 }
 
 
-void BufferView::Pimpl::showCursor()
-{
-       if (bv_->theLockingInset())
-               bv_->theLockingInset()->showInsetCursor(bv_);
-       else
-               screen().showCursor(bv_->text, bv_);
-}
-
-
-void BufferView::Pimpl::hideCursor()
-{
-       if (!bv_->theLockingInset())
-               screen().hideCursor();
-}
-
-
 void BufferView::Pimpl::toggleSelection(bool b)
 {
        if (bv_->theLockingInset())
@@ -906,7 +899,7 @@ void BufferView::Pimpl::trackChanges()
                buf->undostack.clear();
        } else {
                update(BufferView::SELECT);
-               bv_->text->setCursor(&(*buf->paragraphs.begin()), 0);
+               bv_->text->setCursor(buf->paragraphs.begin(), 0);
 #warning changes FIXME
                //moveCursorUpdate(false);
 
@@ -935,8 +928,14 @@ bool BufferView::Pimpl::workAreaDispatch(FuncRequest const & ev_in)
        if (!available())
                return false;
 
+       screen().hideCursor();
+
        bool const res = dispatch(ev_in);
 
+       // see workAreaKeyPress
+       cursor_timeout.restart();
+       screen().showCursor(*bv_);
+
        // FIXME: we should skip these when selecting
        bv_->owner()->updateLayoutChoice();
        bv_->owner()->updateToolbar();
@@ -1230,7 +1229,7 @@ bool BufferView::Pimpl::dispatch(FuncRequest const & ev_in)
 
        case LFUN_ACCEPT_ALL_CHANGES: {
                update(BufferView::SELECT);
-               bv_->text->setCursor(&(*bv_->buffer()->paragraphs.begin()), 0);
+               bv_->text->setCursor(bv_->buffer()->paragraphs.begin(), 0);
 #warning FIXME changes
                //moveCursorUpdate(false);
 
@@ -1243,7 +1242,7 @@ bool BufferView::Pimpl::dispatch(FuncRequest const & ev_in)
 
        case LFUN_REJECT_ALL_CHANGES: {
                update(BufferView::SELECT);
-               bv_->text->setCursor(&(*bv_->buffer()->paragraphs.begin()), 0);
+               bv_->text->setCursor(bv_->buffer()->paragraphs.begin(), 0);
 #warning FIXME changes
                //moveCursorUpdate(false);
 
@@ -1367,7 +1366,6 @@ void BufferView::Pimpl::updateInset(Inset * inset)
        Inset * tl_inset = inset;
        while (tl_inset->owner())
                tl_inset = tl_inset->owner();
-       hideCursor();
        if (tl_inset == inset) {
                update(BufferView::UPDATE);
                if (bv_->text->updateInset(inset)) {