From 361be7f6b7e93c7162281a107c3070b736ba692e Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 13 Jan 2020 06:58:48 +0100 Subject: Remove `Message: Clone` bound in some web widgets --- web/src/widget/checkbox.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'web/src/widget/checkbox.rs') diff --git a/web/src/widget/checkbox.rs b/web/src/widget/checkbox.rs index b81a0d52..34d13a1b 100644 --- a/web/src/widget/checkbox.rs +++ b/web/src/widget/checkbox.rs @@ -1,6 +1,7 @@ use crate::{style, Bus, Color, Element, Widget}; use dodrio::bumpalo; +use std::rc::Rc; /// A box that can be checked. /// @@ -22,7 +23,7 @@ use dodrio::bumpalo; #[allow(missing_debug_implementations)] pub struct Checkbox { is_checked: bool, - on_toggle: Box Message>, + on_toggle: Rc Message>, label: String, label_color: Option, } @@ -44,7 +45,7 @@ impl Checkbox { { Checkbox { is_checked, - on_toggle: Box::new(f), + on_toggle: Rc::new(f), label: String::from(label), label_color: None, } @@ -61,7 +62,7 @@ impl Checkbox { impl Widget for Checkbox where - Message: 'static + Clone, + Message: 'static, { fn node<'b>( &self, @@ -74,7 +75,8 @@ where let checkbox_label = bumpalo::format!(in bump, "{}", self.label); let event_bus = bus.clone(); - let msg = (self.on_toggle)(!self.is_checked); + let on_toggle = self.on_toggle.clone(); + let is_checked = self.is_checked; // TODO: Complete styling label(bump) @@ -83,7 +85,8 @@ where .attr("type", "checkbox") .bool_attr("checked", self.is_checked) .on("click", move |root, vdom, _event| { - event_bus.publish(msg.clone(), root); + let msg = on_toggle(!is_checked); + event_bus.publish(msg, root); vdom.schedule_render(); }) @@ -96,7 +99,7 @@ where impl<'a, Message> From> for Element<'a, Message> where - Message: 'static + Clone, + Message: 'static, { fn from(checkbox: Checkbox) -> Element<'a, Message> { Element::new(checkbox) -- cgit