]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
Fix wrongly copy-pasted entries in SpellcheckerUi.ui
[lyx.git] / src / BufferView.cpp
index e0c96856ddeb4c2eea6a845d7226d58cf6fb6f77..fc7c7bb80828f9a977d39c12ef906120a7c6a56c 100644 (file)
@@ -269,7 +269,7 @@ struct BufferView::Private
        /** kept to send setMouseHover(false).
          * Not owned, so don't delete.
          */
-       Inset * last_inset_;
+       Inset const * last_inset_;
        /// are we hovering something that we can click
        bool clickable_inset_;
 
@@ -700,7 +700,6 @@ CursorStatus BufferView::cursorStatus(DocIterator const & dit) const
 
 void BufferView::bookmarkEditPosition()
 {
-       d->cursor_.markEditPosition();
        // Don't eat cpu time for each keystroke
        if (d->cursor_.paragraph().id() == d->bookmark_edit_position_)
                return;
@@ -1752,7 +1751,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                        Inset * ins = cur.nextInset();
                        if (!ins)
                                break;
-                       docstring insname = ins->name();
+                       docstring insname = ins->layoutName();
                        while (!insname.empty()) {
                                if (insname == name || name == from_utf8("*")) {
                                        cur.recordUndo();
@@ -1992,14 +1991,12 @@ void BufferView::updateHoveredInset() const
                d->last_inset_ = 0;
        }
        
-       // const_cast because of setMouseHover().
-       Inset * inset = const_cast<Inset *>(covering_inset);
-       if (inset && inset->setMouseHover(this, true)) {
+       if (covering_inset && covering_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_ = covering_inset;
        }
 
        if (need_redraw) {
@@ -2246,6 +2243,7 @@ TextMetrics const & BufferView::textMetrics(Text const * t) const
 
 TextMetrics & BufferView::textMetrics(Text const * t)
 {
+       LASSERT(t, /**/);
        TextMetricsCache::iterator tmc_it  = d->text_metrics_.find(t);
        if (tmc_it == d->text_metrics_.end()) {
                tmc_it = d->text_metrics_.insert(
@@ -2365,6 +2363,42 @@ void BufferView::putSelectionAt(DocIterator const & cur,
 }
 
 
+bool BufferView::selectIfEmpty(DocIterator & cur)
+{
+       if (!cur.paragraph().empty())
+               return false;
+
+       pit_type const beg_pit = cur.pit();
+       if (beg_pit > 0) {
+               // The paragraph associated to this item isn't
+               // the first one, so it can be selected
+               cur.backwardPos();
+       } else {
+               // We have to resort to select the space between the
+               // end of this item and the begin of the next one
+               cur.forwardPos();
+       }
+       if (cur.empty()) {
+               // If it is the only item in the document,
+               // nothing can be selected
+               return false;
+       }
+       pit_type const end_pit = cur.pit();
+       pos_type const end_pos = cur.pos();
+       d->cursor_.clearSelection();
+       d->cursor_.reset();
+       d->cursor_.setCursor(cur);
+       d->cursor_.pit() = beg_pit;
+       d->cursor_.pos() = 0;
+       d->cursor_.setSelection(false);
+       d->cursor_.resetAnchor();
+       d->cursor_.pit() = end_pit;
+       d->cursor_.pos() = end_pos;
+       d->cursor_.setSelection();
+       return true;
+}
+
+
 Cursor & BufferView::cursor()
 {
        return d->cursor_;
@@ -2861,9 +2895,9 @@ DocIterator const & BufferView::inlineCompletionPos() const
 }
 
 
-bool BufferView::fixInlineCompletionPos()
+void BufferView::resetInlineCompletionPos()
 {
-       return d->inlineCompletionPos_.fixIfBroken();
+       d->inlineCompletionPos_ = DocIterator();
 }