From 95629422a77409f0099c596e2e62c5617d5ba42e Mon Sep 17 00:00:00 2001 From: Nova Date: Wed, 4 Jan 2023 08:26:10 -0500 Subject: [PATCH] fix(wayland): SSD all the things --- src/wayland/decoration.rs | 41 ++++++++++++++++++++------------------- src/wayland/state.rs | 6 +++++- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/wayland/decoration.rs b/src/wayland/decoration.rs index 1d5959f..cb9a14f 100644 --- a/src/wayland/decoration.rs +++ b/src/wayland/decoration.rs @@ -1,4 +1,4 @@ -use super::{state::WaylandState, xdg_shell::XdgSurfaceData}; +use super::state::WaylandState; use smithay::{ delegate_kde_decoration, reexports::{ @@ -9,8 +9,12 @@ use smithay::{ }, shell::server::xdg_toplevel::XdgToplevel, }, + wayland_protocols_misc::server_decoration::server::org_kde_kwin_server_decoration::{ + Mode as KdeMode, OrgKdeKwinServerDecoration, + }, wayland_server::{ - Client, DataInit, Dispatch, DisplayHandle, GlobalDispatch, New, Resource, Weak, + protocol::wl_surface::WlSurface, Client, DataInit, Dispatch, DisplayHandle, + GlobalDispatch, New, Resource, WEnum, Weak, }, }, wayland::shell::{self, kde::decoration::KdeDecorationHandler}, @@ -59,7 +63,7 @@ impl Dispatch for WaylandState { data_init: &mut DataInit<'_, WaylandState>, ) { match request { - zxdg_decoration_manager_v1::Request::Destroy => todo!(), + zxdg_decoration_manager_v1::Request::Destroy => (), zxdg_decoration_manager_v1::Request::GetToplevelDecoration { id, toplevel } => { data_init.init(id, toplevel.downgrade()); } @@ -73,32 +77,16 @@ impl Dispatch, WaylandState> for Way _client: &Client, resource: &ZxdgToplevelDecorationV1, request: zxdg_toplevel_decoration_v1::Request, - data: &Weak, + _data: &Weak, _dhandle: &DisplayHandle, _data_init: &mut DataInit<'_, WaylandState>, ) { match request { zxdg_toplevel_decoration_v1::Request::SetMode { mode: _ } => { resource.configure(Mode::ServerSide); - data.upgrade() - .unwrap() - .data::() - .unwrap() - .xdg_surface - .upgrade() - .unwrap() - .configure(0); } zxdg_toplevel_decoration_v1::Request::UnsetMode => { resource.configure(Mode::ServerSide); - data.upgrade() - .unwrap() - .data::() - .unwrap() - .xdg_surface - .upgrade() - .unwrap() - .configure(0); } zxdg_toplevel_decoration_v1::Request::Destroy => (), _ => unreachable!(), @@ -110,5 +98,18 @@ impl KdeDecorationHandler for WaylandState { fn kde_decoration_state(&self) -> &shell::kde::decoration::KdeDecorationState { &self.kde_decoration_state } + + fn new_decoration(&mut self, _surface: &WlSurface, decoration: &OrgKdeKwinServerDecoration) { + decoration.mode(KdeMode::Server); + } + + fn request_mode( + &mut self, + _surface: &WlSurface, + decoration: &OrgKdeKwinServerDecoration, + _mode: WEnum, + ) { + decoration.mode(KdeMode::Server); + } } delegate_kde_decoration!(WaylandState); diff --git a/src/wayland/state.rs b/src/wayland/state.rs index 4400e2b..d3f3b86 100644 --- a/src/wayland/state.rs +++ b/src/wayland/state.rs @@ -10,7 +10,10 @@ use smithay::{ delegate_dmabuf, delegate_output, delegate_shm, output::{Mode, Output, Scale, Subpixel}, reexports::{ - wayland_protocols::xdg::shell::server::xdg_wm_base::XdgWmBase, + wayland_protocols::xdg::{ + decoration::zv1::server::zxdg_decoration_manager_v1::ZxdgDecorationManagerV1, + shell::server::xdg_wm_base::XdgWmBase, + }, wayland_protocols_misc::server_decoration::server::org_kde_kwin_server_decoration_manager::Mode as DecorationMode, wayland_server::{ backend::{ClientData, ClientId, DisconnectReason}, @@ -104,6 +107,7 @@ impl WaylandState { ); display_handle.create_global::(3, ()); display_handle.create_global::(5, ()); + display_handle.create_global::(1, ()); info!("Init Wayland compositor");