From 8bf3cbc18a82eb062d6abb058ac88d9f6b2cb81b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Mon, 2 Nov 2026 14:48:46 +0100 Subject: [PATCH 1/2] FerroUI b75373981: subscription guards The submodule moves to FerroUI main at b75373981, where the event, timer, property-observation and other subscription APIs return a Subscription guard that removes its handler when dropped (#423 D4/D5). --- FerroUI | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FerroUI b/FerroUI index c4c4cf8..b753739 160000 --- a/FerroUI +++ b/FerroUI @@ -1 +1 @@ -Subproject commit c4c4cf872a3f57166ebb00b343ca4b6c41a55eef +Subproject commit b753739811c34eba24c86ec383232053e914e42e From bb37e48ddeb0126ad4cc8ec526f916f543ed580a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Mon, 2 Nov 2026 14:51:18 +0100 Subject: [PATCH 2/2] Keep the subscriptions that live as long as their source The opened handler of the main window, the delayed find of the reader and its theme change handler subscribe for the life of their source: they detach the Subscription guard, which would otherwise remove the handler when it is dropped. --- Ember/app.rs | 4 ++-- Ember/reader_view.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Ember/app.rs b/Ember/app.rs index 820503d..6968a3d 100644 --- a/Ember/app.rs +++ b/Ember/app.rs @@ -49,11 +49,11 @@ impl ApplicationImpl for App { // scaled screen (1440 x 940 is 2880 x 1880 pixels at 200 %): the window is then // fitted to the work area once it has been placed. let weak = window.downgrade(); - let _ = window.opened(move || { + window.opened(move || { if let Some(window) = weak.upgrade() { fit_to_work_area(&window); } - }); + }).detach(); desktop.set_main_window(Some(window)); } else if let Some(activity) = lifetime .as_ref() diff --git a/Ember/reader_view.rs b/Ember/reader_view.rs index 0d889d2..2262ffe 100644 --- a/Ember/reader_view.rs +++ b/Ember/reader_view.rs @@ -307,7 +307,7 @@ impl ReaderView { }, Duration::from_millis(180), DispatcherPriority::BACKGROUND, - ); + ).detach(); } } }); @@ -414,7 +414,7 @@ impl ReaderView { }, DispatcherPriority::LOADED, ); - }); + }).detach(); } fn connect_platform_back(&self) { if self.back_handler.borrow().is_some() {