1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
#include <gtkmm.h>
#include <gtk/gtk.h>
#include <stdio.h>
void on_viewport_destroyed(GtkWidget* widget, gpointer)
{
GTK_VIEWPORT(widget);
g_warning("viewport destroyed");
}
void on_gtklabel_destroyed(GtkWidget*, gpointer)
{
g_warning("gtklabel destroyed");
}
class DerivedLabel : public Gtk::Label
{
public:
DerivedLabel() {}
virtual ~DerivedLabel() { printf("~DerivedLabel\n");}
};
class DerivedScrolledWindow : public Gtk::ScrolledWindow
{
public:
DerivedScrolledWindow() {}
virtual ~DerivedScrolledWindow() { printf("~DerivedScrolledWindow\n");}
};
class Instance
{
public:
Instance()
{
//m_pLabel = new DerivedLabel();
m_ScrolledWindow.add( m_pLabel );
g_signal_connect (G_OBJECT(m_ScrolledWindow.get_child()->gobj()), "destroy", G_CALLBACK(on_viewport_destroyed), NULL);
g_signal_connect (G_OBJECT(m_pLabel.gobj()), "destroy", G_CALLBACK(on_gtklabel_destroyed), NULL);
}
virtual ~Instance()
{
printf("~Instance() 1\n");
//m_ScrolledWindow.remove(); //Removes m_pLabel;
printf("~Instance() 2\n");
//delete m_pLabel;
printf("~Instance() 3\n");
}
protected:
DerivedLabel m_pLabel;
DerivedScrolledWindow m_ScrolledWindow;
};
int main ( int argc, char *argv[] ) {
Gtk::Main main( argc, argv );
Instance instance;
}
|