diff --git a/src/buffer.rs b/src/buffer.rs index 69f90f829880287c86945f5496582bc9c05b08f2..6ef7451a985251694cb0371be271567017818a95 100644 --- a/src/buffer.rs +++ b/src/buffer.rs @@ -1,5 +1,9 @@ use crate::*; -use bevy::{prelude::*, window::PrimaryWindow}; +use bevy::{ + ecs::component::{ComponentHooks, StorageType}, + prelude::*, + window::PrimaryWindow, +}; use cosmic_text::{Attrs, AttrsOwned, Buffer, Edit, FontSystem, Metrics, Shaping}; /// Set of all buffer setup functions. Runs in [`First`] @@ -55,9 +59,25 @@ impl BufferExtras for Buffer { } /// Component wrapper for [`Buffer`] -#[derive(Component, Deref, DerefMut)] +#[derive(Deref, DerefMut)] pub struct CosmicBuffer(pub Buffer); +impl Component for CosmicBuffer { + const STORAGE_TYPE: StorageType = StorageType::Table; + + fn register_component_hooks(hooks: &mut ComponentHooks) { + hooks.on_remove(|mut world, entity, _| { + if let Some(mut focused_widget) = world.get_resource_mut::<FocusedWidget>() { + if let Some(focused) = focused_widget.0 { + if focused == entity { + focused_widget.0 = None; + } + } + } + }); + } +} + impl Default for CosmicBuffer { fn default() -> Self { CosmicBuffer(Buffer::new_empty(Metrics::new(20., 20.)))