| 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..f577b3df406044bafbbecc5d0a556cdedb56ea57 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,9 @@ void X11EventSource::ExtractCookieDataDispatchEvent(XEvent* xevent) {
|
| XGetEventData(xevent->xgeneric.display, &xevent->xcookie)) {
|
| have_cookie = true;
|
| }
|
| + Time event_time = ExtractTimeFromXEvent(*xevent);
|
| + if (event_time != CurrentTime)
|
| + last_seen_server_time_ = event_time;
|
| delegate_->ProcessXEvent(xevent);
|
| PostDispatchEvent(xevent);
|
| if (have_cookie)
|
| @@ -126,6 +132,33 @@ void X11EventSource::PostDispatchEvent(XEvent* xevent) {
|
| }
|
| }
|
|
|
| +Time X11EventSource::ExtractTimeFromXEvent(const XEvent& xevent) {
|
| + switch (xevent.type) {
|
| + case KeyPress:
|
| + case KeyRelease:
|
| + return xevent.xkey.time;
|
| + case ButtonPress:
|
| + case ButtonRelease:
|
| + return xevent.xbutton.time;
|
| + case MotionNotify:
|
| + return xevent.xmotion.time;
|
| + case EnterNotify:
|
| + case LeaveNotify:
|
| + return xevent.xcrossing.time;
|
| + case PropertyNotify:
|
| + return xevent.xproperty.time;
|
| + case SelectionClear:
|
| + return xevent.xselectionclear.time;
|
| + case SelectionRequest:
|
| + return xevent.xselectionrequest.time;
|
| + case SelectionNotify:
|
| + return xevent.xselection.time;
|
| + case GenericEvent:
|
| + return static_cast<XIDeviceEvent*>(xevent.xcookie.data)->time;
|
| + }
|
| + return CurrentTime;
|
| +}
|
| +
|
| void X11EventSource::StopCurrentEventStream() {
|
| continue_stream_ = false;
|
| }
|
|
|