-/* GAIL - The GNOME Accessibility Implementation Library
+/* GTK+ - accessibility implementations
* Copyright 2001, 2002, 2003 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
#ifdef GDK_WINDOWING_X11
#include <gdk/x11/gdkx.h>
#endif
-#include "gtkwidgetaccessible.h"
+#include "gtkwidgetaccessibleprivate.h"
#include "gtknotebookpageaccessible.h"
+struct _GtkWidgetAccessiblePrivate
+{
+ AtkLayer layer;
+};
+
+#define TOOLTIP_KEY "tooltip"
+
extern GtkWidget *_focus_widget;
static void atk_component_interface_init (AtkComponentIface *iface);
-G_DEFINE_TYPE_WITH_CODE (GtkWidgetAccessible, _gtk_widget_accessible, GTK_TYPE_ACCESSIBLE,
+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 AtkObject::focus-event */
atk_object_notify_state_change (focus_obj, ATK_STATE_FOCUSED, focus_in);
}
+static void
+gtk_widget_accessible_update_tooltip (GtkWidgetAccessible *accessible,
+ GtkWidget *widget)
+{
+ g_object_set_data_full (G_OBJECT (accessible),
+ TOOLTIP_KEY,
+ gtk_widget_get_tooltip_text (widget),
+ g_free);
+}
+
static void
gtk_widget_accessible_initialize (AtkObject *obj,
gpointer data)
g_signal_connect (widget, "map", G_CALLBACK (map_cb), NULL);
g_signal_connect (widget, "unmap", G_CALLBACK (map_cb), NULL);
- GTK_WIDGET_ACCESSIBLE (obj)->layer = ATK_LAYER_WIDGET;
+ GTK_WIDGET_ACCESSIBLE (obj)->priv->layer = ATK_LAYER_WIDGET;
obj->role = ATK_ROLE_UNKNOWN;
+
+ gtk_widget_accessible_update_tooltip (GTK_WIDGET_ACCESSIBLE (obj), widget);
}
static const gchar *
if (accessible->description)
return accessible->description;
- return gtk_widget_get_tooltip_text (widget);
+ return g_object_get_data (G_OBJECT (accessible), TOOLTIP_KEY);
}
static AtkObject *
if (widget == NULL)
return NULL;
- relation_set = ATK_OBJECT_CLASS (_gtk_widget_accessible_parent_class)->ref_relation_set (obj);
+ relation_set = ATK_OBJECT_CLASS (gtk_widget_accessible_parent_class)->ref_relation_set (obj);
if (GTK_IS_BOX (widget))
return relation_set;
GtkWidget *widget;
AtkStateSet *state_set;
- state_set = ATK_OBJECT_CLASS (_gtk_widget_accessible_parent_class)->ref_state_set (accessible);
+ 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)
* focus changes so we ignore this.
*/
return;
+ else if (g_strcmp0 (pspec->name, "tooltip-text") == 0)
+ {
+ gtk_widget_accessible_update_tooltip (GTK_WIDGET_ACCESSIBLE (atk_obj),
+ widget);
+ return;
+ }
else if (g_strcmp0 (pspec->name, "visible") == 0)
{
state = ATK_STATE_VISIBLE;
}
static void
-_gtk_widget_accessible_class_init (GtkWidgetAccessibleClass *klass)
+gtk_widget_accessible_class_init (GtkWidgetAccessibleClass *klass)
{
AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
class->initialize = gtk_widget_accessible_initialize;
class->get_attributes = gtk_widget_accessible_get_attributes;
class->focus_event = gtk_widget_accessible_focus_event;
+
+ g_type_class_add_private (klass, sizeof (GtkWidgetAccessiblePrivate));
}
static void
-_gtk_widget_accessible_init (GtkWidgetAccessible *accessible)
+gtk_widget_accessible_init (GtkWidgetAccessible *accessible)
{
+ accessible->priv = G_TYPE_INSTANCE_GET_PRIVATE (accessible,
+ GTK_TYPE_WIDGET_ACCESSIBLE,
+ GtkWidgetAccessiblePrivate);
}
static void
{
GtkWidgetAccessible *accessible = GTK_WIDGET_ACCESSIBLE (component);
- return accessible->layer;
+ return accessible->priv->layer;
}
static gboolean
return result;
}
+
+void
+_gtk_widget_accessible_set_layer (GtkWidgetAccessible *accessible,
+ AtkLayer layer)
+{
+ accessible->priv->layer = layer;
+}