From 82716b267b603dc7a6aaee58a14b6fae8e618b2d Mon Sep 17 00:00:00 2001 From: Henrik Friedrichsen Date: Fri, 19 Aug 2022 00:21:34 +0200 Subject: [PATCH] Handle left mouse click on item, i.e. albums/lists Another part of #840 --- src/ui/listview.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/ui/listview.rs b/src/ui/listview.rs index 5a8b2a4..0f4847f 100644 --- a/src/ui/listview.rs +++ b/src/ui/listview.rs @@ -13,6 +13,7 @@ use unicode_width::UnicodeWidthStr; use crate::command::{Command, GotoMode, InsertSource, JumpMode, MoveAmount, MoveMode, TargetMode}; use crate::commands::CommandResult; +use crate::ext_traits::CursiveExt; use crate::library::Library; use crate::model::album::Album; use crate::model::artist::Artist; @@ -306,7 +307,29 @@ impl View for ListView { .checked_sub(offset) .map(|p| self.scroller.start_drag(p)) .unwrap_or(false) - {} + { + log::debug!("grabbing scroller"); + } else { + let viewport = self.scroller.content_viewport().top_left(); + if let Some(y) = position.checked_sub(offset).map(|p| p.y + viewport.y) { + self.move_focus_to(y); + + let queue = self.queue.clone(); + let library = self.library.clone(); + if let Some(target) = { + let content = self.content.read().unwrap(); + content.get(self.selected).map(|t| t.as_listitem()) + } { + if let Some(view) = target.open(queue, library) { + return EventResult::Consumed(Some(Callback::from_fn_once( + move |s| { + s.on_layout(|_, mut l| l.push_view(view)); + }, + ))); + } + } + } + } } Event::Mouse { event: MouseEvent::Press(MouseButton::Right),