Sharing variables between closures in GTK Rust

44 Views Asked by At

I don't really understand how does work borrowing in Rust. I'm trying to modify labels during clicked event. My current code behaves correctly, however looks like a monster. How should I do it properly?

use gtk::{Button, Label};

let label_1_rc_1 = Rc::new(label_1);
let label_1_rc_2 = label_1_rc_1.clone();
let label_1_rc_3 = label_1_rc_1.clone();
let label_1_rc_4 = label_1_rc_1.clone();

button_a.connect_clicked(move |_| {
   ........
   compose_view(
       label_1_rc_1.clone(),
   );
});

button_b.connect_clicked(move |_| {
   ........
   compose_view(
       label_1_rc_2.clone(),
   );
});

button_c.connect_clicked(move |_| {
    ........
    compose_view(
       label_1_rc_3.clone(),
    );
});


fn compose_view(
    label_1: Rc<Label>,
) -> () {
    .......   
    label_1.set_markup(&format!("<span>Sth different...</span>"));
}

I tried to use Arc<Mutex<gtk::Label>> instead of just Rc<gtk::Label> but, well.. I wasn't able to make it working. Usually I got error such as: move occurs because label_1_arc has type Arc<Mutex<gtk::Label>>, which does not implement the Copy trait

0

There are 0 best solutions below