pub fn set_ime_allowed_system(
    mut egui_context: Query<(&EguiOutput, &mut EguiContextImeState)>,
    windows: Query<Entity, With<Window>>,
    winit_windows: NonSendMut<WinitWindows>,
) {
    // we are on mobile, so we expect a single window
    let Ok(window) = windows.single() else {
        return;
    };

    let Some(winit_window) = winit_windows.get_window(window) else {
        warn!(
            "cannot access underlying winit window for window entity {}",
            window
        );

        return;
    };

    let Ok((egui_output, mut egui_ime_state)) = egui_context.single_mut() else {
        return;
    };

    let ime_allowed = egui_output.platform_output.ime.is_some();
    if ime_allowed != egui_ime_state.is_ime_allowed {
        winit_window.set_ime_allowed(ime_allowed);
        egui_ime_state.is_ime_allowed = ime_allowed;
    }
}
Show the virtual keyboard when a text input is focused.
Works by reading [`EguiOutput`] and calling `Window::set_ime_allowed` if the `ime` field is set.
src/input.rs