From c19c2cbd1d7ff348ed401123a90174eb0d88d528 Mon Sep 17 00:00:00 2001 From: Jeena Date: Sat, 21 Mar 2026 13:09:28 +0000 Subject: [PATCH] window: scale sidebar fonts with zoom level --- src/window.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/window.rs b/src/window.rs index e0991ed..91181c8 100644 --- a/src/window.rs +++ b/src/window.rs @@ -63,6 +63,7 @@ pub mod imp { pub current_article_id: RefCell>, pub mark_unread_guard: RefCell, pub pending_restore_id: RefCell>, + pub sidebar_zoom_css: std::cell::OnceCell, } #[glib::object_subclass] @@ -140,6 +141,16 @@ pub mod imp { let zoom = settings.double("zoom-level"); self.web_view.set_zoom_level(zoom); + // Set up sidebar font zoom CSS provider + let zoom_css = gtk4::CssProvider::new(); + gtk4::style_context_add_provider_for_display( + >k4::gdk::Display::default().unwrap(), + &zoom_css, + gtk4::STYLE_PROVIDER_PRIORITY_APPLICATION, + ); + self.sidebar_zoom_css.set(zoom_css).ok(); + self.update_sidebar_zoom(zoom); + // Persist sidebar width while dragging (only when visible) let s2 = settings.clone(); let sidebar_weak = self.sidebar_toolbar.downgrade(); @@ -794,16 +805,26 @@ pub mod imp { // ── Zoom ────────────────────────────────────────────────────────────── + fn update_sidebar_zoom(&self, level: f64) { + if let Some(css) = self.sidebar_zoom_css.get() { + css.load_from_string(&format!( + ".sidebar-content label {{ font-size: {level}em; }}" + )); + } + } + fn zoom(&self, factor: f64) { let wv = &*self.web_view; let new_level = (wv.zoom_level() * factor).clamp(0.25, 5.0); wv.set_zoom_level(new_level); + self.update_sidebar_zoom(new_level); let settings = gio::Settings::new("net.jeena.FeedTheMonkey"); settings.set_double("zoom-level", new_level).ok(); } fn zoom_reset(&self) { self.web_view.set_zoom_level(1.0); + self.update_sidebar_zoom(1.0); let settings = gio::Settings::new("net.jeena.FeedTheMonkey"); settings.set_double("zoom-level", 1.0).ok(); }