changeset 1021:0469e278453c

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.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Wed, 18 May 2011 07:26:12 +0000
parents c63abcab5312
children fa1a826348b3
files gtk/dw.c gtk3/dw.c
diffstat 2 files changed, 46 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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);