Add default-column-display window rule

This commit is contained in:
Ivan Molodetskikh
2025-02-06 09:09:07 +03:00
parent 8f9e0d029c
commit 1515410012
4 changed files with 42 additions and 1 deletions
+4
View File
@@ -1113,6 +1113,8 @@ pub struct WindowRule {
pub block_out_from: Option<BlockOutFrom>,
#[knuffel(child, unwrap(argument))]
pub variable_refresh_rate: Option<bool>,
#[knuffel(child, unwrap(argument, str))]
pub default_column_display: Option<ColumnDisplay>,
#[knuffel(child)]
pub default_floating_position: Option<FloatingPosition>,
#[knuffel(child, unwrap(argument))]
@@ -3557,6 +3559,7 @@ mod tests {
open-floating false
open-focused true
default-window-height { fixed 500; }
default-column-display "tabbed"
default-floating-position x=100 y=-200 relative-to="bottom-left"
focus-ring {
@@ -3856,6 +3859,7 @@ mod tests {
open_floating: Some(false),
open_focused: Some(true),
default_window_height: Some(DefaultPresetSize(Some(PresetSize::Fixed(500)))),
default_column_display: Some(ColumnDisplay::Tabbed),
default_floating_position: Some(FloatingPosition {
x: FloatOrInt(100.),
y: FloatOrInt(-200.),
+7 -1
View File
@@ -3253,6 +3253,12 @@ impl<W: LayoutElement> Column<W> {
) -> Self {
let options = tile.options.clone();
let display_mode = tile
.window()
.rules()
.default_column_display
.unwrap_or(options.default_column_display);
let mut rv = Self {
tiles: vec![],
data: vec![],
@@ -3261,7 +3267,7 @@ impl<W: LayoutElement> Column<W> {
preset_width_idx: None,
is_full_width,
is_fullscreen: false,
display_mode: options.default_column_display,
display_mode,
move_animation: None,
view_size,
working_area,
+9
View File
@@ -4,6 +4,7 @@ use niri_config::{
BlockOutFrom, BorderRule, CornerRadius, FloatingPosition, Match, PresetSize, ShadowRule,
WindowRule,
};
use niri_ipc::ColumnDisplay;
use smithay::reexports::wayland_protocols::xdg::shell::server::xdg_toplevel;
use smithay::utils::{Logical, Size};
use smithay::wayland::compositor::with_states;
@@ -43,6 +44,9 @@ pub struct ResolvedWindowRules {
/// - `Some(Some(height))`: set to a particular height.
pub default_height: Option<Option<PresetSize>>,
/// Default column display for this window.
pub default_column_display: Option<ColumnDisplay>,
/// Default floating position for this window.
pub default_floating_position: Option<FloatingPosition>,
@@ -147,6 +151,7 @@ impl ResolvedWindowRules {
Self {
default_width: None,
default_height: None,
default_column_display: None,
default_floating_position: None,
open_on_output: None,
open_on_workspace: None,
@@ -237,6 +242,10 @@ impl ResolvedWindowRules {
resolved.default_height = Some(x.0);
}
if let Some(x) = rule.default_column_display {
resolved.default_column_display = Some(x);
}
if let Some(x) = rule.default_floating_position {
resolved.default_floating_position = Some(x);
}
+22
View File
@@ -52,6 +52,7 @@ window-rule {
block-out-from "screencast"
// block-out-from "screen-capture"
variable-refresh-rate true
default-column-display "tabbed"
default-floating-position x=100 y=200 relative-to="bottom-left"
scroll-factor 0.75
@@ -528,6 +529,27 @@ window-rule {
}
```
#### `default-column-display`
<sup>Since: next release</sup>
Set the default display mode for columns created from this window.
This is used any time a window goes into its own column.
For example:
- Opening a new window.
- Expelling a window into its own column.
- Moving a window from the floating layout to the tiling layout.
```kdl
// Make Evince windows open as tabbed columns.
window-rule {
match app-id="^evince$"
default-column-display "tabbed"
}
```
#### `default-floating-position`
<sup>Since: 25.01</sup>