diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-04-24 22:17:53 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-04-24 22:17:53 +0400 |
| commit | fd6c8c7790ae4e7dca1f242263f41411a1bab96e (patch) | |
| tree | b53b04dbef2e934d2b9fc25346fbfcb1c524714c /src | |
| parent | 3e598c565e6e8ad4c34e93aec9a49e60d51d730e (diff) | |
| download | niri-fd6c8c7790ae4e7dca1f242263f41411a1bab96e.tar.gz niri-fd6c8c7790ae4e7dca1f242263f41411a1bab96e.tar.bz2 niri-fd6c8c7790ae4e7dca1f242263f41411a1bab96e.zip | |
Implement focus-ring window rule
Diffstat (limited to 'src')
| -rw-r--r-- | src/layout/tile.rs | 13 | ||||
| -rw-r--r-- | src/window/mod.rs | 12 |
2 files changed, 23 insertions, 2 deletions
diff --git a/src/layout/tile.rs b/src/layout/tile.rs index 4778db69..7294cc05 100644 --- a/src/layout/tile.rs +++ b/src/layout/tile.rs @@ -109,11 +109,12 @@ impl<W: LayoutElement> Tile<W> { pub fn new(window: W, options: Rc<Options>) -> Self { let rules = window.rules(); let border_config = rules.border.resolve_against(options.border); + let focus_ring_config = rules.focus_ring.resolve_against(options.focus_ring.into()); Self { window, border: FocusRing::new(border_config.into()), - focus_ring: FocusRing::new(options.focus_ring), + focus_ring: FocusRing::new(focus_ring_config.into()), is_fullscreen: false, // FIXME: up-to-date fullscreen right away, but we need size. fullscreen_backdrop: SolidColorBuffer::new((0, 0), [0., 0., 0., 1.]), fullscreen_size: Default::default(), @@ -131,7 +132,11 @@ impl<W: LayoutElement> Tile<W> { let border_config = rules.border.resolve_against(self.options.border); self.border.update_config(border_config.into()); - self.focus_ring.update_config(options.focus_ring); + let focus_ring_config = rules + .focus_ring + .resolve_against(self.options.focus_ring.into()); + self.focus_ring.update_config(focus_ring_config.into()); + self.options = options; } @@ -175,6 +180,10 @@ impl<W: LayoutElement> Tile<W> { let rules = self.window.rules(); let border_config = rules.border.resolve_against(self.options.border); self.border.update_config(border_config.into()); + let focus_ring_config = rules + .focus_ring + .resolve_against(self.options.focus_ring.into()); + self.focus_ring.update_config(focus_ring_config.into()); } pub fn advance_animations(&mut self, current_time: Duration, is_active: bool) { diff --git a/src/window/mod.rs b/src/window/mod.rs index a793cedb..90a6fb2c 100644 --- a/src/window/mod.rs +++ b/src/window/mod.rs @@ -48,6 +48,8 @@ pub struct ResolvedWindowRules { /// Extra bound on the maximum window height. pub max_height: Option<u16>, + /// Focus ring overrides. + pub focus_ring: BorderRule, /// Window border overrides. pub border: BorderRule, @@ -90,6 +92,15 @@ impl ResolvedWindowRules { min_height: None, max_width: None, max_height: None, + focus_ring: BorderRule { + off: false, + on: false, + width: None, + active_color: None, + inactive_color: None, + active_gradient: None, + inactive_gradient: None, + }, border: BorderRule { off: false, on: false, @@ -170,6 +181,7 @@ impl ResolvedWindowRules { resolved.max_height = Some(x); } + resolved.focus_ring.merge_with(&rule.focus_ring); resolved.border.merge_with(&rule.border); if let Some(x) = rule.draw_border_with_background { |
