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

Unified Diff: components/exo/wayland/server.cc

Issue 2040743002: exo: Implement version 2 of remote shell interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remote-shell-version-2
Patch Set: popup placement fix Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/exo/shell_surface_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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() {}
« no previous file with comments | « components/exo/shell_surface_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698