diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-26 13:44:37 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-26 13:45:03 +0400 |
| commit | 80928632ba38210242832e316b57e2e153da7efd (patch) | |
| tree | 2ed62ffc89913f060dc4633b3f75aa7ff1740540 /src/handlers | |
| parent | dc10e464ad3bd95007873875bf44e9280392e15a (diff) | |
| download | niri-80928632ba38210242832e316b57e2e153da7efd.tar.gz niri-80928632ba38210242832e316b57e2e153da7efd.tar.bz2 niri-80928632ba38210242832e316b57e2e153da7efd.zip | |
Add prefer-no-csd option
Diffstat (limited to 'src/handlers')
| -rw-r--r-- | src/handlers/xdg_shell.rs | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/src/handlers/xdg_shell.rs b/src/handlers/xdg_shell.rs index b1dd9d4f..75b03add 100644 --- a/src/handlers/xdg_shell.rs +++ b/src/handlers/xdg_shell.rs @@ -1,16 +1,18 @@ -use smithay::delegate_xdg_shell; use smithay::desktop::{find_popup_root_surface, PopupKind, Window}; use smithay::output::Output; +use smithay::reexports::wayland_protocols::xdg::decoration::zv1::server::zxdg_toplevel_decoration_v1; use smithay::reexports::wayland_protocols::xdg::shell::server::xdg_toplevel::{self, ResizeEdge}; use smithay::reexports::wayland_server::protocol::wl_output; use smithay::reexports::wayland_server::protocol::wl_seat::WlSeat; use smithay::reexports::wayland_server::protocol::wl_surface::WlSurface; use smithay::utils::Serial; use smithay::wayland::compositor::with_states; +use smithay::wayland::shell::xdg::decoration::XdgDecorationHandler; use smithay::wayland::shell::xdg::{ PopupSurface, PositionerState, ToplevelSurface, XdgPopupSurfaceData, XdgShellHandler, XdgShellState, XdgToplevelSurfaceData, }; +use smithay::{delegate_xdg_decoration, delegate_xdg_shell}; use crate::layout::{configure_new_window, output_size}; use crate::niri::State; @@ -164,6 +166,40 @@ impl XdgShellHandler for State { delegate_xdg_shell!(State); +impl XdgDecorationHandler for State { + fn new_decoration(&mut self, toplevel: ToplevelSurface) { + let mode = if self.niri.config.borrow().prefer_no_csd { + Some(zxdg_toplevel_decoration_v1::Mode::ServerSide) + } else { + None + }; + toplevel.with_pending_state(|state| { + state.decoration_mode = mode; + }); + toplevel.send_configure(); + } + + fn request_mode(&mut self, toplevel: ToplevelSurface, mode: zxdg_toplevel_decoration_v1::Mode) { + toplevel.with_pending_state(|state| { + state.decoration_mode = Some(mode); + }); + toplevel.send_configure(); + } + + fn unset_mode(&mut self, toplevel: ToplevelSurface) { + let mode = if self.niri.config.borrow().prefer_no_csd { + Some(zxdg_toplevel_decoration_v1::Mode::ServerSide) + } else { + None + }; + toplevel.with_pending_state(|state| { + state.decoration_mode = mode; + }); + toplevel.send_configure(); + } +} +delegate_xdg_decoration!(State); + pub fn send_initial_configure_if_needed(window: &Window) { let initial_configure_sent = with_states(window.toplevel().wl_surface(), |states| { states |
