| Index: fpdfsdk/src/formfiller/FFL_IFormFiller.cpp | 
| diff --git a/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp b/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp | 
| index b820d7fa0d0cd2b33f60032b12b846890e11014c..3257faae681cac63cf29b8ab317fb16c6a0d1b1a 100644 | 
| --- a/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp | 
| +++ b/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp | 
| @@ -277,6 +277,12 @@ FX_BOOL CFFL_IFormFiller::OnLButtonUp(CPDFSDK_PageView* pPageView, | 
| OnButtonUp(pWidget, pPageView, bReset, bExit, nFlags); | 
| if (bExit) | 
| return TRUE; | 
| +#ifdef PDF_ENABLE_XFA | 
| + | 
| +    OnClick(pWidget, pPageView, bReset, bExit, nFlags); | 
| +    if (bExit) | 
| +      return TRUE; | 
| +#endif | 
| } | 
| return bRet; | 
| } | 
| @@ -792,6 +798,190 @@ void CFFL_IFormFiller::OnFormat(CPDFSDK_Widget* pWidget, | 
| } | 
| } | 
|  | 
| +#ifdef PDF_ENABLE_XFA | 
| +void CFFL_IFormFiller::OnClick(CPDFSDK_Widget* pWidget, | 
| +                               CPDFSDK_PageView* pPageView, | 
| +                               FX_BOOL& bReset, | 
| +                               FX_BOOL& bExit, | 
| +                               FX_UINT nFlag) { | 
| +  ASSERT(pWidget != NULL); | 
| + | 
| +  if (!m_bNotifying) { | 
| +    if (pWidget->HasXFAAAction(PDFSDK_XFA_Click)) { | 
| +      m_bNotifying = TRUE; | 
| +      int nAge = pWidget->GetAppearanceAge(); | 
| +      int nValueAge = pWidget->GetValueAge(); | 
| + | 
| +      PDFSDK_FieldAction fa; | 
| +      fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); | 
| +      fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); | 
| + | 
| +      pWidget->OnXFAAAction(PDFSDK_XFA_Click, fa, pPageView); | 
| +      m_bNotifying = FALSE; | 
| + | 
| +      if (!IsValidAnnot(pPageView, pWidget)) { | 
| +        bExit = TRUE; | 
| +        return; | 
| +      } | 
| + | 
| +      if (nAge != pWidget->GetAppearanceAge()) { | 
| +        if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) { | 
| +          pFormFiller->ResetPDFWindow(pPageView, | 
| +                                      nValueAge == pWidget->GetValueAge()); | 
| +        } | 
| + | 
| +        bReset = TRUE; | 
| +      } | 
| +    } | 
| +  } | 
| +} | 
| + | 
| +void CFFL_IFormFiller::OnFull(CPDFSDK_Widget* pWidget, | 
| +                              CPDFSDK_PageView* pPageView, | 
| +                              FX_BOOL& bReset, | 
| +                              FX_BOOL& bExit, | 
| +                              FX_UINT nFlag) { | 
| +  ASSERT(pWidget != NULL); | 
| + | 
| +  if (!m_bNotifying) { | 
| +    if (pWidget->HasXFAAAction(PDFSDK_XFA_Full)) { | 
| +      m_bNotifying = TRUE; | 
| +      int nAge = pWidget->GetAppearanceAge(); | 
| +      int nValueAge = pWidget->GetValueAge(); | 
| + | 
| +      PDFSDK_FieldAction fa; | 
| +      fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); | 
| +      fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); | 
| + | 
| +      pWidget->OnXFAAAction(PDFSDK_XFA_Full, fa, pPageView); | 
| +      m_bNotifying = FALSE; | 
| + | 
| +      if (!IsValidAnnot(pPageView, pWidget)) { | 
| +        bExit = TRUE; | 
| +        return; | 
| +      } | 
| + | 
| +      if (nAge != pWidget->GetAppearanceAge()) { | 
| +        if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) { | 
| +          pFormFiller->ResetPDFWindow(pPageView, | 
| +                                      nValueAge == pWidget->GetValueAge()); | 
| +        } | 
| + | 
| +        bReset = TRUE; | 
| +      } | 
| +    } | 
| +  } | 
| +} | 
| + | 
| +void CFFL_IFormFiller::OnPopupPreOpen(void* pPrivateData, | 
| +                                      FX_BOOL& bExit, | 
| +                                      FX_DWORD nFlag) { | 
| +  ASSERT(pPrivateData != NULL); | 
| +  CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; | 
| +  ASSERT(pData->pWidget != NULL); | 
| + | 
| +  FX_BOOL bTempReset = FALSE; | 
| +  FX_BOOL bTempExit = FALSE; | 
| +  this->OnPreOpen(pData->pWidget, pData->pPageView, bTempReset, bTempExit, | 
| +                  nFlag); | 
| + | 
| +  if (bTempReset || bTempExit) { | 
| +    bExit = TRUE; | 
| +  } | 
| +} | 
| + | 
| +void CFFL_IFormFiller::OnPopupPostOpen(void* pPrivateData, | 
| +                                       FX_BOOL& bExit, | 
| +                                       FX_DWORD nFlag) { | 
| +  ASSERT(pPrivateData != NULL); | 
| +  CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; | 
| +  ASSERT(pData->pWidget != NULL); | 
| + | 
| +  FX_BOOL bTempReset = FALSE; | 
| +  FX_BOOL bTempExit = FALSE; | 
| +  this->OnPostOpen(pData->pWidget, pData->pPageView, bTempReset, bTempExit, | 
| +                   nFlag); | 
| + | 
| +  if (bTempReset || bTempExit) { | 
| +    bExit = TRUE; | 
| +  } | 
| +} | 
| + | 
| +void CFFL_IFormFiller::OnPreOpen(CPDFSDK_Widget* pWidget, | 
| +                                 CPDFSDK_PageView* pPageView, | 
| +                                 FX_BOOL& bReset, | 
| +                                 FX_BOOL& bExit, | 
| +                                 FX_UINT nFlag) { | 
| +  ASSERT(pWidget != NULL); | 
| + | 
| +  if (!m_bNotifying) { | 
| +    if (pWidget->HasXFAAAction(PDFSDK_XFA_PreOpen)) { | 
| +      m_bNotifying = TRUE; | 
| +      int nAge = pWidget->GetAppearanceAge(); | 
| +      int nValueAge = pWidget->GetValueAge(); | 
| + | 
| +      PDFSDK_FieldAction fa; | 
| +      fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); | 
| +      fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); | 
| + | 
| +      pWidget->OnXFAAAction(PDFSDK_XFA_PreOpen, fa, pPageView); | 
| +      m_bNotifying = FALSE; | 
| + | 
| +      if (!IsValidAnnot(pPageView, pWidget)) { | 
| +        bExit = TRUE; | 
| +        return; | 
| +      } | 
| + | 
| +      if (nAge != pWidget->GetAppearanceAge()) { | 
| +        if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) { | 
| +          pFormFiller->ResetPDFWindow(pPageView, | 
| +                                      nValueAge == pWidget->GetValueAge()); | 
| +        } | 
| + | 
| +        bReset = TRUE; | 
| +      } | 
| +    } | 
| +  } | 
| +} | 
| + | 
| +void CFFL_IFormFiller::OnPostOpen(CPDFSDK_Widget* pWidget, | 
| +                                  CPDFSDK_PageView* pPageView, | 
| +                                  FX_BOOL& bReset, | 
| +                                  FX_BOOL& bExit, | 
| +                                  FX_UINT nFlag) { | 
| +  ASSERT(pWidget != NULL); | 
| + | 
| +  if (!m_bNotifying) { | 
| +    if (pWidget->HasXFAAAction(PDFSDK_XFA_PostOpen)) { | 
| +      m_bNotifying = TRUE; | 
| +      int nAge = pWidget->GetAppearanceAge(); | 
| +      int nValueAge = pWidget->GetValueAge(); | 
| + | 
| +      PDFSDK_FieldAction fa; | 
| +      fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); | 
| +      fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); | 
| + | 
| +      pWidget->OnXFAAAction(PDFSDK_XFA_PostOpen, fa, pPageView); | 
| +      m_bNotifying = FALSE; | 
| + | 
| +      if (!IsValidAnnot(pPageView, pWidget)) { | 
| +        bExit = TRUE; | 
| +        return; | 
| +      } | 
| + | 
| +      if (nAge != pWidget->GetAppearanceAge()) { | 
| +        if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) { | 
| +          pFormFiller->ResetPDFWindow(pPageView, | 
| +                                      nValueAge == pWidget->GetValueAge()); | 
| +        } | 
| + | 
| +        bReset = TRUE; | 
| +      } | 
| +    } | 
| +  } | 
| +} | 
| + | 
| +#endif | 
| FX_BOOL CFFL_IFormFiller::IsValidAnnot(CPDFSDK_PageView* pPageView, | 
| CPDFSDK_Annot* pAnnot) { | 
| if (pPageView) | 
| @@ -816,6 +1006,19 @@ void CFFL_IFormFiller::OnBeforeKeyStroke(void* pPrivateData, | 
| CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE); | 
| ASSERT(pFormFiller != NULL); | 
|  | 
| +#ifdef PDF_ENABLE_XFA | 
| +  if (pFormFiller->IsFieldFull(pData->pPageView)) { | 
| +    FX_BOOL bFullExit = FALSE; | 
| +    FX_BOOL bFullReset = FALSE; | 
| +    OnFull(pData->pWidget, pData->pPageView, bFullReset, bFullExit, nFlag); | 
| + | 
| +    if (bFullReset || bFullExit) { | 
| +      bExit = TRUE; | 
| +      return; | 
| +    } | 
| +  } | 
| + | 
| +#endif | 
| if (!m_bNotifying) { | 
| if (pData->pWidget->GetAAction(CPDF_AAction::KeyStroke)) { | 
| m_bNotifying = TRUE; | 
|  |