diff --git a/fpdfsdk/pwl/cpwl_edit.cpp b/fpdfsdk/pwl/cpwl_edit.cpp
index 51c3b9f..0fd752e 100644
--- a/fpdfsdk/pwl/cpwl_edit.cpp
+++ b/fpdfsdk/pwl/cpwl_edit.cpp
@@ -214,45 +214,6 @@
                           m_pFormFiller.Get());
 }
 
-bool CPWL_Edit::OnLButtonDown(uint32_t nFlag, const CFX_PointF& point) {
-  CPWL_Wnd::OnLButtonDown(nFlag, point);
-
-  if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) {
-    if (m_bMouseDown && !InvalidateRect(nullptr))
-      return true;
-
-    m_bMouseDown = true;
-    SetCapture();
-
-    m_pEdit->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
-  }
-
-  return true;
-}
-
-bool CPWL_Edit::OnLButtonDblClk(uint32_t nFlag, const CFX_PointF& point) {
-  CPWL_Wnd::OnLButtonDblClk(nFlag, point);
-
-  if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) {
-    m_pEdit->SelectAll();
-  }
-
-  return true;
-}
-
-bool CPWL_Edit::OnRButtonUp(uint32_t nFlag, const CFX_PointF& point) {
-  if (m_bMouseDown)
-    return false;
-
-  CPWL_Wnd::OnRButtonUp(nFlag, point);
-
-  if (!HasFlag(PES_TEXTOVERFLOW) && !ClientHitTest(point))
-    return true;
-
-  SetFocus();
-
-  return false;
-}
 
 void CPWL_Edit::OnSetFocus() {
   ObservedPtr<CPWL_Edit> observed_ptr(this);
diff --git a/fpdfsdk/pwl/cpwl_edit.h b/fpdfsdk/pwl/cpwl_edit.h
index 6e4f28d..3639dce 100644
--- a/fpdfsdk/pwl/cpwl_edit.h
+++ b/fpdfsdk/pwl/cpwl_edit.h
@@ -30,9 +30,6 @@
   CFX_FloatRect GetClientRect() const override;
   void DrawThisAppearance(CFX_RenderDevice* pDevice,
                           const CFX_Matrix& mtUser2Device) override;
-  bool OnLButtonDown(uint32_t nFlag, const CFX_PointF& point) override;
-  bool OnLButtonDblClk(uint32_t nFlag, const CFX_PointF& point) override;
-  bool OnRButtonUp(uint32_t nFlag, const CFX_PointF& point) override;
   bool OnMouseWheel(uint32_t nFlag,
                     const CFX_PointF& point,
                     const CFX_Vector& delta) override;
@@ -50,11 +47,8 @@
   bool CanSelectAll() const;
   bool CanCopy() const;
   bool CanCut() const;
-
   void CutText();
-
   void SetText(const WideString& csText);
-
   bool IsTextFull() const;
 
   static float GetCharArrayAutoFontSize(const CPDF_Font* pFont,
diff --git a/fpdfsdk/pwl/cpwl_edit_ctrl.cpp b/fpdfsdk/pwl/cpwl_edit_ctrl.cpp
index d353409..8b06e32 100644
--- a/fpdfsdk/pwl/cpwl_edit_ctrl.cpp
+++ b/fpdfsdk/pwl/cpwl_edit_ctrl.cpp
@@ -256,23 +256,19 @@
 
 bool CPWL_EditCtrl::OnLButtonDown(uint32_t nFlag, const CFX_PointF& point) {
   CPWL_Wnd::OnLButtonDown(nFlag, point);
-
-  if (ClientHitTest(point)) {
+  if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) {
     if (m_bMouseDown && !InvalidateRect(nullptr))
       return true;
 
     m_bMouseDown = true;
     SetCapture();
-
     m_pEdit->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
   }
-
   return true;
 }
 
 bool CPWL_EditCtrl::OnLButtonUp(uint32_t nFlag, const CFX_PointF& point) {
   CPWL_Wnd::OnLButtonUp(nFlag, point);
-
   if (m_bMouseDown) {
     // can receive keybord message
     if (ClientHitTest(point) && !IsFocused())
@@ -281,10 +277,29 @@
     ReleaseCapture();
     m_bMouseDown = false;
   }
+  return true;
+}
+
+bool CPWL_EditCtrl::OnLButtonDblClk(uint32_t nFlag, const CFX_PointF& point) {
+  CPWL_Wnd::OnLButtonDblClk(nFlag, point);
+  if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point))
+    m_pEdit->SelectAll();
 
   return true;
 }
 
+bool CPWL_EditCtrl::OnRButtonUp(uint32_t nFlag, const CFX_PointF& point) {
+  if (m_bMouseDown)
+    return false;
+
+  CPWL_Wnd::OnRButtonUp(nFlag, point);
+  if (!HasFlag(PES_TEXTOVERFLOW) && !ClientHitTest(point))
+    return true;
+
+  SetFocus();
+  return false;
+}
+
 bool CPWL_EditCtrl::OnMouseMove(uint32_t nFlag, const CFX_PointF& point) {
   CPWL_Wnd::OnMouseMove(nFlag, point);
 
diff --git a/fpdfsdk/pwl/cpwl_edit_ctrl.h b/fpdfsdk/pwl/cpwl_edit_ctrl.h
index 1db4728..b21eb14 100644
--- a/fpdfsdk/pwl/cpwl_edit_ctrl.h
+++ b/fpdfsdk/pwl/cpwl_edit_ctrl.h
@@ -47,6 +47,8 @@
   bool OnChar(uint16_t nChar, uint32_t nFlag) override;
   bool OnLButtonDown(uint32_t nFlag, const CFX_PointF& point) override;
   bool OnLButtonUp(uint32_t nFlag, const CFX_PointF& point) override;
+  bool OnLButtonDblClk(uint32_t nFlag, const CFX_PointF& point) override;
+  bool OnRButtonUp(uint32_t nFlag, const CFX_PointF& point) override;
   bool OnMouseMove(uint32_t nFlag, const CFX_PointF& point) override;
   void SetScrollInfo(const PWL_SCROLL_INFO& info) override;
   void SetScrollPosition(float pos) override;
