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,
}
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 {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "view mail")
@ -791,9 +778,10 @@ impl Component for MailView {
};
}
UIEvent::Action(Listing(OpenInNewTab)) => {
let new_tab = Self::new(self.coordinates, context);
context
.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;
}
_ => {}

@ -26,7 +26,7 @@ use melib::UnixTimestamp;
use super::*;
use crate::components::PageMovement;
#[derive(Debug, Clone)]
#[derive(Debug)]
struct ThreadEntry {
index: (usize, ThreadNodeHash, usize),
/// (indentation, thread_node index, line number in listing)
@ -48,7 +48,7 @@ pub enum ThreadViewFocus {
MailView,
}
#[derive(Debug, Default, Clone)]
#[derive(Debug, Default)]
pub struct ThreadView {
new_cursor_pos: usize,
cursor_pos: usize,
@ -116,7 +116,7 @@ impl ThreadView {
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 {
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 {
if let UIEvent::Action(Listing(OpenInNewTab)) = event {
/* 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
.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;
}
@ -1047,7 +1055,7 @@ impl Component for ThreadView {
{
if self.cursor_pos > 0 {
self.new_cursor_pos = self.new_cursor_pos.saturating_sub(1);
self.dirty = true;
self.set_dirty(true);
}
true
}
@ -1057,7 +1065,7 @@ impl Component for ThreadView {
let height = self.visible_entries.iter().flat_map(|v| v.iter()).count();
if height > 0 && self.new_cursor_pos + 1 < height {
self.new_cursor_pos += 1;
self.dirty = true;
self.set_dirty(true);
}
true
}
@ -1065,24 +1073,24 @@ impl Component for ThreadView {
if shortcut!(key == shortcuts[Shortcuts::THREAD_VIEW]["prev_page"]) =>
{
self.movement = Some(PageMovement::PageUp(1));
self.dirty = true;
self.set_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;
self.set_dirty(true);
true
}
UIEvent::Input(ref k) if shortcut!(k == shortcuts[Shortcuts::GENERAL]["home_page"]) => {
self.movement = Some(PageMovement::Home);
self.dirty = true;
self.set_dirty(true);
true
}
UIEvent::Input(ref k) if shortcut!(k == shortcuts[Shortcuts::GENERAL]["end_page"]) => {
self.movement = Some(PageMovement::End);
self.dirty = true;
self.set_dirty(true);
true
}
UIEvent::Input(ref k)
@ -1124,7 +1132,7 @@ impl Component for ThreadView {
self.reversed = !self.reversed;
let expanded_hash = self.entries[self.expanded_pos].msg_hash;
self.initiate(Some(expanded_hash), false, context);
self.dirty = true;
self.set_dirty(true);
true
}
UIEvent::Input(ref key)
@ -1156,7 +1164,7 @@ impl Component for ThreadView {
}
self.cursor_pos = self.new_cursor_pos;
self.recalc_visible_entries();
self.dirty = true;
self.set_dirty(true);
true
}
UIEvent::Resize | UIEvent::VisibilityChange(true) => {

Loading…
Cancel
Save