IFWL cleanup in the Combo classes

Cleanup visibility and unused methods in the IFWL combo code.

Review-Url: https://codereview.chromium.org/2494743002
diff --git a/xfa/fwl/core/cfwl_combobox.cpp b/xfa/fwl/core/cfwl_combobox.cpp
index 572f4bf..d59cd4b 100644
--- a/xfa/fwl/core/cfwl_combobox.cpp
+++ b/xfa/fwl/core/cfwl_combobox.cpp
@@ -46,16 +46,6 @@
   return m_ItemArray.size() - 1;
 }
 
-int32_t CFWL_ComboBox::AddString(const CFX_WideStringC& wsText,
-                                 CFX_DIBitmap* pIcon) {
-  std::unique_ptr<CFWL_ListItem> pItem(new CFWL_ListItem);
-  pItem->m_wsText = wsText;
-  pItem->m_dwStyles = 0;
-  pItem->m_pDIB = pIcon;
-  m_ItemArray.push_back(std::move(pItem));
-  return m_ItemArray.size() - 1;
-}
-
 bool CFWL_ComboBox::RemoveAt(int32_t iIndex) {
   if (iIndex < 0 || static_cast<size_t>(iIndex) >= m_ItemArray.size()) {
     return false;
@@ -68,27 +58,21 @@
   m_ItemArray.clear();
 }
 
-int32_t CFWL_ComboBox::CountItems() {
-  return CountItems(GetWidget());
-}
-
-FWL_Error CFWL_ComboBox::GetTextByIndex(int32_t iIndex,
-                                        CFX_WideString& wsText) {
+void CFWL_ComboBox::GetTextByIndex(int32_t iIndex,
+                                   CFX_WideString& wsText) const {
   CFWL_ListItem* pItem =
       static_cast<CFWL_ListItem*>(GetItem(m_pIface.get(), iIndex));
-  if (!pItem)
-    return FWL_Error::Indefinite;
-  wsText = pItem->m_wsText;
-  return FWL_Error::Succeeded;
+  if (pItem)
+    wsText = pItem->m_wsText;
 }
 
-int32_t CFWL_ComboBox::GetCurSel() {
+int32_t CFWL_ComboBox::GetCurSel() const {
   return GetWidget() ? ToComboBox(GetWidget())->GetCurSel() : -1;
 }
 
-FWL_Error CFWL_ComboBox::SetCurSel(int32_t iSel) {
-  return GetWidget() ? ToComboBox(GetWidget())->SetCurSel(iSel)
-                     : FWL_Error::Indefinite;
+void CFWL_ComboBox::SetCurSel(int32_t iSel) {
+  if (GetWidget())
+    ToComboBox(GetWidget())->SetCurSel(iSel);
 }
 
 void CFWL_ComboBox::SetEditText(const CFX_WideString& wsText) {
@@ -96,75 +80,15 @@
     ToComboBox(GetWidget())->SetEditText(wsText);
 }
 
-int32_t CFWL_ComboBox::GetEditTextLength() const {
-  return GetWidget() ? ToComboBox(GetWidget())->GetEditTextLength() : 0;
+void CFWL_ComboBox::GetEditText(CFX_WideString& wsText,
+                                int32_t nStart,
+                                int32_t nCount) const {
+  if (GetWidget())
+    ToComboBox(GetWidget())->GetEditText(wsText, nStart, nCount);
 }
 
-FWL_Error CFWL_ComboBox::GetEditText(CFX_WideString& wsText,
-                                     int32_t nStart,
-                                     int32_t nCount) const {
-  return GetWidget()
-             ? ToComboBox(GetWidget())->GetEditText(wsText, nStart, nCount)
-             : FWL_Error::Indefinite;
-}
-
-FWL_Error CFWL_ComboBox::SetEditSelRange(int32_t nStart, int32_t nCount) {
-  return GetWidget() ? ToComboBox(GetWidget())->SetEditSelRange(nStart, nCount)
-                     : FWL_Error::Indefinite;
-}
-
-int32_t CFWL_ComboBox::GetEditSelRange(int32_t nIndex, int32_t& nStart) {
-  return GetWidget() ? ToComboBox(GetWidget())->GetEditSelRange(nIndex, nStart)
-                     : 0;
-}
-
-int32_t CFWL_ComboBox::GetEditLimit() {
-  return GetWidget() ? ToComboBox(GetWidget())->GetEditLimit() : 0;
-}
-
-FWL_Error CFWL_ComboBox::SetEditLimit(int32_t nLimit) {
-  return GetWidget() ? ToComboBox(GetWidget())->SetEditLimit(nLimit)
-                     : FWL_Error::Indefinite;
-}
-
-bool CFWL_ComboBox::EditRedo(const IFDE_TxtEdtDoRecord* pRecord) {
-  return GetWidget() ? ToComboBox(GetWidget())->EditRedo(pRecord) : false;
-}
-
-bool CFWL_ComboBox::EditUndo(const IFDE_TxtEdtDoRecord* pRecord) {
-  return GetWidget() ? ToComboBox(GetWidget())->EditUndo(pRecord) : false;
-}
-
-FWL_Error CFWL_ComboBox::SetMaxListHeight(FX_FLOAT fMaxHeight) {
-  m_fMaxListHeight = fMaxHeight;
-  return FWL_Error::Succeeded;
-}
-
-FWL_Error CFWL_ComboBox::SetItemData(int32_t iIndex, void* pData) {
-  CFWL_ListItem* pItem =
-      static_cast<CFWL_ListItem*>(GetItem(m_pIface.get(), iIndex));
-  if (!pItem)
-    return FWL_Error::Indefinite;
-  pItem->m_pData = pData;
-  return FWL_Error::Succeeded;
-}
-
-void* CFWL_ComboBox::GetItemData(int32_t iIndex) {
-  CFWL_ListItem* pItem =
-      static_cast<CFWL_ListItem*>(GetItem(m_pIface.get(), iIndex));
-  return pItem ? pItem->m_pData : nullptr;
-}
-
-void CFWL_ComboBox::SetListTheme(IFWL_ThemeProvider* pTheme) {
-  ToComboBox(GetWidget())->GetListBoxt()->SetThemeProvider(pTheme);
-}
-
-bool CFWL_ComboBox::AfterFocusShowDropList() {
-  return ToComboBox(GetWidget())->AfterFocusShowDropList();
-}
-
-FWL_Error CFWL_ComboBox::OpenDropDownList(bool bActivate) {
-  return ToComboBox(GetWidget())->OpenDropDownList(bActivate);
+void CFWL_ComboBox::OpenDropDownList(bool bActivate) {
+  ToComboBox(GetWidget())->OpenDropDownList(bActivate);
 }
 
 bool CFWL_ComboBox::EditCanUndo() {
@@ -219,9 +143,9 @@
   return GetWidget() ? ToComboBox(GetWidget())->EditDeSelect() : false;
 }
 
-FWL_Error CFWL_ComboBox::GetBBox(CFX_RectF& rect) {
-  return GetWidget() ? ToComboBox(GetWidget())->GetBBox(rect)
-                     : FWL_Error::Indefinite;
+void CFWL_ComboBox::GetBBox(CFX_RectF& rect) {
+  if (GetWidget())
+    ToComboBox(GetWidget())->GetBBox(rect);
 }
 
 void CFWL_ComboBox::EditModifyStylesEx(uint32_t dwStylesExAdded,
@@ -235,12 +159,12 @@
 void CFWL_ComboBox::GetCaption(IFWL_Widget* pWidget,
                                CFX_WideString& wsCaption) {}
 
-int32_t CFWL_ComboBox::CountItems(const IFWL_Widget* pWidget) {
+int32_t CFWL_ComboBox::CountItems(const IFWL_Widget* pWidget) const {
   return m_ItemArray.size();
 }
 
 CFWL_ListItem* CFWL_ComboBox::GetItem(const IFWL_Widget* pWidget,
-                                      int32_t nIndex) {
+                                      int32_t nIndex) const {
   if (nIndex < 0 || static_cast<size_t>(nIndex) >= m_ItemArray.size())
     return nullptr;
 
diff --git a/xfa/fwl/core/cfwl_combobox.h b/xfa/fwl/core/cfwl_combobox.h
index 1b6f814..9361bbf 100644
--- a/xfa/fwl/core/cfwl_combobox.h
+++ b/xfa/fwl/core/cfwl_combobox.h
@@ -20,54 +20,13 @@
 
   void Initialize();
 
-  int32_t AddString(const CFX_WideStringC& wsText);
-  int32_t AddString(const CFX_WideStringC& wsText, CFX_DIBitmap* pIcon);
-  bool RemoveAt(int32_t iIndex);  // Returns false iff |iIndex| out of range.
-  void RemoveAll();
-  int32_t CountItems();
-  FWL_Error GetTextByIndex(int32_t iIndex, CFX_WideString& wsText);
-  int32_t GetCurSel();
-  FWL_Error SetCurSel(int32_t iSel);
-  void SetEditText(const CFX_WideString& wsText);
-  int32_t GetEditTextLength() const;
-  FWL_Error GetEditText(CFX_WideString& wsText,
-                        int32_t nStart = 0,
-                        int32_t nCount = -1) const;
-  FWL_Error SetEditSelRange(int32_t nStart, int32_t nCount = -1);
-  int32_t GetEditSelRange(int32_t nIndex, int32_t& nStart);
-  int32_t GetEditLimit();
-  FWL_Error SetEditLimit(int32_t nLimit);
-  bool EditRedo(const IFDE_TxtEdtDoRecord* pRecord);
-  bool EditUndo(const IFDE_TxtEdtDoRecord* pRecord);
-  FWL_Error SetMaxListHeight(FX_FLOAT fMaxHeight);
-  FWL_Error SetItemData(int32_t iIndex, void* pData);
-  void* GetItemData(int32_t iIndex);
-  void SetListTheme(IFWL_ThemeProvider* pTheme);
-  bool AfterFocusShowDropList();
-  FWL_Error OpenDropDownList(bool bActivate);
-
-  bool EditCanUndo();
-  bool EditCanRedo();
-  bool EditUndo();
-  bool EditRedo();
-  bool EditCanCopy();
-  bool EditCanCut();
-  bool EditCanSelectAll();
-  bool EditCopy(CFX_WideString& wsCopy);
-  bool EditCut(CFX_WideString& wsCut);
-  bool EditPaste(const CFX_WideString& wsPaste);
-  bool EditSelectAll();
-  bool EditDelete();
-  bool EditDeSelect();
-  FWL_Error GetBBox(CFX_RectF& rect);
-  void EditModifyStylesEx(uint32_t dwStylesExAdded, uint32_t dwStylesExRemoved);
-
   // IFWL_DataProvider
   void GetCaption(IFWL_Widget* pWidget, CFX_WideString& wsCaption) override;
 
   // IFWL_ListBoxDP
-  int32_t CountItems(const IFWL_Widget* pWidget) override;
-  CFWL_ListItem* GetItem(const IFWL_Widget* pWidget, int32_t nIndex) override;
+  int32_t CountItems(const IFWL_Widget* pWidget) const override;
+  CFWL_ListItem* GetItem(const IFWL_Widget* pWidget,
+                         int32_t nIndex) const override;
   int32_t GetItemIndex(IFWL_Widget* pWidget, CFWL_ListItem* pItem) override;
   bool SetItemIndex(IFWL_Widget* pWidget,
                     CFWL_ListItem* pItem,
@@ -108,6 +67,39 @@
   // IFWL_ComboBoxDP
   FX_FLOAT GetListHeight(IFWL_Widget* pWidget) override;
 
+  int32_t AddString(const CFX_WideStringC& wsText);
+
+  bool RemoveAt(int32_t iIndex);  // Returns false iff |iIndex| out of range.
+  void RemoveAll();
+
+  void GetTextByIndex(int32_t iIndex, CFX_WideString& wsText) const;
+  int32_t GetCurSel() const;
+  void SetCurSel(int32_t iSel);
+
+  void SetEditText(const CFX_WideString& wsText);
+  void GetEditText(CFX_WideString& wsText,
+                   int32_t nStart = 0,
+                   int32_t nCount = -1) const;
+
+  void OpenDropDownList(bool bActivate);
+
+  bool EditCanUndo();
+  bool EditCanRedo();
+  bool EditUndo();
+  bool EditRedo();
+  bool EditCanCopy();
+  bool EditCanCut();
+  bool EditCanSelectAll();
+  bool EditCopy(CFX_WideString& wsCopy);
+  bool EditCut(CFX_WideString& wsCut);
+  bool EditPaste(const CFX_WideString& wsPaste);
+  bool EditSelectAll();
+  bool EditDelete();
+  bool EditDeSelect();
+
+  void GetBBox(CFX_RectF& rect);
+  void EditModifyStylesEx(uint32_t dwStylesExAdded, uint32_t dwStylesExRemoved);
+
  private:
   std::vector<std::unique_ptr<CFWL_ListItem>> m_ItemArray;
   FX_FLOAT m_fMaxListHeight;
diff --git a/xfa/fwl/core/cfwl_listbox.cpp b/xfa/fwl/core/cfwl_listbox.cpp
index 5827ac4..7dfff9e 100644
--- a/xfa/fwl/core/cfwl_listbox.cpp
+++ b/xfa/fwl/core/cfwl_listbox.cpp
@@ -101,7 +101,7 @@
     ToListBox(GetWidget())->GetScrollPos(fPos, bVert);
 }
 
-int32_t CFWL_ListBox::CountItems() {
+int32_t CFWL_ListBox::CountItems() const {
   return pdfium::CollectionSize<int32_t>(m_ItemArray);
 }
 
@@ -123,12 +123,12 @@
   wsCaption = L"";
 }
 
-int32_t CFWL_ListBox::CountItems(const IFWL_Widget* pWidget) {
+int32_t CFWL_ListBox::CountItems(const IFWL_Widget* pWidget) const {
   return pdfium::CollectionSize<int32_t>(m_ItemArray);
 }
 
 CFWL_ListItem* CFWL_ListBox::GetItem(const IFWL_Widget* pWidget,
-                                     int32_t nIndex) {
+                                     int32_t nIndex) const {
   if (nIndex < 0 || nIndex >= CountItems(pWidget))
     return nullptr;
 
diff --git a/xfa/fwl/core/cfwl_listbox.h b/xfa/fwl/core/cfwl_listbox.h
index 0f1d35a..f8f3c58 100644
--- a/xfa/fwl/core/cfwl_listbox.h
+++ b/xfa/fwl/core/cfwl_listbox.h
@@ -26,8 +26,9 @@
   void GetCaption(IFWL_Widget* pWidget, CFX_WideString& wsCaption) override;
 
   // IFWL_ListBoxDP:
-  int32_t CountItems(const IFWL_Widget* pWidget) override;
-  CFWL_ListItem* GetItem(const IFWL_Widget* pWidget, int32_t nIndex) override;
+  int32_t CountItems(const IFWL_Widget* pWidget) const override;
+  CFWL_ListItem* GetItem(const IFWL_Widget* pWidget,
+                         int32_t nIndex) const override;
   int32_t GetItemIndex(IFWL_Widget* pWidget, CFWL_ListItem* pItem) override;
   bool SetItemIndex(IFWL_Widget* pWidget,
                     CFWL_ListItem* pItem,
@@ -81,7 +82,7 @@
   uint32_t GetItemStates(CFWL_ListItem* pItem);
 
  private:
-  int32_t CountItems();
+  int32_t CountItems() const;
 
   std::vector<std::unique_ptr<CFWL_ListItem>> m_ItemArray;
 };
diff --git a/xfa/fwl/core/ifwl_combobox.cpp b/xfa/fwl/core/ifwl_combobox.cpp
index e8534a4..6299632 100644
--- a/xfa/fwl/core/ifwl_combobox.cpp
+++ b/xfa/fwl/core/ifwl_combobox.cpp
@@ -18,7 +18,6 @@
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_comboboxproxy.h"
 #include "xfa/fwl/core/ifwl_comboedit.h"
-#include "xfa/fwl/core/ifwl_combolist.h"
 #include "xfa/fwl/core/ifwl_formproxy.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
 
@@ -29,8 +28,7 @@
       m_bLButtonDown(false),
       m_iCurSel(-1),
       m_iBtnState(CFWL_PartState_Normal),
-      m_fComboFormHandler(0),
-      m_bNeedShowList(false) {
+      m_fComboFormHandler(0) {
   m_rtClient.Reset();
   m_rtBtn.Reset();
   m_rtHandler.Reset();
@@ -77,7 +75,7 @@
       rect.height = 16;
     }
     if (!m_pProperties->m_pThemeProvider) {
-      ReSetTheme();
+      ResetTheme();
     }
     FX_FLOAT* pFWidth = static_cast<FX_FLOAT*>(
         GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth));
@@ -117,10 +115,10 @@
   if (IsLocked()) {
     return;
   }
-  ReSetTheme();
+  ResetTheme();
   bool bDropDown = IsDropDownStyle();
   if (bDropDown && m_pEdit) {
-    ReSetEditAlignment();
+    ResetEditAlignment();
   }
   if (!m_pProperties->m_pThemeProvider) {
     m_pProperties->m_pThemeProvider = GetAvailableTheme();
@@ -170,8 +168,8 @@
     }
     param.m_rtPart = rtTextBk;
     if (m_iCurSel >= 0) {
-      IFWL_ListBoxDP* pData = static_cast<IFWL_ListBoxDP*>(
-          m_pListBox->m_pProperties->m_pDataProvider);
+      IFWL_ListBoxDP* pData =
+          static_cast<IFWL_ListBoxDP*>(m_pListBox->GetDataProvider());
       void* p = pData->GetItemData(m_pListBox.get(),
                                    pData->GetItem(m_pListBox.get(), m_iCurSel));
       if (p) {
@@ -235,11 +233,11 @@
     m_pEdit->SetThemeProvider(pThemeProvider);
 }
 
-int32_t IFWL_ComboBox::GetCurSel() {
+int32_t IFWL_ComboBox::GetCurSel() const {
   return m_iCurSel;
 }
 
-FWL_Error IFWL_ComboBox::SetCurSel(int32_t iSel) {
+void IFWL_ComboBox::SetCurSel(int32_t iSel) {
   int32_t iCount = m_pListBox->CountItems();
   bool bClearSel = iSel < 0 || iSel >= iCount;
   bool bDropDown = IsDropDownStyle();
@@ -257,7 +255,6 @@
     m_pEdit->Update();
   }
   m_iCurSel = bClearSel ? -1 : iSel;
-  return FWL_Error::Succeeded;
 }
 
 void IFWL_ComboBox::SetStates(uint32_t dwStates, bool bSet) {
@@ -276,83 +273,24 @@
   m_pEdit->Update();
 }
 
-int32_t IFWL_ComboBox::GetEditTextLength() const {
-  if (!m_pEdit)
-    return -1;
-  return m_pEdit->GetTextLength();
-}
-
-FWL_Error IFWL_ComboBox::GetEditText(CFX_WideString& wsText,
-                                     int32_t nStart,
-                                     int32_t nCount) const {
+void IFWL_ComboBox::GetEditText(CFX_WideString& wsText,
+                                int32_t nStart,
+                                int32_t nCount) const {
   if (m_pEdit) {
     m_pEdit->GetText(wsText, nStart, nCount);
-    return FWL_Error::Succeeded;
+    return;
   }
-  if (m_pListBox) {
-    IFWL_ComboBoxDP* pData =
-        static_cast<IFWL_ComboBoxDP*>(m_pProperties->m_pDataProvider);
-    CFWL_ListItem* hItem = pData->GetItem(this, m_iCurSel);
-    m_pListBox->GetItemText(hItem, wsText);
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::Indefinite;
+  if (!m_pListBox)
+    return;
+
+  IFWL_ComboBoxDP* pData =
+      static_cast<IFWL_ComboBoxDP*>(m_pProperties->m_pDataProvider);
+  CFWL_ListItem* hItem = pData->GetItem(this, m_iCurSel);
+  m_pListBox->GetItemText(hItem, wsText);
 }
 
-FWL_Error IFWL_ComboBox::SetEditSelRange(int32_t nStart, int32_t nCount) {
-  if (!m_pEdit)
-    return FWL_Error::Indefinite;
-  m_pEdit->ClearSelected();
-  m_pEdit->AddSelRange(nStart, nCount);
-  return FWL_Error::Succeeded;
-}
-
-int32_t IFWL_ComboBox::GetEditSelRange(int32_t nIndex, int32_t& nStart) {
-  if (!m_pEdit)
-    return -1;
-  return m_pEdit->GetSelRange(nIndex, nStart);
-}
-
-int32_t IFWL_ComboBox::GetEditLimit() {
-  if (!m_pEdit)
-    return -1;
-  return m_pEdit->GetLimit();
-}
-
-FWL_Error IFWL_ComboBox::SetEditLimit(int32_t nLimit) {
-  if (!m_pEdit)
-    return FWL_Error::Indefinite;
-  m_pEdit->SetLimit(nLimit);
-  return FWL_Error::Succeeded;
-}
-
-bool IFWL_ComboBox::EditRedo(const IFDE_TxtEdtDoRecord* pRecord) {
-  return m_pEdit && m_pEdit->Redo(pRecord);
-}
-
-bool IFWL_ComboBox::EditUndo(const IFDE_TxtEdtDoRecord* pRecord) {
-  return m_pEdit && m_pEdit->Undo(pRecord);
-}
-
-IFWL_ListBox* IFWL_ComboBox::GetListBoxt() {
-  return m_pListBox.get();
-}
-
-bool IFWL_ComboBox::AfterFocusShowDropList() {
-  if (!m_bNeedShowList) {
-    return false;
-  }
-  if (m_pEdit) {
-    MatchEditText();
-  }
-  ShowDropList(true);
-  m_bNeedShowList = false;
-  return true;
-}
-
-FWL_Error IFWL_ComboBox::OpenDropDownList(bool bActivate) {
+void IFWL_ComboBox::OpenDropDownList(bool bActivate) {
   ShowDropList(bActivate);
-  return FWL_Error::Succeeded;
 }
 
 bool IFWL_ComboBox::EditCanUndo() {
@@ -413,18 +351,18 @@
   return true;
 }
 
-FWL_Error IFWL_ComboBox::GetBBox(CFX_RectF& rect) {
+void IFWL_ComboBox::GetBBox(CFX_RectF& rect) {
   if (m_pWidgetMgr->IsFormDisabled()) {
-    return DisForm_GetBBox(rect);
+    DisForm_GetBBox(rect);
+    return;
   }
   rect = m_pProperties->m_rtWidget;
-  if (m_pListBox && IsDropListShowed()) {
+  if (m_pListBox && IsDropListVisible()) {
     CFX_RectF rtList;
     m_pListBox->GetWidgetRect(rtList);
     rtList.Offset(rect.left, rect.top);
     rect.Union(rtList);
   }
-  return FWL_Error::Succeeded;
 }
 
 void IFWL_ComboBox::EditModifyStylesEx(uint32_t dwStylesExAdded,
@@ -456,7 +394,7 @@
   if (m_pWidgetMgr->IsFormDisabled())
     return DisForm_ShowDropList(bActivate);
 
-  bool bDropList = IsDropListShowed();
+  bool bDropList = IsDropListVisible();
   if (bDropList == bActivate)
     return;
   if (!m_pComboBoxProxy)
@@ -465,7 +403,7 @@
   m_pComboBoxProxy->Reset();
   if (bActivate) {
     m_pListBox->ChangeSelected(m_iCurSel);
-    ReSetListItemAlignment();
+    ResetListItemAlignment();
     uint32_t dwStyleAdd = m_pProperties->m_dwStyleExes &
                           (FWL_STYLEEXT_CMB_Sort | FWL_STYLEEXT_CMB_OwnerDraw);
     m_pListBox->ModifyStylesEx(dwStyleAdd, 0);
@@ -519,20 +457,16 @@
     ev.m_pSrcTarget = this;
     DispatchEvent(&ev);
     m_bLButtonDown = false;
-    m_pListBox->m_bNotifyOwner = true;
+    m_pListBox->SetNotifyOwner(true);
     SetFocus(true);
   }
 }
 
-bool IFWL_ComboBox::IsDropListShowed() {
+bool IFWL_ComboBox::IsDropListVisible() {
   return m_pComboBoxProxy &&
          !(m_pComboBoxProxy->GetStates() & FWL_WGTSTATE_Invisible);
 }
 
-bool IFWL_ComboBox::IsDropDownStyle() const {
-  return m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_DropDown;
-}
-
 void IFWL_ComboBox::MatchEditText() {
   CFX_WideString wsText;
   m_pEdit->GetText(wsText);
@@ -540,7 +474,7 @@
   if (iMatch != m_iCurSel) {
     m_pListBox->ChangeSelected(iMatch);
     if (iMatch >= 0) {
-      SynchrEditText(iMatch);
+      SyncEditText(iMatch);
     }
   } else if (iMatch >= 0) {
     m_pEdit->SetSelected();
@@ -548,7 +482,7 @@
   m_iCurSel = iMatch;
 }
 
-void IFWL_ComboBox::SynchrEditText(int32_t iListItem) {
+void IFWL_ComboBox::SyncEditText(int32_t iListItem) {
   CFX_WideString wsText;
   IFWL_ComboBoxDP* pData =
       static_cast<IFWL_ComboBoxDP*>(m_pProperties->m_pDataProvider);
@@ -591,7 +525,7 @@
   }
 }
 
-void IFWL_ComboBox::ReSetTheme() {
+void IFWL_ComboBox::ResetTheme() {
   IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider;
   if (!pTheme) {
     pTheme = GetAvailableTheme();
@@ -603,7 +537,7 @@
     m_pEdit->SetThemeProvider(pTheme);
 }
 
-void IFWL_ComboBox::ReSetEditAlignment() {
+void IFWL_ComboBox::ResetEditAlignment() {
   if (!m_pEdit)
     return;
   uint32_t dwStylExes = m_pProperties->m_dwStyleExes;
@@ -641,7 +575,7 @@
                                      FWL_STYLEEXT_EDT_VAlignMask);
 }
 
-void IFWL_ComboBox::ReSetListItemAlignment() {
+void IFWL_ComboBox::ResetListItemAlignment() {
   if (!m_pListBox)
     return;
   uint32_t dwStylExes = m_pProperties->m_dwStyleExes;
@@ -727,7 +661,7 @@
 }
 
 void IFWL_ComboBox::DisForm_ShowDropList(bool bActivate) {
-  bool bDropList = DisForm_IsDropListShowed();
+  bool bDropList = DisForm_IsDropListVisible();
   if (bDropList == bActivate) {
     return;
   }
@@ -740,7 +674,7 @@
     if (iItems < 1) {
       return;
     }
-    ReSetListItemAlignment();
+    ResetListItemAlignment();
     pComboList->ChangeSelected(m_iCurSel);
     FX_FLOAT fItemHeight = pComboList->CalcItemHeight();
     FX_FLOAT fBorder = GetBorderSize();
@@ -772,10 +706,6 @@
   Repaint(&rect);
 }
 
-bool IFWL_ComboBox::DisForm_IsDropListShowed() {
-  return !(m_pListBox->GetStates() & FWL_WGTSTATE_Invisible);
-}
-
 void IFWL_ComboBox::DisForm_ModifyStylesEx(uint32_t dwStylesExAdded,
                                            uint32_t dwStylesExRemoved) {
   if (!m_pEdit)
@@ -798,9 +728,9 @@
     return;
   }
   if (m_pEdit) {
-    ReSetEditAlignment();
+    ResetEditAlignment();
   }
-  ReSetTheme();
+  ResetTheme();
   Layout();
 }
 
@@ -812,7 +742,7 @@
     return FWL_WidgetHit::Edit;
   if (m_rtBtn.Contains(fx, fy))
     return FWL_WidgetHit::Client;
-  if (DisForm_IsDropListShowed()) {
+  if (DisForm_IsDropListVisible()) {
     m_pListBox->GetWidgetRect(rect);
     if (rect.Contains(fx, fy))
       return FWL_WidgetHit::Client;
@@ -828,7 +758,7 @@
   if (pMatrix) {
     mtOrg = *pMatrix;
   }
-  bool bListShowed = m_pListBox && DisForm_IsDropListShowed();
+  bool bListShowed = m_pListBox && DisForm_IsDropListVisible();
   pGraphics->SaveGraphState();
   pGraphics->ConcatMatrix(&mtOrg);
   if (!m_rtBtn.IsEmpty(0.1f)) {
@@ -859,15 +789,14 @@
   }
 }
 
-FWL_Error IFWL_ComboBox::DisForm_GetBBox(CFX_RectF& rect) {
+void IFWL_ComboBox::DisForm_GetBBox(CFX_RectF& rect) {
   rect = m_pProperties->m_rtWidget;
-  if (m_pListBox && DisForm_IsDropListShowed()) {
+  if (m_pListBox && DisForm_IsDropListVisible()) {
     CFX_RectF rtList;
     m_pListBox->GetWidgetRect(rtList);
     rtList.Offset(rect.left, rect.top);
     rect.Union(rtList);
   }
-  return FWL_Error::Succeeded;
 }
 
 void IFWL_ComboBox::DisForm_Layout() {
@@ -1062,7 +991,7 @@
 }
 
 void IFWL_ComboBox::OnMouseLeave(CFWL_MsgMouse* pMsg) {
-  if (!IsDropListShowed() &&
+  if (!IsDropListVisible() &&
       !((m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) ==
         FWL_WGTSTATE_Disabled)) {
     m_iBtnState = CFWL_PartState_Normal;
@@ -1117,7 +1046,7 @@
     }
     m_iCurSel = iCurSel;
     if (bDropDown && m_pEdit)
-      SynchrEditText(m_iCurSel);
+      SyncEditText(m_iCurSel);
     else
       Repaint(&m_rtClient);
     return;
@@ -1164,7 +1093,7 @@
       CFWL_MsgKey* pKey = static_cast<CFWL_MsgKey*>(pMessage);
       if (pKey->m_dwCmd == FWL_KeyCommand::KeyUp)
         break;
-      if (DisForm_IsDropListShowed() &&
+      if (DisForm_IsDropListVisible() &&
           pKey->m_dwCmd == FWL_KeyCommand::KeyDown) {
         bool bListKey = pKey->m_dwKeyCode == FWL_VKEY_Up ||
                         pKey->m_dwKeyCode == FWL_VKEY_Down ||
@@ -1186,12 +1115,12 @@
 }
 
 void IFWL_ComboBox::DisForm_OnLButtonDown(CFWL_MsgMouse* pMsg) {
-  bool bDropDown = DisForm_IsDropListShowed();
+  bool bDropDown = DisForm_IsDropListVisible();
   CFX_RectF& rtBtn = bDropDown ? m_rtBtn : m_rtClient;
   if (!rtBtn.Contains(pMsg->m_fx, pMsg->m_fy))
     return;
 
-  if (DisForm_IsDropListShowed()) {
+  if (DisForm_IsDropListVisible()) {
     DisForm_ShowDropList(false);
     return;
   }
@@ -1253,7 +1182,7 @@
         iCurSel++;
     }
     m_iCurSel = iCurSel;
-    SynchrEditText(m_iCurSel);
+    SyncEditText(m_iCurSel);
     return;
   }
   if (m_pEdit)
diff --git a/xfa/fwl/core/ifwl_combobox.h b/xfa/fwl/core/ifwl_combobox.h
index 0b586b4..8332a79 100644
--- a/xfa/fwl/core/ifwl_combobox.h
+++ b/xfa/fwl/core/ifwl_combobox.h
@@ -7,6 +7,7 @@
 #ifndef XFA_FWL_CORE_IFWL_COMBOBOX_H_
 #define XFA_FWL_CORE_IFWL_COMBOBOX_H_
 
+#include "xfa/fwl/core/ifwl_combolist.h"
 #include "xfa/fwl/core/ifwl_form.h"
 #include "xfa/fwl/core/ifwl_listbox.h"
 #include "xfa/fxgraphics/cfx_graphics.h"
@@ -15,7 +16,6 @@
 class IFWL_ComboBox;
 class IFWL_ComboBoxProxy;
 class IFWL_ComboEdit;
-class IFWL_ComboList;
 class IFWL_FormProxy;
 class IFWL_ListBox;
 class IFWL_Widget;
@@ -99,22 +99,16 @@
   void OnDrawWidget(CFX_Graphics* pGraphics,
                     const CFX_Matrix* pMatrix) override;
 
-  int32_t GetCurSel();
-  FWL_Error SetCurSel(int32_t iSel);
+  int32_t GetCurSel() const;
+  void SetCurSel(int32_t iSel);
+
   void SetEditText(const CFX_WideString& wsText);
-  int32_t GetEditTextLength() const;
-  FWL_Error GetEditText(CFX_WideString& wsText,
-                        int32_t nStart = 0,
-                        int32_t nCount = -1) const;
-  FWL_Error SetEditSelRange(int32_t nStart, int32_t nCount = -1);
-  int32_t GetEditSelRange(int32_t nIndex, int32_t& nStart);
-  int32_t GetEditLimit();
-  FWL_Error SetEditLimit(int32_t nLimit);
-  bool EditRedo(const IFDE_TxtEdtDoRecord* pRecord);
-  bool EditUndo(const IFDE_TxtEdtDoRecord* pRecord);
-  IFWL_ListBox* GetListBoxt();
-  bool AfterFocusShowDropList();
-  FWL_Error OpenDropDownList(bool bActivate);
+  void GetEditText(CFX_WideString& wsText,
+                   int32_t nStart = 0,
+                   int32_t nCount = -1) const;
+
+  void OpenDropDownList(bool bActivate);
+
   bool EditCanUndo();
   bool EditCanRedo();
   bool EditUndo();
@@ -128,39 +122,57 @@
   bool EditSelectAll();
   bool EditDelete();
   bool EditDeSelect();
-  FWL_Error GetBBox(CFX_RectF& rect);
+
+  void GetBBox(CFX_RectF& rect);
   void EditModifyStylesEx(uint32_t dwStylesExAdded, uint32_t dwStylesExRemoved);
 
   void DrawStretchHandler(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix);
-  bool IsDropListShowed();
+  bool IsDropListVisible();
+
   void ShowDropList(bool bActivate);
 
   IFWL_ComboEdit* GetComboEdit() const { return m_pEdit.get(); }
+
   void ProcessSelChanged(bool bLButtonUp);
   int32_t GetCurrentSelection() const { return m_iCurSel; }
 
- protected:
+ private:
   FX_FLOAT GetListHeight();
-  bool IsDropDownStyle() const;
+  bool IsDropDownStyle() const {
+    return !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_DropDown);
+  }
   void MatchEditText();
-  void SynchrEditText(int32_t iListItem);
+  void SyncEditText(int32_t iListItem);
   void Layout();
-  void ReSetTheme();
-  void ReSetEditAlignment();
-  void ReSetListItemAlignment();
+  void ResetTheme();
+  void ResetEditAlignment();
+  void ResetListItemAlignment();
   void InitProxyForm();
   void DisForm_InitComboList();
   void DisForm_InitComboEdit();
   void DisForm_ShowDropList(bool bActivate);
-  bool DisForm_IsDropListShowed();
+  bool DisForm_IsDropListVisible() const {
+    return !(m_pListBox->GetStates() & FWL_WGTSTATE_Invisible);
+  }
   void DisForm_ModifyStylesEx(uint32_t dwStylesExAdded,
                               uint32_t dwStylesExRemoved);
   void DisForm_Update();
   FWL_WidgetHit DisForm_HitTest(FX_FLOAT fx, FX_FLOAT fy);
   void DisForm_DrawWidget(CFX_Graphics* pGraphics,
                           const CFX_Matrix* pMatrix = nullptr);
-  FWL_Error DisForm_GetBBox(CFX_RectF& rect);
+  void DisForm_GetBBox(CFX_RectF& rect);
   void DisForm_Layout();
+  void OnFocusChanged(CFWL_Message* pMsg, bool bSet = true);
+  void OnLButtonDown(CFWL_MsgMouse* pMsg);
+  void OnLButtonUp(CFWL_MsgMouse* pMsg);
+  void OnMouseMove(CFWL_MsgMouse* pMsg);
+  void OnMouseLeave(CFWL_MsgMouse* pMsg);
+  void OnKey(CFWL_MsgKey* pMsg);
+  void DoSubCtrlKey(CFWL_MsgKey* pMsg);
+  void DisForm_OnProcessMessage(CFWL_Message* pMessage);
+  void DisForm_OnLButtonDown(CFWL_MsgMouse* pMsg);
+  void DisForm_OnFocusChanged(CFWL_Message* pMsg, bool bSet = true);
+  void DisForm_OnKey(CFWL_MsgKey* pMsg);
 
   CFX_RectF m_rtClient;
   CFX_RectF m_rtContent;
@@ -177,21 +189,6 @@
   int32_t m_iBtnState;
   FX_FLOAT m_fComboFormHandler;
   FX_FLOAT m_fItemHeight;
-  bool m_bNeedShowList;
-
- private:
-  void OnFocusChanged(CFWL_Message* pMsg, bool bSet = true);
-  void OnLButtonDown(CFWL_MsgMouse* pMsg);
-  void OnLButtonUp(CFWL_MsgMouse* pMsg);
-  void OnMouseMove(CFWL_MsgMouse* pMsg);
-  void OnMouseLeave(CFWL_MsgMouse* pMsg);
-  void OnKey(CFWL_MsgKey* pMsg);
-  void DoSubCtrlKey(CFWL_MsgKey* pMsg);
-  void DisForm_OnProcessMessage(CFWL_Message* pMessage);
-  void DisForm_OnLButtonDown(CFWL_MsgMouse* pMsg);
-  void DisForm_OnFocusChanged(CFWL_Message* pMsg, bool bSet = true);
-  void DisForm_OnKey(CFWL_MsgKey* pMsg);
-
 };
 
 #endif  // XFA_FWL_CORE_IFWL_COMBOBOX_H_
diff --git a/xfa/fwl/core/ifwl_comboboxproxy.cpp b/xfa/fwl/core/ifwl_comboboxproxy.cpp
index c8d1f79..e7ce1bd 100644
--- a/xfa/fwl/core/ifwl_comboboxproxy.cpp
+++ b/xfa/fwl/core/ifwl_comboboxproxy.cpp
@@ -36,8 +36,6 @@
         case FWL_MouseCommand::LeftButtonUp:
           OnLButtonUp(pMsg);
           break;
-        case FWL_MouseCommand::Move:
-          break;
         default:
           break;
       }
@@ -97,7 +95,7 @@
     GetWidgetRect(rect);
     rect.left = rect.top = 0;
     if (!rect.Contains(pMsg->m_fx, pMsg->m_fy) &&
-        m_pComboBox->IsDropListShowed()) {
+        m_pComboBox->IsDropListVisible()) {
       m_pComboBox->ShowDropList(false);
     }
   } else {
diff --git a/xfa/fwl/core/ifwl_comboboxproxy.h b/xfa/fwl/core/ifwl_comboboxproxy.h
index f6da412..ec048fe 100644
--- a/xfa/fwl/core/ifwl_comboboxproxy.h
+++ b/xfa/fwl/core/ifwl_comboboxproxy.h
@@ -34,7 +34,6 @@
 
   bool m_bLButtonDown;
   bool m_bLButtonUpSelf;
-
   IFWL_ComboBox* m_pComboBox;
 };
 
diff --git a/xfa/fwl/core/ifwl_comboedit.cpp b/xfa/fwl/core/ifwl_comboedit.cpp
index 2a7ac90..0896ba7 100644
--- a/xfa/fwl/core/ifwl_comboedit.cpp
+++ b/xfa/fwl/core/ifwl_comboedit.cpp
@@ -24,12 +24,8 @@
 
 void IFWL_ComboEdit::SetSelected() {
   FlagFocus(true);
-  EndCaret();
-  AddSelRange(0);
-}
-
-void IFWL_ComboEdit::EndCaret() {
   GetTxtEdtEngine()->MoveCaretPos(MC_End);
+  AddSelRange(0);
 }
 
 void IFWL_ComboEdit::FlagFocus(bool bSet) {
@@ -41,10 +37,6 @@
   }
 }
 
-void IFWL_ComboEdit::SetComboBoxFocus(bool bSet) {
-  m_pOuter->SetFocus(bSet);
-}
-
 void IFWL_ComboEdit::OnProcessMessage(CFWL_Message* pMessage) {
   if (!pMessage)
     return;
@@ -66,7 +58,7 @@
       if ((pMsg->m_dwCmd == FWL_MouseCommand::LeftButtonDown) &&
           ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0)) {
         SetSelected();
-        SetComboBoxFocus(true);
+        m_pOuter->SetFocus(true);
       }
       break;
     }
diff --git a/xfa/fwl/core/ifwl_comboedit.h b/xfa/fwl/core/ifwl_comboedit.h
index f50a725..c7d2e10 100644
--- a/xfa/fwl/core/ifwl_comboedit.h
+++ b/xfa/fwl/core/ifwl_comboedit.h
@@ -24,11 +24,9 @@
 
   void ClearSelected();
   void SetSelected();
-  void EndCaret();
   void FlagFocus(bool bSet);
 
- protected:
-  void SetComboBoxFocus(bool bSet);
+ private:
   IFWL_ComboBox* m_pOuter;
 };
 
diff --git a/xfa/fwl/core/ifwl_combolist.h b/xfa/fwl/core/ifwl_combolist.h
index 6c380f4..64ffbba 100644
--- a/xfa/fwl/core/ifwl_combolist.h
+++ b/xfa/fwl/core/ifwl_combolist.h
@@ -21,23 +21,24 @@
   void OnProcessMessage(CFWL_Message* pMessage) override;
 
   int32_t MatchItem(const CFX_WideString& wsMatch);
+
   void ChangeSelected(int32_t iSel);
   int32_t CountItems();
-  void GetItemRect(int32_t nIndex, CFX_RectF& rtItem);
-  void ClientToOuter(FX_FLOAT& fx, FX_FLOAT& fy);
+
   void SetFocus(bool bSet);
-
-  bool m_bNotifyOwner;
-
-  friend class IFWL_ComboBox;
+  void SetNotifyOwner(bool notify) { m_bNotifyOwner = notify; }
 
  private:
+  void GetItemRect(int32_t nIndex, CFX_RectF& rtItem);
+  void ClientToOuter(FX_FLOAT& fx, FX_FLOAT& fy);
   void OnDropListFocusChanged(CFWL_Message* pMsg, bool bSet);
   int32_t OnDropListMouseMove(CFWL_MsgMouse* pMsg);
   int32_t OnDropListLButtonDown(CFWL_MsgMouse* pMsg);
   int32_t OnDropListLButtonUp(CFWL_MsgMouse* pMsg);
   int32_t OnDropListKey(CFWL_MsgKey* pKey);
   void OnDropListKeyDown(CFWL_MsgKey* pKey);
+
+  bool m_bNotifyOwner;
 };
 
 #endif  // XFA_FWL_CORE_IFWL_COMBOLIST_H_
diff --git a/xfa/fwl/core/ifwl_listbox.h b/xfa/fwl/core/ifwl_listbox.h
index 608a7d9..32865c1 100644
--- a/xfa/fwl/core/ifwl_listbox.h
+++ b/xfa/fwl/core/ifwl_listbox.h
@@ -51,9 +51,9 @@
 
 class IFWL_ListBoxDP : public IFWL_DataProvider {
  public:
-  virtual int32_t CountItems(const IFWL_Widget* pWidget) = 0;
+  virtual int32_t CountItems(const IFWL_Widget* pWidget) const = 0;
   virtual CFWL_ListItem* GetItem(const IFWL_Widget* pWidget,
-                                 int32_t nIndex) = 0;
+                                 int32_t nIndex) const = 0;
   virtual int32_t GetItemIndex(IFWL_Widget* pWidget, CFWL_ListItem* pItem) = 0;
   virtual bool SetItemIndex(IFWL_Widget* pWidget,
                             CFWL_ListItem* pItem,
@@ -119,15 +119,16 @@
   void GetItemText(CFWL_ListItem* hItem, CFX_WideString& wsText);
   void GetScrollPos(FX_FLOAT& fPos, bool bVert = true);
 
+  FX_FLOAT GetItemHeight() const { return m_fItemHeight; }
+  FX_FLOAT CalcItemHeight();
+
  protected:
   CFWL_ListItem* GetItem(CFWL_ListItem* hItem, uint32_t dwKeyCode);
   void SetSelection(CFWL_ListItem* hStart, CFWL_ListItem* hEnd, bool bSelected);
   CFWL_ListItem* GetItemAtPoint(FX_FLOAT fx, FX_FLOAT fy);
   bool ScrollToVisible(CFWL_ListItem* hItem);
-  FX_FLOAT CalcItemHeight();
   void InitScrollBar(bool bVert = true);
   bool IsShowScrollBar(bool bVert);
-  FX_FLOAT GetItemHeight() const { return m_fItemHeight; }
   IFWL_ScrollBar* GetVertScrollBar() const { return m_pVertScrollBar.get(); }
   const CFX_RectF& GetRTClient() const { return m_rtClient; }
 
diff --git a/xfa/fwl/core/ifwl_widget.h b/xfa/fwl/core/ifwl_widget.h
index d1284b1..36c587b 100644
--- a/xfa/fwl/core/ifwl_widget.h
+++ b/xfa/fwl/core/ifwl_widget.h
@@ -111,6 +111,10 @@
     return m_pProperties->m_pThemeProvider;
   }
 
+  IFWL_DataProvider* GetDataProvider() const {
+    return m_pProperties->m_pDataProvider;
+  }
+
   void SetDelegate(IFWL_WidgetDelegate* delegate) { m_pDelegate = delegate; }
   IFWL_WidgetDelegate* GetDelegate() {
     return m_pDelegate ? m_pDelegate : this;