X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetLabel.cpp;h=35d5f543b8f86e4a0d32fa3799b3192c0ecd48e2;hb=a25569ebb3e739779ff458b287e403c3bf79777a;hp=c483f9488374731b21e4bf4e36c0bd1590290011;hpb=8995a8387a03361b6a7ff44b447a90a6187b1a14;p=lyx.git diff --git a/src/insets/InsetLabel.cpp b/src/insets/InsetLabel.cpp index c483f94883..35d5f543b8 100644 --- a/src/insets/InsetLabel.cpp +++ b/src/insets/InsetLabel.cpp @@ -55,9 +55,11 @@ InsetLabel::InsetLabel(Buffer * buf, InsetCommandParams const & p) void InsetLabel::initView() { - // FIXME: This seems to be used only for inset creation so - // we probably just need to call updateLabel() here. - updateLabelAndRefs(getParam("name")); + // This seems to be used only for inset creation. + // Therefore we do not update refs here, since this would + // erroneously change refs from existing duplicate labels + // (#8141). + updateLabel(getParam("name")); } @@ -107,11 +109,11 @@ void InsetLabel::updateLabelAndRefs(docstring const & new_label, void InsetLabel::updateReferences(docstring const & old_label, docstring const & new_label) { - Buffer::References & refs = buffer().references(old_label); - Buffer::References::iterator it = refs.begin(); - Buffer::References::iterator end = refs.end(); + Buffer::References const & refs = buffer().references(old_label); + Buffer::References::const_iterator it = refs.begin(); + Buffer::References::const_iterator end = refs.end(); for (; it != end; ++it) { - buffer().undo().recordUndo(it->second); + buffer().undo().recordUndo(CursorData(it->second)); if (it->first->lyxCode() == MATH_REF_CODE) { InsetMathRef * mi = it->first->asInsetMath()->asRefInset(); mi->changeTarget(new_label); @@ -167,15 +169,15 @@ void InsetLabel::updateBuffer(ParIterator const & par, UpdateType utype) } -void InsetLabel::addToToc(DocIterator const & cpit) const +void InsetLabel::addToToc(DocIterator const & cpit, bool output_active) const { docstring const & label = getParam("name"); Toc & toc = buffer().tocBackend().toc("label"); if (buffer().insetLabel(label) != this) { - toc.push_back(TocItem(cpit, 0, screen_label_)); + toc.push_back(TocItem(cpit, 0, screen_label_, output_active)); return; } - toc.push_back(TocItem(cpit, 0, screen_label_)); + toc.push_back(TocItem(cpit, 0, screen_label_, output_active)); Buffer::References const & refs = buffer().references(label); Buffer::References::const_iterator it = refs.begin(); Buffer::References::const_iterator end = refs.end(); @@ -183,10 +185,12 @@ void InsetLabel::addToToc(DocIterator const & cpit) const DocIterator const ref_pit(it->second); if (it->first->lyxCode() == MATH_REF_CODE) toc.push_back(TocItem(ref_pit, 1, - it->first->asInsetMath()->asRefInset()->screenLabel())); + it->first->asInsetMath()->asRefInset()->screenLabel(), + output_active)); else toc.push_back(TocItem(ref_pit, 1, - static_cast(it->first)->screenLabel())); + static_cast(it->first)->getTOCString(), + output_active)); } } @@ -196,10 +200,17 @@ bool InsetLabel::getStatus(Cursor & cur, FuncRequest const & cmd, { bool enabled; switch (cmd.action()) { - case LFUN_LABEL_INSERT_AS_REF: - case LFUN_LABEL_COPY_AS_REF: + case LFUN_LABEL_INSERT_AS_REFERENCE: + case LFUN_LABEL_COPY_AS_REFERENCE: enabled = true; break; + case LFUN_INSET_MODIFY: + if (cmd.getArg(0) == "changetype") { + // this is handled by InsetCommand, + // but not by InsetLabel. + enabled = false; + break; + } default: return InsetCommand::getStatus(cur, cmd, status); } @@ -214,6 +225,12 @@ void InsetLabel::doDispatch(Cursor & cur, FuncRequest & cmd) switch (cmd.action()) { case LFUN_INSET_MODIFY: { + // the only other option here is "changetype", and we + // do not have different types. + if (cmd.getArg(0) != "label") { + cur.undispatched(); + return; + } InsetCommandParams p(LABEL_CODE); // FIXME UNICODE InsetCommand::string2params(to_utf8(cmd.argument()), p); @@ -229,7 +246,7 @@ void InsetLabel::doDispatch(Cursor & cur, FuncRequest & cmd) break; } - case LFUN_LABEL_COPY_AS_REF: { + case LFUN_LABEL_COPY_AS_REFERENCE: { InsetCommandParams p(REF_CODE, "ref"); p["reference"] = getParam("name"); cap::clearSelection(); @@ -237,7 +254,7 @@ void InsetLabel::doDispatch(Cursor & cur, FuncRequest & cmd) break; } - case LFUN_LABEL_INSERT_AS_REF: { + case LFUN_LABEL_INSERT_AS_REFERENCE: { InsetCommandParams p(REF_CODE, "ref"); p["reference"] = getParam("name"); string const data = InsetCommand::params2string(p); @@ -252,7 +269,8 @@ void InsetLabel::doDispatch(Cursor & cur, FuncRequest & cmd) } -int InsetLabel::plaintext(odocstream & os, OutputParams const &) const +int InsetLabel::plaintext(odocstringstream & os, + OutputParams const &, size_t) const { docstring const str = getParam("name"); os << '<' << str << '>';