context_menu: Fix subscription leak. (#1337)
This commit is contained in:
parent
66851c55e4
commit
1db3e03fc3
1 changed files with 11 additions and 10 deletions
|
|
@ -4,7 +4,7 @@ use gpui::{
|
||||||
anchored, deferred, div, prelude::FluentBuilder, px, relative, AnyElement, App, Context,
|
anchored, deferred, div, prelude::FluentBuilder, px, relative, AnyElement, App, Context,
|
||||||
Corner, DismissEvent, Element, ElementId, Entity, Focusable, GlobalElementId,
|
Corner, DismissEvent, Element, ElementId, Entity, Focusable, GlobalElementId,
|
||||||
InspectorElementId, InteractiveElement, IntoElement, MouseButton, MouseDownEvent,
|
InspectorElementId, InteractiveElement, IntoElement, MouseButton, MouseDownEvent,
|
||||||
ParentElement, Pixels, Point, Position, Stateful, Style, Window,
|
ParentElement, Pixels, Point, Position, Stateful, Style, Subscription, Window,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::menu::popup_menu::PopupMenu;
|
use crate::menu::popup_menu::PopupMenu;
|
||||||
|
|
@ -76,6 +76,7 @@ struct ContextMenuSharedState {
|
||||||
menu_view: Option<Entity<PopupMenu>>,
|
menu_view: Option<Entity<PopupMenu>>,
|
||||||
open: bool,
|
open: bool,
|
||||||
position: Point<Pixels>,
|
position: Point<Pixels>,
|
||||||
|
_subscription: Option<Subscription>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ContextMenuState {
|
pub struct ContextMenuState {
|
||||||
|
|
@ -91,6 +92,7 @@ impl Default for ContextMenuState {
|
||||||
menu_view: None,
|
menu_view: None,
|
||||||
open: false,
|
open: false,
|
||||||
position: Default::default(),
|
position: Default::default(),
|
||||||
|
_subscription: None,
|
||||||
})),
|
})),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -243,17 +245,16 @@ impl Element for ContextMenu {
|
||||||
})
|
})
|
||||||
.into_element();
|
.into_element();
|
||||||
|
|
||||||
window
|
let _subscription = window.subscribe(&menu, cx, {
|
||||||
.subscribe(&menu, cx, {
|
let shared_state = shared_state.clone();
|
||||||
let shared_state = shared_state.clone();
|
move |_, _: &DismissEvent, window, _| {
|
||||||
move |_, _: &DismissEvent, window, _| {
|
shared_state.borrow_mut().open = false;
|
||||||
shared_state.borrow_mut().open = false;
|
window.refresh();
|
||||||
window.refresh();
|
}
|
||||||
}
|
});
|
||||||
})
|
|
||||||
.detach();
|
|
||||||
|
|
||||||
shared_state.borrow_mut().menu_view = Some(menu.clone());
|
shared_state.borrow_mut().menu_view = Some(menu.clone());
|
||||||
|
shared_state.borrow_mut()._subscription = Some(_subscription);
|
||||||
window.refresh();
|
window.refresh();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue