From: Jean-Marc Lasgouttes Date: Fri, 17 Jan 2003 09:57:50 +0000 (+0000) Subject: fix inset insertion woes X-Git-Tag: 1.6.10~17672 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=feee60b0f3818a7ff963db47c79723201d9de615;p=features.git fix inset insertion woes git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@5969 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/ChangeLog b/src/ChangeLog index f2472edbf4..b1b65ee281 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2003-01-16 Jean-Marc Lasgouttes + + * text3.C (dispatch): put the lfuns that insert insets in 3 + groups, and call doInsertInset with appropriate arguments. + (doInsertInset): new function, that creates an inset and inserts + it according to some boolean parameters. + 2003-01-16 Lars Gullik Bjønnes * buffer.C (readFile): remember to pass on 'par' when calling diff --git a/src/text3.C b/src/text3.C index a24e28d625..c737a2340e 100644 --- a/src/text3.C +++ b/src/text3.C @@ -362,6 +362,7 @@ void LyXText::update(BufferView * bv, bool changed) bv->update(this, c); } +namespace { void specialChar(LyXText * lt, BufferView * bv, InsetSpecialChar::Kind kind) { @@ -374,6 +375,31 @@ void specialChar(LyXText * lt, BufferView * bv, InsetSpecialChar::Kind kind) bv->updateInset(new_inset, true); } +void doInsertInset(LyXText * lt, FuncRequest const & cmd, + bool edit, bool pastesel) +{ + Inset * inset = createInset(cmd); + BufferView * bv = cmd.view(); + + if (inset) { + bool gotsel = false; + if (lt->selection.set()) { + lt->cutSelection(bv, true, false); + gotsel = true; + } + if (bv->insertInset(inset)) { + if (edit) + inset->edit(bv); + if (gotsel && pastesel) + bv->owner()->dispatch(FuncRequest(LFUN_PASTESELECTION)); + } + else + delete inset; + } + +} + +} Inset::RESULT LyXText::dispatch(FuncRequest const & cmd) { @@ -1592,12 +1618,10 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd) #if 0 case LFUN_INSET_LIST: case LFUN_INSET_THEOREM: + case LFUN_INSET_CAPTION: #endif case LFUN_INSERT_NOTE: - case LFUN_INSERT_URL: - case LFUN_INSET_CAPTION: case LFUN_INSET_ERT: - case LFUN_INSET_EXTERNAL: case LFUN_INSET_FLOAT: case LFUN_INSET_FOOTNOTE: case LFUN_INSET_MARGINAL: @@ -1606,29 +1630,24 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd) case LFUN_INSET_WIDE_FLOAT: case LFUN_INSET_WRAP: case LFUN_TABULAR_INSERT: + // Open the inset, and move the current selection + // inside it. + doInsertInset(this, cmd, true, true); + break; + + case LFUN_INSERT_URL: + case LFUN_INSET_EXTERNAL: case LFUN_INDEX_INSERT: + // Just open the inset + doInsertInset(this, cmd, true, false); + break; + case LFUN_INDEX_PRINT: case LFUN_PARENTINSERT: case LFUN_TOC_INSERT: - { - Inset * inset = createInset(cmd); - if (inset) { - bool gotsel = false; - if (selection.set()) { - cutSelection(bv, true, false); - gotsel = true; - } - if (bv->insertInset(inset)) { - inset->edit(bv); - if (gotsel) - bv->owner()->dispatch(FuncRequest(LFUN_PASTESELECTION)); - } - else - delete inset; - } + // do nothing fancy + doInsertInset(this, cmd, false, false); break; - } - default: return Inset::UNDISPATCHED;