diff --git a/libs/widgets/frame.cc b/libs/widgets/frame.cc
index 8068ccb83d..6cd16dfb1f 100644
--- a/libs/widgets/frame.cc
+++ b/libs/widgets/frame.cc
@@ -64,6 +64,13 @@ Frame::~Frame ()
}
}
+void
+Frame::child_destroyed (GtkWidget*, gpointer data)
+{
+ Frame* self = static_cast(data);
+ self->_w = 0;
+}
+
void
Frame::on_add (Widget* w)
{
@@ -73,6 +80,7 @@ Frame::on_add (Widget* w)
Bin::on_add (w);
_w = w;
+ g_signal_connect (w->gobj(), "destroy", G_CALLBACK(child_destroyed), this);
queue_resize ();
}
diff --git a/libs/widgets/widgets/frame.h b/libs/widgets/widgets/frame.h
index c349ad6afd..5a1ef00e14 100644
--- a/libs/widgets/widgets/frame.h
+++ b/libs/widgets/widgets/frame.h
@@ -56,6 +56,8 @@ protected:
void on_style_changed (const Glib::RefPtr&);
void on_name_changed ();
+ static void child_destroyed (GtkWidget*, gpointer);
+
private:
Glib::RefPtr get_parent_style ();