[niepce/gtk4] gtk4: Fix confirm dialog



commit ad94d9c643b319a9c5682783c9ca1f148e848396
Author: Hubert Figuière <hub figuiere net>
Date:   Sat May 7 21:47:54 2022 -0400

    gtk4: Fix confirm dialog

 niepce-main/build.rs                         |  1 +
 niepce-main/src/niepce/ui/dialogs/confirm.rs | 12 ++----------
 src/niepce/ui/workspacecontroller.cpp        | 12 +++++++++---
 3 files changed, 12 insertions(+), 13 deletions(-)
---
diff --git a/niepce-main/build.rs b/niepce-main/build.rs
index 5697a2f..0018a9f 100644
--- a/niepce-main/build.rs
+++ b/niepce-main/build.rs
@@ -38,6 +38,7 @@ fn main() {
             .exclude_item("GtkListStore")
             .exclude_item("GtkTreePath")
             .exclude_item("GtkPopoverMenu")
+            .exclude_item("GtkMessageDialog")
             .exclude_item("GtkCellRenderer")
             .exclude_item("GtkWidget")
             .exclude_item("GFileInfo")
diff --git a/niepce-main/src/niepce/ui/dialogs/confirm.rs b/niepce-main/src/niepce/ui/dialogs/confirm.rs
index 8359b5c..0c37c4f 100644
--- a/niepce-main/src/niepce/ui/dialogs/confirm.rs
+++ b/niepce-main/src/niepce/ui/dialogs/confirm.rs
@@ -30,8 +30,7 @@ use gtk4::MessageDialog;
 pub unsafe extern "C" fn dialog_confirm(
     message: *const c_char,
     parent: *mut gtk4_sys::GtkWindow,
-) -> bool {
-    let mut result: bool = false;
+) -> *mut gtk4_sys::GtkMessageDialog {
     let msg = CStr::from_ptr(message).to_string_lossy();
     let parent = gtk4::Window::from_glib_none(parent);
     let dialog = MessageDialog::new(
@@ -43,13 +42,6 @@ pub unsafe extern "C" fn dialog_confirm(
     );
 
     dialog.set_modal(true);
-    dialog.connect_response(|_, response| {
-        if response == gtk4::ResponseType::Yes {
-            // XXX fix this
-            let result = true;
-        }
-    });
-    dialog.show();
 
-    result
+    dialog.to_glib_none().0
 }
diff --git a/src/niepce/ui/workspacecontroller.cpp b/src/niepce/ui/workspacecontroller.cpp
index f59e44f..dc6c32c 100644
--- a/src/niepce/ui/workspacecontroller.cpp
+++ b/src/niepce/ui/workspacecontroller.cpp
@@ -24,6 +24,7 @@
 #include <gtkmm/gestureclick.h>
 #include <gtkmm/iconview.h>
 #include <gtkmm/image.h>
+#include <gtkmm/messagedialog.h>
 
 #include "fwk/base/debug.hpp"
 #include "fwk/base/string.hpp"
@@ -97,9 +98,14 @@ void WorkspaceController::action_delete_folder()
     auto id = get_selected_folder_id();
     if (id) {
         auto& window = std::dynamic_pointer_cast<NiepceWindow>(m_parent.lock())->gtkWindow();
-        if (ui::dialog_confirm(_("Delete selected folder?"), window.gobj())) {
-            ffi::libraryclient_delete_folder(getLibraryClient()->client(), id);
-        }
+        auto dialog = Glib::wrap(ui::dialog_confirm(_("Delete selected folder?"), window.gobj()));
+        dialog->signal_response().connect([this, id, dialog] (int response) {
+            if (response == Gtk::ResponseType::YES) {
+                ffi::libraryclient_delete_folder(getLibraryClient()->client(), id);
+            }
+            delete dialog;
+        });
+        dialog->show();
     }
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]