From bcf2c8231d02ff42805479d3255d982e06781d80 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Fri, 16 Jan 2026 14:16:22 +0100 Subject: [PATCH] window-management: prevent dragging the root container --- src/ifs/wl_seat/pointer_owner.rs | 7 +++++++ src/tree/toplevel.rs | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/src/ifs/wl_seat/pointer_owner.rs b/src/ifs/wl_seat/pointer_owner.rs index 5cd3c800..e9f4ced1 100644 --- a/src/ifs/wl_seat/pointer_owner.rs +++ b/src/ifs/wl_seat/pointer_owner.rs @@ -1137,6 +1137,9 @@ impl SimplePointerOwnerUsecase for WindowManagementUsecase { let (mut dx, mut dy) = pos.translate(x, y); let owner: Rc = if button == BTN_LEFT { if let Some(tl) = pn.clone().node_into_toplevel() { + if tl.tl_data().is_root_container() { + return false; + } seat.pointer_cursor.set_known(KnownCursor::Move); if tl.tl_data().is_fullscreen.get() { Rc::new(ToplevelGrabPointerOwner { @@ -1578,6 +1581,10 @@ impl UiDragUsecase for TileDragUsecase { } fn apply_changes(&self, seat: &Rc) -> Option { + if self.tl.tl_data().is_root_container() { + self.destination.take(); + return None; + } let (x, y) = seat.pointer_cursor.position(); let dest = seat.state.root.tile_drag_destination( self.tl.node_id(), diff --git a/src/tree/toplevel.rs b/src/tree/toplevel.rs index 966c13b3..8ec1e105 100644 --- a/src/tree/toplevel.rs +++ b/src/tree/toplevel.rs @@ -918,6 +918,13 @@ impl ToplevelData { } NodeLayerLink::Tiled } + + pub fn is_root_container(&self) -> bool { + let Some(parent) = self.parent.get() else { + return false; + }; + parent.node_is_workspace() + } } impl Drop for ToplevelData {