Index: ui/events/platform/x11/x11_event_source.cc |
diff --git a/ui/events/platform/x11/x11_event_source.cc b/ui/events/platform/x11/x11_event_source.cc |
index e1bc15ecc3176812a5d161a07b252fb666514853..7ff46f05c1f0075f8ac71df23206321b306264c0 100644 |
--- a/ui/events/platform/x11/x11_event_source.cc |
+++ b/ui/events/platform/x11/x11_event_source.cc |
@@ -46,7 +46,10 @@ X11EventSource* X11EventSource::instance_ = nullptr; |
X11EventSource::X11EventSource(X11EventSourceDelegate* delegate, |
XDisplay* display) |
- : delegate_(delegate), display_(display), continue_stream_(true) { |
+ : delegate_(delegate), |
+ display_(display), |
+ last_seen_server_time_(CurrentTime), |
+ continue_stream_(true) { |
DCHECK(!instance_); |
instance_ = this; |
@@ -102,6 +105,7 @@ void X11EventSource::ExtractCookieDataDispatchEvent(XEvent* xevent) { |
XGetEventData(xevent->xgeneric.display, &xevent->xcookie)) { |
have_cookie = true; |
} |
+ ExtractTimeFromXEvent(*xevent); |
delegate_->ProcessXEvent(xevent); |
PostDispatchEvent(xevent); |
if (have_cookie) |
@@ -126,6 +130,42 @@ void X11EventSource::PostDispatchEvent(XEvent* xevent) { |
} |
} |
+void X11EventSource::ExtractTimeFromXEvent(const XEvent& xevent) { |
dcheng
2016/04/19 21:56:45
An alternative was to stash the timestamp off http
|
+ switch (xevent.type) { |
+ case KeyPress: |
+ case KeyRelease: |
+ last_seen_server_time_ = xevent.xkey.time; |
+ return; |
+ case ButtonPress: |
+ case ButtonRelease: |
+ last_seen_server_time_ = xevent.xbutton.time; |
+ return; |
+ case MotionNotify: |
+ last_seen_server_time_ = xevent.xmotion.time; |
+ return; |
+ case EnterNotify: |
+ case LeaveNotify: |
+ last_seen_server_time_ = xevent.xcrossing.time; |
+ return; |
+ case PropertyNotify: |
+ last_seen_server_time_ = xevent.xproperty.time; |
+ return; |
+ case SelectionClear: |
+ last_seen_server_time_ = xevent.xselectionclear.time; |
+ return; |
+ case SelectionRequest: |
+ last_seen_server_time_ = xevent.xselectionrequest.time; |
+ return; |
+ case SelectionNotify: |
+ last_seen_server_time_ = xevent.xselection.time; |
+ return; |
+ case GenericEvent: |
+ last_seen_server_time_ = |
dcheng
2016/04/19 21:56:45
I have no idea how this is safe, but other code se
|
+ static_cast<XIDeviceEvent*>(xevent.xcookie.data)->time; |
+ return; |
+ } |
+} |
+ |
void X11EventSource::StopCurrentEventStream() { |
continue_stream_ = false; |
} |