- if (updaterefs) {
- Buffer::References & refs = buffer().references(old_label);
- Buffer::References::iterator it = refs.begin();
- Buffer::References::iterator end = refs.end();
- for (; it != end; ++it) {
- buffer().undo().recordUndo(it->second);
- if (it->first->lyxCode() == MATH_REF_CODE) {
- InsetMathHull * mi = it->first->asInsetMath()->asHullInset();
- mi->asRefInset()->changeTarget(label);
- } else {
- InsetCommand * ref = it->first->asInsetCommand();
- ref->setParam("reference", label);
- }
+
+void InsetLabel::updateLabelAndRefs(docstring const & new_label,
+ Cursor * cursor)
+{
+ docstring const old_label = getParam("name");
+ docstring label = new_label;
+ uniqueLabel(label);
+ if (label == old_label)
+ return;
+
+ // This handles undo groups automagically
+ UndoGroupHelper ugh(&buffer());
+ if (cursor)
+ cursor->recordUndo();
+ setParam("name", label);
+ updateReferences(old_label, label);
+}
+
+
+void InsetLabel::updateReferences(docstring const & old_label,
+ docstring const & new_label)
+{
+ UndoGroupHelper ugh;
+ 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) {
+ ugh.resetBuffer(it->second.buffer());
+ 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);
+ } else {
+ InsetCommand * ref = it->first->asInsetCommand();
+ ref->setParam("reference", new_label);