Index: fpdfsdk/cpdfsdk_document.cpp |
diff --git a/fpdfsdk/cpdfsdk_document.cpp b/fpdfsdk/cpdfsdk_document.cpp |
index d4de6d0510151e90a087015933613a011c6fca00..01e4d88ac1dea09259b9df905878caf00f773af7 100644 |
--- a/fpdfsdk/cpdfsdk_document.cpp |
+++ b/fpdfsdk/cpdfsdk_document.cpp |
@@ -31,7 +31,6 @@ CPDFSDK_Document* CPDFSDK_Document::FromFPDFFormHandle( |
CPDFSDK_Document::CPDFSDK_Document(UnderlyingDocumentType* pDoc, |
CPDFSDK_Environment* pEnv) |
: m_pDoc(pDoc), |
- m_pFocusAnnot(nullptr), |
m_pEnv(pEnv), |
m_bChangeMask(FALSE), |
m_bBeingDestroyed(FALSE) {} |
@@ -174,14 +173,15 @@ void CPDFSDK_Document::UpdateAllViews(CPDFSDK_PageView* pSender, |
} |
CPDFSDK_Annot* CPDFSDK_Document::GetFocusAnnot() { |
- return m_pFocusAnnot; |
+ return m_pFocusAnnot.Get(); |
} |
-FX_BOOL CPDFSDK_Document::SetFocusAnnot(CPDFSDK_Annot* pAnnot, uint32_t nFlag) { |
+FX_BOOL CPDFSDK_Document::SetFocusAnnot(CPDFSDK_Annot::ObservedPtr* pAnnot, |
+ uint32_t nFlag) { |
if (m_bBeingDestroyed) |
return FALSE; |
- if (m_pFocusAnnot == pAnnot) |
+ if (m_pFocusAnnot == *pAnnot) |
return TRUE; |
if (m_pFocusAnnot) { |
@@ -189,24 +189,24 @@ FX_BOOL CPDFSDK_Document::SetFocusAnnot(CPDFSDK_Annot* pAnnot, uint32_t nFlag) { |
return FALSE; |
} |
- if (!pAnnot) |
+ if (!*pAnnot) |
return FALSE; |
#ifdef PDF_ENABLE_XFA |
- CPDFSDK_Annot* pLastFocusAnnot = m_pFocusAnnot; |
+ CPDFSDK_Annot::ObservedPtr pLastFocusAnnot(m_pFocusAnnot.Get()); |
#endif // PDF_ENABLE_XFA |
- CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); |
+ CPDFSDK_PageView* pPageView = (*pAnnot)->GetPageView(); |
if (pPageView && pPageView->IsValid()) { |
CPDFSDK_AnnotHandlerMgr* pAnnotHandler = m_pEnv->GetAnnotHandlerMgr(); |
if (!m_pFocusAnnot) { |
#ifdef PDF_ENABLE_XFA |
- if (!pAnnotHandler->Annot_OnChangeFocus(pAnnot, pLastFocusAnnot)) |
+ if (!pAnnotHandler->Annot_OnChangeFocus(pAnnot, &pLastFocusAnnot)) |
return FALSE; |
#endif // PDF_ENABLE_XFA |
if (!pAnnotHandler->Annot_OnSetFocus(pAnnot, nFlag)) |
return FALSE; |
if (!m_pFocusAnnot) { |
- m_pFocusAnnot = pAnnot; |
+ m_pFocusAnnot.Reset(pAnnot->Get()); |
return TRUE; |
} |
} |
@@ -217,28 +217,29 @@ FX_BOOL CPDFSDK_Document::SetFocusAnnot(CPDFSDK_Annot* pAnnot, uint32_t nFlag) { |
FX_BOOL CPDFSDK_Document::KillFocusAnnot(uint32_t nFlag) { |
if (m_pFocusAnnot) { |
CPDFSDK_AnnotHandlerMgr* pAnnotHandler = m_pEnv->GetAnnotHandlerMgr(); |
- CPDFSDK_Annot* pFocusAnnot = m_pFocusAnnot; |
- m_pFocusAnnot = nullptr; |
+ CPDFSDK_Annot::ObservedPtr pFocusAnnot(m_pFocusAnnot.Get()); |
+ m_pFocusAnnot.Reset(); |
#ifdef PDF_ENABLE_XFA |
- if (!pAnnotHandler->Annot_OnChangeFocus(nullptr, pFocusAnnot)) |
+ CPDFSDK_Annot::ObservedPtr pNull; |
+ if (!pAnnotHandler->Annot_OnChangeFocus(&pNull, &pFocusAnnot)) |
return FALSE; |
#endif // PDF_ENABLE_XFA |
- if (pAnnotHandler->Annot_OnKillFocus(pFocusAnnot, nFlag)) { |
+ if (pAnnotHandler->Annot_OnKillFocus(&pFocusAnnot, nFlag)) { |
if (pFocusAnnot->GetAnnotSubtype() == CPDF_Annot::Subtype::WIDGET) { |
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pFocusAnnot; |
+ CPDFSDK_Widget* pWidget = |
+ static_cast<CPDFSDK_Widget*>(pFocusAnnot.Get()); |
int nFieldType = pWidget->GetFieldType(); |
if (FIELDTYPE_TEXTFIELD == nFieldType || |
FIELDTYPE_COMBOBOX == nFieldType) { |
m_pEnv->OnSetFieldInputFocus(nullptr, 0, FALSE); |
} |
} |
- |
if (!m_pFocusAnnot) |
return TRUE; |
} else { |
- m_pFocusAnnot = pFocusAnnot; |
+ m_pFocusAnnot.Reset(pFocusAnnot.Get()); |
} |
} |
return FALSE; |