]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
Allow negative values for counters
[lyx.git] / src / BufferView.cpp
index 25b33b953ad75a189745d1dc6824dc4cec89c87a..72cbb2874dea0acf385b41ddabce7842d44ffbad 100644 (file)
@@ -1089,8 +1089,6 @@ void BufferView::makeDocumentClass()
 
 void BufferView::updateDocumentClass(DocumentClassConstPtr olddc)
 {
-       message(_("Converting document to new document class..."));
-
        StableDocIterator backcur(d->cursor_);
        ErrorList & el = buffer_.errorList("Class Switch");
        cap::switchBetweenClasses(
@@ -2066,21 +2064,22 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                // an arbitrary number to limit number of iterations
                const int max_iter = 100000;
                int iterations = 0;
-               Cursor & curs = d->cursor_;
-               Cursor const savecur = curs;
-               curs.reset();
-               if (!curs.nextInset())
-                       curs.forwardInset();
-               curs.beginUndoGroup();
-               while(curs && iterations < max_iter) {
-                       Inset * const ins = curs.nextInset();
+               Cursor & bvcur = d->cursor_;
+               Cursor const savecur = bvcur;
+               bvcur.reset();
+               if (!bvcur.nextInset())
+                       bvcur.forwardInset();
+               bvcur.beginUndoGroup();
+               while(bvcur && iterations < max_iter) {
+                       Inset * const ins = bvcur.nextInset();
                        if (!ins)
                                break;
                        docstring insname = ins->layoutName();
                        while (!insname.empty()) {
                                if (insname == name || name == from_utf8("*")) {
-                                       curs.recordUndo();
                                        lyx::dispatch(fr, dr);
+                                       // we do not want to remember selection here
+                                       bvcur.clearSelection();
                                        ++iterations;
                                        break;
                                }
@@ -2090,11 +2089,11 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                                insname = insname.substr(0, i);
                        }
                        // if we did not delete the inset, skip it
-                       if (!curs.nextInset() || curs.nextInset() == ins)
-                               curs.forwardInset();
+                       if (!bvcur.nextInset() || bvcur.nextInset() == ins)
+                               bvcur.forwardInset();
                }
-               curs = savecur;
-               curs.fixIfBroken();
+               bvcur = savecur;
+               bvcur.fixIfBroken();
                /** This is a dummy undo record only to remember the cursor
                 * that has just been set; this will be used on a redo action
                 * (see ticket #10097)
@@ -2102,8 +2101,8 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                 * FIXME: a better fix would be to have a way to set the
                 * cursor value directly, but I am not sure it is worth it.
                 */
-               curs.recordUndo();
-               curs.endUndoGroup();
+               bvcur.recordUndo();
+               bvcur.endUndoGroup();
                dr.screenUpdate(Update::Force);
                dr.forceBufferUpdate();
 
@@ -2530,8 +2529,8 @@ void BufferView::mouseEventDispatch(FuncRequest const & cmd0)
 
        // Notify left insets
        if (cur != old) {
-               bool badcursor = old.fixIfBroken() | cur.fixIfBroken();
-               badcursor |= notifyCursorLeavesOrEnters(old, cur);
+               bool badcursor = old.fixIfBroken() || cur.fixIfBroken();
+               badcursor = badcursor || notifyCursorLeavesOrEnters(old, cur);
                if (badcursor)
                        cursor().fixIfBroken();
        }
@@ -2620,7 +2619,7 @@ bool BufferView::setCursorFromRow(int row)
 {
        TexRow::TextEntry start, end;
        tie(start,end) = buffer_.texrow().getEntriesFromRow(row);
-       LYXERR(Debug::LATEX,
+       LYXERR(Debug::OUTFILE,
               "setCursorFromRow: for row " << row << ", TexRow has found "
               "start (id=" << start.id << ",pos=" << start.pos << "), "
               "end (id=" << end.id << ",pos=" << end.pos << ")");
@@ -3391,15 +3390,12 @@ void BufferView::checkCursorScrollOffset()
 
        //lyxerr << "cur_x=" << cur_x << ", offset=" << offset << ", row.wid=" << row.width() << ", margin=" << MARGIN << endl;
 
-       if (offset != d->horiz_scroll_offset_)
+       if (offset != d->horiz_scroll_offset_) {
                LYXERR(Debug::PAINTING, "Horiz. scroll offset changed from "
                       << d->horiz_scroll_offset_ << " to " << offset);
-
-       if (d->update_strategy_ == NoScreenUpdate
-           && offset != d->horiz_scroll_offset_) {
-               // FIXME: if one uses SingleParUpdate, then home/end
-               // will not work on long rows. Why?
-               d->update_strategy_ = FullScreenUpdate;
+               row.changed(true);
+               if (d->update_strategy_ == NoScreenUpdate)
+                       d->update_strategy_ = SingleParUpdate;
        }
 
        d->horiz_scroll_offset_ = offset;