oxwm

https://git.tonybtw.com/oxwm.git git://git.tonybtw.com/oxwm.git

feat: Adding floating mode for OXWM

Commit
5875fada0e0840869a21befd4d7e0ad2bfd7ae83
Parent
40d6e3c
Author
xsoder <tadihailukebe@gmail.com>
Date
2025-10-14 07:56:58

Diff

diff --git a/src/default_config.rs b/src/default_config.rs
index c02129c..98efd35 100644
--- a/src/default_config.rs
+++ b/src/default_config.rs
@@ -100,6 +100,7 @@ pub const KEYBINDINGS: &[Key] = &[
     Key::new(&[MODKEY],        keycodes::D,      KeyAction::Spawn,      Arg::Array(DMENU_CMD)),
     Key::new(&[MODKEY],        keycodes::Q,      KeyAction::KillClient, Arg::None),
     Key::new(&[MODKEY, SHIFT], keycodes::F,      KeyAction::ToggleFullScreen, Arg::None),
+    Key::new(&[MODKEY, SHIFT], keycodes::SPACE,  KeyAction::ToggleFloating, Arg::None),
     Key::new(&[MODKEY],        keycodes::A,      KeyAction::ToggleGaps, Arg::None),
     Key::new(&[MODKEY, SHIFT], keycodes::Q,      KeyAction::Quit,       Arg::None),
     Key::new(&[MODKEY, SHIFT], keycodes::R,      KeyAction::Restart,    Arg::None),
diff --git a/src/keyboard/handlers.rs b/src/keyboard/handlers.rs
index 77d45db..d86ddca 100644
--- a/src/keyboard/handlers.rs
+++ b/src/keyboard/handlers.rs
@@ -15,6 +15,7 @@ pub enum KeyAction {
     ViewTag,
     ToggleGaps,
     ToggleFullScreen,
+    ToggleFloating,
     MoveToTag,
     None,
 }
diff --git a/src/window_manager.rs b/src/window_manager.rs
index 1b2e4f3..3fd8789 100644
--- a/src/window_manager.rs
+++ b/src/window_manager.rs
@@ -389,6 +389,24 @@ impl WindowManager {
         }
     }
 
+    fn toggle_floating(&mut self) -> Result<()> {
+        if let Some(focused) = self.focused_window {
+            if self.floating_windows.contains(&focused) {
+                self.floating_windows.remove(&focused);
+                self.apply_layout()?;
+            } else {
+                self.floating_windows.insert(focused);
+                self.connection.configure_window(
+                    focused,
+                    &ConfigureWindowAux::new().stack_mode(StackMode::ABOVE),
+                )?;
+                self.apply_layout()?;
+                self.connection.flush()?;
+            }
+        }
+        Ok(())
+    }
+
     fn toggle_fullscreen(&mut self) -> Result<()> {
         if let Some(focused) = self.focused_window {
             if self.fullscreen_window == Some(focused) {
@@ -453,6 +471,10 @@ impl WindowManager {
             KeyAction::ToggleFullScreen => {
                 self.toggle_fullscreen()?;
             }
+            KeyAction::ToggleFloating => {
+                self.toggle_floating()?;
+            }
+
             KeyAction::FocusStack => {
                 if let Arg::Int(direction) = arg {
                     self.cycle_focus(*direction)?;