Nest CFWL_EventTarget inside CFWL_NoteDriver.
It's name sounds too much like one of the CFWL_Event
sub-classes, which it is not. Eventually, a GC'd note
driver will have to trace these members, so make it
private to the note driver to avoid any funny business.
-- Kill a forward declaration for a class that no longer exists.
-- re-order some methods in a header to keep widget stuff together.
Change-Id: I7b8403d516798e34f176e7c819af739471011ff0
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/72920
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fwl/BUILD.gn b/xfa/fwl/BUILD.gn
index 53cd213..dd87c80 100644
--- a/xfa/fwl/BUILD.gn
+++ b/xfa/fwl/BUILD.gn
@@ -37,8 +37,6 @@
"cfwl_eventscroll.h",
"cfwl_eventselectchanged.cpp",
"cfwl_eventselectchanged.h",
- "cfwl_eventtarget.cpp",
- "cfwl_eventtarget.h",
"cfwl_eventtextwillchange.cpp",
"cfwl_eventtextwillchange.h",
"cfwl_eventvalidate.cpp",
diff --git a/xfa/fwl/cfwl_eventtarget.cpp b/xfa/fwl/cfwl_eventtarget.cpp
deleted file mode 100644
index ab33e9e..0000000
--- a/xfa/fwl/cfwl_eventtarget.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "xfa/fwl/cfwl_eventtarget.h"
-
-#include "xfa/fwl/cfwl_widget.h"
-#include "xfa/fwl/ifwl_widgetdelegate.h"
-
-CFWL_EventTarget::CFWL_EventTarget(CFWL_Widget* pListener)
- : m_pListener(pListener) {}
-
-CFWL_EventTarget::~CFWL_EventTarget() = default;
-
-void CFWL_EventTarget::SetEventSource(CFWL_Widget* pSource) {
- if (pSource)
- m_widgets.insert(pSource);
-}
-
-bool CFWL_EventTarget::ProcessEvent(CFWL_Event* pEvent) {
- IFWL_WidgetDelegate* pDelegate = m_pListener->GetDelegate();
- if (!pDelegate)
- return false;
- if (!m_widgets.empty() && m_widgets.count(pEvent->GetSrcTarget()) == 0)
- return false;
-
- pDelegate->OnProcessEvent(pEvent);
- return true;
-}
diff --git a/xfa/fwl/cfwl_eventtarget.h b/xfa/fwl/cfwl_eventtarget.h
deleted file mode 100644
index f614319..0000000
--- a/xfa/fwl/cfwl_eventtarget.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FWL_CFWL_EVENTTARGET_H_
-#define XFA_FWL_CFWL_EVENTTARGET_H_
-
-#include <set>
-
-#include "xfa/fwl/cfwl_event.h"
-
-class CFWL_Event;
-class CFWL_Widget;
-
-class CFWL_EventTarget {
- public:
- explicit CFWL_EventTarget(CFWL_Widget* pListener);
- ~CFWL_EventTarget();
-
- void SetEventSource(CFWL_Widget* pSource);
- bool ProcessEvent(CFWL_Event* pEvent);
-
- bool IsValid() const { return m_bValid; }
- void FlagInvalid() { m_bValid = false; }
-
- private:
- bool m_bValid = true;
- CFWL_Widget* const m_pListener;
- std::set<CFWL_Widget*> m_widgets;
-};
-
-#endif // XFA_FWL_CFWL_EVENTTARGET_H_
diff --git a/xfa/fwl/cfwl_notedriver.cpp b/xfa/fwl/cfwl_notedriver.cpp
index eefdc45..897ef85 100644
--- a/xfa/fwl/cfwl_notedriver.cpp
+++ b/xfa/fwl/cfwl_notedriver.cpp
@@ -13,7 +13,6 @@
#include "core/fxcrt/fx_extension.h"
#include "third_party/base/stl_util.h"
#include "xfa/fwl/cfwl_app.h"
-#include "xfa/fwl/cfwl_eventtarget.h"
#include "xfa/fwl/cfwl_messagekey.h"
#include "xfa/fwl/cfwl_messagekillfocus.h"
#include "xfa/fwl/cfwl_messagemouse.h"
@@ -47,7 +46,7 @@
pListener->SetEventKey(key);
}
if (!m_eventTargets[key])
- m_eventTargets[key] = std::make_unique<CFWL_EventTarget>(pListener);
+ m_eventTargets[key] = std::make_unique<Target>(pListener);
m_eventTargets[key]->SetEventSource(pEventSource);
}
@@ -239,3 +238,23 @@
CFWL_MessageMouse msHover(pTarget, FWL_MouseCommand::Hover, 0, pMsg->m_pos);
DispatchMessage(&msHover, nullptr);
}
+
+CFWL_NoteDriver::Target::Target(CFWL_Widget* pListener)
+ : m_pListener(pListener) {}
+
+CFWL_NoteDriver::Target::~Target() = default;
+
+void CFWL_NoteDriver::Target::SetEventSource(CFWL_Widget* pSource) {
+ if (pSource)
+ m_widgets.insert(pSource);
+}
+
+bool CFWL_NoteDriver::Target::ProcessEvent(CFWL_Event* pEvent) {
+ IFWL_WidgetDelegate* pDelegate = m_pListener->GetDelegate();
+ if (!pDelegate)
+ return false;
+ if (!m_widgets.empty() && m_widgets.count(pEvent->GetSrcTarget()) == 0)
+ return false;
+ pDelegate->OnProcessEvent(pEvent);
+ return true;
+}
diff --git a/xfa/fwl/cfwl_notedriver.h b/xfa/fwl/cfwl_notedriver.h
index d5aa1e6..92554c2 100644
--- a/xfa/fwl/cfwl_notedriver.h
+++ b/xfa/fwl/cfwl_notedriver.h
@@ -15,9 +15,7 @@
#include "xfa/fwl/cfwl_widget.h"
#include "xfa/fxgraphics/cxfa_graphics.h"
-class CFWL_EventTarget;
-class CFWL_TargetImp;
-class CFWL_Widget;
+class CFWL_Event;
class CFWL_NoteDriver {
public:
@@ -25,15 +23,30 @@
~CFWL_NoteDriver();
void SendEvent(CFWL_Event* pNote);
+ void ProcessMessage(CFWL_Message* pMessage);
void RegisterEventTarget(CFWL_Widget* pListener, CFWL_Widget* pEventSource);
void UnregisterEventTarget(CFWL_Widget* pListener);
- void SetGrab(CFWL_Widget* pGrab) { m_pGrab = pGrab; }
-
void NotifyTargetHide(CFWL_Widget* pNoteTarget);
void NotifyTargetDestroy(CFWL_Widget* pNoteTarget);
- void ProcessMessage(CFWL_Message* pMessage);
+ void SetGrab(CFWL_Widget* pGrab) { m_pGrab = pGrab; }
private:
+ class Target {
+ public:
+ explicit Target(CFWL_Widget* pListener);
+ ~Target();
+
+ void SetEventSource(CFWL_Widget* pSource);
+ bool ProcessEvent(CFWL_Event* pEvent);
+ bool IsValid() const { return m_bValid; }
+ void FlagInvalid() { m_bValid = false; }
+
+ private:
+ bool m_bValid = true;
+ CFWL_Widget* const m_pListener;
+ std::set<CFWL_Widget*> m_widgets;
+ };
+
bool DispatchMessage(CFWL_Message* pMessage, CFWL_Widget* pMessageForm);
bool DoSetFocus(CFWL_Message* pMsg, CFWL_Widget* pMessageForm);
bool DoKillFocus(CFWL_Message* pMsg, CFWL_Widget* pMessageForm);
@@ -43,7 +56,7 @@
bool DoMouseEx(CFWL_Message* pMsg, CFWL_Widget* pMessageForm);
void MouseSecondary(CFWL_Message* pMsg);
- std::map<uint64_t, std::unique_ptr<CFWL_EventTarget>> m_eventTargets;
+ std::map<uint64_t, std::unique_ptr<Target>> m_eventTargets;
UnownedPtr<CFWL_Widget> m_pHover;
UnownedPtr<CFWL_Widget> m_pFocus;
UnownedPtr<CFWL_Widget> m_pGrab;
diff --git a/xfa/fxfa/cxfa_fftextedit.cpp b/xfa/fxfa/cxfa_fftextedit.cpp
index 2c406ce..8a2be60 100644
--- a/xfa/fxfa/cxfa_fftextedit.cpp
+++ b/xfa/fxfa/cxfa_fftextedit.cpp
@@ -11,7 +11,6 @@
#include "xfa/fwl/cfwl_datetimepicker.h"
#include "xfa/fwl/cfwl_edit.h"
-#include "xfa/fwl/cfwl_eventtarget.h"
#include "xfa/fwl/cfwl_eventtextwillchange.h"
#include "xfa/fwl/cfwl_messagekillfocus.h"
#include "xfa/fwl/cfwl_messagesetfocus.h"