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), UseHardwareCursor(UseHardwareCursorArgs),
/// Set the size of the cursor. /// Set the size of the cursor.
SetCursorSize(SetCursorSizeArgs), 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 { impl Default for SeatCommand {
@ -460,6 +482,27 @@ impl Input {
size: a.size, 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; tc.round_trip().await;
} }

View file

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

View file

@ -515,6 +515,30 @@ impl JayInputRequestHandler for JayInput {
Ok(()) 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! { object_base! {

View file

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

View file

@ -134,6 +134,15 @@ request set_middle_button_emulation (since = 19) {
enabled: u32, enabled: u32,
} }
request set_simple_im_enabled (since = 22) {
seat: str,
enabled: u32,
}
request reload_simple_im (since = 22) {
seat: str,
}
# events # events
event seat { event seat {