Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git
feat: keep windows in Pinned mode in Pinned mode when moved
src/server/cursor.rs | 5 ++++-
src/server/seat.rs | 4 +++-
src/server/xdg_toplevel.rs | 1 +
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/server/cursor.rs b/src/server/cursor.rs
index b39048d..5ca86f1 100644
--- a/src/server/cursor.rs
+++ b/src/server/cursor.rs
@@ -642,6 +642,7 @@ unsafe extern "C" fn handle_button(listener: *mut ffi::wl_listener, data: *mut s
if (*target_win).tiling_mode != crate::tiling::TilingMode::Floating
&& (*target_win).tiling_mode != crate::tiling::TilingMode::Popup
&& (*target_win).tiling_mode != crate::tiling::TilingMode::Fullscreen
+ && (*target_win).tiling_mode != crate::tiling::TilingMode::Pinned
{
(*target_win).tiling_mode = crate::tiling::TilingMode::Floating;
(*target_win).mode_locked = true;
@@ -745,7 +746,9 @@ unsafe extern "C" fn handle_button(listener: *mut ffi::wl_listener, data: *mut s
}
BorderZone::Move => {
if (*event).button == 0x110 { // BTN_LEFT
- if initial_mode != crate::tiling::TilingMode::Floating {
+ if initial_mode != crate::tiling::TilingMode::Floating
+ && initial_mode != crate::tiling::TilingMode::Pinned
+ {
(*border_target_win).tiling_mode = crate::tiling::TilingMode::Floating;
(*border_target_win).mode_locked = true;
}
diff --git a/src/server/seat.rs b/src/server/seat.rs
index 92740d3..41030e4 100644
--- a/src/server/seat.rs
+++ b/src/server/seat.rs
@@ -821,7 +821,9 @@ impl Seat {
let win = op.window_ptr;
if !win.is_null() && !(*win).closed {
- if (*win).tiling_mode != crate::tiling::TilingMode::Floating {
+ if (*win).tiling_mode != crate::tiling::TilingMode::Floating
+ && (*win).tiling_mode != crate::tiling::TilingMode::Pinned
+ {
(*win).tiling_mode = crate::tiling::TilingMode::Floating;
(*win).mode_locked = true;
}
diff --git a/src/server/xdg_toplevel.rs b/src/server/xdg_toplevel.rs
index 272f290..dc242be 100644
--- a/src/server/xdg_toplevel.rs
+++ b/src/server/xdg_toplevel.rs
@@ -587,6 +587,7 @@ unsafe extern "C" fn handle_request_move(
if initial_mode != crate::tiling::TilingMode::Floating
&& initial_mode != crate::tiling::TilingMode::Popup
&& initial_mode != crate::tiling::TilingMode::Fullscreen
+ && initial_mode != crate::tiling::TilingMode::Pinned
{
(*window).tiling_mode = crate::tiling::TilingMode::Floating;
(*window).mode_locked = true;