Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1595)

Side by Side Diff: components/exo/wayland/server.cc

Issue 1717773002: exo: Remove unnecessary wl_*_post_no_memory calls. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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>
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 void surface_destroy(wl_client* client, wl_resource* resource) { 100 void surface_destroy(wl_client* client, wl_resource* resource) {
101 wl_resource_destroy(resource); 101 wl_resource_destroy(resource);
102 } 102 }
103 103
104 void surface_attach(wl_client* client, 104 void surface_attach(wl_client* client,
105 wl_resource* resource, 105 wl_resource* resource,
106 wl_resource* buffer, 106 wl_resource* buffer,
107 int32_t x, 107 int32_t x,
108 int32_t y) { 108 int32_t y) {
109 // TODO(reveman): Implement buffer offset support. 109 // TODO(reveman): Implement buffer offset support.
110 if (x || y) { 110 DLOG_IF(WARNING, x || y) << "Unsupported buffer offset: "
111 wl_resource_post_no_memory(resource); 111 << gfx::Point(x, y).ToString();
112 return;
113 }
114 112
115 GetUserDataAs<Surface>(resource) 113 GetUserDataAs<Surface>(resource)
116 ->Attach(buffer ? GetUserDataAs<Buffer>(buffer) : nullptr); 114 ->Attach(buffer ? GetUserDataAs<Buffer>(buffer) : nullptr);
117 } 115 }
118 116
119 void surface_damage(wl_client* client, 117 void surface_damage(wl_client* client,
120 wl_resource* resource, 118 wl_resource* resource,
121 int32_t x, 119 int32_t x,
122 int32_t y, 120 int32_t y,
123 int32_t width, 121 int32_t width,
(...skipping 11 matching lines...) Expand all
135 wl_client_flush(wl_resource_get_client(resource)); 133 wl_client_flush(wl_resource_get_client(resource));
136 } 134 }
137 wl_resource_destroy(resource); 135 wl_resource_destroy(resource);
138 } 136 }
139 137
140 void surface_frame(wl_client* client, 138 void surface_frame(wl_client* client,
141 wl_resource* resource, 139 wl_resource* resource,
142 uint32_t callback) { 140 uint32_t callback) {
143 wl_resource* callback_resource = 141 wl_resource* callback_resource =
144 wl_resource_create(client, &wl_callback_interface, 1, callback); 142 wl_resource_create(client, &wl_callback_interface, 1, callback);
145 if (!callback_resource) {
146 wl_resource_post_no_memory(resource);
147 return;
148 }
149 143
150 // base::Unretained is safe as the resource owns the callback. 144 // base::Unretained is safe as the resource owns the callback.
151 scoped_ptr<base::CancelableCallback<void(base::TimeTicks)>> 145 scoped_ptr<base::CancelableCallback<void(base::TimeTicks)>>
152 cancelable_callback( 146 cancelable_callback(
153 new base::CancelableCallback<void(base::TimeTicks)>(base::Bind( 147 new base::CancelableCallback<void(base::TimeTicks)>(base::Bind(
154 &HandleSurfaceFrameCallback, base::Unretained(callback_resource)))); 148 &HandleSurfaceFrameCallback, base::Unretained(callback_resource))));
155 149
156 GetUserDataAs<Surface>(resource) 150 GetUserDataAs<Surface>(resource)
157 ->RequestFrameCallback(cancelable_callback->callback()); 151 ->RequestFrameCallback(cancelable_callback->callback());
158 152
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 region_destroy, region_add, region_subtract}; 235 region_destroy, region_add, region_subtract};
242 236
243 //////////////////////////////////////////////////////////////////////////////// 237 ////////////////////////////////////////////////////////////////////////////////
244 // wl_compositor_interface: 238 // wl_compositor_interface:
245 239
246 void compositor_create_surface(wl_client* client, 240 void compositor_create_surface(wl_client* client,
247 wl_resource* resource, 241 wl_resource* resource,
248 uint32_t id) { 242 uint32_t id) {
249 scoped_ptr<Surface> surface = 243 scoped_ptr<Surface> surface =
250 GetUserDataAs<Display>(resource)->CreateSurface(); 244 GetUserDataAs<Display>(resource)->CreateSurface();
251 DCHECK(surface);
252 245
253 wl_resource* surface_resource = wl_resource_create( 246 wl_resource* surface_resource = wl_resource_create(
254 client, &wl_surface_interface, wl_resource_get_version(resource), id); 247 client, &wl_surface_interface, wl_resource_get_version(resource), id);
255 if (!surface_resource) {
256 wl_resource_post_no_memory(resource);
257 return;
258 }
259 248
260 // Set the surface resource property for type-checking downcast support. 249 // Set the surface resource property for type-checking downcast support.
261 surface->SetProperty(kSurfaceResourceKey, surface_resource); 250 surface->SetProperty(kSurfaceResourceKey, surface_resource);
262 251
263 SetImplementation(surface_resource, &surface_implementation, 252 SetImplementation(surface_resource, &surface_implementation,
264 std::move(surface)); 253 std::move(surface));
265 } 254 }
266 255
267 void compositor_create_region(wl_client* client, 256 void compositor_create_region(wl_client* client,
268 wl_resource* resource, 257 wl_resource* resource,
269 uint32_t id) { 258 uint32_t id) {
270 scoped_ptr<SkRegion> region(new SkRegion);
271
272 wl_resource* region_resource = 259 wl_resource* region_resource =
273 wl_resource_create(client, &wl_region_interface, 1, id); 260 wl_resource_create(client, &wl_region_interface, 1, id);
274 if (!region_resource) {
275 wl_resource_post_no_memory(resource);
276 return;
277 }
278 261
279 SetImplementation(region_resource, &region_implementation, std::move(region)); 262 SetImplementation(region_resource, &region_implementation,
263 make_scoped_ptr(new SkRegion));
280 } 264 }
281 265
282 const struct wl_compositor_interface compositor_implementation = { 266 const struct wl_compositor_interface compositor_implementation = {
283 compositor_create_surface, compositor_create_region}; 267 compositor_create_surface, compositor_create_region};
284 268
285 const uint32_t compositor_version = 3; 269 const uint32_t compositor_version = 3;
286 270
287 void bind_compositor(wl_client* client, 271 void bind_compositor(wl_client* client,
288 void* data, 272 void* data,
289 uint32_t version, 273 uint32_t version,
290 uint32_t id) { 274 uint32_t id) {
291 wl_resource* resource = 275 wl_resource* resource =
292 wl_resource_create(client, &wl_compositor_interface, 276 wl_resource_create(client, &wl_compositor_interface,
293 std::min(version, compositor_version), id); 277 std::min(version, compositor_version), id);
294 if (!resource) {
295 wl_client_post_no_memory(client);
296 return;
297 }
298 278
299 wl_resource_set_implementation(resource, &compositor_implementation, data, 279 wl_resource_set_implementation(resource, &compositor_implementation, data,
300 nullptr); 280 nullptr);
301 } 281 }
302 282
303 //////////////////////////////////////////////////////////////////////////////// 283 ////////////////////////////////////////////////////////////////////////////////
304 // wl_shm_pool_interface: 284 // wl_shm_pool_interface:
305 285
306 const struct shm_supported_format { 286 const struct shm_supported_format {
307 uint32_t shm_format; 287 uint32_t shm_format;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 GetUserDataAs<SharedMemory>(resource) 323 GetUserDataAs<SharedMemory>(resource)
344 ->CreateBuffer(gfx::Size(width, height), 324 ->CreateBuffer(gfx::Size(width, height),
345 supported_format->buffer_format, offset, stride); 325 supported_format->buffer_format, offset, stride);
346 if (!buffer) { 326 if (!buffer) {
347 wl_resource_post_no_memory(resource); 327 wl_resource_post_no_memory(resource);
348 return; 328 return;
349 } 329 }
350 330
351 wl_resource* buffer_resource = 331 wl_resource* buffer_resource =
352 wl_resource_create(client, &wl_buffer_interface, 1, id); 332 wl_resource_create(client, &wl_buffer_interface, 1, id);
353 if (!buffer_resource) {
354 wl_resource_post_no_memory(resource);
355 return;
356 }
357 333
358 buffer->set_release_callback(base::Bind(&HandleBufferReleaseCallback, 334 buffer->set_release_callback(base::Bind(&HandleBufferReleaseCallback,
359 base::Unretained(buffer_resource))); 335 base::Unretained(buffer_resource)));
360 336
361 SetImplementation(buffer_resource, &buffer_implementation, std::move(buffer)); 337 SetImplementation(buffer_resource, &buffer_implementation, std::move(buffer));
362 } 338 }
363 339
364 void shm_pool_destroy(wl_client* client, wl_resource* resource) { 340 void shm_pool_destroy(wl_client* client, wl_resource* resource) {
365 wl_resource_destroy(resource); 341 wl_resource_destroy(resource);
366 } 342 }
(...skipping 16 matching lines...) Expand all
383 scoped_ptr<SharedMemory> shared_memory = 359 scoped_ptr<SharedMemory> shared_memory =
384 GetUserDataAs<Display>(resource) 360 GetUserDataAs<Display>(resource)
385 ->CreateSharedMemory(base::FileDescriptor(fd, true), size); 361 ->CreateSharedMemory(base::FileDescriptor(fd, true), size);
386 if (!shared_memory) { 362 if (!shared_memory) {
387 wl_resource_post_no_memory(resource); 363 wl_resource_post_no_memory(resource);
388 return; 364 return;
389 } 365 }
390 366
391 wl_resource* shm_pool_resource = 367 wl_resource* shm_pool_resource =
392 wl_resource_create(client, &wl_shm_pool_interface, 1, id); 368 wl_resource_create(client, &wl_shm_pool_interface, 1, id);
393 if (!shm_pool_resource) {
394 wl_resource_post_no_memory(resource);
395 return;
396 }
397 369
398 SetImplementation(shm_pool_resource, &shm_pool_implementation, 370 SetImplementation(shm_pool_resource, &shm_pool_implementation,
399 std::move(shared_memory)); 371 std::move(shared_memory));
400 } 372 }
401 373
402 const struct wl_shm_interface shm_implementation = {shm_create_pool}; 374 const struct wl_shm_interface shm_implementation = {shm_create_pool};
403 375
404 void bind_shm(wl_client* client, void* data, uint32_t version, uint32_t id) { 376 void bind_shm(wl_client* client, void* data, uint32_t version, uint32_t id) {
405 wl_resource* resource = wl_resource_create(client, &wl_shm_interface, 1, id); 377 wl_resource* resource = wl_resource_create(client, &wl_shm_interface, 1, id);
406 if (!resource) {
407 wl_client_post_no_memory(client);
408 return;
409 }
410 378
411 wl_resource_set_implementation(resource, &shm_implementation, data, nullptr); 379 wl_resource_set_implementation(resource, &shm_implementation, data, nullptr);
412 380
413 for (const auto& supported_format : shm_supported_formats) 381 for (const auto& supported_format : shm_supported_formats)
414 wl_shm_send_format(resource, supported_format.shm_format); 382 wl_shm_send_format(resource, supported_format.shm_format);
415 } 383 }
416 384
417 #if defined(USE_OZONE) 385 #if defined(USE_OZONE)
418 386
419 //////////////////////////////////////////////////////////////////////////////// 387 ////////////////////////////////////////////////////////////////////////////////
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 GetUserDataAs<Display>(resource) 459 GetUserDataAs<Display>(resource)
492 ->CreatePrimeBuffer(base::ScopedFD(name), gfx::Size(width, height), 460 ->CreatePrimeBuffer(base::ScopedFD(name), gfx::Size(width, height),
493 supported_format->buffer_format, stride0); 461 supported_format->buffer_format, stride0);
494 if (!buffer) { 462 if (!buffer) {
495 wl_resource_post_no_memory(resource); 463 wl_resource_post_no_memory(resource);
496 return; 464 return;
497 } 465 }
498 466
499 wl_resource* buffer_resource = 467 wl_resource* buffer_resource =
500 wl_resource_create(client, &wl_buffer_interface, 1, id); 468 wl_resource_create(client, &wl_buffer_interface, 1, id);
501 if (!buffer_resource) {
502 wl_resource_post_no_memory(resource);
503 return;
504 }
505 469
506 buffer->set_release_callback(base::Bind(&HandleBufferReleaseCallback, 470 buffer->set_release_callback(base::Bind(&HandleBufferReleaseCallback,
507 base::Unretained(buffer_resource))); 471 base::Unretained(buffer_resource)));
508 472
509 SetImplementation(buffer_resource, &buffer_implementation, std::move(buffer)); 473 SetImplementation(buffer_resource, &buffer_implementation, std::move(buffer));
510 } 474 }
511 475
512 const struct wl_drm_interface drm_implementation = { 476 const struct wl_drm_interface drm_implementation = {
513 drm_authenticate, drm_create_buffer, drm_create_planar_buffer, 477 drm_authenticate, drm_create_buffer, drm_create_planar_buffer,
514 drm_create_prime_buffer}; 478 drm_create_prime_buffer};
515 479
516 const uint32_t drm_version = 2; 480 const uint32_t drm_version = 2;
517 481
518 void bind_drm(wl_client* client, void* data, uint32_t version, uint32_t id) { 482 void bind_drm(wl_client* client, void* data, uint32_t version, uint32_t id) {
519 wl_resource* resource = wl_resource_create( 483 wl_resource* resource = wl_resource_create(
520 client, &wl_drm_interface, std::min(version, drm_version), id); 484 client, &wl_drm_interface, std::min(version, drm_version), id);
521 if (!resource) { 485
522 wl_client_post_no_memory(client);
523 return;
524 }
525 wl_resource_set_implementation(resource, &drm_implementation, data, nullptr); 486 wl_resource_set_implementation(resource, &drm_implementation, data, nullptr);
526 487
527 if (version >= 2) 488 if (version >= 2)
528 wl_drm_send_capabilities(resource, WL_DRM_CAPABILITY_PRIME); 489 wl_drm_send_capabilities(resource, WL_DRM_CAPABILITY_PRIME);
529 490
530 for (const auto& supported_format : drm_supported_formats) 491 for (const auto& supported_format : drm_supported_formats)
531 wl_drm_send_format(resource, supported_format.drm_format); 492 wl_drm_send_format(resource, supported_format.drm_format);
532 } 493 }
533 #endif 494 #endif
534 495
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 542
582 void subcompositor_get_subsurface(wl_client* client, 543 void subcompositor_get_subsurface(wl_client* client,
583 wl_resource* resource, 544 wl_resource* resource,
584 uint32_t id, 545 uint32_t id,
585 wl_resource* surface, 546 wl_resource* surface,
586 wl_resource* parent) { 547 wl_resource* parent) {
587 scoped_ptr<SubSurface> subsurface = 548 scoped_ptr<SubSurface> subsurface =
588 GetUserDataAs<Display>(resource)->CreateSubSurface( 549 GetUserDataAs<Display>(resource)->CreateSubSurface(
589 GetUserDataAs<Surface>(surface), GetUserDataAs<Surface>(parent)); 550 GetUserDataAs<Surface>(surface), GetUserDataAs<Surface>(parent));
590 if (!subsurface) { 551 if (!subsurface) {
591 wl_resource_post_no_memory(resource); 552 wl_resource_post_error(resource, WL_SUBCOMPOSITOR_ERROR_BAD_SURFACE,
553 "invalid surface");
592 return; 554 return;
593 } 555 }
594 556
595 wl_resource* subsurface_resource = 557 wl_resource* subsurface_resource =
596 wl_resource_create(client, &wl_subsurface_interface, 1, id); 558 wl_resource_create(client, &wl_subsurface_interface, 1, id);
597 if (!subsurface_resource) {
598 wl_resource_post_no_memory(resource);
599 return;
600 }
601 559
602 SetImplementation(subsurface_resource, &subsurface_implementation, 560 SetImplementation(subsurface_resource, &subsurface_implementation,
603 std::move(subsurface)); 561 std::move(subsurface));
604 } 562 }
605 563
606 const struct wl_subcompositor_interface subcompositor_implementation = { 564 const struct wl_subcompositor_interface subcompositor_implementation = {
607 subcompositor_destroy, subcompositor_get_subsurface}; 565 subcompositor_destroy, subcompositor_get_subsurface};
608 566
609 void bind_subcompositor(wl_client* client, 567 void bind_subcompositor(wl_client* client,
610 void* data, 568 void* data,
611 uint32_t version, 569 uint32_t version,
612 uint32_t id) { 570 uint32_t id) {
613 wl_resource* resource = 571 wl_resource* resource =
614 wl_resource_create(client, &wl_subcompositor_interface, 1, id); 572 wl_resource_create(client, &wl_subcompositor_interface, 1, id);
615 if (!resource) { 573
616 wl_client_post_no_memory(client);
617 return;
618 }
619 wl_resource_set_implementation(resource, &subcompositor_implementation, data, 574 wl_resource_set_implementation(resource, &subcompositor_implementation, data,
620 nullptr); 575 nullptr);
621 } 576 }
622 577
623 //////////////////////////////////////////////////////////////////////////////// 578 ////////////////////////////////////////////////////////////////////////////////
624 // wl_shell_surface_interface: 579 // wl_shell_surface_interface:
625 580
626 void shell_surface_pong(wl_client* client, 581 void shell_surface_pong(wl_client* client,
627 wl_resource* resource, 582 wl_resource* resource,
628 uint32_t serial) { 583 uint32_t serial) {
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 } 672 }
718 673
719 void shell_get_shell_surface(wl_client* client, 674 void shell_get_shell_surface(wl_client* client,
720 wl_resource* resource, 675 wl_resource* resource,
721 uint32_t id, 676 uint32_t id,
722 wl_resource* surface) { 677 wl_resource* surface) {
723 scoped_ptr<ShellSurface> shell_surface = 678 scoped_ptr<ShellSurface> shell_surface =
724 GetUserDataAs<Display>(resource) 679 GetUserDataAs<Display>(resource)
725 ->CreateShellSurface(GetUserDataAs<Surface>(surface)); 680 ->CreateShellSurface(GetUserDataAs<Surface>(surface));
726 if (!shell_surface) { 681 if (!shell_surface) {
727 wl_resource_post_no_memory(resource); 682 wl_resource_post_error(resource, WL_SHELL_ERROR_ROLE,
683 "surface has already been assigned a role");
728 return; 684 return;
729 } 685 }
730 686
731 wl_resource* shell_surface_resource = 687 wl_resource* shell_surface_resource =
732 wl_resource_create(client, &wl_shell_surface_interface, 1, id); 688 wl_resource_create(client, &wl_shell_surface_interface, 1, id);
733 if (!shell_surface_resource) {
734 wl_resource_post_no_memory(resource);
735 return;
736 }
737 689
738 // Shell surfaces are initially disabled and needs to be explicitly mapped 690 // Shell surfaces are initially disabled and needs to be explicitly mapped
739 // before they are enabled and can become visible. 691 // before they are enabled and can become visible.
740 shell_surface->SetEnabled(false); 692 shell_surface->SetEnabled(false);
741 693
742 shell_surface->set_surface_destroyed_callback(base::Bind( 694 shell_surface->set_surface_destroyed_callback(base::Bind(
743 &wl_resource_destroy, base::Unretained(shell_surface_resource))); 695 &wl_resource_destroy, base::Unretained(shell_surface_resource)));
744 696
745 shell_surface->set_configure_callback( 697 shell_surface->set_configure_callback(
746 base::Bind(&HandleShellSurfaceConfigureCallback, 698 base::Bind(&HandleShellSurfaceConfigureCallback,
747 base::Unretained(shell_surface_resource))); 699 base::Unretained(shell_surface_resource)));
748 700
749 SetImplementation(shell_surface_resource, &shell_surface_implementation, 701 SetImplementation(shell_surface_resource, &shell_surface_implementation,
750 std::move(shell_surface)); 702 std::move(shell_surface));
751 } 703 }
752 704
753 const struct wl_shell_interface shell_implementation = { 705 const struct wl_shell_interface shell_implementation = {
754 shell_get_shell_surface}; 706 shell_get_shell_surface};
755 707
756 void bind_shell(wl_client* client, void* data, uint32_t version, uint32_t id) { 708 void bind_shell(wl_client* client, void* data, uint32_t version, uint32_t id) {
757 wl_resource* resource = 709 wl_resource* resource =
758 wl_resource_create(client, &wl_shell_interface, 1, id); 710 wl_resource_create(client, &wl_shell_interface, 1, id);
759 if (!resource) { 711
760 wl_client_post_no_memory(client);
761 return;
762 }
763 wl_resource_set_implementation(resource, &shell_implementation, data, 712 wl_resource_set_implementation(resource, &shell_implementation, data,
764 nullptr); 713 nullptr);
765 } 714 }
766 715
767 //////////////////////////////////////////////////////////////////////////////// 716 ////////////////////////////////////////////////////////////////////////////////
768 // wl_output_interface: 717 // wl_output_interface:
769 718
770 const uint32_t output_version = 2; 719 const uint32_t output_version = 2;
771 720
772 void bind_output(wl_client* client, void* data, uint32_t version, uint32_t id) { 721 void bind_output(wl_client* client, void* data, uint32_t version, uint32_t id) {
773 wl_resource* resource = wl_resource_create( 722 wl_resource* resource = wl_resource_create(
774 client, &wl_output_interface, std::min(version, output_version), id); 723 client, &wl_output_interface, std::min(version, output_version), id);
775 if (!resource) {
776 wl_client_post_no_memory(client);
777 return;
778 }
779 724
780 // TODO(reveman): Watch for display changes and report them. 725 // TODO(reveman): Watch for display changes and report them.
781 // TODO(reveman): Multi-display support. 726 // TODO(reveman): Multi-display support.
782 ash::DisplayManager* display_manager = 727 ash::DisplayManager* display_manager =
783 ash::Shell::GetInstance()->display_manager(); 728 ash::Shell::GetInstance()->display_manager();
784 const gfx::Display& primary = display_manager->GetPrimaryDisplayCandidate(); 729 const gfx::Display& primary = display_manager->GetPrimaryDisplayCandidate();
785 730
786 const ash::DisplayInfo& info = display_manager->GetDisplayInfo(primary.id()); 731 const ash::DisplayInfo& info = display_manager->GetDisplayInfo(primary.id());
787 const float kInchInMm = 25.4f; 732 const float kInchInMm = 25.4f;
788 const char* kUnknownMake = "unknown"; 733 const char* kUnknownMake = "unknown";
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
973 } 918 }
974 919
975 void xdg_shell_get_xdg_surface(wl_client* client, 920 void xdg_shell_get_xdg_surface(wl_client* client,
976 wl_resource* resource, 921 wl_resource* resource,
977 uint32_t id, 922 uint32_t id,
978 wl_resource* surface) { 923 wl_resource* surface) {
979 scoped_ptr<ShellSurface> shell_surface = 924 scoped_ptr<ShellSurface> shell_surface =
980 GetUserDataAs<Display>(resource) 925 GetUserDataAs<Display>(resource)
981 ->CreateShellSurface(GetUserDataAs<Surface>(surface)); 926 ->CreateShellSurface(GetUserDataAs<Surface>(surface));
982 if (!shell_surface) { 927 if (!shell_surface) {
983 wl_resource_post_no_memory(resource); 928 wl_resource_post_error(resource, XDG_SHELL_ERROR_ROLE,
929 "surface has already been assigned a role");
984 return; 930 return;
985 } 931 }
986 932
987 wl_resource* xdg_surface_resource = 933 wl_resource* xdg_surface_resource =
988 wl_resource_create(client, &xdg_surface_interface, 1, id); 934 wl_resource_create(client, &xdg_surface_interface, 1, id);
989 if (!xdg_surface_resource) {
990 wl_resource_post_no_memory(resource);
991 return;
992 }
993 935
994 shell_surface->set_close_callback(base::Bind( 936 shell_surface->set_close_callback(base::Bind(
995 &HandleXdgSurfaceCloseCallback, base::Unretained(xdg_surface_resource))); 937 &HandleXdgSurfaceCloseCallback, base::Unretained(xdg_surface_resource)));
996 938
997 shell_surface->set_configure_callback( 939 shell_surface->set_configure_callback(
998 base::Bind(&HandleXdgSurfaceConfigureCallback, 940 base::Bind(&HandleXdgSurfaceConfigureCallback,
999 base::Unretained(xdg_surface_resource))); 941 base::Unretained(xdg_surface_resource)));
1000 942
1001 SetImplementation(xdg_surface_resource, &xdg_surface_implementation, 943 SetImplementation(xdg_surface_resource, &xdg_surface_implementation,
1002 std::move(shell_surface)); 944 std::move(shell_surface));
(...skipping 18 matching lines...) Expand all
1021 const struct xdg_shell_interface xdg_shell_implementation = { 963 const struct xdg_shell_interface xdg_shell_implementation = {
1022 xdg_shell_destroy, xdg_shell_use_unstable_version, 964 xdg_shell_destroy, xdg_shell_use_unstable_version,
1023 xdg_shell_get_xdg_surface, xdg_shell_get_xdg_popup, xdg_shell_pong}; 965 xdg_shell_get_xdg_surface, xdg_shell_get_xdg_popup, xdg_shell_pong};
1024 966
1025 void bind_xdg_shell(wl_client* client, 967 void bind_xdg_shell(wl_client* client,
1026 void* data, 968 void* data,
1027 uint32_t version, 969 uint32_t version,
1028 uint32_t id) { 970 uint32_t id) {
1029 wl_resource* resource = 971 wl_resource* resource =
1030 wl_resource_create(client, &xdg_shell_interface, 1, id); 972 wl_resource_create(client, &xdg_shell_interface, 1, id);
1031 if (!resource) { 973
1032 wl_client_post_no_memory(client);
1033 return;
1034 }
1035 wl_resource_set_implementation(resource, &xdg_shell_implementation, data, 974 wl_resource_set_implementation(resource, &xdg_shell_implementation, data,
1036 nullptr); 975 nullptr);
1037 } 976 }
1038 977
1039 //////////////////////////////////////////////////////////////////////////////// 978 ////////////////////////////////////////////////////////////////////////////////
1040 // wl_data_device_interface: 979 // wl_data_device_interface:
1041 980
1042 void data_device_start_drag(wl_client* client, 981 void data_device_start_drag(wl_client* client,
1043 wl_resource* resource, 982 wl_resource* resource,
1044 wl_resource* source_resource, 983 wl_resource* source_resource,
(...skipping 21 matching lines...) Expand all
1066 uint32_t id) { 1005 uint32_t id) {
1067 NOTIMPLEMENTED(); 1006 NOTIMPLEMENTED();
1068 } 1007 }
1069 1008
1070 void data_device_manager_get_data_device(wl_client* client, 1009 void data_device_manager_get_data_device(wl_client* client,
1071 wl_resource* resource, 1010 wl_resource* resource,
1072 uint32_t id, 1011 uint32_t id,
1073 wl_resource* seat_resource) { 1012 wl_resource* seat_resource) {
1074 wl_resource* data_device_resource = 1013 wl_resource* data_device_resource =
1075 wl_resource_create(client, &wl_data_device_interface, 1, id); 1014 wl_resource_create(client, &wl_data_device_interface, 1, id);
1076 if (!data_device_resource) {
1077 wl_client_post_no_memory(client);
1078 return;
1079 }
1080 1015
1081 wl_resource_set_implementation(data_device_resource, 1016 wl_resource_set_implementation(data_device_resource,
1082 &data_device_implementation, nullptr, nullptr); 1017 &data_device_implementation, nullptr, nullptr);
1083 } 1018 }
1084 1019
1085 const struct wl_data_device_manager_interface 1020 const struct wl_data_device_manager_interface
1086 data_device_manager_implementation = { 1021 data_device_manager_implementation = {
1087 data_device_manager_create_data_source, 1022 data_device_manager_create_data_source,
1088 data_device_manager_get_data_device}; 1023 data_device_manager_get_data_device};
1089 1024
1090 void bind_data_device_manager(wl_client* client, 1025 void bind_data_device_manager(wl_client* client,
1091 void* data, 1026 void* data,
1092 uint32_t version, 1027 uint32_t version,
1093 uint32_t id) { 1028 uint32_t id) {
1094 wl_resource* resource = 1029 wl_resource* resource =
1095 wl_resource_create(client, &wl_data_device_manager_interface, 1, id); 1030 wl_resource_create(client, &wl_data_device_manager_interface, 1, id);
1096 if (!resource) {
1097 wl_client_post_no_memory(client);
1098 return;
1099 }
1100 1031
1101 wl_resource_set_implementation(resource, &data_device_manager_implementation, 1032 wl_resource_set_implementation(resource, &data_device_manager_implementation,
1102 data, nullptr); 1033 data, nullptr);
1103 } 1034 }
1104 1035
1105 //////////////////////////////////////////////////////////////////////////////// 1036 ////////////////////////////////////////////////////////////////////////////////
1106 // wl_pointer_interface: 1037 // wl_pointer_interface:
1107 1038
1108 // Pointer delegate class that accepts events for surfaces owned by the same 1039 // Pointer delegate class that accepts events for surfaces owned by the same
1109 // client as a pointer resource. 1040 // client as a pointer resource.
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
1446 } 1377 }
1447 1378
1448 const struct wl_touch_interface touch_implementation = {touch_release}; 1379 const struct wl_touch_interface touch_implementation = {touch_release};
1449 1380
1450 //////////////////////////////////////////////////////////////////////////////// 1381 ////////////////////////////////////////////////////////////////////////////////
1451 // wl_seat_interface: 1382 // wl_seat_interface:
1452 1383
1453 void seat_get_pointer(wl_client* client, wl_resource* resource, uint32_t id) { 1384 void seat_get_pointer(wl_client* client, wl_resource* resource, uint32_t id) {
1454 wl_resource* pointer_resource = wl_resource_create( 1385 wl_resource* pointer_resource = wl_resource_create(
1455 client, &wl_pointer_interface, wl_resource_get_version(resource), id); 1386 client, &wl_pointer_interface, wl_resource_get_version(resource), id);
1456 if (!pointer_resource) {
1457 wl_resource_post_no_memory(resource);
1458 return;
1459 }
1460 1387
1461 SetImplementation(pointer_resource, &pointer_implementation, 1388 SetImplementation(pointer_resource, &pointer_implementation,
1462 make_scoped_ptr(new Pointer( 1389 make_scoped_ptr(new Pointer(
1463 new WaylandPointerDelegate(pointer_resource)))); 1390 new WaylandPointerDelegate(pointer_resource))));
1464 } 1391 }
1465 1392
1466 void seat_get_keyboard(wl_client* client, wl_resource* resource, uint32_t id) { 1393 void seat_get_keyboard(wl_client* client, wl_resource* resource, uint32_t id) {
1467 #if defined(USE_XKBCOMMON) 1394 #if defined(USE_XKBCOMMON)
1468 uint32_t version = wl_resource_get_version(resource); 1395 uint32_t version = wl_resource_get_version(resource);
1469 wl_resource* keyboard_resource = 1396 wl_resource* keyboard_resource =
1470 wl_resource_create(client, &wl_keyboard_interface, version, id); 1397 wl_resource_create(client, &wl_keyboard_interface, version, id);
1471 if (!keyboard_resource) {
1472 wl_resource_post_no_memory(resource);
1473 return;
1474 }
1475 1398
1476 SetImplementation(keyboard_resource, &keyboard_implementation, 1399 SetImplementation(keyboard_resource, &keyboard_implementation,
1477 make_scoped_ptr(new Keyboard( 1400 make_scoped_ptr(new Keyboard(
1478 new WaylandKeyboardDelegate(keyboard_resource)))); 1401 new WaylandKeyboardDelegate(keyboard_resource))));
1479 1402
1480 // TODO(reveman): Keep repeat info synchronized with chromium and the host OS. 1403 // TODO(reveman): Keep repeat info synchronized with chromium and the host OS.
1481 if (version >= WL_KEYBOARD_REPEAT_INFO_SINCE_VERSION) 1404 if (version >= WL_KEYBOARD_REPEAT_INFO_SINCE_VERSION)
1482 wl_keyboard_send_repeat_info(keyboard_resource, 40, 500); 1405 wl_keyboard_send_repeat_info(keyboard_resource, 40, 500);
1483 #else 1406 #else
1484 NOTIMPLEMENTED(); 1407 NOTIMPLEMENTED();
1485 #endif 1408 #endif
1486 } 1409 }
1487 1410
1488 void seat_get_touch(wl_client* client, wl_resource* resource, uint32_t id) { 1411 void seat_get_touch(wl_client* client, wl_resource* resource, uint32_t id) {
1489 wl_resource* touch_resource = wl_resource_create( 1412 wl_resource* touch_resource = wl_resource_create(
1490 client, &wl_touch_interface, wl_resource_get_version(resource), id); 1413 client, &wl_touch_interface, wl_resource_get_version(resource), id);
1491 if (!touch_resource) {
1492 wl_resource_post_no_memory(resource);
1493 return;
1494 }
1495 1414
1496 SetImplementation( 1415 SetImplementation(
1497 touch_resource, &touch_implementation, 1416 touch_resource, &touch_implementation,
1498 make_scoped_ptr(new Touch(new WaylandTouchDelegate(touch_resource)))); 1417 make_scoped_ptr(new Touch(new WaylandTouchDelegate(touch_resource))));
1499 } 1418 }
1500 1419
1501 const struct wl_seat_interface seat_implementation = { 1420 const struct wl_seat_interface seat_implementation = {
1502 seat_get_pointer, seat_get_keyboard, seat_get_touch}; 1421 seat_get_pointer, seat_get_keyboard, seat_get_touch};
1503 1422
1504 const uint32_t seat_version = 4; 1423 const uint32_t seat_version = 4;
1505 1424
1506 void bind_seat(wl_client* client, void* data, uint32_t version, uint32_t id) { 1425 void bind_seat(wl_client* client, void* data, uint32_t version, uint32_t id) {
1507 wl_resource* resource = wl_resource_create( 1426 wl_resource* resource = wl_resource_create(
1508 client, &wl_seat_interface, std::min(version, seat_version), id); 1427 client, &wl_seat_interface, std::min(version, seat_version), id);
1509 if (!resource) {
1510 wl_client_post_no_memory(client);
1511 return;
1512 }
1513 1428
1514 wl_resource_set_implementation(resource, &seat_implementation, data, nullptr); 1429 wl_resource_set_implementation(resource, &seat_implementation, data, nullptr);
1515 1430
1516 if (version >= WL_SEAT_NAME_SINCE_VERSION) 1431 if (version >= WL_SEAT_NAME_SINCE_VERSION)
1517 wl_seat_send_name(resource, "default"); 1432 wl_seat_send_name(resource, "default");
1518 1433
1519 uint32_t capabilities = WL_SEAT_CAPABILITY_POINTER | WL_SEAT_CAPABILITY_TOUCH; 1434 uint32_t capabilities = WL_SEAT_CAPABILITY_POINTER | WL_SEAT_CAPABILITY_TOUCH;
1520 #if defined(USE_XKBCOMMON) 1435 #if defined(USE_XKBCOMMON)
1521 capabilities |= WL_SEAT_CAPABILITY_KEYBOARD; 1436 capabilities |= WL_SEAT_CAPABILITY_KEYBOARD;
1522 #endif 1437 #endif
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1577 DCHECK(event_loop); 1492 DCHECK(event_loop);
1578 wl_event_loop_dispatch(event_loop, timeout.InMilliseconds()); 1493 wl_event_loop_dispatch(event_loop, timeout.InMilliseconds());
1579 } 1494 }
1580 1495
1581 void Server::Flush() { 1496 void Server::Flush() {
1582 wl_display_flush_clients(wl_display_.get()); 1497 wl_display_flush_clients(wl_display_.get());
1583 } 1498 }
1584 1499
1585 } // namespace wayland 1500 } // namespace wayland
1586 } // namespace exo 1501 } // namespace exo
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698