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)?;