Cleaner fix for using deleted widget in idle callback

Use a slightly higher idle priority so callback runs before TLW is deleted,
and ref the widget just to make sure it doesn't disappear. Avoids accessing
de-allocated memory.
This commit is contained in:
Paul Cornett
2016-11-05 17:27:57 -07:00
parent e3f117c4f3
commit 9c3900e40d

View File

@@ -1145,12 +1145,8 @@ void wxTopLevelWindowGTK::DoSetSize( int x, int y, int width, int height, int si
extern "C" { extern "C" {
static gboolean reset_size_request(void* data) static gboolean reset_size_request(void* data)
{ {
if ( GTK_IS_WIDGET(data) ) gtk_widget_set_size_request(GTK_WIDGET(data), -1, -1);
{ g_object_unref(data);
gtk_widget_set_size_request(GTK_WIDGET(data), -1, -1);
}
//else: the window has probably been deleted before the idle callback was
// invoked
return false; return false;
} }
} }
@@ -1179,7 +1175,8 @@ void wxTopLevelWindowGTK::DoSetClientSize(int width, int height)
{ {
gtk_widget_set_size_request(m_wxwindow, m_clientWidth, m_clientHeight); gtk_widget_set_size_request(m_wxwindow, m_clientWidth, m_clientHeight);
// Cancel size request at next idle to allow resizing // Cancel size request at next idle to allow resizing
g_idle_add_full(G_PRIORITY_LOW, reset_size_request, m_wxwindow, NULL); g_idle_add_full(G_PRIORITY_LOW - 1, reset_size_request, m_wxwindow, NULL);
g_object_ref(m_wxwindow);
} }
} }
} }