[niepce: 32/34] gtk4: Fix crash




commit 2a5d3eaf0d4a34001bf3e783b635be70575da2db
Author: Hubert Figuière <hub figuiere net>
Date:   Sat May 14 21:18:40 2022 -0400

    gtk4: Fix crash
    
    - Crash happen when quitting the app with Ctrl-Q

 src/niepce/ui/gridviewmodule.cpp      |  6 ++----
 src/niepce/ui/workspacecontroller.cpp | 13 +++++++++----
 src/niepce/ui/workspacecontroller.hpp |  2 ++
 3 files changed, 13 insertions(+), 8 deletions(-)
---
diff --git a/src/niepce/ui/gridviewmodule.cpp b/src/niepce/ui/gridviewmodule.cpp
index 87e3b22..3b4c32c 100644
--- a/src/niepce/ui/gridviewmodule.cpp
+++ b/src/niepce/ui/gridviewmodule.cpp
@@ -138,10 +138,8 @@ Gtk::Widget * GridViewModule::buildWidget()
   m_librarylistview->set_vexpand(true);
 
   m_context_menu->set_parent(*m_librarylistview);
-  m_librarylistview->signal_unrealize().connect([this] {
-      m_context_menu->unparent();
-  });
-
+  m_librarylistview->signal_unrealize().connect(
+      sigc::mem_fun(*m_context_menu, &Gtk::PopoverMenu::unparent));
 
   auto gesture = Gtk::GestureClick::create();
   m_librarylistview->add_controller(gesture);
diff --git a/src/niepce/ui/workspacecontroller.cpp b/src/niepce/ui/workspacecontroller.cpp
index dc6c32c..d337fa9 100644
--- a/src/niepce/ui/workspacecontroller.cpp
+++ b/src/niepce/ui/workspacecontroller.cpp
@@ -77,6 +77,12 @@ WorkspaceController::WorkspaceController(const Glib::RefPtr<Gio::SimpleActionGro
     }
 }
 
+WorkspaceController::~WorkspaceController()
+{
+    m_context_menu->unparent();
+    delete m_context_menu;
+}
+
 libraryclient::LibraryClientPtr WorkspaceController::getLibraryClient() const
 {
     return std::dynamic_pointer_cast<NiepceWindow>(m_parent.lock())->getLibraryClient();
@@ -465,11 +471,10 @@ Gtk::Widget * WorkspaceController::buildWidget()
 
     add_btn->set_menu_model(m_menu);
 
-    m_context_menu = Gtk::manage(new Gtk::PopoverMenu(m_menu));
+    m_context_menu = new Gtk::PopoverMenu(m_menu);
     m_context_menu->set_parent(m_librarytree);
-    m_librarytree.signal_unrealize().connect([this] {
-        m_context_menu->unparent();
-    });
+    m_librarytree.signal_unrealize().connect(
+        sigc::mem_fun(*m_context_menu, &Gtk::PopoverMenu::unparent));
 
     header->append(*add_btn);
     m_vbox.append(*header);
diff --git a/src/niepce/ui/workspacecontroller.hpp b/src/niepce/ui/workspacecontroller.hpp
index a578442..eae0882 100644
--- a/src/niepce/ui/workspacecontroller.hpp
+++ b/src/niepce/ui/workspacecontroller.hpp
@@ -50,6 +50,8 @@ public:
     };
 
     WorkspaceController(const Glib::RefPtr<Gio::SimpleActionGroup>& action_group);
+    virtual ~WorkspaceController();
+
     class WorkspaceTreeColumns
         : public Gtk::TreeModelColumnRecord
     {


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