@@ -266,7 +266,7 @@ pub trait InteractiveElement: Sized + Element {
.key_down_listeners
.push(Box::new(move |event, phase, cx| {
if phase == DispatchPhase::Capture {
- (listener.callback)(event, cx)
+ listener(event, cx)
}
}));
self
@@ -277,7 +277,7 @@ pub trait InteractiveElement: Sized + Element {
.key_up_listeners
.push(Box::new(move |event, phase, cx| {
if phase == DispatchPhase::Bubble {
- (listener.callback)(event, cx)
+ listener(event, cx)
}
}));
self
@@ -291,7 +291,7 @@ pub trait InteractiveElement: Sized + Element {
.key_up_listeners
.push(Box::new(move |event, phase, cx| {
if phase == DispatchPhase::Capture {
- (listener.callback)(event, cx)
+ listener(event, cx)
}
}));
self
@@ -326,7 +326,7 @@ pub trait InteractiveElement: Sized + Element {
self.interactivity().drop_listeners.push((
TypeId::of::<W>(),
Box::new(move |dragged_view, cx| {
- (listener.callback)(&dragged_view.downcast().unwrap(), cx);
+ listener(&dragged_view.downcast().unwrap(), cx);
}),
));
self
@@ -384,7 +384,7 @@ pub trait StatefulInteractiveElement: InteractiveElement {
{
self.interactivity()
.click_listeners
- .push(Box::new(move |event, cx| (listener.callback)(event, cx)));
+ .push(Box::new(move |event, cx| listener(event, cx)));
self
}
@@ -398,7 +398,7 @@ pub trait StatefulInteractiveElement: InteractiveElement {
"calling on_drag more than once on the same element is not supported"
);
self.interactivity().drag_listener = Some(Box::new(move |cursor_offset, cx| AnyDrag {
- view: (listener.callback)(cx).into(),
+ view: listener(cx).into(),
cursor_offset,
}));
self
@@ -424,8 +424,7 @@ pub trait StatefulInteractiveElement: InteractiveElement {
self.interactivity().tooltip_builder.is_none(),
"calling tooltip more than once on the same element is not supported"
);
- self.interactivity().tooltip_builder =
- Some(Rc::new(move |cx| (build_tooltip.callback)(cx)));
+ self.interactivity().tooltip_builder = Some(Rc::new(build_tooltip));
self
}
@@ -456,7 +455,7 @@ pub trait FocusableElement: InteractiveElement {
.focus_listeners
.push(Box::new(move |focus_handle, event, cx| {
if event.focused.as_ref() == Some(focus_handle) {
- (listener.callback)(event, cx)
+ listener(event, cx)
}
}));
self
@@ -470,7 +469,7 @@ pub trait FocusableElement: InteractiveElement {
.focus_listeners
.push(Box::new(move |focus_handle, event, cx| {
if event.blurred.as_ref() == Some(focus_handle) {
- (listener.callback)(event, cx)
+ listener(event, cx)
}
}));
self
@@ -493,7 +492,7 @@ pub trait FocusableElement: InteractiveElement {
.map_or(false, |focused| focus_handle.contains(focused, cx));
if !descendant_blurred && descendant_focused {
- (listener.callback)(event, cx)
+ listener(event, cx)
}
}));
self
@@ -515,7 +514,7 @@ pub trait FocusableElement: InteractiveElement {
.as_ref()
.map_or(false, |focused| focus_handle.contains(focused, cx));
if descendant_blurred && !descendant_focused {
- (listener.callback)(event, cx)
+ listener(event, cx)
}
}));
self
@@ -907,7 +906,7 @@ impl Interactivity {
*was_hovered = is_hovered;
drop(was_hovered);
- (hover_listener.callback)(&is_hovered, cx);
+ hover_listener(&is_hovered, cx);
}
});
}
@@ -307,7 +307,7 @@ mod test {
.key_context("parent")
.on_key_down(cx.listener(|this, _, _| this.saw_key_down = true))
.on_action(
- cx.callback(|this: &mut TestView, _: &TestAction, _| {
+ cx.listener(|this: &mut TestView, _: &TestAction, _| {
this.saw_action = true
}),
)
@@ -1,37 +1,17 @@
use proc_macro::TokenStream;
use quote::quote;
-use syn::{parse_macro_input, parse_quote, DeriveInput};
+use syn::{parse_macro_input, DeriveInput};
pub fn derive_render_once(input: TokenStream) -> TokenStream {
let ast = parse_macro_input!(input as DeriveInput);
let type_name = &ast.ident;
-
- let mut trait_generics = ast.generics.clone();
- let view_type = if let Some(view_type) = specified_view_type(&ast) {
- quote! { #view_type }
- } else {
- if let Some(first_type_param) = ast.generics.params.iter().find_map(|param| {
- if let syn::GenericParam::Type(type_param) = param {
- Some(type_param.ident.clone())
- } else {
- None
- }
- }) {
- quote! { #first_type_param }
- } else {
- trait_generics.params.push(parse_quote! { V: 'static });
- quote! { V }
- }
- };
-
- let (impl_generics, _, where_clause) = trait_generics.split_for_impl();
- let (_, type_generics, _) = ast.generics.split_for_impl();
+ let (impl_generics, type_generics, where_clause) = ast.generics.split_for_impl();
let gen = quote! {
- impl #impl_generics gpui::RenderOnce<#view_type> for #type_name #type_generics
+ impl #impl_generics gpui::RenderOnce for #type_name #type_generics
#where_clause
{
- type Element = gpui::CompositeElement<#view_type, Self>;
+ type Element = gpui::CompositeElement<Self>;
fn element_id(&self) -> Option<ElementId> {
None
@@ -45,20 +25,3 @@ pub fn derive_render_once(input: TokenStream) -> TokenStream {
gen.into()
}
-
-fn specified_view_type(ast: &DeriveInput) -> Option<proc_macro2::Ident> {
- ast.attrs.iter().find_map(|attr| {
- if attr.path.is_ident("view") {
- if let Ok(syn::Meta::NameValue(meta_name_value)) = attr.parse_meta() {
- if let syn::Lit::Str(lit_str) = meta_name_value.lit {
- return Some(
- lit_str
- .parse::<syn::Ident>()
- .expect("Failed to parse view_type"),
- );
- }
- }
- }
- None
- })
-}