diff --git a/ui/src/components/mail/listing.rs b/ui/src/components/mail/listing.rs index ec021d24..3b815971 100644 --- a/ui/src/components/mail/listing.rs +++ b/ui/src/components/mail/listing.rs @@ -58,6 +58,7 @@ trait ListingTrait { fn draw_list(&mut self, grid: &mut CellBuffer, area: Area, context: &mut Context); fn highlight_line(&mut self, grid: &mut CellBuffer, area: Area, idx: usize, context: &Context); fn filter(&mut self, _filter_term: &str, _context: &Context) {} + fn set_movement(&mut self, mvm: PageMovement); } #[derive(Debug)] @@ -102,6 +103,14 @@ impl ListingTrait for ListingComponent { Conversations(ref mut l) => l.highlight_line(grid, area, idx, context), } } + fn set_movement(&mut self, mvm: PageMovement) { + match self { + Compact(ref mut l) => l.set_movement(mvm), + Plain(ref mut l) => l.set_movement(mvm), + Threaded(ref mut l) => l.set_movement(mvm), + Conversations(ref mut l) => l.set_movement(mvm), + } + } } impl ListingComponent { @@ -392,6 +401,22 @@ impl Component for Listing { UIEvent::Resize => { self.dirty = true; } + UIEvent::Input(ref key) if *key == shortcuts["prev_page"] => { + self.component.set_movement(PageMovement::PageUp); + return true; + } + UIEvent::Input(ref key) if *key == shortcuts["next_page"] => { + self.component.set_movement(PageMovement::PageDown); + return true; + } + UIEvent::Input(ref key) if *key == Key::Home => { + self.component.set_movement(PageMovement::Home); + return true; + } + UIEvent::Input(ref key) if *key == Key::End => { + self.component.set_movement(PageMovement::End); + return true; + } UIEvent::Input(ref k) if k == shortcuts["toggle-menu-visibility"] => { self.menu_visibility = !self.menu_visibility; self.set_dirty(); diff --git a/ui/src/components/mail/listing/compact.rs b/ui/src/components/mail/listing/compact.rs index 6c9706b5..371fd25f 100644 --- a/ui/src/components/mail/listing/compact.rs +++ b/ui/src/components/mail/listing/compact.rs @@ -442,6 +442,11 @@ impl ListingTrait for CompactListing { ); } } + + fn set_movement(&mut self, mvm: PageMovement) { + self.movement = Some(mvm); + self.set_dirty(); + } } impl fmt::Display for CompactListing { @@ -1111,22 +1116,6 @@ impl Component for CompactListing { self.dirty = true; return true; } - UIEvent::Input(ref key) if *key == shortcuts["prev_page"] => { - self.movement = Some(PageMovement::PageUp); - self.set_dirty(); - } - UIEvent::Input(ref key) if *key == shortcuts["next_page"] => { - self.movement = Some(PageMovement::PageDown); - self.set_dirty(); - } - UIEvent::Input(ref key) if *key == Key::Home => { - self.movement = Some(PageMovement::Home); - self.set_dirty(); - } - UIEvent::Input(ref key) if *key == Key::End => { - self.movement = Some(PageMovement::End); - self.set_dirty(); - } UIEvent::Input(ref key) if *key == shortcuts["set_seen"] => { let thread_hash = self.get_thread_under_cursor(self.cursor_pos.2, context); self.perform_action(context, thread_hash, &ListingAction::SetSeen); diff --git a/ui/src/components/mail/listing/conversations.rs b/ui/src/components/mail/listing/conversations.rs index d628cce6..31cce4ce 100644 --- a/ui/src/components/mail/listing/conversations.rs +++ b/ui/src/components/mail/listing/conversations.rs @@ -483,6 +483,11 @@ impl ListingTrait for ConversationsListing { ); } } + + fn set_movement(&mut self, mvm: PageMovement) { + self.movement = Some(mvm); + self.set_dirty(); + } } impl fmt::Display for ConversationsListing { @@ -1193,22 +1198,6 @@ impl Component for ConversationsListing { self.dirty = true; return true; } - UIEvent::Input(ref key) if *key == shortcuts["prev_page"] => { - self.movement = Some(PageMovement::PageUp); - self.set_dirty(); - } - UIEvent::Input(ref key) if *key == shortcuts["next_page"] => { - self.movement = Some(PageMovement::PageDown); - self.set_dirty(); - } - UIEvent::Input(ref key) if *key == Key::Home => { - self.movement = Some(PageMovement::Home); - self.set_dirty(); - } - UIEvent::Input(ref key) if *key == Key::End => { - self.movement = Some(PageMovement::End); - self.set_dirty(); - } UIEvent::Input(ref key) if *key == shortcuts["set_seen"] => { let thread_hash = self.get_thread_under_cursor(self.cursor_pos.2, context); self.perform_action(context, thread_hash, &ListingAction::SetSeen); diff --git a/ui/src/components/mail/listing/plain.rs b/ui/src/components/mail/listing/plain.rs index e419bde9..4a1c941c 100644 --- a/ui/src/components/mail/listing/plain.rs +++ b/ui/src/components/mail/listing/plain.rs @@ -213,6 +213,11 @@ impl ListingTrait for PlainListing { ); context.dirty_areas.push_back(area); } + + fn set_movement(&mut self, mvm: PageMovement) { + self.movement = Some(mvm); + self.set_dirty(); + } } impl Default for PlainListing { diff --git a/ui/src/components/mail/listing/thread.rs b/ui/src/components/mail/listing/thread.rs index 9a8dfc65..5cc666a7 100644 --- a/ui/src/components/mail/listing/thread.rs +++ b/ui/src/components/mail/listing/thread.rs @@ -197,6 +197,11 @@ impl ListingTrait for ThreadListing { change_colors(grid, area, fg_color, bg_color); } } + + fn set_movement(&mut self, mvm: PageMovement) { + self.movement = Some(mvm); + self.set_dirty(); + } } impl Default for ThreadListing {