]> git.lyx.org Git - lyx.git/blobdiff - src/text2.C
fix bug with relative paths in insetgraphics
[lyx.git] / src / text2.C
index 5b6f639769b9522b6830c4c3c52399631c2884ce..bab91e69280dadb45ba976238749aead0761c195 100644 (file)
@@ -1647,13 +1647,12 @@ void LyXText::insertInset(BufferView * bview, Inset * inset)
 {
        if (!cursor.par()->insetAllowed(inset->lyxCode()))
                return;
-       // I don't know if this is necessary here (Jug 20020102)
-       setUndo(bview, Undo::INSERT, cursor.par(), cursor.par()->next());
+       setUndo(bview, Undo::FINISH, cursor.par(), cursor.par()->next());
+       freezeUndo();
        cursor.par()->insertInset(cursor.pos(), inset);
        // Just to rebreak and refresh correctly.
        // The character will not be inserted a second time
        insertChar(bview, Paragraph::META_INSET);
-#if 1
        // If we enter a highly editable inset the cursor should be to before
        // the inset. This couldn't happen before as Undo was not handled inside
        // inset now after the Undo LyX tries to call inset->Edit(...) again
@@ -1662,7 +1661,7 @@ void LyXText::insertInset(BufferView * bview, Inset * inset)
        if (isHighlyEditableInset(inset)) {
                cursorLeft(bview, true);
        }
-#endif
+       unFreezeUndo();
 }
 
 
@@ -2070,7 +2069,8 @@ void LyXText::setCursor(BufferView * bview, LyXCursor & cur, Paragraph * par,
        // the end of the previous row
        cur.iy(y + row->baseline());
        Inset * ins;
-       if (pos && par->getChar(pos) == Paragraph::META_INSET &&
+       if (row->previous() && pos &&
+               par->getChar(pos) == Paragraph::META_INSET &&
                (ins=par->getInset(pos)) && (ins->needFullRow() || ins->display()))
        {
                row = row->previous();
@@ -2249,7 +2249,16 @@ void LyXText::setCursorFromCoordinates(BufferView * bview, LyXCursor & cur,
        cur.pos(row->pos() + column);
        cur.x(x);
        cur.y(y + row->baseline());
-       cur.iy(cur.y());
+       Inset * ins;
+       if (row->next() && cur.pos() &&
+               cur.par()->getChar(cur.pos()) == Paragraph::META_INSET &&
+               (ins=cur.par()->getInset(cur.pos())) &&
+               (ins->needFullRow() || ins->display()))
+       {
+               cur.iy(y + row->height() + row->next()->baseline());
+       } else {
+               cur.iy(cur.y());
+       }
        cur.row(row);
        cur.boundary(bound);
 }