1
0
Fork 0
forked from wry/wry

cli: allow configuring the simple IM

This commit is contained in:
Julian Orth 2025-10-16 13:12:25 +02:00
parent 2f22a61710
commit 9ac4fea594
5 changed files with 78 additions and 2 deletions

View file

@ -83,6 +83,28 @@ pub enum SeatCommand {
UseHardwareCursor(UseHardwareCursorArgs),
/// Set the size of the cursor.
SetCursorSize(SetCursorSizeArgs),
/// Configure the simple, XCompose based input method.
SimpleIm(SimpleImArgs),
}
#[derive(Args, Debug, Clone)]
pub struct SimpleImArgs {
#[clap(subcommand)]
pub command: SimpleImCommand,
}
#[derive(Subcommand, Debug, Clone)]
pub enum SimpleImCommand {
/// Enable the simple IM.
///
/// Even if the IM is enabled, it will not be used if an external IM is running.
Enable,
/// Disable the simple IM.
Disable,
/// Reload the simple IM.
///
/// This is useful if you change the XCompose files after starting the compositor.
Reload,
}
impl Default for SeatCommand {
@ -460,6 +482,27 @@ impl Input {
size: a.size,
});
}
SeatCommand::SimpleIm(a) => match a.command {
SimpleImCommand::Enable | SimpleImCommand::Disable => {
self.handle_error(input, |e| {
eprintln!("Could not enable/disable the simple IM: {}", e);
});
tc.send(jay_input::SetSimpleImEnabled {
self_id: input,
seat: &args.seat,
enabled: matches!(a.command, SimpleImCommand::Enable) as _,
});
}
SimpleImCommand::Reload => {
self.handle_error(input, |e| {
eprintln!("Could not reload the simple IM: {}", e);
});
tc.send(jay_input::ReloadSimpleIm {
self_id: input,
seat: &args.seat,
});
}
},
}
tc.round_trip().await;
}

View file

@ -79,7 +79,7 @@ impl Global for JayCompositorGlobal {
}
fn version(&self) -> u32 {
21
22
}
fn required_caps(&self) -> ClientCaps {

View file

@ -515,6 +515,30 @@ impl JayInputRequestHandler for JayInput {
Ok(())
})
}
fn set_simple_im_enabled(
&self,
req: SetSimpleImEnabled<'_>,
_slf: &Rc<Self>,
) -> Result<(), Self::Error> {
self.or_error(|| {
let seat = self.seat(req.seat)?;
seat.set_simple_im_enabled(req.enabled != 0);
Ok(())
})
}
fn reload_simple_im(
&self,
req: ReloadSimpleIm<'_>,
_slf: &Rc<Self>,
) -> Result<(), Self::Error> {
self.or_error(|| {
let seat = self.seat(req.seat)?;
seat.reload_simple_im();
Ok(())
})
}
}
object_base! {

View file

@ -335,7 +335,7 @@ impl ToolClient {
self_id: s.registry,
name: s.jay_compositor.0,
interface: JayCompositor.name(),
version: s.jay_compositor.1.min(21),
version: s.jay_compositor.1.min(22),
id: id.into(),
});
self.jay_compositor.set(Some(id));