Remove CPDFSDK_AnnotHandlerMgr::Annot_OnChangeFocus().
Remove this method, CPDFSDK_AnnotHandlerMgr::Annot_OnChangeFocus(), and
CPDFXFA_WidgetHandler::OnXFAChangedFocus(). Instead, move the code to
CPDFXFA_Widget::OnChangedFocus(), simplify it, and call that directly.
Change-Id: I456c152565c1ce9285c75f3fa9fe5d3029f4b60d
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/92210
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_annothandlermgr.cpp b/fpdfsdk/cpdfsdk_annothandlermgr.cpp
index 421dcc0..7036a48 100644
--- a/fpdfsdk/cpdfsdk_annothandlermgr.cpp
+++ b/fpdfsdk/cpdfsdk_annothandlermgr.cpp
@@ -220,15 +220,6 @@
return GetAnnotHandler(pAnnot.Get())->IsIndexSelected(pAnnot, index);
}
-#ifdef PDF_ENABLE_XFA
-bool CPDFSDK_AnnotHandlerMgr::Annot_OnChangeFocus(
- ObservedPtr<CPDFSDK_Annot>& pSetAnnot) {
- CPDFXFA_Widget* pSetXFAWidget = ToXFAWidget(pSetAnnot.Get());
- const bool bXFA = pSetXFAWidget && pSetXFAWidget->GetXFAFFWidget();
- return !bXFA || m_pXFAWidgetHandler->OnXFAChangedFocus(pSetAnnot);
-}
-#endif // PDF_ENABLE_XFA
-
CFX_FloatRect CPDFSDK_AnnotHandlerMgr::Annot_OnGetViewBBox(
CPDFSDK_Annot* pAnnot) {
DCHECK(pAnnot);
diff --git a/fpdfsdk/cpdfsdk_annothandlermgr.h b/fpdfsdk/cpdfsdk_annothandlermgr.h
index c261c98..b6625f1 100644
--- a/fpdfsdk/cpdfsdk_annothandlermgr.h
+++ b/fpdfsdk/cpdfsdk_annothandlermgr.h
@@ -92,10 +92,6 @@
bool selected);
bool Annot_IsIndexSelected(ObservedPtr<CPDFSDK_Annot>& pAnnot, int index);
-#ifdef PDF_ENABLE_XFA
- bool Annot_OnChangeFocus(ObservedPtr<CPDFSDK_Annot>& pSetAnnot);
-#endif // PDF_ENABLE_XFA
-
CFX_FloatRect Annot_OnGetViewBBox(CPDFSDK_Annot* pAnnot);
bool Annot_OnHitTest(CPDFSDK_Annot* pAnnot, const CFX_PointF& point);
diff --git a/fpdfsdk/cpdfsdk_baannothandler.cpp b/fpdfsdk/cpdfsdk_baannothandler.cpp
index 753d532..8290da4 100644
--- a/fpdfsdk/cpdfsdk_baannothandler.cpp
+++ b/fpdfsdk/cpdfsdk_baannothandler.cpp
@@ -22,7 +22,6 @@
#include "public/fpdf_fwlevent.h"
#include "third_party/base/check.h"
#include "third_party/base/containers/contains.h"
-#include "third_party/base/notreached.h"
namespace {
@@ -276,11 +275,3 @@
DCHECK(pAnnot);
return GetViewBBox(pAnnot).Contains(point);
}
-
-#ifdef PDF_ENABLE_XFA
-bool CPDFSDK_BAAnnotHandler::OnXFAChangedFocus(
- ObservedPtr<CPDFSDK_Annot>& pNewAnnot) {
- NOTREACHED();
- return false;
-}
-#endif
diff --git a/fpdfsdk/cpdfsdk_baannothandler.h b/fpdfsdk/cpdfsdk_baannothandler.h
index f0e5630..4afce70 100644
--- a/fpdfsdk/cpdfsdk_baannothandler.h
+++ b/fpdfsdk/cpdfsdk_baannothandler.h
@@ -90,10 +90,6 @@
bool selected) override;
bool IsIndexSelected(ObservedPtr<CPDFSDK_Annot>& pAnnot, int index) override;
-#ifdef PDF_ENABLE_XFA
- bool OnXFAChangedFocus(ObservedPtr<CPDFSDK_Annot>& pNewAnnot) override;
-#endif // PDF_ENABLE_XFA
-
private:
void InvalidateRect(CPDFSDK_Annot* annot);
bool IsFocusableAnnot(const CPDF_Annot::Subtype& annot_type) const;
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
index 5f6aec8..9bae35c 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
@@ -29,6 +29,10 @@
#include "third_party/base/check.h"
#include "third_party/base/numerics/safe_conversions.h"
+#ifdef PDF_ENABLE_XFA
+#include "fpdfsdk/fpdfxfa/cpdfxfa_widget.h"
+#endif
+
static_assert(FXCT_ARROW ==
static_cast<int>(IPWL_SystemHandler::CursorStyle::kArrow),
"kArrow value mismatch");
@@ -758,19 +762,20 @@
if (!pAnnot->GetPageView()->IsValid())
return false;
- CPDFSDK_AnnotHandlerMgr* pAnnotHandler = GetAnnotHandlerMgr();
if (m_pFocusAnnot)
return false;
#ifdef PDF_ENABLE_XFA
- if (!pAnnotHandler->Annot_OnChangeFocus(pAnnot))
+ CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot.Get());
+ if (pXFAWidget && pXFAWidget->OnChangedFocus())
return false;
- // |pAnnot| may be destroyed in |Annot_OnChangeFocus|.
+ // `pAnnot` may be destroyed in `OnChangedFocus()`.
if (!pAnnot)
return false;
#endif // PDF_ENABLE_XFA
+ CPDFSDK_AnnotHandlerMgr* pAnnotHandler = GetAnnotHandlerMgr();
if (!pAnnotHandler->Annot_OnSetFocus(pAnnot, {}))
return false;
if (m_pFocusAnnot)
diff --git a/fpdfsdk/cpdfsdk_widgethandler.cpp b/fpdfsdk/cpdfsdk_widgethandler.cpp
index 24a2698..711f2a8 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.cpp
+++ b/fpdfsdk/cpdfsdk_widgethandler.cpp
@@ -23,7 +23,6 @@
#include "third_party/base/check.h"
#include "third_party/base/check_op.h"
#include "third_party/base/containers/contains.h"
-#include "third_party/base/notreached.h"
CPDFSDK_WidgetHandler::CPDFSDK_WidgetHandler() = default;
@@ -313,11 +312,3 @@
return pdfium::Contains(GetFormFillEnvironment()->GetFocusableAnnotSubtypes(),
annot_type);
}
-
-#ifdef PDF_ENABLE_XFA
-bool CPDFSDK_WidgetHandler::OnXFAChangedFocus(
- ObservedPtr<CPDFSDK_Annot>& pNewAnnot) {
- NOTREACHED();
- return false;
-}
-#endif
diff --git a/fpdfsdk/cpdfsdk_widgethandler.h b/fpdfsdk/cpdfsdk_widgethandler.h
index b37cc56..47fdc21 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.h
+++ b/fpdfsdk/cpdfsdk_widgethandler.h
@@ -89,10 +89,6 @@
bool selected) override;
bool IsIndexSelected(ObservedPtr<CPDFSDK_Annot>& pAnnot, int index) override;
-#ifdef PDF_ENABLE_XFA
- bool OnXFAChangedFocus(ObservedPtr<CPDFSDK_Annot>& pNewAnnot) override;
-#endif
-
private:
bool IsFocusableAnnot(const CPDF_Annot::Subtype& annot_type) const;
};
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widget.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_widget.cpp
index 386dcba..2c9c665 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_widget.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widget.cpp
@@ -7,6 +7,8 @@
#include "fpdfsdk/fpdfxfa/cpdfxfa_widget.h"
#include "fpdfsdk/ipdfsdk_annothandler.h"
+#include "xfa/fxfa/cxfa_ffdocview.h"
+#include "xfa/fxfa/cxfa_ffpageview.h"
#include "xfa/fxfa/cxfa_ffwidget.h"
CPDFXFA_Widget::CPDFXFA_Widget(CXFA_FFWidget* pXFAFFWidget,
@@ -26,3 +28,19 @@
CFX_FloatRect CPDFXFA_Widget::GetRect() const {
return GetXFAFFWidget()->GetLayoutItem()->GetAbsoluteRect().ToFloatRect();
}
+
+bool CPDFXFA_Widget::OnChangedFocus() {
+ CXFA_FFWidget* widget = GetXFAFFWidget();
+ CXFA_FFPageView* page_view = widget->GetPageView();
+ if (!page_view)
+ return false;
+
+ CXFA_FFDocView* doc_view = page_view->GetDocView();
+ if (!doc_view)
+ return false;
+
+ if (doc_view->SetFocus(widget))
+ return false;
+
+ return doc_view->GetFocusWidget() != widget;
+}
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widget.h b/fpdfsdk/fpdfxfa/cpdfxfa_widget.h
index dd11990..d20ef24 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_widget.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widget.h
@@ -26,6 +26,8 @@
CXFA_FFWidget* GetXFAFFWidget() const { return m_pXFAFFWidget.Get(); }
+ bool OnChangedFocus();
+
private:
cppgc::Persistent<CXFA_FFWidget> const m_pXFAFFWidget;
};
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
index 69a31a6..83854d0 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
@@ -449,29 +449,6 @@
return true;
}
-bool CPDFXFA_WidgetHandler::OnXFAChangedFocus(
- ObservedPtr<CPDFSDK_Annot>& pNewAnnot) {
- if (!pNewAnnot || !GetXFAFFWidgetHandler())
- return true;
-
- CPDFXFA_Widget* pNewXFAWidget = ToXFAWidget(pNewAnnot.Get());
- if (!pNewXFAWidget)
- return true;
-
- CXFA_FFWidget* hWidget = pNewXFAWidget->GetXFAFFWidget();
- if (!hWidget)
- return true;
-
- CXFA_FFPageView* pXFAPageView = hWidget->GetPageView();
- if (!pXFAPageView)
- return true;
-
- if (pXFAPageView->GetDocView()->SetFocus(hWidget))
- return true;
-
- return pXFAPageView->GetDocView()->GetFocusWidget() == hWidget;
-}
-
bool CPDFXFA_WidgetHandler::SetIndexSelected(ObservedPtr<CPDFSDK_Annot>& pAnnot,
int index,
bool selected) {
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h
index 080293c..c8920b5 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h
@@ -91,7 +91,6 @@
int index,
bool selected) override;
bool IsIndexSelected(ObservedPtr<CPDFSDK_Annot>& pAnnot, int index) override;
- bool OnXFAChangedFocus(ObservedPtr<CPDFSDK_Annot>& pNewAnnot) override;
private:
CXFA_FFWidgetHandler* GetXFAFFWidgetHandler();
diff --git a/fpdfsdk/ipdfsdk_annothandler.cpp b/fpdfsdk/ipdfsdk_annothandler.cpp
index 24921c1..3662fbe 100644
--- a/fpdfsdk/ipdfsdk_annothandler.cpp
+++ b/fpdfsdk/ipdfsdk_annothandler.cpp
@@ -6,16 +6,6 @@
#include "fpdfsdk/ipdfsdk_annothandler.h"
-#include "third_party/base/notreached.h"
-
IPDFSDK_AnnotHandler::IPDFSDK_AnnotHandler() = default;
IPDFSDK_AnnotHandler::~IPDFSDK_AnnotHandler() = default;
-
-#ifdef PDF_ENABLE_XFA
-bool IPDFSDK_AnnotHandler::OnXFAChangedFocus(
- ObservedPtr<CPDFSDK_Annot>& pNewAnnot) {
- NOTREACHED();
- return false;
-}
-#endif
diff --git a/fpdfsdk/ipdfsdk_annothandler.h b/fpdfsdk/ipdfsdk_annothandler.h
index 8dbc30a..12e6c69 100644
--- a/fpdfsdk/ipdfsdk_annothandler.h
+++ b/fpdfsdk/ipdfsdk_annothandler.h
@@ -103,10 +103,6 @@
virtual bool IsIndexSelected(ObservedPtr<CPDFSDK_Annot>& pAnnot,
int index) = 0;
-#ifdef PDF_ENABLE_XFA
- virtual bool OnXFAChangedFocus(ObservedPtr<CPDFSDK_Annot>& pNewAnnot);
-#endif // PDF_ENABLE_XFA
-
private:
UnownedPtr<CPDFSDK_FormFillEnvironment> m_pFormFillEnv;
};