feat: support authorized input methods

This commit is contained in:
Samuel Onoja committed 2026-09-25 01:07:44 +01:00
1 parent 6dc2a5300e
commit f6dce3316a
4 files changed
+87 -1

No files matched your search

+61
View File
@@ -0,0 +1,61 @@
use smithay::{
desktop::{PopupKind, WindowSurfaceType, layer_map_for_output},
reexports::wayland_server::protocol::wl_surface::WlSurface,
utils::{Logical, Rectangle},
wayland::input_method::{InputMethodHandler, PopupSurface},
};
use crate::Ferese;
impl InputMethodHandler for Ferese {
fn new_popup(&mut self, surface: PopupSurface) {
if let Err(error) = self
.popups
.track_popup(PopupKind::InputMethod(surface.clone()))
{
tracing::warn!(?error, "failed to track input method popup");
}
crate::backends::direct::render_all(self);
}
fn dismiss_popup(&mut self, _surface: PopupSurface) {
self.popups.cleanup();
crate::backends::direct::render_all(self);
}
fn popup_repositioned(&mut self, _surface: PopupSurface) {
crate::backends::direct::render_all(self);
}
fn parent_geometry(&self, parent: &WlSurface) -> Rectangle<i32, Logical> {
if let Some(geometry) = self.space.elements().find_map(|window| {
window
.toplevel()
.is_some_and(|toplevel| toplevel.wl_surface() == parent)
.then(|| self.space.element_geometry(window))
.flatten()
}) {
return geometry;
}
let Some(layer) = self
.space
.layer_for_surface(parent, WindowSurfaceType::TOPLEVEL)
else {
return Rectangle::default();
};
self.space
.outputs()
.find_map(|output| {
let output_geometry = self.space.output_geometry(output)?;
let layer_geometry = layer_map_for_output(output).layer_geometry(&layer)?;
Some(Rectangle::new(
output_geometry.loc + layer_geometry.loc,
layer_geometry.size,
))
})
.unwrap_or_default()
}
}
+3
View File
@@ -1,5 +1,6 @@
mod activation;
mod compositor;
mod input_method;
mod layer_shell;
mod xdg_shell;
@@ -237,6 +238,7 @@ smithay::delegate_data_device!(Ferese);
smithay::delegate_fractional_scale!(Ferese);
smithay::delegate_idle_inhibit!(Ferese);
smithay::delegate_idle_notify!(Ferese);
smithay::delegate_input_method_manager!(Ferese);
smithay::delegate_keyboard_shortcuts_inhibit!(Ferese);
smithay::delegate_layer_shell!(Ferese);
smithay::delegate_output!(Ferese);
@@ -247,6 +249,7 @@ smithay::delegate_relative_pointer!(Ferese);
smithay::delegate_seat!(Ferese);
smithay::delegate_shm!(Ferese);
smithay::delegate_single_pixel_buffer!(Ferese);
smithay::delegate_text_input_manager!(Ferese);
smithay::delegate_viewporter!(Ferese);
smithay::delegate_xdg_activation!(Ferese);
smithay::delegate_xdg_decoration!(Ferese);