| Index: fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp
|
| diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp
|
| index 92d16b64e233dcc15cbaac64c5abe5cb2c31a965..e72c1b3f16410d2e69e5129cbb94885b11078be9 100644
|
| --- a/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp
|
| +++ b/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp
|
| @@ -138,29 +138,25 @@ int CPDFXFA_Document::GetPageCount() {
|
| }
|
|
|
| CPDFXFA_Page* CPDFXFA_Document::GetPage(int page_index) {
|
| - if (!m_pPDFDoc && !m_pXFADoc)
|
| - return NULL;
|
| -
|
| - CPDFXFA_Page* pPage = NULL;
|
| - if (m_XFAPageList.GetSize()) {
|
| + if (page_index < 0)
|
| + return nullptr;
|
| + CPDFXFA_Page* pPage = nullptr;
|
| + int nCount = m_XFAPageList.GetSize();
|
| + if (nCount > 0 && page_index < nCount) {
|
| pPage = m_XFAPageList.GetAt(page_index);
|
| if (pPage)
|
| pPage->AddRef();
|
| } else {
|
| m_XFAPageList.SetSize(GetPageCount());
|
| }
|
| -
|
| - if (!pPage) {
|
| - pPage = new CPDFXFA_Page(this, page_index);
|
| - FX_BOOL bRet = pPage->LoadPage();
|
| - if (!bRet) {
|
| - delete pPage;
|
| - return NULL;
|
| - }
|
| -
|
| - m_XFAPageList.SetAt(page_index, pPage);
|
| + if (pPage)
|
| + return pPage;
|
| + pPage = new CPDFXFA_Page(this, page_index);
|
| + if (!pPage->LoadPage()) {
|
| + delete pPage;
|
| + return nullptr;
|
| }
|
| -
|
| + m_XFAPageList.SetAt(page_index, pPage);
|
| return pPage;
|
| }
|
|
|
| @@ -476,6 +472,22 @@ FX_BOOL CPDFXFA_Document::PopupMenu(IXFA_Widget* hWidget,
|
|
|
| void CPDFXFA_Document::PageViewEvent(IXFA_PageView* pPageView,
|
| FX_DWORD dwFlags) {
|
| + if (!pPageView || (dwFlags != XFA_PAGEVIEWEVENT_PostAdded &&
|
| + dwFlags != XFA_PAGEVIEWEVENT_PostRemoved)) {
|
| + return;
|
| + }
|
| + CPDFXFA_Page* pPage = nullptr;
|
| + if (dwFlags == XFA_PAGEVIEWEVENT_PostAdded) {
|
| + pPage = GetPage(pPageView->GetPageViewIndex());
|
| + if (pPage)
|
| + pPage->SetXFAPageView(pPageView);
|
| + return;
|
| + }
|
| + pPage = GetPage(pPageView);
|
| + if (!pPage)
|
| + return;
|
| + pPage->SetXFAPageView(nullptr);
|
| + m_pSDKDoc->GetPageView(pPage)->ClearFXAnnots();
|
| }
|
|
|
| void CPDFXFA_Document::WidgetEvent(IXFA_Widget* hWidget,
|
|
|