Go back to sidebar when collapsed

This commit is contained in:
Elias Projahn 2020-11-03 16:41:17 +01:00
parent 6d66317687
commit c8a473b9bb
5 changed files with 20 additions and 6 deletions

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.1 -->
<interface>
<requires lib="gtk+" version="3.22"/>
<requires lib="libhandy" version="1.0"/>
<requires lib="gtk+" version="3.22" />
<requires lib="libhandy" version="1.0" />
<object class="GtkBox" id="empty_screen">
<property name="visible">True</property>
<property name="can-focus">False</property>
@ -12,7 +12,6 @@
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="title" translatable="yes">Select a recording</property>
<property name="show-close-button">True</property>
</object>
<packing>
@ -95,7 +94,6 @@
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="visible-child">sidebar_box</property>
<property name="can-swipe-back">True</property>
<child>
<object class="GtkBox" id="sidebar_box">
<property name="width-request">250</property>
@ -107,6 +105,7 @@
<object class="HdyHeaderBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="title" translatable="yes">Select a recording</property>
<property name="show-close-button" bind-source="leaflet" bind-property="folded" bind-flags="sync-create">False</property>
<child>
<object class="GtkButton" id="add_button">
@ -140,7 +139,7 @@
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<style>
<class name="sidebar"/>
<class name="sidebar" />
</style>
</object>
<packing>

View file

@ -233,7 +233,6 @@
<object class="HdyLeaflet" id="leaflet">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="can-swipe-back">True</property>
<child>
<object class="GtkBox" id="sidebar_box">
<property name="width-request">250</property>

View file

@ -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,

View file

@ -13,6 +13,7 @@ pub struct Navigator {
pub widget: gtk::Stack,
screens: RefCell<Vec<Rc<dyn NavigatorScreen>>>,
old_screens: RefCell<Vec<Rc<dyn NavigatorScreen>>>,
back_cb: RefCell<Option<Box<dyn Fn() -> ()>>>,
}
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<F>(&self, cb: F) where F: Fn() -> () + 'static {
self.back_cb.replace(Some(Box::new(cb)));
}
pub fn push<S>(self: Rc<Self>, screen: Rc<S>)
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() {

View file

@ -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,