]> git.lyx.org Git - lyx.git/blobdiff - src/text.C
The "I want this in now" patch.
[lyx.git] / src / text.C
index e6e6bec91a322f080bc4b346dbcad289b8b88676..436f94354e0a80f40afcec271b323a7b44d27e7f 100644 (file)
@@ -87,16 +87,24 @@ void LyXText::updateRowPositions()
 
 int LyXText::top_y() const
 {
-       if (isInInset() || anchor_row_ == rowlist_.end() )
+       if (anchor_row_ == rowlist_.end() )
                return 0;
+
        return anchor_row_->y() + anchor_row_offset_;
 }
 
 
 void LyXText::top_y(int newy)
 {
-       if (rows().empty() || isInInset())
+       if (rows().empty())
+               return;
+
+       if (isInInset()) {
+               anchor_row_ = rows().begin();
+               anchor_row_offset_ = newy;
                return;
+       }
+
        lyxerr[Debug::GUI] << "setting top y = " << newy << endl;
 
        int y = newy;
@@ -1457,7 +1465,7 @@ void LyXText::breakParagraph(ParagraphList & paragraphs, char keep_layout)
           && !layout->keepempty)
                return;
 
-       setUndo(bv(), Undo::FINISH, &*cursor.par(), &*boost::next(cursor.par()));
+       setUndo(bv(), Undo::FINISH, cursor.par(), boost::next(cursor.par()));
 
        // Always break behind a space
        //
@@ -1562,7 +1570,7 @@ void LyXText::redoParagraph()
 // same Paragraph one to the right and make a rebreak
 void LyXText::insertChar(char c)
 {
-       setUndo(bv(), Undo::INSERT, &*cursor.par(), &*boost::next(cursor.par()));
+       setUndo(bv(), Undo::INSERT, cursor.par(), boost::next(cursor.par()));
 
        // When the free-spacing option is set for the current layout,
        // disable the double-space checking
@@ -2109,12 +2117,10 @@ void LyXText::acceptChange()
        if (!selection.set() && cursor.par()->size())
                return;
 
-       bv()->hideCursor();
-
        if (selection.start.par() == selection.end.par()) {
                LyXCursor & startc = selection.start;
                LyXCursor & endc = selection.end;
-               setUndo(bv(), Undo::INSERT, &*startc.par(), &*boost::next(startc.par()));
+               setUndo(bv(), Undo::INSERT, startc.par(), boost::next(startc.par()));
                startc.par()->acceptChange(startc.pos(), endc.pos());
                finishUndo();
                clearSelection();
@@ -2130,13 +2136,11 @@ void LyXText::rejectChange()
        if (!selection.set() && cursor.par()->size())
                return;
 
-       bv()->hideCursor();
-
        if (selection.start.par() == selection.end.par()) {
                LyXCursor & startc = selection.start;
                LyXCursor & endc = selection.end;
-               setUndo(bv(), Undo::INSERT, &*startc.par(),
-                       &*boost::next(startc.par()));
+               setUndo(bv(), Undo::INSERT, startc.par(),
+                       boost::next(startc.par()));
                startc.par()->rejectChange(startc.pos(), endc.pos());
                finishUndo();
                clearSelection();
@@ -2207,7 +2211,8 @@ LyXText::selectNextWordToSpellcheck(float & value)
        if (cursor.pos() < cursor.par()->size() &&
            cursor.par()->isInset(cursor.pos())) {
                // lock the inset!
-               cursor.par()->getInset(cursor.pos())->edit(bv());
+               FuncRequest cmd(bv(), LFUN_INSET_EDIT, "left");
+               cursor.par()->getInset(cursor.pos())->localDispatch(cmd);
                // now call us again to do the above trick
                // but obviously we have to start from down below ;)
                return bv()->text->selectNextWordToSpellcheck(value);
@@ -2352,7 +2357,7 @@ void LyXText::changeCase(LyXText::TextCase action)
 
        lyx::Assert(from <= to);
 
-       setUndo(bv(), Undo::FINISH, &*from.par(), &*boost::next(to.par()));
+       setUndo(bv(), Undo::FINISH, from.par(), boost::next(to.par()));
 
        pos_type pos = from.pos();
        ParagraphList::iterator pit = from.par();
@@ -2423,7 +2428,7 @@ void LyXText::Delete()
                // to make sure undo gets the right cursor position
                cursor = old_cursor;
                setUndo(bv(), Undo::DELETE,
-                       &*cursor.par(), &*boost::next(cursor.par()));
+                       cursor.par(), boost::next(cursor.par()));
                cursor = tmpcursor;
                backspace();
        }
@@ -2481,8 +2486,8 @@ void LyXText::backspace()
 
                if (cursor.par() != ownerParagraphs().begin()) {
                        setUndo(bv(), Undo::DELETE,
-                               &*boost::prior(cursor.par()),
-                               &*boost::next(cursor.par()));
+                               boost::prior(cursor.par()),
+                               boost::next(cursor.par()));
                }
 
                ParagraphList::iterator tmppit = cursor.par();
@@ -2549,7 +2554,7 @@ void LyXText::backspace()
                // this is the code for a normal backspace, not pasting
                // any paragraphs
                setUndo(bv(), Undo::DELETE,
-                       &*cursor.par(), &*boost::next(cursor.par()));
+                       cursor.par(), boost::next(cursor.par()));
                // We used to do cursorLeftIntern() here, but it is
                // not a good idea since it triggers the auto-delete
                // mechanism. So we do a cursorLeftIntern()-lite,