summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fpdfsdk/formfiller/cffl_interactiveformfiller.cpp33
-rw-r--r--fpdfsdk/formfiller/cffl_interactiveformfiller.h18
-rw-r--r--fpdfsdk/pdfwindow/cpwl_edit.cpp17
-rw-r--r--fpdfsdk/pdfwindow/cpwl_edit.h19
-rw-r--r--fpdfsdk/pdfwindow/cpwl_list_box.cpp10
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;
}