diff --git a/src/ifs/wl_seat.rs b/src/ifs/wl_seat.rs index 055591ac..818ad37a 100644 --- a/src/ifs/wl_seat.rs +++ b/src/ifs/wl_seat.rs @@ -826,6 +826,38 @@ impl WlSeatGlobal { && let Some(c) = p.node_into_container() { c.move_focus_from_child(self, tl.deref(), direction); + } else if let Some(float) = data.float.get() + { + let ws = float.workspace.get(); + let floats: Vec<_> = ws + .stacked + .iter() + .filter_map(|node| (*node).clone().node_into_float()) + .filter(|f| f.child.get().is_some()) + .collect(); + if let Some(pos) = floats.iter().position(|f| f.id == float.id) { + let target = match direction { + Direction::Left | Direction::Down => { + if pos == 0 { + floats.last() + } else { + floats.get(pos - 1) + } + } + _ => { + if pos + 1 >= floats.len() { + floats.first() + } else { + floats.get(pos + 1) + } + } + }; + if let Some(f) = target + && f.id != float.id + { + f.clone().node_do_focus(self, Direction::Unspecified); + } + } } } self.maybe_schedule_warp_mouse_to_focus(); diff --git a/src/renderer.rs b/src/renderer.rs index 93f4268e..ca233cc0 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -549,7 +549,11 @@ impl Renderer<'_> { let tpuh = theme.title_plus_underline_height(); let tuh = theme.title_underline_height(); let bw = theme.sizes.border_width.get(); - let bc = theme.colors.border.get(); + let bc = if floating.active.get() { + theme.colors.focused_title_background.get() + } else { + theme.colors.border.get() + }; let tc = if floating.active.get() { theme.colors.focused_title_background.get() } else if floating.attention_requested.get() { diff --git a/src/tree/float.rs b/src/tree/float.rs index ccad4860..b2eb8689 100644 --- a/src/tree/float.rs +++ b/src/tree/float.rs @@ -483,6 +483,9 @@ impl FloatNode { fn update_child_active(self: &Rc, active: bool) { if self.active.replace(active) != active { self.schedule_render_titles(); + if active { + self.restack(); + } } }