mirror of
https://gitlab.com/gabmus/envision.git
synced 2025-08-04 15:18:58 +00:00
feat: scroll build window only if close to bottom
This commit is contained in:
parent
ff744853b6
commit
512a0d6414
1 changed files with 16 additions and 4 deletions
|
@ -23,6 +23,8 @@ pub struct BuildWindow {
|
||||||
pub win: Option<adw::Window>,
|
pub win: Option<adw::Window>,
|
||||||
#[tracker::do_not_track]
|
#[tracker::do_not_track]
|
||||||
build_status_label: Option<gtk::Label>,
|
build_status_label: Option<gtk::Label>,
|
||||||
|
#[tracker::do_not_track]
|
||||||
|
scrolledwin: Option<gtk::ScrolledWindow>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
@ -87,6 +89,7 @@ impl SimpleComponent for BuildWindow {
|
||||||
set_justify: gtk::Justification::Center,
|
set_justify: gtk::Justification::Center,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
#[name(scrolledwin)]
|
||||||
gtk::ScrolledWindow {
|
gtk::ScrolledWindow {
|
||||||
set_hexpand: true,
|
set_hexpand: true,
|
||||||
set_vexpand: true,
|
set_vexpand: true,
|
||||||
|
@ -135,6 +138,11 @@ impl SimpleComponent for BuildWindow {
|
||||||
}
|
}
|
||||||
Self::Input::UpdateContent(c) => {
|
Self::Input::UpdateContent(c) => {
|
||||||
if c.len() > 0 {
|
if c.len() > 0 {
|
||||||
|
let is_at_bottom = {
|
||||||
|
let adj = self.scrolledwin.as_ref().unwrap().vadjustment();
|
||||||
|
(adj.upper() - adj.page_size() - adj.value()) <= 15.0
|
||||||
|
};
|
||||||
|
|
||||||
let n_lines = c.concat();
|
let n_lines = c.concat();
|
||||||
let mut n_content = self.content.clone();
|
let mut n_content = self.content.clone();
|
||||||
n_content.push_str(n_lines.as_str());
|
n_content.push_str(n_lines.as_str());
|
||||||
|
@ -145,12 +153,14 @@ impl SimpleComponent for BuildWindow {
|
||||||
);
|
);
|
||||||
let textbuf = self.textbuf.clone();
|
let textbuf = self.textbuf.clone();
|
||||||
let textview = self.textview.as_ref().unwrap().clone();
|
let textview = self.textview.as_ref().unwrap().clone();
|
||||||
|
if is_at_bottom {
|
||||||
gtk::glib::idle_add_local_once(move || {
|
gtk::glib::idle_add_local_once(move || {
|
||||||
let end_mark = textbuf.create_mark(None, &textbuf.end_iter(), false);
|
let end_mark = textbuf.create_mark(None, &textbuf.end_iter(), false);
|
||||||
textview.scroll_mark_onscreen(&end_mark);
|
textview.scroll_mark_onscreen(&end_mark);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Self::Input::UpdateBuildStatus(status) => {
|
Self::Input::UpdateBuildStatus(status) => {
|
||||||
let label = self.build_status_label.as_ref().unwrap();
|
let label = self.build_status_label.as_ref().unwrap();
|
||||||
label.remove_css_class("success");
|
label.remove_css_class("success");
|
||||||
|
@ -182,12 +192,14 @@ impl SimpleComponent for BuildWindow {
|
||||||
textview: None,
|
textview: None,
|
||||||
build_status: BuildStatus::Building,
|
build_status: BuildStatus::Building,
|
||||||
win: None,
|
win: None,
|
||||||
|
scrolledwin: None,
|
||||||
build_status_label: None,
|
build_status_label: None,
|
||||||
};
|
};
|
||||||
let widgets = view_output!();
|
let widgets = view_output!();
|
||||||
model.win = Some(widgets.win.clone());
|
model.win = Some(widgets.win.clone());
|
||||||
model.build_status_label = Some(widgets.build_status_label.clone());
|
model.build_status_label = Some(widgets.build_status_label.clone());
|
||||||
model.textview = Some(widgets.textview.clone());
|
model.textview = Some(widgets.textview.clone());
|
||||||
|
model.scrolledwin = Some(widgets.scrolledwin.clone());
|
||||||
ComponentParts { model, widgets }
|
ComponentParts { model, widgets }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue