OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/exo/wayland/server.h" | 5 #include "components/exo/wayland/server.h" |
6 | 6 |
7 #include <linux/input.h> | 7 #include <linux/input.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 #include <wayland-server-core.h> | 10 #include <wayland-server-core.h> |
11 #include <wayland-server-protocol-core.h> | 11 #include <wayland-server-protocol-core.h> |
12 #include <xdg-shell-unstable-v5-server-protocol.h> | 12 #include <xdg-shell-unstable-v5-server-protocol.h> |
13 | |
14 #include <algorithm> | 13 #include <algorithm> |
| 14 #include <utility> |
15 | 15 |
16 #include "base/bind.h" | 16 #include "base/bind.h" |
17 #include "base/cancelable_callback.h" | 17 #include "base/cancelable_callback.h" |
18 #include "base/macros.h" | 18 #include "base/macros.h" |
19 #include "base/strings/utf_string_conversions.h" | 19 #include "base/strings/utf_string_conversions.h" |
20 #include "components/exo/buffer.h" | 20 #include "components/exo/buffer.h" |
21 #include "components/exo/display.h" | 21 #include "components/exo/display.h" |
22 #include "components/exo/keyboard.h" | 22 #include "components/exo/keyboard.h" |
23 #include "components/exo/keyboard_delegate.h" | 23 #include "components/exo/keyboard_delegate.h" |
24 #include "components/exo/pointer.h" | 24 #include "components/exo/pointer.h" |
(...skipping 25 matching lines...) Expand all Loading... |
50 | 50 |
51 template <class T> | 51 template <class T> |
52 T* GetUserDataAs(wl_resource* resource) { | 52 T* GetUserDataAs(wl_resource* resource) { |
53 return static_cast<T*>(wl_resource_get_user_data(resource)); | 53 return static_cast<T*>(wl_resource_get_user_data(resource)); |
54 } | 54 } |
55 | 55 |
56 template <class T> | 56 template <class T> |
57 scoped_ptr<T> TakeUserDataAs(wl_resource* resource) { | 57 scoped_ptr<T> TakeUserDataAs(wl_resource* resource) { |
58 scoped_ptr<T> user_data = make_scoped_ptr(GetUserDataAs<T>(resource)); | 58 scoped_ptr<T> user_data = make_scoped_ptr(GetUserDataAs<T>(resource)); |
59 wl_resource_set_user_data(resource, nullptr); | 59 wl_resource_set_user_data(resource, nullptr); |
60 return user_data.Pass(); | 60 return user_data; |
61 } | 61 } |
62 | 62 |
63 template <class T> | 63 template <class T> |
64 void DestroyUserData(wl_resource* resource) { | 64 void DestroyUserData(wl_resource* resource) { |
65 TakeUserDataAs<T>(resource); | 65 TakeUserDataAs<T>(resource); |
66 } | 66 } |
67 | 67 |
68 template <class T> | 68 template <class T> |
69 void SetImplementation(wl_resource* resource, | 69 void SetImplementation(wl_resource* resource, |
70 const void* implementation, | 70 const void* implementation, |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 | 141 |
142 // base::Unretained is safe as the resource owns the callback. | 142 // base::Unretained is safe as the resource owns the callback. |
143 scoped_ptr<base::CancelableCallback<void(base::TimeTicks)>> | 143 scoped_ptr<base::CancelableCallback<void(base::TimeTicks)>> |
144 cancelable_callback(new base::CancelableCallback<void(base::TimeTicks)>( | 144 cancelable_callback(new base::CancelableCallback<void(base::TimeTicks)>( |
145 base::Bind(&handle_surface_frame_callback, | 145 base::Bind(&handle_surface_frame_callback, |
146 base::Unretained(callback_resource)))); | 146 base::Unretained(callback_resource)))); |
147 | 147 |
148 GetUserDataAs<Surface>(resource) | 148 GetUserDataAs<Surface>(resource) |
149 ->RequestFrameCallback(cancelable_callback->callback()); | 149 ->RequestFrameCallback(cancelable_callback->callback()); |
150 | 150 |
151 SetImplementation(callback_resource, nullptr, cancelable_callback.Pass()); | 151 SetImplementation(callback_resource, nullptr, std::move(cancelable_callback)); |
152 } | 152 } |
153 | 153 |
154 void surface_set_opaque_region(wl_client* client, | 154 void surface_set_opaque_region(wl_client* client, |
155 wl_resource* resource, | 155 wl_resource* resource, |
156 wl_resource* region_resource) { | 156 wl_resource* region_resource) { |
157 GetUserDataAs<Surface>(resource)->SetOpaqueRegion( | 157 GetUserDataAs<Surface>(resource)->SetOpaqueRegion( |
158 region_resource ? *GetUserDataAs<SkRegion>(region_resource) | 158 region_resource ? *GetUserDataAs<SkRegion>(region_resource) |
159 : SkRegion(SkIRect::MakeEmpty())); | 159 : SkRegion(SkIRect::MakeEmpty())); |
160 } | 160 } |
161 | 161 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 wl_resource* surface_resource = wl_resource_create( | 235 wl_resource* surface_resource = wl_resource_create( |
236 client, &wl_surface_interface, wl_resource_get_version(resource), id); | 236 client, &wl_surface_interface, wl_resource_get_version(resource), id); |
237 if (!surface_resource) { | 237 if (!surface_resource) { |
238 wl_resource_post_no_memory(resource); | 238 wl_resource_post_no_memory(resource); |
239 return; | 239 return; |
240 } | 240 } |
241 | 241 |
242 // Set the surface resource property for type-checking downcast support. | 242 // Set the surface resource property for type-checking downcast support. |
243 surface->SetProperty(kSurfaceResourceKey, surface_resource); | 243 surface->SetProperty(kSurfaceResourceKey, surface_resource); |
244 | 244 |
245 SetImplementation(surface_resource, &surface_implementation, surface.Pass()); | 245 SetImplementation(surface_resource, &surface_implementation, |
| 246 std::move(surface)); |
246 } | 247 } |
247 | 248 |
248 void compositor_create_region(wl_client* client, | 249 void compositor_create_region(wl_client* client, |
249 wl_resource* resource, | 250 wl_resource* resource, |
250 uint32_t id) { | 251 uint32_t id) { |
251 scoped_ptr<SkRegion> region(new SkRegion); | 252 scoped_ptr<SkRegion> region(new SkRegion); |
252 | 253 |
253 wl_resource* region_resource = | 254 wl_resource* region_resource = |
254 wl_resource_create(client, &wl_region_interface, 1, id); | 255 wl_resource_create(client, &wl_region_interface, 1, id); |
255 if (!region_resource) { | 256 if (!region_resource) { |
256 wl_resource_post_no_memory(resource); | 257 wl_resource_post_no_memory(resource); |
257 return; | 258 return; |
258 } | 259 } |
259 | 260 |
260 SetImplementation(region_resource, ®ion_implementation, region.Pass()); | 261 SetImplementation(region_resource, ®ion_implementation, std::move(region)); |
261 } | 262 } |
262 | 263 |
263 const struct wl_compositor_interface compositor_implementation = { | 264 const struct wl_compositor_interface compositor_implementation = { |
264 compositor_create_surface, compositor_create_region}; | 265 compositor_create_surface, compositor_create_region}; |
265 | 266 |
266 const uint32_t compositor_version = 3; | 267 const uint32_t compositor_version = 3; |
267 | 268 |
268 void bind_compositor(wl_client* client, | 269 void bind_compositor(wl_client* client, |
269 void* data, | 270 void* data, |
270 uint32_t version, | 271 uint32_t version, |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 wl_resource* buffer_resource = | 333 wl_resource* buffer_resource = |
333 wl_resource_create(client, &wl_buffer_interface, 1, id); | 334 wl_resource_create(client, &wl_buffer_interface, 1, id); |
334 if (!buffer_resource) { | 335 if (!buffer_resource) { |
335 wl_resource_post_no_memory(resource); | 336 wl_resource_post_no_memory(resource); |
336 return; | 337 return; |
337 } | 338 } |
338 | 339 |
339 buffer->set_release_callback( | 340 buffer->set_release_callback( |
340 base::Bind(&wl_buffer_send_release, base::Unretained(buffer_resource))); | 341 base::Bind(&wl_buffer_send_release, base::Unretained(buffer_resource))); |
341 | 342 |
342 SetImplementation(buffer_resource, &buffer_implementation, buffer.Pass()); | 343 SetImplementation(buffer_resource, &buffer_implementation, std::move(buffer)); |
343 } | 344 } |
344 | 345 |
345 void shm_pool_destroy(wl_client* client, wl_resource* resource) { | 346 void shm_pool_destroy(wl_client* client, wl_resource* resource) { |
346 wl_resource_destroy(resource); | 347 wl_resource_destroy(resource); |
347 } | 348 } |
348 | 349 |
349 void shm_pool_resize(wl_client* client, wl_resource* resource, int32_t size) { | 350 void shm_pool_resize(wl_client* client, wl_resource* resource, int32_t size) { |
350 // Nothing to do here. | 351 // Nothing to do here. |
351 } | 352 } |
352 | 353 |
(...skipping 17 matching lines...) Expand all Loading... |
370 } | 371 } |
371 | 372 |
372 wl_resource* shm_pool_resource = | 373 wl_resource* shm_pool_resource = |
373 wl_resource_create(client, &wl_shm_pool_interface, 1, id); | 374 wl_resource_create(client, &wl_shm_pool_interface, 1, id); |
374 if (!shm_pool_resource) { | 375 if (!shm_pool_resource) { |
375 wl_resource_post_no_memory(resource); | 376 wl_resource_post_no_memory(resource); |
376 return; | 377 return; |
377 } | 378 } |
378 | 379 |
379 SetImplementation(shm_pool_resource, &shm_pool_implementation, | 380 SetImplementation(shm_pool_resource, &shm_pool_implementation, |
380 shared_memory.Pass()); | 381 std::move(shared_memory)); |
381 } | 382 } |
382 | 383 |
383 const struct wl_shm_interface shm_implementation = {shm_create_pool}; | 384 const struct wl_shm_interface shm_implementation = {shm_create_pool}; |
384 | 385 |
385 void bind_shm(wl_client* client, void* data, uint32_t version, uint32_t id) { | 386 void bind_shm(wl_client* client, void* data, uint32_t version, uint32_t id) { |
386 wl_resource* resource = wl_resource_create(client, &wl_shm_interface, 1, id); | 387 wl_resource* resource = wl_resource_create(client, &wl_shm_interface, 1, id); |
387 if (!resource) { | 388 if (!resource) { |
388 wl_client_post_no_memory(client); | 389 wl_client_post_no_memory(client); |
389 return; | 390 return; |
390 } | 391 } |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
574 } | 575 } |
575 | 576 |
576 wl_resource* subsurface_resource = | 577 wl_resource* subsurface_resource = |
577 wl_resource_create(client, &wl_subsurface_interface, 1, id); | 578 wl_resource_create(client, &wl_subsurface_interface, 1, id); |
578 if (!subsurface_resource) { | 579 if (!subsurface_resource) { |
579 wl_resource_post_no_memory(resource); | 580 wl_resource_post_no_memory(resource); |
580 return; | 581 return; |
581 } | 582 } |
582 | 583 |
583 SetImplementation(subsurface_resource, &subsurface_implementation, | 584 SetImplementation(subsurface_resource, &subsurface_implementation, |
584 subsurface.Pass()); | 585 std::move(subsurface)); |
585 } | 586 } |
586 | 587 |
587 const struct wl_subcompositor_interface subcompositor_implementation = { | 588 const struct wl_subcompositor_interface subcompositor_implementation = { |
588 subcompositor_destroy, subcompositor_get_subsurface}; | 589 subcompositor_destroy, subcompositor_get_subsurface}; |
589 | 590 |
590 void bind_subcompositor(wl_client* client, | 591 void bind_subcompositor(wl_client* client, |
591 void* data, | 592 void* data, |
592 uint32_t version, | 593 uint32_t version, |
593 uint32_t id) { | 594 uint32_t id) { |
594 wl_resource* resource = | 595 wl_resource* resource = |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
699 } | 700 } |
700 | 701 |
701 wl_resource* shell_surface_resource = | 702 wl_resource* shell_surface_resource = |
702 wl_resource_create(client, &wl_shell_surface_interface, 1, id); | 703 wl_resource_create(client, &wl_shell_surface_interface, 1, id); |
703 if (!shell_surface_resource) { | 704 if (!shell_surface_resource) { |
704 wl_resource_post_no_memory(resource); | 705 wl_resource_post_no_memory(resource); |
705 return; | 706 return; |
706 } | 707 } |
707 | 708 |
708 SetImplementation(shell_surface_resource, &shell_surface_implementation, | 709 SetImplementation(shell_surface_resource, &shell_surface_implementation, |
709 shell_surface.Pass()); | 710 std::move(shell_surface)); |
710 } | 711 } |
711 | 712 |
712 const struct wl_shell_interface shell_implementation = { | 713 const struct wl_shell_interface shell_implementation = { |
713 shell_get_shell_surface}; | 714 shell_get_shell_surface}; |
714 | 715 |
715 void bind_shell(wl_client* client, void* data, uint32_t version, uint32_t id) { | 716 void bind_shell(wl_client* client, void* data, uint32_t version, uint32_t id) { |
716 wl_resource* resource = | 717 wl_resource* resource = |
717 wl_resource_create(client, &wl_shell_interface, 1, id); | 718 wl_resource_create(client, &wl_shell_interface, 1, id); |
718 if (!resource) { | 719 if (!resource) { |
719 wl_client_post_no_memory(client); | 720 wl_client_post_no_memory(client); |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
864 wl_resource_create(client, &xdg_surface_interface, 1, id); | 865 wl_resource_create(client, &xdg_surface_interface, 1, id); |
865 if (!xdg_surface_resource) { | 866 if (!xdg_surface_resource) { |
866 wl_resource_post_no_memory(resource); | 867 wl_resource_post_no_memory(resource); |
867 return; | 868 return; |
868 } | 869 } |
869 | 870 |
870 // An XdgSurface is a toplevel shell surface. | 871 // An XdgSurface is a toplevel shell surface. |
871 shell_surface->SetToplevel(); | 872 shell_surface->SetToplevel(); |
872 | 873 |
873 SetImplementation(xdg_surface_resource, &xdg_surface_implementation, | 874 SetImplementation(xdg_surface_resource, &xdg_surface_implementation, |
874 shell_surface.Pass()); | 875 std::move(shell_surface)); |
875 } | 876 } |
876 | 877 |
877 void xdg_shell_get_xdg_popup(wl_client* client, | 878 void xdg_shell_get_xdg_popup(wl_client* client, |
878 wl_resource* resource, | 879 wl_resource* resource, |
879 uint32_t id, | 880 uint32_t id, |
880 wl_resource* surface, | 881 wl_resource* surface, |
881 wl_resource* parent, | 882 wl_resource* parent, |
882 wl_resource* seat, | 883 wl_resource* seat, |
883 uint32_t serial, | 884 uint32_t serial, |
884 int32_t x, | 885 int32_t x, |
(...skipping 560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1445 DCHECK(event_loop); | 1446 DCHECK(event_loop); |
1446 wl_event_loop_dispatch(event_loop, timeout.InMilliseconds()); | 1447 wl_event_loop_dispatch(event_loop, timeout.InMilliseconds()); |
1447 } | 1448 } |
1448 | 1449 |
1449 void Server::Flush() { | 1450 void Server::Flush() { |
1450 wl_display_flush_clients(wl_display_.get()); | 1451 wl_display_flush_clients(wl_display_.get()); |
1451 } | 1452 } |
1452 | 1453 |
1453 } // namespace wayland | 1454 } // namespace wayland |
1454 } // namespace exo | 1455 } // namespace exo |
OLD | NEW |