diff --git a/xfa/fwl/cfwl_barcode.cpp b/xfa/fwl/cfwl_barcode.cpp
index 9cc2918..592bf2a 100644
--- a/xfa/fwl/cfwl_barcode.cpp
+++ b/xfa/fwl/cfwl_barcode.cpp
@@ -64,11 +64,16 @@
   m_eStatus = Status::kNeedUpdate;
 }
 
-void CFWL_Barcode::SetText(const WideString& wsText,
-                           CFDE_TextEditEngine::RecordOperation op) {
+void CFWL_Barcode::SetText(const WideString& wsText) {
   m_pBarcodeEngine.reset();
   m_eStatus = Status::kNeedUpdate;
-  CFWL_Edit::SetText(wsText, op);
+  CFWL_Edit::SetText(wsText);
+}
+
+void CFWL_Barcode::SetTextSkipNotify(const WideString& wsText) {
+  m_pBarcodeEngine.reset();
+  m_eStatus = Status::kNeedUpdate;
+  CFWL_Edit::SetTextSkipNotify(wsText);
 }
 
 bool CFWL_Barcode::IsProtectedType() const {
diff --git a/xfa/fwl/cfwl_barcode.h b/xfa/fwl/cfwl_barcode.h
index 759d048..64a21d3 100644
--- a/xfa/fwl/cfwl_barcode.h
+++ b/xfa/fwl/cfwl_barcode.h
@@ -41,10 +41,8 @@
   void OnProcessEvent(CFWL_Event* pEvent) override;
 
   // CFWL_Edit
-  void SetText(
-      const WideString& wsText,
-      CFDE_TextEditEngine::RecordOperation op =
-          CFDE_TextEditEngine::RecordOperation::kInsertRecord) override;
+  void SetText(const WideString& wsText) override;
+  void SetTextSkipNotify(const WideString& wsText) override;
 
   void SetType(BC_TYPE type);
   bool IsProtectedType() const;
diff --git a/xfa/fwl/cfwl_edit.cpp b/xfa/fwl/cfwl_edit.cpp
index 70ccd6d..96b4d97 100644
--- a/xfa/fwl/cfwl_edit.cpp
+++ b/xfa/fwl/cfwl_edit.cpp
@@ -159,10 +159,16 @@
   m_pProperties->m_pThemeProvider = pThemeProvider;
 }
 
-void CFWL_Edit::SetText(const WideString& wsText,
-                        CFDE_TextEditEngine::RecordOperation op) {
+void CFWL_Edit::SetText(const WideString& wsText) {
   m_EdtEngine.Clear();
-  m_EdtEngine.Insert(0, wsText, op);
+  m_EdtEngine.Insert(0, wsText,
+                     CFDE_TextEditEngine::RecordOperation::kInsertRecord);
+}
+
+void CFWL_Edit::SetTextSkipNotify(const WideString& wsText) {
+  m_EdtEngine.Clear();
+  m_EdtEngine.Insert(0, wsText,
+                     CFDE_TextEditEngine::RecordOperation::kSkipNotify);
 }
 
 int32_t CFWL_Edit::GetTextLength() const {
diff --git a/xfa/fwl/cfwl_edit.h b/xfa/fwl/cfwl_edit.h
index e633568..4c59ef7 100644
--- a/xfa/fwl/cfwl_edit.h
+++ b/xfa/fwl/cfwl_edit.h
@@ -64,9 +64,8 @@
   void OnDrawWidget(CXFA_Graphics* pGraphics,
                     const CFX_Matrix& matrix) override;
 
-  virtual void SetText(const WideString& wsText,
-                       CFDE_TextEditEngine::RecordOperation op =
-                           CFDE_TextEditEngine::RecordOperation::kInsertRecord);
+  virtual void SetText(const WideString& wsText);
+  virtual void SetTextSkipNotify(const WideString& wsText);
 
   int32_t GetTextLength() const;
   WideString GetText() const;
diff --git a/xfa/fxfa/cxfa_fftextedit.cpp b/xfa/fxfa/cxfa_fftextedit.cpp
index 75b9662..9d125db 100644
--- a/xfa/fxfa/cxfa_fftextedit.cpp
+++ b/xfa/fxfa/cxfa_fftextedit.cpp
@@ -288,7 +288,7 @@
   WideString wsText = m_pNode->GetValue(eType);
   WideString wsOldText = pEdit->GetText();
   if (wsText != wsOldText || (eType == XFA_VALUEPICTURE_Edit && bUpdate)) {
-    pEdit->SetText(wsText, CFDE_TextEditEngine::RecordOperation::kSkipNotify);
+    pEdit->SetTextSkipNotify(wsText);
     bUpdate = true;
   }
   if (bUpdate)
