From 3126966e9cc0ca10378946e62950f6d38c8ce180 Mon Sep 17 00:00:00 2001 From: databasedav <31483365+databasedav@users.noreply.github.com> Date: Fri, 13 Sep 2024 01:12:48 -0700 Subject: [PATCH] add component hook for unfocusing widget on despawn (#159) * cosmic buffer on remove unfocus hook * fmt --------- Co-authored-by: Dimchikkk <111751109+Dimchikkk@users.noreply.github.com> --- src/buffer.rs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/buffer.rs b/src/buffer.rs index 69f90f8..6ef7451 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.))) -- GitLab