diff --git a/data/ui/window.blp b/data/ui/window.blp index b56a277..6c0192d 100644 --- a/data/ui/window.blp +++ b/data/ui/window.blp @@ -9,8 +9,8 @@ template $FeedTheMonkeyWindow : Adw.ApplicationWindow { Adw.ToastOverlay toast_overlay { Paned paned { focusable: false; + shrink-start-child: false; resize-start-child: false; - shrink-end-child: false; start-child: Adw.ToolbarView sidebar_toolbar { top-bar-style: raised; @@ -107,7 +107,6 @@ template $FeedTheMonkeyWindow : Adw.ApplicationWindow { end-child: Adw.ToolbarView { top-bar-style: raised; - width-request: 320; [top] Adw.HeaderBar { @@ -118,39 +117,10 @@ template $FeedTheMonkeyWindow : Adw.ApplicationWindow { action-name: "win.toggle-sidebar"; } - [start] - Stack content_refresh_stack { - visible: false; - StackPage { - name: "button"; - child: Button { - icon-name: "view-refresh-symbolic"; - tooltip-text: _("Refresh"); - action-name: "win.reload"; - }; - } - StackPage { - name: "spinner"; - child: Spinner { - spinning: true; - width-request: 16; - height-request: 16; - }; - } - } - title-widget: Adw.WindowTitle { title: _("FeedTheMonkey"); }; - [end] - MenuButton content_menu_button { - icon-name: "open-menu-symbolic"; - primary: true; - menu-model: primary_menu; - visible: false; - } - [end] MenuButton article_menu_button { icon-name: "view-more-symbolic"; diff --git a/data/ui/window.ui b/data/ui/window.ui index 8ecec84..e9cd9cc 100644 --- a/data/ui/window.ui +++ b/data/ui/window.ui @@ -14,8 +14,8 @@ corresponding .blp file and regenerate this file with blueprint-compiler. false + false false - false 1 @@ -146,7 +146,6 @@ corresponding .blp file and regenerate this file with blueprint-compiler. 1 - 320 @@ -156,48 +155,11 @@ corresponding .blp file and regenerate this file with blueprint-compiler. win.toggle-sidebar - - - false - - - button - - - view-refresh-symbolic - Refresh - win.reload - - - - - - - spinner - - - true - 16 - 16 - - - - - - FeedTheMonkey - - - open-menu-symbolic - true - primary_menu - false - - view-more-symbolic diff --git a/src/window.rs b/src/window.rs index cd61845..c3c0699 100644 --- a/src/window.rs +++ b/src/window.rs @@ -45,10 +45,6 @@ pub mod imp { #[template_child] pub article_menu_button: TemplateChild, #[template_child] - pub content_refresh_stack: TemplateChild, - #[template_child] - pub content_menu_button: TemplateChild, - #[template_child] pub sidebar_content: TemplateChild, #[template_child] pub article_list_view: TemplateChild, @@ -168,24 +164,12 @@ pub mod imp { self.sidebar_zoom_css.set(zoom_css).ok(); self.update_sidebar_zoom(zoom); - // Persist sidebar width while dragging; collapse when dragged too narrow. + // Persist sidebar width while dragging (only when visible) let s2 = settings.clone(); - let win_weak = self.obj().downgrade(); + let sidebar_weak = self.sidebar_toolbar.downgrade(); self.paned.connect_notify_local(Some("position"), move |paned, _| { - let Some(win) = win_weak.upgrade() else { return }; - let imp = win.imp(); - if !imp.sidebar_toolbar.is_visible() { return; } - let pos = paned.position(); - if pos < 150 { - // Defer so we don't change widget visibility mid-drag. - let win_weak2 = win_weak.clone(); - glib::idle_add_local_once(move || { - if let Some(win) = win_weak2.upgrade() { - win.imp().set_sidebar_visible(false); - } - }); - } else { - s2.set_int("sidebar-width", pos).ok(); + if sidebar_weak.upgrade().map(|s| s.is_visible()).unwrap_or(false) { + s2.set_int("sidebar-width", paned.position()).ok(); } }); @@ -425,16 +409,11 @@ pub mod imp { fn setup_sidebar_toggle(&self) {} fn do_toggle_sidebar(&self) { - self.set_sidebar_visible(!self.sidebar_toolbar.is_visible()); - } - - fn set_sidebar_visible(&self, visible: bool) { - self.sidebar_toolbar.set_visible(visible); - // Mirror refresh stack state and primary menu in the content header - // when the sidebar is hidden, so those controls remain accessible. - self.content_refresh_stack.set_visible(!visible); - self.content_menu_button.set_visible(!visible); - if visible { + let sidebar = &*self.sidebar_toolbar; + if sidebar.is_visible() { + sidebar.set_visible(false); + } else { + sidebar.set_visible(true); let settings = gio::Settings::new("net.jeena.FeedTheMonkey"); let saved = settings.int("sidebar-width"); self.paned.set_position(if saved > 0 { saved } else { 280 }); @@ -651,7 +630,6 @@ pub mod imp { *self.filter_rules.borrow_mut() = crate::filters::load_rules(); self.refresh_stack.set_visible_child_name("spinner"); - self.content_refresh_stack.set_visible_child_name("spinner"); // Only show the loading screen if there's nothing to show yet. let has_articles = self.article_store.borrow() @@ -747,7 +725,6 @@ pub mod imp { } } imp.refresh_stack.set_visible_child_name("button"); - imp.content_refresh_stack.set_visible_child_name("button"); }, ); }