]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView_pimpl.C
don't rm emergency saves ever
[lyx.git] / src / BufferView_pimpl.C
index d31a6af5e0881475e73c0955d26a79b2928f71b5..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();
 }
@@ -640,7 +649,7 @@ void BufferView::Pimpl::restorePosition(unsigned int i)
                if (b != 0) buffer(b);
        }
 
-       Paragraph * par = buffer_->getParFromID(saved_positions[i].par_id);
+       Paragraph * par = &*buffer_->getParFromID(saved_positions[i].par_id);
        if (!par)
                return;
 
@@ -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();
@@ -975,15 +974,6 @@ bool BufferView::Pimpl::dispatch(FuncRequest const & ev_in)
                // a tabular-inset
                break;
 
-       case LFUN_LAYOUT_COPY:
-               bv_->copyEnvironment();
-               break;
-
-       case LFUN_LAYOUT_PASTE:
-               bv_->pasteEnvironment();
-               switchKeyMap();
-               break;
-
        case LFUN_FILE_INSERT:
                MenuInsertLyXFile(ev.argument);
                break;
@@ -1239,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);
 
@@ -1252,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);
 
@@ -1376,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)) {