Always reset CFFL_InteractiveFormFiller::m_bNotifying. Several methods were already using fxcrt::AutoRestorer<> to reset this value. This CL makes the same technique apply to all of them. In the process, a few redundant clears are removed. Change-Id: Ia467895da4575d97910002bc1b85bc5fa5bcab32 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/85112 Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp index 972f757..d14e60c 100644 --- a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp +++ b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
@@ -103,17 +103,18 @@ if (!m_bNotifying) { CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot->Get()); if (pWidget->GetAAction(CPDF_AAction::kCursorEnter).GetDict()) { - m_bNotifying = true; - uint32_t nValueAge = pWidget->GetValueAge(); pWidget->ClearAppModified(); DCHECK(pPageView); + { + AutoRestorer<bool> restorer(&m_bNotifying); + m_bNotifying = true; - CFFL_FieldAction fa; - fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); - fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); - pWidget->OnAAction(CPDF_AAction::kCursorEnter, &fa, pPageView); - m_bNotifying = false; + CFFL_FieldAction fa; + fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); + fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); + pWidget->OnAAction(CPDF_AAction::kCursorEnter, &fa, pPageView); + } if (!pAnnot->HasObservable()) return; @@ -136,17 +137,18 @@ if (!m_bNotifying) { CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot->Get()); if (pWidget->GetAAction(CPDF_AAction::kCursorExit).GetDict()) { - m_bNotifying = true; - uint32_t nValueAge = pWidget->GetValueAge(); pWidget->ClearAppModified(); DCHECK(pPageView); + { + AutoRestorer<bool> restorer(&m_bNotifying); + m_bNotifying = true; - CFFL_FieldAction fa; - fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); - fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); - pWidget->OnAAction(CPDF_AAction::kCursorExit, &fa, pPageView); - m_bNotifying = false; + CFFL_FieldAction fa; + fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); + fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); + pWidget->OnAAction(CPDF_AAction::kCursorExit, &fa, pPageView); + } if (!pAnnot->HasObservable()) return; @@ -172,17 +174,18 @@ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot->Get()); if (Annot_HitTest(pAnnot->Get(), point) && pWidget->GetAAction(CPDF_AAction::kButtonDown).GetDict()) { - m_bNotifying = true; - uint32_t nValueAge = pWidget->GetValueAge(); pWidget->ClearAppModified(); DCHECK(pPageView); + { + AutoRestorer<bool> restorer(&m_bNotifying); + m_bNotifying = true; - CFFL_FieldAction fa; - fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlags); - fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlags); - pWidget->OnAAction(CPDF_AAction::kButtonDown, &fa, pPageView); - m_bNotifying = false; + CFFL_FieldAction fa; + fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlags); + fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlags); + pWidget->OnAAction(CPDF_AAction::kButtonDown, &fa, pPageView); + } if (!pAnnot->HasObservable()) return true; @@ -250,17 +253,18 @@ if (!pWidget->GetAAction(CPDF_AAction::kButtonUp).GetDict()) return false; - m_bNotifying = true; - uint32_t nAge = pWidget->GetAppearanceAge(); uint32_t nValueAge = pWidget->GetValueAge(); DCHECK(pPageView); + { + AutoRestorer<bool> restorer(&m_bNotifying); + m_bNotifying = true; - CFFL_FieldAction fa; - fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); - fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); - pWidget->OnAAction(CPDF_AAction::kButtonUp, &fa, pPageView); - m_bNotifying = false; + CFFL_FieldAction fa; + fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); + fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); + pWidget->OnAAction(CPDF_AAction::kButtonUp, &fa, pPageView); + } if (!pAnnot->HasObservable() || !IsValidAnnot(pPageView, pWidget)) return true; if (nAge == pWidget->GetAppearanceAge()) @@ -378,8 +382,6 @@ if (!m_bNotifying) { CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot->Get()); if (pWidget->GetAAction(CPDF_AAction::kGetFocus).GetDict()) { - m_bNotifying = true; - uint32_t nValueAge = pWidget->GetValueAge(); pWidget->ClearAppModified(); @@ -389,13 +391,16 @@ CPDFSDK_PageView* pPageView = (*pAnnot)->GetPageView(); DCHECK(pPageView); + { + AutoRestorer<bool> restorer(&m_bNotifying); + m_bNotifying = true; - CFFL_FieldAction fa; - fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); - fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); - pFormField->GetActionData(pPageView, CPDF_AAction::kGetFocus, fa); - pWidget->OnAAction(CPDF_AAction::kGetFocus, &fa, pPageView); - m_bNotifying = false; + CFFL_FieldAction fa; + fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); + fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); + pFormField->GetActionData(pPageView, CPDF_AAction::kGetFocus, fa); + pWidget->OnAAction(CPDF_AAction::kGetFocus, &fa, pPageView); + } if (!pAnnot->HasObservable()) return false; @@ -435,18 +440,20 @@ if (!pWidget->GetAAction(CPDF_AAction::kLoseFocus).GetDict()) return true; - m_bNotifying = true; pWidget->ClearAppModified(); CPDFSDK_PageView* pPageView = pWidget->GetPageView(); DCHECK(pPageView); + { + AutoRestorer<bool> restorer(&m_bNotifying); + m_bNotifying = true; - CFFL_FieldAction fa; - fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); - fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); - pFormField->GetActionData(pPageView, CPDF_AAction::kLoseFocus, fa); - pWidget->OnAAction(CPDF_AAction::kLoseFocus, &fa, pPageView); - m_bNotifying = false; + CFFL_FieldAction fa; + fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); + fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); + pFormField->GetActionData(pPageView, CPDF_AAction::kLoseFocus, fa); + pWidget->OnAAction(CPDF_AAction::kLoseFocus, &fa, pPageView); + } return pAnnot->HasObservable(); } @@ -646,9 +653,11 @@ return true; DCHECK(pPageView); - m_bNotifying = true; pWidget->ClearAppModified(); + AutoRestorer<bool> restorer(&m_bNotifying); + m_bNotifying = true; + CFFL_FieldAction fa; fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); @@ -660,10 +669,10 @@ pFormField->GetActionData(pPageView, CPDF_AAction::kKeyStroke, fa); pFormField->SavePWLWindowState(pPageView); pWidget->OnAAction(CPDF_AAction::kKeyStroke, &fa, pPageView); + if (!pAnnot->HasObservable()) return true; - m_bNotifying = false; return fa.bRC; } @@ -678,9 +687,11 @@ return true; DCHECK(pPageView); - m_bNotifying = true; pWidget->ClearAppModified(); + AutoRestorer<bool> restorer(&m_bNotifying); + m_bNotifying = true; + CFFL_FieldAction fa; fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); @@ -691,10 +702,10 @@ pFormField->GetActionData(pPageView, CPDF_AAction::kValidate, fa); pFormField->SavePWLWindowState(pPageView); pWidget->OnAAction(CPDF_AAction::kValidate, &fa, pPageView); + if (!pAnnot->HasObservable()) return true; - m_bNotifying = false; return fa.bRC; } @@ -704,7 +715,6 @@ return; m_pCallbackIface->OnCalculate(pAnnot); - m_bNotifying = false; } void CFFL_InteractiveFormFiller::OnFormat(ObservedPtr<CPDFSDK_Annot>* pAnnot) { @@ -712,7 +722,6 @@ return; m_pCallbackIface->OnFormat(pAnnot); - m_bNotifying = false; } #ifdef PDF_ENABLE_XFA @@ -726,16 +735,18 @@ if (!pWidget->HasXFAAAction(PDFSDK_XFA_Click)) return false; - m_bNotifying = true; uint32_t nAge = pWidget->GetAppearanceAge(); uint32_t nValueAge = pWidget->GetValueAge(); + { + AutoRestorer<bool> restorer(&m_bNotifying); + m_bNotifying = true; - CFFL_FieldAction fa; - fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); - fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); + CFFL_FieldAction fa; + fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); + fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); - pWidget->OnXFAAAction(PDFSDK_XFA_Click, &fa, pPageView); - m_bNotifying = false; + pWidget->OnXFAAAction(PDFSDK_XFA_Click, &fa, pPageView); + } if (!pAnnot->HasObservable() || !IsValidAnnot(pPageView, pWidget)) return true; if (nAge == pWidget->GetAppearanceAge()) @@ -757,16 +768,17 @@ if (!pWidget->HasXFAAAction(PDFSDK_XFA_Full)) return false; - m_bNotifying = true; uint32_t nAge = pWidget->GetAppearanceAge(); uint32_t nValueAge = pWidget->GetValueAge(); + { + AutoRestorer<bool> restorer(&m_bNotifying); + m_bNotifying = true; - CFFL_FieldAction fa; - fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); - fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); - - pWidget->OnXFAAAction(PDFSDK_XFA_Full, &fa, pPageView); - m_bNotifying = false; + CFFL_FieldAction fa; + fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); + fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); + pWidget->OnXFAAAction(PDFSDK_XFA_Full, &fa, pPageView); + } if (!pAnnot->HasObservable() || !IsValidAnnot(pPageView, pWidget)) return true; if (nAge == pWidget->GetAppearanceAge()) @@ -788,16 +800,17 @@ if (!pWidget->HasXFAAAction(PDFSDK_XFA_PreOpen)) return false; - m_bNotifying = true; uint32_t nAge = pWidget->GetAppearanceAge(); uint32_t nValueAge = pWidget->GetValueAge(); + { + AutoRestorer<bool> restorer(&m_bNotifying); + m_bNotifying = true; - CFFL_FieldAction fa; - fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); - fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); - - pWidget->OnXFAAAction(PDFSDK_XFA_PreOpen, &fa, pPageView); - m_bNotifying = false; + CFFL_FieldAction fa; + fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); + fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); + pWidget->OnXFAAAction(PDFSDK_XFA_PreOpen, &fa, pPageView); + } if (!pAnnot->HasObservable() || !IsValidAnnot(pPageView, pWidget)) return true; if (nAge == pWidget->GetAppearanceAge()) @@ -819,16 +832,17 @@ if (!pWidget->HasXFAAAction(PDFSDK_XFA_PostOpen)) return false; - m_bNotifying = true; uint32_t nAge = pWidget->GetAppearanceAge(); uint32_t nValueAge = pWidget->GetValueAge(); + { + AutoRestorer<bool> restorer(&m_bNotifying); + m_bNotifying = true; - CFFL_FieldAction fa; - fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); - fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); - - pWidget->OnXFAAAction(PDFSDK_XFA_PostOpen, &fa, pPageView); - m_bNotifying = false; + CFFL_FieldAction fa; + fa.bModifier = CPWL_Wnd::IsCTRLKeyDown(nFlag); + fa.bShift = CPWL_Wnd::IsSHIFTKeyDown(nFlag); + pWidget->OnXFAAAction(PDFSDK_XFA_PostOpen, &fa, pPageView); + } if (!pAnnot->HasObservable() || !IsValidAnnot(pPageView, pWidget)) return true;