1
0
Fork 0
forked from wry/wry

config: add fallback output mode

This commit is contained in:
khyperia 2025-12-23 14:57:02 +01:00 committed by Julian Orth
parent a975e3b25a
commit dd3f8bad40
16 changed files with 215 additions and 19 deletions

View file

@ -27,7 +27,7 @@ use {
Axis, Direction, Workspace,
client::ClientCapabilities,
input::{
LayerDirection, SwitchEvent, Timeline, acceleration::AccelProfile,
FallbackOutputMode, LayerDirection, SwitchEvent, Timeline, acceleration::AccelProfile,
clickmethod::ClickMethod,
},
keyboard::{Keymap, ModifiedKeySym, mods::Modifiers, syms::KeySym},
@ -537,6 +537,7 @@ pub struct Config {
pub input_modes: AHashMap<String, InputMode>,
pub workspace_display_order: Option<WorkspaceDisplayOrder>,
pub simple_im: Option<SimpleIm>,
pub fallback_output_mode: Option<FallbackOutputMode>,
}
#[derive(Debug, Error)]

View file

@ -21,6 +21,7 @@ mod drm_device;
mod drm_device_match;
mod env;
pub mod exec;
mod fallback_output_mode;
pub mod float;
pub mod focus_history;
mod format;

View file

@ -15,6 +15,7 @@ use {
drm_device::DrmDevicesParser,
drm_device_match::DrmDeviceMatchParser,
env::EnvParser,
fallback_output_mode::FallbackOutputModeParser,
float::FloatParser,
focus_history::FocusHistoryParser,
gfx_api::GfxApiParser,
@ -147,6 +148,7 @@ impl Parser for ConfigParser<'_> {
auto_reload,
simple_im_val,
show_titles,
fallback_output_mode_val,
),
) = ext.extract((
(
@ -204,6 +206,7 @@ impl Parser for ConfigParser<'_> {
recover(opt(bol("auto-reload"))),
opt(val("simple-im")),
recover(opt(bol("show-titles"))),
opt(val("fallback-output-mode")),
),
))?;
let mut keymap = None;
@ -524,6 +527,18 @@ impl Parser for ConfigParser<'_> {
}
}
}
let mut fallback_output_mode = None;
if let Some(value) = fallback_output_mode_val {
match value.parse(&mut FallbackOutputModeParser) {
Ok(v) => fallback_output_mode = Some(v),
Err(e) => {
log::warn!(
"Could not parse the fallback output mode: {}",
self.0.error(e)
);
}
}
}
Ok(Config {
keymap,
repeat_rate,
@ -570,6 +585,7 @@ impl Parser for ConfigParser<'_> {
input_modes,
workspace_display_order,
simple_im,
fallback_output_mode,
})
}
}

View file

@ -0,0 +1,38 @@
use {
crate::{
config::parser::{DataType, ParseResult, Parser, UnexpectedDataType},
toml::toml_span::{Span, SpannedExt},
},
jay_config::input::FallbackOutputMode,
thiserror::Error,
};
pub struct FallbackOutputModeParser;
#[derive(Debug, Error)]
pub enum FallbackOutputModeParserError {
#[error(transparent)]
DataType(#[from] UnexpectedDataType),
#[error("Unknown mode {0}")]
Unknown(String),
}
impl Parser for FallbackOutputModeParser {
type Value = FallbackOutputMode;
type Error = FallbackOutputModeParserError;
const EXPECTED: &'static [DataType] = &[DataType::String];
fn parse_string(&mut self, span: Span, string: &str) -> ParseResult<Self> {
use FallbackOutputMode::*;
let api = match string.to_ascii_lowercase().as_str() {
"cursor" => Cursor,
"focus" => Focus,
_ => {
return Err(
FallbackOutputModeParserError::Unknown(string.to_string()).spanned(span)
);
}
};
Ok(api)
}
}

View file

@ -1627,6 +1627,9 @@ fn load_config(initial_load: bool, auto_reload: bool, persistent: &Rc<Persistent
persistent.seat.set_simple_im_enabled(enabled);
}
}
if let Some(v) = config.fallback_output_mode {
persistent.seat.set_fallback_output_mode(v);
}
}
fn create_command(exec: &Exec) -> Command {