Index: ui/ozone/platform/wayland/fake_server.cc |
diff --git a/ui/ozone/platform/wayland/fake_server.cc b/ui/ozone/platform/wayland/fake_server.cc |
index 2afc547aa2b2e66dcd35223b13e23cedc4535e3e..5728d745f005028865d2cdc53bd3baa41e04cf3a 100644 |
--- a/ui/ozone/platform/wayland/fake_server.cc |
+++ b/ui/ozone/platform/wayland/fake_server.cc |
@@ -16,6 +16,7 @@ namespace wl { |
namespace { |
const uint32_t kCompositorVersion = 4; |
+const uint32_t kSeatVersion = 4; |
const uint32_t kXdgShellVersion = 1; |
void DestroyResource(wl_client* client, wl_resource* resource) { |
@@ -120,6 +121,33 @@ const struct xdg_shell_interface xdg_shell_impl = { |
&Pong, // pong |
}; |
+// wl_seat |
+ |
+void GetPointer(wl_client* client, wl_resource* resource, uint32_t id) { |
+ auto seat = static_cast<MockSeat*>(wl_resource_get_user_data(resource)); |
+ wl_resource* pointer_resource = wl_resource_create( |
+ client, &wl_pointer_interface, wl_resource_get_version(resource), id); |
+ if (!pointer_resource) { |
+ wl_client_post_no_memory(client); |
+ return; |
+ } |
+ seat->pointer.reset(new MockPointer(pointer_resource)); |
+} |
+ |
+const struct wl_seat_interface seat_impl = { |
+ &GetPointer, // get_pointer |
+ nullptr, // get_keyboard |
+ nullptr, // get_touch, |
+ &DestroyResource, // release |
+}; |
+ |
+// wl_pointer |
+ |
+const struct wl_pointer_interface pointer_impl = { |
+ nullptr, // set_cursor |
+ &DestroyResource, // release |
+}; |
+ |
// xdg_surface |
void SetTitle(wl_client* client, wl_resource* resource, const char* title) { |
@@ -207,6 +235,13 @@ MockSurface* MockSurface::FromResource(wl_resource* resource) { |
return static_cast<MockSurface*>(wl_resource_get_user_data(resource)); |
} |
+MockPointer::MockPointer(wl_resource* resource) : ServerObject(resource) { |
+ wl_resource_set_implementation(resource, &pointer_impl, this, |
+ &ServerObject::OnResourceDestroyed); |
+} |
+ |
+MockPointer::~MockPointer() {} |
+ |
void GlobalDeleter::operator()(wl_global* global) { |
wl_global_destroy(global); |
} |
@@ -259,6 +294,10 @@ void MockCompositor::AddSurface(scoped_ptr<MockSurface> surface) { |
surfaces_.push_back(std::move(surface)); |
} |
+MockSeat::MockSeat() : Global(&wl_seat_interface, &seat_impl, kSeatVersion) {} |
+ |
+MockSeat::~MockSeat() {} |
+ |
MockXdgShell::MockXdgShell() |
: Global(&xdg_shell_interface, &xdg_shell_impl, kXdgShellVersion) {} |
@@ -293,6 +332,8 @@ bool FakeServer::Start() { |
return false; |
if (!compositor_.Initialize(display_.get())) |
return false; |
+ if (!seat_.Initialize(display_.get())) |
+ return false; |
if (!xdg_shell_.Initialize(display_.get())) |
return false; |