Index: ui/events/platform/x11/x11_event_source.h |
diff --git a/ui/events/platform/x11/x11_event_source.h b/ui/events/platform/x11/x11_event_source.h |
index 26d646016607273684183310df1a393d8e0d1558..472e89e1a3a8dd5e905c0eb57f2f419194a0c154 100644 |
--- a/ui/events/platform/x11/x11_event_source.h |
+++ b/ui/events/platform/x11/x11_event_source.h |
@@ -9,6 +9,7 @@ |
#include "base/macros.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/observer_list.h" |
#include "ui/events/events_export.h" |
#include "ui/events/platform/platform_event_source.h" |
#include "ui/gfx/x/x11_types.h" |
@@ -20,6 +21,20 @@ typedef unsigned long XID; |
namespace ui { |
+// Interface for classes that want to receive XEvent directly. Only used with |
+// ozone_platform_x11 and only events that can't be translated into ui::Events |
+// are sent via this path. |
+class EVENTS_EXPORT XEventDispatcher { |
+ public: |
+ // Sends XEvent to XEventDispatcher for handling. Returns true if the XEvent |
+ // was dispatched, otherwise false. After the first XEventDispatcher returns |
+ // true XEvent dispatching stops. |
+ virtual bool DispatchXEvent(const XEvent& event) = 0; |
+ |
+ protected: |
+ virtual ~XEventDispatcher() {} |
+}; |
+ |
class X11HotplugEventHandler; |
// A PlatformEventSource implementation for reading events from X11 server and |
@@ -31,6 +46,12 @@ class EVENTS_EXPORT X11EventSource : public PlatformEventSource { |
static X11EventSource* GetInstance(); |
+ // Adds a XEvent dispatcher to the dispatcher list. |
+ void AddXEventDispatcher(XEventDispatcher* dispatcher); |
+ |
+ // Removes a XEvent dispatcher from the dispatcher list. |
+ void RemoveXEventDispatcher(XEventDispatcher* dispatcher); |
+ |
// Called by the glib source dispatch function. Processes all (if any) |
// available X events. |
void DispatchXEvents(); |
@@ -56,10 +77,16 @@ class EVENTS_EXPORT X11EventSource : public PlatformEventSource { |
uint32_t ExtractCookieDataDispatchEvent(XEvent* xevent); |
// PlatformEventSource: |
- uint32_t DispatchEvent(XEvent* xevent) override; |
+ uint32_t DispatchEvent(base::NativeEvent native_event) override; |
void StopCurrentEventStream() override; |
void OnDispatcherListChanged() override; |
+ // Sends XEvent to registered XEventDispatchers. |
+ void DispatchXEventToXEventDispatchers(XEvent* xevent); |
+ |
+ // Handles updates after event has been dispatched. |
+ void PostDispatchEvent(XEvent* xevent); |
+ |
// The connection to the X11 server used to receive the events. |
XDisplay* display_; |
@@ -69,6 +96,10 @@ class EVENTS_EXPORT X11EventSource : public PlatformEventSource { |
scoped_ptr<X11HotplugEventHandler> hotplug_event_handler_; |
+ // Keep track of all XEventDispatcher to send XEvents directly to, only used |
+ // with ozone. |
spang
2016/01/26 21:37:40
Why "only used with ozone" ?
I think anything tha
kylechar
2016/01/27 15:39:26
As long as there are no PlatformEventObservers in
kylechar
2016/02/01 16:44:27
After talking with Sadrul we decided that only X11
|
+ base::ObserverList<XEventDispatcher> x_dispatchers_; |
+ |
DISALLOW_COPY_AND_ASSIGN(X11EventSource); |
}; |