]> git.lyx.org Git - lyx.git/blobdiff - src/undo_funcs.C
Fixed redraw problems after undo/redo.
[lyx.git] / src / undo_funcs.C
index b60ee0c7fc13ceb4cc0ab2ca73d77e3cc9fc41a9..b988b6787118c7d56b948a664e4a88bcf1565e0c 100644 (file)
@@ -23,7 +23,7 @@
 
 #include "iterators.h"
 
-//#define DELETE_UNUSED_PARAGRAPHS 1
+#define DELETE_UNUSED_PARAGRAPHS 1
 #ifdef DELETE_UNUSED_PARAGRAPHS
 #include <vector>
 #endif
@@ -230,16 +230,6 @@ bool textHandleUndo(BufferView * bv, Undo * undo)
                        it->getLyXText(bv)->redoParagraphs(bv,
                                                           it->getLyXText(bv)->cursor,
                                                           endpar);
-                       LyXFont font;
-                       it->update(bv, font, false);
-                       // we now would have to rebreak the whole paragraph the
-                       // undo-par was in. How we do it here is not really true.
-                       // We would have to save this information in the undo-struct
-                       // and then we could do the right rebreak. Here we only
-                       // handle the case where this was in the actual paragraph,
-                       // which not always is true.
-                       bv->text->redoParagraphs(bv, bv->text->cursor,
-                                                bv->text->cursor.par());
                        if (tmppar) {
                                it = static_cast<UpdatableInset*>(tmppar->inInset());
                                LyXText * t;
@@ -251,7 +241,9 @@ bool textHandleUndo(BufferView * bv, Undo * undo)
                                }
                                t->setCursorIntern(bv, tmppar, undo->cursor_pos);
                                t->updateCounters(bv, t->cursor.row());
+                               bv->fitCursor();
                        }
+                       bv->updateInset(it, false);
                        bv->text->setCursorIntern(bv, bv->text->cursor.par(),
                                                  bv->text->cursor.pos());
                } else {
@@ -275,17 +267,27 @@ bool textHandleUndo(BufferView * bv, Undo * undo)
                // And here it's save enough to delete all removed paragraphs
                vector<Paragraph *>::iterator pit = vvpar.begin();
                if (pit != vvpar.end()) {
+#if 0
+                       lyxerr << endl << "PARS BEFORE:";
+                       ParIterator end = bv->buffer()->par_iterator_end();
+                       ParIterator it = bv->buffer()->par_iterator_begin();
+                       for (; it != end; ++it)
+                               lyxerr << (*it)->previous() << "<- " << (*it) << " ->" << (*it)->next() << endl;
                        lyxerr << "DEL: ";
+#endif
                        for(;pit != vvpar.end(); ++pit) {
-                               lyxerr << *pit << " ";
+//                             lyxerr << *pit << " ";
+                               (*pit)->previous(0);
+                               (*pit)->next(0);
                                delete (*pit);
                        }
-                       lyxerr << endl << "PARS:";
-                       ParIterator end = bv->buffer()->par_iterator_end();
-                       ParIterator it = bv->buffer()->par_iterator_begin();
+#if 0
+                       lyxerr << endl << "PARS AFTER:";
+                       end = bv->buffer()->par_iterator_end();
+                       it = bv->buffer()->par_iterator_begin();
                        for (; it != end; ++it)
-                               lyxerr << *it << " ";
-                       lyxerr << endl;
+                               lyxerr << (*it)->previous() << "<- " << (*it) << " ->" << (*it)->next() << endl;
+#endif
                }
 #endif
        }