# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1305703572 0 # Node ID 0469e278453c446132b0dab344cdb8ac437cd668 # Parent c63abcab5312a6dc6cdf5db4f6b8c22f80c1e8ae Fixes issues on GTK where dw_window_destroy() is called on an item packed into a top-level window. Repacking would fail in this case. diff -r c63abcab5312 -r 0469e278453c gtk/dw.c --- a/gtk/dw.c Wed May 18 06:58:39 2011 +0000 +++ b/gtk/dw.c Wed May 18 07:26:12 2011 +0000 @@ -9077,7 +9077,17 @@ } else { - GtkWidget *vbox = gtk_vbox_new(FALSE, 0); + GtkWidget *vbox = g_object_get_data(G_OBJECT(box), "_dw_vbox"); + + if(!vbox) + { + vbox = gtk_vbox_new(FALSE, 0); + g_object_set_data(G_OBJECT(box), "_dw_vbox", vbox); + gtk_container_add(GTK_CONTAINER(box), vbox); + gtk_widget_show(vbox); + } + + gtk_container_set_border_width(GTK_CONTAINER(box), pad); if(GTK_IS_TABLE(item) || (tmpitem && GTK_IS_TABLE(tmpitem))) { @@ -9102,10 +9112,7 @@ warn = TRUE; } - gtk_container_border_width(GTK_CONTAINER(box), pad); - gtk_container_add(GTK_CONTAINER(box), vbox); gtk_box_pack_end(GTK_BOX(vbox), item, TRUE, TRUE, 0); - gtk_widget_show(vbox); gtk_widget_set_usize(item, width, height); gtk_object_set_user_data(GTK_OBJECT(box), vbox); @@ -10550,7 +10557,17 @@ } else { - GtkWidget *vbox = gtk_vbox_new(FALSE, 0); + GtkWidget *vbox = g_object_get_data(G_OBJECT(box), "_dw_vbox"); + + if(!vbox) + { + vbox = gtk_vbox_new(FALSE, 0); + g_object_set_data(G_OBJECT(box), "_dw_vbox", vbox); + gtk_container_add(GTK_CONTAINER(box), vbox); + gtk_widget_show(vbox); + } + + gtk_container_set_border_width(GTK_CONTAINER(box), pad); if (GTK_IS_TABLE(item) || (tmpitem && GTK_IS_TABLE(tmpitem))) { @@ -10575,10 +10592,7 @@ warn = TRUE; } - gtk_container_border_width(GTK_CONTAINER(box), pad); - gtk_container_add(GTK_CONTAINER(box), vbox); - gtk_box_pack_end(GTK_BOX(vbox), item, TRUE, TRUE, 0); - gtk_widget_show(vbox); + gtk_box_pack_start(GTK_BOX(vbox), item, TRUE, TRUE, 0); gtk_widget_set_usize(item, width, height); gtk_object_set_user_data(GTK_OBJECT(box), vbox); diff -r c63abcab5312 -r 0469e278453c gtk3/dw.c --- a/gtk3/dw.c Wed May 18 06:58:39 2011 +0000 +++ b/gtk3/dw.c Wed May 18 07:26:12 2011 +0000 @@ -7954,7 +7954,17 @@ } else { - GtkWidget *vbox = gtk_vbox_new(FALSE, 0); + GtkWidget *vbox = g_object_get_data(G_OBJECT(box), "_dw_vbox"); + + if(!vbox) + { + vbox = gtk_vbox_new(FALSE, 0); + g_object_set_data(G_OBJECT(box), "_dw_vbox", vbox); + gtk_container_add(GTK_CONTAINER(box), vbox); + gtk_widget_show(vbox); + } + + gtk_container_set_border_width(GTK_CONTAINER(box), pad); if(GTK_IS_TABLE(item) || (tmpitem && GTK_IS_TABLE(tmpitem))) { @@ -7979,10 +7989,7 @@ warn = TRUE; } - gtk_container_set_border_width(GTK_CONTAINER(box), pad); - gtk_container_add(GTK_CONTAINER(box), vbox); gtk_box_pack_end(GTK_BOX(vbox), item, TRUE, TRUE, 0); - gtk_widget_show(vbox); gtk_widget_set_size_request(item, width, height); g_object_set_data(G_OBJECT(box), "_dw_user", vbox); @@ -9321,7 +9328,17 @@ } else { - GtkWidget *vbox = gtk_vbox_new(FALSE, 0); + GtkWidget *vbox = g_object_get_data(G_OBJECT(box), "_dw_vbox"); + + if(!vbox) + { + vbox = gtk_vbox_new(FALSE, 0); + g_object_set_data(G_OBJECT(box), "_dw_vbox", vbox); + gtk_container_add(GTK_CONTAINER(box), vbox); + gtk_widget_show(vbox); + } + + gtk_container_set_border_width(GTK_CONTAINER(box), pad); if (GTK_IS_TABLE(item) || (tmpitem && GTK_IS_TABLE(tmpitem))) { @@ -9346,10 +9363,7 @@ warn = TRUE; } - gtk_container_set_border_width(GTK_CONTAINER(box), pad); - gtk_container_add(GTK_CONTAINER(box), vbox); - gtk_box_pack_end(GTK_BOX(vbox), item, TRUE, TRUE, 0); - gtk_widget_show(vbox); + gtk_box_pack_start(GTK_BOX(vbox), item, TRUE, TRUE, 0); gtk_widget_set_size_request(item, width, height); g_object_set_data(G_OBJECT(box), "_dw_user", vbox);