Chromium Code Reviews| 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; |
| } |