git.lucas.co / cce-ui
GPU-accelerated UI toolkit (Vulkan)
git clone https://git.lucas.co/cce-ui.git

commit3434957363d6e49b2ccfcde2b47fd92090364b43
parent55dbd7c2c3
authorLucas Galante <[email protected]>
date2026-07-16 20:21
refactor: CSD title-bar move is opt-in

Flip csd_titlebar_move's default to false: apps default to NOT having a
title bar, so nothing is implicitly draggable — windows are moved through
the compositor or via explicitly-declared is_movable_backplate_at
handles. An app with an actual title bar opts in by returning true.

Co-Authored-By: Claude Fable 5 <[email protected]>

 src/backend/window_runner.rs | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/backend/window_runner.rs b/src/backend/window_runner.rs
index 9865c8e..44efdc4 100644
--- a/src/backend/window_runner.rs
+++ b/src/backend/window_runner.rs
@@ -1658,13 +1658,14 @@ pub trait Application: Sized + 'static {
     }
 
     /// Whether the standard CSD reserves an implicit title-bar strip (`y` in `[8, 32)`) as a
-    /// drag-to-move handle. Separate from [`standard_csd`](Application::standard_csd), which
-    /// also gates the resize borders. Return `false` for a window that has no title bar and
-    /// should only be moved via explicitly-declared handles
-    /// ([`is_movable_backplate_at`](Application::is_movable_backplate_at)) — nothing is then
-    /// implicitly draggable. Only consulted when `standard_csd()` is on.
+    /// drag-to-move handle. Opt-in: off by default, so a window has no title bar and is moved
+    /// through the compositor (or via explicitly-declared handles —
+    /// [`is_movable_backplate_at`](Application::is_movable_backplate_at)); nothing is
+    /// implicitly draggable. An app with an actual title bar returns `true`. Separate from
+    /// [`standard_csd`](Application::standard_csd), which also gates the resize borders, and
+    /// only consulted when `standard_csd()` is on.
     fn csd_titlebar_move(&self) -> bool {
-        true
+        false
     }
 
     /// Override the pointer cursor at (x, y). `None` falls back to the