]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtklist.c
Deprecate widget flag: GTK_WIDGET_VISIBLE
[~andy/gtk] / gtk / gtklist.c
index a756ff3e0694845cabea6acb33d2d55d4ff7ac58..9b9f4f08a3d66809969b0991cfda5f388234dfcf 100644 (file)
  * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
  */
 
+#include "config.h"
 #include <string.h> /* memset */
 
+#undef GTK_DISABLE_DEPRECATED
+#define __GTK_LIST_C__
+
 #include "gtklist.h"
 #include "gtklistitem.h"
 #include "gtkmain.h"
 #include "gtksignal.h"
 #include "gtklabel.h"
+#include "gtkmarshalers.h"
+#include "gtkintl.h"
+
+#include "gtkalias.h"
 
 enum {
   SELECTION_CHANGED,
@@ -56,7 +64,7 @@ static void gtk_list_get_arg         (GtkObject      *object,
                                      GtkArg         *arg,
                                      guint           arg_id);
 /*** GtkObject Methods ***/
-static void gtk_list_shutdown       (GObject        *object);
+static void gtk_list_dispose        (GObject        *object);
 
 /*** GtkWidget Methods ***/
 static void gtk_list_size_request    (GtkWidget             *widget,
@@ -64,12 +72,9 @@ static void gtk_list_size_request    (GtkWidget           *widget,
 static void gtk_list_size_allocate   (GtkWidget             *widget,
                                      GtkAllocation  *allocation);
 static void gtk_list_realize        (GtkWidget      *widget);
-static void gtk_list_map            (GtkWidget      *widget);
 static void gtk_list_unmap          (GtkWidget      *widget);
 static void gtk_list_style_set      (GtkWidget      *widget,
                                      GtkStyle       *previous_style);
-static gint gtk_list_expose         (GtkWidget      *widget,
-                                     GdkEventExpose *event);
 static gint gtk_list_motion_notify   (GtkWidget      *widget,
                                      GdkEventMotion *event);
 static gint gtk_list_button_press    (GtkWidget      *widget,
@@ -77,6 +82,9 @@ static gint gtk_list_button_press    (GtkWidget      *widget,
 static gint gtk_list_button_release  (GtkWidget             *widget,
                                      GdkEventButton *event);
 
+static gboolean gtk_list_focus       (GtkWidget        *widget,
+                                      GtkDirectionType  direction);
+
 /*** GtkContainer Methods ***/
 static void gtk_list_add            (GtkContainer     *container,
                                      GtkWidget        *widget);
@@ -89,8 +97,6 @@ static void gtk_list_forall        (GtkContainer     *container,
 static GtkType gtk_list_child_type   (GtkContainer     *container);
 static void gtk_list_set_focus_child (GtkContainer     *container,
                                      GtkWidget        *widget);
-static gint gtk_list_focus           (GtkContainer     *container,
-                                     GtkDirectionType  direction);
 
 /*** GtkList Private Functions ***/
 static void gtk_list_move_focus_child      (GtkList       *list,
@@ -167,9 +173,9 @@ static void gtk_list_drag_begin (GtkWidget      *widget,
 static GtkContainerClass *parent_class = NULL;
 static guint list_signals[LAST_SIGNAL] = { 0 };
 
-static const gchar *vadjustment_key = "gtk-vadjustment";
+static const gchar vadjustment_key[] = "gtk-vadjustment";
 static guint        vadjustment_key_id = 0;
-static const gchar *hadjustment_key = "gtk-hadjustment";
+static const gchar hadjustment_key[] = "gtk-hadjustment";
 static guint        hadjustment_key_id = 0;
 
 GtkType
@@ -191,6 +197,7 @@ gtk_list_get_type (void)
         (GtkClassInitFunc) NULL,
       };
 
+      I_("GtkList");
       list_type = gtk_type_unique (GTK_TYPE_CONTAINER, &list_info);
     }
 
@@ -214,61 +221,60 @@ gtk_list_class_init (GtkListClass *class)
   vadjustment_key_id = g_quark_from_static_string (vadjustment_key);
   hadjustment_key_id = g_quark_from_static_string (hadjustment_key);
 
-  gobject_class->shutdown = gtk_list_shutdown;
+  gobject_class->dispose = gtk_list_dispose;
 
 
   object_class->set_arg = gtk_list_set_arg;
   object_class->get_arg = gtk_list_get_arg;
 
-  widget_class->map = gtk_list_map;
   widget_class->unmap = gtk_list_unmap;
   widget_class->style_set = gtk_list_style_set;
   widget_class->realize = gtk_list_realize;
-  widget_class->expose_event = gtk_list_expose;
   widget_class->button_press_event = gtk_list_button_press;
   widget_class->button_release_event = gtk_list_button_release;
   widget_class->motion_notify_event = gtk_list_motion_notify;
   widget_class->size_request = gtk_list_size_request;
   widget_class->size_allocate = gtk_list_size_allocate;
   widget_class->drag_begin = gtk_list_drag_begin;
-
+  widget_class->focus = gtk_list_focus;
+  
   container_class->add = gtk_list_add;
   container_class->remove = gtk_list_remove;
   container_class->forall = gtk_list_forall;
   container_class->child_type = gtk_list_child_type;
   container_class->set_focus_child = gtk_list_set_focus_child;
-  container_class->focus = gtk_list_focus;
 
   class->selection_changed = NULL;
   class->select_child = gtk_real_list_select_child;
   class->unselect_child = gtk_real_list_unselect_child;
 
   list_signals[SELECTION_CHANGED] =
-    gtk_signal_new ("selection_changed",
+    gtk_signal_new (I_("selection-changed"),
                    GTK_RUN_FIRST,
                    GTK_CLASS_TYPE (object_class),
                    GTK_SIGNAL_OFFSET (GtkListClass, selection_changed),
-                   gtk_marshal_VOID__VOID,
+                   _gtk_marshal_VOID__VOID,
                    GTK_TYPE_NONE, 0);
   list_signals[SELECT_CHILD] =
-    gtk_signal_new ("select_child",
+    gtk_signal_new (I_("select-child"),
                    GTK_RUN_FIRST,
                    GTK_CLASS_TYPE (object_class),
                    GTK_SIGNAL_OFFSET (GtkListClass, select_child),
-                   gtk_marshal_VOID__POINTER,
+                   _gtk_marshal_VOID__OBJECT,
                    GTK_TYPE_NONE, 1,
                    GTK_TYPE_WIDGET);
   list_signals[UNSELECT_CHILD] =
-    gtk_signal_new ("unselect_child",
+    gtk_signal_new (I_("unselect-child"),
                    GTK_RUN_FIRST,
                    GTK_CLASS_TYPE (object_class),
                    GTK_SIGNAL_OFFSET (GtkListClass, unselect_child),
-                   gtk_marshal_VOID__POINTER,
+                   _gtk_marshal_VOID__OBJECT,
                    GTK_TYPE_NONE, 1,
                    GTK_TYPE_WIDGET);
   
-  gtk_object_add_arg_type ("GtkList::selection_mode",
-                          GTK_TYPE_SELECTION_MODE, GTK_ARG_READWRITE,
+  gtk_object_add_arg_type ("GtkList::selection-mode",
+                          GTK_TYPE_SELECTION_MODE, 
+                          GTK_ARG_READWRITE | G_PARAM_STATIC_NAME,
                           ARG_SELECTION_MODE);
 }
 
@@ -338,14 +344,14 @@ gtk_list_new (void)
 
 /* Private GtkObject Methods :
  * 
- * gtk_list_shutdown
+ * gtk_list_dispose
  */
 static void
-gtk_list_shutdown (GObject *object)
+gtk_list_dispose (GObject *object)
 {
   gtk_list_clear_items (GTK_LIST (object), 0, -1);
 
-  G_OBJECT_CLASS (parent_class)->shutdown (object);
+  G_OBJECT_CLASS (parent_class)->dispose (object);
 }
 
 
@@ -354,7 +360,6 @@ gtk_list_shutdown (GObject *object)
  * gtk_list_size_request
  * gtk_list_size_allocate
  * gtk_list_realize
- * gtk_list_map
  * gtk_list_unmap
  * gtk_list_motion_notify
  * gtk_list_button_press
@@ -364,15 +369,10 @@ static void
 gtk_list_size_request (GtkWidget      *widget,
                       GtkRequisition *requisition)
 {
-  GtkList *list;
+  GtkList *list = GTK_LIST (widget);
   GtkWidget *child;
   GList *children;
 
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_LIST (widget));
-  g_return_if_fail (requisition != NULL);
-
-  list = GTK_LIST (widget);
   requisition->width = 0;
   requisition->height = 0;
 
@@ -382,7 +382,7 @@ gtk_list_size_request (GtkWidget      *widget,
       child = children->data;
       children = children->next;
 
-      if (GTK_WIDGET_VISIBLE (child))
+      if (gtk_widget_get_visible (child))
        {
          GtkRequisition child_requisition;
          
@@ -405,17 +405,11 @@ static void
 gtk_list_size_allocate (GtkWidget     *widget,
                        GtkAllocation *allocation)
 {
-  GtkList *list;
+  GtkList *list = GTK_LIST (widget);
   GtkWidget *child;
   GtkAllocation child_allocation;
   GList *children;
 
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_LIST (widget));
-  g_return_if_fail (allocation != NULL);
-
-  list = GTK_LIST (widget);
-
   widget->allocation = *allocation;
   if (GTK_WIDGET_REALIZED (widget))
     gdk_window_move_resize (widget->window,
@@ -436,7 +430,7 @@ gtk_list_size_allocate (GtkWidget     *widget,
          child = children->data;
          children = children->next;
 
-         if (GTK_WIDGET_VISIBLE (child))
+         if (gtk_widget_get_visible (child))
            {
              GtkRequisition child_requisition;
              gtk_widget_get_child_requisition (child, &child_requisition);
@@ -457,9 +451,6 @@ gtk_list_realize (GtkWidget *widget)
   GdkWindowAttr attributes;
   gint attributes_mask;
 
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_LIST (widget));
-
   GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
 
   attributes.window_type = GDK_WINDOW_CHILD;
@@ -483,53 +474,29 @@ gtk_list_realize (GtkWidget *widget)
                             &widget->style->base[GTK_STATE_NORMAL]);
 }
 
-static void
-gtk_list_map (GtkWidget *widget)
+static gboolean
+list_has_grab (GtkList *list)
 {
-  GtkList *list;
-  GtkWidget *child;
-  GList *children;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_LIST (widget));
-
-  GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
-  list = GTK_LIST (widget);
-
-  children = list->children;
-  while (children)
-    {
-      child = children->data;
-      children = children->next;
-
-      if (GTK_WIDGET_VISIBLE (child) &&
-         !GTK_WIDGET_MAPPED (child))
-       gtk_widget_map (child);
-    }
-
-  gdk_window_show (widget->window);
+  return (GTK_WIDGET_HAS_GRAB (list) &&
+         gdk_display_pointer_is_grabbed (gtk_widget_get_display (GTK_WIDGET (list))));
+         
 }
 
 static void
 gtk_list_unmap (GtkWidget *widget)
 {
-  GtkList *list;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_LIST (widget));
+  GtkList *list = GTK_LIST (widget);
 
   if (!GTK_WIDGET_MAPPED (widget))
     return;
 
-  list = GTK_LIST (widget);
-
   GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
 
-  if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list))
+  if (list_has_grab (list))
     {
       gtk_list_end_drag_selection (list);
 
-      if (list->anchor != -1 && list->selection_mode == GTK_SELECTION_EXTENDED)
+      if (list->anchor != -1 && list->selection_mode == GTK_SELECTION_MULTIPLE)
        gtk_list_end_selection (list);
     }
 
@@ -540,7 +507,7 @@ static gint
 gtk_list_motion_notify (GtkWidget      *widget,
                        GdkEventMotion *event)
 {
-  GtkList *list;
+  GtkList *list = GTK_LIST (widget);
   GtkWidget *item = NULL;
   GtkAdjustment *adj;
   GtkContainer *container;
@@ -551,12 +518,6 @@ gtk_list_motion_notify (GtkWidget      *widget,
   gint focus_row = 0;
   gint length = 0;
 
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_LIST (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-
-  list = GTK_LIST (widget);
-
   if (!list->drag_selection || !list->children)
     return FALSE;
 
@@ -578,14 +539,14 @@ gtk_list_motion_notify (GtkWidget      *widget,
     {
       if (list->htimer == 0)
        {
-         list->htimer = gtk_timeout_add
-           (SCROLL_TIME, (GtkFunction) gtk_list_horizontal_timeout, widget);
+         list->htimer = gdk_threads_add_timeout
+           (SCROLL_TIME, (GSourceFunc) gtk_list_horizontal_timeout, widget);
          
          if (!((x < adj->value && adj->value <= 0) ||
                (x > adj->value + adj->page_size &&
                 adj->value >= adj->upper - adj->page_size)))
            {
-             gfloat value;
+             gdouble value;
 
              if (x < adj->value)
                value = adj->value + (x - adj->value) / 2 - 1;
@@ -626,9 +587,9 @@ gtk_list_motion_notify (GtkWidget      *widget,
 
   if (!((y < 0 && focus_row == 0) ||
        (y > widget->allocation.height && focus_row >= length - 1)))
-    list->vtimer = gtk_timeout_add (SCROLL_TIME,
-                                   (GtkFunction) gtk_list_vertical_timeout,
-                                   list);
+    list->vtimer = gdk_threads_add_timeout (SCROLL_TIME,
+                                 (GSourceFunc) gtk_list_vertical_timeout,
+                                 list);
 
   if (row != focus_row)
     gtk_widget_grab_focus (item);
@@ -638,7 +599,7 @@ gtk_list_motion_notify (GtkWidget      *widget,
     case GTK_SELECTION_BROWSE:
       gtk_list_select_child (list, item);
       break;
-    case GTK_SELECTION_EXTENDED:
+    case GTK_SELECTION_MULTIPLE:
       gtk_list_update_extended_selection (list, row);
       break;
     default:
@@ -652,17 +613,12 @@ static gint
 gtk_list_button_press (GtkWidget      *widget,
                       GdkEventButton *event)
 {
-  GtkList *list;
+  GtkList *list = GTK_LIST (widget);
   GtkWidget *item;
 
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_LIST (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-
   if (event->button != 1)
     return FALSE;
 
-  list = GTK_LIST (widget);
   item = gtk_get_event_widget ((GdkEvent*) event);
 
   while (item && !GTK_IS_LIST_ITEM (item))
@@ -675,20 +631,13 @@ gtk_list_button_press (GtkWidget      *widget,
 
       if (event->type == GDK_BUTTON_PRESS)
        {
-         if (gdk_pointer_grab (widget->window, TRUE,
-                               GDK_POINTER_MOTION_HINT_MASK |
-                               GDK_BUTTON1_MOTION_MASK |
-                               GDK_BUTTON_RELEASE_MASK,
-                               NULL, NULL, event->time))
-           return FALSE;
-         
          gtk_grab_add (widget);
          list->drag_selection = TRUE;
        }
-      else if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list))
+      else if (list_has_grab (list))
        gtk_list_end_drag_selection (list);
          
-      if (!GTK_WIDGET_HAS_FOCUS(item))
+      if (!gtk_widget_has_focus(item))
        gtk_widget_grab_focus (item);
 
       if (list->add_mode)
@@ -700,7 +649,6 @@ gtk_list_button_press (GtkWidget      *widget,
       switch (list->selection_mode)
        {
        case GTK_SELECTION_SINGLE:
-       case GTK_SELECTION_MULTIPLE:
          if (event->type != GDK_BUTTON_PRESS)
            gtk_list_select_child (list, item);
          else
@@ -710,7 +658,7 @@ gtk_list_button_press (GtkWidget      *widget,
        case GTK_SELECTION_BROWSE:
          break;
 
-       case GTK_SELECTION_EXTENDED:
+       case GTK_SELECTION_MULTIPLE:
          focus_row = g_list_index (list->children, item);
 
          if (list->last_focus_child)
@@ -779,6 +727,8 @@ gtk_list_button_press (GtkWidget      *widget,
        default:
          break;
        }
+
+      return TRUE;
     }
 
   return FALSE;
@@ -788,15 +738,9 @@ static gint
 gtk_list_button_release (GtkWidget     *widget,
                         GdkEventButton *event)
 {
-  GtkList *list;
+  GtkList *list = GTK_LIST (widget);
   GtkWidget *item;
 
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_LIST (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-
-  list = GTK_LIST (widget);
-
   /* we don't handle button 2 and 3 */
   if (event->button != 1)
     return FALSE;
@@ -807,13 +751,12 @@ gtk_list_button_release (GtkWidget        *widget,
 
       switch (list->selection_mode)
        {
-       case GTK_SELECTION_EXTENDED:
+       case GTK_SELECTION_MULTIPLE:
          if (!(event->state & GDK_SHIFT_MASK))
            gtk_list_end_selection (list);
          break;
 
        case GTK_SELECTION_SINGLE:
-       case GTK_SELECTION_MULTIPLE:
 
          item = gtk_get_event_widget ((GdkEvent*) event);
   
@@ -831,42 +774,10 @@ gtk_list_button_release (GtkWidget        *widget,
        default:
          break;
        }
-    }
-  
-  return FALSE;
-}
-
-static gint
-gtk_list_expose (GtkWidget     *widget,
-                GdkEventExpose *event)
-{
-  GtkList *list;
-  GtkWidget *child;
-  GdkEventExpose child_event;
-  GList *children;
 
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_LIST (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-
-  if (GTK_WIDGET_DRAWABLE (widget))
-    {
-      list = GTK_LIST (widget);
-
-      child_event = *event;
-
-      children = list->children;
-      while (children)
-       {
-         child = children->data;
-         children = children->next;
-
-         if (GTK_WIDGET_NO_WINDOW (child) &&
-             gtk_widget_intersect (child, &event->area, &child_event.area))
-           gtk_widget_event (child, (GdkEvent*) &child_event);
-       }
+      return TRUE;
     }
-
+  
   return FALSE;
 }
 
@@ -874,8 +785,6 @@ static void
 gtk_list_style_set     (GtkWidget      *widget,
                         GtkStyle       *previous_style)
 {
-  g_return_if_fail (widget != NULL);
-
   if (previous_style && GTK_WIDGET_REALIZED (widget))
     gdk_window_set_background (widget->window, &widget->style->base[GTK_WIDGET_STATE (widget)]);
 }
@@ -894,9 +803,6 @@ gtk_list_add (GtkContainer *container,
 {
   GList *item_list;
 
-  g_return_if_fail (container != NULL);
-  g_return_if_fail (GTK_IS_LIST (container));
-  g_return_if_fail (widget != NULL);
   g_return_if_fail (GTK_IS_LIST_ITEM (widget));
 
   item_list = g_list_alloc ();
@@ -910,10 +816,7 @@ gtk_list_remove (GtkContainer *container,
                 GtkWidget    *widget)
 {
   GList *item_list;
-  
-  g_return_if_fail (container != NULL);
-  g_return_if_fail (GTK_IS_LIST (container));
-  g_return_if_fail (widget != NULL);
+
   g_return_if_fail (container == GTK_CONTAINER (widget->parent));
   
   item_list = g_list_alloc ();
@@ -930,15 +833,10 @@ gtk_list_forall (GtkContainer  *container,
                 GtkCallback    callback,
                 gpointer       callback_data)
 {
-  GtkList *list;
+  GtkList *list = GTK_LIST (container);
   GtkWidget *child;
   GList *children;
 
-  g_return_if_fail (container != NULL);
-  g_return_if_fail (GTK_IS_LIST (container));
-  g_return_if_fail (callback != NULL);
-
-  list = GTK_LIST (container);
   children = list->children;
 
   while (children)
@@ -962,7 +860,6 @@ gtk_list_set_focus_child (GtkContainer *container,
 {
   GtkList *list;
 
-  g_return_if_fail (container != NULL);
   g_return_if_fail (GTK_IS_LIST (container));
  
   if (child)
@@ -975,11 +872,11 @@ gtk_list_set_focus_child (GtkContainer *container,
       if (container->focus_child)
        {
          list->last_focus_child = container->focus_child;
-         gtk_widget_unref (container->focus_child);
+         g_object_unref (container->focus_child);
        }
       container->focus_child = child;
       if (container->focus_child)
-        gtk_widget_ref (container->focus_child);
+        g_object_ref (container->focus_child);
     }
 
   /* check for v adjustment */
@@ -999,7 +896,7 @@ gtk_list_set_focus_child (GtkContainer *container,
        case GTK_SELECTION_BROWSE:
          gtk_list_select_child (list, child);
          break;
-       case GTK_SELECTION_EXTENDED:
+       case GTK_SELECTION_MULTIPLE:
          if (!list->last_focus_child && !list->add_mode)
            {
              list->undo_focus_child = list->last_focus_child;
@@ -1013,25 +910,25 @@ gtk_list_set_focus_child (GtkContainer *container,
     }
 }
 
-static gint
-gtk_list_focus (GtkContainer     *container,
+static gboolean
+gtk_list_focus (GtkWidget        *widget,
                GtkDirectionType  direction)
 {
   gint return_val = FALSE;
+  GtkContainer *container;
 
-  g_return_val_if_fail (container != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_LIST (container), FALSE);
-
+  container = GTK_CONTAINER (widget);
+  
   if (container->focus_child == NULL ||
-      !GTK_WIDGET_HAS_FOCUS (container->focus_child))
+      !gtk_widget_has_focus (container->focus_child))
     {
       if (GTK_LIST (container)->last_focus_child)
        gtk_container_set_focus_child
          (container, GTK_LIST (container)->last_focus_child);
 
-      if (GTK_CONTAINER_CLASS (parent_class)->focus)
-       return_val = GTK_CONTAINER_CLASS (parent_class)->focus (container,
-                                                               direction);
+      if (GTK_WIDGET_CLASS (parent_class)->focus)
+       return_val = GTK_WIDGET_CLASS (parent_class)->focus (widget,
+                                                             direction);
     }
 
   if (!return_val)
@@ -1039,7 +936,7 @@ gtk_list_focus (GtkContainer     *container,
       GtkList *list;
 
       list =  GTK_LIST (container);
-      if (list->selection_mode == GTK_SELECTION_EXTENDED && list->anchor >= 0)
+      if (list->selection_mode == GTK_SELECTION_MULTIPLE && list->anchor >= 0)
        gtk_list_end_selection (list);
 
       if (container->focus_child)
@@ -1071,14 +968,13 @@ gtk_list_insert_items (GtkList *list,
   GList *last;
   gint nchildren;
 
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   if (!items)
     return;
 
   gtk_list_end_drag_selection (list);
-  if (list->selection_mode == GTK_SELECTION_EXTENDED && list->anchor >= 0)
+  if (list->selection_mode == GTK_SELECTION_MULTIPLE && list->anchor >= 0)
     gtk_list_end_selection (list);
 
   tmp_list = items;
@@ -1088,59 +984,48 @@ gtk_list_insert_items (GtkList *list,
       tmp_list = tmp_list->next;
 
       gtk_widget_set_parent (widget, GTK_WIDGET (list));
-      gtk_signal_connect (GTK_OBJECT (widget), "drag_begin",
-                         GTK_SIGNAL_FUNC (gtk_list_signal_drag_begin),
+      gtk_signal_connect (GTK_OBJECT (widget), "drag-begin",
+                         G_CALLBACK (gtk_list_signal_drag_begin),
                          list);
-      gtk_signal_connect (GTK_OBJECT (widget), "toggle_focus_row",
-                         GTK_SIGNAL_FUNC (gtk_list_signal_toggle_focus_row),
+      gtk_signal_connect (GTK_OBJECT (widget), "toggle-focus-row",
+                         G_CALLBACK (gtk_list_signal_toggle_focus_row),
                          list);
-      gtk_signal_connect (GTK_OBJECT (widget), "select_all",
-                         GTK_SIGNAL_FUNC (gtk_list_signal_select_all),
+      gtk_signal_connect (GTK_OBJECT (widget), "select-all",
+                         G_CALLBACK (gtk_list_signal_select_all),
                          list);
-      gtk_signal_connect (GTK_OBJECT (widget), "unselect_all",
-                         GTK_SIGNAL_FUNC (gtk_list_signal_unselect_all),
+      gtk_signal_connect (GTK_OBJECT (widget), "unselect-all",
+                         G_CALLBACK (gtk_list_signal_unselect_all),
                          list);
-      gtk_signal_connect (GTK_OBJECT (widget), "undo_selection",
-                         GTK_SIGNAL_FUNC (gtk_list_signal_undo_selection),
+      gtk_signal_connect (GTK_OBJECT (widget), "undo-selection",
+                         G_CALLBACK (gtk_list_signal_undo_selection),
                          list);
-      gtk_signal_connect (GTK_OBJECT (widget), "start_selection",
-                         GTK_SIGNAL_FUNC (gtk_list_signal_start_selection),
+      gtk_signal_connect (GTK_OBJECT (widget), "start-selection",
+                         G_CALLBACK (gtk_list_signal_start_selection),
                          list);
-      gtk_signal_connect (GTK_OBJECT (widget), "end_selection",
-                         GTK_SIGNAL_FUNC (gtk_list_signal_end_selection),
+      gtk_signal_connect (GTK_OBJECT (widget), "end-selection",
+                         G_CALLBACK (gtk_list_signal_end_selection),
                          list);
-      gtk_signal_connect (GTK_OBJECT (widget), "extend_selection",
-                         GTK_SIGNAL_FUNC (gtk_list_signal_extend_selection),
+      gtk_signal_connect (GTK_OBJECT (widget), "extend-selection",
+                         G_CALLBACK (gtk_list_signal_extend_selection),
                          list);
-      gtk_signal_connect (GTK_OBJECT (widget), "scroll_horizontal",
-                         GTK_SIGNAL_FUNC (gtk_list_signal_scroll_horizontal),
+      gtk_signal_connect (GTK_OBJECT (widget), "scroll-horizontal",
+                         G_CALLBACK (gtk_list_signal_scroll_horizontal),
                          list);
-      gtk_signal_connect (GTK_OBJECT (widget), "scroll_vertical",
-                         GTK_SIGNAL_FUNC (gtk_list_signal_scroll_vertical),
+      gtk_signal_connect (GTK_OBJECT (widget), "scroll-vertical",
+                         G_CALLBACK (gtk_list_signal_scroll_vertical),
                          list);
-      gtk_signal_connect (GTK_OBJECT (widget), "toggle_add_mode",
-                         GTK_SIGNAL_FUNC (gtk_list_signal_toggle_add_mode),
+      gtk_signal_connect (GTK_OBJECT (widget), "toggle-add-mode",
+                         G_CALLBACK (gtk_list_signal_toggle_add_mode),
                          list);
       gtk_signal_connect (GTK_OBJECT (widget), "select",
-                         GTK_SIGNAL_FUNC (gtk_list_signal_item_select),
+                         G_CALLBACK (gtk_list_signal_item_select),
                          list);
       gtk_signal_connect (GTK_OBJECT (widget), "deselect",
-                         GTK_SIGNAL_FUNC (gtk_list_signal_item_deselect),
+                         G_CALLBACK (gtk_list_signal_item_deselect),
                          list);
       gtk_signal_connect (GTK_OBJECT (widget), "toggle",
-                         GTK_SIGNAL_FUNC (gtk_list_signal_item_toggle),
+                         G_CALLBACK (gtk_list_signal_item_toggle),
                          list);
-
-      if (GTK_WIDGET_REALIZED (widget->parent))
-       gtk_widget_realize (widget);
-
-      if (GTK_WIDGET_VISIBLE (widget->parent) && GTK_WIDGET_VISIBLE (widget))
-       {
-         if (GTK_WIDGET_MAPPED (widget->parent))
-           gtk_widget_map (widget);
-
-         gtk_widget_queue_resize (widget);
-       }
     }
 
 
@@ -1188,7 +1073,6 @@ void
 gtk_list_append_items (GtkList *list,
                       GList   *items)
 {
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   gtk_list_insert_items (list, items, -1);
@@ -1198,7 +1082,6 @@ void
 gtk_list_prepend_items (GtkList *list,
                        GList   *items)
 {
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   gtk_list_insert_items (list, items, 0);
@@ -1232,7 +1115,6 @@ gtk_list_clear_items (GtkList *list,
   guint nchildren;
   gboolean grab_focus = FALSE;
 
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   nchildren = g_list_length (list->children);
@@ -1249,7 +1131,7 @@ gtk_list_clear_items (GtkList *list,
   container = GTK_CONTAINER (list);
 
   gtk_list_end_drag_selection (list);
-  if (list->selection_mode == GTK_SELECTION_EXTENDED)
+  if (list->selection_mode == GTK_SELECTION_MULTIPLE)
     {
       if (list->anchor >= 0)
        gtk_list_end_selection (list);
@@ -1276,9 +1158,9 @@ gtk_list_clear_items (GtkList *list,
          if (start_list->prev)
            new_focus_child = start_list->prev->data;
          else if (list->children)
-           new_focus_child = list->children->prev->data;
+           new_focus_child = list->children->data;
 
-         if (GTK_WIDGET_HAS_FOCUS (container->focus_child))
+         if (gtk_widget_has_focus (container->focus_child))
            grab_focus = TRUE;
        }
     }
@@ -1289,16 +1171,20 @@ gtk_list_clear_items (GtkList *list,
       widget = tmp_list->data;
       tmp_list = tmp_list->next;
 
+      g_object_ref (widget);
+
       if (widget->state == GTK_STATE_SELECTED)
        gtk_list_unselect_child (list, widget);
 
+      gtk_signal_disconnect_by_data (GTK_OBJECT (widget), (gpointer) list);
+      gtk_widget_unparent (widget);
+      
       if (widget == list->undo_focus_child)
        list->undo_focus_child = NULL;
       if (widget == list->last_focus_child)
        list->last_focus_child = NULL;
 
-      gtk_signal_disconnect_by_data (GTK_OBJECT (widget), (gpointer) list);
-      gtk_widget_unparent (widget);
+      g_object_unref (widget);
     }
 
   g_list_free (start_list);
@@ -1311,14 +1197,14 @@ gtk_list_clear_items (GtkList *list,
        gtk_container_set_focus_child (container, new_focus_child);
 
       if ((list->selection_mode == GTK_SELECTION_BROWSE ||
-          list->selection_mode == GTK_SELECTION_EXTENDED) && !list->selection)
+          list->selection_mode == GTK_SELECTION_MULTIPLE) && !list->selection)
        {
          list->last_focus_child = new_focus_child; 
          gtk_list_select_child (list, new_focus_child);
        }
     }
 
-  if (GTK_WIDGET_VISIBLE (list))
+  if (gtk_widget_get_visible (GTK_WIDGET (list)))
     gtk_widget_queue_resize (GTK_WIDGET (list));
 }
 
@@ -1329,7 +1215,6 @@ gtk_list_child_position (GtkList   *list,
   GList *children;
   gint pos;
 
-  g_return_val_if_fail (list != NULL, -1);
   g_return_val_if_fail (GTK_IS_LIST (list), -1);
   g_return_val_if_fail (child != NULL, -1);
 
@@ -1366,7 +1251,6 @@ gtk_list_remove_items_internal (GtkList    *list,
   GList *work;
   gboolean grab_focus = FALSE;
   
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   if (!items)
@@ -1375,7 +1259,7 @@ gtk_list_remove_items_internal (GtkList    *list,
   container = GTK_CONTAINER (list);
 
   gtk_list_end_drag_selection (list);
-  if (list->selection_mode == GTK_SELECTION_EXTENDED)
+  if (list->selection_mode == GTK_SELECTION_MULTIPLE)
     {
       if (list->anchor >= 0)
        gtk_list_end_selection (list);
@@ -1396,7 +1280,7 @@ gtk_list_remove_items_internal (GtkList    *list,
   if (container->focus_child)
     {
       old_focus_child = new_focus_child = container->focus_child;
-      if (GTK_WIDGET_HAS_FOCUS (container->focus_child))
+      if (gtk_widget_has_focus (container->focus_child))
        grab_focus = TRUE;
     }
   else
@@ -1408,8 +1292,9 @@ gtk_list_remove_items_internal (GtkList    *list,
       widget = tmp_list->data;
       tmp_list = tmp_list->next;
 
+      g_object_ref (widget);
       if (no_unref)
-       gtk_widget_ref (widget);
+       g_object_ref (widget);
 
       if (widget == new_focus_child) 
        {
@@ -1426,14 +1311,16 @@ gtk_list_remove_items_internal (GtkList  *list,
            }
        }
 
+      gtk_signal_disconnect_by_data (GTK_OBJECT (widget), (gpointer) list);
+      list->children = g_list_remove (list->children, widget);
+      gtk_widget_unparent (widget);
+
       if (widget == list->undo_focus_child)
        list->undo_focus_child = NULL;
       if (widget == list->last_focus_child)
        list->last_focus_child = NULL;
 
-      gtk_signal_disconnect_by_data (GTK_OBJECT (widget), (gpointer) list);
-      list->children = g_list_remove (list->children, widget);
-      gtk_widget_unparent (widget);
+      g_object_unref (widget);
     }
   
   if (new_focus_child && new_focus_child != old_focus_child)
@@ -1450,7 +1337,7 @@ gtk_list_remove_items_internal (GtkList    *list,
        }
     }
 
-  if (GTK_WIDGET_VISIBLE (list))
+  if (gtk_widget_get_visible (GTK_WIDGET (list)))
     gtk_widget_queue_resize (GTK_WIDGET (list));
 }
 
@@ -1477,7 +1364,6 @@ void
 gtk_list_set_selection_mode (GtkList         *list,
                             GtkSelectionMode  mode)
 {
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   if (list->selection_mode == mode)
@@ -1502,7 +1388,6 @@ gtk_list_select_item (GtkList *list,
 {
   GList *tmp_list;
 
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   tmp_list = g_list_nth (list->children, item);
@@ -1516,7 +1401,6 @@ gtk_list_unselect_item (GtkList *list,
 {
   GList *tmp_list;
 
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   tmp_list = g_list_nth (list->children, item);
@@ -1542,18 +1426,16 @@ void
 gtk_list_select_all (GtkList *list)
 {
   GtkContainer *container;
-  GList *work;
  
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   if (!list->children)
     return;
   
-  if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list))
+  if (list_has_grab (list))
     gtk_list_end_drag_selection (list);
 
-  if (list->selection_mode == GTK_SELECTION_EXTENDED && list->anchor >= 0)
+  if (list->selection_mode == GTK_SELECTION_MULTIPLE && list->anchor >= 0)
     gtk_list_end_selection (list);
 
   container = GTK_CONTAINER (list);
@@ -1567,7 +1449,7 @@ gtk_list_select_all (GtkList *list)
          return;
        }
       break;
-    case GTK_SELECTION_EXTENDED:
+    case GTK_SELECTION_MULTIPLE:
       g_list_free (list->undo_selection);
       g_list_free (list->undo_unselection);
       list->undo_selection = NULL;
@@ -1584,13 +1466,6 @@ gtk_list_select_all (GtkList *list)
       gtk_list_update_extended_selection (list, g_list_length(list->children));
       gtk_list_end_selection (list);
       return;
-    case GTK_SELECTION_MULTIPLE:
-      for (work = list->children; work; work = work->next)
-       {
-         if (GTK_WIDGET_STATE (work->data) == GTK_STATE_NORMAL)
-           gtk_list_select_child (list, GTK_WIDGET (work->data));
-       }
-      return;
     default:
       break;
     }
@@ -1603,16 +1478,15 @@ gtk_list_unselect_all (GtkList *list)
   GtkWidget *item;
   GList *work;
  
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   if (!list->children)
     return;
 
-  if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list))
+  if (list_has_grab (list))
     gtk_list_end_drag_selection (list);
 
-  if (list->selection_mode == GTK_SELECTION_EXTENDED && list->anchor >= 0)
+  if (list->selection_mode == GTK_SELECTION_MULTIPLE && list->anchor >= 0)
     gtk_list_end_selection (list);
 
   container = GTK_CONTAINER (list);
@@ -1626,7 +1500,7 @@ gtk_list_unselect_all (GtkList *list)
          return;
        }
       break;
-    case GTK_SELECTION_EXTENDED:
+    case GTK_SELECTION_MULTIPLE:
       gtk_list_reset_extended_selection (list);
       break;
     default:
@@ -1651,11 +1525,10 @@ gtk_list_extend_selection (GtkList       *list,
 {
   GtkContainer *container;
 
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
-  if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list)) ||
-      list->selection_mode != GTK_SELECTION_EXTENDED)
+  if (list_has_grab (list) ||
+      list->selection_mode != GTK_SELECTION_MULTIPLE)
     return;
 
   container = GTK_CONTAINER (list);
@@ -1679,24 +1552,20 @@ gtk_list_extend_selection (GtkList       *list,
 void
 gtk_list_end_drag_selection (GtkList *list)
 {
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   list->drag_selection = FALSE;
   if (GTK_WIDGET_HAS_GRAB (list))
-    {
-      gtk_grab_remove (GTK_WIDGET (list));
-      if (gdk_pointer_is_grabbed())
-       gdk_pointer_ungrab (GDK_CURRENT_TIME);
-    }
+    gtk_grab_remove (GTK_WIDGET (list));
+
   if (list->htimer)
     {
-      gtk_timeout_remove (list->htimer);
+      g_source_remove (list->htimer);
       list->htimer = 0;
     }
   if (list->vtimer)
     {
-      gtk_timeout_remove (list->vtimer);
+      g_source_remove (list->vtimer);
       list->vtimer = 0;
     }
 }
@@ -1707,10 +1576,9 @@ gtk_list_start_selection (GtkList *list)
   GtkContainer *container;
   gint focus_row;
 
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
-  if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list))
+  if (list_has_grab (list))
     return;
 
   container = GTK_CONTAINER (list);
@@ -1731,11 +1599,9 @@ gtk_list_end_selection (GtkList *list)
   GtkWidget *item;
   gint item_index;
 
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
-  if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list)) ||
-      list->anchor < 0)
+  if (list_has_grab (list) || list->anchor < 0)
     return;
 
   i = MIN (list->anchor, list->drag_pos);
@@ -1826,14 +1692,11 @@ void
 gtk_list_toggle_row (GtkList   *list,
                     GtkWidget *item)
 {
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
-  g_return_if_fail (item != NULL);
   g_return_if_fail (GTK_IS_LIST_ITEM (item));
 
   switch (list->selection_mode)
     {
-    case GTK_SELECTION_EXTENDED:
     case GTK_SELECTION_MULTIPLE:
     case GTK_SELECTION_SINGLE:
       if (item->state == GTK_STATE_SELECTED)
@@ -1858,17 +1721,15 @@ gtk_list_toggle_focus_row (GtkList *list)
 
   container = GTK_CONTAINER (list);
 
-  if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list)) ||
-      !container->focus_child)
+  if (list_has_grab (list) || !container->focus_child)
     return;
 
   switch (list->selection_mode)
     {
     case  GTK_SELECTION_SINGLE:
-    case  GTK_SELECTION_MULTIPLE:
       gtk_list_toggle_row (list, container->focus_child);
       break;
-    case GTK_SELECTION_EXTENDED:
+    case GTK_SELECTION_MULTIPLE:
       if ((focus_row = g_list_index (list->children, container->focus_child))
          < 0)
        return;
@@ -1902,8 +1763,8 @@ gtk_list_toggle_add_mode (GtkList *list)
   g_return_if_fail (list != 0);
   g_return_if_fail (GTK_IS_LIST (list));
   
-  if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list)) ||
-      list->selection_mode != GTK_SELECTION_EXTENDED)
+  if (list_has_grab (list) ||
+      list->selection_mode != GTK_SELECTION_MULTIPLE)
     return;
   
   container = GTK_CONTAINER (list);
@@ -1925,11 +1786,10 @@ gtk_list_undo_selection (GtkList *list)
 {
   GList *work;
 
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
-  if (list->selection_mode != GTK_SELECTION_EXTENDED ||
-      (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list)))
+  if (list->selection_mode != GTK_SELECTION_MULTIPLE ||
+      list_has_grab (list))
     return;
   
   if (list->anchor >= 0)
@@ -1954,7 +1814,7 @@ gtk_list_undo_selection (GtkList *list)
       container = GTK_CONTAINER (list);
 
       if (container->focus_child &&
-         GTK_WIDGET_HAS_FOCUS (container->focus_child))
+         gtk_widget_has_focus (container->focus_child))
        gtk_widget_grab_focus (list->undo_focus_child);
       else
        gtk_container_set_focus_child (container, list->undo_focus_child);
@@ -1978,9 +1838,7 @@ static void
 gtk_real_list_select_child (GtkList   *list,
                            GtkWidget *child)
 {
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
-  g_return_if_fail (child != NULL);
   g_return_if_fail (GTK_IS_LIST_ITEM (child));
 
   switch (child->state)
@@ -1998,9 +1856,7 @@ static void
 gtk_real_list_unselect_child (GtkList  *list,
                              GtkWidget *child)
 {
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
-  g_return_if_fail (child != NULL);
   g_return_if_fail (GTK_IS_LIST_ITEM (child));
 
   if (child->state == GTK_STATE_SELECTED)
@@ -2024,10 +1880,9 @@ gtk_list_set_anchor (GtkList   *list,
 {
   GList *work;
 
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
   
-  if (list->selection_mode != GTK_SELECTION_EXTENDED || list->anchor >= 0)
+  if (list->selection_mode != GTK_SELECTION_MULTIPLE || list->anchor >= 0)
     return;
 
   g_list_free (list->undo_selection);
@@ -2106,7 +1961,7 @@ gtk_list_update_extended_selection (GtkList *list,
   if (row >= length)
     row = length - 1;
 
-  if (list->selection_mode != GTK_SELECTION_EXTENDED || !list->anchor < 0)
+  if (list->selection_mode != GTK_SELECTION_MULTIPLE || !list->anchor < 0)
     return;
 
   /* extending downwards */
@@ -2210,7 +2065,7 @@ gtk_list_scroll_horizontal (GtkList       *list,
   g_return_if_fail (list != 0);
   g_return_if_fail (GTK_IS_LIST (list));
 
-  if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list))
+  if (list_has_grab (list))
     return;
 
   if (!(adj =
@@ -2254,13 +2109,12 @@ gtk_list_scroll_vertical (GtkList       *list,
                          GtkScrollType  scroll_type,
                          gfloat         position)
 {
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
-  if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (list))
+  if (list_has_grab (list))
     return;
 
-  if (list->selection_mode == GTK_SELECTION_EXTENDED)
+  if (list->selection_mode == GTK_SELECTION_MULTIPLE)
     {
       GtkContainer *container;
 
@@ -2434,44 +2288,31 @@ gtk_list_move_focus_child (GtkList       *list,
     }
 }
 
-static gint
-gtk_list_horizontal_timeout (GtkWidget *list)
+static void
+do_fake_motion (GtkWidget *list)
 {
-  GdkEventMotion event;
+  GdkEvent *event = gdk_event_new (GDK_MOTION_NOTIFY);
 
-  memset (&event, 0, sizeof (event));
+  event->motion.send_event = TRUE;
 
-  GDK_THREADS_ENTER ();
+  gtk_list_motion_notify (list, (GdkEventMotion *)event);
+  gdk_event_free (event);
+}
 
+static gint
+gtk_list_horizontal_timeout (GtkWidget *list)
+{
   GTK_LIST (list)->htimer = 0;
-
-  event.type = GDK_MOTION_NOTIFY;
-  event.send_event = TRUE;
-
-  gtk_list_motion_notify (list, &event);
-
-  GDK_THREADS_LEAVE ();
-
+  do_fake_motion (list);
+  
   return FALSE;
 }
 
 static gint
 gtk_list_vertical_timeout (GtkWidget *list)
 {
-  GdkEventMotion event;
-
-  memset (&event, 0, sizeof (event));
-
-  GDK_THREADS_ENTER ();
-
   GTK_LIST (list)->vtimer = 0;
-
-  event.type = GDK_MOTION_NOTIFY;
-  event.send_event = TRUE;
-
-  gtk_list_motion_notify (list, &event);
-
-  GDK_THREADS_LEAVE ();
+  do_fake_motion (list);
 
   return FALSE;
 }
@@ -2497,9 +2338,7 @@ static void
 gtk_list_signal_toggle_focus_row (GtkListItem *list_item,
                                  GtkList     *list)
 {
-  g_return_if_fail (list_item != 0);
   g_return_if_fail (GTK_IS_LIST_ITEM (list_item));
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   gtk_list_toggle_focus_row (list);
@@ -2509,9 +2348,7 @@ static void
 gtk_list_signal_select_all (GtkListItem *list_item,
                            GtkList     *list)
 {
-  g_return_if_fail (list_item != 0);
   g_return_if_fail (GTK_IS_LIST_ITEM (list_item));
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   gtk_list_select_all (list);
@@ -2521,9 +2358,7 @@ static void
 gtk_list_signal_unselect_all (GtkListItem *list_item,
                              GtkList     *list)
 {
-  g_return_if_fail (list_item != 0);
   g_return_if_fail (GTK_IS_LIST_ITEM (list_item));
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   gtk_list_unselect_all (list);
@@ -2533,9 +2368,7 @@ static void
 gtk_list_signal_undo_selection (GtkListItem *list_item,
                                GtkList     *list)
 {
-  g_return_if_fail (list_item != 0);
   g_return_if_fail (GTK_IS_LIST_ITEM (list_item));
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   gtk_list_undo_selection (list);
@@ -2545,9 +2378,7 @@ static void
 gtk_list_signal_start_selection (GtkListItem *list_item,
                                 GtkList     *list)
 {
-  g_return_if_fail (list_item != 0);
   g_return_if_fail (GTK_IS_LIST_ITEM (list_item));
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   gtk_list_start_selection (list);
@@ -2557,9 +2388,7 @@ static void
 gtk_list_signal_end_selection (GtkListItem *list_item,
                               GtkList     *list)
 {
-  g_return_if_fail (list_item != 0);
   g_return_if_fail (GTK_IS_LIST_ITEM (list_item));
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   gtk_list_end_selection (list);
@@ -2572,9 +2401,7 @@ gtk_list_signal_extend_selection (GtkListItem   *list_item,
                                  gboolean       auto_start_selection,
                                  GtkList       *list)
 {
-  g_return_if_fail (list_item != 0);
   g_return_if_fail (GTK_IS_LIST_ITEM (list_item));
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   gtk_list_extend_selection (list, scroll_type, position,
@@ -2587,9 +2414,7 @@ gtk_list_signal_scroll_horizontal (GtkListItem   *list_item,
                                   gfloat         position,
                                   GtkList       *list)
 {
-  g_return_if_fail (list_item != 0);
   g_return_if_fail (GTK_IS_LIST_ITEM (list_item));
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   gtk_list_scroll_horizontal (list, scroll_type, position);
@@ -2601,9 +2426,7 @@ gtk_list_signal_scroll_vertical (GtkListItem   *list_item,
                                 gfloat         position,
                                 GtkList       *list)
 {
-  g_return_if_fail (list_item != 0);
   g_return_if_fail (GTK_IS_LIST_ITEM (list_item));
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   gtk_list_scroll_vertical (list, scroll_type, position);
@@ -2613,9 +2436,7 @@ static void
 gtk_list_signal_toggle_add_mode (GtkListItem *list_item,
                                 GtkList     *list)
 {
-  g_return_if_fail (list_item != 0);
   g_return_if_fail (GTK_IS_LIST_ITEM (list_item));
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   gtk_list_toggle_add_mode (list);
@@ -2629,9 +2450,7 @@ gtk_list_signal_item_select (GtkListItem *list_item,
   GList *tmp_list;
   GList *sel_list;
 
-  g_return_if_fail (list_item != 0);
   g_return_if_fail (GTK_IS_LIST_ITEM (list_item));
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   if (GTK_WIDGET (list_item)->state != GTK_STATE_SELECTED)
@@ -2658,21 +2477,13 @@ gtk_list_signal_item_select (GtkListItem *list_item,
       if (!sel_list)
        {
          list->selection = g_list_prepend (list->selection, list_item);
-         gtk_widget_ref (GTK_WIDGET (list_item));
+         g_object_ref (list_item);
        }
       gtk_signal_emit (GTK_OBJECT (list), list_signals[SELECTION_CHANGED]);
       break;
-    case GTK_SELECTION_EXTENDED:
+    case GTK_SELECTION_MULTIPLE:
       if (list->anchor >= 0)
        return;
-    case GTK_SELECTION_MULTIPLE:
-      if (!g_list_find (list->selection, list_item))
-       {
-         list->selection = g_list_prepend (list->selection, list_item);
-         gtk_widget_ref (GTK_WIDGET (list_item));
-         gtk_signal_emit (GTK_OBJECT (list), list_signals[SELECTION_CHANGED]);
-       }
-      break;
     }
 }
 
@@ -2682,9 +2493,7 @@ gtk_list_signal_item_deselect (GtkListItem *list_item,
 {
   GList *node;
 
-  g_return_if_fail (list_item != 0);
   g_return_if_fail (GTK_IS_LIST_ITEM (list_item));
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   if (GTK_WIDGET (list_item)->state != GTK_STATE_NORMAL)
@@ -2696,7 +2505,7 @@ gtk_list_signal_item_deselect (GtkListItem *list_item,
     {
       list->selection = g_list_remove_link (list->selection, node);
       g_list_free_1 (node);
-      gtk_widget_unref (GTK_WIDGET (list_item));
+      g_object_unref (list_item);
       gtk_signal_emit (GTK_OBJECT (list), list_signals[SELECTION_CHANGED]);
     }
 }
@@ -2705,13 +2514,11 @@ static void
 gtk_list_signal_item_toggle (GtkListItem *list_item,
                             GtkList     *list)
 {
-  g_return_if_fail (list_item != 0);
   g_return_if_fail (GTK_IS_LIST_ITEM (list_item));
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   if ((list->selection_mode == GTK_SELECTION_BROWSE ||
-       list->selection_mode == GTK_SELECTION_EXTENDED) &&
+       list->selection_mode == GTK_SELECTION_MULTIPLE) &&
       GTK_WIDGET (list_item)->state == GTK_STATE_NORMAL)
     {
       gtk_widget_set_state (GTK_WIDGET (list_item), GTK_STATE_SELECTED);
@@ -2736,9 +2543,7 @@ gtk_list_signal_drag_begin (GtkWidget      *widget,
                            GdkDragContext *context,
                            GtkList         *list)
 {
-  g_return_if_fail (widget != NULL);
   g_return_if_fail (GTK_IS_LIST_ITEM (widget));
-  g_return_if_fail (list != NULL);
   g_return_if_fail (GTK_IS_LIST (list));
 
   gtk_list_drag_begin (GTK_WIDGET (list), context);
@@ -2750,7 +2555,6 @@ gtk_list_drag_begin (GtkWidget      *widget,
 {
   GtkList *list;
 
-  g_return_if_fail (widget != NULL);
   g_return_if_fail (GTK_IS_LIST (widget));
   g_return_if_fail (context != NULL);
 
@@ -2762,11 +2566,10 @@ gtk_list_drag_begin (GtkWidget      *widget,
 
       switch (list->selection_mode)
        {
-       case GTK_SELECTION_EXTENDED:
+       case GTK_SELECTION_MULTIPLE:
          gtk_list_end_selection (list);
          break;
        case GTK_SELECTION_SINGLE:
-       case GTK_SELECTION_MULTIPLE:
          list->undo_focus_child = NULL;
          break;
        default:
@@ -2774,3 +2577,5 @@ gtk_list_drag_begin (GtkWidget      *widget,
        }
     }
 }
+
+#include "gtkaliasdef.c"