Tidy CPDFSK_Widget::OnAAction()
Introduce a helper method so we don't have to be so deeply nested.
Change-Id: I3c8da18ee1b3ae10f928e8d84f2003b8ff1fb06a
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/79515
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_widget.cpp b/fpdfsdk/cpdfsdk_widget.cpp
index 666bed1..a3a932b 100644
--- a/fpdfsdk/cpdfsdk_widget.cpp
+++ b/fpdfsdk/cpdfsdk_widget.cpp
@@ -296,6 +296,46 @@
context->GetXFADocView()->ProcessValueChanged(node);
}
}
+
+bool CPDFSDK_Widget::HandleXFAAAction(
+ CPDF_AAction::AActionType type,
+ CPDFSDK_FieldAction* data,
+ CPDFSDK_FormFillEnvironment* pFormFillEnv) {
+ auto* pContext =
+ static_cast<CPDFXFA_Context*>(pFormFillEnv->GetDocExtension());
+ if (!pContext)
+ return false;
+
+ CXFA_FFWidget* hWidget = GetMixXFAWidget();
+ if (!hWidget)
+ return false;
+
+ XFA_EVENTTYPE eEventType = GetXFAEventType(type, data->bWillCommit);
+ if (eEventType == XFA_EVENT_Unknown)
+ return false;
+
+ CXFA_FFWidgetHandler* pXFAWidgetHandler = GetXFAWidgetHandler();
+ if (!pXFAWidgetHandler)
+ return false;
+
+ CXFA_EventParam param;
+ param.m_eType = eEventType;
+ param.m_wsChange = data->sChange;
+ param.m_iCommitKey = 0;
+ param.m_bShift = data->bShift;
+ param.m_iSelStart = data->nSelStart;
+ param.m_iSelEnd = data->nSelEnd;
+ param.m_wsFullText = data->sValue;
+ param.m_bKeyDown = data->bKeyDown;
+ param.m_bModifier = data->bModifier;
+ param.m_wsPrevText = data->sValue;
+ bool ret = hWidget->ProcessEventUnderHandler(¶m, pXFAWidgetHandler);
+ CXFA_FFDocView* pDocView = pContext->GetXFADocView();
+ if (pDocView)
+ pDocView->UpdateDocView();
+
+ return ret;
+}
#endif // PDF_ENABLE_XFA
bool CPDFSDK_Widget::IsWidgetAppearanceValid(CPDF_Annot::AppearanceMode mode) {
@@ -783,35 +823,8 @@
CPDFSDK_FormFillEnvironment* pFormFillEnv = pPageView->GetFormFillEnv();
#ifdef PDF_ENABLE_XFA
- auto* pContext =
- static_cast<CPDFXFA_Context*>(pFormFillEnv->GetDocExtension());
- if (pContext) {
- CXFA_FFWidget* hWidget = GetMixXFAWidget();
- if (hWidget) {
- XFA_EVENTTYPE eEventType = GetXFAEventType(type, data->bWillCommit);
- if (eEventType != XFA_EVENT_Unknown) {
- if (CXFA_FFWidgetHandler* pXFAWidgetHandler = GetXFAWidgetHandler()) {
- CXFA_EventParam param;
- param.m_eType = eEventType;
- param.m_wsChange = data->sChange;
- param.m_iCommitKey = 0;
- param.m_bShift = data->bShift;
- param.m_iSelStart = data->nSelStart;
- param.m_iSelEnd = data->nSelEnd;
- param.m_wsFullText = data->sValue;
- param.m_bKeyDown = data->bKeyDown;
- param.m_bModifier = data->bModifier;
- param.m_wsPrevText = data->sValue;
- bool ret =
- hWidget->ProcessEventUnderHandler(¶m, pXFAWidgetHandler);
- if (CXFA_FFDocView* pDocView = pContext->GetXFADocView())
- pDocView->UpdateDocView();
- if (ret)
- return true;
- }
- }
- }
- }
+ if (HandleXFAAAction(type, data, pFormFillEnv))
+ return true;
#endif // PDF_ENABLE_XFA
CPDF_Action action = GetAAction(type);
diff --git a/fpdfsdk/cpdfsdk_widget.h b/fpdfsdk/cpdfsdk_widget.h
index 42c57dd..947004c 100644
--- a/fpdfsdk/cpdfsdk_widget.h
+++ b/fpdfsdk/cpdfsdk_widget.h
@@ -23,6 +23,7 @@
class CPDF_FormControl;
class CPDF_FormField;
class CPDF_RenderOptions;
+class CPDFSDK_FormFillEnvironment;
class CPDFSDK_InteractiveForm;
class CPDFSDK_PageView;
struct CPDFSDK_FieldAction;
@@ -133,6 +134,9 @@
CXFA_FFWidgetHandler* GetXFAWidgetHandler() const;
CXFA_FFWidget* GetGroupMixXFAWidget() const;
WideString GetName() const;
+ bool HandleXFAAAction(CPDF_AAction::AActionType type,
+ CPDFSDK_FieldAction* data,
+ CPDFSDK_FormFillEnvironment* pFormFillEnv);
#endif // PDF_ENABLE_XFA
UnownedPtr<CPDFSDK_InteractiveForm> const m_pInteractiveForm;