diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_colors.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_colors.cpp
index c07806c..cc6c9e9 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_colors.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_colors.cpp
@@ -512,7 +512,7 @@
                           int pixels,
                           int image_width,
                           int image_height,
-                          FX_BOOL bTransMask = FALSE) const;
+                          FX_BOOL bTransMask = FALSE) const override;
 
   FX_FLOAT m_WhitePoint[3];
   FX_FLOAT m_BlackPoint[3];
diff --git a/fpdfsdk/include/formfiller/FFL_ComboBox.h b/fpdfsdk/include/formfiller/FFL_ComboBox.h
index 3d1855c..7355045 100644
--- a/fpdfsdk/include/formfiller/FFL_ComboBox.h
+++ b/fpdfsdk/include/formfiller/FFL_ComboBox.h
@@ -25,51 +25,42 @@
                       public IPWL_Edit_Notify {
  public:
   CFFL_ComboBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget);
-  virtual ~CFFL_ComboBox();
+  ~CFFL_ComboBox() override;
 
-  virtual PWL_CREATEPARAM GetCreateParam();
-  virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp,
-                                 CPDFSDK_PageView* pPageView);
+  // CFFL_FormFiller:
+  PWL_CREATEPARAM GetCreateParam() override;
+  CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp,
+                         CPDFSDK_PageView* pPageView) override;
+  FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags) override;
+  FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView) override;
+  void SaveData(CPDFSDK_PageView* pPageView) override;
+  void GetActionData(CPDFSDK_PageView* pPageView,
+                     CPDF_AAction::AActionType type,
+                     PDFSDK_FieldAction& fa) override;
+  void SetActionData(CPDFSDK_PageView* pPageView,
+                     CPDF_AAction::AActionType type,
+                     const PDFSDK_FieldAction& fa) override;
+  FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type,
+                              const PDFSDK_FieldAction& faOld,
+                              const PDFSDK_FieldAction& faNew) override;
+  void SaveState(CPDFSDK_PageView* pPageView) override;
+  void RestoreState(CPDFSDK_PageView* pPageView) override;
+  CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView,
+                           FX_BOOL bRestoreValue) override;
+  void OnKeyStroke(FX_BOOL bKeyDown, FX_DWORD nFlag) override;
 
-  virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
+  // IPWL_FocusHandler:
+  void OnSetFocus(CPWL_Wnd* pWnd) override;
+  void OnKillFocus(CPWL_Wnd* pWnd) override;
 
-  virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView);
-  virtual void SaveData(CPDFSDK_PageView* pPageView);
-
-  virtual void GetActionData(CPDFSDK_PageView* pPageView,
-                             CPDF_AAction::AActionType type,
-                             PDFSDK_FieldAction& fa);
-  virtual void SetActionData(CPDFSDK_PageView* pPageView,
-                             CPDF_AAction::AActionType type,
-                             const PDFSDK_FieldAction& fa);
-  virtual FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type,
-                                      const PDFSDK_FieldAction& faOld,
-                                      const PDFSDK_FieldAction& faNew);
-  virtual void SaveState(CPDFSDK_PageView* pPageView);
-  virtual void RestoreState(CPDFSDK_PageView* pPageView);
-
-  virtual CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView,
-                                   FX_BOOL bRestoreValue);
-  virtual void OnKeyStroke(FX_BOOL bKeyDown, FX_UINT nFlag);
+  // IPWL_Edit_Notify:
+  void OnAddUndo(CPWL_Edit* pEdit) override;
 
   virtual FX_BOOL IsFieldFull(CPDFSDK_PageView* pPageView);
 
- public:
-  virtual void OnSetFocus(CPWL_Wnd* pWnd);
-  virtual void OnKillFocus(CPWL_Wnd* pWnd);
-
- public:
-  virtual void OnAddUndo(CPWL_Edit* pEdit);
-
- public:
-  virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument);
-  virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument);
-  virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument);
-
  private:
   CFX_WideString GetSelectExportText();
 
- private:
   CBA_FontMap* m_pFontMap;
   FFL_ComboBoxState m_State;
 };
diff --git a/fpdfsdk/include/formfiller/FFL_FormFiller.h b/fpdfsdk/include/formfiller/FFL_FormFiller.h
index 5ed5265..65e9beb 100644
--- a/fpdfsdk/include/formfiller/FFL_FormFiller.h
+++ b/fpdfsdk/include/formfiller/FFL_FormFiller.h
@@ -10,18 +10,16 @@
 #include "FFL_IFormFiller.h"
 #include "FFL_CBA_Fontmap.h"
 
-class CPDFSDK_Annot;
-class CFFL_FormFiller;
-class CFFL_Notify;
 class CPDFDoc_Environment;
-class CPDFSDK_PageView;
+class CPDFSDK_Annot;
 class CPDFSDK_Document;
+class CPDFSDK_PageView;
 class CPDFSDK_Widget;
 
 class CFFL_FormFiller : public IPWL_Provider, public CPWL_TimerHandler {
  public:
   CFFL_FormFiller(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot);
-  virtual ~CFFL_FormFiller();
+  ~CFFL_FormFiller() override;
 
   virtual FX_RECT GetViewBBox(CPDFSDK_PageView* pPageView,
                               CPDFSDK_Annot* pAnnot);
@@ -78,23 +76,16 @@
                             FX_UINT nFlags);
   virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
 
-  virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
-  virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
-
-  virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument);
-  virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument);
-  virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument);
-
-  virtual void DoCopy(CPDFSDK_Document* pDocument);
-  virtual void DoCut(CPDFSDK_Document* pDocument);
-  virtual void DoPaste(CPDFSDK_Document* pDocument);
+  FX_BOOL SetFocusForAnnot(CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
+  FX_BOOL KillFocusForAnnot(CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
 
   // CPWL_TimerHandler
-  virtual void TimerProc();
-  virtual IFX_SystemHandler* GetSystemHandler() const;
+  void TimerProc() override;
+  IFX_SystemHandler* GetSystemHandler() const override;
 
-  virtual CPDF_Matrix GetWindowMatrix(void* pAttachedData);
-  virtual CFX_WideString LoadPopupMenuString(int nIndex);
+  // IPWL_Provider
+  CPDF_Matrix GetWindowMatrix(void* pAttachedData) override;
+  CFX_WideString LoadPopupMenuString(int nIndex) override;
 
   virtual void GetActionData(CPDFSDK_PageView* pPageView,
                              CPDF_AAction::AActionType type,
@@ -112,7 +103,7 @@
   virtual CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView,
                                    FX_BOOL bRestoreValue);
 
-  virtual void OnKeyStroke(FX_BOOL bKeyDown);
+  virtual void OnKeyStroke(FX_BOOL bKeyDown, FX_DWORD nFlag);
 
   CPDF_Matrix GetCurMatrix();
 
diff --git a/fpdfsdk/include/formfiller/FFL_IFormFiller.h b/fpdfsdk/include/formfiller/FFL_IFormFiller.h
index 560cef1..1c1fd07 100644
--- a/fpdfsdk/include/formfiller/FFL_IFormFiller.h
+++ b/fpdfsdk/include/formfiller/FFL_IFormFiller.h
@@ -16,8 +16,8 @@
 
 class CFFL_IFormFiller : public IPWL_Filler_Notify {
  public:
-  CFFL_IFormFiller(CPDFDoc_Environment* pApp);
-  virtual ~CFFL_IFormFiller();
+  explicit CFFL_IFormFiller(CPDFDoc_Environment* pApp);
+  ~CFFL_IFormFiller() override;
 
   virtual FX_BOOL Annot_HitTest(CPDFSDK_PageView* pPageView,
                                 CPDFSDK_Annot* pAnnot,
@@ -25,10 +25,10 @@
   virtual FX_RECT GetViewBBox(CPDFSDK_PageView* pPageView,
                               CPDFSDK_Annot* pAnnot);
   virtual void OnDraw(CPDFSDK_PageView* pPageView,
-                      /*HDC hDC,*/ CPDFSDK_Annot* pAnnot,
+                      CPDFSDK_Annot* pAnnot,
                       CFX_RenderDevice* pDevice,
                       CPDF_Matrix* pUser2Device,
-                      /*const CRect& rcWindow,*/ FX_DWORD dwFlags);
+                      FX_DWORD dwFlags);
 
   virtual void OnCreate(CPDFSDK_Annot* pAnnot);
   virtual void OnLoad(CPDFSDK_Annot* pAnnot);
@@ -79,27 +79,6 @@
   virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
   virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
 
-  virtual void QueryWherePopup(void* pPrivateData,
-                               FX_FLOAT fPopupMin,
-                               FX_FLOAT fPopupMax,
-                               int32_t& nRet,
-                               FX_FLOAT& fPopupRet);
-  virtual void OnBeforeKeyStroke(FX_BOOL bEditOrList,
-                                 void* pPrivateData,
-                                 int32_t nKeyCode,
-                                 CFX_WideString& strChange,
-                                 const CFX_WideString& strChangeEx,
-                                 int nSelStart,
-                                 int nSelEnd,
-                                 FX_BOOL bKeyDown,
-                                 FX_BOOL& bRC,
-                                 FX_BOOL& bExit,
-                                 FX_DWORD nFlag);
-  virtual void OnAfterKeyStroke(FX_BOOL bEditOrList,
-                                void* pPrivateData,
-                                FX_BOOL& bExit,
-                                FX_DWORD nFlag);
-
   virtual void OnPopupPreOpen(void* pPrivateData,
                               FX_BOOL& bExit,
                               FX_DWORD nFlag);
@@ -164,6 +143,28 @@
  private:
   using CFFL_Widget2Filler = std::map<CPDFSDK_Annot*, CFFL_FormFiller*>;
 
+  // IPWL_Filler_Notify:
+  void QueryWherePopup(void* pPrivateData,
+                       FX_FLOAT fPopupMin,
+                       FX_FLOAT fPopupMax,
+                       int32_t& nRet,
+                       FX_FLOAT& fPopupRet) override;
+  void OnBeforeKeyStroke(FX_BOOL bEditOrList,
+                         void* pPrivateData,
+                         int32_t nKeyCode,
+                         CFX_WideString& strChange,
+                         const CFX_WideString& strChangeEx,
+                         int nSelStart,
+                         int nSelEnd,
+                         FX_BOOL bKeyDown,
+                         FX_BOOL& bRC,
+                         FX_BOOL& bExit,
+                         FX_DWORD nFlag) override;
+  void OnAfterKeyStroke(FX_BOOL bEditOrList,
+                        void* pPrivateData,
+                        FX_BOOL& bExit,
+                        FX_DWORD nFlag) override;
+
   void UnRegisterFormFiller(CPDFSDK_Annot* pAnnot);
   void SetFocusAnnotTab(CPDFSDK_Annot* pWidget,
                         FX_BOOL bSameField,
diff --git a/fpdfsdk/include/formfiller/FFL_TextField.h b/fpdfsdk/include/formfiller/FFL_TextField.h
index 21ccd6f..e8013cd 100644
--- a/fpdfsdk/include/formfiller/FFL_TextField.h
+++ b/fpdfsdk/include/formfiller/FFL_TextField.h
@@ -26,46 +26,38 @@
                        public IPWL_Edit_Notify {
  public:
   CFFL_TextField(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot);
-  virtual ~CFFL_TextField();
+  ~CFFL_TextField() override;
 
-  virtual PWL_CREATEPARAM GetCreateParam();
-  virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp,
-                                 CPDFSDK_PageView* pPageView);
+  // CFFL_FormFiller:
+  PWL_CREATEPARAM GetCreateParam() override;
+  CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp,
+                         CPDFSDK_PageView* pPageView) override;
+  FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags) override;
+  FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView) override;
+  void SaveData(CPDFSDK_PageView* pPageView) override;
+  void GetActionData(CPDFSDK_PageView* pPageView,
+                     CPDF_AAction::AActionType type,
+                     PDFSDK_FieldAction& fa) override;
+  void SetActionData(CPDFSDK_PageView* pPageView,
+                     CPDF_AAction::AActionType type,
+                     const PDFSDK_FieldAction& fa) override;
+  FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type,
+                              const PDFSDK_FieldAction& faOld,
+                              const PDFSDK_FieldAction& faNew) override;
+  void SaveState(CPDFSDK_PageView* pPageView) override;
+  void RestoreState(CPDFSDK_PageView* pPageView) override;
+  CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView,
+                           FX_BOOL bRestoreValue) override;
 
-  virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
+  // IPWL_FocusHandler:
+  void OnSetFocus(CPWL_Wnd* pWnd) override;
+  void OnKillFocus(CPWL_Wnd* pWnd) override;
 
-  virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView);
-  virtual void SaveData(CPDFSDK_PageView* pPageView);
-
-  virtual void GetActionData(CPDFSDK_PageView* pPageView,
-                             CPDF_AAction::AActionType type,
-                             PDFSDK_FieldAction& fa);
-  virtual void SetActionData(CPDFSDK_PageView* pPageView,
-                             CPDF_AAction::AActionType type,
-                             const PDFSDK_FieldAction& fa);
-  virtual FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type,
-                                      const PDFSDK_FieldAction& faOld,
-                                      const PDFSDK_FieldAction& faNew);
-  virtual void SaveState(CPDFSDK_PageView* pPageView);
-  virtual void RestoreState(CPDFSDK_PageView* pPageView);
-
-  virtual CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView,
-                                   FX_BOOL bRestoreValue);
+  // IPWL_Edit_Notify:
+  void OnAddUndo(CPWL_Edit* pEdit) override;
 
   virtual FX_BOOL IsFieldFull(CPDFSDK_PageView* pPageView);
 
- public:
-  virtual void OnSetFocus(CPWL_Wnd* pWnd);
-  virtual void OnKillFocus(CPWL_Wnd* pWnd);
-
- public:
-  virtual void OnAddUndo(CPWL_Edit* pEdit);
-
- public:
-  virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument);
-  virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument);
-  virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument);
-
  private:
   CBA_FontMap* m_pFontMap;
   FFL_TextFieldState m_State;
diff --git a/fpdfsdk/include/fsdk_baseform.h b/fpdfsdk/include/fsdk_baseform.h
index 2abafca..96617c3 100644
--- a/fpdfsdk/include/fsdk_baseform.h
+++ b/fpdfsdk/include/fsdk_baseform.h
@@ -307,18 +307,19 @@
   void SynchronizeField(CPDF_FormField* pFormField, FX_BOOL bSynchronizeElse);
 
  private:
-  virtual int BeforeValueChange(const CPDF_FormField* pField,
-                                CFX_WideString& csValue);
-  virtual int AfterValueChange(const CPDF_FormField* pField);
-  virtual int BeforeSelectionChange(const CPDF_FormField* pField,
-                                    CFX_WideString& csValue);
-  virtual int AfterSelectionChange(const CPDF_FormField* pField);
-  virtual int AfterCheckedStatusChange(const CPDF_FormField* pField,
-                                       const CFX_ByteArray& statusArray);
-  virtual int BeforeFormReset(const CPDF_InterForm* pForm);
-  virtual int AfterFormReset(const CPDF_InterForm* pForm);
-  virtual int BeforeFormImportData(const CPDF_InterForm* pForm);
-  virtual int AfterFormImportData(const CPDF_InterForm* pForm);
+  // CPDF_FormNotify
+  int BeforeValueChange(const CPDF_FormField* pField,
+                        CFX_WideString& csValue) override;
+  int AfterValueChange(const CPDF_FormField* pField) override;
+  int BeforeSelectionChange(const CPDF_FormField* pField,
+                            CFX_WideString& csValue) override;
+  int AfterSelectionChange(const CPDF_FormField* pField) override;
+  int AfterCheckedStatusChange(const CPDF_FormField* pField,
+                               const CFX_ByteArray& statusArray) override;
+  int BeforeFormReset(const CPDF_InterForm* pForm) override;
+  int AfterFormReset(const CPDF_InterForm* pForm) override;
+  int BeforeFormImportData(const CPDF_InterForm* pForm) override;
+  int AfterFormImportData(const CPDF_InterForm* pForm) override;
 
   FX_BOOL FDFToURLEncodedData(CFX_WideString csFDFFile,
                               CFX_WideString csTxtFile);
diff --git a/fpdfsdk/src/formfiller/FFL_ComboBox.cpp b/fpdfsdk/src/formfiller/FFL_ComboBox.cpp
index 500a22a..ea8d295 100644
--- a/fpdfsdk/src/formfiller/FFL_ComboBox.cpp
+++ b/fpdfsdk/src/formfiller/FFL_ComboBox.cpp
@@ -311,24 +311,6 @@
   ASSERT(m_pApp != NULL);
 }
 
-FX_BOOL CFFL_ComboBox::CanCopy(CPDFSDK_Document* pDocument) {
-  ASSERT(pDocument != NULL);
-
-  return FALSE;
-}
-
-FX_BOOL CFFL_ComboBox::CanCut(CPDFSDK_Document* pDocument) {
-  ASSERT(pDocument != NULL);
-
-  return FALSE;
-}
-
-FX_BOOL CFFL_ComboBox::CanPaste(CPDFSDK_Document* pDocument) {
-  ASSERT(pDocument != NULL);
-
-  return FALSE;
-}
-
 void CFFL_ComboBox::OnAddUndo(CPWL_Edit* pEdit) {
   ASSERT(pEdit != NULL);
 }
diff --git a/fpdfsdk/src/formfiller/FFL_FormFiller.cpp b/fpdfsdk/src/formfiller/FFL_FormFiller.cpp
index 5e59990..42177f5 100644
--- a/fpdfsdk/src/formfiller/FFL_FormFiller.cpp
+++ b/fpdfsdk/src/formfiller/FFL_FormFiller.cpp
@@ -242,7 +242,8 @@
   return FALSE;
 }
 
-FX_BOOL CFFL_FormFiller::OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) {
+FX_BOOL CFFL_FormFiller::SetFocusForAnnot(CPDFSDK_Annot* pAnnot,
+                                          FX_UINT nFlag) {
   CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
   CPDFXFA_Page* pPage = pWidget->GetPDFXFAPage();
   CPDFSDK_Document* pDoc = m_pApp->GetSDKDocument();
@@ -256,7 +257,8 @@
   return TRUE;
 }
 
-FX_BOOL CFFL_FormFiller::OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) {
+FX_BOOL CFFL_FormFiller::KillFocusForAnnot(CPDFSDK_Annot* pAnnot,
+                                           FX_UINT nFlag) {
   if (!IsValid())
     return TRUE;
 
@@ -603,7 +605,7 @@
   return m_pApp->GetSysHandler();
 }
 
-void CFFL_FormFiller::OnKeyStroke(FX_BOOL bKeyDown) {}
+void CFFL_FormFiller::OnKeyStroke(FX_BOOL bKeyDown, FX_DWORD nFlag) {}
 
 void CFFL_FormFiller::EscapeFiller(CPDFSDK_PageView* pPageView,
                                    FX_BOOL bDestroyPDFWindow) {
@@ -616,24 +618,6 @@
     DestroyPDFWindow(pPageView);
 }
 
-FX_BOOL CFFL_FormFiller::CanCopy(CPDFSDK_Document* pDocument) {
-  return FALSE;
-}
-
-FX_BOOL CFFL_FormFiller::CanCut(CPDFSDK_Document* pDocument) {
-  return FALSE;
-}
-
-FX_BOOL CFFL_FormFiller::CanPaste(CPDFSDK_Document* pDocument) {
-  return FALSE;
-}
-
-void CFFL_FormFiller::DoCopy(CPDFSDK_Document* pDocument) {}
-
-void CFFL_FormFiller::DoCut(CPDFSDK_Document* pDocument) {}
-
-void CFFL_FormFiller::DoPaste(CPDFSDK_Document* pDocument) {}
-
 void CFFL_FormFiller::InvalidateRect(double left,
                                      double top,
                                      double right,
diff --git a/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp b/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp
index ca01787..aaed794 100644
--- a/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp
+++ b/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp
@@ -463,7 +463,7 @@
   }
 
   if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE))
-    return pFormFiller->OnSetFocus(pAnnot, nFlag);
+    return pFormFiller->SetFocusForAnnot(pAnnot, nFlag);
 
   return TRUE;
 }
@@ -474,28 +474,28 @@
   ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
 
   if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
-    if (pFormFiller->OnKillFocus(pAnnot, nFlag)) {
-      if (!m_bNotifying) {
-        CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
-        if (pWidget->GetAAction(CPDF_AAction::LoseFocus)) {
-          m_bNotifying = TRUE;
-          pWidget->ClearAppModified();
-
-          CPDFSDK_PageView* pPageView = pWidget->GetPageView();
-          ASSERT(pPageView != NULL);
-
-          PDFSDK_FieldAction fa;
-          fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
-          fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
-
-          pFormFiller->GetActionData(pPageView, CPDF_AAction::LoseFocus, fa);
-
-          pWidget->OnAAction(CPDF_AAction::LoseFocus, fa, pPageView);
-          m_bNotifying = FALSE;
-        }
-      }
-    } else
+    if (!pFormFiller->KillFocusForAnnot(pAnnot, nFlag))
       return FALSE;
+
+    if (!m_bNotifying) {
+      CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
+      if (pWidget->GetAAction(CPDF_AAction::LoseFocus)) {
+        m_bNotifying = TRUE;
+        pWidget->ClearAppModified();
+
+        CPDFSDK_PageView* pPageView = pWidget->GetPageView();
+        ASSERT(pPageView != NULL);
+
+        PDFSDK_FieldAction fa;
+        fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
+        fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
+
+        pFormFiller->GetActionData(pPageView, CPDF_AAction::LoseFocus, fa);
+
+        pWidget->OnAAction(CPDF_AAction::LoseFocus, fa, pPageView);
+        m_bNotifying = FALSE;
+      }
+    }
   }
 
   return TRUE;
@@ -1084,13 +1084,11 @@
                                         void* pPrivateData,
                                         FX_BOOL& bExit,
                                         FX_DWORD nFlag) {
-  ASSERT(pPrivateData != NULL);
   CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData;
-  ASSERT(pData->pWidget != NULL);
+  ASSERT(pData->pWidget);
 
   CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE);
-  ASSERT(pFormFiller != NULL);
 
   if (!bEditOrList)
-    pFormFiller->OnKeyStroke(bExit);
+    pFormFiller->OnKeyStroke(bExit, nFlag);
 }
diff --git a/fpdfsdk/src/formfiller/FFL_TextField.cpp b/fpdfsdk/src/formfiller/FFL_TextField.cpp
index a1c7d78..3778c61 100644
--- a/fpdfsdk/src/formfiller/FFL_TextField.cpp
+++ b/fpdfsdk/src/formfiller/FFL_TextField.cpp
@@ -296,22 +296,9 @@
                                      nCharacters, TRUE);
 
     pEdit->SetEditNotify(this);
-    // pUndo->BeginEdit(pDocument);
   }
 }
 
 void CFFL_TextField::OnKillFocus(CPWL_Wnd* pWnd) {}
 
-FX_BOOL CFFL_TextField::CanCopy(CPDFSDK_Document* pDocument) {
-  return FALSE;
-}
-
-FX_BOOL CFFL_TextField::CanCut(CPDFSDK_Document* pDocument) {
-  return FALSE;
-}
-
-FX_BOOL CFFL_TextField::CanPaste(CPDFSDK_Document* pDocument) {
-  return FALSE;
-}
-
 void CFFL_TextField::OnAddUndo(CPWL_Edit* pEdit) {}
