Index: fpdfsdk/src/fsdk_mgr.cpp |
diff --git a/fpdfsdk/src/fsdk_mgr.cpp b/fpdfsdk/src/fsdk_mgr.cpp |
index 52173b4c96a29269489979adb901a4e493a05aec..efb21a7efce13f8cd1c866fa1736cf8aa25c2207 100644 |
--- a/fpdfsdk/src/fsdk_mgr.cpp |
+++ b/fpdfsdk/src/fsdk_mgr.cpp |
@@ -332,7 +332,14 @@ CPDFSDK_Document::CPDFSDK_Document(CPDF_Document* pDoc,CPDFDoc_Environment* pEnv |
CPDFSDK_Document::~CPDFSDK_Document() |
{ |
- m_pageMap.RemoveAll(); |
+ FX_POSITION pos = m_pageMap.GetStartPosition(); |
+ while (pos) { |
+ CPDF_Page* pPage = NULL; |
+ CPDFSDK_PageView* pPageView = NULL; |
+ m_pageMap.GetNextAssoc(pos, pPage, pPageView); |
+ delete pPageView; |
+ } |
+ m_pageMap.RemoveAll(); |
if(m_pInterForm) |
{ |
m_pInterForm->Destroy(); |
@@ -453,7 +460,7 @@ CPDF_OCContext* CPDFSDK_Document::GetOCContext() |
void CPDFSDK_Document::ReMovePageView(CPDF_Page* pPDFPage) |
{ |
CPDFSDK_PageView* pPageView = (CPDFSDK_PageView*)m_pageMap.GetValueAt(pPDFPage); |
- if(pPageView) |
+ if(pPageView && !pPageView->IsLocked()) |
{ |
delete pPageView; |
m_pageMap.RemoveKey(pPDFPage); |
@@ -608,7 +615,7 @@ CPDFSDK_PageView::CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc,CPDF_Page* page):m_ |
CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm(); |
pPDFInterForm->FixPageFields(page); |
} |
- |
+ m_page->SetPrivateData((FX_LPVOID)m_page, (FX_LPVOID)this, NULL); |
m_fxAnnotArray.RemoveAll(); |
m_bEnterWidget = FALSE; |
@@ -616,12 +623,15 @@ CPDFSDK_PageView::CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc,CPDF_Page* page):m_ |
m_bOnWidget = FALSE; |
m_CaptureWidget = NULL; |
m_bValid = FALSE; |
+ m_bLocked = FALSE; |
+ m_bTakeOverPage = FALSE; |
} |
CPDFSDK_PageView::~CPDFSDK_PageView() |
{ |
CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); |
int nAnnotCount = m_fxAnnotArray.GetSize(); |
+ |
for (int i=0; i<nAnnotCount; i++) |
{ |
CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i); |
@@ -638,6 +648,10 @@ CPDFSDK_PageView::~CPDFSDK_PageView() |
delete m_pAnnotList; |
m_pAnnotList = NULL; |
} |
+ m_page->RemovePrivateData((FX_LPVOID)m_page); |
+ if(m_bTakeOverPage) { |
+ delete m_page; |
+ } |
} |
void CPDFSDK_PageView::PageView_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,CPDF_RenderOptions* pOptions) |
@@ -972,6 +986,7 @@ void CPDFSDK_PageView::LoadFXAnnots() |
m_pAnnotList = new CPDF_AnnotList(m_page); |
CPDF_InterForm::EnableUpdateAP(enableAPUpdate); |
int nCount = m_pAnnotList->Count(); |
+ SetLock(TRUE); |
for(int i=0; i<nCount; i++) |
{ |
CPDF_Annot* pPDFAnnot = m_pAnnotList->GetAt(i); |
@@ -981,6 +996,7 @@ void CPDFSDK_PageView::LoadFXAnnots() |
CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); |
ASSERT(pAnnotHandlerMgr != NULL); |
+ |
if(pAnnotHandlerMgr) |
{ |
CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(pPDFAnnot, this); |
@@ -992,6 +1008,7 @@ void CPDFSDK_PageView::LoadFXAnnots() |
} |
} |
+ SetLock(FALSE); |
} |
void CPDFSDK_PageView::UpdateRects(CFX_RectArray& rects) |