summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xfa/fwl/cfwl_eventtarget.cpp2
-rw-r--r--xfa/fwl/cfwl_eventtarget.h6
-rw-r--r--xfa/fwl/cfwl_notedriver.cpp20
-rw-r--r--xfa/fwl/cfwl_notedriver.h5
-rw-r--r--xfa/fxfa/cxfa_ffapp.cpp2
5 files changed, 14 insertions, 21 deletions
diff --git a/xfa/fwl/cfwl_eventtarget.cpp b/xfa/fwl/cfwl_eventtarget.cpp
index 55f8e1fc78..8a3b78799b 100644
--- a/xfa/fwl/cfwl_eventtarget.cpp
+++ b/xfa/fwl/cfwl_eventtarget.cpp
@@ -10,7 +10,7 @@
#include "xfa/fwl/ifwl_widgetdelegate.h"
CFWL_EventTarget::CFWL_EventTarget(CFWL_Widget* pListener)
- : m_pListener(pListener), m_bInvalid(false) {}
+ : m_pListener(pListener), m_bValid(true) {}
CFWL_EventTarget::~CFWL_EventTarget() {}
diff --git a/xfa/fwl/cfwl_eventtarget.h b/xfa/fwl/cfwl_eventtarget.h
index 1bca97232c..36d301df27 100644
--- a/xfa/fwl/cfwl_eventtarget.h
+++ b/xfa/fwl/cfwl_eventtarget.h
@@ -23,13 +23,13 @@ class CFWL_EventTarget {
void SetEventSource(CFWL_Widget* pSource);
bool ProcessEvent(CFWL_Event* pEvent);
- bool IsInvalid() const { return m_bInvalid; }
- void FlagInvalid() { m_bInvalid = true; }
+ bool IsValid() const { return m_bValid; }
+ void FlagInvalid() { m_bValid = false; }
private:
std::set<CFWL_Widget*> m_widgets;
CFWL_Widget* m_pListener;
- bool m_bInvalid;
+ bool m_bValid;
};
#endif // XFA_FWL_CFWL_EVENTTARGET_H_
diff --git a/xfa/fwl/cfwl_notedriver.cpp b/xfa/fwl/cfwl_notedriver.cpp
index 8feb0fb4e5..9012100c32 100644
--- a/xfa/fwl/cfwl_notedriver.cpp
+++ b/xfa/fwl/cfwl_notedriver.cpp
@@ -31,18 +31,12 @@ CFWL_NoteDriver::CFWL_NoteDriver()
PushNoteLoop(m_pNoteLoop.get());
}
-CFWL_NoteDriver::~CFWL_NoteDriver() {
- ClearEventTargets(true);
-}
+CFWL_NoteDriver::~CFWL_NoteDriver() {}
void CFWL_NoteDriver::SendEvent(CFWL_Event* pNote) {
- if (m_eventTargets.empty())
- return;
-
for (const auto& pair : m_eventTargets) {
- CFWL_EventTarget* pEventTarget = pair.second;
- if (pEventTarget && !pEventTarget->IsInvalid())
- pEventTarget->ProcessEvent(pNote);
+ if (pair.second->IsValid())
+ pair.second->ProcessEvent(pNote);
}
}
@@ -56,7 +50,7 @@ void CFWL_NoteDriver::RegisterEventTarget(CFWL_Widget* pListener,
pListener->SetEventKey(key);
}
if (!m_eventTargets[key])
- m_eventTargets[key] = new CFWL_EventTarget(pListener);
+ m_eventTargets[key] = pdfium::MakeUnique<CFWL_EventTarget>(pListener);
m_eventTargets[key]->SetEventSource(pEventSource);
}
@@ -445,13 +439,11 @@ CFWL_Widget* CFWL_NoteDriver::GetMessageForm(CFWL_Widget* pDstTarget) {
return pMessageForm;
}
-void CFWL_NoteDriver::ClearEventTargets(bool bRemoveAll) {
+void CFWL_NoteDriver::ClearEventTargets() {
auto it = m_eventTargets.begin();
while (it != m_eventTargets.end()) {
auto old = it++;
- if (old->second && (bRemoveAll || old->second->IsInvalid())) {
- delete old->second;
+ if (!old->second->IsValid())
m_eventTargets.erase(old);
- }
}
}
diff --git a/xfa/fwl/cfwl_notedriver.h b/xfa/fwl/cfwl_notedriver.h
index e177494ff1..2ea3f97cc0 100644
--- a/xfa/fwl/cfwl_notedriver.h
+++ b/xfa/fwl/cfwl_notedriver.h
@@ -30,7 +30,7 @@ class CFWL_NoteDriver {
void RegisterEventTarget(CFWL_Widget* pListener, CFWL_Widget* pEventSource);
void UnregisterEventTarget(CFWL_Widget* pListener);
- void ClearEventTargets(bool bRemoveAll);
+ void ClearEventTargets();
CFWL_NoteLoop* GetTopLoop() const;
void PushNoteLoop(CFWL_NoteLoop* pNoteLoop);
@@ -69,7 +69,8 @@ class CFWL_NoteDriver {
std::vector<CFWL_Widget*> m_Forms;
std::deque<std::unique_ptr<CFWL_Message>> m_NoteQueue;
std::vector<CFWL_NoteLoop*> m_NoteLoopQueue;
- std::unordered_map<uint32_t, CFWL_EventTarget*> m_eventTargets;
+ std::unordered_map<uint32_t, std::unique_ptr<CFWL_EventTarget>>
+ m_eventTargets;
CFWL_Widget* m_pHover;
CFWL_Widget* m_pFocus;
CFWL_Widget* m_pGrab;
diff --git a/xfa/fxfa/cxfa_ffapp.cpp b/xfa/fxfa/cxfa_ffapp.cpp
index c02fd30e86..a71112c93e 100644
--- a/xfa/fxfa/cxfa_ffapp.cpp
+++ b/xfa/fxfa/cxfa_ffapp.cpp
@@ -92,5 +92,5 @@ IFWL_AdapterTimerMgr* CXFA_FFApp::GetTimerMgr() const {
}
void CXFA_FFApp::ClearEventTargets() {
- m_pFWLApp->GetNoteDriver()->ClearEventTargets(false);
+ m_pFWLApp->GetNoteDriver()->ClearEventTargets();
}