From a099af394bc0ad60faeefda78e752994134decbc Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Mon, 6 Mar 2023 19:26:26 +0100 Subject: [PATCH] shell: Refresh Title in SSD --- src/shell/element/window.rs | 19 +++++++++++++++++-- src/utils/iced.rs | 8 ++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/shell/element/window.rs b/src/shell/element/window.rs index 90623643..1627fbbb 100644 --- a/src/shell/element/window.rs +++ b/src/shell/element/window.rs @@ -63,6 +63,7 @@ pub struct CosmicWindowInternal { /// TODO: This needs to be per seat pointer_entered: Arc, last_seat: Arc, Serial)>>>, + last_title: Arc>, } impl fmt::Debug for CosmicWindowInternal { @@ -109,11 +110,13 @@ impl CosmicWindow { ) -> CosmicWindow { let window = window.into(); let width = window.geometry().size.w; + let last_title = window.title(); CosmicWindow(IcedElement::new( CosmicWindowInternal { window, pointer_entered: Arc::new(AtomicU8::new(Focus::None as u8)), last_seat: Arc::new(Mutex::new(None)), + last_title: Arc::new(Mutex::new(last_title)), }, (width, SSD_HEIGHT), handle, @@ -239,7 +242,7 @@ impl Program for CosmicWindowInternal { fn view(&self) -> Element<'_, Self::Message> { cosmic::widget::header_bar() - .title(self.window.title()) + .title(self.last_title.lock().unwrap().clone()) .on_drag(Message::DragStart) .on_maximize(Message::Maximize) .on_close(Message::Close) @@ -344,7 +347,19 @@ impl SpaceElement for CosmicWindow { } fn refresh(&self) { SpaceElement::refresh(&self.0); - self.0.with_program(|p| SpaceElement::refresh(&p.window)) + if self.0.with_program(|p| { + SpaceElement::refresh(&p.window); + let title = p.window.title(); + let mut last_title = p.last_title.lock().unwrap(); + if *last_title != title { + *last_title = title; + true + } else { + false + } + }) { + self.0.force_update(); + } } } diff --git a/src/utils/iced.rs b/src/utils/iced.rs index 02386ca1..9d833adb 100644 --- a/src/utils/iced.rs +++ b/src/utils/iced.rs @@ -227,6 +227,14 @@ impl IcedElement

{ } internal_ref.update(true); } + + pub fn force_update(&self) { + let mut internal = self.0.lock().unwrap(); + internal.update(true); + for (_buffer, ref mut needs_redraw) in internal.buffers.values_mut() { + *needs_redraw = true; + } + } } impl IcedElementInternal

{