mail/view/thread: fix page{up,down} event bubbling up

When pressing PageUp, PageDown, Home, End shortcuts in ThreadView
entries, the event is bubbled up to the mailbox listing because
ThreadView::process_event() didn't return `true`. This commit fixes
this bug.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
pull/287/head
Manos Pitsidianakis 2023-08-25 18:20:56 +03:00
parent 4d22b669bf
commit 64982b4cab
Signed by: Manos Pitsidianakis
GPG Key ID: 7729C7707F7E09D0
1 changed files with 24 additions and 16 deletions

View File

@ -1031,7 +1031,7 @@ impl Component for ThreadView {
self.new_cursor_pos = self.new_cursor_pos.saturating_sub(1);
self.dirty = true;
}
return true;
true
}
UIEvent::Input(ref key)
if shortcut!(key == shortcuts[Shortcuts::THREAD_VIEW]["scroll_down"]) =>
@ -1041,41 +1041,44 @@ impl Component for ThreadView {
self.new_cursor_pos += 1;
self.dirty = true;
}
return true;
true
}
UIEvent::Input(ref key)
if shortcut!(key == shortcuts[Shortcuts::THREAD_VIEW]["prev_page"]) =>
{
self.movement = Some(PageMovement::PageUp(1));
self.dirty = true;
true
}
UIEvent::Input(ref key)
if shortcut!(key == shortcuts[Shortcuts::THREAD_VIEW]["next_page"]) =>
{
self.movement = Some(PageMovement::PageDown(1));
self.dirty = true;
true
}
UIEvent::Input(ref k) if shortcut!(k == shortcuts[Shortcuts::GENERAL]["home_page"]) => {
self.movement = Some(PageMovement::Home);
self.dirty = true;
true
}
UIEvent::Input(ref k) if shortcut!(k == shortcuts[Shortcuts::GENERAL]["end_page"]) => {
self.movement = Some(PageMovement::End);
self.dirty = true;
true
}
UIEvent::Input(ref k)
if shortcut!(k == shortcuts[Shortcuts::GENERAL]["open_entry"]) =>
{
if self.entries.len() < 2 {
return true;
if self.entries.len() > 1 {
self.new_expanded_pos = self.current_pos();
self.expanded_pos = self.current_pos();
if matches!(self.focus, ThreadViewFocus::Thread) {
self.focus = ThreadViewFocus::None;
}
self.set_dirty(true);
}
self.new_expanded_pos = self.current_pos();
self.expanded_pos = self.current_pos();
if matches!(self.focus, ThreadViewFocus::Thread) {
self.focus = ThreadViewFocus::None;
}
self.set_dirty(true);
return true;
true
}
UIEvent::Input(ref key)
if shortcut!(key == shortcuts[Shortcuts::THREAD_VIEW]["toggle_mailview"]) =>
@ -1085,7 +1088,7 @@ impl Component for ThreadView {
ThreadViewFocus::Thread => ThreadViewFocus::None,
};
self.set_dirty(true);
return true;
true
}
UIEvent::Input(ref key)
if shortcut!(key == shortcuts[Shortcuts::THREAD_VIEW]["toggle_threadview"]) =>
@ -1095,7 +1098,7 @@ impl Component for ThreadView {
ThreadViewFocus::MailView => ThreadViewFocus::None,
};
self.set_dirty(true);
return true;
true
}
UIEvent::Input(ref key)
if shortcut!(key == shortcuts[Shortcuts::THREAD_VIEW]["reverse_thread_order"]) =>
@ -1104,7 +1107,7 @@ impl Component for ThreadView {
let expanded_hash = self.entries[self.expanded_pos].msg_hash;
self.initiate(Some(expanded_hash), context);
self.dirty = true;
return true;
true
}
UIEvent::Input(ref key)
if shortcut!(key == shortcuts[Shortcuts::THREAD_VIEW]["collapse_subtree"]) =>
@ -1136,10 +1139,11 @@ impl Component for ThreadView {
self.cursor_pos = self.new_cursor_pos;
self.recalc_visible_entries();
self.dirty = true;
return true;
true
}
UIEvent::Resize | UIEvent::VisibilityChange(true) => {
self.set_dirty(true);
false
}
UIEvent::EnvelopeRename(ref old_hash, ref new_hash) => {
let account = &context.accounts[&self.coordinates.0];
@ -1147,6 +1151,7 @@ impl Component for ThreadView {
if e.msg_hash == *old_hash {
e.msg_hash = *new_hash;
let seen: bool = account.collection.get_env(*new_hash).is_seen();
e.dirty = e.seen != seen;
e.seen = seen;
e.mailview.process_event(
&mut UIEvent::EnvelopeRename(*old_hash, *new_hash),
@ -1156,12 +1161,14 @@ impl Component for ThreadView {
break;
}
}
false
}
UIEvent::EnvelopeUpdate(ref env_hash) => {
let account = &context.accounts[&self.coordinates.0];
for e in self.entries.iter_mut() {
if e.msg_hash == *env_hash {
let seen: bool = account.collection.get_env(*env_hash).is_seen();
e.dirty = e.seen != seen;
e.seen = seen;
e.mailview
.process_event(&mut UIEvent::EnvelopeUpdate(*env_hash), context);
@ -1169,6 +1176,7 @@ impl Component for ThreadView {
break;
}
}
false
}
_ => {
if self
@ -1178,9 +1186,9 @@ impl Component for ThreadView {
{
return true;
}
false
}
}
false
}
fn is_dirty(&self) -> bool {