/** * atk_gobject_accessible_get_object: * @obj: a #AtkGObjectAccessible * * Gets the GObject for which @obj is the accessible object. * * Returns: (transfer none): a #GObject which is the object for which @obj is * the accessible object **/ GObject * atk_gobject_accessible_get_object (AtkGObjectAccessible *obj) { g_return_val_if_fail (ATK_IS_GOBJECT_ACCESSIBLE (obj), NULL); return g_object_get_qdata (G_OBJECT (obj), quark_object); }
static AtkObject* get_accessible_for_widget (GtkWidget *widget, gboolean *transient) { AtkObject *obj = NULL; *transient = FALSE; if (!widget) return NULL; if (GTK_IS_ENTRY (widget)) ; else if (GTK_IS_NOTEBOOK (widget)) { GtkNotebook *notebook; gint page_num = -1; notebook = GTK_NOTEBOOK (widget); page_num = gtk_notebook_get_current_page (notebook); if (page_num != -1) { obj = gtk_widget_get_accessible (widget); obj = atk_object_ref_accessible_child (obj, page_num); g_object_unref (obj); } } else if (GTK_IS_TOGGLE_BUTTON (widget)) { GtkWidget *other_widget = gtk_widget_get_parent (widget); if (GTK_IS_COMBO_BOX (other_widget)) { gail_set_focus_widget (other_widget, widget); widget = other_widget; } } if (obj == NULL) { AtkObject *focus_object; obj = gtk_widget_get_accessible (widget); focus_object = g_object_get_qdata (G_OBJECT (obj), quark_focus_object); /* * We check whether the object for this focus_object has been deleted. * This can happen when navigating to an empty directory in nautilus. * See bug #141907. */ if (ATK_IS_GOBJECT_ACCESSIBLE (focus_object)) { if (!atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (focus_object))) focus_object = NULL; } if (focus_object) obj = focus_object; } return obj; }
static void atk_gobject_accessible_dispose (gpointer data) { g_return_if_fail (ATK_IS_GOBJECT_ACCESSIBLE (data)); g_object_set_qdata (G_OBJECT (data), quark_object, NULL); atk_object_notify_state_change (ATK_OBJECT (data), ATK_STATE_DEFUNCT, TRUE); g_object_unref (data); }
/** * eel_accessibility_set_atk_object_return: * @object: a GObject * @atk_object: it's AtkObject * * used to register and return a new accessible object for something * * Return value: @atk_object. **/ AtkObject * eel_accessibility_set_atk_object_return (gpointer object, AtkObject *atk_object) { atk_object_initialize (atk_object, object); if (!ATK_IS_GOBJECT_ACCESSIBLE (atk_object)) { g_object_set_qdata_full (object, get_quark_accessible (), atk_object, (GDestroyNotify)eel_accessibility_destroy); g_object_set_qdata (G_OBJECT (atk_object), get_quark_gobject (), object); } return atk_object; }
/** * atk_gobject_accessible_for_object: * @obj: a #GObject * * Gets the accessible object for the specified @obj. * * Returns: (transfer none): a #AtkObject which is the accessible object for * the @obj **/ AtkObject* atk_gobject_accessible_for_object (GObject *obj) { AtkObject* accessible; g_return_val_if_fail (G_IS_OBJECT (obj), NULL); /* See if we have a cached accessible for this object */ accessible = g_object_get_qdata (obj, quark_accessible_object); if (!accessible) { AtkObjectFactory *factory; AtkRegistry *default_registry; default_registry = atk_get_default_registry (); factory = atk_registry_get_factory (default_registry, G_OBJECT_TYPE (obj)); accessible = atk_object_factory_create_accessible (factory, obj); if (!ATK_IS_GOBJECT_ACCESSIBLE (accessible)) { /* * The AtkObject which was created was not a AtkGObjectAccessible */ g_object_weak_ref (obj, (GWeakNotify) g_object_unref, accessible); if (!quark_accessible_object) quark_accessible_object = g_quark_from_static_string ("accessible-object"); } g_object_set_qdata (obj, quark_accessible_object, accessible); } return accessible; }
static AtkObject* gail_get_accessible_for_widget (GtkWidget *widget, gboolean *transient) { AtkObject *obj = NULL; GType gnome_canvas; gnome_canvas = g_type_from_name ("GnomeCanvas"); *transient = FALSE; if (!widget) return NULL; if (GTK_IS_ENTRY (widget)) { GtkWidget *other_widget = widget->parent; if (GTK_IS_COMBO (other_widget)) { gail_set_focus_widget (other_widget, widget); widget = other_widget; } } else if (GTK_IS_NOTEBOOK (widget)) { GtkNotebook *notebook; gint page_num = -1; notebook = GTK_NOTEBOOK (widget); /* * Report the currently focused tab rather than the currently selected tab */ if (notebook->focus_tab) { page_num = g_list_index (notebook->children, notebook->focus_tab->data); } if (page_num != -1) { obj = gtk_widget_get_accessible (widget); obj = atk_object_ref_accessible_child (obj, page_num); g_object_unref (obj); } } else if (GTK_CHECK_TYPE ((widget), gnome_canvas)) { GObject *focused_item; GValue value = {0, }; g_value_init (&value, G_TYPE_OBJECT); g_object_get_property (G_OBJECT (widget), "focused_item", &value); focused_item = g_value_get_object (&value); if (focused_item) { AtkObject *tmp; obj = atk_gobject_accessible_for_object (G_OBJECT (focused_item)); tmp = g_object_get_qdata (G_OBJECT (obj), quark_focus_object); if (tmp != NULL) obj = tmp; } } else if (GTK_IS_TOGGLE_BUTTON (widget)) { GtkWidget *other_widget = widget->parent; if (GTK_IS_COMBO_BOX (other_widget)) { gail_set_focus_widget (other_widget, widget); widget = other_widget; } } if (obj == NULL) { AtkObject *focus_object; obj = gtk_widget_get_accessible (widget); focus_object = g_object_get_qdata (G_OBJECT (obj), quark_focus_object); /* * We check whether the object for this focus_object has been deleted. * This can happen when navigating to an empty directory in nautilus. * See bug #141907. */ if (ATK_IS_GOBJECT_ACCESSIBLE (focus_object)) { if (!atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (focus_object))) focus_object = NULL; } if (focus_object) obj = focus_object; } return obj; }