pub fn process_safari_virtual_keyboard_system(
    egui_contexts: Query<(&EguiInput, &EguiOutput)>,
    safari_virtual_keyboard_touch_state: Res<SafariVirtualKeyboardTouchState>,
) {
    let mut received = false;
    while let Ok(()) = safari_virtual_keyboard_touch_state.receiver.try_recv() {
        received = true;
    }
    if !received {
        return;
    }

    let mut editing_text = false;
    for (egui_input, egui_output) in egui_contexts.iter() {
        if !egui_input.focused {
            continue;
        }
        let platform_output = &egui_output.platform_output;
        if platform_output.ime.is_some() || platform_output.mutable_text_under_cursor {
            editing_text = true;
            break;
        }
    }

    match safari_virtual_keyboard_touch_state.touch_info.lock() {
        Ok(mut touch_info) => {
            touch_info.editing_text = editing_text;
        }
        Err(poisoned) => {
            let _unused = poisoned.into_inner();
        }
    };
}
Listens to the [`SafariVirtualKeyboardTouchState`] channel and updates the wrapped [`VirtualTouchInfo`].
src/text_agent.rs