From c8a473b9bb3c070a92a3fc00dc67332c07342b86 Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Tue, 3 Nov 2020 16:41:17 +0100 Subject: [PATCH] Go back to sidebar when collapsed --- res/ui/recording_selector.ui | 9 ++++----- res/ui/window.ui | 1 - src/dialogs/recording_selector.rs | 4 ++++ src/widgets/navigator.rs | 9 +++++++++ src/window.rs | 3 +++ 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/res/ui/recording_selector.ui b/res/ui/recording_selector.ui index 37d8a8c..a07ca59 100644 --- a/res/ui/recording_selector.ui +++ b/res/ui/recording_selector.ui @@ -1,8 +1,8 @@ - - + + True False @@ -12,7 +12,6 @@ True False True - Select a recording True @@ -95,7 +94,6 @@ True False sidebar_box - True 250 @@ -107,6 +105,7 @@ True False + Select a recording False @@ -140,7 +139,7 @@ False vertical diff --git a/res/ui/window.ui b/res/ui/window.ui index a74220f..ca4574f 100644 --- a/res/ui/window.ui +++ b/res/ui/window.ui @@ -233,7 +233,6 @@ True False - True 250 diff --git a/src/dialogs/recording_selector.rs b/src/dialogs/recording_selector.rs index dcf30dd..787b599 100644 --- a/src/dialogs/recording_selector.rs +++ b/src/dialogs/recording_selector.rs @@ -40,6 +40,10 @@ impl RecordingSelector { let navigator = Navigator::new(&empty_screen); leaflet.add(&navigator.widget); + navigator.set_back_cb(clone!(@strong leaflet, @strong sidebar_box => move || { + leaflet.set_visible_child(&sidebar_box); + })); + let result = Rc::new(Self { backend: backend, window: window, diff --git a/src/widgets/navigator.rs b/src/widgets/navigator.rs index 9274a31..1a94ff7 100644 --- a/src/widgets/navigator.rs +++ b/src/widgets/navigator.rs @@ -13,6 +13,7 @@ pub struct Navigator { pub widget: gtk::Stack, screens: RefCell>>, old_screens: RefCell>>, + back_cb: RefCell ()>>>, } impl Navigator { @@ -30,6 +31,7 @@ impl Navigator { widget, screens: RefCell::new(Vec::new()), old_screens: RefCell::new(Vec::new()), + back_cb: RefCell::new(None), }); unsafe { @@ -46,6 +48,10 @@ impl Navigator { result } + pub fn set_back_cb(&self, cb: F) where F: Fn() -> () + 'static { + self.back_cb.replace(Some(Box::new(cb))); + } + pub fn push(self: Rc, screen: Rc) where S: NavigatorScreen + 'static, @@ -80,6 +86,9 @@ impl Navigator { screen.attach_navigator(self.clone()); } else { self.widget.set_visible_child_name("empty_screen"); + if let Some(cb) = &*self.back_cb.borrow() { + cb() + } } if !self.widget.get_transition_running() { diff --git a/src/window.rs b/src/window.rs index bec7bbf..0709914 100644 --- a/src/window.rs +++ b/src/window.rs @@ -38,6 +38,9 @@ impl Window { let poe_list = PoeList::new(backend.clone()); let navigator = Navigator::new(&empty_screen); + navigator.set_back_cb(clone!(@strong leaflet, @strong sidebar_box => move || { + leaflet.set_visible_child(&sidebar_box); + })); let result = Rc::new(Self { backend,