use bevy::prelude::*;
#[derive(Resource, PartialEq, Eq, Default)]
pub struct EguiWantsFocus {
pub prev: bool,
pub curr: bool,
}
#[derive(Resource, PartialEq, Eq, Default)]
pub struct EguiFocusIncludesHover(pub bool);
pub fn check_egui_wants_focus(
mut contexts: bevy_egui::EguiContexts,
mut wants_focus: ResMut<EguiWantsFocus>,
include_hover: Res<EguiFocusIncludesHover>,
windows: Query<Entity, With<Window>>,
) {
let new_wants_focus = windows.iter().any(|window| {
if let Some(ctx) = contexts.try_ctx_for_entity_mut(window) {
let mut value = ctx.wants_pointer_input() || ctx.wants_keyboard_input();
if include_hover.0 {
value |= ctx.is_pointer_over_area()
}
value
} else {
false
}
});
let new_res = EguiWantsFocus {
prev: wants_focus.curr,
curr: new_wants_focus,
};
wants_focus.set_if_neq(new_res);
}