diff options
| author | Merlijn <32853531+ToxicMushroom@users.noreply.github.com> | 2025-10-29 07:10:38 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-29 09:10:38 +0300 |
| commit | 6a2c6261df130cccb5262eddf71d40b2fffcf8f9 (patch) | |
| tree | 48639aef4ebddbc315234b925954c5cc768d0f1c /src/niri.rs | |
| parent | e6f3c538da0c646bda43fcde7ef7dc3b771e0c8b (diff) | |
| download | niri-6a2c6261df130cccb5262eddf71d40b2fffcf8f9.tar.gz niri-6a2c6261df130cccb5262eddf71d40b2fffcf8f9.tar.bz2 niri-6a2c6261df130cccb5262eddf71d40b2fffcf8f9.zip | |
Add support for custom modes and modelines. (#2479)
* Implement custom modes and modelines
Co-authored-by: ToxicMushroom <32853531+ToxicMushroom@users.noreply.github.com>
* fixes
* refactor mode and modeline kdl parsers.
* add IPC parse checks
* refactor: address feedback
* fix: add missing > 0 refresh rate check
* move things around
* fixes
* wiki fixes
---------
Co-authored-by: Christian Meissl <meissl.christian@gmail.com>
Co-authored-by: Ivan Molodetskikh <yalterz@gmail.com>
Diffstat (limited to 'src/niri.rs')
| -rw-r--r-- | src/niri.rs | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/src/niri.rs b/src/niri.rs index 5bc69c2e..551439c3 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -1777,8 +1777,44 @@ impl State { niri_ipc::OutputAction::Mode { mode } => { config.mode = match mode { niri_ipc::ModeToSet::Automatic => None, - niri_ipc::ModeToSet::Specific(mode) => Some(mode), - } + niri_ipc::ModeToSet::Specific(mode) => Some(niri_config::output::Mode { + custom: false, + mode, + }), + }; + config.modeline = None; + } + niri_ipc::OutputAction::CustomMode { mode } => { + config.mode = Some(niri_config::output::Mode { custom: true, mode }); + config.modeline = None; + } + niri_ipc::OutputAction::Modeline { + clock, + hdisplay, + hsync_start, + hsync_end, + htotal, + vdisplay, + vsync_start, + vsync_end, + vtotal, + hsync_polarity, + vsync_polarity, + } => { + // Do not reset config.mode to None since it's used as a fallback. + config.modeline = Some(niri_config::output::Modeline { + clock, + hdisplay, + hsync_start, + hsync_end, + htotal, + vdisplay, + vsync_start, + vsync_end, + vtotal, + hsync_polarity, + vsync_polarity, + }) } niri_ipc::OutputAction::Scale { scale } => { config.scale = match scale { |
