]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkbin.c
Merged changes from gtk-1-0. Check ChangeLog for details.
[~andy/gtk] / gtk / gtkbin.c
index 4cb7efcc193235ed4a0776a5a4e53f51bd4d765e..c1e07766d841e1abea753c605cae2513eb0cf62b 100644 (file)
  * Library General Public License for more details.
  *
  * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
  */
 #include "gtkbin.h"
 
 
 static void gtk_bin_class_init (GtkBinClass    *klass);
 static void gtk_bin_init       (GtkBin         *bin);
-static void gtk_bin_destroy    (GtkObject      *object);
 static void gtk_bin_map        (GtkWidget      *widget);
 static void gtk_bin_unmap      (GtkWidget      *widget);
 static void gtk_bin_draw       (GtkWidget      *widget,
@@ -53,7 +53,8 @@ gtk_bin_get_type ()
        sizeof (GtkBinClass),
        (GtkClassInitFunc) gtk_bin_class_init,
        (GtkObjectInitFunc) gtk_bin_init,
-       (GtkArgFunc) NULL,
+       (GtkArgSetFunc) NULL,
+        (GtkArgGetFunc) NULL,
       };
 
       bin_type = gtk_type_unique (gtk_container_get_type (), &bin_info);
@@ -75,8 +76,6 @@ gtk_bin_class_init (GtkBinClass *class)
 
   parent_class = gtk_type_class (gtk_container_get_type ());
 
-  object_class->destroy = gtk_bin_destroy;
-
   widget_class->map = gtk_bin_map;
   widget_class->unmap = gtk_bin_unmap;
   widget_class->draw = gtk_bin_draw;
@@ -96,27 +95,6 @@ gtk_bin_init (GtkBin *bin)
 }
 
 
-static void
-gtk_bin_destroy (GtkObject *object)
-{
-  GtkBin *bin;
-
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (GTK_IS_BIN (object));
-
-  bin = GTK_BIN (object);
-
-  if (bin->child)
-    {
-      bin->child->parent = NULL;
-      gtk_object_unref (GTK_OBJECT (bin->child));
-      gtk_widget_destroy (bin->child);
-    }
-
-  if (GTK_OBJECT_CLASS (parent_class)->destroy)
-    (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
 static void
 gtk_bin_map (GtkWidget *widget)
 {
@@ -222,27 +200,25 @@ gtk_bin_add (GtkContainer *container,
   g_return_if_fail (widget != NULL);
 
   bin = GTK_BIN (container);
+  g_return_if_fail (bin->child == NULL);
 
-  if (!bin->child)
+  gtk_widget_set_parent (widget, GTK_WIDGET (container));
+  
+  if (GTK_WIDGET_VISIBLE (widget->parent))
     {
-      gtk_widget_set_parent (widget, GTK_WIDGET (container));
-
-      if (GTK_WIDGET_VISIBLE (widget->parent))
-       {
-         if (GTK_WIDGET_REALIZED (widget->parent) &&
-             !GTK_WIDGET_REALIZED (widget))
-           gtk_widget_realize (widget);
-         
-         if (GTK_WIDGET_MAPPED (widget->parent) &&
-             !GTK_WIDGET_MAPPED (widget))
-           gtk_widget_map (widget);
-       }
-
-      bin->child = widget;
-
-      if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (container))
-        gtk_widget_queue_resize (widget);
+      if (GTK_WIDGET_REALIZED (widget->parent) &&
+         !GTK_WIDGET_REALIZED (widget))
+       gtk_widget_realize (widget);
+      
+      if (GTK_WIDGET_MAPPED (widget->parent) &&
+         !GTK_WIDGET_MAPPED (widget))
+       gtk_widget_map (widget);
     }
+  
+  bin->child = widget;
+  
+  if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (container))
+    gtk_widget_queue_resize (widget);
 }
 
 static void
@@ -259,11 +235,12 @@ gtk_bin_remove (GtkContainer *container,
 
   if (bin->child == widget)
     {
-      gtk_widget_unparent (widget);
+      gboolean widget_was_visible = GTK_WIDGET_VISIBLE (widget);
 
+      gtk_widget_unparent (widget);
       bin->child = NULL;
 
-      if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (container))
+      if (widget_was_visible && GTK_WIDGET_VISIBLE (container))
         gtk_widget_queue_resize (GTK_WIDGET (container));
     }
 }