diff options
-rw-r--r-- | fpdfsdk/formfiller/cffl_interactiveformfiller.cpp | 33 | ||||
-rw-r--r-- | fpdfsdk/formfiller/cffl_interactiveformfiller.h | 18 | ||||
-rw-r--r-- | fpdfsdk/pdfwindow/cpwl_edit.cpp | 17 | ||||
-rw-r--r-- | fpdfsdk/pdfwindow/cpwl_edit.h | 19 | ||||
-rw-r--r-- | fpdfsdk/pdfwindow/cpwl_list_box.cpp | 10 |
5 files changed, 47 insertions, 50 deletions
diff --git a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp index d318111ee6..d718e7ca40 100644 --- a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp +++ b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp @@ -839,16 +839,16 @@ bool CFFL_InteractiveFormFiller::IsValidAnnot(CPDFSDK_PageView* pPageView, return pPageView && pPageView->IsValidAnnot(pAnnot->GetPDFAnnot()); } -void CFFL_InteractiveFormFiller::OnBeforeKeyStroke( +std::pair<bool, bool> CFFL_InteractiveFormFiller::OnBeforeKeyStroke( void* pPrivateData, CFX_WideString& strChange, const CFX_WideString& strChangeEx, int nSelStart, int nSelEnd, bool bKeyDown, - bool& bRC, - bool& bExit, uint32_t nFlag) { + bool bRC = true; + bool bExit = false; CFFL_PrivateData* pData = reinterpret_cast<CFFL_PrivateData*>(pPrivateData); ASSERT(pData->pWidget); @@ -857,18 +857,15 @@ void CFFL_InteractiveFormFiller::OnBeforeKeyStroke( #ifdef PDF_ENABLE_XFA if (pFormFiller->IsFieldFull(pData->pPageView)) { CPDFSDK_Annot::ObservedPtr pObserved(pData->pWidget); - if (OnFull(&pObserved, pData->pPageView, nFlag) || !pObserved) { - bExit = true; - return; - } + if (OnFull(&pObserved, pData->pPageView, nFlag) || !pObserved) + return {bRC, true}; } #endif // PDF_ENABLE_XFA - if (m_bNotifying) - return; - - if (!pData->pWidget->GetAAction(CPDF_AAction::KeyStroke).GetDict()) - return; + if (m_bNotifying || + !pData->pWidget->GetAAction(CPDF_AAction::KeyStroke).GetDict()) { + return {bRC, bExit}; + } CFX_AutoRestorer<bool> restorer(&m_bNotifying); m_bNotifying = true; @@ -897,13 +894,11 @@ void CFFL_InteractiveFormFiller::OnBeforeKeyStroke( pData->pPageView)) { if (!IsValidAnnot(pData->pPageView, pData->pWidget)) bExit = true; - return; + return {bRC, bExit}; } - if (!pObserved || !IsValidAnnot(pData->pPageView, pData->pWidget)) { - bExit = true; - return; - } + if (!pObserved || !IsValidAnnot(pData->pPageView, pData->pWidget)) + return {bRC, true}; if (nAge != pData->pWidget->GetAppearanceAge()) { CPWL_Wnd* pWnd = pFormFiller->ResetPDFWindow( @@ -919,8 +914,8 @@ void CFFL_InteractiveFormFiller::OnBeforeKeyStroke( bRC = false; if (pFormFillEnv->GetFocusAnnot() == pData->pWidget) - return; + return {bRC, bExit}; pFormFiller->CommitData(pData->pPageView, nFlag); - bExit = true; + return {bRC, true}; } diff --git a/fpdfsdk/formfiller/cffl_interactiveformfiller.h b/fpdfsdk/formfiller/cffl_interactiveformfiller.h index 05fdf0d6c7..fb141e17a4 100644 --- a/fpdfsdk/formfiller/cffl_interactiveformfiller.h +++ b/fpdfsdk/formfiller/cffl_interactiveformfiller.h @@ -9,6 +9,7 @@ #include <map> #include <memory> +#include <utility> #include "core/fxcrt/cfx_unowned_ptr.h" #include "fpdfsdk/cpdfsdk_annot.h" @@ -129,15 +130,14 @@ class CFFL_InteractiveFormFiller : public IPWL_Filler_Notify { float fPopupMax, bool* bBottom, float* fPopupRet) override; - void OnBeforeKeyStroke(void* pPrivateData, - CFX_WideString& strChange, - const CFX_WideString& strChangeEx, - int nSelStart, - int nSelEnd, - bool bKeyDown, - bool& bRC, - bool& bExit, - uint32_t nFlag) override; + // Returns {bRC, bExit}. + std::pair<bool, bool> OnBeforeKeyStroke(void* pPrivateData, + CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + int nSelStart, + int nSelEnd, + bool bKeyDown, + uint32_t nFlag) override; #ifdef PDF_ENABLE_XFA bool OnPopupPreOpen(void* pPrivateData, uint32_t nFlag) override; bool OnPopupPostOpen(void* pPrivateData, uint32_t nFlag) override; diff --git a/fpdfsdk/pdfwindow/cpwl_edit.cpp b/fpdfsdk/pdfwindow/cpwl_edit.cpp index de21dac144..a378156d41 100644 --- a/fpdfsdk/pdfwindow/cpwl_edit.cpp +++ b/fpdfsdk/pdfwindow/cpwl_edit.cpp @@ -586,8 +586,6 @@ bool CPWL_Edit::OnKeyDown(uint16_t nChar, uint32_t nFlag) { if (nChar == FWL_VKEY_Delete) { if (m_pFillerNotify) { - bool bRC = true; - bool bExit = false; CFX_WideString strChange; CFX_WideString strChangeEx; @@ -597,9 +595,12 @@ bool CPWL_Edit::OnKeyDown(uint16_t nChar, uint32_t nFlag) { if (nSelStart == nSelEnd) nSelEnd = nSelStart + 1; - m_pFillerNotify->OnBeforeKeyStroke(GetAttachedData(), strChange, - strChangeEx, nSelStart, nSelEnd, true, - bRC, bExit, nFlag); + + bool bRC; + bool bExit; + std::tie(bRC, bExit) = m_pFillerNotify->OnBeforeKeyStroke( + GetAttachedData(), strChange, strChangeEx, nSelStart, nSelEnd, true, + nFlag); if (!bRC) return false; if (bExit) @@ -677,9 +678,9 @@ bool CPWL_Edit::OnChar(uint16_t nChar, uint32_t nFlag) { } CFX_WideString strChangeEx; - m_pFillerNotify->OnBeforeKeyStroke(GetAttachedData(), swChange, - strChangeEx, nSelStart, nSelEnd, true, - bRC, bExit, nFlag); + std::tie(bRC, bExit) = m_pFillerNotify->OnBeforeKeyStroke( + GetAttachedData(), swChange, strChangeEx, nSelStart, nSelEnd, true, + nFlag); } } diff --git a/fpdfsdk/pdfwindow/cpwl_edit.h b/fpdfsdk/pdfwindow/cpwl_edit.h index 038aba955f..ebf556ad71 100644 --- a/fpdfsdk/pdfwindow/cpwl_edit.h +++ b/fpdfsdk/pdfwindow/cpwl_edit.h @@ -7,6 +7,8 @@ #ifndef FPDFSDK_PDFWINDOW_CPWL_EDIT_H_ #define FPDFSDK_PDFWINDOW_CPWL_EDIT_H_ +#include <utility> + #include "core/fpdfdoc/cpvt_wordrange.h" #include "core/fxcrt/cfx_unowned_ptr.h" #include "core/fxcrt/fx_basic.h" @@ -22,15 +24,14 @@ class IPWL_Filler_Notify { float fPopupMax, bool* bBottom, float* fPopupRet) = 0; - virtual void OnBeforeKeyStroke(void* pPrivateData, - CFX_WideString& strChange, - const CFX_WideString& strChangeEx, - int nSelStart, - int nSelEnd, - bool bKeyDown, - bool& bRC, - bool& bExit, - uint32_t nFlag) = 0; + virtual std::pair<bool, bool> OnBeforeKeyStroke( + void* pPrivateData, + CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + int nSelStart, + int nSelEnd, + bool bKeyDown, + uint32_t nFlag) = 0; #ifdef PDF_ENABLE_XFA virtual bool OnPopupPreOpen(void* pPrivateData, uint32_t nFlag) = 0; virtual bool OnPopupPostOpen(void* pPrivateData, uint32_t nFlag) = 0; diff --git a/fpdfsdk/pdfwindow/cpwl_list_box.cpp b/fpdfsdk/pdfwindow/cpwl_list_box.cpp index bd2bdb5d19..e3a2e77b94 100644 --- a/fpdfsdk/pdfwindow/cpwl_list_box.cpp +++ b/fpdfsdk/pdfwindow/cpwl_list_box.cpp @@ -305,15 +305,15 @@ bool CPWL_ListBox::OnNotifySelChanged(bool bKeyDown, uint32_t nFlag) { if (!m_pFillerNotify) return false; - bool bRC = true; - bool bExit = false; CFX_WideString swChange = GetText(); CFX_WideString strChangeEx; int nSelStart = 0; int nSelEnd = swChange.GetLength(); - m_pFillerNotify->OnBeforeKeyStroke(GetAttachedData(), swChange, strChangeEx, - nSelStart, nSelEnd, bKeyDown, bRC, bExit, - nFlag); + bool bRC; + bool bExit; + std::tie(bRC, bExit) = m_pFillerNotify->OnBeforeKeyStroke( + GetAttachedData(), swChange, strChangeEx, nSelStart, nSelEnd, bKeyDown, + nFlag); return bExit; } |