Encapsulate CFWL_Widget.

Add some missing getters and setters.

Change-Id: Icbd513c6e62f7dffb7d4341a64c7f4441626c717
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/72610
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fwl/cfwl_barcode.cpp b/xfa/fwl/cfwl_barcode.cpp
index b6833bf..31a3051 100644
--- a/xfa/fwl/cfwl_barcode.cpp
+++ b/xfa/fwl/cfwl_barcode.cpp
@@ -36,9 +36,9 @@
                               const CFX_Matrix& matrix) {
   if (!pGraphics)
     return;
-  if (!m_pProperties->m_pThemeProvider)
+  if (!GetProperties()->m_pThemeProvider)
     return;
-  if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) {
+  if ((GetProperties()->m_dwStates & FWL_WGTSTATE_Focused) == 0) {
     GenerateBarcodeImageCache();
     if (!m_pBarcodeEngine || m_eStatus != Status::kEncodeSuccess)
       return;
diff --git a/xfa/fwl/cfwl_caret.cpp b/xfa/fwl/cfwl_caret.cpp
index d17fc21..fabe4bb 100644
--- a/xfa/fwl/cfwl_caret.cpp
+++ b/xfa/fwl/cfwl_caret.cpp
@@ -41,12 +41,12 @@
                             const CFX_Matrix& matrix) {
   if (!pGraphics)
     return;
-  if (!m_pProperties->m_pThemeProvider)
-    m_pProperties->m_pThemeProvider = GetAvailableTheme();
-  if (!m_pProperties->m_pThemeProvider)
+  if (!GetProperties()->m_pThemeProvider)
+    GetProperties()->m_pThemeProvider = GetAvailableTheme();
+  if (!GetProperties()->m_pThemeProvider)
     return;
 
-  DrawCaretBK(pGraphics, m_pProperties->m_pThemeProvider.Get(), &matrix);
+  DrawCaretBK(pGraphics, GetProperties()->m_pThemeProvider.Get(), &matrix);
 }
 
 void CFWL_Caret::ShowCaret() {
@@ -65,7 +65,7 @@
 void CFWL_Caret::DrawCaretBK(CXFA_Graphics* pGraphics,
                              IFWL_ThemeProvider* pTheme,
                              const CFX_Matrix* pMatrix) {
-  if (!(m_pProperties->m_dwStates & kStateHighlight))
+  if (!(GetProperties()->m_dwStates & kStateHighlight))
     return;
 
   CFWL_ThemeBackground param;
diff --git a/xfa/fwl/cfwl_checkbox.cpp b/xfa/fwl/cfwl_checkbox.cpp
index 7bd4fe9..baf7133 100644
--- a/xfa/fwl/cfwl_checkbox.cpp
+++ b/xfa/fwl/cfwl_checkbox.cpp
@@ -46,8 +46,8 @@
 void CFWL_CheckBox::Update() {
   if (IsLocked())
     return;
-  if (!m_pProperties->m_pThemeProvider)
-    m_pProperties->m_pThemeProvider = GetAvailableTheme();
+  if (!GetProperties()->m_pThemeProvider)
+    GetProperties()->m_pThemeProvider = GetAvailableTheme();
 
   UpdateTextOutStyles();
   Layout();
@@ -58,7 +58,7 @@
   if (!pGraphics)
     return;
 
-  IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider.Get();
+  IFWL_ThemeProvider* pTheme = GetProperties()->m_pThemeProvider.Get();
   if (!pTheme)
     return;
 
@@ -74,7 +74,7 @@
   param.m_pGraphics = pGraphics;
   param.m_matrix.Concat(matrix);
   param.m_PartRect = m_ClientRect;
-  if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused)
+  if (GetProperties()->m_dwStates & FWL_WGTSTATE_Focused)
 
     param.m_pRtData = &m_FocusRect;
   pTheme->DrawBackground(param);
@@ -97,14 +97,14 @@
 }
 
 void CFWL_CheckBox::SetCheckState(int32_t iCheck) {
-  m_pProperties->m_dwStates &= ~FWL_STATE_CKB_CheckMask;
+  GetProperties()->m_dwStates &= ~FWL_STATE_CKB_CheckMask;
   switch (iCheck) {
     case 1:
-      m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked;
+      GetProperties()->m_dwStates |= FWL_STATE_CKB_Checked;
       break;
     case 2:
-      if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State)
-        m_pProperties->m_dwStates |= FWL_STATE_CKB_Neutral;
+      if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_CKB_3State)
+        GetProperties()->m_dwStates |= FWL_STATE_CKB_Neutral;
       break;
     default:
       break;
@@ -113,10 +113,10 @@
 }
 
 void CFWL_CheckBox::Layout() {
-  m_pProperties->m_WidgetRect.width =
-      FXSYS_roundf(m_pProperties->m_WidgetRect.width);
-  m_pProperties->m_WidgetRect.height =
-      FXSYS_roundf(m_pProperties->m_WidgetRect.height);
+  GetProperties()->m_WidgetRect.width =
+      FXSYS_roundf(GetProperties()->m_WidgetRect.width);
+  GetProperties()->m_WidgetRect.height =
+      FXSYS_roundf(GetProperties()->m_WidgetRect.height);
   m_ClientRect = GetClientRect();
 
   float fTextLeft = m_ClientRect.left + m_fBoxHeight;
@@ -127,8 +127,8 @@
   m_CaptionRect.Inflate(-kCaptionMargin, -kCaptionMargin);
 
   CFX_RectF rtFocus = m_CaptionRect;
-  CalcTextRect(L"Check box", m_pProperties->m_pThemeProvider.Get(), m_TTOStyles,
-               m_iTTOAlign, &rtFocus);
+  CalcTextRect(L"Check box", GetProperties()->m_pThemeProvider.Get(),
+               m_TTOStyles, m_iTTOAlign, &rtFocus);
 
   m_FocusRect = CFX_RectF(m_CaptionRect.TopLeft(),
                           std::max(m_CaptionRect.width, rtFocus.width),
@@ -138,22 +138,22 @@
 
 uint32_t CFWL_CheckBox::GetPartStates() const {
   int32_t dwStates = CFWL_PartState_Normal;
-  if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) ==
+  if ((GetProperties()->m_dwStates & FWL_STATE_CKB_CheckMask) ==
       FWL_STATE_CKB_Neutral) {
     dwStates = CFWL_PartState_Neutral;
-  } else if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) ==
+  } else if ((GetProperties()->m_dwStates & FWL_STATE_CKB_CheckMask) ==
              FWL_STATE_CKB_Checked) {
     dwStates = CFWL_PartState_Checked;
   }
-  if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)
+  if (GetProperties()->m_dwStates & FWL_WGTSTATE_Disabled)
     dwStates |= CFWL_PartState_Disabled;
-  else if (m_pProperties->m_dwStates & FWL_STATE_CKB_Hovered)
+  else if (GetProperties()->m_dwStates & FWL_STATE_CKB_Hovered)
     dwStates |= CFWL_PartState_Hovered;
-  else if (m_pProperties->m_dwStates & FWL_STATE_CKB_Pressed)
+  else if (GetProperties()->m_dwStates & FWL_STATE_CKB_Pressed)
     dwStates |= CFWL_PartState_Pressed;
   else
     dwStates |= CFWL_PartState_Normal;
-  if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused)
+  if (GetProperties()->m_dwStates & FWL_WGTSTATE_Focused)
     dwStates |= CFWL_PartState_Focused;
   return dwStates;
 }
@@ -165,31 +165,31 @@
 }
 
 void CFWL_CheckBox::NextStates() {
-  uint32_t dwFirststate = m_pProperties->m_dwStates;
-  if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_RadioButton) {
-    if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) ==
+  uint32_t dwFirststate = GetProperties()->m_dwStates;
+  if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_CKB_RadioButton) {
+    if ((GetProperties()->m_dwStates & FWL_STATE_CKB_CheckMask) ==
         FWL_STATE_CKB_Unchecked) {
-      m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked;
+      GetProperties()->m_dwStates |= FWL_STATE_CKB_Checked;
     }
   } else {
-    if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) ==
+    if ((GetProperties()->m_dwStates & FWL_STATE_CKB_CheckMask) ==
         FWL_STATE_CKB_Neutral) {
-      m_pProperties->m_dwStates &= ~FWL_STATE_CKB_CheckMask;
-      if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State)
-        m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked;
-    } else if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) ==
+      GetProperties()->m_dwStates &= ~FWL_STATE_CKB_CheckMask;
+      if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_CKB_3State)
+        GetProperties()->m_dwStates |= FWL_STATE_CKB_Checked;
+    } else if ((GetProperties()->m_dwStates & FWL_STATE_CKB_CheckMask) ==
                FWL_STATE_CKB_Checked) {
-      m_pProperties->m_dwStates &= ~FWL_STATE_CKB_CheckMask;
+      GetProperties()->m_dwStates &= ~FWL_STATE_CKB_CheckMask;
     } else {
-      if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State)
-        m_pProperties->m_dwStates |= FWL_STATE_CKB_Neutral;
+      if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_CKB_3State)
+        GetProperties()->m_dwStates |= FWL_STATE_CKB_Neutral;
       else
-        m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked;
+        GetProperties()->m_dwStates |= FWL_STATE_CKB_Checked;
     }
   }
 
   RepaintRect(m_ClientRect);
-  if (dwFirststate == m_pProperties->m_dwStates)
+  if (dwFirststate == GetProperties()->m_dwStates)
     return;
 
   CFWL_Event wmCheckBoxState(CFWL_Event::Type::CheckStateChanged, this);
@@ -248,20 +248,20 @@
 
 void CFWL_CheckBox::OnFocusChanged(bool bSet) {
   if (bSet)
-    m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
+    GetProperties()->m_dwStates |= FWL_WGTSTATE_Focused;
   else
-    m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
+    GetProperties()->m_dwStates &= ~FWL_WGTSTATE_Focused;
 
   RepaintRect(m_ClientRect);
 }
 
 void CFWL_CheckBox::OnLButtonDown() {
-  if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)
+  if (GetProperties()->m_dwStates & FWL_WGTSTATE_Disabled)
     return;
 
   m_bBtnDown = true;
-  m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Hovered;
-  m_pProperties->m_dwStates |= FWL_STATE_CKB_Pressed;
+  GetProperties()->m_dwStates &= ~FWL_STATE_CKB_Hovered;
+  GetProperties()->m_dwStates |= FWL_STATE_CKB_Pressed;
   RepaintRect(m_ClientRect);
 }
 
@@ -273,41 +273,41 @@
   if (!m_ClientRect.Contains(pMsg->m_pos))
     return;
 
-  m_pProperties->m_dwStates |= FWL_STATE_CKB_Hovered;
-  m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Pressed;
+  GetProperties()->m_dwStates |= FWL_STATE_CKB_Hovered;
+  GetProperties()->m_dwStates &= ~FWL_STATE_CKB_Pressed;
   NextStates();
 }
 
 void CFWL_CheckBox::OnMouseMove(CFWL_MessageMouse* pMsg) {
-  if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)
+  if (GetProperties()->m_dwStates & FWL_WGTSTATE_Disabled)
     return;
 
   bool bRepaint = false;
   if (m_bBtnDown) {
     if (m_ClientRect.Contains(pMsg->m_pos)) {
-      if ((m_pProperties->m_dwStates & FWL_STATE_CKB_Pressed) == 0) {
+      if ((GetProperties()->m_dwStates & FWL_STATE_CKB_Pressed) == 0) {
         bRepaint = true;
-        m_pProperties->m_dwStates |= FWL_STATE_CKB_Pressed;
+        GetProperties()->m_dwStates |= FWL_STATE_CKB_Pressed;
       }
-      if ((m_pProperties->m_dwStates & FWL_STATE_CKB_Hovered)) {
+      if ((GetProperties()->m_dwStates & FWL_STATE_CKB_Hovered)) {
         bRepaint = true;
-        m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Hovered;
+        GetProperties()->m_dwStates &= ~FWL_STATE_CKB_Hovered;
       }
     } else {
-      if (m_pProperties->m_dwStates & FWL_STATE_CKB_Pressed) {
+      if (GetProperties()->m_dwStates & FWL_STATE_CKB_Pressed) {
         bRepaint = true;
-        m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Pressed;
+        GetProperties()->m_dwStates &= ~FWL_STATE_CKB_Pressed;
       }
-      if ((m_pProperties->m_dwStates & FWL_STATE_CKB_Hovered) == 0) {
+      if ((GetProperties()->m_dwStates & FWL_STATE_CKB_Hovered) == 0) {
         bRepaint = true;
-        m_pProperties->m_dwStates |= FWL_STATE_CKB_Hovered;
+        GetProperties()->m_dwStates |= FWL_STATE_CKB_Hovered;
       }
     }
   } else {
     if (m_ClientRect.Contains(pMsg->m_pos)) {
-      if ((m_pProperties->m_dwStates & FWL_STATE_CKB_Hovered) == 0) {
+      if ((GetProperties()->m_dwStates & FWL_STATE_CKB_Hovered) == 0) {
         bRepaint = true;
-        m_pProperties->m_dwStates |= FWL_STATE_CKB_Hovered;
+        GetProperties()->m_dwStates |= FWL_STATE_CKB_Hovered;
       }
     }
   }
@@ -317,9 +317,9 @@
 
 void CFWL_CheckBox::OnMouseLeave() {
   if (m_bBtnDown)
-    m_pProperties->m_dwStates |= FWL_STATE_CKB_Hovered;
+    GetProperties()->m_dwStates |= FWL_STATE_CKB_Hovered;
   else
-    m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Hovered;
+    GetProperties()->m_dwStates &= ~FWL_STATE_CKB_Hovered;
 
   RepaintRect(m_BoxRect);
 }
diff --git a/xfa/fwl/cfwl_combobox.cpp b/xfa/fwl/cfwl_combobox.cpp
index 8cce9ff..920fbd4 100644
--- a/xfa/fwl/cfwl_combobox.cpp
+++ b/xfa/fwl/cfwl_combobox.cpp
@@ -61,7 +61,7 @@
   bool bDelDropDown = !!(dwStylesExRemoved & FWL_STYLEEXT_CMB_DropDown);
 
   dwStylesExRemoved &= ~FWL_STYLEEXT_CMB_DropDown;
-  m_pProperties->m_dwStyleExes |= FWL_STYLEEXT_CMB_DropDown;
+  GetProperties()->m_dwStyleExes |= FWL_STYLEEXT_CMB_DropDown;
 
   if (bAddDropDown)
     m_pEdit->ModifyStylesEx(0, FWL_STYLEEXT_EDT_ReadOnly);
@@ -71,8 +71,9 @@
 }
 
 void CFWL_ComboBox::Update() {
-  if (m_iLock)
+  if (IsLocked())
     return;
+
   if (m_pEdit)
     ResetEditAlignment();
   ResetTheme();
@@ -80,8 +81,8 @@
 }
 
 FWL_WidgetHit CFWL_ComboBox::HitTest(const CFX_PointF& point) {
-  CFX_RectF rect(0, 0, m_pProperties->m_WidgetRect.width - m_BtnRect.width,
-                 m_pProperties->m_WidgetRect.height);
+  CFX_RectF rect(0, 0, GetProperties()->m_WidgetRect.width - m_BtnRect.width,
+                 GetProperties()->m_WidgetRect.height);
   if (rect.Contains(point))
     return FWL_WidgetHit::Edit;
   if (m_BtnRect.Contains(point))
@@ -96,7 +97,7 @@
 
 void CFWL_ComboBox::DrawWidget(CXFA_Graphics* pGraphics,
                                const CFX_Matrix& matrix) {
-  IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider.Get();
+  IFWL_ThemeProvider* pTheme = GetProperties()->m_pThemeProvider.Get();
   pGraphics->SaveGraphState();
   pGraphics->ConcatMatrix(&matrix);
   if (!m_BtnRect.IsEmpty(0.1f)) {
@@ -128,7 +129,7 @@
   if (!pThemeProvider)
     return;
 
-  m_pProperties->m_pThemeProvider = pThemeProvider;
+  GetProperties()->m_pThemeProvider = pThemeProvider;
   if (m_pListBox)
     m_pListBox->SetThemeProvider(pThemeProvider);
   if (m_pEdit)
@@ -195,7 +196,7 @@
 }
 
 CFX_RectF CFWL_ComboBox::GetBBox() const {
-  CFX_RectF rect = m_pProperties->m_WidgetRect;
+  CFX_RectF rect = GetProperties()->m_WidgetRect;
   if (!m_pListBox || !IsDropListVisible())
     return rect;
 
@@ -236,9 +237,9 @@
       fPopupMin = fItemHeight * 3 + fBorder * 2;
 
     float fPopupMax = fItemHeight * iItems + fBorder * 2;
-    CFX_RectF rtList(m_ClientRect.left, 0, m_pProperties->m_WidgetRect.width,
+    CFX_RectF rtList(m_ClientRect.left, 0, GetProperties()->m_WidgetRect.width,
                      0);
-    GetPopupPos(fPopupMin, fPopupMax, m_pProperties->m_WidgetRect, &rtList);
+    GetPopupPos(fPopupMin, fPopupMax, GetProperties()->m_WidgetRect, &rtList);
 
     m_pListBox->SetWidgetRect(rtList);
     m_pListBox->Update();
@@ -314,10 +315,10 @@
 }
 
 void CFWL_ComboBox::ResetTheme() {
-  if (!m_pProperties->m_pThemeProvider)
-    m_pProperties->m_pThemeProvider = GetAvailableTheme();
+  if (!GetProperties()->m_pThemeProvider)
+    GetProperties()->m_pThemeProvider = GetAvailableTheme();
 
-  IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider.Get();
+  IFWL_ThemeProvider* pTheme = GetProperties()->m_pThemeProvider.Get();
   if (m_pListBox && !m_pListBox->GetThemeProvider())
     m_pListBox->SetThemeProvider(pTheme);
   if (m_pEdit && !m_pEdit->GetThemeProvider())
@@ -329,7 +330,7 @@
     return;
 
   uint32_t dwAdd = 0;
-  switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_EditHAlignMask) {
+  switch (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_CMB_EditHAlignMask) {
     case FWL_STYLEEXT_CMB_EditHCenter: {
       dwAdd |= FWL_STYLEEXT_EDT_HCenter;
       break;
@@ -339,7 +340,7 @@
       break;
     }
   }
-  switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_EditVAlignMask) {
+  switch (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_CMB_EditVAlignMask) {
     case FWL_STYLEEXT_CMB_EditVCenter: {
       dwAdd |= FWL_STYLEEXT_EDT_VCenter;
       break;
@@ -353,7 +354,7 @@
       break;
     }
   }
-  if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_EditJustified)
+  if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_CMB_EditJustified)
     dwAdd |= FWL_STYLEEXT_EDT_Justified;
 
   m_pEdit->ModifyStylesEx(dwAdd, FWL_STYLEEXT_EDT_HAlignMask |
@@ -366,7 +367,7 @@
     return;
 
   uint32_t dwAdd = 0;
-  switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_ListItemAlignMask) {
+  switch (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_CMB_ListItemAlignMask) {
     case FWL_STYLEEXT_CMB_ListItemCenterAlign: {
       dwAdd |= FWL_STYLEEXT_LTB_CenterAlign;
       break;
@@ -408,9 +409,9 @@
   prop->m_pParent = this;
   prop->m_dwStyles = FWL_WGTSTYLE_Border | FWL_WGTSTYLE_VScroll;
   prop->m_dwStates = FWL_WGTSTATE_Invisible;
-  prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
-  m_pListBox = std::make_unique<CFWL_ComboList>(m_pOwnerApp.Get(),
-                                                std::move(prop), this);
+  prop->m_pThemeProvider = GetProperties()->m_pThemeProvider;
+  m_pListBox =
+      std::make_unique<CFWL_ComboList>(GetOwnerApp(), std::move(prop), this);
 }
 
 void CFWL_ComboBox::InitComboEdit() {
@@ -419,10 +420,10 @@
 
   auto prop = std::make_unique<CFWL_WidgetProperties>();
   prop->m_pParent = this;
-  prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
+  prop->m_pThemeProvider = GetProperties()->m_pThemeProvider;
 
-  m_pEdit = std::make_unique<CFWL_ComboEdit>(m_pOwnerApp.Get(), std::move(prop),
-                                             this);
+  m_pEdit =
+      std::make_unique<CFWL_ComboEdit>(GetOwnerApp(), std::move(prop), this);
   m_pEdit->SetOuter(this);
 }
 
@@ -529,13 +530,13 @@
 
 void CFWL_ComboBox::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
   if (bSet) {
-    m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
+    GetProperties()->m_dwStates |= FWL_WGTSTATE_Focused;
     if ((m_pEdit->GetStates() & FWL_WGTSTATE_Focused) == 0) {
       CFWL_MessageSetFocus msg(nullptr, m_pEdit.get());
       m_pEdit->GetDelegate()->OnProcessMessage(&msg);
     }
   } else {
-    m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
+    GetProperties()->m_dwStates &= ~FWL_WGTSTATE_Focused;
     ShowDropList(false);
     CFWL_MessageKillFocus msg(m_pEdit.get());
     m_pEdit->GetDelegate()->OnProcessMessage(&msg);
@@ -584,6 +585,6 @@
                                 float fMaxHeight,
                                 const CFX_RectF& rtAnchor,
                                 CFX_RectF* pPopupRect) {
-  m_pWidgetMgr->GetAdapterPopupPos(this, fMinHeight, fMaxHeight, rtAnchor,
-                                   pPopupRect);
+  GetWidgetMgr()->GetAdapterPopupPos(this, fMinHeight, fMaxHeight, rtAnchor,
+                                     pPopupRect);
 }
diff --git a/xfa/fwl/cfwl_combobox.h b/xfa/fwl/cfwl_combobox.h
index 5b82dd3..50908cf 100644
--- a/xfa/fwl/cfwl_combobox.h
+++ b/xfa/fwl/cfwl_combobox.h
@@ -97,7 +97,7 @@
 
  private:
   bool IsDropDownStyle() const {
-    return !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_DropDown);
+    return !!(GetProperties()->m_dwStyleExes & FWL_STYLEEXT_CMB_DropDown);
   }
   void MatchEditText();
   void SyncEditText(int32_t iListItem);
diff --git a/xfa/fwl/cfwl_comboedit.cpp b/xfa/fwl/cfwl_comboedit.cpp
index 720ce05..a8ac57f 100644
--- a/xfa/fwl/cfwl_comboedit.cpp
+++ b/xfa/fwl/cfwl_comboedit.cpp
@@ -33,11 +33,11 @@
 
 void CFWL_ComboEdit::FlagFocus(bool bSet) {
   if (bSet) {
-    m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
+    GetProperties()->m_dwStates |= FWL_WGTSTATE_Focused;
     return;
   }
 
-  m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
+  GetProperties()->m_dwStates &= ~FWL_WGTSTATE_Focused;
   HideCaret(nullptr);
 }
 
@@ -48,19 +48,19 @@
   bool backDefault = true;
   switch (pMessage->GetType()) {
     case CFWL_Message::Type::kSetFocus: {
-      m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
+      GetProperties()->m_dwStates |= FWL_WGTSTATE_Focused;
       backDefault = false;
       break;
     }
     case CFWL_Message::Type::kKillFocus: {
-      m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
+      GetProperties()->m_dwStates &= ~FWL_WGTSTATE_Focused;
       backDefault = false;
       break;
     }
     case CFWL_Message::Type::kMouse: {
       CFWL_MessageMouse* pMsg = static_cast<CFWL_MessageMouse*>(pMessage);
       if ((pMsg->m_dwCmd == FWL_MouseCommand::LeftButtonDown) &&
-          ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0)) {
+          ((GetProperties()->m_dwStates & FWL_WGTSTATE_Focused) == 0)) {
         SetSelected();
       }
       break;
diff --git a/xfa/fwl/cfwl_combolist.cpp b/xfa/fwl/cfwl_combolist.cpp
index 3884a60..745ebb4 100644
--- a/xfa/fwl/cfwl_combolist.cpp
+++ b/xfa/fwl/cfwl_combolist.cpp
@@ -64,10 +64,10 @@
 }
 
 CFX_PointF CFWL_ComboList::ClientToOuter(const CFX_PointF& point) {
-  CFX_PointF ret = point + CFX_PointF(m_pProperties->m_WidgetRect.left,
-                                      m_pProperties->m_WidgetRect.top);
+  CFX_PointF ret = point + CFX_PointF(GetProperties()->m_WidgetRect.left,
+                                      GetProperties()->m_WidgetRect.top);
   CFWL_Widget* pOwner = GetOwner();
-  return pOwner ? pOwner->TransformTo(m_pOuter, ret) : ret;
+  return pOwner ? pOwner->TransformTo(GetOuter(), ret) : ret;
 }
 
 void CFWL_ComboList::OnProcessMessage(CFWL_Message* pMessage) {
@@ -121,8 +121,8 @@
     return;
 
   CFWL_MessageKillFocus* pKill = static_cast<CFWL_MessageKillFocus*>(pMsg);
-  CFWL_ComboBox* pOuter = static_cast<CFWL_ComboBox*>(m_pOuter);
-  if (pKill->IsFocusedOnWidget(m_pOuter) ||
+  CFWL_ComboBox* pOuter = static_cast<CFWL_ComboBox*>(GetOuter());
+  if (pKill->IsFocusedOnWidget(pOuter) ||
       pKill->IsFocusedOnWidget(pOuter->GetComboEdit())) {
     pOuter->ShowDropList(false);
   }
@@ -148,7 +148,7 @@
   } else if (m_bNotifyOwner) {
     pMsg->m_pos = ClientToOuter(pMsg->m_pos);
 
-    CFWL_ComboBox* pOuter = static_cast<CFWL_ComboBox*>(m_pOuter);
+    CFWL_ComboBox* pOuter = static_cast<CFWL_ComboBox*>(GetOuter());
     pOuter->GetDelegate()->OnProcessMessage(pMsg);
   }
 }
@@ -157,12 +157,12 @@
   if (GetRTClient().Contains(pMsg->m_pos))
     return;
 
-  CFWL_ComboBox* pOuter = static_cast<CFWL_ComboBox*>(m_pOuter);
+  CFWL_ComboBox* pOuter = static_cast<CFWL_ComboBox*>(GetOuter());
   pOuter->ShowDropList(false);
 }
 
 void CFWL_ComboList::OnDropListLButtonUp(CFWL_MessageMouse* pMsg) {
-  CFWL_ComboBox* pOuter = static_cast<CFWL_ComboBox*>(m_pOuter);
+  CFWL_ComboBox* pOuter = static_cast<CFWL_ComboBox*>(GetOuter());
   if (m_bNotifyOwner) {
     pMsg->m_pos = ClientToOuter(pMsg->m_pos);
     pOuter->GetDelegate()->OnProcessMessage(pMsg);
@@ -183,7 +183,7 @@
 }
 
 bool CFWL_ComboList::OnDropListKey(CFWL_MessageKey* pKey) {
-  CFWL_ComboBox* pOuter = static_cast<CFWL_ComboBox*>(m_pOuter);
+  CFWL_ComboBox* pOuter = static_cast<CFWL_ComboBox*>(GetOuter());
   bool bPropagate = false;
   if (pKey->m_dwCmd == CFWL_MessageKey::Type::kKeyDown) {
     uint32_t dwKeyCode = pKey->m_dwKeyCode;
@@ -208,7 +208,7 @@
     bPropagate = true;
   }
   if (bPropagate) {
-    pKey->SetDstTarget(m_pOuter);
+    pKey->SetDstTarget(GetOuter());
     pOuter->GetDelegate()->OnProcessMessage(pKey);
     return true;
   }
@@ -222,7 +222,7 @@
     case XFA_FWL_VKEY_Down:
     case XFA_FWL_VKEY_Home:
     case XFA_FWL_VKEY_End: {
-      CFWL_ComboBox* pOuter = static_cast<CFWL_ComboBox*>(m_pOuter);
+      CFWL_ComboBox* pOuter = static_cast<CFWL_ComboBox*>(GetOuter());
       CFWL_ListItem* hItem = GetItem(this, pOuter->GetCurrentSelection());
       hItem = GetListItem(hItem, dwKeyCode);
       if (!hItem)
@@ -230,8 +230,8 @@
 
       SetSelection(hItem, hItem, true);
       ScrollToVisible(hItem);
-      CFX_RectF rtInvalidate(0, 0, m_pProperties->m_WidgetRect.width,
-                             m_pProperties->m_WidgetRect.height);
+      CFX_RectF rtInvalidate(0, 0, GetProperties()->m_WidgetRect.width,
+                             GetProperties()->m_WidgetRect.height);
       RepaintRect(rtInvalidate);
       break;
     }
diff --git a/xfa/fwl/cfwl_datetimeedit.cpp b/xfa/fwl/cfwl_datetimeedit.cpp
index 126c26c..e93d3af 100644
--- a/xfa/fwl/cfwl_datetimeedit.cpp
+++ b/xfa/fwl/cfwl_datetimeedit.cpp
@@ -30,11 +30,11 @@
   CFWL_MessageMouse* pMouse = static_cast<CFWL_MessageMouse*>(pMessage);
   if (pMouse->m_dwCmd == FWL_MouseCommand::LeftButtonDown ||
       pMouse->m_dwCmd == FWL_MouseCommand::RightButtonDown) {
-    if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0)
-      m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
+    if ((GetProperties()->m_dwStates & FWL_WGTSTATE_Focused) == 0)
+      GetProperties()->m_dwStates |= FWL_WGTSTATE_Focused;
 
     CFWL_DateTimePicker* pDateTime =
-        static_cast<CFWL_DateTimePicker*>(m_pOuter);
+        static_cast<CFWL_DateTimePicker*>(GetOuter());
     if (pDateTime->IsMonthCalendarVisible()) {
       CFX_RectF rtInvalidate = pDateTime->GetWidgetRect();
       pDateTime->ShowMonthCalendar(false);
diff --git a/xfa/fwl/cfwl_datetimepicker.cpp b/xfa/fwl/cfwl_datetimepicker.cpp
index 241e969..047e5c6 100644
--- a/xfa/fwl/cfwl_datetimepicker.cpp
+++ b/xfa/fwl/cfwl_datetimepicker.cpp
@@ -25,24 +25,24 @@
 }  // namespace
 CFWL_DateTimePicker::CFWL_DateTimePicker(const CFWL_App* app)
     : CFWL_Widget(app, std::make_unique<CFWL_WidgetProperties>(), nullptr) {
-  m_pProperties->m_dwStyleExes = FWL_STYLEEXT_DTP_ShortDateFormat;
+  GetProperties()->m_dwStyleExes = FWL_STYLEEXT_DTP_ShortDateFormat;
 
   auto monthProp = std::make_unique<CFWL_WidgetProperties>();
   monthProp->m_dwStyles = FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border;
   monthProp->m_dwStates = FWL_WGTSTATE_Invisible;
   monthProp->m_pParent = this;
-  monthProp->m_pThemeProvider = m_pProperties->m_pThemeProvider;
+  monthProp->m_pThemeProvider = GetProperties()->m_pThemeProvider;
   m_pMonthCal = std::make_unique<CFWL_MonthCalendar>(
-      m_pOwnerApp.Get(), std::move(monthProp), this);
+      GetOwnerApp(), std::move(monthProp), this);
 
   m_pMonthCal->SetWidgetRect(
       CFX_RectF(0, 0, m_pMonthCal->GetAutosizedWidgetRect().Size()));
 
   auto editProp = std::make_unique<CFWL_WidgetProperties>();
   editProp->m_pParent = this;
-  editProp->m_pThemeProvider = m_pProperties->m_pThemeProvider;
+  editProp->m_pThemeProvider = GetProperties()->m_pThemeProvider;
 
-  m_pEdit = std::make_unique<CFWL_DateTimeEdit>(m_pOwnerApp.Get(),
+  m_pEdit = std::make_unique<CFWL_DateTimeEdit>(GetOwnerApp(),
                                                 std::move(editProp), this);
   RegisterEventTarget(m_pMonthCal.get());
   RegisterEventTarget(m_pEdit.get());
@@ -57,18 +57,18 @@
 }
 
 void CFWL_DateTimePicker::Update() {
-  if (m_iLock)
+  if (IsLocked())
     return;
 
-  if (!m_pProperties->m_pThemeProvider)
-    m_pProperties->m_pThemeProvider = GetAvailableTheme();
-  m_pEdit->SetThemeProvider(m_pProperties->m_pThemeProvider.Get());
+  if (!GetProperties()->m_pThemeProvider)
+    GetProperties()->m_pThemeProvider = GetAvailableTheme();
+  m_pEdit->SetThemeProvider(GetProperties()->m_pThemeProvider.Get());
   m_ClientRect = GetClientRect();
   m_pEdit->SetWidgetRect(m_ClientRect);
   ResetEditAlignment();
   m_pEdit->Update();
   if (!m_pMonthCal->GetThemeProvider())
-    m_pMonthCal->SetThemeProvider(m_pProperties->m_pThemeProvider.Get());
+    m_pMonthCal->SetThemeProvider(GetProperties()->m_pThemeProvider.Get());
 
   IFWL_ThemeProvider* theme = GetAvailableTheme();
   if (!theme)
@@ -83,8 +83,8 @@
 }
 
 FWL_WidgetHit CFWL_DateTimePicker::HitTest(const CFX_PointF& point) {
-  CFX_RectF rect(0, 0, m_pProperties->m_WidgetRect.width,
-                 m_pProperties->m_WidgetRect.height);
+  CFX_RectF rect(0, 0, GetProperties()->m_WidgetRect.width,
+                 GetProperties()->m_WidgetRect.height);
   if (rect.Contains(point))
     return FWL_WidgetHit::Edit;
   if (NeedsToShowButton())
@@ -103,7 +103,7 @@
   if (!pGraphics)
     return;
 
-  IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider.Get();
+  IFWL_ThemeProvider* pTheme = GetProperties()->m_pThemeProvider.Get();
   if (!pTheme)
     return;
 
@@ -129,7 +129,7 @@
 }
 
 void CFWL_DateTimePicker::SetThemeProvider(IFWL_ThemeProvider* pTP) {
-  m_pProperties->m_pThemeProvider = pTP;
+  GetProperties()->m_pThemeProvider = pTP;
   m_pMonthCal->SetThemeProvider(pTP);
 }
 
@@ -181,15 +181,15 @@
 }
 
 CFX_RectF CFWL_DateTimePicker::GetBBox() const {
-  CFX_RectF rect = m_pProperties->m_WidgetRect;
+  CFX_RectF rect = GetProperties()->m_WidgetRect;
   if (NeedsToShowButton())
     rect.width += m_fBtn;
   if (!IsMonthCalendarVisible())
     return rect;
 
   CFX_RectF rtMonth = m_pMonthCal->GetWidgetRect();
-  rtMonth.Offset(m_pProperties->m_WidgetRect.left,
-                 m_pProperties->m_WidgetRect.top);
+  rtMonth.Offset(GetProperties()->m_WidgetRect.left,
+                 GetProperties()->m_WidgetRect.top);
   rect.Union(rtMonth);
   return rect;
 }
@@ -216,7 +216,7 @@
 WideString CFWL_DateTimePicker::FormatDateString(int32_t iYear,
                                                  int32_t iMonth,
                                                  int32_t iDay) {
-  if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_ShortDateFormat)
+  if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_DTP_ShortDateFormat)
     return WideString::Format(L"%d-%d-%d", iYear, iMonth, iDay);
 
   return WideString::Format(L"%d Year %d Month %d Day", iYear, iMonth, iDay);
@@ -230,7 +230,7 @@
     CFX_RectF rtMonthCal = m_pMonthCal->GetAutosizedWidgetRect();
     float fPopupMin = rtMonthCal.height;
     float fPopupMax = rtMonthCal.height;
-    CFX_RectF rtAnchor(m_pProperties->m_WidgetRect);
+    CFX_RectF rtAnchor(GetProperties()->m_WidgetRect);
     rtAnchor.width = rtMonthCal.width;
     rtMonthCal.left = m_ClientRect.left;
     rtMonthCal.top = rtAnchor.Height();
@@ -250,8 +250,8 @@
     m_pEdit->GetDelegate()->OnProcessMessage(&msg);
   }
 
-  CFX_RectF rtInvalidate(0, 0, m_pProperties->m_WidgetRect.width,
-                         m_pProperties->m_WidgetRect.height);
+  CFX_RectF rtInvalidate(0, 0, GetProperties()->m_WidgetRect.width,
+                         GetProperties()->m_WidgetRect.height);
 
   CFX_RectF rtCal = m_pMonthCal->GetWidgetRect();
   rtInvalidate.Union(rtCal);
@@ -268,7 +268,7 @@
     return;
 
   uint32_t dwAdd = 0;
-  switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_EditHAlignMask) {
+  switch (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_DTP_EditHAlignMask) {
     case FWL_STYLEEXT_DTP_EditHCenter: {
       dwAdd |= FWL_STYLEEXT_EDT_HCenter;
       break;
@@ -282,7 +282,7 @@
       break;
     }
   }
-  switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_EditVAlignMask) {
+  switch (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_DTP_EditVAlignMask) {
     case FWL_STYLEEXT_DTP_EditVCenter: {
       dwAdd |= FWL_STYLEEXT_EDT_VCenter;
       break;
@@ -296,7 +296,7 @@
       break;
     }
   }
-  if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_EditJustified)
+  if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_DTP_EditJustified)
     dwAdd |= FWL_STYLEEXT_EDT_Justified;
 
   m_pEdit->ModifyStylesEx(dwAdd, FWL_STYLEEXT_EDT_HAlignMask |
@@ -328,7 +328,7 @@
 }
 
 bool CFWL_DateTimePicker::NeedsToShowButton() const {
-  return m_pProperties->m_dwStates & FWL_WGTSTATE_Focused ||
+  return GetProperties()->m_dwStates & FWL_WGTSTATE_Focused ||
          m_pMonthCal->GetStates() & FWL_WGTSTATE_Focused ||
          m_pEdit->GetStates() & FWL_WGTSTATE_Focused;
 }
@@ -390,16 +390,16 @@
 
   CFX_RectF rtInvalidate(m_BtnRect);
   if (bSet) {
-    m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
+    GetProperties()->m_dwStates |= FWL_WGTSTATE_Focused;
     if (m_pEdit && !(m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly)) {
-      m_BtnRect = CFX_RectF(m_pProperties->m_WidgetRect.width, 0, m_fBtn,
-                            m_pProperties->m_WidgetRect.height - 1);
+      m_BtnRect = CFX_RectF(GetProperties()->m_WidgetRect.width, 0, m_fBtn,
+                            GetProperties()->m_WidgetRect.height - 1);
     }
     rtInvalidate = m_BtnRect;
     pMsg->SetDstTarget(m_pEdit.get());
     m_pEdit->GetDelegate()->OnProcessMessage(pMsg);
   } else {
-    m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
+    GetProperties()->m_dwStates &= ~FWL_WGTSTATE_Focused;
     m_BtnRect = CFX_RectF();
     if (IsMonthCalendarVisible())
       ShowMonthCalendar(false);
@@ -457,8 +457,8 @@
                                       float fMaxHeight,
                                       const CFX_RectF& rtAnchor,
                                       CFX_RectF* pPopupRect) {
-  m_pWidgetMgr->GetAdapterPopupPos(this, fMinHeight, fMaxHeight, rtAnchor,
-                                   pPopupRect);
+  GetWidgetMgr()->GetAdapterPopupPos(this, fMinHeight, fMaxHeight, rtAnchor,
+                                     pPopupRect);
 }
 
 void CFWL_DateTimePicker::ClearText() {
diff --git a/xfa/fwl/cfwl_edit.cpp b/xfa/fwl/cfwl_edit.cpp
index 8c49480..3c9552d 100644
--- a/xfa/fwl/cfwl_edit.cpp
+++ b/xfa/fwl/cfwl_edit.cpp
@@ -54,7 +54,7 @@
 
 CFWL_Edit::~CFWL_Edit() {
   m_pEditEngine->SetDelegate(nullptr);
-  if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused)
+  if (GetProperties()->m_dwStates & FWL_WGTSTATE_Focused)
     HideCaret(nullptr);
 }
 
@@ -63,8 +63,8 @@
 }
 
 CFX_RectF CFWL_Edit::GetWidgetRect() {
-  CFX_RectF rect = m_pProperties->m_WidgetRect;
-  if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
+  CFX_RectF rect = GetProperties()->m_WidgetRect;
+  if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
     IFWL_ThemeProvider* theme = GetAvailableTheme();
     float scrollbarWidth = theme ? theme->GetScrollBarWidth() : 0.0f;
     if (IsShowScrollBar(true)) {
@@ -84,8 +84,8 @@
 
   if (m_pEditEngine->GetLength() > 0) {
     CFX_SizeF size = CalcTextSize(
-        m_pEditEngine->GetText(), m_pProperties->m_pThemeProvider.Get(),
-        !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine));
+        m_pEditEngine->GetText(), GetProperties()->m_pThemeProvider.Get(),
+        !!(GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine));
     rect = CFX_RectF(0, 0, size);
   }
 
@@ -94,8 +94,8 @@
 }
 
 void CFWL_Edit::SetStates(uint32_t dwStates) {
-  if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Invisible) ||
-      (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) {
+  if ((GetProperties()->m_dwStates & FWL_WGTSTATE_Invisible) ||
+      (GetProperties()->m_dwStates & FWL_WGTSTATE_Disabled)) {
     HideCaret(nullptr);
   }
   CFWL_Widget::SetStates(dwStates);
@@ -104,8 +104,8 @@
 void CFWL_Edit::Update() {
   if (IsLocked())
     return;
-  if (!m_pProperties->m_pThemeProvider)
-    m_pProperties->m_pThemeProvider = GetAvailableTheme();
+  if (!GetProperties()->m_pThemeProvider)
+    GetProperties()->m_pThemeProvider = GetAvailableTheme();
 
   Layout();
   if (m_ClientRect.IsEmpty())
@@ -118,7 +118,7 @@
 }
 
 FWL_WidgetHit CFWL_Edit::HitTest(const CFX_PointF& point) {
-  if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
+  if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
     if (IsShowScrollBar(true)) {
       if (m_pVertScrollBar->GetWidgetRect().Contains(point))
         return FWL_WidgetHit::VScrollBar;
@@ -140,7 +140,7 @@
   if (m_ClientRect.IsEmpty())
     return;
 
-  IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider.Get();
+  IFWL_ThemeProvider* pTheme = GetProperties()->m_pThemeProvider.Get();
   if (!pTheme)
     return;
 
@@ -158,7 +158,7 @@
     m_pVertScrollBar->SetThemeProvider(pThemeProvider);
   if (m_pCaret)
     m_pCaret->SetThemeProvider(pThemeProvider);
-  m_pProperties->m_pThemeProvider = pThemeProvider;
+  GetProperties()->m_pThemeProvider = pThemeProvider;
 }
 
 void CFWL_Edit::SetText(const WideString& wsText) {
@@ -261,10 +261,6 @@
   return m_pEditEngine->CanRedo();
 }
 
-void CFWL_Edit::SetOuter(CFWL_Widget* pOuter) {
-  m_pOuter = pOuter;
-}
-
 void CFWL_Edit::NotifyTextFull() {
   CFWL_Event evt(CFWL_Event::Type::TextFull, this);
   DispatchEvent(&evt);
@@ -273,14 +269,14 @@
 void CFWL_Edit::OnCaretChanged() {
   if (m_EngineRect.IsEmpty())
     return;
-  if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0)
+  if ((GetProperties()->m_dwStates & FWL_WGTSTATE_Focused) == 0)
     return;
 
   bool bRepaintContent = UpdateOffset();
   UpdateCaret();
   CFX_RectF rtInvalid;
   bool bRepaintScroll = false;
-  if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) {
+  if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) {
     CFWL_ScrollBar* pScroll = UpdateScroll();
     if (pScroll) {
       rtInvalid = pScroll->GetWidgetRect();
@@ -311,7 +307,7 @@
 }
 
 void CFWL_Edit::OnTextChanged() {
-  if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VAlignMask)
+  if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_VAlignMask)
     UpdateVAlignment();
 
   LayoutScrollBar();
@@ -341,10 +337,10 @@
   param.m_pWidget = this;
   param.m_iPart = CFWL_Part::Background;
   param.m_bStaticBackground = false;
-  param.m_dwStates = m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly
+  param.m_dwStates = GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly
                          ? CFWL_PartState_ReadOnly
                          : CFWL_PartState_Normal;
-  uint32_t dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled);
+  uint32_t dwStates = (GetProperties()->m_dwStates & FWL_WGTSTATE_Disabled);
   if (dwStates)
     param.m_dwStates = CFWL_PartState_Disabled;
   param.m_pGraphics = pGraphics;
@@ -371,7 +367,7 @@
                             const CFX_Matrix* pMatrix) {
   pGraphics->SaveGraphState();
 
-  if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText)
+  if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText)
     pGraphics->SaveGraphState();
 
   CFX_RectF rtClip = m_EngineRect;
@@ -384,7 +380,7 @@
     mt.Concat(*pMatrix);
   }
 
-  bool bShowSel = !!(m_pProperties->m_dwStates & FWL_WGTSTATE_Focused);
+  bool bShowSel = !!(GetProperties()->m_dwStates & FWL_WGTSTATE_Focused);
   if (bShowSel && m_pEditEngine->HasSelection()) {
     size_t sel_start;
     size_t count;
@@ -412,7 +408,7 @@
   CFX_RenderDevice* pRenderDev = pGraphics->GetRenderDevice();
   RenderText(pRenderDev, rtClip, mt);
 
-  if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) {
+  if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) {
     pGraphics->RestoreGraphState();
 
     CXFA_GEPath path;
@@ -478,15 +474,15 @@
 void CFWL_Edit::UpdateEditParams() {
   m_pEditEngine->SetAvailableWidth(m_EngineRect.width);
   m_pEditEngine->SetCombText(
-      !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText));
+      !!(GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText));
 
   m_pEditEngine->EnableValidation(
-      !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_Validate));
+      !!(GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_Validate));
   m_pEditEngine->EnablePasswordMode(
-      !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_Password));
+      !!(GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_Password));
 
   uint32_t alignment = 0;
-  switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HAlignMask) {
+  switch (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_HAlignMask) {
     case FWL_STYLEEXT_EDT_HNear: {
       alignment |= CFX_TxtLineAlignment_Left;
       break;
@@ -502,7 +498,7 @@
     default:
       break;
   }
-  switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HAlignModeMask) {
+  switch (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_HAlignModeMask) {
     case FWL_STYLEEXT_EDT_Justified: {
       alignment |= CFX_TxtLineAlignment_Justified;
       break;
@@ -513,13 +509,13 @@
   m_pEditEngine->SetAlignment(alignment);
 
   bool auto_hscroll =
-      !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoHScroll);
-  if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) {
+      !!(GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoHScroll);
+  if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) {
     m_pEditEngine->EnableMultiLine(true);
     m_pEditEngine->EnableLineWrap(!auto_hscroll);
     m_pEditEngine->LimitVerticalScroll(
-        (m_pProperties->m_dwStyles & FWL_WGTSTYLE_VScroll) == 0 &&
-        (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoVScroll) == 0);
+        (GetProperties()->m_dwStyles & FWL_WGTSTYLE_VScroll) == 0 &&
+        (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoVScroll) == 0);
   } else {
     m_pEditEngine->EnableMultiLine(false);
     m_pEditEngine->EnableLineWrap(false);
@@ -619,14 +615,14 @@
 
   float fOffsetY = 0.0f;
   CFX_RectF contents_bounds = m_pEditEngine->GetContentsBoundingBox();
-  if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VCenter) {
+  if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_VCenter) {
     fOffsetY = (m_EngineRect.height - contents_bounds.height) / 2.0f;
     if (fOffsetY < (fSpaceAbove + fSpaceBelow) / 2.0f &&
         fSpaceAbove < fSpaceBelow) {
       return;
     }
     fOffsetY += (fSpaceAbove - fSpaceBelow) / 2.0f;
-  } else if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VFar) {
+  } else if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_VFar) {
     fOffsetY = (m_EngineRect.height - contents_bounds.height);
     fOffsetY -= fSpaceBelow;
   } else {
@@ -648,7 +644,7 @@
     rtCaret.width = right - rtCaret.left;
   }
 
-  if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused && !rtCaret.IsEmpty())
+  if (GetProperties()->m_dwStates & FWL_WGTSTATE_Focused && !rtCaret.IsEmpty())
     ShowCaret(&rtCaret);
   else
     HideCaret(&rtCaret);
@@ -726,12 +722,12 @@
   if (!bVert)
     return false;
   bool bShow =
-      (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ShowScrollbarFocus)
-          ? (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) ==
+      (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_ShowScrollbarFocus)
+          ? (GetProperties()->m_dwStates & FWL_WGTSTATE_Focused) ==
                 FWL_WGTSTATE_Focused
           : true;
-  return bShow && (m_pProperties->m_dwStyles & FWL_WGTSTYLE_VScroll) &&
-         (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) &&
+  return bShow && (GetProperties()->m_dwStyles & FWL_WGTSTYLE_VScroll) &&
+         (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) &&
          IsContentHeightOverflow();
 }
 
@@ -749,13 +745,13 @@
 
   float fWidth = theme->GetScrollBarWidth();
   CFWL_ThemePart part;
-  if (!m_pOuter) {
+  if (!GetOuter()) {
     part.m_pWidget = this;
     CFX_RectF pUIMargin = theme->GetUIMargin(part);
     m_EngineRect.Deflate(pUIMargin.left, pUIMargin.top, pUIMargin.width,
                          pUIMargin.height);
-  } else if (m_pOuter->GetClassID() == FWL_Type::DateTimePicker) {
-    part.m_pWidget = m_pOuter;
+  } else if (GetOuter()->GetClassID() == FWL_Type::DateTimePicker) {
+    part.m_pWidget = GetOuter();
     CFX_RectF pUIMargin = theme->GetUIMargin(part);
     m_EngineRect.Deflate(pUIMargin.left, pUIMargin.top, pUIMargin.width,
                          pUIMargin.height);
@@ -767,7 +763,7 @@
     InitVerticalScrollBar();
 
     CFX_RectF rtVertScr;
-    if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
+    if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
       rtVertScr = CFX_RectF(m_ClientRect.right() + kEditMargin,
                             m_ClientRect.top, fWidth, m_ClientRect.height);
     } else {
@@ -789,7 +785,7 @@
     InitHorizontalScrollBar();
 
     CFX_RectF rtHoriScr;
-    if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
+    if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
       rtHoriScr =
           CFX_RectF(m_ClientRect.left, m_ClientRect.bottom() + kEditMargin,
                     m_ClientRect.width, fWidth);
@@ -809,7 +805,7 @@
 }
 
 void CFWL_Edit::LayoutScrollBar() {
-  if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ShowScrollbarFocus) ==
+  if ((GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_ShowScrollbarFocus) ==
       0) {
     return;
   }
@@ -823,7 +819,7 @@
     if (!m_pVertScrollBar) {
       InitVerticalScrollBar();
       CFX_RectF rtVertScr;
-      if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
+      if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
         rtVertScr = CFX_RectF(m_ClientRect.right() + kEditMargin,
                               m_ClientRect.top, fWidth, m_ClientRect.height);
       } else {
@@ -844,7 +840,7 @@
     if (!m_pHorzScrollBar) {
       InitHorizontalScrollBar();
       CFX_RectF rtHoriScr;
-      if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
+      if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
         rtHoriScr =
             CFX_RectF(m_ClientRect.left, m_ClientRect.bottom() + kEditMargin,
                       m_ClientRect.width, fWidth);
@@ -878,9 +874,9 @@
   prop->m_dwStyleExes = FWL_STYLEEXT_SCB_Vert;
   prop->m_dwStates = FWL_WGTSTATE_Disabled | FWL_WGTSTATE_Invisible;
   prop->m_pParent = this;
-  prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
-  m_pVertScrollBar = std::make_unique<CFWL_ScrollBar>(m_pOwnerApp.Get(),
-                                                      std::move(prop), this);
+  prop->m_pThemeProvider = GetProperties()->m_pThemeProvider;
+  m_pVertScrollBar =
+      std::make_unique<CFWL_ScrollBar>(GetOwnerApp(), std::move(prop), this);
 }
 
 void CFWL_Edit::InitHorizontalScrollBar() {
@@ -891,9 +887,9 @@
   prop->m_dwStyleExes = FWL_STYLEEXT_SCB_Horz;
   prop->m_dwStates = FWL_WGTSTATE_Disabled | FWL_WGTSTATE_Invisible;
   prop->m_pParent = this;
-  prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
-  m_pHorzScrollBar = std::make_unique<CFWL_ScrollBar>(m_pOwnerApp.Get(),
-                                                      std::move(prop), this);
+  prop->m_pThemeProvider = GetProperties()->m_pThemeProvider;
+  m_pHorzScrollBar =
+      std::make_unique<CFWL_ScrollBar>(GetOwnerApp(), std::move(prop), this);
 }
 
 void CFWL_Edit::ShowCaret(CFX_RectF* pRect) {
@@ -906,8 +902,8 @@
   }
 
   CFWL_Widget* pOuter = this;
-  pRect->Offset(m_pProperties->m_WidgetRect.left,
-                m_pProperties->m_WidgetRect.top);
+  pRect->Offset(GetProperties()->m_WidgetRect.left,
+                GetProperties()->m_WidgetRect.top);
   while (pOuter->GetOuter()) {
     pOuter = pOuter->GetOuter();
 
@@ -966,9 +962,9 @@
     return;
 
   m_pCaret = std::make_unique<CFWL_Caret>(
-      m_pOwnerApp.Get(), std::make_unique<CFWL_WidgetProperties>(), this);
+      GetOwnerApp(), std::make_unique<CFWL_WidgetProperties>(), this);
   m_pCaret->SetParent(this);
-  m_pCaret->SetStates(m_pProperties->m_dwStates);
+  m_pCaret->SetStates(GetProperties()->m_dwStates);
   UpdateCursorRect();
 }
 
@@ -1077,13 +1073,13 @@
 void CFWL_Edit::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
   bool bRepaint = false;
   if (bSet) {
-    m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
+    GetProperties()->m_dwStates |= FWL_WGTSTATE_Focused;
 
     UpdateVAlignment();
     UpdateOffset();
     UpdateCaret();
-  } else if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) {
-    m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
+  } else if (GetProperties()->m_dwStates & FWL_WGTSTATE_Focused) {
+    GetProperties()->m_dwStates &= ~FWL_WGTSTATE_Focused;
     HideCaret(nullptr);
 
     if (HasSelection()) {
@@ -1097,13 +1093,13 @@
   if (!bRepaint)
     return;
 
-  CFX_RectF rtInvalidate(0, 0, m_pProperties->m_WidgetRect.width,
-                         m_pProperties->m_WidgetRect.height);
+  CFX_RectF rtInvalidate(0, 0, GetProperties()->m_WidgetRect.width,
+                         GetProperties()->m_WidgetRect.height);
   RepaintRect(rtInvalidate);
 }
 
 void CFWL_Edit::OnLButtonDown(CFWL_MessageMouse* pMsg) {
-  if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)
+  if (GetProperties()->m_dwStates & FWL_WGTSTATE_Disabled)
     return;
 
   m_bLButtonDown = true;
@@ -1212,8 +1208,8 @@
                 : m_pEditEngine->GetIndexAtEndOfLine(m_CursorPosition));
       break;
     case XFA_FWL_VKEY_Delete: {
-      if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) ||
-          (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) {
+      if ((GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) ||
+          (GetProperties()->m_dwStates & FWL_WGTSTATE_Disabled)) {
         break;
       }
 
@@ -1237,8 +1233,8 @@
 }
 
 void CFWL_Edit::OnChar(CFWL_MessageKey* pMsg) {
-  if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) ||
-      (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) {
+  if ((GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) ||
+      (GetProperties()->m_dwStates & FWL_WGTSTATE_Disabled)) {
     return;
   }
 
@@ -1260,7 +1256,7 @@
       SetCursorPosition(m_CursorPosition + 1);
       break;
     case L'\r':
-      if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_WantReturn) {
+      if (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_EDT_WantReturn) {
         m_pEditEngine->Insert(m_CursorPosition, L"\n");
         SetCursorPosition(m_CursorPosition + 1);
       }
diff --git a/xfa/fwl/cfwl_edit.h b/xfa/fwl/cfwl_edit.h
index c991163..8151946 100644
--- a/xfa/fwl/cfwl_edit.h
+++ b/xfa/fwl/cfwl_edit.h
@@ -88,8 +88,6 @@
   bool CanUndo();
   bool CanRedo();
 
-  void SetOuter(CFWL_Widget* pOuter);
-
   // CFDE_TextEditEngine::Delegate
   void NotifyTextFull() override;
   void OnCaretChanged() override;
diff --git a/xfa/fwl/cfwl_listbox.cpp b/xfa/fwl/cfwl_listbox.cpp
index f473a09..51da1b3 100644
--- a/xfa/fwl/cfwl_listbox.cpp
+++ b/xfa/fwl/cfwl_listbox.cpp
@@ -42,10 +42,10 @@
 void CFWL_ListBox::Update() {
   if (IsLocked())
     return;
-  if (!m_pProperties->m_pThemeProvider)
-    m_pProperties->m_pThemeProvider = GetAvailableTheme();
+  if (!GetProperties()->m_pThemeProvider)
+    GetProperties()->m_pThemeProvider = GetAvailableTheme();
 
-  switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_AlignMask) {
+  switch (GetProperties()->m_dwStyleExes & FWL_STYLEEXT_LTB_AlignMask) {
     case FWL_STYLEEXT_LTB_LeftAlign: {
       m_iTTOAligns = FDE_TextAlignment::kCenterLeft;
       break;
@@ -86,7 +86,7 @@
   if (!pGraphics)
     return;
 
-  IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider.Get();
+  IFWL_ThemeProvider* pTheme = GetProperties()->m_pThemeProvider.Get();
   if (!pTheme)
     return;
 
@@ -101,7 +101,7 @@
     rtClip.width -= m_fScorllBarWidth;
 
   pGraphics->SetClipRect(matrix.TransformRect(rtClip));
-  if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_NoBackground) == 0)
+  if ((GetProperties()->m_dwStyles & FWL_WGTSTYLE_NoBackground) == 0)
     DrawBkground(pGraphics, pTheme, &matrix);
 
   DrawItems(pGraphics, pTheme, &matrix);
@@ -110,7 +110,7 @@
 
 void CFWL_ListBox::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) {
   if (pThemeProvider)
-    m_pProperties->m_pThemeProvider = pThemeProvider;
+    GetProperties()->m_pThemeProvider = pThemeProvider;
 }
 
 int32_t CFWL_ListBox::CountSelItems() {
@@ -229,7 +229,7 @@
 }
 
 bool CFWL_ListBox::IsMultiSelection() const {
-  return m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiSelection;
+  return GetProperties()->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiSelection;
 }
 
 bool CFWL_ListBox::IsItemSelected(CFWL_ListItem* pItem) {
@@ -405,12 +405,12 @@
                             const CFX_Matrix* pMatrix) {
   uint32_t dwItemStyles = pItem ? pItem->GetStates() : 0;
   uint32_t dwPartStates = CFWL_PartState_Normal;
-  if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)
+  if (GetProperties()->m_dwStates & FWL_WGTSTATE_Disabled)
     dwPartStates = CFWL_PartState_Disabled;
   else if (dwItemStyles & FWL_ITEMSTATE_LTB_Selected)
     dwPartStates = CFWL_PartState_Selected;
 
-  if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused &&
+  if (GetProperties()->m_dwStates & FWL_WGTSTATE_Focused &&
       dwItemStyles & FWL_ITEMSTATE_LTB_Focused) {
     dwPartStates |= CFWL_PartState_Focused;
   }
@@ -458,13 +458,13 @@
 }
 
 CFX_SizeF CFWL_ListBox::CalcSize(bool bAutoSize) {
-  if (!m_pProperties->m_pThemeProvider)
+  if (!GetProperties()->m_pThemeProvider)
     return CFX_SizeF();
 
   m_ClientRect = GetClientRect();
   m_ContentRect = m_ClientRect;
   CFX_RectF rtUIMargin;
-  if (!m_pOuter) {
+  if (!GetOuter()) {
     CFWL_ThemePart part;
     part.m_pWidget = this;
     IFWL_ThemeProvider* theme = GetAvailableTheme();
@@ -494,7 +494,7 @@
   float iHeight = m_ClientRect.height;
   bool bShowVertScr = false;
   bool bShowHorzScr = false;
-  if (!bShowVertScr && (m_pProperties->m_dwStyles & FWL_WGTSTYLE_VScroll))
+  if (!bShowVertScr && (GetProperties()->m_dwStyles & FWL_WGTSTYLE_VScroll))
     bShowVertScr = (fs.height > iHeight);
 
   CFX_SizeF szRange;
@@ -520,9 +520,9 @@
         pdfium::clamp(m_pVertScrollBar->GetPos(), 0.0f, szRange.height);
     m_pVertScrollBar->SetPos(fPos);
     m_pVertScrollBar->SetTrackPos(fPos);
-    if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_ShowScrollBarFocus) ==
-            0 ||
-        (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused)) {
+    if ((GetProperties()->m_dwStyleExes &
+         FWL_STYLEEXT_LTB_ShowScrollBarFocus) == 0 ||
+        (GetProperties()->m_dwStates & FWL_WGTSTATE_Focused)) {
       m_pVertScrollBar->RemoveStates(FWL_WGTSTATE_Invisible);
     }
     m_pVertScrollBar->Update();
@@ -552,9 +552,9 @@
         pdfium::clamp(m_pHorzScrollBar->GetPos(), 0.0f, szRange.height);
     m_pHorzScrollBar->SetPos(fPos);
     m_pHorzScrollBar->SetTrackPos(fPos);
-    if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_ShowScrollBarFocus) ==
-            0 ||
-        (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused)) {
+    if ((GetProperties()->m_dwStyleExes &
+         FWL_STYLEEXT_LTB_ShowScrollBarFocus) == 0 ||
+        (GetProperties()->m_dwStates & FWL_WGTSTATE_Focused)) {
       m_pHorzScrollBar->RemoveStates(FWL_WGTSTATE_Invisible);
     }
     m_pHorzScrollBar->Update();
@@ -593,7 +593,7 @@
       continue;
 
     CFX_SizeF sz = CalcTextSize(pItem->GetText(),
-                                m_pProperties->m_pThemeProvider.Get(), false);
+                                GetProperties()->m_pThemeProvider.Get(), false);
     fRet = std::max(fRet, sz.width);
   }
   return fRet;
@@ -620,8 +620,8 @@
   prop->m_dwStates = FWL_WGTSTATE_Invisible;
   prop->m_pParent = this;
   prop->m_pThemeProvider = m_pScrollBarTP;
-  m_pVertScrollBar = std::make_unique<CFWL_ScrollBar>(m_pOwnerApp.Get(),
-                                                      std::move(prop), this);
+  m_pVertScrollBar =
+      std::make_unique<CFWL_ScrollBar>(GetOwnerApp(), std::move(prop), this);
 }
 
 void CFWL_ListBox::InitHorizontalScrollBar() {
@@ -633,8 +633,8 @@
   prop->m_dwStates = FWL_WGTSTATE_Invisible;
   prop->m_pParent = this;
   prop->m_pThemeProvider = m_pScrollBarTP;
-  m_pHorzScrollBar = std::make_unique<CFWL_ScrollBar>(m_pOwnerApp.Get(),
-                                                      std::move(prop), this);
+  m_pHorzScrollBar =
+      std::make_unique<CFWL_ScrollBar>(GetOwnerApp(), std::move(prop), this);
 }
 
 bool CFWL_ListBox::IsShowScrollBar(bool bVert) {
@@ -643,9 +643,9 @@
   if (!pScrollbar || !pScrollbar->IsVisible())
     return false;
 
-  return !(m_pProperties->m_dwStyleExes &
+  return !(GetProperties()->m_dwStyleExes &
            FWL_STYLEEXT_LTB_ShowScrollBarFocus) ||
-         (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused);
+         (GetProperties()->m_dwStates & FWL_WGTSTATE_Focused);
 }
 
 void CFWL_ListBox::OnProcessMessage(CFWL_Message* pMessage) {
@@ -728,9 +728,9 @@
     }
   }
   if (bSet)
-    m_pProperties->m_dwStates |= (FWL_WGTSTATE_Focused);
+    GetProperties()->m_dwStates |= (FWL_WGTSTATE_Focused);
   else
-    m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused);
+    GetProperties()->m_dwStates &= ~(FWL_WGTSTATE_Focused);
 
   RepaintRect(m_ClientRect);
 }
@@ -822,8 +822,8 @@
   SetFocusItem(pItem);
   ScrollToVisible(pItem);
 
-  RepaintRect(CFX_RectF(0, 0, m_pProperties->m_WidgetRect.width,
-                        m_pProperties->m_WidgetRect.height));
+  RepaintRect(CFX_RectF(0, 0, GetProperties()->m_WidgetRect.width,
+                        GetProperties()->m_WidgetRect.height));
 }
 
 bool CFWL_ListBox::OnScroll(CFWL_ScrollBar* pScrollBar,
diff --git a/xfa/fwl/cfwl_monthcalendar.cpp b/xfa/fwl/cfwl_monthcalendar.cpp
index c4bdb15..a122f86 100644
--- a/xfa/fwl/cfwl_monthcalendar.cpp
+++ b/xfa/fwl/cfwl_monthcalendar.cpp
@@ -107,8 +107,8 @@
 void CFWL_MonthCalendar::Update() {
   if (IsLocked())
     return;
-  if (!m_pProperties->m_pThemeProvider)
-    m_pProperties->m_pThemeProvider = GetAvailableTheme();
+  if (!GetProperties()->m_pThemeProvider)
+    GetProperties()->m_pThemeProvider = GetAvailableTheme();
 
   GetCapValue();
   if (!m_bInitialized) {
@@ -126,10 +126,10 @@
   if (!pGraphics)
     return;
 
-  if (!m_pProperties->m_pThemeProvider)
-    m_pProperties->m_pThemeProvider = GetAvailableTheme();
+  if (!GetProperties()->m_pThemeProvider)
+    GetProperties()->m_pThemeProvider = GetAvailableTheme();
 
-  IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider.Get();
+  IFWL_ThemeProvider* pTheme = GetProperties()->m_pThemeProvider.Get();
   if (HasBorder())
     DrawBorder(pGraphics, CFWL_Part::Border, pTheme, matrix);
 
@@ -220,7 +220,7 @@
   textParam.m_pGraphics = pGraphics;
   textParam.m_wsText = GetHeadText(m_iCurYear, m_iCurMonth);
   m_HeadSize = CalcTextSize(textParam.m_wsText,
-                            m_pProperties->m_pThemeProvider.Get(), false);
+                            GetProperties()->m_pThemeProvider.Get(), false);
   CalcHeadSize();
   textParam.m_PartRect = m_HeadTextRect;
   textParam.m_dwTTOStyles.single_line_ = true;
@@ -312,7 +312,7 @@
   params.m_wsText = GetTodayText(m_iYear, m_iMonth, m_iDay);
 
   m_TodaySize = CalcTextSize(params.m_wsText,
-                             m_pProperties->m_pThemeProvider.Get(), false);
+                             GetProperties()->m_pThemeProvider.Get(), false);
   CalcTodaySize();
   params.m_PartRect = m_TodayRect;
   params.m_dwTTOStyles.single_line_ = true;
@@ -387,7 +387,7 @@
 }
 
 CFX_SizeF CFWL_MonthCalendar::CalcSize() {
-  IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider.Get();
+  IFWL_ThemeProvider* pTheme = GetProperties()->m_pThemeProvider.Get();
   if (!pTheme)
     return CFX_SizeF();
 
@@ -517,8 +517,8 @@
 }
 
 void CFWL_MonthCalendar::GetCapValue() {
-  if (!m_pProperties->m_pThemeProvider)
-    m_pProperties->m_pThemeProvider = GetAvailableTheme();
+  if (!GetProperties()->m_pThemeProvider)
+    GetProperties()->m_pThemeProvider = GetAvailableTheme();
 }
 
 void CFWL_MonthCalendar::InitDate() {
@@ -764,7 +764,7 @@
     }
     AddSelDay(iCurSel);
     CFWL_DateTimePicker* pDateTime =
-        static_cast<CFWL_DateTimePicker*>(m_pOuter);
+        static_cast<CFWL_DateTimePicker*>(GetOuter());
     pDateTime->ProcessSelChanged(m_iCurYear, m_iCurMonth, iCurSel);
     pDateTime->ShowMonthCalendar(false);
   }
diff --git a/xfa/fwl/cfwl_picturebox.cpp b/xfa/fwl/cfwl_picturebox.cpp
index 353e03f..6746042 100644
--- a/xfa/fwl/cfwl_picturebox.cpp
+++ b/xfa/fwl/cfwl_picturebox.cpp
@@ -20,8 +20,8 @@
 void CFWL_PictureBox::Update() {
   if (IsLocked())
     return;
-  if (!m_pProperties->m_pThemeProvider)
-    m_pProperties->m_pThemeProvider = GetAvailableTheme();
+  if (!GetProperties()->m_pThemeProvider)
+    GetProperties()->m_pThemeProvider = GetAvailableTheme();
 
   m_ClientRect = GetClientRect();
 }
@@ -30,7 +30,7 @@
                                  const CFX_Matrix& matrix) {
   if (!pGraphics)
     return;
-  if (!m_pProperties->m_pThemeProvider)
+  if (!GetProperties()->m_pThemeProvider)
     return;
 
   IFWL_ThemeProvider* pTheme = GetAvailableTheme();
diff --git a/xfa/fwl/cfwl_pushbutton.cpp b/xfa/fwl/cfwl_pushbutton.cpp
index 3f0cce3..2e5c962 100644
--- a/xfa/fwl/cfwl_pushbutton.cpp
+++ b/xfa/fwl/cfwl_pushbutton.cpp
@@ -31,7 +31,7 @@
 
 void CFWL_PushButton::SetStates(uint32_t dwStates) {
   if (dwStates & FWL_WGTSTATE_Disabled) {
-    m_pProperties->m_dwStates = FWL_WGTSTATE_Disabled;
+    GetProperties()->m_dwStates = FWL_WGTSTATE_Disabled;
     return;
   }
   CFWL_Widget::SetStates(dwStates);
@@ -40,8 +40,8 @@
 void CFWL_PushButton::Update() {
   if (IsLocked())
     return;
-  if (!m_pProperties->m_pThemeProvider)
-    m_pProperties->m_pThemeProvider = GetAvailableTheme();
+  if (!GetProperties()->m_pThemeProvider)
+    GetProperties()->m_pThemeProvider = GetAvailableTheme();
 
   m_ClientRect = GetClientRect();
   m_CaptionRect = m_ClientRect;
@@ -52,7 +52,7 @@
   if (!pGraphics)
     return;
 
-  IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider.Get();
+  IFWL_ThemeProvider* pTheme = GetProperties()->m_pThemeProvider.Get();
   if (!pTheme)
     return;
 
@@ -72,20 +72,20 @@
   if (pMatrix)
     param.m_matrix.Concat(*pMatrix);
   param.m_PartRect = m_ClientRect;
-  if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused)
+  if (GetProperties()->m_dwStates & FWL_WGTSTATE_Focused)
     param.m_pRtData = &m_CaptionRect;
   pTheme->DrawBackground(param);
 }
 
 uint32_t CFWL_PushButton::GetPartStates() {
   uint32_t dwStates = CFWL_PartState_Normal;
-  if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused)
+  if (GetProperties()->m_dwStates & FWL_WGTSTATE_Focused)
     dwStates |= CFWL_PartState_Focused;
-  if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)
+  if (GetProperties()->m_dwStates & FWL_WGTSTATE_Disabled)
     dwStates = CFWL_PartState_Disabled;
-  else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Pressed)
+  else if (GetProperties()->m_dwStates & FWL_STATE_PSB_Pressed)
     dwStates |= CFWL_PartState_Pressed;
-  else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Hovered)
+  else if (GetProperties()->m_dwStates & FWL_STATE_PSB_Hovered)
     dwStates |= CFWL_PartState_Hovered;
   return dwStates;
 }
@@ -144,28 +144,28 @@
 
 void CFWL_PushButton::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
   if (bSet)
-    m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
+    GetProperties()->m_dwStates |= FWL_WGTSTATE_Focused;
   else
-    m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
+    GetProperties()->m_dwStates &= ~FWL_WGTSTATE_Focused;
 
   RepaintRect(m_ClientRect);
 }
 
 void CFWL_PushButton::OnLButtonDown(CFWL_MessageMouse* pMsg) {
   m_bBtnDown = true;
-  m_pProperties->m_dwStates |= FWL_STATE_PSB_Hovered;
-  m_pProperties->m_dwStates |= FWL_STATE_PSB_Pressed;
+  GetProperties()->m_dwStates |= FWL_STATE_PSB_Hovered;
+  GetProperties()->m_dwStates |= FWL_STATE_PSB_Pressed;
   RepaintRect(m_ClientRect);
 }
 
 void CFWL_PushButton::OnLButtonUp(CFWL_MessageMouse* pMsg) {
   m_bBtnDown = false;
   if (m_ClientRect.Contains(pMsg->m_pos)) {
-    m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Pressed;
-    m_pProperties->m_dwStates |= FWL_STATE_PSB_Hovered;
+    GetProperties()->m_dwStates &= ~FWL_STATE_PSB_Pressed;
+    GetProperties()->m_dwStates |= FWL_STATE_PSB_Hovered;
   } else {
-    m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Hovered;
-    m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Pressed;
+    GetProperties()->m_dwStates &= ~FWL_STATE_PSB_Hovered;
+    GetProperties()->m_dwStates &= ~FWL_STATE_PSB_Pressed;
   }
   if (m_ClientRect.Contains(pMsg->m_pos)) {
     CFWL_Event wmClick(CFWL_Event::Type::Click, this);
@@ -178,29 +178,29 @@
   bool bRepaint = false;
   if (m_bBtnDown) {
     if (m_ClientRect.Contains(pMsg->m_pos)) {
-      if ((m_pProperties->m_dwStates & FWL_STATE_PSB_Pressed) == 0) {
-        m_pProperties->m_dwStates |= FWL_STATE_PSB_Pressed;
+      if ((GetProperties()->m_dwStates & FWL_STATE_PSB_Pressed) == 0) {
+        GetProperties()->m_dwStates |= FWL_STATE_PSB_Pressed;
         bRepaint = true;
       }
-      if (m_pProperties->m_dwStates & FWL_STATE_PSB_Hovered) {
-        m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Hovered;
+      if (GetProperties()->m_dwStates & FWL_STATE_PSB_Hovered) {
+        GetProperties()->m_dwStates &= ~FWL_STATE_PSB_Hovered;
         bRepaint = true;
       }
     } else {
-      if (m_pProperties->m_dwStates & FWL_STATE_PSB_Pressed) {
-        m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Pressed;
+      if (GetProperties()->m_dwStates & FWL_STATE_PSB_Pressed) {
+        GetProperties()->m_dwStates &= ~FWL_STATE_PSB_Pressed;
         bRepaint = true;
       }
-      if ((m_pProperties->m_dwStates & FWL_STATE_PSB_Hovered) == 0) {
-        m_pProperties->m_dwStates |= FWL_STATE_PSB_Hovered;
+      if ((GetProperties()->m_dwStates & FWL_STATE_PSB_Hovered) == 0) {
+        GetProperties()->m_dwStates |= FWL_STATE_PSB_Hovered;
         bRepaint = true;
       }
     }
   } else {
     if (!m_ClientRect.Contains(pMsg->m_pos))
       return;
-    if ((m_pProperties->m_dwStates & FWL_STATE_PSB_Hovered) == 0) {
-      m_pProperties->m_dwStates |= FWL_STATE_PSB_Hovered;
+    if ((GetProperties()->m_dwStates & FWL_STATE_PSB_Hovered) == 0) {
+      GetProperties()->m_dwStates |= FWL_STATE_PSB_Hovered;
       bRepaint = true;
     }
   }
@@ -210,8 +210,8 @@
 
 void CFWL_PushButton::OnMouseLeave(CFWL_MessageMouse* pMsg) {
   m_bBtnDown = false;
-  m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Hovered;
-  m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Pressed;
+  GetProperties()->m_dwStates &= ~FWL_STATE_PSB_Hovered;
+  GetProperties()->m_dwStates &= ~FWL_STATE_PSB_Pressed;
   RepaintRect(m_ClientRect);
 }
 
diff --git a/xfa/fwl/cfwl_scrollbar.cpp b/xfa/fwl/cfwl_scrollbar.cpp
index a7cfe8a..b550596 100644
--- a/xfa/fwl/cfwl_scrollbar.cpp
+++ b/xfa/fwl/cfwl_scrollbar.cpp
@@ -42,8 +42,8 @@
 void CFWL_ScrollBar::Update() {
   if (IsLocked())
     return;
-  if (!m_pProperties->m_pThemeProvider)
-    m_pProperties->m_pThemeProvider = GetAvailableTheme();
+  if (!GetProperties()->m_pThemeProvider)
+    GetProperties()->m_pThemeProvider = GetAvailableTheme();
 
   Layout();
 }
@@ -52,10 +52,10 @@
                                 const CFX_Matrix& matrix) {
   if (!pGraphics)
     return;
-  if (!m_pProperties->m_pThemeProvider)
+  if (!GetProperties()->m_pThemeProvider)
     return;
 
-  IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider.Get();
+  IFWL_ThemeProvider* pTheme = GetProperties()->m_pThemeProvider.Get();
   if (HasBorder())
     DrawBorder(pGraphics, CFWL_Part::Border, pTheme, matrix);
   DrawTrack(pGraphics, pTheme, true, &matrix);
@@ -85,7 +85,7 @@
   CFWL_ThemeBackground param;
   param.m_pWidget = this;
   param.m_iPart = bLower ? CFWL_Part::LowerTrack : CFWL_Part::UpperTrack;
-  param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)
+  param.m_dwStates = (GetProperties()->m_dwStates & FWL_WGTSTATE_Disabled)
                          ? CFWL_PartState_Disabled
                          : (bLower ? m_iMinTrackState : m_iMaxTrackState);
   param.m_pGraphics = pGraphics;
@@ -101,7 +101,7 @@
   CFWL_ThemeBackground param;
   param.m_pWidget = this;
   param.m_iPart = bMinBtn ? CFWL_Part::ForeArrow : CFWL_Part::BackArrow;
-  param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)
+  param.m_dwStates = (GetProperties()->m_dwStates & FWL_WGTSTATE_Disabled)
                          ? CFWL_PartState_Disabled
                          : (bMinBtn ? m_iMinButtonState : m_iMaxButtonState);
   param.m_pGraphics = pGraphics;
@@ -117,7 +117,7 @@
   CFWL_ThemeBackground param;
   param.m_pWidget = this;
   param.m_iPart = CFWL_Part::Thumb;
-  param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)
+  param.m_dwStates = (GetProperties()->m_dwStates & FWL_WGTSTATE_Disabled)
                          ? CFWL_PartState_Disabled
                          : m_iThumbButtonState;
   param.m_pGraphics = pGraphics;
diff --git a/xfa/fwl/cfwl_scrollbar.h b/xfa/fwl/cfwl_scrollbar.h
index 42569b3..72368cd 100644
--- a/xfa/fwl/cfwl_scrollbar.h
+++ b/xfa/fwl/cfwl_scrollbar.h
@@ -60,7 +60,7 @@
 
  private:
   bool IsVertical() const {
-    return !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_SCB_Vert);
+    return !!(GetProperties()->m_dwStyleExes & FWL_STYLEEXT_SCB_Vert);
   }
   void DrawTrack(CXFA_Graphics* pGraphics,
                  IFWL_ThemeProvider* pTheme,
diff --git a/xfa/fwl/cfwl_widget.h b/xfa/fwl/cfwl_widget.h
index 32e8908..c1111d2 100644
--- a/xfa/fwl/cfwl_widget.h
+++ b/xfa/fwl/cfwl_widget.h
@@ -101,8 +101,10 @@
   bool IsPopup() const;
   bool IsChild() const;
 
+  CFWL_WidgetMgr* GetWidgetMgr() const { return m_pWidgetMgr.Get(); }
   CFWL_Widget* GetOwner() { return m_pWidgetMgr->GetOwnerWidget(this); }
   CFWL_Widget* GetOuter() const { return m_pOuter; }
+  void SetOuter(CFWL_Widget* pOuter) { m_pOuter = pOuter; }
   CFWL_Widget* GetOutmost() const;
 
   void ModifyStyles(uint32_t dwStylesAdded, uint32_t dwStylesRemoved);
@@ -144,6 +146,10 @@
   float GetCYBorderSize() const;
   CFX_RectF GetRelativeRect() const;
   IFWL_ThemeProvider* GetAvailableTheme() const;
+  CFWL_WidgetProperties* GetProperties() { return m_pProperties.get(); }
+  const CFWL_WidgetProperties* GetProperties() const {
+    return m_pProperties.get();
+  }
   CFX_SizeF CalcTextSize(const WideString& wsText,
                          IFWL_ThemeProvider* pTheme,
                          bool bMultiLine);
@@ -161,12 +167,6 @@
                   IFWL_ThemeProvider* pTheme,
                   const CFX_Matrix& pMatrix);
 
-  UnownedPtr<const CFWL_App> const m_pOwnerApp;
-  UnownedPtr<CFWL_WidgetMgr> const m_pWidgetMgr;
-  std::unique_ptr<CFWL_WidgetProperties> m_pProperties;
-  CFWL_Widget* m_pOuter;
-  int32_t m_iLock = 0;
-
  private:
   void LockUpdate() { m_iLock++; }
   void UnlockUpdate() {
@@ -183,7 +183,12 @@
   void NotifyDriver();
   bool IsParent(CFWL_Widget* pParent);
 
+  int32_t m_iLock = 0;
   uint64_t m_nEventKey = 0;
+  UnownedPtr<const CFWL_App> const m_pOwnerApp;
+  UnownedPtr<CFWL_WidgetMgr> const m_pWidgetMgr;
+  std::unique_ptr<CFWL_WidgetProperties> m_pProperties;
+  CFWL_Widget* m_pOuter;
   AdapterIface* m_pAdapterIface = nullptr;
   UnownedPtr<IFWL_WidgetDelegate> m_pDelegate;
 };