Open context menu when right-clicking on items

Another part of #840
This commit is contained in:
Henrik Friedrichsen
2022-08-16 23:01:51 +02:00
parent af08a560c7
commit d3e89115d7

View File

@@ -4,7 +4,7 @@ use std::cmp::{max, min, Ordering};
use std::sync::{Arc, RwLock};
use cursive::align::HAlign;
use cursive::event::{Event, EventResult, MouseButton, MouseEvent};
use cursive::event::{Callback, Event, EventResult, MouseButton, MouseEvent};
use cursive::theme::{ColorStyle, ColorType, PaletteColor};
use cursive::traits::View;
use cursive::view::scroll;
@@ -308,6 +308,28 @@ impl<I: ListItem> View for ListView<I> {
.unwrap_or(false)
{}
}
Event::Mouse {
event: MouseEvent::Press(MouseButton::Right),
position,
offset,
} => {
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())
} {
let contextmenu = ContextMenu::new(&*target, queue, library);
return EventResult::Consumed(Some(Callback::from_fn_once(move |s| {
s.add_layer(contextmenu)
})));
}
}
}
Event::Mouse {
event: MouseEvent::Hold(MouseButton::Left),
position,