]> Pileus Git - ~andy/gtk/commitdiff
Initial conversion of GailWidget to GtkWidgetAccessible
authorMatthias Clasen <mclasen@redhat.com>
Sat, 2 Jul 2011 19:23:52 +0000 (15:23 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 5 Jul 2011 20:09:57 +0000 (16:09 -0400)
36 files changed:
gtk/a11y/Makefile.am
gtk/a11y/gail.c
gtk/a11y/gailwidget.c [deleted file]
gtk/a11y/gtkarrowaccessible.c
gtk/a11y/gtkarrowaccessible.h
gtk/a11y/gtkbuttonaccessible.c
gtk/a11y/gtkcheckmenuitemaccessible.c
gtk/a11y/gtkchecksubmenuitemaccessible.c
gtk/a11y/gtkcontaineraccessible.c
gtk/a11y/gtkcontaineraccessible.h
gtk/a11y/gtkentryaccessible.c
gtk/a11y/gtkentryaccessible.h
gtk/a11y/gtkexpanderaccessible.c
gtk/a11y/gtkimageaccessible.c
gtk/a11y/gtkimageaccessible.h
gtk/a11y/gtklabelaccessible.c
gtk/a11y/gtklabelaccessible.h
gtk/a11y/gtkmenuitemaccessible.c
gtk/a11y/gtknotebookaccessible.c
gtk/a11y/gtkprogressbaraccessible.c
gtk/a11y/gtkprogressbaraccessible.h
gtk/a11y/gtkrangeaccessible.c
gtk/a11y/gtkrangeaccessible.h
gtk/a11y/gtkscalebuttonaccessible.c
gtk/a11y/gtkspinbuttonaccessible.c
gtk/a11y/gtktextviewaccessible.c
gtk/a11y/gtktogglebuttonaccessible.c
gtk/a11y/gtktreeviewaccessible.c
gtk/a11y/gtkwidgetaccessible.c [new file with mode: 0644]
gtk/a11y/gtkwidgetaccessible.h [moved from gtk/a11y/gailwidget.h with 55% similarity]
gtk/a11y/gtkwindowaccessible.c
gtk/gtkaccessible.c
gtk/gtkspinner.c
gtk/gtkswitch.c
gtk/gtkwidget.c
tests/a11y/colorchooser.txt

index f960d438532a05ac83f652ce2e27949987c24f7e..47ec89f818bb35b77408de7798923eed65135a34 100644 (file)
@@ -49,7 +49,7 @@ gail_c_sources =                      \
        gailtoplevel.c                  \
        gtktreeviewaccessible.c         \
        gailutil.c                      \
-       gailwidget.c                    \
+       gtkwidgetaccessible.c           \
        gtkwindowaccessible.c
 
 libgailincludedir=$(includedir)/gail-3.0/gail
@@ -104,7 +104,7 @@ gail_private_h_sources =            \
        gtkwindowaccessible.h
 
 gail_public_h_sources =        \
-       gailwidget.h
+       gtkwidgetaccessible.h
 
 libgail_la_SOURCES =                   \
        $(gail_c_sources)               \
index fcf09f76f163283321062864256a38701f736ffc..69763acf92271474fca68297df510985ba1414f4 100644 (file)
@@ -31,7 +31,6 @@
 #include "gailtextcell.h"
 #include "gailtoplevel.h"
 #include "gailutil.h"
-#include "gailwidget.h"
 
 #include "gailfactory.h"
 
@@ -77,7 +76,6 @@ static guint focus_notify_handler = 0;
 static guint focus_tracker_id = 0;
 static GQuark quark_focus_object = 0;
 
-GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_WIDGET, GailWidget, gail_widget, GTK_TYPE_WIDGET)
 GAIL_IMPLEMENT_FACTORY_WITH_FUNC_DUMMY (GAIL_TYPE_RENDERER_CELL, GailRendererCell, gail_renderer_cell, GTK_TYPE_CELL_RENDERER, gail_renderer_cell_new)
 GAIL_IMPLEMENT_FACTORY_WITH_FUNC_DUMMY (GAIL_TYPE_BOOLEAN_CELL, GailBooleanCell, gail_boolean_cell, GTK_TYPE_CELL_RENDERER_TOGGLE, gail_boolean_cell_new)
 GAIL_IMPLEMENT_FACTORY_WITH_FUNC_DUMMY (GAIL_TYPE_IMAGE_CELL, GailImageCell, gail_image_cell, GTK_TYPE_CELL_RENDERER_PIXBUF, gail_image_cell_new)
@@ -822,7 +820,6 @@ gail_accessibility_module_init (void)
   if (a_t_support)
     fprintf (stderr, "GTK Accessibility Module initialized\n");
 
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_WIDGET, gail_widget);
   GAIL_WIDGET_SET_FACTORY (GTK_TYPE_CELL_RENDERER_TEXT, gail_text_cell);
   GAIL_WIDGET_SET_FACTORY (GTK_TYPE_CELL_RENDERER_TOGGLE, gail_boolean_cell);
   GAIL_WIDGET_SET_FACTORY (GTK_TYPE_CELL_RENDERER_PIXBUF, gail_image_cell);
diff --git a/gtk/a11y/gailwidget.c b/gtk/a11y/gailwidget.c
deleted file mode 100644 (file)
index 2efdebf..0000000
+++ /dev/null
@@ -1,1085 +0,0 @@
-/* GAIL - The GNOME Accessibility Implementation Library
- * Copyright 2001, 2002, 2003 Sun Microsystems Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "config.h"
-
-#include <string.h>
-
-#include <gtk/gtk.h>
-#ifdef GDK_WINDOWING_X11
-#include <gdk/x11/gdkx.h>
-#endif
-#include "gailwidget.h"
-#include "gtknotebookpageaccessible.h"
-
-extern GtkWidget *focus_widget;
-
-static void gail_widget_class_init (GailWidgetClass *klass);
-static void gail_widget_init                     (GailWidget       *accessible);
-static void gail_widget_connect_widget_destroyed (GtkAccessible    *accessible);
-static void gail_widget_destroyed                (GtkWidget        *widget,
-                                                  GtkAccessible    *accessible);
-
-static const gchar* gail_widget_get_description (AtkObject *accessible);
-static AtkObject* gail_widget_get_parent (AtkObject *accessible);
-static AtkStateSet* gail_widget_ref_state_set (AtkObject *accessible);
-static AtkRelationSet* gail_widget_ref_relation_set (AtkObject *accessible);
-static gint gail_widget_get_index_in_parent (AtkObject *accessible);
-
-static void atk_component_interface_init (AtkComponentIface *iface);
-
-static guint    gail_widget_add_focus_handler
-                                           (AtkComponent    *component,
-                                            AtkFocusHandler handler);
-
-static void     gail_widget_get_extents    (AtkComponent    *component,
-                                            gint            *x,
-                                            gint            *y,
-                                            gint            *width,
-                                            gint            *height,
-                                            AtkCoordType    coord_type);
-
-static void     gail_widget_get_size       (AtkComponent    *component,
-                                            gint            *width,
-                                            gint            *height);
-
-static AtkLayer gail_widget_get_layer      (AtkComponent *component);
-
-static gboolean gail_widget_grab_focus     (AtkComponent    *component);
-
-
-static void     gail_widget_remove_focus_handler 
-                                           (AtkComponent    *component,
-                                            guint           handler_id);
-
-static gboolean gail_widget_set_extents    (AtkComponent    *component,
-                                            gint            x,
-                                            gint            y,
-                                            gint            width,
-                                            gint            height,
-                                            AtkCoordType    coord_type);
-
-static gboolean gail_widget_set_position   (AtkComponent    *component,
-                                            gint            x,
-                                            gint            y,
-                                            AtkCoordType    coord_type);
-
-static gboolean gail_widget_set_size       (AtkComponent    *component,
-                                            gint            width,
-                                            gint            height);
-
-static gint       gail_widget_map_gtk            (GtkWidget     *widget);
-static void       gail_widget_real_notify_gtk    (GObject       *obj,
-                                                  GParamSpec    *pspec);
-static void       gail_widget_notify_gtk         (GObject       *obj,
-                                                  GParamSpec    *pspec);
-static gboolean   gail_widget_focus_gtk          (GtkWidget     *widget,
-                                                  GdkEventFocus *event);
-static gboolean   gail_widget_real_focus_gtk     (GtkWidget     *widget,
-                                                  GdkEventFocus *event);
-static void       gail_widget_size_allocate_gtk  (GtkWidget     *widget,
-                                                  GtkAllocation *allocation);
-
-static void       gail_widget_focus_event        (AtkObject     *obj,
-                                                  gboolean      focus_in);
-
-static void       gail_widget_real_initialize    (AtkObject     *obj,
-                                                  gpointer      data);
-static AtkAttributeSet *gail_widget_get_attributes(AtkObject *obj);
-static GtkWidget* gail_widget_find_viewport      (GtkWidget     *widget);
-static gboolean   gail_widget_on_screen          (GtkWidget     *widget);
-static gboolean   gail_widget_all_parents_visible(GtkWidget     *widget);
-
-G_DEFINE_TYPE_WITH_CODE (GailWidget, gail_widget, GTK_TYPE_ACCESSIBLE,
-                         G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT, atk_component_interface_init))
-
-static void
-gail_widget_class_init (GailWidgetClass *klass)
-{
-  AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
-  GtkAccessibleClass *accessible_class = GTK_ACCESSIBLE_CLASS (klass);
-
-  klass->notify_gtk = gail_widget_real_notify_gtk;
-  klass->focus_gtk = gail_widget_real_focus_gtk;
-
-  accessible_class->connect_widget_destroyed = gail_widget_connect_widget_destroyed;
-
-  class->get_description = gail_widget_get_description;
-  class->get_parent = gail_widget_get_parent;
-  class->ref_relation_set = gail_widget_ref_relation_set;
-  class->ref_state_set = gail_widget_ref_state_set;
-  class->get_index_in_parent = gail_widget_get_index_in_parent;
-  class->initialize = gail_widget_real_initialize;
-  class->get_attributes = gail_widget_get_attributes;
-}
-
-static void
-gail_widget_init (GailWidget *accessible)
-{
-}
-
-/**
- * This function  specifies the GtkWidget for which the GailWidget was created 
- * and specifies a handler to be called when the GtkWidget is destroyed.
- **/
-static void 
-gail_widget_real_initialize (AtkObject *obj,
-                             gpointer  data)
-{
-  GtkAccessible *accessible;
-  GtkWidget *widget;
-
-  g_return_if_fail (GTK_IS_WIDGET (data));
-
-  widget = GTK_WIDGET (data);
-
-  accessible = GTK_ACCESSIBLE (obj);
-  gtk_accessible_set_widget (accessible, widget);
-  gtk_accessible_connect_widget_destroyed (accessible);
-  g_signal_connect_after (widget,
-                          "focus-in-event",
-                          G_CALLBACK (gail_widget_focus_gtk),
-                          NULL);
-  g_signal_connect_after (widget,
-                          "focus-out-event",
-                          G_CALLBACK (gail_widget_focus_gtk),
-                          NULL);
-  g_signal_connect (widget,
-                    "notify",
-                    G_CALLBACK (gail_widget_notify_gtk),
-                    NULL);
-  g_signal_connect (widget,
-                    "size_allocate",
-                    G_CALLBACK (gail_widget_size_allocate_gtk),
-                    NULL);
-  atk_component_add_focus_handler (ATK_COMPONENT (accessible),
-                                   gail_widget_focus_event);
-  /*
-   * Add signal handlers for GTK signals required to support property changes
-   */
-  g_signal_connect (widget,
-                    "map",
-                    G_CALLBACK (gail_widget_map_gtk),
-                    NULL);
-  g_signal_connect (widget,
-                    "unmap",
-                    G_CALLBACK (gail_widget_map_gtk),
-                    NULL);
-  g_object_set_data (G_OBJECT (obj), "atk-component-layer",
-                    GINT_TO_POINTER (ATK_LAYER_WIDGET));
-
-  obj->role = ATK_ROLE_UNKNOWN;
-}
-
-/*
- * This function specifies the function to be called when the widget
- * is destroyed
- */
-static void
-gail_widget_connect_widget_destroyed (GtkAccessible *accessible)
-{
-  GtkWidget *widget;
-
-  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
-  if (widget)
-    {
-      g_signal_connect_after (widget,
-                              "destroy",
-                              G_CALLBACK (gail_widget_destroyed),
-                              accessible);
-    }
-}
-
-/*
- * This function is called when the widget is destroyed.
- * It sets the widget field in the GtkAccessible structure to NULL
- * and emits a state-change signal for the state ATK_STATE_DEFUNCT
- */
-static void 
-gail_widget_destroyed (GtkWidget     *widget,
-                       GtkAccessible *accessible)
-{
-  gtk_accessible_set_widget (accessible, NULL);
-  atk_object_notify_state_change (ATK_OBJECT (accessible), ATK_STATE_DEFUNCT,
-                                  TRUE);
-}
-
-static const gchar*
-gail_widget_get_description (AtkObject *accessible)
-{
-  if (accessible->description)
-    return accessible->description;
-  else
-    {
-      GtkWidget *widget;
-
-      /* Get the tooltip from the widget */
-      widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
-      if (widget == NULL)
-        /*
-         * Object is defunct
-         */
-        return NULL;
-      return gtk_widget_get_tooltip_text (widget);
-    }
-}
-
-static AtkObject* 
-gail_widget_get_parent (AtkObject *accessible)
-{
-  AtkObject *parent;
-
-  parent = accessible->accessible_parent;
-
-  if (parent != NULL)
-    g_return_val_if_fail (ATK_IS_OBJECT (parent), NULL);
-  else
-    {
-      GtkWidget *widget, *parent_widget;
-
-      widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
-      if (widget == NULL)
-        return NULL;
-
-      parent_widget = gtk_widget_get_parent (widget);
-      if (parent_widget == NULL)
-        return NULL;
-
-      /*
-       * For a widget whose parent is a GtkNoteBook, we return the
-       * accessible object corresponding the GtkNotebookPage containing
-       * the widget as the accessible parent.
-       */
-      if (GTK_IS_NOTEBOOK (parent_widget))
-        {
-          gint page_num;
-          GtkWidget *child;
-          GtkNotebook *notebook;
-
-          page_num = 0;
-          notebook = GTK_NOTEBOOK (parent_widget);
-          while (TRUE)
-            {
-              child = gtk_notebook_get_nth_page (notebook, page_num);
-              if (!child)
-                break;
-              if (child == widget)
-                {
-                  parent = gtk_widget_get_accessible (parent_widget);
-                  parent = atk_object_ref_accessible_child (parent, page_num);
-                  g_object_unref (parent);
-                  return parent;
-                }
-              page_num++;
-            }
-        }
-
-      parent = gtk_widget_get_accessible (parent_widget);
-    }
-  return parent;
-}
-
-static GtkWidget*
-find_label (GtkWidget *widget)
-{
-  GList *labels;
-  GtkWidget *label;
-  GtkWidget *temp_widget;
-
-  labels = gtk_widget_list_mnemonic_labels (widget);
-  label = NULL;
-  if (labels)
-    {
-      if (labels->data)
-        {
-          if (labels->next)
-            {
-              g_warning ("Widget (%s) has more than one label", G_OBJECT_TYPE_NAME (widget));
-              
-            }
-          else
-            {
-              label = labels->data;
-            }
-        }
-      g_list_free (labels);
-    }
-
-  /*
-   * Ignore a label within a button; bug #136602
-   */
-  if (label && GTK_IS_BUTTON (widget))
-    {
-      temp_widget = label;
-      while (temp_widget)
-        {
-          if (temp_widget == widget)
-            {
-              label = NULL;
-              break;
-            }
-          temp_widget = gtk_widget_get_parent (temp_widget);
-        }
-    } 
-  return label;
-}
-
-static AtkRelationSet*
-gail_widget_ref_relation_set (AtkObject *obj)
-{
-  GtkWidget *widget;
-  AtkRelationSet *relation_set;
-  GtkWidget *label;
-  AtkObject *array[1];
-  AtkRelation* relation;
-
-  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj));
-  if (widget == NULL)
-    return NULL;
-
-  relation_set = ATK_OBJECT_CLASS (gail_widget_parent_class)->ref_relation_set (obj);
-
-  if (GTK_IS_BOX (widget))
-      /*
-       * Do not report labelled-by for a GtkBox which could be a 
-       * GnomeFileEntry.
-       */
-    return relation_set;
-
-  if (!atk_relation_set_contains (relation_set, ATK_RELATION_LABELLED_BY))
-    {
-      label = find_label (widget);
-      if (label == NULL)
-        {
-          if (GTK_IS_BUTTON (widget))
-            /*
-             * Handle the case where GnomeIconEntry is the mnemonic widget.
-             * The GtkButton which is a grandchild of the GnomeIconEntry
-             * should really be the mnemonic widget. See bug #133967.
-             */
-            {
-              GtkWidget *temp_widget;
-
-              temp_widget = gtk_widget_get_parent (widget);
-
-              if (GTK_IS_ALIGNMENT (temp_widget))
-                {
-                  temp_widget = gtk_widget_get_parent (temp_widget);
-                  if (GTK_IS_BOX (temp_widget))
-                    {
-                      label = find_label (temp_widget);
-                 
-                      if (!label)
-                        label = find_label (gtk_widget_get_parent (temp_widget));
-                    }
-                }
-            }
-          else if (GTK_IS_COMBO_BOX (widget))
-            /*
-             * Handle the case when GtkFileChooserButton is the mnemonic
-             * widget.  The GtkComboBox which is a child of the
-             * GtkFileChooserButton should be the mnemonic widget.
-             * See bug #359843.
-             */
-            {
-              GtkWidget *temp_widget;
-
-              temp_widget = gtk_widget_get_parent (widget);
-              if (GTK_IS_BOX (temp_widget))
-                {
-                  label = find_label (temp_widget);
-                }
-            }
-        }
-
-      if (label)
-        {
-         array [0] = gtk_widget_get_accessible (label);
-
-         relation = atk_relation_new (array, 1, ATK_RELATION_LABELLED_BY);
-         atk_relation_set_add (relation_set, relation);
-         g_object_unref (relation);
-        }
-    }
-
-  return relation_set;
-}
-
-static AtkStateSet*
-gail_widget_ref_state_set (AtkObject *accessible)
-{
-  GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
-  AtkStateSet *state_set;
-
-  state_set = ATK_OBJECT_CLASS (gail_widget_parent_class)->ref_state_set (accessible);
-
-  if (widget == NULL)
-    {
-      atk_state_set_add_state (state_set, ATK_STATE_DEFUNCT);
-    }
-  else
-    {
-      if (gtk_widget_is_sensitive (widget))
-        {
-          atk_state_set_add_state (state_set, ATK_STATE_SENSITIVE);
-          atk_state_set_add_state (state_set, ATK_STATE_ENABLED);
-        }
-  
-      if (gtk_widget_get_can_focus (widget))
-        {
-          atk_state_set_add_state (state_set, ATK_STATE_FOCUSABLE);
-        }
-      /*
-       * We do not currently generate notifications when an ATK object 
-       * corresponding to a GtkWidget changes visibility by being scrolled 
-       * on or off the screen.  The testcase for this is the main window 
-       * of the testgtk application in which a set of buttons in a GtkVBox 
-       * is in a scrooled window with a viewport.
-       *
-       * To generate the notifications we would need to do the following: 
-       * 1) Find the GtkViewPort among the antecendents of the objects
-       * 2) Create an accesible for the GtkViewPort
-       * 3) Connect to the value-changed signal on the viewport
-       * 4) When the signal is received we need to traverse the children 
-       * of the viewport and check whether the children are visible or not 
-       * visible; we may want to restrict this to the widgets for which 
-       * accessible objects have been created.
-       * 5) We probably need to store a variable on_screen in the 
-       * GailWidget data structure so we can determine whether the value has 
-       * changed.
-       */
-      if (gtk_widget_get_visible (widget))
-        {
-          atk_state_set_add_state (state_set, ATK_STATE_VISIBLE);
-          if (gail_widget_on_screen (widget) && gtk_widget_get_mapped (widget) &&
-              gail_widget_all_parents_visible (widget))
-            {
-              atk_state_set_add_state (state_set, ATK_STATE_SHOWING);
-            }
-        }
-  
-      if (gtk_widget_has_focus (widget) && (widget == focus_widget))
-        {
-          AtkObject *focus_obj;
-
-          focus_obj = g_object_get_data (G_OBJECT (accessible), "gail-focus-object");
-          if (focus_obj == NULL)
-            atk_state_set_add_state (state_set, ATK_STATE_FOCUSED);
-        }
-      if (gtk_widget_has_default (widget))
-        {
-          atk_state_set_add_state (state_set, ATK_STATE_DEFAULT);
-        }
-
-      if (GTK_IS_ORIENTABLE(widget))
-        switch (gtk_orientable_get_orientation (GTK_ORIENTABLE (widget)))
-          {
-          case GTK_ORIENTATION_HORIZONTAL:
-            atk_state_set_add_state (state_set, ATK_STATE_HORIZONTAL);
-            break;
-
-          case GTK_ORIENTATION_VERTICAL:
-            atk_state_set_add_state (state_set, ATK_STATE_VERTICAL);
-            break;
-          }
-    }
-  return state_set;
-}
-
-static gint
-gail_widget_get_index_in_parent (AtkObject *accessible)
-{
-  GtkWidget *widget;
-  GtkWidget *parent_widget;
-  gint index;
-  GList *children;
-
-  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
-
-  if (widget == NULL)
-    /*
-     * State is defunct
-     */
-    return -1;
-
-  if (accessible->accessible_parent)
-    {
-      AtkObject *parent;
-
-      parent = accessible->accessible_parent;
-
-      if (GTK_IS_NOTEBOOK_PAGE_ACCESSIBLE (parent))
-        return 0;
-      else
-        {
-          gint n_children, i;
-          gboolean found = FALSE;
-
-          n_children = atk_object_get_n_accessible_children (parent);
-          for (i = 0; i < n_children; i++)
-            {
-              AtkObject *child;
-
-              child = atk_object_ref_accessible_child (parent, i);
-              if (child == accessible)
-                found = TRUE;
-
-              g_object_unref (child); 
-              if (found)
-                return i;
-            }
-        }
-    }
-
-  if (!GTK_IS_WIDGET (widget))
-    return -1;
-  parent_widget = gtk_widget_get_parent (widget);
-  if (!GTK_IS_CONTAINER (parent_widget))
-    return -1;
-
-  children = gtk_container_get_children (GTK_CONTAINER (parent_widget));
-
-  index = g_list_index (children, widget);
-  g_list_free (children);
-  return index;  
-}
-
-static void 
-atk_component_interface_init (AtkComponentIface *iface)
-{
-  /*
-   * Use default implementation for contains and get_position
-   */
-  iface->add_focus_handler = gail_widget_add_focus_handler;
-  iface->get_extents = gail_widget_get_extents;
-  iface->get_size = gail_widget_get_size;
-  iface->get_layer = gail_widget_get_layer;
-  iface->grab_focus = gail_widget_grab_focus;
-  iface->remove_focus_handler = gail_widget_remove_focus_handler;
-  iface->set_extents = gail_widget_set_extents;
-  iface->set_position = gail_widget_set_position;
-  iface->set_size = gail_widget_set_size;
-}
-
-static guint 
-gail_widget_add_focus_handler (AtkComponent    *component,
-                               AtkFocusHandler handler)
-{
-  GSignalMatchType match_type;
-  gulong ret;
-  guint signal_id;
-
-  match_type = G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC;
-  signal_id = g_signal_lookup ("focus-event", ATK_TYPE_OBJECT);
-
-  ret = g_signal_handler_find (component, match_type, signal_id, 0, NULL,
-                               (gpointer) handler, NULL);
-  if (!ret)
-    {
-      return g_signal_connect_closure_by_id (component, 
-                                             signal_id, 0,
-                                             g_cclosure_new (
-                                             G_CALLBACK (handler), NULL,
-                                             (GClosureNotify) NULL),
-                                             FALSE);
-    }
-  else
-    {
-      return 0;
-    }
-}
-
-static void 
-gail_widget_get_extents (AtkComponent   *component,
-                         gint           *x,
-                         gint           *y,
-                         gint           *width,
-                         gint           *height,
-                         AtkCoordType   coord_type)
-{
-  GtkAllocation allocation;
-  GdkWindow *window;
-  gint x_window, y_window;
-  gint x_toplevel, y_toplevel;
-  GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component));
-
-  if (widget == NULL)
-    return;
-
-  gtk_widget_get_allocation (widget, &allocation);
-  *width = allocation.width;
-  *height = allocation.height;
-  if (!gail_widget_on_screen (widget) || (!gtk_widget_is_drawable (widget)))
-    {
-      *x = G_MININT;
-      *y = G_MININT;
-      return;
-    }
-
-  if (gtk_widget_get_parent (widget))
-    {
-      *x = allocation.x;
-      *y = allocation.y;
-      window = gtk_widget_get_parent_window (widget);
-    }
-  else
-    {
-      *x = 0;
-      *y = 0;
-      window = gtk_widget_get_window (widget);
-    }
-  gdk_window_get_origin (window, &x_window, &y_window);
-  *x += x_window;
-  *y += y_window;
-
- if (coord_type == ATK_XY_WINDOW) 
-    { 
-      window = gdk_window_get_toplevel (gtk_widget_get_window (widget));
-      gdk_window_get_origin (window, &x_toplevel, &y_toplevel);
-
-      *x -= x_toplevel;
-      *y -= y_toplevel;
-    }
-}
-
-static void 
-gail_widget_get_size (AtkComponent   *component,
-                      gint           *width,
-                      gint           *height)
-{
-  GtkAllocation allocation;
-  GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component));
-
-  if (widget == NULL)
-    return;
-
-  gtk_widget_get_allocation (widget, &allocation);
-  *width = allocation.width;
-  *height = allocation.height;
-}
-
-static AtkLayer
-gail_widget_get_layer (AtkComponent *component)
-{
-  gint layer;
-  layer = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (component), "atk-component-layer"));
-
-  return (AtkLayer) layer;
-}
-
-static gboolean
-gail_widget_grab_focus (AtkComponent   *component)
-{
-  GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component));
-  GtkWidget *toplevel;
-
-  if (!widget)
-    return FALSE;
-
-  if (gtk_widget_get_can_focus (widget))
-    {
-      gtk_widget_grab_focus (widget);
-      toplevel = gtk_widget_get_toplevel (widget);
-      if (gtk_widget_is_toplevel (toplevel))
-       {
-#ifdef GDK_WINDOWING_X11
-          gtk_window_present_with_time (GTK_WINDOW (toplevel),
-          gdk_x11_get_server_time (gtk_widget_get_window (widget)));
-#else
-         gtk_window_present (GTK_WINDOW (toplevel));
-#endif
-       }
-      return TRUE;
-    }
-  else
-    return FALSE;
-}
-
-static void 
-gail_widget_remove_focus_handler (AtkComponent   *component,
-                                  guint          handler_id)
-{
-  g_signal_handler_disconnect (component, handler_id);
-}
-
-static gboolean 
-gail_widget_set_extents (AtkComponent   *component,
-                         gint           x,
-                         gint           y,
-                         gint           width,
-                         gint           height,
-                         AtkCoordType   coord_type)
-{
-  GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component));
-
-  if (widget == NULL)
-    return FALSE;
-
-  if (gtk_widget_is_toplevel (widget))
-    {
-      if (coord_type == ATK_XY_WINDOW)
-        {
-          gint x_current, y_current;
-          GdkWindow *window = gtk_widget_get_window (widget);
-
-          gdk_window_get_origin (window, &x_current, &y_current);
-          x_current += x;
-          y_current += y;
-          if (x_current < 0 || y_current < 0)
-            return FALSE;
-          else
-            {
-              gtk_window_move (GTK_WINDOW (widget), x_current, y_current);
-              gtk_widget_set_size_request (widget, width, height);
-              return TRUE;
-            }
-        }
-      else if (coord_type == ATK_XY_SCREEN)
-        {
-          gtk_window_move (GTK_WINDOW (widget), x, y);
-          gtk_widget_set_size_request (widget, width, height);
-          return TRUE;
-        }
-    }
-  return FALSE;
-}
-
-static gboolean
-gail_widget_set_position (AtkComponent   *component,
-                          gint           x,
-                          gint           y,
-                          AtkCoordType   coord_type)
-{
-  GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component));
-
-  if (widget == NULL)
-    return FALSE;
-
-  if (gtk_widget_is_toplevel (widget))
-    {
-      if (coord_type == ATK_XY_WINDOW)
-        {
-          gint x_current, y_current;
-          GdkWindow *window = gtk_widget_get_window (widget);
-
-          gdk_window_get_origin (window, &x_current, &y_current);
-          x_current += x;
-          y_current += y;
-          if (x_current < 0 || y_current < 0)
-            return FALSE;
-          else
-            {
-              gtk_window_move (GTK_WINDOW (widget), x_current, y_current);
-              return TRUE;
-            }
-        }
-      else if (coord_type == ATK_XY_SCREEN)
-        {
-          gtk_window_move (GTK_WINDOW (widget), x, y);
-          return TRUE;
-        }
-    }
-  return FALSE;
-}
-
-static gboolean 
-gail_widget_set_size (AtkComponent   *component,
-                      gint           width,
-                      gint           height)
-{
-  GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component));
-
-  if (widget == NULL)
-    return FALSE;
-
-  if (gtk_widget_is_toplevel (widget))
-    {
-      gtk_widget_set_size_request (widget, width, height);
-      return TRUE;
-    }
-  else
-   return FALSE;
-}
-
-/*
- * This function is a signal handler for notify_in_event and focus_out_event
- * signal which gets emitted on a GtkWidget.
- */
-static gboolean
-gail_widget_focus_gtk (GtkWidget     *widget,
-                       GdkEventFocus *event)
-{
-  GailWidget *gail_widget;
-  GailWidgetClass *klass;
-
-  gail_widget = GAIL_WIDGET (gtk_widget_get_accessible (widget));
-  klass = GAIL_WIDGET_GET_CLASS (gail_widget);
-  if (klass->focus_gtk)
-    return klass->focus_gtk (widget, event);
-  else
-    return FALSE;
-}
-
-/*
- * This function is the signal handler defined for focus_in_event and
- * focus_out_event got GailWidget.
- *
- * It emits a focus-event signal on the GailWidget.
- */
-static gboolean
-gail_widget_real_focus_gtk (GtkWidget     *widget,
-                            GdkEventFocus *event)
-{
-  AtkObject* accessible;
-  gboolean return_val;
-  return_val = FALSE;
-
-  accessible = gtk_widget_get_accessible (widget);
-  g_signal_emit_by_name (accessible, "focus_event", event->in, &return_val);
-  return FALSE;
-}
-
-static void
-gail_widget_size_allocate_gtk (GtkWidget     *widget,
-                               GtkAllocation *allocation)
-{
-  AtkObject* accessible;
-  AtkRectangle rect;
-
-  accessible = gtk_widget_get_accessible (widget);
-  if (ATK_IS_COMPONENT (accessible))
-    {
-      rect.x = allocation->x;
-      rect.y = allocation->y;
-      rect.width = allocation->width;
-      rect.height = allocation->height;
-      g_signal_emit_by_name (accessible, "bounds_changed", &rect);
-    }
-}
-
-/*
- * This function is the signal handler defined for map and unmap signals.
- */
-static gint
-gail_widget_map_gtk (GtkWidget     *widget)
-{
-  AtkObject* accessible;
-
-  accessible = gtk_widget_get_accessible (widget);
-  atk_object_notify_state_change (accessible, ATK_STATE_SHOWING,
-                                  gtk_widget_get_mapped (widget));
-  return 1;
-}
-
-/*
- * This function is a signal handler for notify signal which gets emitted 
- * when a property changes value on the GtkWidget associated with the object.
- *
- * It calls a function for the GailWidget type
- */
-static void 
-gail_widget_notify_gtk (GObject     *obj,
-                        GParamSpec  *pspec)
-{
-  GailWidget *widget;
-  GailWidgetClass *klass;
-
-  widget = GAIL_WIDGET (gtk_widget_get_accessible (GTK_WIDGET (obj)));
-  klass = GAIL_WIDGET_GET_CLASS (widget);
-  if (klass->notify_gtk)
-    klass->notify_gtk (obj, pspec);
-}
-
-/*
- * This function is a signal handler for notify signal which gets emitted 
- * when a property changes value on the GtkWidget associated with a GailWidget.
- *
- * It constructs an AtkPropertyValues structure and emits a "property_changed"
- * signal which causes the user specified AtkPropertyChangeHandler
- * to be called.
- */
-static void 
-gail_widget_real_notify_gtk (GObject     *obj,
-                             GParamSpec  *pspec)
-{
-  GtkWidget* widget = GTK_WIDGET (obj);
-  AtkObject* atk_obj = gtk_widget_get_accessible (widget);
-  AtkState state;
-  gboolean value;
-
-  if (strcmp (pspec->name, "has-focus") == 0)
-    /*
-     * We use focus-in-event and focus-out-event signals to catch
-     * focus changes so we ignore this.
-     */
-    return;
-  else if (strcmp (pspec->name, "visible") == 0)
-    {
-      state = ATK_STATE_VISIBLE;
-      value = gtk_widget_get_visible (widget);
-    }
-  else if (strcmp (pspec->name, "sensitive") == 0)
-    {
-      state = ATK_STATE_SENSITIVE;
-      value = gtk_widget_get_sensitive (widget);
-    }
-  else if (strcmp (pspec->name, "orientation") == 0)
-    {
-      GtkOrientable *orientable;
-
-      orientable = GTK_ORIENTABLE (widget);
-
-      state = ATK_STATE_HORIZONTAL;
-      value = (gtk_orientable_get_orientation (orientable) == GTK_ORIENTATION_HORIZONTAL);
-    }
-  else
-    return;
-
-  atk_object_notify_state_change (atk_obj, state, value);
-  if (state == ATK_STATE_SENSITIVE)
-    atk_object_notify_state_change (atk_obj, ATK_STATE_ENABLED, value);
-
-  if (state == ATK_STATE_HORIZONTAL)
-    atk_object_notify_state_change (atk_obj, ATK_STATE_VERTICAL, !value);
-}
-
-static void 
-gail_widget_focus_event (AtkObject   *obj,
-                         gboolean    focus_in)
-{
-  AtkObject *focus_obj;
-
-  focus_obj = g_object_get_data (G_OBJECT (obj), "gail-focus-object");
-  if (focus_obj == NULL)
-    focus_obj = obj;
-  atk_object_notify_state_change (focus_obj, ATK_STATE_FOCUSED, focus_in);
-}
-
-static GtkWidget*
-gail_widget_find_viewport (GtkWidget *widget)
-{
-  /*
-   * Find an antecedent which is a GtkViewPort
-   */
-  GtkWidget *parent;
-
-  parent = gtk_widget_get_parent (widget);
-  while (parent != NULL)
-    {
-      if (GTK_IS_VIEWPORT (parent))
-        break;
-      parent = gtk_widget_get_parent (parent);
-    }
-  return parent;
-}
-
-/*
- * This function checks whether the widget has an antecedent which is 
- * a GtkViewport and, if so, whether any part of the widget intersects
- * the visible rectangle of the GtkViewport.
- */ 
-static gboolean gail_widget_on_screen (GtkWidget *widget)
-{
-  GtkAllocation allocation;
-  GtkWidget *viewport;
-  gboolean return_value;
-
-  gtk_widget_get_allocation (widget, &allocation);
-
-  viewport = gail_widget_find_viewport (widget);
-  if (viewport)
-    {
-      GtkAllocation viewport_allocation;
-      GtkAdjustment *adjustment;
-      GdkRectangle visible_rect;
-
-      gtk_widget_get_allocation (viewport, &viewport_allocation);
-
-      adjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (viewport));
-      visible_rect.y = gtk_adjustment_get_value (adjustment);
-      adjustment = gtk_scrollable_get_hadjustment (GTK_SCROLLABLE (viewport));
-      visible_rect.x = gtk_adjustment_get_value (adjustment);
-      visible_rect.width = viewport_allocation.width;
-      visible_rect.height = viewport_allocation.height;
-
-      if (((allocation.x + allocation.width) < visible_rect.x) ||
-         ((allocation.y + allocation.height) < visible_rect.y) ||
-         (allocation.x > (visible_rect.x + visible_rect.width)) ||
-         (allocation.y > (visible_rect.y + visible_rect.height)))
-        return_value = FALSE;
-      else
-        return_value = TRUE;
-    }
-  else
-    {
-      /*
-       * Check whether the widget has been placed of the screen. The
-       * widget may be MAPPED as when toolbar items do not fit on the toolbar.
-       */
-      if (allocation.x + allocation.width <= 0 &&
-          allocation.y + allocation.height <= 0)
-        return_value = FALSE;
-      else 
-        return_value = TRUE;
-    }
-
-  return return_value;
-}
-
-/**
- * gail_widget_all_parents_visible:
- * @widget: a #GtkWidget
- *
- * Checks if all the predecesors (the parent widget, his parent, etc) are visible
- * Used to check properly the SHOWING state.
- *
- * Return value: TRUE if all the parent hierarchy is visible, FALSE otherwise
- **/
-static gboolean gail_widget_all_parents_visible (GtkWidget *widget)
-{
-  GtkWidget *iter_parent = NULL;
-  gboolean result = TRUE;
-
-  for (iter_parent = gtk_widget_get_parent (widget); iter_parent;
-       iter_parent = gtk_widget_get_parent (iter_parent))
-    {
-      if (!gtk_widget_get_visible (iter_parent))
-        {
-          result = FALSE;
-          break;
-        }
-    }
-
-  return result;
-}
-
-static AtkAttributeSet *gail_widget_get_attributes(AtkObject *obj)
-{
-       AtkAttributeSet *attributes;
-       AtkAttribute *toolkit = g_malloc(sizeof(AtkAttribute));
-
-       toolkit->name = g_strdup("toolkit");
-       toolkit->value = g_strdup("gail");
-
-        attributes = g_slist_append(NULL, toolkit);
-
-        return attributes;
-}
index 78f157fe66558b8f636c4ad804b614a487d5e5eb..dbff82a487e81d902e4dde8979afcab9ed12d408 100644 (file)
@@ -25,7 +25,7 @@
 
 static void atk_image_interface_init (AtkImageIface  *iface);
 
-G_DEFINE_TYPE_WITH_CODE (GtkArrowAccessible, gtk_arrow_accessible, GAIL_TYPE_WIDGET,
+G_DEFINE_TYPE_WITH_CODE (GtkArrowAccessible, gtk_arrow_accessible, GTK_TYPE_WIDGET_ACCESSIBLE,
                          G_IMPLEMENT_INTERFACE (ATK_TYPE_IMAGE, atk_image_interface_init))
 
 static void
index ee68c0b83b426c250fc1f63ca20fd7afedb2256b..39b30c8c780a3531ebae3fa7d57265d92555daec 100644 (file)
@@ -20,7 +20,7 @@
 #ifndef __GTK_ARROW_ACCESSIBLE_H__
 #define __GTK_ARROW_ACCESSIBLE_H__
 
-#include "gailwidget.h"
+#include "gtkwidgetaccessible.h"
 
 G_BEGIN_DECLS
 
@@ -36,14 +36,14 @@ typedef struct _GtkArrowAccessibleClass GtkArrowAccessibleClass;
 
 struct _GtkArrowAccessible
 {
-  GailWidget parent;
+  GtkWidgetAccessible parent;
 
   gchar *image_description;
 };
 
 struct _GtkArrowAccessibleClass
 {
-  GailWidgetClass parent_class;
+  GtkWidgetAccessibleClass parent_class;
 };
 
 GType gtk_arrow_accessible_get_type (void);
index 1be1137d160d60467d0a9247bc6b23199051f698..5951b90d5ba98360d9f9f753dfde3536e665796a 100644 (file)
@@ -219,7 +219,7 @@ gtk_button_accessible_notify_gtk (GObject    *obj,
       g_signal_emit_by_name (atk_obj, "visible_data_changed");
     }
   else
-    GAIL_WIDGET_CLASS (gtk_button_accessible_parent_class)->notify_gtk (obj, pspec);
+    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_button_accessible_parent_class)->notify_gtk (obj, pspec);
 }
 
 static void
@@ -227,7 +227,7 @@ gtk_button_accessible_class_init (GtkButtonAccessibleClass *klass)
 {
   AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
   GtkContainerAccessibleClass *container_class = (GtkContainerAccessibleClass*)klass;
-  GailWidgetClass *widget_class = (GailWidgetClass*)klass;
+  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
 
   class->get_name = gtk_button_accessible_get_name;
   class->get_n_children = gtk_button_accessible_get_n_children;
index 7348275a4c10365a6d1773a119896adbce569607..7c2a072d625e084c06b8695fd335f51315699db7 100644 (file)
@@ -102,13 +102,13 @@ gtk_check_menu_item_accessible_notify_gtk (GObject    *obj,
       atk_object_notify_state_change (atk_obj, ATK_STATE_ENABLED, (sensitive && !inconsistent));
     }
   else
-    GAIL_WIDGET_CLASS (gtk_check_menu_item_accessible_parent_class)->notify_gtk (obj, pspec);
+    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_check_menu_item_accessible_parent_class)->notify_gtk (obj, pspec);
 }
 
 static void
 gtk_check_menu_item_accessible_class_init (GtkCheckMenuItemAccessibleClass *klass)
 {
-  GailWidgetClass *widget_class = (GailWidgetClass*)klass;
+  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
   AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
 
   widget_class->notify_gtk = gtk_check_menu_item_accessible_notify_gtk;
index eb55c587c3ece96573cf72193b5f7985fd0212bf..5126ddcc307796d2055c1b45d7c25f9ab769c322 100644 (file)
@@ -103,14 +103,14 @@ gtk_check_submenu_item_accessible_notify_gtk (GObject    *obj,
       atk_object_notify_state_change (atk_obj, ATK_STATE_ENABLED, (sensitive && !inconsistent));
     }
   else
-    GAIL_WIDGET_CLASS (gtk_check_submenu_item_accessible_parent_class)->notify_gtk (obj, pspec);
+    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_check_submenu_item_accessible_parent_class)->notify_gtk (obj, pspec);
 }
 
 static void
 gtk_check_submenu_item_accessible_class_init (GtkCheckSubmenuItemAccessibleClass *klass)
 {
   AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
-  GailWidgetClass *widget_class = (GailWidgetClass*)klass;
+  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
 
   widget_class->notify_gtk = gtk_check_submenu_item_accessible_notify_gtk;
 
index ad475a4187a1f46c36e44c88bc101bda34e248b6..f02020db105c908502ff515c14a24ecf48731e03 100644 (file)
@@ -23,7 +23,7 @@
 #include "gtkcontaineraccessible.h"
 
 
-G_DEFINE_TYPE (GtkContainerAccessible, gtk_container_accessible, GAIL_TYPE_WIDGET)
+G_DEFINE_TYPE (GtkContainerAccessible, gtk_container_accessible, GTK_TYPE_WIDGET_ACCESSIBLE)
 
 static void
 gtk_container_accessible_init (GtkContainerAccessible *container)
index 1e60c6d9e41ab8ce45140ffb97ae2a51c24f6413..bb955d2bca2b280169e1f60d3900ac0c7a94472f 100644 (file)
@@ -20,7 +20,7 @@
 #ifndef __GTK_CONTAINER_ACCESSIBLE_H__
 #define __GTK_CONTAINER_ACCESSIBLE_H__
 
-#include "gailwidget.h"
+#include "gtkwidgetaccessible.h"
 
 G_BEGIN_DECLS
 
@@ -36,14 +36,14 @@ typedef struct _GtkContainerAccessibleClass GtkContainerAccessibleClass;
 
 struct _GtkContainerAccessible
 {
-  GailWidget parent;
+  GtkWidgetAccessible parent;
 
   GList *children;
 };
 
 struct _GtkContainerAccessibleClass
 {
-  GailWidgetClass parent_class;
+  GtkWidgetAccessibleClass parent_class;
 
   gint (*add_gtk)    (GtkContainer *container,
                       GtkWidget    *widget,
index 66b5af7b73a0583dc19a8e380b04f871656f2e12..ff8de78029f1d92eb594f20ddb08ae39232a440a 100644 (file)
@@ -45,7 +45,7 @@ static void atk_text_interface_init          (AtkTextIface         *iface);
 static void atk_action_interface_init        (AtkActionIface       *iface);
 
 
-G_DEFINE_TYPE_WITH_CODE (GtkEntryAccessible, gtk_entry_accessible, GAIL_TYPE_WIDGET,
+G_DEFINE_TYPE_WITH_CODE (GtkEntryAccessible, gtk_entry_accessible, GTK_TYPE_WIDGET_ACCESSIBLE,
                          G_IMPLEMENT_INTERFACE (ATK_TYPE_EDITABLE_TEXT, atk_editable_text_interface_init)
                          G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT, atk_text_interface_init)
                          G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init))
@@ -187,7 +187,7 @@ gtk_entry_accessible_notify_gtk (GObject    *obj,
       atk_object_set_role (atk_obj, new_role);
     }
   else
-    GAIL_WIDGET_CLASS (gtk_entry_accessible_parent_class)->notify_gtk (obj, pspec);
+    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_entry_accessible_parent_class)->notify_gtk (obj, pspec);
 }
 
 static gint
@@ -209,7 +209,7 @@ gtk_entry_accessible_class_init (GtkEntryAccessibleClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   AtkObjectClass  *class = ATK_OBJECT_CLASS (klass);
-  GailWidgetClass *widget_class = (GailWidgetClass*)klass;
+  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
 
   gobject_class->finalize = gtk_entry_accessible_finalize;
 
index f902cb5a12e6731d8df2f57963832989de63c55c..a3d2354cdb85ef830f3bc14656f5aa4ca3521de6 100644 (file)
@@ -20,7 +20,7 @@
 #ifndef __GTK_ENTRY_ACCESSIBLE_H__
 #define __GTK_ENTRY_ACCESSIBLE_H__
 
-#include "gailwidget.h"
+#include "gtkwidgetaccessible.h"
 
 G_BEGIN_DECLS
 
@@ -36,7 +36,7 @@ typedef struct _GtkEntryAccessibleClass GtkEntryAccessibleClass;
 
 struct _GtkEntryAccessible
 {
-  GailWidget parent;
+  GtkWidgetAccessible parent;
 
   gint position_insert;
   gint position_delete;
@@ -48,13 +48,13 @@ struct _GtkEntryAccessible
   guint action_idle_handler;
 };
 
-GType gtk_entry_accessible_get_type (void);
-
 struct _GtkEntryAccessibleClass
 {
-  GailWidgetClass parent_class;
+  GtkWidgetAccessibleClass parent_class;
 };
 
+GType gtk_entry_accessible_get_type (void);
+
 G_END_DECLS
 
 #endif /* __GTK_ENTRY_ACCESSIBLE_H__ */
index 10510f14cfdfa13c38075e7959a37a979dbec215..24a04d97ee08b0d2427349bbfc7ca00635c98265 100644 (file)
@@ -162,7 +162,7 @@ gtk_expander_accessible_notify_gtk (GObject    *obj,
       g_signal_emit_by_name (atk_obj, "visible_data_changed");
     }
   else
-    GAIL_WIDGET_CLASS (gtk_expander_accessible_parent_class)->notify_gtk (obj, pspec);
+    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_expander_accessible_parent_class)->notify_gtk (obj, pspec);
 }
 
 static AtkStateSet*
@@ -195,7 +195,7 @@ static void
 gtk_expander_accessible_class_init (GtkExpanderAccessibleClass *klass)
 {
   AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
-  GailWidgetClass *widget_class = (GailWidgetClass*)klass;
+  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
 
   widget_class->notify_gtk = gtk_expander_accessible_notify_gtk;
 
index 82c3be6bcd2e7bcfdb895dbb989e6f963cba9e14..1432a4c54e6a7f9cd0ee2fd944dcb036d55282ce 100644 (file)
@@ -26,7 +26,7 @@
 
 static void atk_image_interface_init (AtkImageIface  *iface);
 
-G_DEFINE_TYPE_WITH_CODE (GtkImageAccessible, gtk_image_accessible, GAIL_TYPE_WIDGET,
+G_DEFINE_TYPE_WITH_CODE (GtkImageAccessible, gtk_image_accessible, GTK_TYPE_WIDGET_ACCESSIBLE,
                          G_IMPLEMENT_INTERFACE (ATK_TYPE_IMAGE, atk_image_interface_init))
 
 static void
index 1d25859a138b858a6b0137a5fc68740b784c2979..3ed2d760ba2a8102e495fcdbd8b5f8700318ba42 100644 (file)
@@ -20,7 +20,7 @@
 #ifndef __GTK_IMAGE_ACCESSIBLE_H__
 #define __GTK_IMAGE_ACCESSIBLE_H__
 
-#include "gailwidget.h"
+#include "gtkwidgetaccessible.h"
 
 G_BEGIN_DECLS
 
@@ -36,7 +36,7 @@ typedef struct _GtkImageAccessibleClass GtkImageAccessibleClass;
 
 struct _GtkImageAccessible
 {
-  GailWidget parent;
+  GtkWidgetAccessible parent;
 
   gchar*     image_description;
   gchar*     stock_name;
@@ -44,7 +44,7 @@ struct _GtkImageAccessible
 
 struct _GtkImageAccessibleClass
 {
-  GailWidgetClass parent_class;
+  GtkWidgetAccessibleClass parent_class;
 };
 
 GType gtk_image_accessible_get_type (void);
index dc9030152cdf5eb3fe73855fb649871c2281ed19..b839fd0dce15829a9518fa1b842d8c2fa6fe7ff1 100644 (file)
@@ -28,7 +28,7 @@
 
 static void atk_text_interface_init (AtkTextIface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (GtkLabelAccessible, gtk_label_accessible, GAIL_TYPE_WIDGET,
+G_DEFINE_TYPE_WITH_CODE (GtkLabelAccessible, gtk_label_accessible, GTK_TYPE_WIDGET_ACCESSIBLE,
                          G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT, atk_text_interface_init))
 
 static void
@@ -119,7 +119,7 @@ gtk_label_accessible_notify_gtk (GObject    *obj,
       g_signal_emit_by_name (atk_obj, "text_selection_changed");
     }
   else
-    GAIL_WIDGET_CLASS (gtk_label_accessible_parent_class)->notify_gtk (obj, pspec);
+    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_label_accessible_parent_class)->notify_gtk (obj, pspec);
 }
 
 static void
@@ -247,7 +247,7 @@ gtk_label_accessible_class_init (GtkLabelAccessibleClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
-  GailWidgetClass *widget_class = (GailWidgetClass*)klass;
+  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
 
   gobject_class->finalize = gtk_label_accessible_finalize;
 
index 7f4ac76748d7561015912de7a55679091ceb0b2e..90635b74551cdcc6c02b0108ac2c37cc5185b8ee 100644 (file)
@@ -20,7 +20,7 @@
 #ifndef __GTK_LABEL_ACCESSIBLE_H__
 #define __GTK_LABEL_ACCESSIBLE_H__
 
-#include "gailwidget.h"
+#include "gtkwidgetaccessible.h"
 
 G_BEGIN_DECLS
 
@@ -36,14 +36,14 @@ typedef struct _GtkLabelAccessibleClass GtkLabelAccessibleClass;
 
 struct _GtkLabelAccessible
 {
-  GailWidget parent;
+  GtkWidgetAccessible parent;
 
   gchar *text;
 };
 
 struct _GtkLabelAccessibleClass
 {
-  GailWidgetClass parent_class;
+  GtkWidgetAccessibleClass parent_class;
 };
 
 GType gtk_label_accessible_get_type (void);
index e0eb01a6f7a33acb23841a9ebf0cfe8a756d6518..303dafa966396079b5c471a4ecdea3ba8f262e47 100644 (file)
@@ -203,7 +203,7 @@ gtk_menu_item_accessible_notify_gtk (GObject    *obj,
       g_signal_emit_by_name (atk_obj, "visible_data_changed");
     }
   else
-    GAIL_WIDGET_CLASS (gtk_menu_item_accessible_parent_class)->notify_gtk (obj, pspec);
+    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_menu_item_accessible_parent_class)->notify_gtk (obj, pspec);
 }
 
 static void
@@ -211,7 +211,7 @@ gtk_menu_item_accessible_class_init (GtkMenuItemAccessibleClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
-  GailWidgetClass *widget_class = (GailWidgetClass*)klass;
+  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
 
   widget_class->notify_gtk = gtk_menu_item_accessible_notify_gtk;
 
index 0668e007f35ec61ff3048e449b3bba7ecadfb8b5..a26708065d37af20abd9d5730dbb0905e1d11f46 100644 (file)
@@ -280,7 +280,7 @@ gtk_notebook_accessible_notify_gtk (GObject    *obj,
         }
     }
   else
-    GAIL_WIDGET_CLASS (gtk_notebook_accessible_parent_class)->notify_gtk (obj, pspec);
+    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_notebook_accessible_parent_class)->notify_gtk (obj, pspec);
 }
 
 /*
@@ -309,7 +309,7 @@ gtk_notebook_accessible_class_init (GtkNotebookAccessibleClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   AtkObjectClass  *class = ATK_OBJECT_CLASS (klass);
-  GailWidgetClass *widget_class = (GailWidgetClass*)klass;
+  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
   GtkContainerAccessibleClass *container_class = (GtkContainerAccessibleClass*)klass;
 
 
index ba6602570a7b696d10334838d370f803ad790325..bd50c9e23b2cab1a5b0a8c4ec830f1d44962c4ce 100644 (file)
@@ -28,7 +28,7 @@
 
 static void atk_value_interface_init (AtkValueIface  *iface);
 
-G_DEFINE_TYPE_WITH_CODE (GtkProgressBarAccessible, gtk_progress_bar_accessible, GAIL_TYPE_WIDGET,
+G_DEFINE_TYPE_WITH_CODE (GtkProgressBarAccessible, gtk_progress_bar_accessible, GTK_TYPE_WIDGET_ACCESSIBLE,
                          G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE, atk_value_interface_init))
 
 static void
@@ -52,15 +52,13 @@ gtk_progress_bar_accessible_notify_gtk (GObject    *obj,
   if (strcmp (pspec->name, "fraction") == 0)
     g_object_notify (G_OBJECT (accessible), "accessible-value");
   else
-    GAIL_WIDGET_CLASS (gtk_progress_bar_accessible_parent_class)->notify_gtk (obj, pspec);
+    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_progress_bar_accessible_parent_class)->notify_gtk (obj, pspec);
 }
 static void
 gtk_progress_bar_accessible_class_init (GtkProgressBarAccessibleClass *klass)
 {
   AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
-  GailWidgetClass *widget_class;
-
-  widget_class = (GailWidgetClass*)klass;
+  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
 
   widget_class->notify_gtk = gtk_progress_bar_accessible_notify_gtk;
 
index 80241b9eb991d6cecee883d7ffc6571f870081f5..370891beaa0bdb22acea3575cb874e2c0dab9160 100644 (file)
@@ -20,7 +20,7 @@
 #ifndef __GTK_PROGRESS_BAR_ACCESSIBLE_H__
 #define __GTK_PROGRESS_BAR_ACCESSIBLE_H__
 
-#include "gailwidget.h"
+#include "gtkwidgetaccessible.h"
 
 G_BEGIN_DECLS
 
@@ -31,17 +31,17 @@ G_BEGIN_DECLS
 #define GTK_IS_PROGRESS_BAR_ACCESSIBLE_CLASS(klass)               (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PROGRESS_BAR_ACCESSIBLE))
 #define GTK_PROGRESS_BAR_ACCESSIBLE_GET_CLASS(obj)              (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_PROGRESS_BAR_ACCESSIBLE, GtkProgressBarAccessibleClass))
 
-typedef struct _GtkProgressBarAccessible         GtkProgressBarAccessible;
-typedef struct _GtkProgressBarAccessibleClass   GtkProgressBarAccessibleClass;
+typedef struct _GtkProgressBarAccessible      GtkProgressBarAccessible;
+typedef struct _GtkProgressBarAccessibleClass GtkProgressBarAccessibleClass;
 
 struct _GtkProgressBarAccessible
 {
-  GailWidget parent;
+  GtkWidgetAccessible parent;
 };
 
 struct _GtkProgressBarAccessibleClass
 {
-  GailWidgetClass parent_class;
+  GtkWidgetAccessibleClass parent_class;
 };
 
 GType gtk_progress_bar_accessible_get_type (void);
index e4b2dbe46b89fc6c8363f8391696ab2929f36c22..7e246e36b5128027cb99d6cddf8bf3e50ece9392 100644 (file)
@@ -27,7 +27,7 @@
 static void atk_action_interface_init (AtkActionIface *iface);
 static void atk_value_interface_init  (AtkValueIface  *iface);
 
-G_DEFINE_TYPE_WITH_CODE (GtkRangeAccessible, gtk_range_accessible, GAIL_TYPE_WIDGET,
+G_DEFINE_TYPE_WITH_CODE (GtkRangeAccessible, gtk_range_accessible, GTK_TYPE_WIDGET_ACCESSIBLE,
                          G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)
                          G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE, atk_value_interface_init))
 
@@ -109,7 +109,7 @@ gtk_range_accessible_notify_gtk (GObject    *obj,
                         range);
     }
   else
-    GAIL_WIDGET_CLASS (gtk_range_accessible_parent_class)->notify_gtk (obj, pspec);
+    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_range_accessible_parent_class)->notify_gtk (obj, pspec);
 }
 
 
@@ -118,7 +118,7 @@ gtk_range_accessible_class_init (GtkRangeAccessibleClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
-  GailWidgetClass *widget_class = (GailWidgetClass*)klass;
+  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
 
   widget_class->notify_gtk = gtk_range_accessible_notify_gtk;
 
index 145193648108258e614f1bb9bd56f299277a3c08..9ba66a4bcfa1e8d3d3059c982489e7a77c4375c8 100644 (file)
@@ -20,7 +20,7 @@
 #ifndef __GTK_RANGE_ACCESSIBLE_H__
 #define __GTK_RANGE_ACCESSIBLE_H__
 
-#include "gailwidget.h"
+#include "gtkwidgetaccessible.h"
 
 G_BEGIN_DECLS
 
@@ -36,14 +36,14 @@ typedef struct _GtkRangeAccessibleClass GtkRangeAccessibleClass;
 
 struct _GtkRangeAccessible
 {
-  GailWidget parent;
+  GtkWidgetAccessible parent;
 
   guint action_idle_handler;
 };
 
 struct _GtkRangeAccessibleClass
 {
-  GailWidgetClass parent_class;
+  GtkWidgetAccessibleClass parent_class;
 };
 
 GType gtk_range_accessible_get_type (void);
index c5e33e4198fe0ed41f36c961ccea14a31a11c736..2d0c166e71b3e498738547188fc235c7c96695a6 100644 (file)
@@ -79,7 +79,7 @@ gtk_scale_button_accessible_notify_gtk (GObject    *obj,
     }
   else
     {
-      GAIL_WIDGET_CLASS (gtk_scale_button_accessible_parent_class)->notify_gtk (obj, pspec);
+      GTK_WIDGET_ACCESSIBLE_CLASS (gtk_scale_button_accessible_parent_class)->notify_gtk (obj, pspec);
     }
 }
 
@@ -87,7 +87,7 @@ static void
 gtk_scale_button_accessible_class_init (GtkScaleButtonAccessibleClass *klass)
 {
   AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS (klass);
-  GailWidgetClass *widget_class = GAIL_WIDGET_CLASS (klass);
+  GtkWidgetAccessibleClass *widget_class = GTK_WIDGET_ACCESSIBLE_CLASS (klass);
 
   atk_object_class->initialize = gtk_scale_button_accessible_initialize;
 
index 1f13de91599f1821ee58ea9617aa3d8f1dc9e3eb..85c24e3b1da4ad7c0f53d2145077b0c6929a3925 100644 (file)
@@ -79,7 +79,7 @@ gtk_spin_button_accessible_notify_gtk (GObject    *obj,
                         spin_button);
     }
   else
-    GAIL_WIDGET_CLASS (gtk_spin_button_accessible_parent_class)->notify_gtk (obj, pspec);
+    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_spin_button_accessible_parent_class)->notify_gtk (obj, pspec);
 }
 
 
@@ -88,9 +88,7 @@ static void
 gtk_spin_button_accessible_class_init (GtkSpinButtonAccessibleClass *klass)
 {
   AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
-  GailWidgetClass *widget_class;
-
-  widget_class = (GailWidgetClass*)klass;
+  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
 
   widget_class->notify_gtk = gtk_spin_button_accessible_notify_gtk;
 
index f98021b7fe1f536001cdde4b12dc9fa81b31dfc3..db29d9dcf6263f6c97fb52bde747fe1974fe8ae7 100644 (file)
@@ -101,7 +101,7 @@ gtk_text_view_accessible_notify_gtk (GObject    *obj,
       setup_buffer (GTK_TEXT_VIEW (obj), GTK_TEXT_VIEW_ACCESSIBLE (atk_obj));
     }
   else
-    GAIL_WIDGET_CLASS (gtk_text_view_accessible_parent_class)->notify_gtk (obj, pspec);
+    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_text_view_accessible_parent_class)->notify_gtk (obj, pspec);
 }
 
 static AtkStateSet*
@@ -128,9 +128,7 @@ gtk_text_view_accessible_class_init (GtkTextViewAccessibleClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   AtkObjectClass  *class = ATK_OBJECT_CLASS (klass);
-  GailWidgetClass *widget_class;
-
-  widget_class = (GailWidgetClass*)klass;
+  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
 
   gobject_class->finalize = gtk_text_view_accessible_finalize;
 
index b742a96d8a28a6221cf22cb4798ed53a188485f1..c18e3f08578972c2adda69b2940c0a08989b7166 100644 (file)
@@ -79,7 +79,7 @@ gtk_toggle_button_accessible_notify_gtk (GObject    *obj,
       atk_object_notify_state_change (atk_obj, ATK_STATE_ENABLED, (sensitive && !inconsistent));
     }
   else
-    GAIL_WIDGET_CLASS (gtk_toggle_button_accessible_parent_class)->notify_gtk (obj, pspec);
+    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_toggle_button_accessible_parent_class)->notify_gtk (obj, pspec);
 }
 
 static AtkStateSet*
@@ -111,10 +111,9 @@ gtk_toggle_button_accessible_ref_state_set (AtkObject *accessible)
 static void
 gtk_toggle_button_accessible_class_init (GtkToggleButtonAccessibleClass *klass)
 {
-  GailWidgetClass *widget_class;
   AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
+  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
 
-  widget_class = (GailWidgetClass*)klass;
   widget_class->notify_gtk = gtk_toggle_button_accessible_notify_gtk;
 
   class->ref_state_set = gtk_toggle_button_accessible_ref_state_set;
index 86ef72e45b19c834b647523ab40d925e5b4a97da..fb8ae4760648d6be10c122a72bea901e8b140a21 100644 (file)
@@ -395,7 +395,7 @@ gtk_tree_view_accessible_notify_gtk (GObject    *obj,
       g_signal_connect (adj, "value-changed", G_CALLBACK (adjustment_changed), tree_view);
     }
   else
-    GAIL_WIDGET_CLASS (gtk_tree_view_accessible_parent_class)->notify_gtk (obj, pspec);
+    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_tree_view_accessible_parent_class)->notify_gtk (obj, pspec);
 }
 
 static void
@@ -722,13 +722,9 @@ gtk_tree_view_accessible_class_init (GtkTreeViewAccessibleClass *klass)
 {
   AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  GtkAccessibleClass *accessible_class;
-  GailWidgetClass *widget_class;
-  GtkContainerAccessibleClass *container_class;
-
-  accessible_class = (GtkAccessibleClass*)klass;
-  widget_class = (GailWidgetClass*)klass;
-  container_class = (GtkContainerAccessibleClass*)klass;
+  GtkAccessibleClass *accessible_class = (GtkAccessibleClass*)klass;
+  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
+  GtkContainerAccessibleClass *container_class = (GtkContainerAccessibleClass*)klass;
 
   class->get_n_children = gtk_tree_view_accessible_get_n_children;
   class->ref_child = gtk_tree_view_accessible_ref_child;
diff --git a/gtk/a11y/gtkwidgetaccessible.c b/gtk/a11y/gtkwidgetaccessible.c
new file mode 100644 (file)
index 0000000..2b5ce86
--- /dev/null
@@ -0,0 +1,902 @@
+/* GAIL - The GNOME Accessibility Implementation Library
+ * Copyright 2001, 2002, 2003 Sun Microsystems Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <gtk/gtk.h>
+#ifdef GDK_WINDOWING_X11
+#include <gdk/x11/gdkx.h>
+#endif
+#include "gtkwidgetaccessible.h"
+#include "gtknotebookpageaccessible.h"
+
+extern GtkWidget *focus_widget;
+
+
+static gboolean gtk_widget_accessible_on_screen           (GtkWidget *widget);
+static gboolean gtk_widget_accessible_all_parents_visible (GtkWidget *widget);
+
+static void atk_component_interface_init (AtkComponentIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (GtkWidgetAccessible, gtk_widget_accessible, GTK_TYPE_ACCESSIBLE,
+                         G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT, atk_component_interface_init))
+
+/* Translate GtkWidget::focus-in/out-event to the focus_gtk vfunc */
+static gboolean
+focus_cb (GtkWidget     *widget,
+          GdkEventFocus *event)
+{
+  GtkWidgetAccessible *accessible;
+  GtkWidgetAccessibleClass *klass;
+
+  accessible = GTK_WIDGET_ACCESSIBLE (gtk_widget_get_accessible (widget));
+  klass = GTK_WIDGET_ACCESSIBLE_GET_CLASS (accessible);
+  if (klass->focus_gtk)
+    return klass->focus_gtk (widget, event);
+  else
+    return FALSE;
+}
+
+/* Translate GtkWidget property change notification to the notify_gtk vfunc */
+static void
+notify_cb (GObject    *obj,
+           GParamSpec *pspec)
+{
+  GtkWidgetAccessible *widget;
+  GtkWidgetAccessibleClass *klass;
+
+  widget = GTK_WIDGET_ACCESSIBLE (gtk_widget_get_accessible (GTK_WIDGET (obj)));
+  klass = GTK_WIDGET_ACCESSIBLE_GET_CLASS (widget);
+  if (klass->notify_gtk)
+    klass->notify_gtk (obj, pspec);
+}
+
+/* Translate GtkWidget::size-allocate to AtkComponent::bounds-changed */
+static void
+size_allocate_cb (GtkWidget     *widget,
+                  GtkAllocation *allocation)
+{
+  AtkObject* accessible;
+  AtkRectangle rect;
+
+  accessible = gtk_widget_get_accessible (widget);
+  if (ATK_IS_COMPONENT (accessible))
+    {
+      rect.x = allocation->x;
+      rect.y = allocation->y;
+      rect.width = allocation->width;
+      rect.height = allocation->height;
+      g_signal_emit_by_name (accessible, "bounds_changed", &rect);
+    }
+}
+
+/* Translate GtkWidget mapped state into AtkObject showing */
+static gint
+map_cb (GtkWidget *widget)
+{
+  AtkObject *accessible;
+
+  accessible = gtk_widget_get_accessible (widget);
+  atk_object_notify_state_change (accessible, ATK_STATE_SHOWING,
+                                  gtk_widget_get_mapped (widget));
+  return 1;
+}
+
+static void
+focus_event (AtkObject *obj,
+             gboolean   focus_in)
+{
+  AtkObject *focus_obj;
+
+  focus_obj = g_object_get_data (G_OBJECT (obj), "gail-focus-object");
+  if (focus_obj == NULL)
+    focus_obj = obj;
+  atk_object_notify_state_change (focus_obj, ATK_STATE_FOCUSED, focus_in);
+}
+
+static void
+gtk_widget_accessible_initialize (AtkObject *obj,
+                                  gpointer   data)
+{
+  GtkAccessible *accessible;
+  GtkWidget *widget;
+
+  widget = GTK_WIDGET (data);
+
+  accessible = GTK_ACCESSIBLE (obj);
+  gtk_accessible_set_widget (accessible, widget);
+  gtk_accessible_connect_widget_destroyed (accessible);
+  g_signal_connect_after (widget, "focus-in-event", G_CALLBACK (focus_cb), NULL);
+  g_signal_connect_after (widget, "focus-out-event", G_CALLBACK (focus_cb), NULL);
+  g_signal_connect (widget, "notify", G_CALLBACK (notify_cb), NULL);
+  g_signal_connect (widget, "size-allocate", G_CALLBACK (size_allocate_cb), NULL);
+  g_signal_connect (widget, "map", G_CALLBACK (map_cb), NULL);
+  g_signal_connect (widget, "unmap", G_CALLBACK (map_cb), NULL);
+
+  atk_component_add_focus_handler (ATK_COMPONENT (accessible), focus_event);
+  g_object_set_data (G_OBJECT (obj), "atk-component-layer", GINT_TO_POINTER (ATK_LAYER_WIDGET));
+
+  obj->role = ATK_ROLE_UNKNOWN;
+}
+
+static void
+gtk_widget_accessible_destroyed (GtkWidget     *widget,
+                                 GtkAccessible *accessible)
+{
+  gtk_accessible_set_widget (accessible, NULL);
+  atk_object_notify_state_change (ATK_OBJECT (accessible), ATK_STATE_DEFUNCT, TRUE);
+}
+
+static void
+gtk_widget_accessible_connect_widget_destroyed (GtkAccessible *accessible)
+{
+  GtkWidget *widget;
+
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
+  if (widget)
+    g_signal_connect_after (widget, "destroy",
+                            G_CALLBACK (gtk_widget_accessible_destroyed), accessible);
+}
+
+static const gchar *
+gtk_widget_accessible_get_description (AtkObject *accessible)
+{
+  GtkWidget *widget;
+
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
+  if (widget == NULL)
+    return NULL;
+
+  if (accessible->description)
+    return accessible->description;
+
+  return gtk_widget_get_tooltip_text (widget);
+}
+
+static AtkObject *
+gtk_widget_accessible_get_parent (AtkObject *accessible)
+{
+  AtkObject *parent;
+  GtkWidget *widget, *parent_widget;
+
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
+  if (widget == NULL)
+    return NULL;
+
+  parent = accessible->accessible_parent;
+  if (parent != NULL)
+    return parent;
+
+  parent_widget = gtk_widget_get_parent (widget);
+  if (parent_widget == NULL)
+    return NULL;
+
+  /* For a widget whose parent is a GtkNoteBook, we return the
+   * accessible object corresponding the GtkNotebookPage containing
+   * the widget as the accessible parent.
+   */
+  if (GTK_IS_NOTEBOOK (parent_widget))
+    {
+      gint page_num;
+      GtkWidget *child;
+      GtkNotebook *notebook;
+
+      page_num = 0;
+      notebook = GTK_NOTEBOOK (parent_widget);
+      while (TRUE)
+        {
+          child = gtk_notebook_get_nth_page (notebook, page_num);
+          if (!child)
+            break;
+          if (child == widget)
+            {
+              parent = gtk_widget_get_accessible (parent_widget);
+              parent = atk_object_ref_accessible_child (parent, page_num);
+              g_object_unref (parent);
+              return parent;
+            }
+          page_num++;
+        }
+    }
+  parent = gtk_widget_get_accessible (parent_widget);
+  return parent;
+}
+
+static GtkWidget *
+find_label (GtkWidget *widget)
+{
+  GList *labels;
+  GtkWidget *label;
+  GtkWidget *temp_widget;
+
+  labels = gtk_widget_list_mnemonic_labels (widget);
+  label = NULL;
+  if (labels)
+    {
+      if (labels->data)
+        {
+          if (labels->next)
+            g_warning ("Widget (%s) has more than one label", G_OBJECT_TYPE_NAME (widget));
+          else
+            label = labels->data;
+        }
+      g_list_free (labels);
+    }
+
+  /* Ignore a label within a button; bug #136602 */
+  if (label && GTK_IS_BUTTON (widget))
+    {
+      temp_widget = label;
+      while (temp_widget)
+        {
+          if (temp_widget == widget)
+            {
+              label = NULL;
+              break;
+            }
+          temp_widget = gtk_widget_get_parent (temp_widget);
+        }
+    }
+  return label;
+}
+
+static AtkRelationSet *
+gtk_widget_accessible_ref_relation_set (AtkObject *obj)
+{
+  GtkWidget *widget;
+  AtkRelationSet *relation_set;
+  GtkWidget *label;
+  AtkObject *array[1];
+  AtkRelation* relation;
+
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj));
+  if (widget == NULL)
+    return NULL;
+
+  relation_set = ATK_OBJECT_CLASS (gtk_widget_accessible_parent_class)->ref_relation_set (obj);
+
+  if (GTK_IS_BOX (widget))
+    return relation_set;
+
+  if (!atk_relation_set_contains (relation_set, ATK_RELATION_LABELLED_BY))
+    {
+      label = find_label (widget);
+      if (label == NULL)
+        {
+          if (GTK_IS_BUTTON (widget))
+            /*
+             * Handle the case where GnomeIconEntry is the mnemonic widget.
+             * The GtkButton which is a grandchild of the GnomeIconEntry
+             * should really be the mnemonic widget. See bug #133967.
+             */
+            {
+              GtkWidget *temp_widget;
+
+              temp_widget = gtk_widget_get_parent (widget);
+
+              if (GTK_IS_ALIGNMENT (temp_widget))
+                {
+                  temp_widget = gtk_widget_get_parent (temp_widget);
+                  if (GTK_IS_BOX (temp_widget))
+                    {
+                      label = find_label (temp_widget);
+                      if (!label)
+                        label = find_label (gtk_widget_get_parent (temp_widget));
+                    }
+                }
+            }
+          else if (GTK_IS_COMBO_BOX (widget))
+            /*
+             * Handle the case when GtkFileChooserButton is the mnemonic
+             * widget.  The GtkComboBox which is a child of the
+             * GtkFileChooserButton should be the mnemonic widget.
+             * See bug #359843.
+             */
+            {
+              GtkWidget *temp_widget;
+
+              temp_widget = gtk_widget_get_parent (widget);
+              if (GTK_IS_BOX (temp_widget))
+                {
+                  label = find_label (temp_widget);
+                }
+            }
+        }
+
+      if (label)
+        {
+          array[0] = gtk_widget_get_accessible (label);
+
+          relation = atk_relation_new (array, 1, ATK_RELATION_LABELLED_BY);
+          atk_relation_set_add (relation_set, relation);
+          g_object_unref (relation);
+        }
+    }
+
+  return relation_set;
+}
+
+static AtkStateSet *
+gtk_widget_accessible_ref_state_set (AtkObject *accessible)
+{
+  GtkWidget *widget;
+  AtkStateSet *state_set;
+
+  state_set = ATK_OBJECT_CLASS (gtk_widget_accessible_parent_class)->ref_state_set (accessible);
+
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
+  if (widget == NULL)
+    atk_state_set_add_state (state_set, ATK_STATE_DEFUNCT);
+  else
+    {
+      if (gtk_widget_is_sensitive (widget))
+        {
+          atk_state_set_add_state (state_set, ATK_STATE_SENSITIVE);
+          atk_state_set_add_state (state_set, ATK_STATE_ENABLED);
+        }
+  
+      if (gtk_widget_get_can_focus (widget))
+        {
+          atk_state_set_add_state (state_set, ATK_STATE_FOCUSABLE);
+        }
+      /*
+       * We do not currently generate notifications when an ATK object
+       * corresponding to a GtkWidget changes visibility by being scrolled
+       * on or off the screen.  The testcase for this is the main window
+       * of the testgtk application in which a set of buttons in a GtkVBox
+       * is in a scrolled window with a viewport.
+       *
+       * To generate the notifications we would need to do the following:
+       * 1) Find the GtkViewport among the ancestors of the objects
+       * 2) Create an accessible for the viewport
+       * 3) Connect to the value-changed signal on the viewport
+       * 4) When the signal is received we need to traverse the children
+       *    of the viewport and check whether the children are visible or not
+       *    visible; we may want to restrict this to the widgets for which
+       *    accessible objects have been created.
+       * 5) We probably need to store a variable on_screen in the
+       *    GtkWidgetAccessible data structure so we can determine whether
+       *    the value has changed.
+       */
+      if (gtk_widget_get_visible (widget))
+        {
+          atk_state_set_add_state (state_set, ATK_STATE_VISIBLE);
+          if (gtk_widget_accessible_on_screen (widget) &&
+              gtk_widget_get_mapped (widget) &&
+              gtk_widget_accessible_all_parents_visible (widget))
+            atk_state_set_add_state (state_set, ATK_STATE_SHOWING);
+        }
+
+      if (gtk_widget_has_focus (widget) && (widget == focus_widget))
+        {
+          AtkObject *focus_obj;
+
+          focus_obj = g_object_get_data (G_OBJECT (accessible), "gail-focus-object");
+          if (focus_obj == NULL)
+            atk_state_set_add_state (state_set, ATK_STATE_FOCUSED);
+        }
+
+      if (gtk_widget_has_default (widget))
+        atk_state_set_add_state (state_set, ATK_STATE_DEFAULT);
+
+      if (GTK_IS_ORIENTABLE (widget))
+        {
+          if (gtk_orientable_get_orientation (GTK_ORIENTABLE (widget)) == GTK_ORIENTATION_HORIZONTAL)
+            atk_state_set_add_state (state_set, ATK_STATE_HORIZONTAL);
+          else
+            atk_state_set_add_state (state_set, ATK_STATE_VERTICAL);
+        }
+    }
+  return state_set;
+}
+
+static gint
+gtk_widget_accessible_get_index_in_parent (AtkObject *accessible)
+{
+  GtkWidget *widget;
+  GtkWidget *parent_widget;
+  gint index;
+  GList *children;
+
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
+
+  if (widget == NULL)
+    return -1;
+
+  if (accessible->accessible_parent)
+    {
+      AtkObject *parent;
+
+      parent = accessible->accessible_parent;
+
+      if (GTK_IS_NOTEBOOK_PAGE_ACCESSIBLE (parent))
+        return 0;
+      else
+        {
+          gint n_children, i;
+          gboolean found = FALSE;
+
+          n_children = atk_object_get_n_accessible_children (parent);
+          for (i = 0; i < n_children; i++)
+            {
+              AtkObject *child;
+
+              child = atk_object_ref_accessible_child (parent, i);
+              if (child == accessible)
+                found = TRUE;
+
+              g_object_unref (child);
+              if (found)
+                return i;
+            }
+        }
+    }
+
+  if (!GTK_IS_WIDGET (widget))
+    return -1;
+  parent_widget = gtk_widget_get_parent (widget);
+  if (!GTK_IS_CONTAINER (parent_widget))
+    return -1;
+
+  children = gtk_container_get_children (GTK_CONTAINER (parent_widget));
+
+  index = g_list_index (children, widget);
+  g_list_free (children);
+  return index;
+}
+
+/* This function is the default implementation for the notify_gtk
+ * vfunc which gets called when a property changes value on the
+ * GtkWidget associated with a GtkWidgetAccessible. It constructs
+ * an AtkPropertyValues structure and emits a "property_changed"
+ * signal which causes the user specified AtkPropertyChangeHandler
+ * to be called.
+ */
+static void
+gtk_widget_accessible_notify_gtk (GObject    *obj,
+                                  GParamSpec *pspec)
+{
+  GtkWidget* widget = GTK_WIDGET (obj);
+  AtkObject* atk_obj = gtk_widget_get_accessible (widget);
+  AtkState state;
+  gboolean value;
+
+  if (strcmp (pspec->name, "has-focus") == 0)
+    /*
+     * We use focus-in-event and focus-out-event signals to catch
+     * focus changes so we ignore this.
+     */
+    return;
+  else if (strcmp (pspec->name, "visible") == 0)
+    {
+      state = ATK_STATE_VISIBLE;
+      value = gtk_widget_get_visible (widget);
+    }
+  else if (strcmp (pspec->name, "sensitive") == 0)
+    {
+      state = ATK_STATE_SENSITIVE;
+      value = gtk_widget_get_sensitive (widget);
+    }
+  else if (strcmp (pspec->name, "orientation") == 0)
+    {
+      GtkOrientable *orientable;
+
+      orientable = GTK_ORIENTABLE (widget);
+
+      state = ATK_STATE_HORIZONTAL;
+      value = (gtk_orientable_get_orientation (orientable) == GTK_ORIENTATION_HORIZONTAL);
+    }
+  else
+    return;
+
+  atk_object_notify_state_change (atk_obj, state, value);
+  if (state == ATK_STATE_SENSITIVE)
+    atk_object_notify_state_change (atk_obj, ATK_STATE_ENABLED, value);
+
+  if (state == ATK_STATE_HORIZONTAL)
+    atk_object_notify_state_change (atk_obj, ATK_STATE_VERTICAL, !value);
+}
+
+/* This function is the default implementation for the focus_gtk
+ * vfunc which gets called for focus_in/out_event.
+ *
+ * It emits a focus-event signal on the GtkWidgetAccessible.
+ */
+static gboolean
+gtk_widget_accessible_focus_gtk (GtkWidget     *widget,
+                                 GdkEventFocus *event)
+{
+  AtkObject* accessible;
+  gboolean return_val;
+  return_val = FALSE;
+
+  accessible = gtk_widget_get_accessible (widget);
+  g_signal_emit_by_name (accessible, "focus_event", event->in, &return_val);
+  return FALSE;
+}
+
+static AtkAttributeSet *
+gtk_widget_accessible_get_attributes (AtkObject *obj)
+{
+  AtkAttributeSet *attributes;
+  AtkAttribute *toolkit;
+
+  toolkit = g_new (AtkAttribute, 1);
+  toolkit->name = g_strdup ("toolkit");
+  toolkit->value = g_strdup ("gail");
+
+  attributes = g_slist_append (NULL, toolkit);
+
+  return attributes;
+}
+
+static void
+gtk_widget_accessible_class_init (GtkWidgetAccessibleClass *klass)
+{
+  AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
+  GtkAccessibleClass *accessible_class = GTK_ACCESSIBLE_CLASS (klass);
+
+  klass->notify_gtk = gtk_widget_accessible_notify_gtk;
+  klass->focus_gtk = gtk_widget_accessible_focus_gtk;
+
+  accessible_class->connect_widget_destroyed = gtk_widget_accessible_connect_widget_destroyed;
+
+  class->get_description = gtk_widget_accessible_get_description;
+  class->get_parent = gtk_widget_accessible_get_parent;
+  class->ref_relation_set = gtk_widget_accessible_ref_relation_set;
+  class->ref_state_set = gtk_widget_accessible_ref_state_set;
+  class->get_index_in_parent = gtk_widget_accessible_get_index_in_parent;
+  class->initialize = gtk_widget_accessible_initialize;
+  class->get_attributes = gtk_widget_accessible_get_attributes;
+}
+
+static void
+gtk_widget_accessible_init (GtkWidgetAccessible *accessible)
+{
+}
+
+static guint
+gtk_widget_accessible_add_focus_handler (AtkComponent    *component,
+                                         AtkFocusHandler  handler)
+{
+  GSignalMatchType match_type;
+  gulong ret;
+  guint signal_id;
+
+  match_type = G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC;
+  signal_id = g_signal_lookup ("focus-event", ATK_TYPE_OBJECT);
+
+  ret = g_signal_handler_find (component, match_type, signal_id, 0, NULL,
+                               (gpointer) handler, NULL);
+  if (!ret)
+    return g_signal_connect_closure_by_id (component,
+                                           signal_id, 0,
+                                           g_cclosure_new (G_CALLBACK (handler),
+                                           NULL,
+                                           (GClosureNotify) NULL),
+                                           FALSE);
+  else
+    return 0;
+}
+
+static void
+gtk_widget_accessible_get_extents (AtkComponent   *component,
+                                   gint           *x,
+                                   gint           *y,
+                                   gint           *width,
+                                   gint           *height,
+                                   AtkCoordType    coord_type)
+{
+  GdkWindow *window;
+  gint x_window, y_window;
+  gint x_toplevel, y_toplevel;
+  GtkWidget *widget;
+  GtkAllocation allocation;
+
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component));
+  if (widget == NULL)
+    return;
+
+  gtk_widget_get_allocation (widget, &allocation);
+  *width = allocation.width;
+  *height = allocation.height;
+  if (!gtk_widget_accessible_on_screen (widget) || (!gtk_widget_is_drawable (widget)))
+    {
+      *x = G_MININT;
+      *y = G_MININT;
+      return;
+    }
+
+  if (gtk_widget_get_parent (widget))
+    {
+      *x = allocation.x;
+      *y = allocation.y;
+      window = gtk_widget_get_parent_window (widget);
+    }
+  else
+    {
+      *x = 0;
+      *y = 0;
+      window = gtk_widget_get_window (widget);
+    }
+  gdk_window_get_origin (window, &x_window, &y_window);
+  *x += x_window;
+  *y += y_window;
+
+  if (coord_type == ATK_XY_WINDOW)
+    {
+      window = gdk_window_get_toplevel (gtk_widget_get_window (widget));
+      gdk_window_get_origin (window, &x_toplevel, &y_toplevel);
+
+      *x -= x_toplevel;
+      *y -= y_toplevel;
+    }
+}
+
+static void
+gtk_widget_accessible_get_size (AtkComponent *component,
+                                gint         *width,
+                                gint         *height)
+{
+  GtkWidget *widget;
+
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component));
+  if (widget == NULL)
+    return;
+
+  *width = gtk_widget_get_allocated_width (widget);
+  *height = gtk_widget_get_allocated_height (widget);
+}
+
+static AtkLayer
+gtk_widget_accessible_get_layer (AtkComponent *component)
+{
+  gint layer;
+
+  layer = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (component), "atk-component-layer"));
+
+  return (AtkLayer) layer;
+}
+
+static gboolean
+gtk_widget_accessible_grab_focus (AtkComponent *component)
+{
+  GtkWidget *widget;
+  GtkWidget *toplevel;
+
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component));
+  if (!widget)
+    return FALSE;
+
+  if (!gtk_widget_get_can_focus (widget))
+    return FALSE;
+
+  gtk_widget_grab_focus (widget);
+  toplevel = gtk_widget_get_toplevel (widget);
+  if (gtk_widget_is_toplevel (toplevel))
+    {
+#ifdef GDK_WINDOWING_X11
+      gtk_window_present_with_time (GTK_WINDOW (toplevel),
+      gdk_x11_get_server_time (gtk_widget_get_window (widget)));
+#else
+      gtk_window_present (GTK_WINDOW (toplevel));
+#endif
+    }
+  return TRUE;
+}
+
+static void
+gtk_widget_accessible_remove_focus_handler (AtkComponent *component,
+                                            guint         handler_id)
+{
+  g_signal_handler_disconnect (component, handler_id);
+}
+
+static gboolean
+gtk_widget_accessible_set_extents (AtkComponent *component,
+                                   gint          x,
+                                   gint          y,
+                                   gint          width,
+                                   gint          height,
+                                   AtkCoordType  coord_type)
+{
+  GtkWidget *widget;
+
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component));
+  if (widget == NULL)
+    return FALSE;
+
+  if (!gtk_widget_is_toplevel (widget))
+    return FALSE;
+
+  if (coord_type == ATK_XY_WINDOW)
+    {
+      gint x_current, y_current;
+      GdkWindow *window = gtk_widget_get_window (widget);
+
+      gdk_window_get_origin (window, &x_current, &y_current);
+      x_current += x;
+      y_current += y;
+      if (x_current < 0 || y_current < 0)
+        return FALSE;
+      else
+        {
+          gtk_window_move (GTK_WINDOW (widget), x_current, y_current);
+          gtk_widget_set_size_request (widget, width, height);
+          return TRUE;
+        }
+    }
+  else if (coord_type == ATK_XY_SCREEN)
+    {
+      gtk_window_move (GTK_WINDOW (widget), x, y);
+      gtk_widget_set_size_request (widget, width, height);
+      return TRUE;
+    }
+  return FALSE;
+}
+
+static gboolean
+gtk_widget_accessible_set_position (AtkComponent *component,
+                                    gint          x,
+                                    gint          y,
+                                    AtkCoordType  coord_type)
+{
+  GtkWidget *widget;
+
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component));
+  if (widget == NULL)
+    return FALSE;
+
+  if (gtk_widget_is_toplevel (widget))
+    {
+      if (coord_type == ATK_XY_WINDOW)
+        {
+          gint x_current, y_current;
+          GdkWindow *window = gtk_widget_get_window (widget);
+
+          gdk_window_get_origin (window, &x_current, &y_current);
+          x_current += x;
+          y_current += y;
+          if (x_current < 0 || y_current < 0)
+            return FALSE;
+          else
+            {
+              gtk_window_move (GTK_WINDOW (widget), x_current, y_current);
+              return TRUE;
+            }
+        }
+      else if (coord_type == ATK_XY_SCREEN)
+        {
+          gtk_window_move (GTK_WINDOW (widget), x, y);
+          return TRUE;
+        }
+    }
+  return FALSE;
+}
+
+static gboolean
+gtk_widget_accessible_set_size (AtkComponent *component,
+                                gint          width,
+                                gint          height)
+{
+  GtkWidget *widget;
+
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component));
+  if (widget == NULL)
+    return FALSE;
+
+  if (gtk_widget_is_toplevel (widget))
+    {
+      gtk_widget_set_size_request (widget, width, height);
+      return TRUE;
+    }
+  else
+   return FALSE;
+}
+
+static void
+atk_component_interface_init (AtkComponentIface *iface)
+{
+  iface->add_focus_handler = gtk_widget_accessible_add_focus_handler;
+  iface->get_extents = gtk_widget_accessible_get_extents;
+  iface->get_size = gtk_widget_accessible_get_size;
+  iface->get_layer = gtk_widget_accessible_get_layer;
+  iface->grab_focus = gtk_widget_accessible_grab_focus;
+  iface->remove_focus_handler = gtk_widget_accessible_remove_focus_handler;
+  iface->set_extents = gtk_widget_accessible_set_extents;
+  iface->set_position = gtk_widget_accessible_set_position;
+  iface->set_size = gtk_widget_accessible_set_size;
+}
+
+/* This function checks whether the widget has an ancestor which is
+ * a GtkViewport and, if so, whether any part of the widget intersects
+ * the visible rectangle of the GtkViewport.
+ */
+static gboolean
+gtk_widget_accessible_on_screen (GtkWidget *widget)
+{
+  GtkAllocation allocation;
+  GtkWidget *viewport;
+  gboolean return_value;
+
+  gtk_widget_get_allocation (widget, &allocation);
+
+  viewport = gtk_widget_get_ancestor (widget, GTK_TYPE_VIEWPORT);
+  if (viewport)
+    {
+      GtkAllocation viewport_allocation;
+      GtkAdjustment *adjustment;
+      GdkRectangle visible_rect;
+
+      gtk_widget_get_allocation (viewport, &viewport_allocation);
+
+      adjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (viewport));
+      visible_rect.y = gtk_adjustment_get_value (adjustment);
+      adjustment = gtk_scrollable_get_hadjustment (GTK_SCROLLABLE (viewport));
+      visible_rect.x = gtk_adjustment_get_value (adjustment);
+      visible_rect.width = viewport_allocation.width;
+      visible_rect.height = viewport_allocation.height;
+
+      if (((allocation.x + allocation.width) < visible_rect.x) ||
+         ((allocation.y + allocation.height) < visible_rect.y) ||
+         (allocation.x > (visible_rect.x + visible_rect.width)) ||
+         (allocation.y > (visible_rect.y + visible_rect.height)))
+        return_value = FALSE;
+      else
+        return_value = TRUE;
+    }
+  else
+    {
+      /* Check whether the widget has been placed of the screen.
+       * The widget may be MAPPED as when toolbar items do not
+       * fit on the toolbar.
+       */
+      if (allocation.x + allocation.width <= 0 &&
+          allocation.y + allocation.height <= 0)
+        return_value = FALSE;
+      else
+        return_value = TRUE;
+    }
+
+  return return_value;
+}
+
+/* Checks if all the predecessors (the parent widget, his parent, etc)
+ * are visible Used to check properly the SHOWING state.
+ */
+static gboolean
+gtk_widget_accessible_all_parents_visible (GtkWidget *widget)
+{
+  GtkWidget *iter_parent = NULL;
+  gboolean result = TRUE;
+
+  for (iter_parent = gtk_widget_get_parent (widget); iter_parent;
+       iter_parent = gtk_widget_get_parent (iter_parent))
+    {
+      if (!gtk_widget_get_visible (iter_parent))
+        {
+          result = FALSE;
+          break;
+        }
+    }
+
+  return result;
+}
similarity index 55%
rename from gtk/a11y/gailwidget.h
rename to gtk/a11y/gtkwidgetaccessible.h
index 438f6e48bd2cc7b673b6c3b41299c8fd08723010..f51f3f06c6d559f42d529a86d0b21c879b0b935f 100644 (file)
  * Boston, MA 02111-1307, USA.
  */
 
-#ifndef __GAIL_WIDGET_H__
-#define __GAIL_WIDGET_H__
+#ifndef __GTK_WIDGET_ACCESSIBLE_H__
+#define __GTK_WIDGET_ACCESSIBLE_H__
 
 #include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
-#define GAIL_TYPE_WIDGET                     (gail_widget_get_type ())
-#define GAIL_WIDGET(obj)                     (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAIL_TYPE_WIDGET, GailWidget))
-#define GAIL_WIDGET_CLASS(klass)             (G_TYPE_CHECK_CLASS_CAST ((klass), GAIL_TYPE_WIDGET, GailWidgetClass))
-#define GAIL_IS_WIDGET(obj)                  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAIL_TYPE_WIDGET))
-#define GAIL_IS_WIDGET_CLASS(klass)          (G_TYPE_CHECK_CLASS_TYPE ((klass), GAIL_TYPE_WIDGET))
-#define GAIL_WIDGET_GET_CLASS(obj)           (G_TYPE_INSTANCE_GET_CLASS ((obj), GAIL_TYPE_WIDGET, GailWidgetClass))
+#define GTK_TYPE_WIDGET_ACCESSIBLE                     (gtk_widget_accessible_get_type ())
+#define GTK_WIDGET_ACCESSIBLE(obj)                     (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_WIDGET_ACCESSIBLE, GtkWidgetAccessible))
+#define GTK_WIDGET_ACCESSIBLE_CLASS(klass)             (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_WIDGET_ACCESSIBLE, GtkWidgetAccessibleClass))
+#define GTK_IS_WIDGET_ACCESSIBLE(obj)                  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_WIDGET_ACCESSIBLE))
+#define GTK_IS_WIDGET_ACCESSIBLE_CLASS(klass)          (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_WIDGET_ACCESSIBLE))
+#define GTK_WIDGET_ACCESSIBLE_GET_CLASS(obj)           (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_WIDGET_ACCESSIBLE, GtkWidgetAccessibleClass))
 
-typedef struct _GailWidget                   GailWidget;
-typedef struct _GailWidgetClass              GailWidgetClass;
+typedef struct _GtkWidgetAccessible      GtkWidgetAccessible;
+typedef struct _GtkWidgetAccessibleClass GtkWidgetAccessibleClass;
 
-struct _GailWidget
+struct _GtkWidgetAccessible
 {
   GtkAccessible parent;
 };
 
-GType gail_widget_get_type (void);
-
-struct _GailWidgetClass
+struct _GtkWidgetAccessibleClass
 {
   GtkAccessibleClass parent_class;
 
@@ -58,6 +56,8 @@ struct _GailWidgetClass
 
 };
 
+GType gtk_widget_accessible_get_type (void);
+
 G_END_DECLS
 
-#endif /* __GAIL_WIDGET_H__ */
+#endif /* __GTK_WIDGET_ACCESSIBLE_H__ */
index e421093fc60c7bc768ceb081883c9c5507e736b3..4ca157f04f9ec3a0a6d593c1309749d8831eba1b 100644 (file)
@@ -85,7 +85,7 @@ gtk_window_accessible_notify_gtk (GObject    *obj,
       g_signal_emit_by_name (atk_obj, "visible_data_changed");
     }
   else
-    GAIL_WIDGET_CLASS (gtk_window_accessible_parent_class)->notify_gtk (obj, pspec);
+    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_window_accessible_parent_class)->notify_gtk (obj, pspec);
 }
 
 static gboolean
@@ -320,8 +320,8 @@ gtk_window_accessible_ref_state_set (AtkObject *accessible)
 static void
 gtk_window_accessible_class_init (GtkWindowAccessibleClass *klass)
 {
-  GailWidgetClass *widget_class = (GailWidgetClass*)klass;
-  AtkObjectClass  *class = ATK_OBJECT_CLASS (klass);
+  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
+  AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
 
   widget_class->focus_gtk = gtk_window_accessible_focus_gtk;
   widget_class->notify_gtk = gtk_window_accessible_notify_gtk;
index eb7697f403fcfc464b8cb6dc6dda1a3e9348626a..ba1b206c163f7f9378b1594f6d7c4c15c1883b8e 100644 (file)
@@ -124,12 +124,8 @@ gtk_accessible_real_connect_widget_destroyed (GtkAccessible *accessible)
   GtkAccessiblePrivate *priv = accessible->priv;
 
   if (priv->widget)
-  {
-    g_signal_connect (priv->widget,
-                      "destroy",
-                      G_CALLBACK (gtk_widget_destroyed),
-                      &priv->widget);
-  }
+    g_signal_connect (priv->widget, "destroy",
+                      G_CALLBACK (gtk_widget_destroyed), &priv->widget);
 }
 
 /*
index 43070be54857a6713f84748a5dd0838bf4da5374..34d41046a9895abe17f7b5df5d75376ca1dce134 100644 (file)
@@ -35,6 +35,7 @@
 #include "gtkaccessible.h"
 #include "gtkimage.h"
 #include "gtkspinner.h"
+#include "a11y/gtkwidgetaccessible.h"
 
 
 /**
@@ -83,8 +84,7 @@ static void gtk_spinner_get_preferred_height (GtkWidget *widget,
                                         gint            *minimum_size,
                                         gint            *natural_size);
 
-static AtkObject *gtk_spinner_get_accessible      (GtkWidget *widget);
-static GType      gtk_spinner_accessible_get_type (void);
+GType      _gtk_spinner_accessible_get_type (void);
 
 G_DEFINE_TYPE (GtkSpinner, gtk_spinner, GTK_TYPE_WIDGET)
 
@@ -101,7 +101,6 @@ gtk_spinner_class_init (GtkSpinnerClass *klass)
 
   widget_class = GTK_WIDGET_CLASS(klass);
   widget_class->draw = gtk_spinner_draw;
-  widget_class->get_accessible = gtk_spinner_get_accessible;
   widget_class->get_preferred_width = gtk_spinner_get_preferred_width;
   widget_class->get_preferred_height = gtk_spinner_get_preferred_height;
 
@@ -118,6 +117,8 @@ gtk_spinner_class_init (GtkSpinnerClass *klass)
                                                          P_("Whether the spinner is active"),
                                                          FALSE,
                                                          G_PARAM_READWRITE));
+
+  gtk_widget_class_set_accessible_type (widget_class, _gtk_spinner_accessible_get_type ());
 }
 
 static void
@@ -268,20 +269,18 @@ gtk_spinner_accessible_image_iface_init (AtkImageIface *iface)
 }
 
 /* dummy typedef */
-typedef struct _GtkSpinnerAccessible            GtkSpinnerAccessible;
-typedef struct _GtkSpinnerAccessibleClass       GtkSpinnerAccessibleClass;
+typedef GtkWidgetAccessible      GtkSpinnerAccessible;
+typedef GtkWidgetAccessibleClass GtkSpinnerAccessibleClass;
 
-ATK_DEFINE_TYPE_WITH_CODE (GtkSpinnerAccessible,
-                           gtk_spinner_accessible,
-                           GTK_TYPE_IMAGE,
-                           G_IMPLEMENT_INTERFACE (ATK_TYPE_IMAGE,
-                                                  gtk_spinner_accessible_image_iface_init));
+G_DEFINE_TYPE_WITH_CODE (GtkSpinnerAccessible, _gtk_spinner_accessible, GTK_TYPE_WIDGET_ACCESSIBLE,
+                         G_IMPLEMENT_INTERFACE (ATK_TYPE_IMAGE,
+                                                gtk_spinner_accessible_image_iface_init));
 
 static void
 gtk_spinner_accessible_initialize (AtkObject *accessible,
                                    gpointer   widget)
 {
-  ATK_OBJECT_CLASS (gtk_spinner_accessible_parent_class)->initialize (accessible, widget);
+  ATK_OBJECT_CLASS (_gtk_spinner_accessible_parent_class)->initialize (accessible, widget);
 
   atk_object_set_name (accessible, C_("throbbing progress animation widget", "Spinner"));
   atk_object_set_description (accessible, _("Provides visual indication of progress"));
@@ -289,7 +288,7 @@ gtk_spinner_accessible_initialize (AtkObject *accessible,
 }
 
 static void
-gtk_spinner_accessible_class_init (GtkSpinnerAccessibleClass *klass)
+_gtk_spinner_accessible_class_init (GtkSpinnerAccessibleClass *klass)
 {
   AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass);
 
@@ -297,77 +296,8 @@ gtk_spinner_accessible_class_init (GtkSpinnerAccessibleClass *klass)
 }
 
 static void
-gtk_spinner_accessible_init (GtkSpinnerAccessible *self)
-{
-}
-
-/* factory */
-typedef AtkObjectFactory        GtkSpinnerAccessibleFactory;
-typedef AtkObjectFactoryClass   GtkSpinnerAccessibleFactoryClass;
-
-G_DEFINE_TYPE (GtkSpinnerAccessibleFactory,
-               _gtk_spinner_accessible_factory,
-               ATK_TYPE_OBJECT_FACTORY);
-
-static GType
-gtk_spinner_accessible_factory_get_accessible_type (void)
-{
-  return gtk_spinner_accessible_get_type ();
-}
-
-static AtkObject *
-gtk_spinner_accessible_factory_create_accessible (GObject *obj)
-{
-  AtkObject *accessible;
-
-  accessible = g_object_new (gtk_spinner_accessible_get_type (), NULL);
-  atk_object_initialize (accessible, obj);
-
-  return accessible;
-}
-
-static void
-_gtk_spinner_accessible_factory_class_init (AtkObjectFactoryClass *klass)
+_gtk_spinner_accessible_init (GtkSpinnerAccessible *self)
 {
-  klass->create_accessible = gtk_spinner_accessible_factory_create_accessible;
-  klass->get_accessible_type = gtk_spinner_accessible_factory_get_accessible_type;
-}
-
-static void
-_gtk_spinner_accessible_factory_init (AtkObjectFactory *factory)
-{
-}
-
-static AtkObject *
-gtk_spinner_get_accessible (GtkWidget *widget)
-{
-  static gboolean first_time = TRUE;
-
-  if (first_time)
-    {
-      AtkObjectFactory *factory;
-      AtkRegistry *registry;
-      GType derived_type;
-      GType derived_atk_type;
-
-      /*
-       * Figure out whether accessibility is enabled by looking at the
-       * type of the accessible object which would be created for
-       * the parent type of GtkSpinner.
-       */
-      derived_type = g_type_parent (GTK_TYPE_SPINNER);
-
-      registry = atk_get_default_registry ();
-      factory = atk_registry_get_factory (registry, derived_type);
-      derived_atk_type = atk_object_factory_get_accessible_type (factory);
-      if (g_type_is_a (derived_atk_type, GTK_TYPE_ACCESSIBLE))
-        atk_registry_set_factory_type (registry,
-                                       GTK_TYPE_SPINNER,
-                                       _gtk_spinner_accessible_factory_get_type ());
-      first_time = FALSE;
-    }
-
-  return GTK_WIDGET_CLASS (gtk_spinner_parent_class)->get_accessible (widget);
 }
 
 /**
index ae5f68e7b9804639dd4d3e32042225bf46cfa746..fb18bb85a23fb357ba23d19e25a19d6d8fd30f76 100644 (file)
@@ -47,6 +47,7 @@
 #include "gtktoggleaction.h"
 #include "gtkwidget.h"
 #include "gtkmarshalers.h"
+#include "a11y/gtkwidgetaccessible.h"
 
 #include <math.h>
 
@@ -89,7 +90,7 @@ static guint signals[LAST_SIGNAL] = { 0 };
 
 static GParamSpec *switch_props[LAST_PROP] = { NULL, };
 
-static GType gtk_switch_accessible_factory_get_type (void);
+GType _gtk_switch_accessible_get_type (void);
 
 static void gtk_switch_activatable_interface_init (GtkActivatableIface *iface);
 
@@ -659,21 +660,6 @@ gtk_switch_draw (GtkWidget *widget,
   return FALSE;
 }
 
-static AtkObject *
-gtk_switch_get_accessible (GtkWidget *widget)
-{
-  static gboolean first_time = TRUE;
-
-  if (G_UNLIKELY (first_time))
-    {
-      _gtk_accessible_set_factory_type (GTK_TYPE_SWITCH,
-                                        gtk_switch_accessible_factory_get_type ());
-      first_time = FALSE;
-    }
-
-  return GTK_WIDGET_CLASS (gtk_switch_parent_class)->get_accessible (widget);
-}
-
 static void
 gtk_switch_set_related_action (GtkSwitch *sw,
                                GtkAction *action)
@@ -821,7 +807,6 @@ gtk_switch_class_init (GtkSwitchClass *klass)
   widget_class->motion_notify_event = gtk_switch_motion;
   widget_class->enter_notify_event = gtk_switch_enter;
   widget_class->leave_notify_event = gtk_switch_leave;
-  widget_class->get_accessible = gtk_switch_get_accessible;
 
   klass->activate = gtk_switch_activate;
 
@@ -857,6 +842,7 @@ gtk_switch_class_init (GtkSwitchClass *klass)
                   G_TYPE_NONE, 0);
   widget_class->activate_signal = signals[ACTIVATE];
 
+  gtk_widget_class_set_accessible_type (widget_class, _gtk_switch_accessible_get_type ());
 }
 
 static void
@@ -1025,7 +1011,7 @@ struct _GtkSwitchAccessibleClass
 
 static void atk_action_interface_init (AtkActionIface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (GtkSwitchAccessible, _gtk_switch_accessible, g_type_from_name ("GailWidget"),
+G_DEFINE_TYPE_WITH_CODE (GtkSwitchAccessible, _gtk_switch_accessible, GTK_TYPE_WIDGET_ACCESSIBLE,
                          G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init))
 
 static AtkStateSet *
@@ -1178,41 +1164,3 @@ atk_action_interface_init (AtkActionIface *iface)
   iface->get_description = gtk_switch_action_get_description;
   iface->set_description = gtk_switch_action_set_description;
 }
-
-/* accessibility: factory */
-
-typedef AtkObjectFactoryClass   GtkSwitchAccessibleFactoryClass;
-typedef AtkObjectFactory        GtkSwitchAccessibleFactory;
-
-G_DEFINE_TYPE (GtkSwitchAccessibleFactory,
-               gtk_switch_accessible_factory,
-               ATK_TYPE_OBJECT_FACTORY);
-
-static GType
-gtk_switch_accessible_factory_get_accessible_type (void)
-{
-  return _gtk_switch_accessible_get_type ();
-}
-
-static AtkObject *
-gtk_switch_accessible_factory_create_accessible (GObject *obj)
-{
-  AtkObject *accessible;
-
-  accessible = g_object_new (_gtk_switch_accessible_get_type (), NULL);
-  atk_object_initialize (accessible, obj);
-
-  return accessible;
-}
-
-static void
-gtk_switch_accessible_factory_class_init (AtkObjectFactoryClass *klass)
-{
-  klass->create_accessible = gtk_switch_accessible_factory_create_accessible;
-  klass->get_accessible_type = gtk_switch_accessible_factory_get_accessible_type;
-}
-
-static void
-gtk_switch_accessible_factory_init (AtkObjectFactory *factory)
-{
-}
index 3e375f9a5acb38a912f91b5b51bd28ce447dcb25..5491107caa0468d1b3cf8eb6a89c86c4162dc960 100644 (file)
@@ -65,7 +65,7 @@
 #include "gtkdebug.h"
 #include "gtkplug.h"
 #include "gtktypebuiltins.h"
-
+#include "a11y/gtkwidgetaccessible.h"
 
 /**
  * SECTION:gtkwidget
@@ -3178,6 +3178,8 @@ gtk_widget_class_init (GtkWidgetClass *klass)
                                                              GTK_PARAM_READABLE));
 
   g_type_class_add_private (klass, sizeof (GtkWidgetPrivate));
+
+  gtk_widget_class_set_accessible_type (klass, GTK_TYPE_WIDGET_ACCESSIBLE);
 }
 
 static void
index b4455848bb3108ff7756d1eec257c9a08738ee85..87e7db68f41d36b11023ec51c7e1588e37318012 100644 (file)
@@ -43,7 +43,7 @@ window1
           <AtkComponent>
           layer: widget
           alpha: 1
-          unnamed-GailWidget-4
+          unnamed-GtkWidgetAccessible-4
             "color chooser"
             parent: unnamed-GtkBoxAccessible-3
             index: 0
@@ -82,7 +82,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-8
+                unnamed-GtkWidgetAccessible-8
                   "unknown"
                   parent: unnamed-GtkBoxAccessible-7
                   index: 0
@@ -92,7 +92,7 @@ window1
                   <AtkComponent>
                   layer: widget
                   alpha: 1
-                unnamed-GailWidget-9
+                unnamed-GtkWidgetAccessible-9
                   "unknown"
                   parent: unnamed-GtkBoxAccessible-7
                   index: 1
@@ -318,7 +318,7 @@ window1
                                   variant: <omitted>
                                   weight: <omitted>
                                   wrap-mode: word
-            unnamed-GailWidget-14
+            unnamed-GtkWidgetAccessible-14
               "separator"
               parent: unnamed-GtkContainerAccessible-12
               index: 5
@@ -332,7 +332,7 @@ window1
               parent: unnamed-GtkContainerAccessible-12
               index: 6
               description: Amount of blue light in the color.
-              controller-for: unnamed-GailWidget-4
+              controller-for: unnamed-GtkWidgetAccessible-4
               labelled-by: Blue:
               state: editable enabled focusable sensitive showing single-line visible
               toolkit: gail
@@ -421,7 +421,7 @@ window1
               parent: unnamed-GtkContainerAccessible-12
               index: 8
               description: Amount of green light in the color.
-              controller-for: unnamed-GailWidget-4
+              controller-for: unnamed-GtkWidgetAccessible-4
               labelled-by: Green:
               state: editable enabled focusable sensitive showing single-line visible
               toolkit: gail
@@ -510,7 +510,7 @@ window1
               parent: unnamed-GtkContainerAccessible-12
               index: 10
               description: Amount of red light in the color.
-              controller-for: unnamed-GailWidget-4
+              controller-for: unnamed-GtkWidgetAccessible-4
               labelled-by: Red:
               state: editable enabled focusable sensitive showing single-line visible
               toolkit: gail
@@ -599,7 +599,7 @@ window1
               parent: unnamed-GtkContainerAccessible-12
               index: 12
               description: Brightness of the color.
-              controller-for: unnamed-GailWidget-4
+              controller-for: unnamed-GtkWidgetAccessible-4
               labelled-by: Value:
               state: editable enabled focusable sensitive showing single-line visible
               toolkit: gail
@@ -688,7 +688,7 @@ window1
               parent: unnamed-GtkContainerAccessible-12
               index: 14
               description: Intensity of the color.
-              controller-for: unnamed-GailWidget-4
+              controller-for: unnamed-GtkWidgetAccessible-4
               labelled-by: Saturation:
               state: editable enabled focusable sensitive showing single-line visible
               toolkit: gail
@@ -777,7 +777,7 @@ window1
               parent: unnamed-GtkContainerAccessible-12
               index: 16
               description: Position on the color wheel.
-              controller-for: unnamed-GailWidget-4
+              controller-for: unnamed-GtkWidgetAccessible-4
               labelled-by: Hue:
               state: editable enabled focusable sensitive showing single-line visible
               toolkit: gail
@@ -875,7 +875,7 @@ window1
               parent: unnamed-GtkBoxAccessible-15
               index: 0
               name: Palette:
-              label-for: unnamed-GailWidget-16
+              label-for: unnamed-GtkWidgetAccessible-16
               state: enabled multi-line sensitive visible
               toolkit: gail
               <AtkComponent>
@@ -928,7 +928,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-19
+                unnamed-GtkWidgetAccessible-19
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-18
                   index: 0
@@ -947,7 +947,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-21
+                unnamed-GtkWidgetAccessible-21
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-20
                   index: 0
@@ -966,7 +966,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-23
+                unnamed-GtkWidgetAccessible-23
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-22
                   index: 0
@@ -985,7 +985,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-25
+                unnamed-GtkWidgetAccessible-25
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-24
                   index: 0
@@ -1004,7 +1004,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-27
+                unnamed-GtkWidgetAccessible-27
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-26
                   index: 0
@@ -1023,7 +1023,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-29
+                unnamed-GtkWidgetAccessible-29
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-28
                   index: 0
@@ -1042,7 +1042,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-31
+                unnamed-GtkWidgetAccessible-31
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-30
                   index: 0
@@ -1061,7 +1061,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-33
+                unnamed-GtkWidgetAccessible-33
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-32
                   index: 0
@@ -1080,7 +1080,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-35
+                unnamed-GtkWidgetAccessible-35
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-34
                   index: 0
@@ -1099,7 +1099,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-37
+                unnamed-GtkWidgetAccessible-37
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-36
                   index: 0
@@ -1118,7 +1118,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-39
+                unnamed-GtkWidgetAccessible-39
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-38
                   index: 0
@@ -1137,7 +1137,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-41
+                unnamed-GtkWidgetAccessible-41
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-40
                   index: 0
@@ -1156,7 +1156,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-43
+                unnamed-GtkWidgetAccessible-43
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-42
                   index: 0
@@ -1175,7 +1175,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-45
+                unnamed-GtkWidgetAccessible-45
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-44
                   index: 0
@@ -1194,7 +1194,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-47
+                unnamed-GtkWidgetAccessible-47
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-46
                   index: 0
@@ -1213,7 +1213,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-49
+                unnamed-GtkWidgetAccessible-49
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-48
                   index: 0
@@ -1232,7 +1232,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-51
+                unnamed-GtkWidgetAccessible-51
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-50
                   index: 0
@@ -1251,7 +1251,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-53
+                unnamed-GtkWidgetAccessible-53
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-52
                   index: 0
@@ -1270,7 +1270,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-55
+                unnamed-GtkWidgetAccessible-55
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-54
                   index: 0
@@ -1289,7 +1289,7 @@ window1
                 <AtkComponent>
                 layer: widget
                 alpha: 1
-                unnamed-GailWidget-16
+                unnamed-GtkWidgetAccessible-16
                   "unknown"
                   parent: unnamed-GtkFrameAccessible-56
                   index: 0