EpisodesView: Retain vertical scrolling adjustment upon view refresh.
This commit is contained in:
parent
9d82b0edda
commit
112b61d39e
@ -3,11 +3,13 @@
|
|||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="3.20"/>
|
<requires lib="gtk+" version="3.20"/>
|
||||||
<object class="GtkBox" id="container">
|
<object class="GtkBox" id="container">
|
||||||
|
<property name="name">container</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkScrolledWindow">
|
<object class="GtkScrolledWindow" id="scrolled_window">
|
||||||
|
<property name="name">scrolled_window</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="shadow_type">in</property>
|
<property name="shadow_type">in</property>
|
||||||
|
|||||||
@ -134,12 +134,8 @@ impl App {
|
|||||||
utils::refresh_feed(headerbar.clone(), Some(vec![s]), sender.clone())
|
utils::refresh_feed(headerbar.clone(), Some(vec![s]), sender.clone())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(Action::RefreshViews) => {
|
Ok(Action::RefreshViews) => content.update(),
|
||||||
content.update();
|
Ok(Action::RefreshEpisodesViewBGR) => content.update_episode_view_if_baground(),
|
||||||
}
|
|
||||||
Ok(Action::RefreshEpisodesViewBGR) => {
|
|
||||||
content.update_episode_view_if_baground();
|
|
||||||
}
|
|
||||||
Ok(Action::HeaderBarShowTile(title)) => headerbar.switch_to_back(&title),
|
Ok(Action::HeaderBarShowTile(title)) => headerbar.switch_to_back(&title),
|
||||||
Ok(Action::HeaderBarNormal) => headerbar.switch_to_normal(),
|
Ok(Action::HeaderBarNormal) => headerbar.switch_to_normal(),
|
||||||
Ok(Action::HeaderBarHideUpdateIndicator) => headerbar.hide_update_notification(),
|
Ok(Action::HeaderBarHideUpdateIndicator) => headerbar.hide_update_notification(),
|
||||||
|
|||||||
@ -193,8 +193,27 @@ impl EpisodeStack {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn update(&self) {
|
pub fn update(&self) {
|
||||||
let old = self.stack.get_child_by_name("episodes").unwrap();
|
use gtk::Cast;
|
||||||
|
|
||||||
|
let old = self.stack
|
||||||
|
.get_child_by_name("episodes")
|
||||||
|
.unwrap()
|
||||||
|
.downcast::<gtk::Box>()
|
||||||
|
.unwrap();
|
||||||
|
info!("Name: {:?}", WidgetExt::get_name(&old));
|
||||||
|
|
||||||
|
let scrolled_window = old.get_children()
|
||||||
|
.first()
|
||||||
|
.unwrap()
|
||||||
|
.clone()
|
||||||
|
.downcast::<gtk::ScrolledWindow>()
|
||||||
|
.unwrap();
|
||||||
|
info!("Name: {:?}", WidgetExt::get_name(&scrolled_window));
|
||||||
|
|
||||||
let eps = EpisodesView::new(self.sender.clone());
|
let eps = EpisodesView::new(self.sender.clone());
|
||||||
|
scrolled_window
|
||||||
|
.get_vadjustment()
|
||||||
|
.map(|x| eps.set_vadjustment(&x));
|
||||||
|
|
||||||
self.stack.remove(&old);
|
self.stack.remove(&old);
|
||||||
self.stack.add_named(&eps.container, "episodes");
|
self.stack.add_named(&eps.container, "episodes");
|
||||||
|
|||||||
@ -24,6 +24,7 @@ enum ListSplit {
|
|||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct EpisodesView {
|
pub struct EpisodesView {
|
||||||
pub container: gtk::Box,
|
pub container: gtk::Box,
|
||||||
|
scrolled_window: gtk::ScrolledWindow,
|
||||||
frame_parent: gtk::Box,
|
frame_parent: gtk::Box,
|
||||||
today_box: gtk::Box,
|
today_box: gtk::Box,
|
||||||
yday_box: gtk::Box,
|
yday_box: gtk::Box,
|
||||||
@ -41,6 +42,7 @@ impl Default for EpisodesView {
|
|||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/episodes_view.ui");
|
let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/episodes_view.ui");
|
||||||
let container: gtk::Box = builder.get_object("container").unwrap();
|
let container: gtk::Box = builder.get_object("container").unwrap();
|
||||||
|
let scrolled_window: gtk::ScrolledWindow = builder.get_object("scrolled_window").unwrap();
|
||||||
let frame_parent: gtk::Box = builder.get_object("frame_parent").unwrap();
|
let frame_parent: gtk::Box = builder.get_object("frame_parent").unwrap();
|
||||||
let today_box: gtk::Box = builder.get_object("today_box").unwrap();
|
let today_box: gtk::Box = builder.get_object("today_box").unwrap();
|
||||||
let yday_box: gtk::Box = builder.get_object("yday_box").unwrap();
|
let yday_box: gtk::Box = builder.get_object("yday_box").unwrap();
|
||||||
@ -55,6 +57,7 @@ impl Default for EpisodesView {
|
|||||||
|
|
||||||
EpisodesView {
|
EpisodesView {
|
||||||
container,
|
container,
|
||||||
|
scrolled_window,
|
||||||
frame_parent,
|
frame_parent,
|
||||||
today_box,
|
today_box,
|
||||||
yday_box,
|
yday_box,
|
||||||
@ -147,6 +150,10 @@ impl EpisodesView {
|
|||||||
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_vadjustment(&self, vadjustment: >k::Adjustment) {
|
||||||
|
self.scrolled_window.set_vadjustment(vadjustment)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn split(now: &DateTime<Utc>, epoch: i64) -> ListSplit {
|
fn split(now: &DateTime<Utc>, epoch: i64) -> ListSplit {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user