From 237c713046fd59ce7364cd73b26b40291f3c5dbb Mon Sep 17 00:00:00 2001 From: Abdelrazak Younes Date: Wed, 8 Oct 2008 14:03:15 +0000 Subject: [PATCH] Fix bug http://bugzilla.lyx.org/show_bug.cgi?id=5328 * Paragraph::insertInset(): check if inset insertion is allowed before insertion. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@26810 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/Paragraph.cpp | 13 ++++++++++--- src/Paragraph.h | 13 ++++++++----- src/paragraph_funcs.cpp | 8 +------- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index 385d5b0fc5..34a1c6aa5c 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -449,17 +449,23 @@ void Paragraph::Private::insertChar(pos_type pos, char_type c, } -void Paragraph::insertInset(pos_type pos, Inset * inset, +bool Paragraph::insertInset(pos_type pos, Inset * inset, Change const & change) { LASSERT(inset, /**/); LASSERT(pos >= 0 && pos <= size(), /**/); + // Paragraph::insertInset() can be used in cut/copy/paste operation where + // d->inset_owner_ is not set yet. + if (d->inset_owner_ && d->inset_owner_->insetAllowed(inset->lyxCode())) + return false; + d->insertChar(pos, META_INSET, change); LASSERT(d->text_[pos] == META_INSET, /**/); // Add a new entry in the insetlist_. d->insetlist_.insert(inset, pos); + return true; } @@ -1303,12 +1309,13 @@ void Paragraph::insertChar(pos_type pos, char_type c, } -void Paragraph::insertInset(pos_type pos, Inset * inset, +bool Paragraph::insertInset(pos_type pos, Inset * inset, Font const & font, Change const & change) { - insertInset(pos, inset, change); + bool const success = insertInset(pos, inset, change); // Set the font/language of the inset... setFont(pos, font); + return success; } diff --git a/src/Paragraph.h b/src/Paragraph.h index 6e0657d0f2..06318200c9 100644 --- a/src/Paragraph.h +++ b/src/Paragraph.h @@ -304,12 +304,15 @@ public: /// void insertChar(pos_type pos, char_type c, Font const &, Change const & change); - /// - void insertInset(pos_type pos, Inset * inset, + /// Insert \p inset at position \p pos with \p change traking status. + /// \return true if successful. + bool insertInset(pos_type pos, Inset * inset, Change const & change); - /// - void insertInset(pos_type pos, Inset * inset, - Font const &, Change const & change); + /// Insert \p inset at position \p pos with \p change traking status and + /// \p font. + /// \return true if successful. + bool insertInset(pos_type pos, Inset * inset, + Font const & font, Change const & change); /// Inset * getInset(pos_type pos); /// diff --git a/src/paragraph_funcs.cpp b/src/paragraph_funcs.cpp index 600d361bd7..42b95330bf 100644 --- a/src/paragraph_funcs.cpp +++ b/src/paragraph_funcs.cpp @@ -46,13 +46,7 @@ static bool moveItem(Paragraph & fromPar, pos_type fromPos, // the inset is not in the paragraph any more tmpInset = fromPar.releaseInset(fromPos); } - - if (!toPar.inInset().insetAllowed(tmpInset->lyxCode())) { - delete tmpInset; - return false; - } - - toPar.insertInset(toPos, tmpInset, tmpFont, tmpChange); + return toPar.insertInset(toPos, tmpInset, tmpFont, tmpChange); } else { fromPar.eraseChar(fromPos, false); toPar.insertChar(toPos, tmpChar, tmpFont, tmpChange);