Chromium Code Reviews| Index: components/exo/wayland/server.cc |
| diff --git a/components/exo/wayland/server.cc b/components/exo/wayland/server.cc |
| index 61c0c6baa3b3e71871f28b4228b67140a1ba345b..1ab0db649b1a45658c708e1e7f130097c5bf2e2c 100644 |
| --- a/components/exo/wayland/server.cc |
| +++ b/components/exo/wayland/server.cc |
| @@ -1172,7 +1172,7 @@ void xdg_surface_unset_fullscreen(wl_client* client, wl_resource* resource) { |
| } |
| void xdg_surface_set_minimized(wl_client* client, wl_resource* resource) { |
| - NOTIMPLEMENTED(); |
| + GetUserDataAs<ShellSurface>(resource)->Minimize(); |
| } |
| const struct xdg_surface_interface xdg_surface_implementation = { |
| @@ -1391,9 +1391,31 @@ void remote_surface_set_scale(wl_client* client, |
| GetUserDataAs<ShellSurface>(resource)->SetScale(wl_fixed_to_double(scale)); |
| } |
| +void remote_surface_fullscreen(wl_client* client, wl_resource* resource) { |
|
Daniele Castagna
2016/06/06 03:11:23
This file could be probably made much compact with
reveman
2016/06/06 03:26:57
Yes, that was always the plan but it's been easier
|
| + GetUserDataAs<ShellSurface>(resource)->SetFullscreen(true); |
| +} |
| + |
| +void remote_surface_maximize(wl_client* client, wl_resource* resource) { |
| + GetUserDataAs<ShellSurface>(resource)->Maximize(); |
| +} |
| + |
| +void remote_surface_minimize(wl_client* client, wl_resource* resource) { |
| + GetUserDataAs<ShellSurface>(resource)->Minimize(); |
| +} |
| + |
| +void remote_surface_restore(wl_client* client, wl_resource* resource) { |
| + GetUserDataAs<ShellSurface>(resource)->Restore(); |
| +} |
| + |
| const struct zwp_remote_surface_v1_interface remote_surface_implementation = { |
| - remote_surface_destroy, remote_surface_set_app_id, |
| - remote_surface_set_window_geometry, remote_surface_set_scale}; |
| + remote_surface_destroy, |
| + remote_surface_set_app_id, |
| + remote_surface_set_window_geometry, |
| + remote_surface_set_scale, |
| + remote_surface_fullscreen, |
| + remote_surface_maximize, |
| + remote_surface_minimize, |
| + remote_surface_restore}; |
| //////////////////////////////////////////////////////////////////////////////// |
| // remote_shell_interface: |
| @@ -1521,6 +1543,45 @@ void HandleRemoteSurfaceCloseCallback(wl_resource* resource) { |
| wl_client_flush(wl_resource_get_client(resource)); |
| } |
| +void HandleRemoteSurfaceStateChangedCallback( |
| + wl_resource* resource, |
| + ash::wm::WindowStateType old_state_type, |
| + ash::wm::WindowStateType new_state_type) { |
| + DCHECK_NE(old_state_type, new_state_type); |
| + |
| + switch (old_state_type) { |
| + case ash::wm::WINDOW_STATE_TYPE_MINIMIZED: |
| + if (wl_resource_get_version(resource) >= 2) |
|
Daniele Castagna
2016/06/06 03:11:23
Wouldn't this code be clearer if it was something
reveman
2016/06/06 03:26:57
I'm expecting "wl_resource_get_version(resource) >
|
| + zwp_remote_surface_v1_send_unset_minimized(resource); |
| + break; |
| + case ash::wm::WINDOW_STATE_TYPE_MAXIMIZED: |
| + if (wl_resource_get_version(resource) >= 2) |
| + zwp_remote_surface_v1_send_unset_maximized(resource); |
| + break; |
| + case ash::wm::WINDOW_STATE_TYPE_FULLSCREEN: |
| + zwp_remote_surface_v1_send_unset_fullscreen(resource); |
| + break; |
| + default: |
| + break; |
| + } |
| + switch (new_state_type) { |
| + case ash::wm::WINDOW_STATE_TYPE_MINIMIZED: |
| + if (wl_resource_get_version(resource) >= 2) |
| + zwp_remote_surface_v1_send_set_minimized(resource); |
| + break; |
| + case ash::wm::WINDOW_STATE_TYPE_MAXIMIZED: |
| + if (wl_resource_get_version(resource) >= 2) |
| + zwp_remote_surface_v1_send_set_maximized(resource); |
| + break; |
| + case ash::wm::WINDOW_STATE_TYPE_FULLSCREEN: |
| + zwp_remote_surface_v1_send_set_fullscreen(resource); |
| + break; |
| + default: |
| + break; |
| + } |
| + wl_client_flush(wl_resource_get_client(resource)); |
| +} |
| + |
| void remote_shell_get_remote_surface(wl_client* client, |
| wl_resource* resource, |
| uint32_t id, |
| @@ -1536,11 +1597,15 @@ void remote_shell_get_remote_surface(wl_client* client, |
| } |
| wl_resource* remote_surface_resource = |
| - wl_resource_create(client, &zwp_remote_surface_v1_interface, 1, id); |
| + wl_resource_create(client, &zwp_remote_surface_v1_interface, |
| + wl_resource_get_version(resource), id); |
| shell_surface->set_close_callback( |
| base::Bind(&HandleRemoteSurfaceCloseCallback, |
| base::Unretained(remote_surface_resource))); |
| + shell_surface->set_state_changed_callback( |
| + base::Bind(&HandleRemoteSurfaceStateChangedCallback, |
| + base::Unretained(remote_surface_resource))); |
| SetImplementation(remote_surface_resource, &remote_surface_implementation, |
| std::move(shell_surface)); |
| @@ -1549,12 +1614,15 @@ void remote_shell_get_remote_surface(wl_client* client, |
| const struct zwp_remote_shell_v1_interface remote_shell_implementation = { |
| remote_shell_destroy, remote_shell_get_remote_surface}; |
| +const uint32_t remote_shell_version = 2; |
| + |
| void bind_remote_shell(wl_client* client, |
| void* data, |
| uint32_t version, |
| uint32_t id) { |
| wl_resource* resource = |
| - wl_resource_create(client, &zwp_remote_shell_v1_interface, 1, id); |
| + wl_resource_create(client, &zwp_remote_shell_v1_interface, |
| + std::min(version, remote_shell_version), id); |
| // TODO(reveman): Multi-display support. |
| const display::Display& display = ash::Shell::GetInstance() |
| @@ -2434,8 +2502,8 @@ Server::Server(Display* display) |
| display_, bind_secure_output); |
| wl_global_create(wl_display_.get(), &zwp_alpha_compositing_v1_interface, 1, |
| display_, bind_alpha_compositing); |
| - wl_global_create(wl_display_.get(), &zwp_remote_shell_v1_interface, 1, |
| - display_, bind_remote_shell); |
| + wl_global_create(wl_display_.get(), &zwp_remote_shell_v1_interface, |
| + remote_shell_version, display_, bind_remote_shell); |
| } |
| Server::~Server() {} |