| Index: ui/aura/test/x11_event_sender.cc
|
| diff --git a/ui/aura/test/x11_event_sender.cc b/ui/aura/test/x11_event_sender.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..bc58502d18a91c2c0c051b7dc5c0807ef3f5c70c
|
| --- /dev/null
|
| +++ b/ui/aura/test/x11_event_sender.cc
|
| @@ -0,0 +1,49 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "ui/aura/test/x11_event_sender.h"
|
| +
|
| +#include <X11/Xlib.h>
|
| +
|
| +#include "ui/aura/window_tree_host.h"
|
| +#include "ui/gfx/geometry/point.h"
|
| +
|
| +namespace aura {
|
| +namespace test {
|
| +
|
| +void PostEventToWindowTreeHost(const XEvent& xevent, WindowTreeHost* host) {
|
| + XDisplay* xdisplay = gfx::GetXDisplay();
|
| + XID xwindow = host->GetAcceleratedWidget();
|
| + XEvent event = xevent;
|
| + event.xany.display = xdisplay;
|
| + event.xany.window = xwindow;
|
| +
|
| + switch (event.type) {
|
| + case EnterNotify:
|
| + case LeaveNotify:
|
| + case MotionNotify:
|
| + case KeyPress:
|
| + case KeyRelease:
|
| + case ButtonPress:
|
| + case ButtonRelease: {
|
| + // The fields used below are in the same place for all of events
|
| + // above. Using xmotion from XEvent's unions to avoid repeating
|
| + // the code.
|
| + event.xmotion.root = DefaultRootWindow(event.xany.display);
|
| + event.xmotion.time = CurrentTime;
|
| +
|
| + gfx::Point point(event.xmotion.x, event.xmotion.y);
|
| + host->ConvertPointToNativeScreen(&point);
|
| + event.xmotion.x_root = point.x();
|
| + event.xmotion.y_root = point.y();
|
| + }
|
| + default:
|
| + break;
|
| + }
|
| + XSendEvent(xdisplay, xwindow, False, 0, &event);
|
| + XFlush(xdisplay);
|
| +}
|
| +
|
| +} // namespace test
|
| +} // namespace aura
|
|
|