1 #include <gtkmm.h>
2 #include <iostream>
3 
on_destroyed_ComboBoxderived(GtkWidget *,gpointer)4 void on_destroyed_ComboBoxderived(GtkWidget*, gpointer)
5 {
6   std::cout << "on_destroyed_ComboBoxderived" << std::endl;
7 }
8 
on_destroyed_menuderived(GtkWidget *,gpointer)9 void on_destroyed_menuderived(GtkWidget*, gpointer)
10 {
11   std::cout << "on_destroyed_menuderived" << std::endl;
12 }
13 
14 //Previously, this derived from a Gtk::ComboBox,
15 //and that might have been necessary to trigger the bug at the time,
16 //but ComboBox is now deprecated.
17 class ComboBoxTextDerived : public Gtk::ComboBoxText
18 {
19 public:
ComboBoxTextDerived()20   ComboBoxTextDerived()
21   {
22     g_signal_connect (gobj(), "destroy",
23 				G_CALLBACK (on_destroyed_ComboBoxderived), NULL);
24   }
25 
~ComboBoxTextDerived()26   ~ComboBoxTextDerived()
27   {
28     //remove_menu();
29     std::cout << "~ComboBoxTextDerived()" << std::endl;
30   }
31 };
32 
33 class MenuDerived : public Gtk::Menu
34 {
35 public:
MenuDerived()36   MenuDerived()
37   {
38   g_signal_connect (gobj(), "destroy",
39 				G_CALLBACK (on_destroyed_menuderived), NULL);
40   }
41 
~MenuDerived()42   ~MenuDerived()
43   {
44     std::cout << "~MenuDerived() 1" << std::endl;
45 
46     std::cout << "~MenuDerived() 2" << std::endl;
47 
48   }
49 };
50 
51 class test_window : public Gtk::Window
52 {
53 public:
54   test_window();
~test_window()55   ~test_window()
56   {
57     std::cout << "~test_window()1" << std::endl;
58 
59    }
60 
61 protected:
62 
63   //Gtk::MenuItem m_MenuItem;
64   MenuDerived m_Menu;
65   ComboBoxTextDerived m_ComboBox;
66 };
67 
test_window()68 test_window::test_window()
69 //: m_MenuItem("One")
70 {
71   //  m_Menu.append(m_MenuItem);
72   //m_ComboBox.set_menu(m_Menu);
73   add(m_ComboBox);
74   //show_all();
75 }
76 
main(int argc,char * argv[])77 int main(int argc, char *argv[])
78 {
79   Glib::RefPtr<Gtk::Application> app =
80     Gtk::Application::create(argc, argv);
81   test_window foo;
82   return app->run(foo);
83 }
84