koala написав:А чому не виходить клонувати self? У чому проблема? Це звичайне посилання на змінну структури.
Дійсно клонується. У мене просто спочатку не виходило, видавало помилку пов'язану із self, певно,
я щось не так записав, коли пробував клонувати його вперше.
Але клонування метода автоматично запускає його при побудові складових інтерфейсу.
У моєму випадку шляхи до словників завантажуються двічі:
один раз, коли викликаю метод при побудові вікна, і ще раз, коли клоную цей метод.
Тому я прибрав клонування і просто продублював метод усередині замикання.
Можна було, звісно, лишити лише клонування, але тоді дуже важко буде відстежити що де запускається.
Ось так зробив:
fn set_connect_signals(&self) {
let default_dict_paths_name = "default-dict-path".to_string();
let settings = self.settings.clone();
let dict_paths_listbox = self.dict_paths_listbox.clone();
//let download_dict_paths = self.download_dict_paths().clone();
self.settings.connect_changed(
Some(&default_dict_paths_name), move |_, _| {
//download_dict_paths;
dict_paths_listbox.remove_all();
let default_dict_paths: String =
settings.string("default-dict-path").to_string();
if default_dict_paths != ""{
for path in default_dict_paths.lines(){
let new_path = gtk::Label::new(Some(path));
dict_paths_listbox.append(&new_path);
}
}
});
}