| Index: fpdfsdk/fsdk_baseform.cpp
|
| diff --git a/fpdfsdk/fsdk_baseform.cpp b/fpdfsdk/fsdk_baseform.cpp
|
| index afbd95870d3f62b5ed0842ca6e7a99abda1fc4fa..dbaa06011d54cee8f8fddbae005bde422ba4ffa8 100644
|
| --- a/fpdfsdk/fsdk_baseform.cpp
|
| +++ b/fpdfsdk/fsdk_baseform.cpp
|
| @@ -26,6 +26,7 @@
|
| #include "fpdfsdk/javascript/ijs_context.h"
|
| #include "fpdfsdk/javascript/ijs_runtime.h"
|
| #include "fpdfsdk/pdfwindow/PWL_Utils.h"
|
| +#include "third_party/base/stl_util.h"
|
|
|
| #ifdef PDF_ENABLE_XFA
|
| #include "fpdfsdk/fpdfxfa/include/fpdfxfa_doc.h"
|
| @@ -47,6 +48,22 @@ PDFSDK_FieldAction::PDFSDK_FieldAction()
|
| bFieldFull(FALSE),
|
| bRC(TRUE) {}
|
|
|
| +CPDFSDK_Widget::Observer::Observer(CPDFSDK_Widget** pWatchedPtr)
|
| + : m_pWatchedPtr(pWatchedPtr) {
|
| + (*m_pWatchedPtr)->AddObserver(this);
|
| +}
|
| +
|
| +CPDFSDK_Widget::Observer::~Observer() {
|
| + if (m_pWatchedPtr)
|
| + (*m_pWatchedPtr)->RemoveObserver(this);
|
| +}
|
| +
|
| +void CPDFSDK_Widget::Observer::OnWidgetDestroyed() {
|
| + ASSERT(m_pWatchedPtr);
|
| + *m_pWatchedPtr = nullptr;
|
| + m_pWatchedPtr = nullptr;
|
| +}
|
| +
|
| CPDFSDK_Widget::CPDFSDK_Widget(CPDF_Annot* pAnnot,
|
| CPDFSDK_PageView* pPageView,
|
| CPDFSDK_InterForm* pInterForm)
|
| @@ -62,7 +79,20 @@ CPDFSDK_Widget::CPDFSDK_Widget(CPDF_Annot* pAnnot,
|
| {
|
| }
|
|
|
| -CPDFSDK_Widget::~CPDFSDK_Widget() {}
|
| +CPDFSDK_Widget::~CPDFSDK_Widget() {
|
| + for (auto* pObserver : m_Observers)
|
| + pObserver->OnWidgetDestroyed();
|
| +}
|
| +
|
| +void CPDFSDK_Widget::AddObserver(Observer* pObserver) {
|
| + ASSERT(!pdfium::ContainsKey(m_Observers, pObserver));
|
| + m_Observers.insert(pObserver);
|
| +}
|
| +
|
| +void CPDFSDK_Widget::RemoveObserver(Observer* pObserver) {
|
| + ASSERT(pdfium::ContainsKey(m_Observers, pObserver));
|
| + m_Observers.erase(pObserver);
|
| +}
|
|
|
| #ifdef PDF_ENABLE_XFA
|
| CXFA_FFWidget* CPDFSDK_Widget::GetMixXFAWidget() const {
|
|
|