Detailed changes
@@ -301,23 +301,18 @@ impl ContextMenu {
cx: &mut ViewContext<Self>,
) {
let mut items = items.into_iter().peekable();
- dbg!(self.visible);
- if (self.visible) {
- self.visible = false;
- } else {
- if items.peek().is_some() {
- self.items = items.collect();
- self.anchor_position = anchor_position;
- self.anchor_corner = anchor_corner;
- self.visible = true;
- self.show_count += 1;
- if !cx.is_self_focused() {
- self.previously_focused_view_id = cx.focused_view_id();
- }
- cx.focus_self();
- } else {
- self.visible = false;
+ if items.peek().is_some() {
+ self.items = items.collect();
+ self.anchor_position = anchor_position;
+ self.anchor_corner = anchor_corner;
+ self.visible = true;
+ self.show_count += 1;
+ if !cx.is_self_focused() {
+ self.previously_focused_view_id = cx.focused_view_id();
}
+ cx.focus_self();
+ } else {
+ self.visible = false;
}
cx.notify();
}
@@ -482,10 +477,10 @@ impl ContextMenu {
.contained()
.with_style(style.container)
})
- .on_down_out(MouseButton::Left, |_, this, cx| {
+ .on_click_out(MouseButton::Left, |_, this, cx| {
this.cancel(&Default::default(), cx);
})
- .on_down_out(MouseButton::Right, |_, this, cx| {
+ .on_click_out(MouseButton::Right, |_, this, cx| {
this.cancel(&Default::default(), cx);
})
}
@@ -716,7 +716,7 @@ impl<'a> WindowContext<'a> {
}
}
- MouseEvent::MoveOut(_) | MouseEvent::UpOut(_) | MouseEvent::DownOut(_) => {
+ MouseEvent::MoveOut(_) | MouseEvent::UpOut(_) | MouseEvent::DownOut(_) | MouseEvent::ClickOut(_) => {
for (mouse_region, _) in self.window.mouse_regions.iter().rev() {
// NOT contains
if !mouse_region
@@ -8,7 +8,7 @@ use crate::{
platform::MouseButton,
scene::{
CursorRegion, HandlerSet, MouseClick, MouseDown, MouseDownOut, MouseDrag, MouseHover,
- MouseMove, MouseMoveOut, MouseScrollWheel, MouseUp, MouseUpOut,
+ MouseMove, MouseMoveOut, MouseScrollWheel, MouseUp, MouseUpOut, MouseClickOut,
},
AnyElement, Element, EventContext, LayoutContext, MouseRegion, MouseState, SceneBuilder,
SizeConstraint, View, ViewContext,
@@ -136,6 +136,16 @@ impl<Tag, V: View> MouseEventHandler<Tag, V> {
self
}
+ pub fn on_click_out(
+ mut self,
+ button: MouseButton,
+ handler: impl Fn(MouseClickOut, &mut V, &mut EventContext<V>) + 'static,
+ ) -> Self {
+ self.handlers = self.handlers.on_click_out(button, handler);
+ self
+ }
+
+
pub fn on_down_out(
mut self,
button: MouseButton,
@@ -94,7 +94,7 @@ impl MouseRegion {
V: View,
F: Fn(MouseClickOut, &mut V, &mut EventContext<V>) + 'static,
{
- self.handlers = self.handlers.on_click(button, handler);
+ self.handlers = self.handlers.on_click_out(button, handler);
self
}
@@ -255,6 +255,10 @@ impl HandlerSet {
HandlerKey::new(MouseEvent::click_disc(), Some(button)),
SmallVec::from_buf([Rc::new(|_, _, _, _| true)]),
);
+ set.insert(
+ HandlerKey::new(MouseEvent::click_out_disc(), Some(button)),
+ SmallVec::from_buf([Rc::new(|_, _, _, _| true)]),
+ );
set.insert(
HandlerKey::new(MouseEvent::down_out_disc(), Some(button)),
SmallVec::from_buf([Rc::new(|_, _, _, _| true)]),