[niepce/gtk4] gtk4: don't crash on create folder
- From: Hubert Figuière <hub src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [niepce/gtk4] gtk4: don't crash on create folder
- Date: Mon, 9 May 2022 01:47:25 +0000 (UTC)
commit 035e1749781c765299e4b44b97418d91a7370859
Author: Hubert Figuière <hub figuiere net>
Date: Sat May 7 22:14:57 2022 -0400
gtk4: don't crash on create folder
.../src/niepce/ui/dialogs/requestnewfolder.rs | 34 +++++++++++++---------
1 file changed, 20 insertions(+), 14 deletions(-)
---
diff --git a/niepce-main/src/niepce/ui/dialogs/requestnewfolder.rs
b/niepce-main/src/niepce/ui/dialogs/requestnewfolder.rs
index 1b9db1d..078a5f5 100644
--- a/niepce-main/src/niepce/ui/dialogs/requestnewfolder.rs
+++ b/niepce-main/src/niepce/ui/dialogs/requestnewfolder.rs
@@ -23,6 +23,7 @@ use gtk4::prelude::*;
use gtk4::{Dialog, Entry, Label};
use crate::libraryclient::{ClientInterface, LibraryClientWrapper};
+use npc_fwk::err_out;
/// # Safety
/// Use raw pointers.
@@ -42,26 +43,31 @@ pub unsafe extern "C" fn dialog_request_new_folder(
],
);
let label = Label::with_mnemonic(gettext("Folder _name:").as_str());
- dialog.content_area().append(&label);
+ let content_area = dialog.content_area();
+ content_area.append(&label);
let entry = Entry::new();
entry.set_text("foobar");
entry.add_mnemonic_label(&label);
- dialog.content_area().append(&entry);
+ content_area.append(&entry);
dialog.set_modal(true);
let client = client.client();
- dialog.connect_response(
- glib::clone!(@strong entry, @strong client => move |_, response| {
- let mut client = client.clone();
- let folder_name = entry.text();
- let cancel = response != gtk4::ResponseType::Ok;
- if !cancel {
- std::sync::Arc::get_mut(&mut client)
- .unwrap()
- .create_folder(folder_name.to_string(), None);
- }
- }),
- );
+ dialog.connect_response(glib::clone!(@strong entry => move |dialog, response| {
+ let mut client = client.clone();
+ let folder_name = entry.text();
+ let cancel = response != gtk4::ResponseType::Ok;
+ if !cancel {
+ std::sync::Arc::get_mut(&mut client)
+ .map(|client| {
+ client.create_folder(folder_name.to_string(), None);
+ })
+ .or_else(|| {
+ err_out!("Can't get libclient, create_folder() failed");
+ None
+ });
+ }
+ dialog.close();
+ }));
dialog.show();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]