aboutsummaryrefslogtreecommitdiff
path: root/src/niri.rs
diff options
context:
space:
mode:
authorMerlijn <32853531+ToxicMushroom@users.noreply.github.com>2025-10-29 07:10:38 +0100
committerGitHub <noreply@github.com>2025-10-29 09:10:38 +0300
commit6a2c6261df130cccb5262eddf71d40b2fffcf8f9 (patch)
tree48639aef4ebddbc315234b925954c5cc768d0f1c /src/niri.rs
parente6f3c538da0c646bda43fcde7ef7dc3b771e0c8b (diff)
downloadniri-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.rs40
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 {