IXFA_Widget* CXFA_FFWidgetHandler::CreateWidget(IXFA_Widget* hParent,
                                                XFA_WIDGETTYPE eType,
                                                IXFA_Widget* hBefore) {
  CXFA_Node* pParentFormItem =
      hParent ? static_cast<CXFA_FFWidget*>(hParent)->GetDataAcc()->GetNode()
              : NULL;
  CXFA_Node* pBeforeFormItem =
      hBefore ? static_cast<CXFA_FFWidget*>(hBefore)->GetDataAcc()->GetNode()
              : NULL;
  CXFA_Node* pNewFormItem =
      CreateWidgetFormItem(eType, pParentFormItem, pBeforeFormItem);
  if (pNewFormItem == NULL) {
    return NULL;
  }
  pNewFormItem->GetTemplateNode()->SetFlag(XFA_NODEFLAG_Initialized);
  pNewFormItem->SetFlag(XFA_NODEFLAG_Initialized);
  m_pDocView->RunLayout();
  CXFA_LayoutItem* pLayout =
      m_pDocView->GetXFALayout()->GetLayoutItem(pNewFormItem);
  return (IXFA_Widget*)pLayout;
}