From 8e54b470bd01d06188b316fbc10072603f01cf0e Mon Sep 17 00:00:00 2001 From: darkfi Date: Wed, 10 Jul 2024 10:51:54 +0200 Subject: [PATCH] wallet: editbox fix race condition --- bin/darkwallet/src/app.rs | 4 ++-- bin/darkwallet/src/ui/editbox.rs | 15 ++++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/bin/darkwallet/src/app.rs b/bin/darkwallet/src/app.rs index 13e31808c..fb97d6f07 100644 --- a/bin/darkwallet/src/app.rs +++ b/bin/darkwallet/src/app.rs @@ -402,10 +402,10 @@ impl App { let prop = node.get_property("rect").unwrap(); prop.set_f32(0, 0.).unwrap(); prop.set_f32(1, 0.).unwrap(); - let code = vec![Op::LoadVar("lw".to_string())]; + let code = vec![Op::LoadVar("w".to_string())]; prop.set_expr(2, code).unwrap(); let code = vec![Op::Sub(( - Box::new(Op::LoadVar("lh".to_string())), + Box::new(Op::LoadVar("h".to_string())), Box::new(Op::ConstFloat32(50.)), ))]; prop.set_expr(3, code).unwrap(); diff --git a/bin/darkwallet/src/ui/editbox.rs b/bin/darkwallet/src/ui/editbox.rs index a77ebf3a9..91bebabe7 100644 --- a/bin/darkwallet/src/ui/editbox.rs +++ b/bin/darkwallet/src/ui/editbox.rs @@ -279,14 +279,17 @@ impl EditBox { } on_modify.when_change(rect.clone(), redraw); on_modify.when_change(baseline.prop(), redraw); - on_modify.when_change(scroll.prop(), redraw); - on_modify.when_change(cursor_pos.prop(), redraw); + // The commented properties are modified on input events + // So then redraw() will get repeatedly triggered when these properties + // are changed. We should find a solution. For now the hooks are disabled. + //on_modify.when_change(scroll.prop(), redraw); + //on_modify.when_change(cursor_pos.prop(), redraw); on_modify.when_change(font_size.prop(), redraw); on_modify.when_change(text.prop(), redraw); on_modify.when_change(text_color.prop(), redraw); on_modify.when_change(cursor_color.prop(), redraw); on_modify.when_change(hi_bg_color.prop(), redraw); - on_modify.when_change(selected.clone(), redraw); + //on_modify.when_change(selected.clone(), redraw); on_modify.when_change(z_index.prop(), redraw); on_modify.when_change(debug.prop(), redraw); @@ -1119,14 +1122,12 @@ impl EditBox { } async fn redraw(&self) { - let old = self.render_info.lock().unwrap().clone(); + // draw will recalc this when it's None + let old = std::mem::replace(&mut *self.render_info.lock().unwrap(), None); let glyphs = self.text_shaper.shape(self.text.get(), self.font_size.get()).await; *self.glyphs.lock().unwrap() = glyphs; - // draw will recalc this when it's None - *self.render_info.lock().unwrap() = None; - let sg = self.sg.lock().await; let node = sg.get_node(self.node_id).unwrap();