Я пытаюсь добавить в gtk::ListBox
контейнер из закрытия обработки события несвязанного виджета. Поле списка, о котором идет речь, извлекается через gtk::Builder
, например, так:
let notes_list: gtk::ListBox = builder.get_object(NOTES_LIST_BOX_ID).unwrap();
И обработчик событий, в котором я не могу добавить notes_list
(обратите внимание, что я пробовал без * Макрос 1007 *, с сильными и слабыми ссылками, обертывающий указатель Rc
и т. Д. c., Но, похоже, ничего не меняется):
open_menu_item.connect_activate(clone!(@strong state, @strong notes_list => move |_| {
println!("Open database menu item activated");
// Seemingly can't add to notes_list from within this closure???
notes_list.add(>k::Label::new(Some("TEST"))); // Doesn't work???
let dialog = gtk::FileChooserDialog::with_buttons::<gtk::Window>(
Some("Open database file"),
None,
gtk::FileChooserAction::Open,
&[("_Cancel", gtk::ResponseType::Cancel),
("_Open", gtk::ResponseType::Accept)]
);
dialog.connect_response(clone!(@weak state, @weak notes_list => move |this, res| {
if res == gtk::ResponseType::Accept {
let file = this.get_file().unwrap();
let path_buf = file.get_path().unwrap();
println!("Opening database file: {}", path_buf.as_path().display());
let mut state = state.borrow_mut();
state.db = database::database_in_file(path_buf.as_path()).ok();
state.update_notes_list(¬es_list);
}
this.close();
}));
dialog.show_all();
}));
Сообщение об ошибке не отображается - ожидаемое поведение (т. Е. добавление gtk::Label
к списку) не происходит.
Полный код этого модуля (и остальная часть моего грязного кода): https://github.com/WiredSound/nos/blob/master/src/gui.rs
Если бы кто-нибудь мог помочь мне понять это, я был бы очень признателен, спасибо.