Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Unified Diff: fpdfsdk/cpdfsdk_document.cpp

Issue 2368403002: Watch destruction of widgets around OnAAction() method (Closed)
Patch Set: blown merge Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « fpdfsdk/cpdfsdk_baannothandler.cpp ('k') | fpdfsdk/cpdfsdk_pageview.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « fpdfsdk/cpdfsdk_baannothandler.cpp ('k') | fpdfsdk/cpdfsdk_pageview.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698