Split FWL OnFocusChanged() methods into Gained()/Lost() pairs

Removing the bool argument vastly simplifies the logic. Also remove
message parameter when it is unused.

Change-Id: I9274533c001fd0bcdc90f5765b6126ef7093c8c9
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/81332
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fwl/cfwl_checkbox.cpp b/xfa/fwl/cfwl_checkbox.cpp
index 3d7c95d..b38159e 100644
--- a/xfa/fwl/cfwl_checkbox.cpp
+++ b/xfa/fwl/cfwl_checkbox.cpp
@@ -184,10 +184,10 @@
 void CFWL_CheckBox::OnProcessMessage(CFWL_Message* pMessage) {
   switch (pMessage->GetType()) {
     case CFWL_Message::Type::kSetFocus:
-      OnFocusChanged(true);
+      OnFocusGained();
       break;
     case CFWL_Message::Type::kKillFocus:
-      OnFocusChanged(false);
+      OnFocusLost();
       break;
     case CFWL_Message::Type::kMouse: {
       CFWL_MessageMouse* pMsg = static_cast<CFWL_MessageMouse*>(pMessage);
@@ -228,12 +228,13 @@
   DrawWidget(pGraphics, matrix);
 }
 
-void CFWL_CheckBox::OnFocusChanged(bool bSet) {
-  if (bSet)
-    m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
-  else
-    m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
+void CFWL_CheckBox::OnFocusGained() {
+  m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
+  RepaintRect(m_ClientRect);
+}
 
+void CFWL_CheckBox::OnFocusLost() {
+  m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
   RepaintRect(m_ClientRect);
 }
 
diff --git a/xfa/fwl/cfwl_checkbox.h b/xfa/fwl/cfwl_checkbox.h
index 0f69ec2..dbee03d 100644
--- a/xfa/fwl/cfwl_checkbox.h
+++ b/xfa/fwl/cfwl_checkbox.h
@@ -54,7 +54,8 @@
   uint32_t GetPartStates() const;
   void UpdateTextOutStyles();
   void NextStates();
-  void OnFocusChanged(bool bSet);
+  void OnFocusGained();
+  void OnFocusLost();
   void OnLButtonDown();
   void OnLButtonUp(CFWL_MessageMouse* pMsg);
   void OnMouseMove(CFWL_MessageMouse* pMsg);
diff --git a/xfa/fwl/cfwl_combobox.cpp b/xfa/fwl/cfwl_combobox.cpp
index dc62065..b8bd6b3 100644
--- a/xfa/fwl/cfwl_combobox.cpp
+++ b/xfa/fwl/cfwl_combobox.cpp
@@ -379,12 +379,12 @@
   switch (pMessage->GetType()) {
     case CFWL_Message::Type::kSetFocus: {
       backDefault = false;
-      OnFocusChanged(pMessage, true);
+      OnFocusGained();
       break;
     }
     case CFWL_Message::Type::kKillFocus: {
       backDefault = false;
-      OnFocusChanged(pMessage, false);
+      OnFocusLost();
       break;
     }
     case CFWL_Message::Type::kMouse: {
@@ -471,21 +471,21 @@
   ShowDropList(true);
 }
 
-void CFWL_ComboBox::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
-  if (bSet) {
-    m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
-    if ((m_pEdit->GetStates() & FWL_WGTSTATE_Focused) == 0) {
-      CFWL_MessageSetFocus msg(nullptr, m_pEdit);
-      m_pEdit->GetDelegate()->OnProcessMessage(&msg);
-    }
-  } else {
-    m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
-    ShowDropList(false);
-    CFWL_MessageKillFocus msg(m_pEdit);
+void CFWL_ComboBox::OnFocusGained() {
+  m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
+  if ((m_pEdit->GetStates() & FWL_WGTSTATE_Focused) == 0) {
+    CFWL_MessageSetFocus msg(nullptr, m_pEdit);
     m_pEdit->GetDelegate()->OnProcessMessage(&msg);
   }
 }
 
+void CFWL_ComboBox::OnFocusLost() {
+  m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
+  ShowDropList(false);
+  CFWL_MessageKillFocus msg(m_pEdit);
+  m_pEdit->GetDelegate()->OnProcessMessage(&msg);
+}
+
 void CFWL_ComboBox::OnKey(CFWL_MessageKey* pMsg) {
   uint32_t dwKeyCode = pMsg->m_dwKeyCode;
   const bool bUp = dwKeyCode == XFA_FWL_VKEY_Up;
diff --git a/xfa/fwl/cfwl_combobox.h b/xfa/fwl/cfwl_combobox.h
index f19cb12..5830b20 100644
--- a/xfa/fwl/cfwl_combobox.h
+++ b/xfa/fwl/cfwl_combobox.h
@@ -108,7 +108,8 @@
   void OnLButtonUp(CFWL_MessageMouse* pMsg);
   bool IsDropListVisible() const { return m_pListBox->IsVisible(); }
   void OnLButtonDown(CFWL_MessageMouse* pMsg);
-  void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
+  void OnFocusGained();
+  void OnFocusLost();
   void OnKey(CFWL_MessageKey* pMsg);
 
   CFX_RectF m_ClientRect;
diff --git a/xfa/fwl/cfwl_datetimepicker.cpp b/xfa/fwl/cfwl_datetimepicker.cpp
index 6f16255..0798637 100644
--- a/xfa/fwl/cfwl_datetimepicker.cpp
+++ b/xfa/fwl/cfwl_datetimepicker.cpp
@@ -297,10 +297,10 @@
 void CFWL_DateTimePicker::OnProcessMessage(CFWL_Message* pMessage) {
   switch (pMessage->GetType()) {
     case CFWL_Message::Type::kSetFocus:
-      OnFocusChanged(pMessage, true);
+      OnFocusGained(pMessage);
       break;
     case CFWL_Message::Type::kKillFocus:
-      OnFocusChanged(pMessage, false);
+      OnFocusLost(pMessage);
       break;
     case CFWL_Message::Type::kMouse: {
       CFWL_MessageMouse* pMouse = static_cast<CFWL_MessageMouse*>(pMessage);
@@ -342,29 +342,28 @@
   DrawWidget(pGraphics, matrix);
 }
 
-void CFWL_DateTimePicker::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
-  if (!pMsg)
-    return;
-
+void CFWL_DateTimePicker::OnFocusGained(CFWL_Message* pMsg) {
+  m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
+  if (m_pEdit && !(m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly)) {
+    m_BtnRect =
+        CFX_RectF(m_WidgetRect.width, 0, m_fBtn, m_WidgetRect.height - 1);
+  }
   CFX_RectF rtInvalidate(m_BtnRect);
-  if (bSet) {
-    m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
-    if (m_pEdit && !(m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly)) {
-      m_BtnRect =
-          CFX_RectF(m_WidgetRect.width, 0, m_fBtn, m_WidgetRect.height - 1);
-    }
-    rtInvalidate = m_BtnRect;
-    pMsg->SetDstTarget(m_pEdit);
+  pMsg->SetDstTarget(m_pEdit);
+  m_pEdit->GetDelegate()->OnProcessMessage(pMsg);
+  rtInvalidate.Inflate(2, 2);
+  RepaintRect(rtInvalidate);
+}
+
+void CFWL_DateTimePicker::OnFocusLost(CFWL_Message* pMsg) {
+  CFX_RectF rtInvalidate(m_BtnRect);
+  m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
+  m_BtnRect = CFX_RectF();
+  if (IsMonthCalendarVisible())
+    ShowMonthCalendar(false);
+  if (m_pEdit->GetStates() & FWL_WGTSTATE_Focused) {
+    pMsg->SetSrcTarget(m_pEdit);
     m_pEdit->GetDelegate()->OnProcessMessage(pMsg);
-  } else {
-    m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
-    m_BtnRect = CFX_RectF();
-    if (IsMonthCalendarVisible())
-      ShowMonthCalendar(false);
-    if (m_pEdit->GetStates() & FWL_WGTSTATE_Focused) {
-      pMsg->SetSrcTarget(m_pEdit);
-      m_pEdit->GetDelegate()->OnProcessMessage(pMsg);
-    }
   }
   rtInvalidate.Inflate(2, 2);
   RepaintRect(rtInvalidate);
diff --git a/xfa/fwl/cfwl_datetimepicker.h b/xfa/fwl/cfwl_datetimepicker.h
index bc55bf1..d0e80cf 100644
--- a/xfa/fwl/cfwl_datetimepicker.h
+++ b/xfa/fwl/cfwl_datetimepicker.h
@@ -87,7 +87,8 @@
                    float fMaxHeight,
                    const CFX_RectF& rtAnchor,
                    CFX_RectF* pPopupRect);
-  void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
+  void OnFocusGained(CFWL_Message* pMsg);
+  void OnFocusLost(CFWL_Message* pMsg);
   void OnLButtonDown(CFWL_MessageMouse* pMsg);
   void OnLButtonUp(CFWL_MessageMouse* pMsg);
   void OnMouseMove(CFWL_MessageMouse* pMsg);
diff --git a/xfa/fwl/cfwl_edit.cpp b/xfa/fwl/cfwl_edit.cpp
index 8884694..f2d9d36 100644
--- a/xfa/fwl/cfwl_edit.cpp
+++ b/xfa/fwl/cfwl_edit.cpp
@@ -902,10 +902,10 @@
 void CFWL_Edit::OnProcessMessage(CFWL_Message* pMessage) {
   switch (pMessage->GetType()) {
     case CFWL_Message::Type::kSetFocus:
-      OnFocusChanged(pMessage, true);
+      OnFocusGained();
       break;
     case CFWL_Message::Type::kKillFocus:
-      OnFocusChanged(pMessage, false);
+      OnFocusLost();
       break;
     case CFWL_Message::Type::kMouse: {
       CFWL_MessageMouse* pMsg = static_cast<CFWL_MessageMouse*>(pMessage);
@@ -969,25 +969,25 @@
       m_pEditEngine->GetIndexForPoint(DeviceToEngine(pMsg->m_pos)));
 }
 
-void CFWL_Edit::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
-  bool bRepaint = false;
-  if (bSet) {
-    m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
+void CFWL_Edit::OnFocusGained() {
+  m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
+  UpdateVAlignment();
+  UpdateOffset();
+  UpdateCaret();
+  LayoutScrollBar();
+}
 
-    UpdateVAlignment();
-    UpdateOffset();
-    UpdateCaret();
-  } else if (m_Properties.m_dwStates & FWL_WGTSTATE_Focused) {
+void CFWL_Edit::OnFocusLost() {
+  bool bRepaint = false;
+  if (m_Properties.m_dwStates & FWL_WGTSTATE_Focused) {
     m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
     HideCaret(nullptr);
-
     if (HasSelection()) {
       ClearSelection();
       bRepaint = true;
     }
     UpdateOffset();
   }
-
   LayoutScrollBar();
   if (!bRepaint)
     return;
diff --git a/xfa/fwl/cfwl_edit.h b/xfa/fwl/cfwl_edit.h
index 07e3ed1..b1eb279 100644
--- a/xfa/fwl/cfwl_edit.h
+++ b/xfa/fwl/cfwl_edit.h
@@ -131,7 +131,8 @@
   void UpdateCursorRect();
 
   void DoRButtonDown(CFWL_MessageMouse* pMsg);
-  void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
+  void OnFocusGained();
+  void OnFocusLost();
   void OnLButtonDown(CFWL_MessageMouse* pMsg);
   void OnLButtonUp(CFWL_MessageMouse* pMsg);
   void OnButtonDoubleClick(CFWL_MessageMouse* pMsg);
diff --git a/xfa/fwl/cfwl_listbox.cpp b/xfa/fwl/cfwl_listbox.cpp
index 49197e8..f65d369 100644
--- a/xfa/fwl/cfwl_listbox.cpp
+++ b/xfa/fwl/cfwl_listbox.cpp
@@ -609,10 +609,10 @@
 
   switch (pMessage->GetType()) {
     case CFWL_Message::Type::kSetFocus:
-      OnFocusChanged(pMessage, true);
+      OnFocusGained();
       break;
     case CFWL_Message::Type::kKillFocus:
-      OnFocusChanged(pMessage, false);
+      OnFocusLost();
       break;
     case CFWL_Message::Type::kMouse: {
       CFWL_MessageMouse* pMsg = static_cast<CFWL_MessageMouse*>(pMessage);
@@ -665,26 +665,25 @@
   DrawWidget(pGraphics, matrix);
 }
 
-void CFWL_ListBox::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
+void CFWL_ListBox::OnFocusGained() {
   if (GetStylesEx() & FWL_STYLEEXT_LTB_ShowScrollBarFocus) {
-    if (m_pVertScrollBar) {
-      if (bSet)
-        m_pVertScrollBar->RemoveStates(FWL_WGTSTATE_Invisible);
-      else
-        m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible);
-    }
-    if (m_pHorzScrollBar) {
-      if (bSet)
-        m_pHorzScrollBar->RemoveStates(FWL_WGTSTATE_Invisible);
-      else
-        m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible);
-    }
+    if (m_pVertScrollBar)
+      m_pVertScrollBar->RemoveStates(FWL_WGTSTATE_Invisible);
+    if (m_pHorzScrollBar)
+      m_pHorzScrollBar->RemoveStates(FWL_WGTSTATE_Invisible);
   }
-  if (bSet)
-    m_Properties.m_dwStates |= (FWL_WGTSTATE_Focused);
-  else
-    m_Properties.m_dwStates &= ~(FWL_WGTSTATE_Focused);
+  m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
+  RepaintRect(m_ClientRect);
+}
 
+void CFWL_ListBox::OnFocusLost() {
+  if (GetStylesEx() & FWL_STYLEEXT_LTB_ShowScrollBarFocus) {
+    if (m_pVertScrollBar)
+      m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible);
+    if (m_pHorzScrollBar)
+      m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible);
+  }
+  m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
   RepaintRect(m_ClientRect);
 }
 
diff --git a/xfa/fwl/cfwl_listbox.h b/xfa/fwl/cfwl_listbox.h
index ee8df3f..16bcf87 100644
--- a/xfa/fwl/cfwl_listbox.h
+++ b/xfa/fwl/cfwl_listbox.h
@@ -115,7 +115,8 @@
   float GetMaxTextWidth();
   float GetScrollWidth();
 
-  void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
+  void OnFocusGained();
+  void OnFocusLost();
   void OnLButtonDown(CFWL_MessageMouse* pMsg);
   void OnLButtonUp(CFWL_MessageMouse* pMsg);
   void OnMouseWheel(CFWL_MessageMouseWheel* pMsg);
diff --git a/xfa/fwl/cfwl_pushbutton.cpp b/xfa/fwl/cfwl_pushbutton.cpp
index 1ef9d9d..3a6c651 100644
--- a/xfa/fwl/cfwl_pushbutton.cpp
+++ b/xfa/fwl/cfwl_pushbutton.cpp
@@ -84,10 +84,10 @@
 
   switch (pMessage->GetType()) {
     case CFWL_Message::Type::kSetFocus:
-      OnFocusChanged(pMessage, true);
+      OnFocusGained();
       break;
     case CFWL_Message::Type::kKillFocus:
-      OnFocusChanged(pMessage, false);
+      OnFocusLost();
       break;
     case CFWL_Message::Type::kMouse: {
       CFWL_MessageMouse* pMsg = static_cast<CFWL_MessageMouse*>(pMessage);
@@ -128,12 +128,13 @@
   DrawWidget(pGraphics, matrix);
 }
 
-void CFWL_PushButton::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
-  if (bSet)
-    m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
-  else
-    m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
+void CFWL_PushButton::OnFocusGained() {
+  m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
+  RepaintRect(m_ClientRect);
+}
 
+void CFWL_PushButton::OnFocusLost() {
+  m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
   RepaintRect(m_ClientRect);
 }
 
diff --git a/xfa/fwl/cfwl_pushbutton.h b/xfa/fwl/cfwl_pushbutton.h
index 429e0d9..f807ca0 100644
--- a/xfa/fwl/cfwl_pushbutton.h
+++ b/xfa/fwl/cfwl_pushbutton.h
@@ -36,7 +36,8 @@
   void DrawBkground(CFGAS_GEGraphics* pGraphics, const CFX_Matrix& mtMatrix);
   uint32_t GetPartStates();
   void UpdateTextOutStyles();
-  void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
+  void OnFocusGained();
+  void OnFocusLost();
   void OnLButtonDown(CFWL_MessageMouse* pMsg);
   void OnLButtonUp(CFWL_MessageMouse* pMsg);
   void OnMouseMove(CFWL_MessageMouse* pMsg);