]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkwidget.c
Deprecate widget flag: GTK_WIDGET_MAPPED
[~andy/gtk] / gtk / gtkwidget.c
index 585740dcb0a372e49a5f10e7eb3c4512a674a9d9..4e4cbd73d0fb2b0b56737d57a61c921ba65058a3 100644 (file)
@@ -901,7 +901,10 @@ gtk_widget_class_init (GtkWidgetClass *klass)
   /**
    * GtkWidget::state-changed:
    * @widget: the object which received the signal.
-   * @state:
+   * @state: the previous state
+   *
+   * The ::state-changed signal is emitted when the widget state changes.
+   * See gtk_widget_get_state().
    */
   widget_signals[STATE_CHANGED] =
     g_signal_new (I_("state-changed"),
@@ -916,7 +919,7 @@ gtk_widget_class_init (GtkWidgetClass *klass)
   /**
    * GtkWidget::parent-set:
    * @widget: the object on which the signal is emitted
-   * @old_parent: the previous parent, or %NULL if the widget 
+   * @old_parent: (allow-none): the previous parent, or %NULL if the widget
    *   just got its initial parent.
    *
    * The ::parent-set signal is emitted when a new parent 
@@ -935,7 +938,7 @@ gtk_widget_class_init (GtkWidgetClass *klass)
   /**
    * GtkWidget::hierarchy-changed:
    * @widget: the object on which the signal is emitted
-   * @previous_toplevel: the previous toplevel ancestor, or %NULL
+   * @previous_toplevel: (allow-none): the previous toplevel ancestor, or %NULL
    *   if the widget was previously unanchored
    *
    * The ::hierarchy-changed signal is emitted when the
@@ -957,7 +960,7 @@ gtk_widget_class_init (GtkWidgetClass *klass)
   /**
    * GtkWidget::style-set:
    * @widget: the object on which the signal is emitted
-   * @previous_style: the previous style, or %NULL if the widget 
+   * @previous_style: (allow-none): the previous style, or %NULL if the widget
    *   just got its initial style 
    *
    * The ::style-set signal is emitted when a new style has been set 
@@ -2348,7 +2351,7 @@ gtk_widget_class_init (GtkWidgetClass *klass)
   /**
    * GtkWidget::screen-changed:
    * @widget: the object on which the signal is emitted
-   * @previous_screen: the previous screen, or %NULL if the
+   * @previous_screen: (allow-none): the previous screen, or %NULL if the
    *   widget was not associated with a screen before
    *
    * The ::screen-changed signal gets emitted when the
@@ -2650,7 +2653,7 @@ gtk_widget_set_property (GObject         *object,
       gtk_widget_set_style (widget, g_value_get_object (value));
       break;
     case PROP_EVENTS:
-      if (!GTK_WIDGET_REALIZED (widget) && !GTK_WIDGET_NO_WINDOW (widget))
+      if (!GTK_WIDGET_REALIZED (widget) && gtk_widget_get_has_window (widget))
        gtk_widget_set_events (widget, g_value_get_flags (value));
       break;
     case PROP_EXTENSION_EVENTS:
@@ -2681,7 +2684,7 @@ gtk_widget_set_property (GObject         *object,
 
       tmp = (tooltip_window != NULL || tooltip_markup != NULL);
       gtk_widget_real_set_has_tooltip (widget, tmp, FALSE);
-      if (GTK_WIDGET_VISIBLE (widget))
+      if (gtk_widget_get_visible (widget))
         gtk_widget_queue_tooltip_query (widget);
       break;
     case PROP_TOOLTIP_TEXT:
@@ -2702,7 +2705,7 @@ gtk_widget_set_property (GObject         *object,
 
       tmp = (tooltip_window != NULL || tooltip_markup != NULL);
       gtk_widget_real_set_has_tooltip (widget, tmp, FALSE);
-      if (GTK_WIDGET_VISIBLE (widget))
+      if (gtk_widget_get_visible (widget))
         gtk_widget_queue_tooltip_query (widget);
       break;
     case PROP_DOUBLE_BUFFERED:
@@ -2751,34 +2754,34 @@ gtk_widget_get_property (GObject         *object,
       }
       break;
     case PROP_VISIBLE:
-      g_value_set_boolean (value, (GTK_WIDGET_VISIBLE (widget) != FALSE));
+      g_value_set_boolean (value, (gtk_widget_get_visible (widget) != FALSE));
       break;
     case PROP_SENSITIVE:
-      g_value_set_boolean (value, (GTK_WIDGET_SENSITIVE (widget) != FALSE));
+      g_value_set_boolean (value, (gtk_widget_get_sensitive (widget) != FALSE));
       break;
     case PROP_APP_PAINTABLE:
-      g_value_set_boolean (value, (GTK_WIDGET_APP_PAINTABLE (widget) != FALSE));
+      g_value_set_boolean (value, (gtk_widget_get_app_paintable (widget) != FALSE));
       break;
     case PROP_CAN_FOCUS:
-      g_value_set_boolean (value, (GTK_WIDGET_CAN_FOCUS (widget) != FALSE));
+      g_value_set_boolean (value, (gtk_widget_get_can_focus (widget) != FALSE));
       break;
     case PROP_HAS_FOCUS:
-      g_value_set_boolean (value, (GTK_WIDGET_HAS_FOCUS (widget) != FALSE));
+      g_value_set_boolean (value, (gtk_widget_has_focus (widget) != FALSE));
       break;
     case PROP_IS_FOCUS:
       g_value_set_boolean (value, (gtk_widget_is_focus (widget)));
       break;
     case PROP_CAN_DEFAULT:
-      g_value_set_boolean (value, (GTK_WIDGET_CAN_DEFAULT (widget) != FALSE));
+      g_value_set_boolean (value, (gtk_widget_get_can_default (widget) != FALSE));
       break;
     case PROP_HAS_DEFAULT:
-      g_value_set_boolean (value, (GTK_WIDGET_HAS_DEFAULT (widget) != FALSE));
+      g_value_set_boolean (value, (gtk_widget_has_default (widget) != FALSE));
       break;
     case PROP_RECEIVES_DEFAULT:
-      g_value_set_boolean (value, (GTK_WIDGET_RECEIVES_DEFAULT (widget) != FALSE));
+      g_value_set_boolean (value, (gtk_widget_get_receives_default (widget) != FALSE));
       break;
     case PROP_COMPOSITE_CHILD:
-      g_value_set_boolean (value, (GTK_WIDGET_COMPOSITE_CHILD (widget) != FALSE));
+      g_value_set_boolean (value, (GTK_WIDGET_FLAGS (widget) & GTK_COMPOSITE_CHILD) != 0 );
       break;
     case PROP_STYLE:
       g_value_set_object (value, gtk_widget_get_style (widget));
@@ -3026,7 +3029,7 @@ gtk_widget_queue_draw_child (GtkWidget *widget)
   GtkWidget *parent;
 
   parent = widget->parent;
-  if (parent && GTK_WIDGET_DRAWABLE (parent))
+  if (parent && gtk_widget_is_drawable (parent))
     gtk_widget_queue_draw_area (parent,
                                widget->allocation.x,
                                widget->allocation.y,
@@ -3060,7 +3063,7 @@ gtk_widget_unparent (GtkWidget *widget)
   nqueue = g_object_notify_queue_freeze (G_OBJECT (widget), _gtk_widget_child_property_notify_context);
 
   toplevel = gtk_widget_get_toplevel (widget);
-  if (GTK_WIDGET_TOPLEVEL (toplevel))
+  if (gtk_widget_is_toplevel (toplevel))
     _gtk_window_unset_focus_and_default (GTK_WINDOW (toplevel), widget);
 
   if (GTK_CONTAINER (widget->parent)->focus_child == widget)
@@ -3189,10 +3192,10 @@ gtk_widget_show (GtkWidget *widget)
 {
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
-  if (!GTK_WIDGET_VISIBLE (widget))
+  if (!gtk_widget_get_visible (widget))
     {
       g_object_ref (widget);
-      if (!GTK_WIDGET_TOPLEVEL (widget))
+      if (!gtk_widget_is_toplevel (widget))
        gtk_widget_queue_resize (widget);
       g_signal_emit (widget, widget_signals[SHOW], 0);
       g_object_notify (G_OBJECT (widget), "visible");
@@ -3203,14 +3206,14 @@ gtk_widget_show (GtkWidget *widget)
 static void
 gtk_widget_real_show (GtkWidget *widget)
 {
-  if (!GTK_WIDGET_VISIBLE (widget))
+  if (!gtk_widget_get_visible (widget))
     {
       GTK_WIDGET_SET_FLAGS (widget, GTK_VISIBLE);
 
       if (widget->parent &&
-         GTK_WIDGET_MAPPED (widget->parent) &&
+         gtk_widget_get_mapped (widget->parent) &&
          GTK_WIDGET_CHILD_VISIBLE (widget) &&
-         !GTK_WIDGET_MAPPED (widget))
+         !gtk_widget_get_mapped (widget))
        gtk_widget_map (widget);
     }
 }
@@ -3242,8 +3245,8 @@ gtk_widget_show_now (GtkWidget *widget)
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
   /* make sure we will get event */
-  if (!GTK_WIDGET_MAPPED (widget) &&
-      GTK_WIDGET_TOPLEVEL (widget))
+  if (!gtk_widget_get_mapped (widget) &&
+      gtk_widget_is_toplevel (widget))
     {
       gtk_widget_show (widget);
 
@@ -3270,16 +3273,16 @@ gtk_widget_hide (GtkWidget *widget)
 {
   g_return_if_fail (GTK_IS_WIDGET (widget));
   
-  if (GTK_WIDGET_VISIBLE (widget))
+  if (gtk_widget_get_visible (widget))
     {
       GtkWidget *toplevel = gtk_widget_get_toplevel (widget);
       
       g_object_ref (widget);
-      if (toplevel != widget && GTK_WIDGET_TOPLEVEL (toplevel))
+      if (toplevel != widget && gtk_widget_is_toplevel (toplevel))
        _gtk_window_unset_focus_and_default (GTK_WINDOW (toplevel), widget);
 
       g_signal_emit (widget, widget_signals[HIDE], 0);
-      if (!GTK_WIDGET_TOPLEVEL (widget))
+      if (!gtk_widget_is_toplevel (widget))
        gtk_widget_queue_resize (widget);
       g_object_notify (G_OBJECT (widget), "visible");
       g_object_unref (widget);
@@ -3289,11 +3292,11 @@ gtk_widget_hide (GtkWidget *widget)
 static void
 gtk_widget_real_hide (GtkWidget *widget)
 {
-  if (GTK_WIDGET_VISIBLE (widget))
+  if (gtk_widget_get_visible (widget))
     {
       GTK_WIDGET_UNSET_FLAGS (widget, GTK_VISIBLE);
       
-      if (GTK_WIDGET_MAPPED (widget))
+      if (gtk_widget_get_mapped (widget))
        gtk_widget_unmap (widget);
     }
 }
@@ -3336,7 +3339,7 @@ gtk_widget_show_all (GtkWidget *widget)
 
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
-  if ((GTK_WIDGET_FLAGS (widget) & GTK_NO_SHOW_ALL) != 0)
+  if (gtk_widget_get_no_show_all (widget))
     return;
 
   class = GTK_WIDGET_GET_CLASS (widget);
@@ -3358,7 +3361,7 @@ gtk_widget_hide_all (GtkWidget *widget)
 
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
-  if ((GTK_WIDGET_FLAGS (widget) & GTK_NO_SHOW_ALL) != 0)
+  if (gtk_widget_get_no_show_all (widget))
     return;
 
   class = GTK_WIDGET_GET_CLASS (widget);
@@ -3378,17 +3381,17 @@ void
 gtk_widget_map (GtkWidget *widget)
 {
   g_return_if_fail (GTK_IS_WIDGET (widget));
-  g_return_if_fail (GTK_WIDGET_VISIBLE (widget));
+  g_return_if_fail (gtk_widget_get_visible (widget));
   g_return_if_fail (GTK_WIDGET_CHILD_VISIBLE (widget));
   
-  if (!GTK_WIDGET_MAPPED (widget))
+  if (!gtk_widget_get_mapped (widget))
     {
       if (!GTK_WIDGET_REALIZED (widget))
        gtk_widget_realize (widget);
 
       g_signal_emit (widget, widget_signals[MAP], 0);
 
-      if (GTK_WIDGET_NO_WINDOW (widget))
+      if (!gtk_widget_get_has_window (widget))
        gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE);
     }
 }
@@ -3405,9 +3408,9 @@ gtk_widget_unmap (GtkWidget *widget)
 {
   g_return_if_fail (GTK_IS_WIDGET (widget));
   
-  if (GTK_WIDGET_MAPPED (widget))
+  if (gtk_widget_get_mapped (widget))
     {
-      if (GTK_WIDGET_NO_WINDOW (widget))
+      if (!gtk_widget_get_has_window (widget))
        gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE);
       _gtk_tooltip_hide (widget);
       g_signal_emit (widget, widget_signals[UNMAP], 0);
@@ -3424,7 +3427,7 @@ gtk_widget_set_extension_events_internal (GtkWidget        *widget,
 
   if (window_list == NULL)
     {
-      if (!GTK_WIDGET_NO_WINDOW (widget))
+      if (gtk_widget_get_has_window (widget))
         window_list = g_list_prepend (NULL, widget->window);
       else
         window_list = gdk_window_get_children (widget->window);
@@ -3495,12 +3498,12 @@ gtk_widget_realize (GtkWidget *widget)
   if (!GTK_WIDGET_REALIZED (widget))
     {
       /*
-       if (GTK_IS_CONTAINER (widget) && !GTK_WIDGET_NO_WINDOW (widget))
-         g_message ("gtk_widget_realize(%s)", g_type_name (GTK_WIDGET_TYPE (widget)));
+       if (GTK_IS_CONTAINER (widget) && gtk_widget_get_has_window (widget))
+         g_message ("gtk_widget_realize(%s)", G_OBJECT_TYPE_NAME (widget));
       */
 
       if (widget->parent == NULL &&
-          !GTK_WIDGET_TOPLEVEL (widget))
+          !gtk_widget_is_toplevel (widget))
         g_warning ("Calling gtk_widget_realize() on a widget that isn't "
                    "inside a toplevel window is not going to work very well. "
                    "Widgets must be inside a toplevel container before realizing them.");
@@ -3617,12 +3620,12 @@ gtk_widget_queue_draw_area (GtkWidget *widget,
   
   /* Just return if the widget or one of its ancestors isn't mapped */
   for (w = widget; w != NULL; w = w->parent)
-    if (!GTK_WIDGET_MAPPED (w))
+    if (!gtk_widget_get_mapped (w))
       return;
 
   /* Find the correct widget */
 
-  if (!GTK_WIDGET_NO_WINDOW (widget))
+  if (gtk_widget_get_has_window (widget))
     {
       if (widget->parent)
        {
@@ -3669,7 +3672,7 @@ widget_add_child_draw_rectangle (GtkWidget    *widget,
 {
   GdkRectangle child_rect;
   
-  if (!GTK_WIDGET_MAPPED (widget) ||
+  if (!gtk_widget_get_mapped (widget) ||
       widget->window != widget->parent->window)
     return;
 
@@ -3681,7 +3684,7 @@ static void
 gtk_widget_get_draw_rectangle (GtkWidget    *widget,
                               GdkRectangle *rect)
 {
-  if (GTK_WIDGET_NO_WINDOW (widget))
+  if (!gtk_widget_get_has_window (widget))
     {
       GtkBorder *draw_border = NULL;
 
@@ -3842,7 +3845,7 @@ gtk_widget_draw (GtkWidget          *widget,
 {
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
-  if (GTK_WIDGET_DRAWABLE (widget))
+  if (gtk_widget_is_drawable (widget))
     {
       if (area)
         gtk_widget_queue_draw_area (widget,
@@ -3944,7 +3947,7 @@ gtk_widget_invalidate_widget_windows (GtkWidget *widget,
   if (!GTK_WIDGET_REALIZED (widget))
     return;
   
-  if (!GTK_WIDGET_NO_WINDOW (widget) && widget->parent)
+  if (gtk_widget_get_has_window (widget) && widget->parent)
     {
       int x, y;
       
@@ -3978,7 +3981,7 @@ gtk_widget_queue_shallow_draw (GtkWidget *widget)
    * need to convert to the coordinates that widget->allocation
    * is in.
    */
-  if (!GTK_WIDGET_NO_WINDOW (widget) && widget->parent)
+  if (gtk_widget_get_has_window (widget) && widget->parent)
     {
       int wx, wy;
       
@@ -4072,9 +4075,9 @@ gtk_widget_size_allocate (GtkWidget       *widget,
   
   g_signal_emit (widget, widget_signals[SIZE_ALLOCATE], 0, &real_allocation);
 
-  if (GTK_WIDGET_MAPPED (widget))
+  if (gtk_widget_get_mapped (widget))
     {
-      if (GTK_WIDGET_NO_WINDOW (widget) && GTK_WIDGET_REDRAW_ON_ALLOC (widget) && position_changed)
+      if (!gtk_widget_get_has_window (widget) && GTK_WIDGET_REDRAW_ON_ALLOC (widget) && position_changed)
        {
          /* Invalidate union(old_allaction,widget->allocation) in widget->window
           */
@@ -4205,7 +4208,7 @@ gtk_widget_translate_coordinates (GtkWidget  *src_widget,
     return FALSE;
 
   /* Translate from allocation relative to window relative */
-  if (!GTK_WIDGET_NO_WINDOW (src_widget) && src_widget->parent)
+  if (gtk_widget_get_has_window (src_widget) && src_widget->parent)
     {
       gint wx, wy;
       gdk_window_get_position (src_widget->window, &wx, &wy);
@@ -4254,7 +4257,7 @@ gtk_widget_translate_coordinates (GtkWidget  *src_widget,
     }
 
   /* Translate from window relative to allocation relative */
-  if (!GTK_WIDGET_NO_WINDOW (dest_widget) && dest_widget->parent)
+  if (gtk_widget_get_has_window (dest_widget) && dest_widget->parent)
     {
       gint wx, wy;
       gdk_window_get_position (dest_widget->window, &wx, &wy);
@@ -4283,7 +4286,7 @@ gtk_widget_real_size_allocate (GtkWidget     *widget,
   widget->allocation = *allocation;
   
   if (GTK_WIDGET_REALIZED (widget) &&
-      !GTK_WIDGET_NO_WINDOW (widget))
+      gtk_widget_get_has_window (widget))
      {
        gdk_window_move_resize (widget->window,
                                allocation->x, allocation->y,
@@ -4296,7 +4299,9 @@ gtk_widget_real_can_activate_accel (GtkWidget *widget,
                                     guint      signal_id)
 {
   /* widgets must be onscreen for accels to take effect */
-  return GTK_WIDGET_IS_SENSITIVE (widget) && GTK_WIDGET_DRAWABLE (widget) && gdk_window_is_viewable (widget->window);
+  return gtk_widget_is_sensitive (widget) &&
+         gtk_widget_is_drawable (widget) &&
+         gdk_window_is_viewable (widget->window);
 }
 
 /**
@@ -4652,7 +4657,7 @@ gtk_widget_mnemonic_activate (GtkWidget *widget,
   g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
 
   group_cycling = group_cycling != FALSE;
-  if (!GTK_WIDGET_IS_SENSITIVE (widget))
+  if (!gtk_widget_is_sensitive (widget))
     handled = TRUE;
   else
     g_signal_emit (widget,
@@ -4669,7 +4674,7 @@ gtk_widget_real_mnemonic_activate (GtkWidget *widget,
 {
   if (!group_cycling && GTK_WIDGET_GET_CLASS (widget)->activate_signal)
     gtk_widget_activate (widget);
-  else if (GTK_WIDGET_CAN_FOCUS (widget))
+  else if (gtk_widget_get_can_focus (widget))
     gtk_widget_grab_focus (widget);
   else
     {
@@ -5043,7 +5048,7 @@ static void
 gtk_widget_reparent_subwindows (GtkWidget *widget,
                                GdkWindow *new_window)
 {
-  if (GTK_WIDGET_NO_WINDOW (widget))
+  if (!gtk_widget_get_has_window (widget))
     {
       GList *children = gdk_window_get_children (widget->window);
       GList *tmp_list;
@@ -5098,7 +5103,7 @@ gtk_widget_reparent_fixup_child (GtkWidget *widget,
 {
   g_assert (client_data != NULL);
   
-  if (GTK_WIDGET_NO_WINDOW (widget))
+  if (!gtk_widget_get_has_window (widget))
     {
       if (widget->window)
        g_object_unref (widget->window);
@@ -5188,7 +5193,7 @@ gtk_widget_intersect (GtkWidget            *widget,
   
   return_val = gdk_rectangle_intersect (&widget->allocation, area, dest);
   
-  if (return_val && intersection && !GTK_WIDGET_NO_WINDOW (widget))
+  if (return_val && intersection && gtk_widget_get_has_window (widget))
     {
       intersection->x -= widget->allocation.x;
       intersection->y -= widget->allocation.y;
@@ -5265,7 +5270,7 @@ gtk_widget_grab_focus (GtkWidget *widget)
 {
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
-  if (!GTK_WIDGET_IS_SENSITIVE (widget))
+  if (!gtk_widget_is_sensitive (widget))
     return;
   
   g_object_ref (widget);
@@ -5294,7 +5299,7 @@ reset_focus_recurse (GtkWidget *widget,
 static void
 gtk_widget_real_grab_focus (GtkWidget *focus_widget)
 {
-  if (GTK_WIDGET_CAN_FOCUS (focus_widget))
+  if (gtk_widget_get_can_focus (focus_widget))
     {
       GtkWidget *toplevel;
       GtkWidget *widget;
@@ -5304,7 +5309,7 @@ gtk_widget_real_grab_focus (GtkWidget *focus_widget)
        * be set by the next loop.
        */
       toplevel = gtk_widget_get_toplevel (focus_widget);
-      if (GTK_WIDGET_TOPLEVEL (toplevel) && GTK_IS_WINDOW (toplevel))
+      if (gtk_widget_is_toplevel (toplevel) && GTK_IS_WINDOW (toplevel))
        {
          widget = GTK_WINDOW (toplevel)->focus_widget;
          
@@ -5314,7 +5319,7 @@ gtk_widget_real_grab_focus (GtkWidget *focus_widget)
               * toplevel window can request the focus if necessary.
               * This is needed when the toplevel is a GtkPlug
               */
-             if (!GTK_WIDGET_HAS_FOCUS (widget))
+             if (!gtk_widget_has_focus (widget))
                _gtk_window_internal_set_focus (GTK_WINDOW (toplevel), focus_widget);
 
              return;
@@ -5394,7 +5399,7 @@ static gboolean
 gtk_widget_real_focus (GtkWidget         *widget,
                        GtkDirectionType   direction)
 {
-  if (!GTK_WIDGET_CAN_FOCUS (widget))
+  if (!gtk_widget_get_can_focus (widget))
     return FALSE;
   
   if (!gtk_widget_is_focus (widget))
@@ -5466,12 +5471,12 @@ gtk_widget_set_can_focus (GtkWidget *widget,
 {
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
-  if (can_focus != GTK_WIDGET_CAN_FOCUS (widget))
+  if (can_focus != gtk_widget_get_can_focus (widget))
     {
       if (can_focus)
-        GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_FOCUS);
+        GTK_OBJECT_FLAGS (widget) |= GTK_CAN_FOCUS;
       else
-        GTK_WIDGET_UNSET_FLAGS (widget, GTK_CAN_FOCUS);
+        GTK_OBJECT_FLAGS (widget) &= ~(GTK_CAN_FOCUS);
 
       gtk_widget_queue_resize (widget);
       g_object_notify (G_OBJECT (widget), "can-focus");
@@ -5494,7 +5499,7 @@ gtk_widget_get_can_focus (GtkWidget *widget)
 {
   g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
 
-  return GTK_WIDGET_CAN_FOCUS (widget);
+  return (GTK_WIDGET_FLAGS (widget) & GTK_CAN_FOCUS) != 0;
 }
 
 /**
@@ -5514,7 +5519,7 @@ gtk_widget_has_focus (GtkWidget *widget)
 {
   g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
 
-  return GTK_WIDGET_HAS_FOCUS (widget);
+  return (GTK_OBJECT_FLAGS (widget) & GTK_HAS_FOCUS) != 0;
 }
 
 /**
@@ -5560,12 +5565,12 @@ gtk_widget_set_can_default (GtkWidget *widget,
 {
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
-  if (can_default != GTK_WIDGET_CAN_DEFAULT (widget))
+  if (can_default != gtk_widget_get_can_default (widget))
     {
       if (can_default)
-        GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_DEFAULT);
+        GTK_OBJECT_FLAGS (widget) |= GTK_CAN_DEFAULT;
       else
-        GTK_WIDGET_UNSET_FLAGS (widget, GTK_CAN_DEFAULT);
+        GTK_OBJECT_FLAGS (widget) &= ~(GTK_CAN_DEFAULT);
 
       gtk_widget_queue_resize (widget);
       g_object_notify (G_OBJECT (widget), "can-default");
@@ -5588,7 +5593,7 @@ gtk_widget_get_can_default (GtkWidget *widget)
 {
   g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
 
-  return GTK_WIDGET_CAN_DEFAULT (widget);
+  return (GTK_WIDGET_FLAGS (widget) & GTK_CAN_DEFAULT) != 0;
 }
 
 /**
@@ -5608,7 +5613,7 @@ gtk_widget_has_default (GtkWidget *widget)
 {
   g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
 
-  return GTK_WIDGET_HAS_DEFAULT (widget);
+  return (GTK_WIDGET_FLAGS (widget) & GTK_HAS_DEFAULT) != 0;
 }
 
 /**
@@ -5628,11 +5633,11 @@ gtk_widget_grab_default (GtkWidget *widget)
   GtkWidget *window;
   
   g_return_if_fail (GTK_IS_WIDGET (widget));
-  g_return_if_fail (GTK_WIDGET_CAN_DEFAULT (widget));
+  g_return_if_fail (gtk_widget_get_can_default (widget));
   
   window = gtk_widget_get_toplevel (widget);
   
-  if (window && GTK_WIDGET_TOPLEVEL (window))
+  if (window && gtk_widget_is_toplevel (window))
     gtk_window_set_default (GTK_WINDOW (window), widget);
   else
     g_warning (G_STRLOC ": widget not within a GtkWindow");
@@ -5661,9 +5666,9 @@ gtk_widget_set_receives_default (GtkWidget *widget,
   if (receives_default != gtk_widget_get_receives_default (widget))
     {
       if (receives_default)
-        GTK_WIDGET_SET_FLAGS (widget, GTK_RECEIVES_DEFAULT);
+        GTK_OBJECT_FLAGS (widget) |= GTK_RECEIVES_DEFAULT;
       else
-        GTK_WIDGET_UNSET_FLAGS (widget, GTK_RECEIVES_DEFAULT);
+        GTK_OBJECT_FLAGS (widget) &= ~(GTK_RECEIVES_DEFAULT);
 
       g_object_notify (G_OBJECT (widget), "receives-default");
     }
@@ -5738,7 +5743,7 @@ gtk_widget_set_name (GtkWidget     *widget,
   g_free (widget->name);
   widget->name = new_name;
 
-  if (GTK_WIDGET_RC_STYLE (widget))
+  if (gtk_widget_has_rc_style (widget))
     gtk_widget_reset_rc_style (widget);
 
   g_object_notify (G_OBJECT (widget), "name");
@@ -5761,7 +5766,7 @@ gtk_widget_get_name (GtkWidget *widget)
   
   if (widget->name)
     return widget->name;
-  return g_type_name (GTK_WIDGET_TYPE (widget));
+  return G_OBJECT_TYPE_NAME (widget);
 }
 
 /**
@@ -5792,13 +5797,13 @@ gtk_widget_set_state (GtkWidget           *widget,
       data.state_restoration = FALSE;
       data.use_forall = FALSE;
       if (widget->parent)
-       data.parent_sensitive = (GTK_WIDGET_IS_SENSITIVE (widget->parent) != FALSE);
+       data.parent_sensitive = (gtk_widget_is_sensitive (widget->parent) != FALSE);
       else
        data.parent_sensitive = TRUE;
 
       gtk_widget_propagate_state (widget, &data);
   
-      if (GTK_WIDGET_DRAWABLE (widget))
+      if (gtk_widget_is_drawable (widget))
        gtk_widget_queue_draw (widget);
     }
 }
@@ -5842,7 +5847,7 @@ gtk_widget_set_visible (GtkWidget *widget,
 {
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
-  if (visible != GTK_WIDGET_VISIBLE (widget))
+  if (visible != gtk_widget_get_visible (widget))
     {
       if (visible)
         gtk_widget_show (widget);
@@ -5870,7 +5875,7 @@ gtk_widget_get_visible (GtkWidget *widget)
 {
   g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
 
-  return (GTK_WIDGET_FLAGS (widget) & GTK_VISIBLE) != 0;
+  return (GTK_OBJECT_FLAGS (widget) & GTK_VISIBLE) != 0;
 }
 
 /**
@@ -5919,7 +5924,7 @@ gtk_widget_get_has_window (GtkWidget *widget)
 {
   g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
 
-  return !GTK_WIDGET_NO_WINDOW (widget);
+  return !((GTK_OBJECT_FLAGS (widget) & GTK_NO_WINDOW) != 0);
 }
 
 /**
@@ -5962,6 +5967,90 @@ gtk_widget_is_drawable (GtkWidget *widget)
           (GTK_WIDGET_FLAGS (widget) & GTK_MAPPED) != 0);
 }
 
+/**
+ * gtk_widget_get_realized:
+ * @widget: a #GtkWidget
+ *
+ * Determines whether @widget is realized.
+ *
+ * Return value: %TRUE if @widget is realized, %FALSE otherwise
+ *
+ * Since: 2.20
+ **/
+gboolean
+gtk_widget_get_realized (GtkWidget *widget)
+{
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
+
+  return (GTK_WIDGET_FLAGS (widget) & GTK_REALIZED) != 0;
+}
+
+/**
+ * gtk_widget_set_realized:
+ * @widget: a #GtkWidget
+ * @realized: %TRUE to mark the widget as realized
+ *
+ * Marks the widget as being realized.
+ *
+ * This function should only ever be called in a derived widget's
+ * "realize" or "unrealize" implementation.
+ *
+ * Since: 2.20
+ */
+void
+gtk_widget_set_realized (GtkWidget *widget,
+                         gboolean   realized)
+{
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+
+  if (realized)
+    GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+  else
+    GTK_WIDGET_UNSET_FLAGS (widget, GTK_REALIZED);
+}
+
+/**
+ * gtk_widget_get_mapped:
+ * @widget: a #GtkWidget
+ *
+ * Whether the widget is mapped.
+ *
+ * Return value: %TRUE if the widget is mapped, %FALSE otherwise.
+ *
+ * Since: 2.20
+ */
+gboolean
+gtk_widget_get_mapped (GtkWidget *widget)
+{
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
+
+  return (GTK_OBJECT_FLAGS (widget) & GTK_MAPPED) != 0;
+}
+
+/**
+ * gtk_widget_set_mapped:
+ * @widget: a #GtkWidget
+ * @mapped: %TRUE to mark the widget as mapped
+ *
+ * Marks the widget as being realized.
+ *
+ * This function should only ever be called in a derived widget's
+ * "map" or "unmap" implementation.
+ *
+ * Since: 2.20
+ */
+void
+gtk_widget_set_mapped (GtkWidget *widget,
+                       gboolean   mapped)
+{
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+
+  if (mapped)
+    GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
+  else
+    GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
+}
+
 /**
  * gtk_widget_set_app_paintable:
  * @widget: a #GtkWidget
@@ -5994,14 +6083,14 @@ gtk_widget_set_app_paintable (GtkWidget *widget,
 
   app_paintable = (app_paintable != FALSE);
 
-  if (GTK_WIDGET_APP_PAINTABLE (widget) != app_paintable)
+  if (gtk_widget_get_app_paintable (widget) != app_paintable)
     {
       if (app_paintable)
        GTK_WIDGET_SET_FLAGS (widget, GTK_APP_PAINTABLE);
       else
        GTK_WIDGET_UNSET_FLAGS (widget, GTK_APP_PAINTABLE);
 
-      if (GTK_WIDGET_DRAWABLE (widget))
+      if (gtk_widget_is_drawable (widget))
        gtk_widget_queue_draw (widget);
 
       g_object_notify (G_OBJECT (widget), "app-paintable");
@@ -6059,12 +6148,14 @@ gtk_widget_set_double_buffered (GtkWidget *widget,
 {
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
-  if (double_buffered != GTK_WIDGET_DOUBLE_BUFFERED (widget))
+  double_buffered = (double_buffered != FALSE);
+
+  if (double_buffered != gtk_widget_get_double_buffered (widget))
     {
       if (double_buffered)
-        GTK_WIDGET_SET_FLAGS (widget, GTK_DOUBLE_BUFFERED);
+        GTK_OBJECT_FLAGS (widget) |= GTK_DOUBLE_BUFFERED;
       else
-        GTK_WIDGET_UNSET_FLAGS (widget, GTK_DOUBLE_BUFFERED);
+        GTK_OBJECT_FLAGS (widget) &= ~(GTK_DOUBLE_BUFFERED);
 
       g_object_notify (G_OBJECT (widget), "double-buffered");
     }
@@ -6144,29 +6235,29 @@ gtk_widget_set_sensitive (GtkWidget *widget,
 
   sensitive = (sensitive != FALSE);
 
-  if (sensitive == (GTK_WIDGET_SENSITIVE (widget) != FALSE))
+  if (sensitive == (gtk_widget_get_sensitive (widget) != FALSE))
     return;
 
   if (sensitive)
     {
-      GTK_WIDGET_SET_FLAGS (widget, GTK_SENSITIVE);
-      data.state = GTK_WIDGET_SAVED_STATE (widget);
+      GTK_OBJECT_FLAGS (widget) |= GTK_SENSITIVE;
+      data.state = widget->saved_state;
     }
   else
     {
-      GTK_WIDGET_UNSET_FLAGS (widget, GTK_SENSITIVE);
+      GTK_OBJECT_FLAGS (widget) &= ~(GTK_SENSITIVE);
       data.state = GTK_WIDGET_STATE (widget);
     }
   data.state_restoration = TRUE;
   data.use_forall = TRUE;
 
   if (widget->parent)
-    data.parent_sensitive = (GTK_WIDGET_IS_SENSITIVE (widget->parent) != FALSE);
+    data.parent_sensitive = (gtk_widget_is_sensitive (widget->parent) != FALSE);
   else
     data.parent_sensitive = TRUE;
 
   gtk_widget_propagate_state (widget, &data);
-  if (GTK_WIDGET_DRAWABLE (widget))
+  if (gtk_widget_is_drawable (widget))
     gtk_widget_queue_draw (widget);
 
   g_object_notify (G_OBJECT (widget), "sensitive");
@@ -6191,7 +6282,7 @@ gtk_widget_get_sensitive (GtkWidget *widget)
 {
   g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
 
-  return GTK_WIDGET_SENSITIVE (widget);
+  return (GTK_OBJECT_FLAGS (widget) & GTK_SENSITIVE) != 0;
 }
 
 /**
@@ -6210,7 +6301,8 @@ gtk_widget_is_sensitive (GtkWidget *widget)
 {
   g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
 
-  return GTK_WIDGET_IS_SENSITIVE (widget);
+  return (gtk_widget_get_sensitive (widget) &&
+          (GTK_OBJECT_FLAGS (widget) & GTK_PARENT_SENSITIVE) != 0);
 }
 
 /**
@@ -6239,7 +6331,7 @@ gtk_widget_set_parent (GtkWidget *widget,
       g_warning ("Can't set a parent on widget which has a parent\n");
       return;
     }
-  if (GTK_WIDGET_TOPLEVEL (widget))
+  if (gtk_widget_is_toplevel (widget))
     {
       g_warning ("Can't set a parent on a toplevel widget\n");
       return;
@@ -6256,8 +6348,8 @@ gtk_widget_set_parent (GtkWidget *widget,
   else
     data.state = GTK_WIDGET_STATE (widget);
   data.state_restoration = FALSE;
-  data.parent_sensitive = (GTK_WIDGET_IS_SENSITIVE (parent) != FALSE);
-  data.use_forall = GTK_WIDGET_IS_SENSITIVE (parent) != GTK_WIDGET_IS_SENSITIVE (widget);
+  data.parent_sensitive = (gtk_widget_is_sensitive (parent) != FALSE);
+  data.use_forall = gtk_widget_is_sensitive (parent) != gtk_widget_is_sensitive (widget);
 
   gtk_widget_propagate_state (widget, &data);
   
@@ -6273,11 +6365,11 @@ gtk_widget_set_parent (GtkWidget *widget,
   if (GTK_WIDGET_REALIZED (widget->parent))
     gtk_widget_realize (widget);
 
-  if (GTK_WIDGET_VISIBLE (widget->parent) &&
-      GTK_WIDGET_VISIBLE (widget))
+  if (gtk_widget_get_visible (widget->parent) &&
+      gtk_widget_get_visible (widget))
     {
       if (GTK_WIDGET_CHILD_VISIBLE (widget) &&
-         GTK_WIDGET_MAPPED (widget->parent))
+         gtk_widget_get_mapped (widget->parent))
        gtk_widget_map (widget);
 
       gtk_widget_queue_resize (widget);
@@ -6305,6 +6397,52 @@ gtk_widget_get_parent (GtkWidget *widget)
  * see docs/styles.txt
  *****************************************/
 
+/**
+ * gtk_widget_style_attach:
+ * @widget: a #GtkWidget
+ *
+ * This function attaches the widget's #GtkStyle to the widget's
+ * #GdkWindow. It is a replacement for
+ *
+ * <programlisting>
+ * widget->style = gtk_style_attach (widget->style, widget->window);
+ * </programlisting>
+ *
+ * and should only ever be called in a derived widget's "realize"
+ * implementation which does not chain up to its parent class'
+ * "realize" implementation, because one of the parent classes
+ * (finally #GtkWidget) would attach the style itself.
+ *
+ * Since: 2.20
+ **/
+void
+gtk_widget_style_attach (GtkWidget *widget)
+{
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+  g_return_if_fail (GTK_WIDGET_REALIZED (widget));
+
+  widget->style = gtk_style_attach (widget->style, widget->window);
+}
+
+/**
+ * gtk_widget_has_rc_style:
+ * @widget: a #GtkWidget
+ *
+ * Determines if the widget style has been looked up through the rc mechanism.
+ *
+ * Returns: %TRUE if the widget has been looked up through the rc
+ *   mechanism, %FALSE otherwise.
+ *
+ * Since: 2.20
+ **/
+gboolean
+gtk_widget_has_rc_style (GtkWidget *widget)
+{
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
+
+  return (GTK_WIDGET_FLAGS (widget) & GTK_RC_STYLE) != 0;
+}
+
 /**
  * gtk_widget_set_style:
  * @widget: a #GtkWidget
@@ -6326,7 +6464,7 @@ gtk_widget_set_style (GtkWidget *widget,
     {
       gboolean initial_emission;
 
-      initial_emission = !GTK_WIDGET_RC_STYLE (widget) && !GTK_WIDGET_USER_STYLE (widget);
+      initial_emission = !gtk_widget_has_rc_style (widget) && !GTK_WIDGET_USER_STYLE (widget);
       
       GTK_WIDGET_UNSET_FLAGS (widget, GTK_RC_STYLE);
       GTK_PRIVATE_SET_FLAG (widget, GTK_USER_STYLE);
@@ -6355,7 +6493,7 @@ gtk_widget_ensure_style (GtkWidget *widget)
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
   if (!GTK_WIDGET_USER_STYLE (widget) &&
-      !GTK_WIDGET_RC_STYLE (widget))
+      !gtk_widget_has_rc_style (widget))
     gtk_widget_reset_rc_style (widget);
 }
 
@@ -6368,7 +6506,7 @@ gtk_widget_reset_rc_style (GtkWidget *widget)
   GtkStyle *new_style = NULL;
   gboolean initial_emission;
   
-  initial_emission = !GTK_WIDGET_RC_STYLE (widget) && !GTK_WIDGET_USER_STYLE (widget);
+  initial_emission = !gtk_widget_has_rc_style (widget) && !GTK_WIDGET_USER_STYLE (widget);
 
   GTK_PRIVATE_UNSET_FLAG (widget, GTK_USER_STYLE);
   GTK_WIDGET_SET_FLAGS (widget, GTK_RC_STYLE);
@@ -6437,7 +6575,7 @@ gtk_widget_modify_style (GtkWidget      *widget,
    * modifier style and the only reference was our own.
    */
   
-  if (GTK_WIDGET_RC_STYLE (widget))
+  if (gtk_widget_has_rc_style (widget))
     gtk_widget_reset_rc_style (widget);
 }
 
@@ -6737,7 +6875,7 @@ gtk_widget_real_style_set (GtkWidget *widget,
                            GtkStyle  *previous_style)
 {
   if (GTK_WIDGET_REALIZED (widget) &&
-      !GTK_WIDGET_NO_WINDOW (widget))
+      gtk_widget_get_has_window (widget))
     gtk_style_set_background (widget->style, widget->window, widget->state);
 }
 
@@ -6819,7 +6957,7 @@ gtk_widget_propagate_hierarchy_changed_recurse (GtkWidget *widget,
                                                gpointer   client_data)
 {
   HierarchyChangedInfo *info = client_data;
-  gboolean new_anchored = GTK_WIDGET_TOPLEVEL (widget) ||
+  gboolean new_anchored = gtk_widget_is_toplevel (widget) ||
                  (widget->parent && GTK_WIDGET_ANCHORED (widget->parent));
 
   if (GTK_WIDGET_ANCHORED (widget) != new_anchored)
@@ -6861,7 +6999,7 @@ _gtk_widget_propagate_hierarchy_changed (GtkWidget    *widget,
   info.previous_toplevel = previous_toplevel;
   info.previous_screen = previous_toplevel ? gtk_widget_get_screen (previous_toplevel) : NULL;
 
-  if (GTK_WIDGET_TOPLEVEL (widget) ||
+  if (gtk_widget_is_toplevel (widget) ||
       (widget->parent && GTK_WIDGET_ANCHORED (widget->parent)))
     info.new_screen = gtk_widget_get_screen (widget);
   else
@@ -6976,7 +7114,7 @@ _gtk_widget_propagate_screen_changed (GtkWidget    *widget,
 static void
 reset_rc_styles_recurse (GtkWidget *widget, gpointer data)
 {
-  if (GTK_WIDGET_RC_STYLE (widget))
+  if (gtk_widget_has_rc_style (widget))
     gtk_widget_reset_rc_style (widget);
   
   if (GTK_IS_CONTAINER (widget))
@@ -7303,7 +7441,7 @@ gtk_widget_set_child_visible (GtkWidget *widget,
                              gboolean   is_visible)
 {
   g_return_if_fail (GTK_IS_WIDGET (widget));
-  g_return_if_fail (!GTK_WIDGET_TOPLEVEL (widget));
+  g_return_if_fail (!gtk_widget_is_toplevel (widget));
 
   g_object_ref (widget);
 
@@ -7316,15 +7454,15 @@ gtk_widget_set_child_visible (GtkWidget *widget,
       GTK_PRIVATE_UNSET_FLAG (widget, GTK_CHILD_VISIBLE);
 
       toplevel = gtk_widget_get_toplevel (widget);
-      if (toplevel != widget && GTK_WIDGET_TOPLEVEL (toplevel))
+      if (toplevel != widget && gtk_widget_is_toplevel (toplevel))
        _gtk_window_unset_focus_and_default (GTK_WINDOW (toplevel), widget);
     }
 
   if (widget->parent && GTK_WIDGET_REALIZED (widget->parent))
     {
-      if (GTK_WIDGET_MAPPED (widget->parent) &&
+      if (gtk_widget_get_mapped (widget->parent) &&
          GTK_WIDGET_CHILD_VISIBLE (widget) &&
-         GTK_WIDGET_VISIBLE (widget))
+         gtk_widget_get_visible (widget))
        gtk_widget_map (widget);
       else
        gtk_widget_unmap (widget);
@@ -7361,7 +7499,7 @@ gtk_widget_get_screen_unchecked (GtkWidget *widget)
   
   toplevel = gtk_widget_get_toplevel (widget);
 
-  if (GTK_WIDGET_TOPLEVEL (toplevel))
+  if (gtk_widget_is_toplevel (toplevel))
     {
       if (GTK_IS_WINDOW (toplevel))
        return GTK_WINDOW (toplevel)->screen;
@@ -7525,15 +7663,15 @@ gtk_widget_child_focus (GtkWidget       *widget,
 
   g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
 
-  if (!GTK_WIDGET_VISIBLE (widget) ||
-      !GTK_WIDGET_IS_SENSITIVE (widget))
+  if (!gtk_widget_get_visible (widget) ||
+      !gtk_widget_is_sensitive (widget))
     return FALSE;
 
   /* child widgets must set CAN_FOCUS, containers
    * don't have to though.
    */
   if (!GTK_IS_CONTAINER (widget) &&
-      !GTK_WIDGET_CAN_FOCUS (widget))
+      !gtk_widget_get_can_focus (widget))
     return FALSE;
   
   g_signal_emit (widget,
@@ -7701,7 +7839,7 @@ gtk_widget_set_uposition (GtkWidget *widget,
   if (GTK_IS_WINDOW (widget) && aux_info->x_set && aux_info->y_set)
     _gtk_window_reposition (GTK_WINDOW (widget), aux_info->x, aux_info->y);
   
-  if (GTK_WIDGET_VISIBLE (widget) && widget->parent)
+  if (gtk_widget_get_visible (widget) && widget->parent)
     gtk_widget_size_allocate (widget, &widget->allocation);
 }
 
@@ -7730,7 +7868,7 @@ gtk_widget_set_usize_internal (GtkWidget *widget,
       changed = TRUE;
     }
   
-  if (GTK_WIDGET_VISIBLE (widget) && changed)
+  if (gtk_widget_get_visible (widget) && changed)
     gtk_widget_queue_resize (widget);
 
   g_object_thaw_notify (G_OBJECT (widget));
@@ -7829,8 +7967,8 @@ gtk_widget_set_size_request (GtkWidget *widget,
 /**
  * gtk_widget_get_size_request:
  * @widget: a #GtkWidget
- * @width: (out): return location for width, or %NULL
- * @height: (out): return location for height, or %NULL
+ * @width: (allow-none): (out): return location for width, or %NULL
+ * @height: (allow-none): (out): return location for height, or %NULL
  *
  * Gets the size request that was explicitly set for the widget using
  * gtk_widget_set_size_request(). A value of -1 stored in @width or
@@ -7936,7 +8074,7 @@ gtk_widget_add_events (GtkWidget *widget,
     {
       GList *window_list;
 
-      if (GTK_WIDGET_NO_WINDOW (widget))
+      if (!gtk_widget_get_has_window (widget))
        window_list = gdk_window_get_children (widget->window);
       else
        window_list = g_list_prepend (NULL, widget->window);
@@ -7994,7 +8132,7 @@ gtk_widget_set_extension_events (GtkWidget *widget,
  * is set on the result.
  * |[
  *  GtkWidget *toplevel = gtk_widget_get_toplevel (widget);
- *  if (GTK_WIDGET_TOPLEVEL (toplevel))
+ *  if (gtk_widget_is_toplevel (toplevel))
  *    {
  *      /&ast; Perform action on toplevel. &ast;/
  *    }
@@ -8037,10 +8175,10 @@ gtk_widget_get_ancestor (GtkWidget *widget,
 {
   g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
   
-  while (widget && !g_type_is_a (GTK_WIDGET_TYPE (widget), widget_type))
+  while (widget && !g_type_is_a (G_OBJECT_TYPE (widget), widget_type))
     widget = widget->parent;
   
-  if (!(widget && g_type_is_a (GTK_WIDGET_TYPE (widget), widget_type)))
+  if (!(widget && g_type_is_a (G_OBJECT_TYPE (widget), widget_type)))
     return NULL;
   
   return widget;
@@ -8210,7 +8348,7 @@ gtk_widget_get_pointer (GtkWidget *widget,
     {
       gdk_window_get_pointer (widget->window, x, y, NULL);
       
-      if (GTK_WIDGET_NO_WINDOW (widget))
+      if (!gtk_widget_get_has_window (widget))
        {
          if (x)
            *x -= widget->allocation.x;
@@ -8263,7 +8401,7 @@ gtk_widget_set_composite_name (GtkWidget   *widget,
                               const gchar *name)
 {
   g_return_if_fail (GTK_IS_WIDGET (widget));
-  g_return_if_fail (GTK_WIDGET_COMPOSITE_CHILD (widget));
+  g_return_if_fail ((GTK_WIDGET_FLAGS (widget) & GTK_COMPOSITE_CHILD) != 0);
   g_return_if_fail (name != NULL);
 
   if (!quark_composite_name)
@@ -8290,7 +8428,7 @@ gtk_widget_get_composite_name (GtkWidget *widget)
 {
   g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
 
-  if (GTK_WIDGET_COMPOSITE_CHILD (widget) && widget->parent)
+  if (((GTK_WIDGET_FLAGS (widget) & GTK_COMPOSITE_CHILD) != 0) && widget->parent)
     return _gtk_container_child_composite_name (GTK_CONTAINER (widget->parent),
                                               widget);
   else
@@ -8558,7 +8696,7 @@ gtk_widget_dispose (GObject *object)
 
   if (widget->parent)
     gtk_container_remove (GTK_CONTAINER (widget->parent), widget);
-  else if (GTK_WIDGET_VISIBLE (widget))
+  else if (gtk_widget_get_visible (widget))
     gtk_widget_hide (widget);
 
   GTK_WIDGET_UNSET_FLAGS (widget, GTK_VISIBLE);
@@ -8628,11 +8766,11 @@ gtk_widget_real_map (GtkWidget *widget)
 {
   g_assert (GTK_WIDGET_REALIZED (widget));
   
-  if (!GTK_WIDGET_MAPPED (widget))
+  if (!gtk_widget_get_mapped (widget))
     {
       GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
       
-      if (!GTK_WIDGET_NO_WINDOW (widget))
+      if (gtk_widget_get_has_window (widget))
        gdk_window_show (widget->window);
     }
 }
@@ -8648,11 +8786,11 @@ gtk_widget_real_map (GtkWidget *widget)
 static void
 gtk_widget_real_unmap (GtkWidget *widget)
 {
-  if (GTK_WIDGET_MAPPED (widget))
+  if (gtk_widget_get_mapped (widget))
     {
       GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
 
-      if (!GTK_WIDGET_NO_WINDOW (widget))
+      if (gtk_widget_get_has_window (widget))
        gdk_window_hide (widget->window);
     }
 }
@@ -8668,7 +8806,7 @@ gtk_widget_real_unmap (GtkWidget *widget)
 static void
 gtk_widget_real_realize (GtkWidget *widget)
 {
-  g_assert (GTK_WIDGET_NO_WINDOW (widget));
+  g_assert (!gtk_widget_get_has_window (widget));
   
   GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
   if (widget->parent)
@@ -8690,7 +8828,7 @@ gtk_widget_real_realize (GtkWidget *widget)
 static void
 gtk_widget_real_unrealize (GtkWidget *widget)
 {
-  if (GTK_WIDGET_MAPPED (widget))
+  if (gtk_widget_get_mapped (widget))
     gtk_widget_real_unmap (widget);
 
   GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
@@ -8710,7 +8848,7 @@ gtk_widget_real_unrealize (GtkWidget *widget)
                          NULL);
 
   gtk_style_detach (widget->style);
-  if (!GTK_WIDGET_NO_WINDOW (widget))
+  if (gtk_widget_get_has_window (widget))
     {
       gdk_window_set_user_data (widget->window, NULL);
       gdk_window_destroy (widget->window);
@@ -9037,7 +9175,7 @@ gtk_widget_propagate_state (GtkWidget           *widget,
                            GtkStateData        *data)
 {
   guint8 old_state = GTK_WIDGET_STATE (widget);
-  guint8 old_saved_state = GTK_WIDGET_SAVED_STATE (widget);
+  guint8 old_saved_state = widget->saved_state;
 
   /* don't call this function with state==GTK_STATE_INSENSITIVE,
    * parent_sensitive==TRUE on a sensitive widget
@@ -9049,10 +9187,10 @@ gtk_widget_propagate_state (GtkWidget           *widget,
   else
     GTK_WIDGET_UNSET_FLAGS (widget, GTK_PARENT_SENSITIVE);
 
-  if (GTK_WIDGET_IS_SENSITIVE (widget))
+  if (gtk_widget_is_sensitive (widget))
     {
       if (data->state_restoration)
-        GTK_WIDGET_STATE (widget) = GTK_WIDGET_SAVED_STATE (widget);
+        GTK_WIDGET_STATE (widget) = widget->saved_state;
       else
         GTK_WIDGET_STATE (widget) = data->state;
     }
@@ -9061,35 +9199,35 @@ gtk_widget_propagate_state (GtkWidget           *widget,
       if (!data->state_restoration)
        {
          if (data->state != GTK_STATE_INSENSITIVE)
-           GTK_WIDGET_SAVED_STATE (widget) = data->state;
+           widget->saved_state = data->state;
        }
       else if (GTK_WIDGET_STATE (widget) != GTK_STATE_INSENSITIVE)
-       GTK_WIDGET_SAVED_STATE (widget) = GTK_WIDGET_STATE (widget);
+       widget->saved_state = GTK_WIDGET_STATE (widget);
       GTK_WIDGET_STATE (widget) = GTK_STATE_INSENSITIVE;
     }
 
-  if (gtk_widget_is_focus (widget) && !GTK_WIDGET_IS_SENSITIVE (widget))
+  if (gtk_widget_is_focus (widget) && !gtk_widget_is_sensitive (widget))
     {
       GtkWidget *window;
 
       window = gtk_widget_get_toplevel (widget);
-      if (window && GTK_WIDGET_TOPLEVEL (window))
+      if (window && gtk_widget_is_toplevel (window))
        gtk_window_set_focus (GTK_WINDOW (window), NULL);
     }
 
   if (old_state != GTK_WIDGET_STATE (widget) ||
-      old_saved_state != GTK_WIDGET_SAVED_STATE (widget))
+      old_saved_state != widget->saved_state)
     {
       g_object_ref (widget);
 
-      if (!GTK_WIDGET_IS_SENSITIVE (widget) && GTK_WIDGET_HAS_GRAB (widget))
+      if (!gtk_widget_is_sensitive (widget) && gtk_widget_has_grab (widget))
        gtk_grab_remove (widget);
 
       g_signal_emit (widget, widget_signals[STATE_CHANGED], 0, old_state);
 
       if (GTK_WIDGET_HAS_POINTER (widget) && !GTK_WIDGET_SHADOWED (widget))
        {
-         if (!GTK_WIDGET_IS_SENSITIVE (widget))
+         if (!gtk_widget_is_sensitive (widget))
            _gtk_widget_synthesize_crossing (widget, NULL, 
                                             GDK_CROSSING_STATE_CHANGED);
          else if (old_state == GTK_STATE_INSENSITIVE)
@@ -9099,7 +9237,7 @@ gtk_widget_propagate_state (GtkWidget           *widget,
 
       if (GTK_IS_CONTAINER (widget))
        {
-         data->parent_sensitive = (GTK_WIDGET_IS_SENSITIVE (widget) != FALSE);
+         data->parent_sensitive = (gtk_widget_is_sensitive (widget) != FALSE);
          if (data->use_forall)
            gtk_container_forall (GTK_CONTAINER (widget),
                                  (GtkCallback) gtk_widget_propagate_state,
@@ -9167,7 +9305,7 @@ gtk_widget_shape_info_destroy (GtkWidgetShapeInfo *info)
 /**
  * gtk_widget_shape_combine_mask: 
  * @widget: a #GtkWidget
- * @shape_mask: shape to be added, or %NULL to remove an existing shape
+ * @shape_mask: (allow-none): shape to be added, or %NULL to remove an existing shape
  * @offset_x: X position of shape mask with respect to @window
  * @offset_y: Y position of shape mask with respect to @window
  * 
@@ -9185,7 +9323,7 @@ gtk_widget_shape_combine_mask (GtkWidget *widget,
   
   g_return_if_fail (GTK_IS_WIDGET (widget));
   /*  set_shape doesn't work on widgets without gdk window */
-  g_return_if_fail (!GTK_WIDGET_NO_WINDOW (widget));
+  g_return_if_fail (gtk_widget_get_has_window (widget));
 
   if (!shape_mask)
     {
@@ -9240,7 +9378,7 @@ gtk_widget_input_shape_combine_mask (GtkWidget *widget,
   
   g_return_if_fail (GTK_IS_WIDGET (widget));
   /*  set_shape doesn't work on widgets without gdk window */
-  g_return_if_fail (!GTK_WIDGET_NO_WINDOW (widget));
+  g_return_if_fail (gtk_widget_get_has_window (widget));
 
   if (!shape_mask)
     {
@@ -9350,7 +9488,7 @@ expose_window (GdkWindow *window)
   gdk_window_get_user_data (window, &user_data);
 
   if (user_data)
-    is_double_buffered = GTK_WIDGET_DOUBLE_BUFFERED (GTK_WIDGET (user_data));
+    is_double_buffered = gtk_widget_get_double_buffered (GTK_WIDGET (user_data));
   else
     is_double_buffered = FALSE;
   
@@ -9391,7 +9529,7 @@ expose_window (GdkWindow *window)
 /**
  * gtk_widget_get_snapshot:
  * @widget:    a #GtkWidget
- * @clip_rect: a #GdkRectangle or %NULL
+ * @clip_rect: (allow-none): a #GdkRectangle or %NULL
  *
  * Create a #GdkPixmap of the contents of the widget and its children.
  *
@@ -9434,7 +9572,7 @@ gtk_widget_get_snapshot (GtkWidget    *widget,
   GList *windows = NULL, *list;
 
   g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
-  if (!GTK_WIDGET_VISIBLE (widget))
+  if (!gtk_widget_get_visible (widget))
     return NULL;
 
   /* the widget (and parent_window) must be realized to be drawable */
@@ -9449,7 +9587,7 @@ gtk_widget_get_snapshot (GtkWidget    *widget,
   width = widget->allocation.width;
   height = widget->allocation.height;
 
-  if (widget->parent && !GTK_WIDGET_NO_WINDOW (widget))
+  if (widget->parent && gtk_widget_get_has_window (widget))
     {
       /* grow snapshot rectangle to cover all widget windows */
       parent_window = gtk_widget_get_parent_window (widget);
@@ -9622,7 +9760,7 @@ gtk_widget_class_install_style_property (GtkWidgetClass *klass,
  * gtk_widget_class_find_style_property:
  * @klass: a #GtkWidgetClass
  * @property_name: the name of the style property to find
- * @returns: the #GParamSpec of the style property or %NULL if @class has no
+ * @returns: (allow-none): the #GParamSpec of the style property or %NULL if @class has no
  *   style property with that name.
  *
  * Finds a style property of a widget class by name.
@@ -9911,7 +10049,7 @@ gtk_widget_class_path (GtkWidget *widget,
       gchar *d;
       guint l;
       
-      string = g_type_name (GTK_WIDGET_TYPE (widget));
+      string = g_type_name (G_OBJECT_TYPE (widget));
       l = strlen (string);
       while (tmp_path_len <= len + l + 1)
        {
@@ -10816,7 +10954,7 @@ gtk_widget_get_no_show_all (GtkWidget *widget)
 {
   g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
   
-  return (GTK_WIDGET_FLAGS (widget) & GTK_NO_SHOW_ALL) != 0;
+  return (GTK_OBJECT_FLAGS (widget) & GTK_NO_SHOW_ALL) != 0;
 }
 
 /**
@@ -10841,13 +10979,13 @@ gtk_widget_set_no_show_all (GtkWidget *widget,
 
   no_show_all = (no_show_all != FALSE);
 
-  if (no_show_all == ((GTK_WIDGET_FLAGS (widget) & GTK_NO_SHOW_ALL) != 0))
+  if (no_show_all == gtk_widget_get_no_show_all (widget))
     return;
 
   if (no_show_all)
-    GTK_WIDGET_SET_FLAGS (widget, GTK_NO_SHOW_ALL);
+    GTK_OBJECT_FLAGS (widget) |= GTK_NO_SHOW_ALL;
   else
-    GTK_WIDGET_UNSET_FLAGS (widget, GTK_NO_SHOW_ALL);
+    GTK_OBJECT_FLAGS (widget) &= ~(GTK_NO_SHOW_ALL);
   
   g_object_notify (G_OBJECT (widget), "no-show-all");
 }
@@ -10869,14 +11007,14 @@ gtk_widget_real_set_has_tooltip (GtkWidget *widget,
 
       if (priv_has_tooltip)
         {
-         if (GTK_WIDGET_REALIZED (widget) && GTK_WIDGET_NO_WINDOW (widget))
+         if (GTK_WIDGET_REALIZED (widget) && !gtk_widget_get_has_window (widget))
            gdk_window_set_events (widget->window,
                                   gdk_window_get_events (widget->window) |
                                   GDK_LEAVE_NOTIFY_MASK |
                                   GDK_POINTER_MOTION_MASK |
                                   GDK_POINTER_MOTION_HINT_MASK);
 
-         if (!GTK_WIDGET_NO_WINDOW (widget))
+         if (gtk_widget_get_has_window (widget))
              gtk_widget_add_events (widget,
                                     GDK_LEAVE_NOTIFY_MASK |
                                     GDK_POINTER_MOTION_MASK |
@@ -10891,7 +11029,7 @@ gtk_widget_real_set_has_tooltip (GtkWidget *widget,
 /**
  * gtk_widget_set_tooltip_window:
  * @widget: a #GtkWidget
- * @custom_window: a #GtkWindow, or %NULL
+ * @custom_window: (allow-none): a #GtkWindow, or %NULL
  *
  * Replaces the default, usually yellow, window used for displaying
  * tooltips with @custom_window. GTK+ will take care of showing and
@@ -10925,7 +11063,7 @@ gtk_widget_set_tooltip_window (GtkWidget *widget,
   has_tooltip = (custom_window != NULL || tooltip_markup != NULL);
   gtk_widget_real_set_has_tooltip (widget, has_tooltip, FALSE);
 
-  if (has_tooltip && GTK_WIDGET_VISIBLE (widget))
+  if (has_tooltip && gtk_widget_get_visible (widget))
     gtk_widget_queue_tooltip_query (widget);
 }
 
@@ -11043,7 +11181,7 @@ gtk_widget_get_tooltip_text (GtkWidget *widget)
 /**
  * gtk_widget_set_tooltip_markup:
  * @widget: a #GtkWidget
- * @markup: the contents of the tooltip for @widget, or %NULL
+ * @markup: (allow-none): the contents of the tooltip for @widget, or %NULL
  *
  * Sets @markup as the contents of the tooltip, which is marked up with
  *  the <link linkend="PangoMarkupFormat">Pango text markup language</link>.
@@ -11169,6 +11307,32 @@ gtk_widget_set_allocation (GtkWidget           *widget,
   widget->allocation = *allocation;
 }
 
+/**
+ * gtk_widget_get_requisition:
+ * @widget: a #GtkWidget
+ * @requisition: (out): a pointer to a #GtkRequisition to copy to
+ *
+ * Retrieves the widget's requisition.
+ *
+ * This function should only be used by widget implementations in
+ * order to figure whether the widget's requisition has actually
+ * changed after some internal state change (so that they can call
+ * gtk_widget_queue_resize() instead of gtk_widget_queue_draw()).
+ *
+ * Normally, gtk_widget_size_request() should be used.
+ *
+ * Since: 2.20
+ */
+void
+gtk_widget_get_requisition (GtkWidget      *widget,
+                            GtkRequisition *requisition)
+{
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+  g_return_if_fail (requisition != NULL);
+
+  *requisition = widget->requisition;
+}
+
 /**
  * gtk_widget_set_window:
  * @widget: a #GtkWidget