view.rs: fix redrawing errors

memfd
Manos Pitsidianakis 2020-03-28 11:46:10 +02:00
parent a3903ea2cb
commit e034f4dd52
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
2 changed files with 44 additions and 57 deletions

View File

@ -1210,7 +1210,7 @@ impl Component for MailView {
if shortcut!(key == shortcuts[MailView::DESCRIPTION]["toggle_expand_headers"]) => if shortcut!(key == shortcuts[MailView::DESCRIPTION]["toggle_expand_headers"]) =>
{ {
self.expand_headers = !self.expand_headers; self.expand_headers = !self.expand_headers;
self.dirty = true; self.set_dirty(true);
return true; return true;
} }
UIEvent::Input(ref key) UIEvent::Input(ref key)

View File

@ -62,7 +62,6 @@ pub struct ThreadView {
movement: Option<PageMovement>, movement: Option<PageMovement>,
dirty: bool, dirty: bool,
content: CellBuffer, content: CellBuffer,
initiated: bool,
id: ComponentId, id: ComponentId,
} }
@ -82,7 +81,6 @@ impl ThreadView {
) -> Self { ) -> Self {
let mut view = ThreadView { let mut view = ThreadView {
reversed: false, reversed: false,
initiated: false,
coordinates, coordinates,
thread_group, thread_group,
mailview: MailView::default(), mailview: MailView::default(),
@ -799,57 +797,53 @@ impl ThreadView {
return; return;
} }
/* if this is the first ever draw, there is nothing on the grid to update so populate it clear_area(
* first */ grid,
if !self.initiated { (set_y(upper_left, y), set_y(bottom_right, mid + 1)),
clear_area( crate::conf::value(context, "theme_default"),
grid, );
(set_y(upper_left, y), bottom_right), let (width, height) = self.content.size();
crate::conf::value(context, "theme_default"),
);
let (width, height) = self.content.size();
match (self.show_mailview, self.show_thread) { match (self.show_mailview, self.show_thread) {
(true, true) => { (true, true) => {
let area = (set_y(upper_left, y), set_y(bottom_right, mid)); let area = (set_y(upper_left, y), set_y(bottom_right, mid));
let upper_left = upper_left!(area); let upper_left = upper_left!(area);
let bottom_right = bottom_right!(area); let bottom_right = bottom_right!(area);
let rows = (get_y(bottom_right).saturating_sub(get_y(upper_left) + 1)) / 2; let rows = (get_y(bottom_right).saturating_sub(get_y(upper_left) + 1)) / 2;
if rows == 0 { if rows == 0 {
return; return;
}
let page_no = (self.new_cursor_pos).wrapping_div(rows);
let top_idx = page_no * rows;
copy_area(
grid,
&self.content,
area,
((0, 2 * top_idx), (width - 1, height - 1)),
);
} }
(false, true) => { let page_no = (self.new_cursor_pos).wrapping_div(rows);
let area = (set_y(upper_left, y), bottom_right); let top_idx = page_no * rows;
let upper_left = upper_left!(area);
let rows = (get_y(bottom_right).saturating_sub(get_y(upper_left) + 1)) / 2; copy_area(
if rows == 0 { grid,
return; &self.content,
} area,
let page_no = (self.new_cursor_pos).wrapping_div(rows); ((0, 2 * top_idx), (width - 1, height - 1)),
let top_idx = page_no * rows; );
copy_area( context.dirty_areas.push_back(area);
grid,
&self.content,
area,
((0, 2 * top_idx), (width - 1, height - 1)),
);
}
(_, false) => { /* show only envelope */ }
} }
context.dirty_areas.push_back(area); (false, true) => {
self.initiated = true; let area = (set_y(upper_left, y), bottom_right);
let upper_left = upper_left!(area);
let rows = (get_y(bottom_right).saturating_sub(get_y(upper_left) + 1)) / 2;
if rows == 0 {
return;
}
let page_no = (self.new_cursor_pos).wrapping_div(rows);
let top_idx = page_no * rows;
copy_area(
grid,
&self.content,
area,
((0, 2 * top_idx), (width - 1, height - 1)),
);
context.dirty_areas.push_back(area);
}
(_, false) => { /* show only envelope */ }
} }
match (self.show_mailview, self.show_thread) { match (self.show_mailview, self.show_thread) {
@ -988,10 +982,7 @@ impl Component for ThreadView {
/* Handle this before self.mailview does */ /* Handle this before self.mailview does */
context context
.replies .replies
.push_back(UIEvent::Action(Tab(New(Some(Box::new(Self { .push_back(UIEvent::Action(Tab(New(Some(Box::new(self.clone()))))));
initiated: false,
..self.clone()
}))))));
return true; return true;
} }
_ => {} _ => {}
@ -1048,7 +1039,6 @@ impl Component for ThreadView {
} }
self.new_expanded_pos = self.current_pos(); self.new_expanded_pos = self.current_pos();
self.show_mailview = true; self.show_mailview = true;
//self.initiated = false;
self.set_dirty(true); self.set_dirty(true);
return true; return true;
} }
@ -1056,7 +1046,6 @@ impl Component for ThreadView {
if shortcut!(key == shortcuts[ThreadView::DESCRIPTION]["toggle_mailview"]) => if shortcut!(key == shortcuts[ThreadView::DESCRIPTION]["toggle_mailview"]) =>
{ {
self.show_mailview = !self.show_mailview; self.show_mailview = !self.show_mailview;
self.initiated = false;
self.set_dirty(true); self.set_dirty(true);
return true; return true;
} }
@ -1064,7 +1053,6 @@ impl Component for ThreadView {
if shortcut!(key == shortcuts[ThreadView::DESCRIPTION]["toggle_threadview"]) => if shortcut!(key == shortcuts[ThreadView::DESCRIPTION]["toggle_threadview"]) =>
{ {
self.show_thread = !self.show_thread; self.show_thread = !self.show_thread;
self.initiated = false;
self.set_dirty(true); self.set_dirty(true);
return true; return true;
} }
@ -1074,7 +1062,6 @@ impl Component for ThreadView {
self.reversed = !self.reversed; self.reversed = !self.reversed;
let expanded_hash = self.entries[self.expanded_pos].index.1; let expanded_hash = self.entries[self.expanded_pos].index.1;
self.initiate(Some(expanded_hash), context); self.initiate(Some(expanded_hash), context);
self.initiated = false;
self.dirty = true; self.dirty = true;
return true; return true;
} }