mail/view: remove unnecessary Clone derives

There's no need to clone MailViews when opening them in new tabs,
just initialize new ones with the same metadata. That saves us the
trouble of implementing Clone for all related types.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
pull/295/head
Manos Pitsidianakis 9 months ago
parent 1b3bebe304
commit 3344a8dbf6
No known key found for this signature in database
GPG Key ID: 7729C7707F7E09D0

@ -66,19 +66,6 @@ pub struct MailView {
id: ComponentId, id: ComponentId,
} }
impl Clone for MailView {
fn clone(&self) -> Self {
MailView {
contact_selector: None,
forward_dialog: None,
state: MailViewState::default(),
active_jobs: self.active_jobs.clone(),
main_loop_handler: self.main_loop_handler.clone(),
..*self
}
}
}
impl std::fmt::Display for MailView { impl std::fmt::Display for MailView {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "view mail") write!(f, "view mail")
@ -791,9 +778,10 @@ impl Component for MailView {
}; };
} }
UIEvent::Action(Listing(OpenInNewTab)) => { UIEvent::Action(Listing(OpenInNewTab)) => {
let new_tab = Self::new(self.coordinates, context);
context context
.replies .replies
.push_back(UIEvent::Action(Tab(New(Some(Box::new(self.clone())))))); .push_back(UIEvent::Action(Tab(New(Some(Box::new(new_tab))))));
return true; return true;
} }
_ => {} _ => {}

@ -26,7 +26,7 @@ use melib::UnixTimestamp;
use super::*; use super::*;
use crate::components::PageMovement; use crate::components::PageMovement;
#[derive(Debug, Clone)] #[derive(Debug)]
struct ThreadEntry { struct ThreadEntry {
index: (usize, ThreadNodeHash, usize), index: (usize, ThreadNodeHash, usize),
/// (indentation, thread_node index, line number in listing) /// (indentation, thread_node index, line number in listing)
@ -48,7 +48,7 @@ pub enum ThreadViewFocus {
MailView, MailView,
} }
#[derive(Debug, Default, Clone)] #[derive(Debug, Default)]
pub struct ThreadView { pub struct ThreadView {
new_cursor_pos: usize, new_cursor_pos: usize,
cursor_pos: usize, cursor_pos: usize,
@ -116,7 +116,7 @@ impl ThreadView {
return; return;
} }
let old_entries = self.entries.clone(); let old_entries = std::mem::take(&mut self.entries);
let old_focused_entry = if self.entries.len() > self.cursor_pos { let old_focused_entry = if self.entries.len() > self.cursor_pos {
Some(self.entries.remove(self.cursor_pos)) Some(self.entries.remove(self.cursor_pos))
@ -1024,9 +1024,17 @@ impl Component for ThreadView {
fn process_event(&mut self, event: &mut UIEvent, context: &mut Context) -> bool { fn process_event(&mut self, event: &mut UIEvent, context: &mut Context) -> bool {
if let UIEvent::Action(Listing(OpenInNewTab)) = event { if let UIEvent::Action(Listing(OpenInNewTab)) = event {
/* Handle this before self.mailview does */ /* Handle this before self.mailview does */
let new_tab = Self::new(
self.coordinates,
self.thread_group,
Some(self.entries[self.expanded_pos].msg_hash),
false,
Some(self.focus),
context,
);
context context
.replies .replies
.push_back(UIEvent::Action(Tab(New(Some(Box::new(self.clone())))))); .push_back(UIEvent::Action(Tab(New(Some(Box::new(new_tab))))));
return true; return true;
} }
@ -1047,7 +1055,7 @@ impl Component for ThreadView {
{ {
if self.cursor_pos > 0 { if self.cursor_pos > 0 {
self.new_cursor_pos = self.new_cursor_pos.saturating_sub(1); self.new_cursor_pos = self.new_cursor_pos.saturating_sub(1);
self.dirty = true; self.set_dirty(true);
} }
true true
} }
@ -1057,7 +1065,7 @@ impl Component for ThreadView {
let height = self.visible_entries.iter().flat_map(|v| v.iter()).count(); let height = self.visible_entries.iter().flat_map(|v| v.iter()).count();
if height > 0 && self.new_cursor_pos + 1 < height { if height > 0 && self.new_cursor_pos + 1 < height {
self.new_cursor_pos += 1; self.new_cursor_pos += 1;
self.dirty = true; self.set_dirty(true);
} }
true true
} }
@ -1065,24 +1073,24 @@ impl Component for ThreadView {
if shortcut!(key == shortcuts[Shortcuts::THREAD_VIEW]["prev_page"]) => if shortcut!(key == shortcuts[Shortcuts::THREAD_VIEW]["prev_page"]) =>
{ {
self.movement = Some(PageMovement::PageUp(1)); self.movement = Some(PageMovement::PageUp(1));
self.dirty = true; self.set_dirty(true);
true true
} }
UIEvent::Input(ref key) UIEvent::Input(ref key)
if shortcut!(key == shortcuts[Shortcuts::THREAD_VIEW]["next_page"]) => if shortcut!(key == shortcuts[Shortcuts::THREAD_VIEW]["next_page"]) =>
{ {
self.movement = Some(PageMovement::PageDown(1)); self.movement = Some(PageMovement::PageDown(1));
self.dirty = true; self.set_dirty(true);
true true
} }
UIEvent::Input(ref k) if shortcut!(k == shortcuts[Shortcuts::GENERAL]["home_page"]) => { UIEvent::Input(ref k) if shortcut!(k == shortcuts[Shortcuts::GENERAL]["home_page"]) => {
self.movement = Some(PageMovement::Home); self.movement = Some(PageMovement::Home);
self.dirty = true; self.set_dirty(true);
true true
} }
UIEvent::Input(ref k) if shortcut!(k == shortcuts[Shortcuts::GENERAL]["end_page"]) => { UIEvent::Input(ref k) if shortcut!(k == shortcuts[Shortcuts::GENERAL]["end_page"]) => {
self.movement = Some(PageMovement::End); self.movement = Some(PageMovement::End);
self.dirty = true; self.set_dirty(true);
true true
} }
UIEvent::Input(ref k) UIEvent::Input(ref k)
@ -1124,7 +1132,7 @@ impl Component for ThreadView {
self.reversed = !self.reversed; self.reversed = !self.reversed;
let expanded_hash = self.entries[self.expanded_pos].msg_hash; let expanded_hash = self.entries[self.expanded_pos].msg_hash;
self.initiate(Some(expanded_hash), false, context); self.initiate(Some(expanded_hash), false, context);
self.dirty = true; self.set_dirty(true);
true true
} }
UIEvent::Input(ref key) UIEvent::Input(ref key)
@ -1156,7 +1164,7 @@ impl Component for ThreadView {
} }
self.cursor_pos = self.new_cursor_pos; self.cursor_pos = self.new_cursor_pos;
self.recalc_visible_entries(); self.recalc_visible_entries();
self.dirty = true; self.set_dirty(true);
true true
} }
UIEvent::Resize | UIEvent::VisibilityChange(true) => { UIEvent::Resize | UIEvent::VisibilityChange(true) => {

Loading…
Cancel
Save