Improve context menu operation
This commit is contained in:
parent
5806c420a8
commit
40ee305eb2
3 changed files with 69 additions and 34 deletions
|
|
@ -15,6 +15,7 @@ pub struct MouseArea<'a, Message, Renderer> {
|
|||
on_press: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
||||
on_release: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
||||
on_right_press: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
||||
on_right_press_no_capture: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
||||
on_right_release: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
||||
on_middle_press: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
||||
on_middle_release: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
||||
|
|
@ -49,6 +50,16 @@ impl<'a, Message, Renderer> MouseArea<'a, Message, Renderer> {
|
|||
self
|
||||
}
|
||||
|
||||
/// The message to emit on a right button press without capturing.
|
||||
#[must_use]
|
||||
pub fn on_right_press_no_capture(
|
||||
mut self,
|
||||
message: impl Fn(Option<Point>) -> Message + 'a,
|
||||
) -> Self {
|
||||
self.on_right_press_no_capture = Some(Box::new(message));
|
||||
self
|
||||
}
|
||||
|
||||
/// The message to emit on a right button release.
|
||||
#[must_use]
|
||||
pub fn on_right_release(mut self, message: impl Fn(Option<Point>) -> Message + 'a) -> Self {
|
||||
|
|
@ -87,6 +98,7 @@ impl<'a, Message, Renderer> MouseArea<'a, Message, Renderer> {
|
|||
on_press: None,
|
||||
on_release: None,
|
||||
on_right_press: None,
|
||||
on_right_press_no_capture: None,
|
||||
on_right_release: None,
|
||||
on_middle_press: None,
|
||||
on_middle_release: None,
|
||||
|
|
@ -285,6 +297,14 @@ fn update<Message: Clone, Renderer>(
|
|||
}
|
||||
}
|
||||
|
||||
if let Some(message) = widget.on_right_press_no_capture.as_ref() {
|
||||
if let Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Right)) = event {
|
||||
shell.publish(message(cursor.position_in(layout.bounds())));
|
||||
|
||||
return event::Status::Ignored;
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(message) = widget.on_right_release.as_ref() {
|
||||
if let Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Right)) = event {
|
||||
shell.publish(message(cursor.position_in(layout.bounds())));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue