diff options
author | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2018-08-23 14:39:54 +0300 |
---|---|---|
committer | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2019-06-10 19:40:31 +0300 |
commit | b617fc013681f3c2a9b6f49fa6e2af8261bf99c7 (patch) | |
tree | 4144695055ea051cddfc0e6341537d053fc72186 /ui/src/components/mail/view/envelope.rs | |
parent | ad5d2353e835b0ec62453bc2462ada7b06a11bf0 (diff) |
ThreadView and compact listing
closes #3
Diffstat (limited to 'ui/src/components/mail/view/envelope.rs')
-rw-r--r-- | ui/src/components/mail/view/envelope.rs | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/ui/src/components/mail/view/envelope.rs b/ui/src/components/mail/view/envelope.rs index ac5d73da..8f043612 100644 --- a/ui/src/components/mail/view/envelope.rs +++ b/ui/src/components/mail/view/envelope.rs @@ -45,6 +45,7 @@ impl ViewMode { /// Contains an Envelope view, with sticky headers, a pager for the body, and subviews for more /// menus +#[derive(Debug)] pub struct EnvelopeView { pager: Option<Pager>, subview: Option<Box<Component>>, @@ -313,13 +314,24 @@ impl Component for EnvelopeView { } } - fn process_event(&mut self, event: &UIEvent, context: &mut Context) { + fn process_event(&mut self, event: &UIEvent, context: &mut Context) -> bool { + if let Some(ref mut sub) = self.subview { + if sub.process_event(event, context) { + return true; + } + } else if let Some(ref mut p) = self.pager { + if p.process_event(event, context) { + return true; + } + } match event.event_type { UIEventType::Input(Key::Esc) => { self.cmd_buf.clear(); + return true; } UIEventType::Input(Key::Char(c)) if c >= '0' && c <= '9' => { self.cmd_buf.push(c); + return true; } UIEventType::Input(Key::Char('r')) if self.mode == ViewMode::Normal || self.mode == ViewMode::Raw => @@ -330,11 +342,13 @@ impl Component for EnvelopeView { ViewMode::Raw }; self.dirty = true; + return true; } UIEventType::Input(Key::Char('r')) if self.mode.is_attachment() || self.mode == ViewMode::Subview => { self.mode = ViewMode::Normal; self.subview.take(); self.dirty = true; + return true; } UIEventType::Input(Key::Char('a')) if !self.cmd_buf.is_empty() && self.mode == ViewMode::Normal => @@ -362,7 +376,7 @@ impl Component for EnvelopeView { "Multipart attachments are not supported yet.".to_string(), ), }); - return; + return true; } ContentType::Unsupported { .. } => { let attachment_type = u.mime_type(); @@ -386,7 +400,7 @@ impl Component for EnvelopeView { attachment_type )), }); - return; + return true; } } } @@ -398,10 +412,11 @@ impl Component for EnvelopeView { lidx )), }); - return; + return true; } }; - } + return true; + }, UIEventType::Input(Key::Char('g')) if !self.cmd_buf.is_empty() && self.mode == ViewMode::Url => { @@ -422,7 +437,7 @@ impl Component for EnvelopeView { lidx )), }); - return; + return true; } }; @@ -432,6 +447,7 @@ impl Component for EnvelopeView { .stdout(Stdio::piped()) .spawn() .expect("Failed to start xdg_open"); + return true; } UIEventType::Input(Key::Char('u')) => { match self.mode { @@ -440,14 +456,11 @@ impl Component for EnvelopeView { _ => {} } self.dirty = true; + return true; } _ => {} } - if let Some(ref mut sub) = self.subview { - sub.process_event(event, context); - } else if let Some(ref mut p) = self.pager { - p.process_event(event, context); - } + false } fn is_dirty(&self) -> bool { self.dirty |