]> git.lyx.org Git - features.git/commitdiff
Track changes in InsetCommands
authorJuergen Spitzmueller <spitz@lyx.org>
Tue, 31 Dec 2019 14:46:03 +0000 (15:46 +0100)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Thu, 18 Jun 2020 13:48:49 +0000 (15:48 +0200)
src/insets/InsetCommand.cpp
src/insets/InsetCommand.h

index 7693d08fd7c70010f323eddd24956697932d09fd..1d67ad97d95d527aec7907d618b4e6ed01b8c5a2 100644 (file)
@@ -22,6 +22,7 @@
 #include "FuncRequest.h"
 #include "FuncStatus.h"
 #include "Lexer.h"
+#include "LyX.h"
 #include "MetricsInfo.h"
 #include "texstream.h"
 
@@ -186,13 +187,33 @@ void InsetCommand::validate(LaTeXFeatures & features) const
 }
 
 
+void InsetCommand::changeCmdName(string const & new_name)
+{
+       string const old_name = getCmdName();
+       if (old_name == new_name)
+               return;
+
+       if (buffer().masterParams().track_changes) {
+               // With change tracking, we insert a new inset and
+               // delete the old one
+               InsetCommandParams p(p_.code());
+               p = p_;
+               p.setCmdName(new_name);
+               string const data = InsetCommand::params2string(p);
+               lyx::dispatch(FuncRequest(LFUN_INSET_INSERT, data));
+               lyx::dispatch(FuncRequest(LFUN_CHAR_DELETE_FORWARD));
+       } else
+               p_.setCmdName(new_name);
+}
+
+
 void InsetCommand::doDispatch(Cursor & cur, FuncRequest & cmd)
 {
        switch (cmd.action()) {
        case LFUN_INSET_MODIFY: {
                if (cmd.getArg(0) == "changetype") {
                        cur.recordUndo();
-                       p_.setCmdName(cmd.getArg(1));
+                       changeCmdName(cmd.getArg(1));
                        cur.forceBufferUpdate();
                        initView();
                        break;
@@ -203,7 +224,14 @@ void InsetCommand::doDispatch(Cursor & cur, FuncRequest & cmd)
                        cur.noScreenUpdate();
                else {
                        cur.recordUndo();
-                       setParams(p);
+                       if (buffer().masterParams().track_changes) {
+                               // With change tracking, we insert a new inset and
+                               // delete the old one
+                               string const data = InsetCommand::params2string(p);
+                               lyx::dispatch(FuncRequest(LFUN_INSET_INSERT, data));
+                               lyx::dispatch(FuncRequest(LFUN_CHAR_DELETE_FORWARD));
+                       } else
+                               setParams(p);
                }
                // FIXME We might also want to check here if this one is in the TOC.
                // But I think most of those are labeled.
index f51f8c939a05452be85e4971ab5df44b3094772e..d450a663471c14cf7481b5a178f3d1d30112831d 100644 (file)
@@ -118,6 +118,8 @@ protected:
        /// What matters here is the parameter name, not position.
        /// \see InsetCommandParams::setCmdName
        void setCmdName(std::string const & n) { p_.setCmdName(n); }
+       ///
+       void changeCmdName(std::string const & new_name);
        //@}
 
 private: