// 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 #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