diff options
Diffstat (limited to 'chromium/ui/ozone/platform/wayland/host/xdg_surface_wrapper_impl.cc')
-rw-r--r-- | chromium/ui/ozone/platform/wayland/host/xdg_surface_wrapper_impl.cc | 48 |
1 files changed, 40 insertions, 8 deletions
diff --git a/chromium/ui/ozone/platform/wayland/host/xdg_surface_wrapper_impl.cc b/chromium/ui/ozone/platform/wayland/host/xdg_surface_wrapper_impl.cc index f1a03831363..6ee18c65b7e 100644 --- a/chromium/ui/ozone/platform/wayland/host/xdg_surface_wrapper_impl.cc +++ b/chromium/ui/ozone/platform/wayland/host/xdg_surface_wrapper_impl.cc @@ -4,7 +4,7 @@ #include "ui/ozone/platform/wayland/host/xdg_surface_wrapper_impl.h" -#include <aura-shell-client-protocol.h> +#include <xdg-decoration-unstable-v1-client-protocol.h> #include <xdg-shell-client-protocol.h> #include <xdg-shell-unstable-v6-client-protocol.h> @@ -204,6 +204,16 @@ void XDGSurfaceWrapperImpl::CloseTopLevelStable( surface->wayland_window_->OnCloseRequest(); } +void XDGSurfaceWrapperImpl::SetTopLevelDecorationMode( + zxdg_toplevel_decoration_v1_mode requested_mode) { + if (requested_mode == decoration_mode_) + return; + + decoration_mode_ = requested_mode; + zxdg_toplevel_decoration_v1_set_mode(zxdg_toplevel_decoration_.get(), + requested_mode); +} + // static void XDGSurfaceWrapperImpl::ConfigureV6(void* data, struct zxdg_surface_v6* zxdg_surface_v6, @@ -255,6 +265,17 @@ xdg_surface* XDGSurfaceWrapperImpl::xdg_surface() const { return xdg_surface_.get(); } +// static +void XDGSurfaceWrapperImpl::ConfigureDecoration( + void* data, + struct zxdg_toplevel_decoration_v1* decoration, + uint32_t mode) { + auto* surface = static_cast<XDGSurfaceWrapperImpl*>(data); + DCHECK(surface); + surface->SetTopLevelDecorationMode( + static_cast<zxdg_toplevel_decoration_v1_mode>(mode)); +} + bool XDGSurfaceWrapperImpl::InitializeStable(bool with_toplevel) { static const xdg_surface_listener xdg_surface_listener = { &XDGSurfaceWrapperImpl::ConfigureStable, @@ -287,7 +308,11 @@ bool XDGSurfaceWrapperImpl::InitializeStable(bool with_toplevel) { LOG(ERROR) << "Failed to create xdg_toplevel"; return false; } + xdg_toplevel_add_listener(xdg_toplevel_.get(), &xdg_toplevel_listener, this); + + InitializeXdgDecoration(); + wayland_window_->root_surface()->Commit(); connection_->ScheduleFlush(); return true; @@ -329,16 +354,23 @@ bool XDGSurfaceWrapperImpl::InitializeV6(bool with_toplevel) { zxdg_toplevel_v6_add_listener(zxdg_toplevel_v6_.get(), &zxdg_toplevel_v6_listener, this); - if (connection_->aura_shell()) { - aura_surface_.reset(zaura_shell_get_aura_surface( - connection_->aura_shell(), wayland_window_->root_surface()->surface())); - zaura_surface_set_fullscreen_mode(aura_surface_.get(), - ZAURA_SURFACE_FULLSCREEN_MODE_IMMERSIVE); - } - wayland_window_->root_surface()->Commit(); connection_->ScheduleFlush(); return true; } +void XDGSurfaceWrapperImpl::InitializeXdgDecoration() { + if (connection_->xdg_decoration_manager_v1()) { + DCHECK(!zxdg_toplevel_decoration_); + static const zxdg_toplevel_decoration_v1_listener decoration_listener = { + &XDGSurfaceWrapperImpl::ConfigureDecoration, + }; + zxdg_toplevel_decoration_.reset( + zxdg_decoration_manager_v1_get_toplevel_decoration( + connection_->xdg_decoration_manager_v1(), xdg_toplevel_.get())); + zxdg_toplevel_decoration_v1_add_listener(zxdg_toplevel_decoration_.get(), + &decoration_listener, this); + } +} + } // namespace ui |