forked from AuroraMiddleware/gtk
Add an accessible implementation in order to make the buttons visible to
2006-06-11 Matthias Clasen <mclasen@redhat.com> * gtk/gtkassistant.c: Add an accessible implementation in order to make the buttons visible to a11y tools. (pointed out by David Malcolm)
This commit is contained in:
parent
35756b3864
commit
12ea966009
@ -1,5 +1,9 @@
|
||||
2006-06-11 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* gtk/gtkassistant.c: Add an accessible implementation in
|
||||
order to make the buttons visible to a11y tools. (pointed out
|
||||
by David Malcolm)
|
||||
|
||||
* gtk/gtkprintoperation-win32.c: Store scale as a percentage.
|
||||
(#344560, Christian Persch)
|
||||
|
||||
|
@ -1,5 +1,9 @@
|
||||
2006-06-11 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* gtk/gtkassistant.c: Add an accessible implementation in
|
||||
order to make the buttons visible to a11y tools. (pointed out
|
||||
by David Malcolm)
|
||||
|
||||
* gtk/gtkprintoperation-win32.c: Store scale as a percentage.
|
||||
(#344560, Christian Persch)
|
||||
|
||||
|
@ -25,8 +25,11 @@
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <atk/atk.h>
|
||||
|
||||
#include "gtkassistant.h"
|
||||
|
||||
#include "gtkaccessible.h"
|
||||
#include "gtkbutton.h"
|
||||
#include "gtkhbox.h"
|
||||
#include "gtkhbbox.h"
|
||||
@ -114,6 +117,8 @@ static void gtk_assistant_get_child_property (GtkContainer *container,
|
||||
GValue *value,
|
||||
GParamSpec *pspec);
|
||||
|
||||
static AtkObject *gtk_assistant_get_accessible (GtkWidget *widget);
|
||||
|
||||
enum
|
||||
{
|
||||
CHILD_PROP_0,
|
||||
@ -162,6 +167,7 @@ gtk_assistant_class_init (GtkAssistantClass *class)
|
||||
widget_class->delete_event = gtk_assistant_delete_event;
|
||||
widget_class->expose_event = gtk_assistant_expose;
|
||||
widget_class->focus = gtk_assistant_focus;
|
||||
widget_class->get_accessible = gtk_assistant_get_accessible;
|
||||
|
||||
container_class->add = gtk_assistant_add;
|
||||
container_class->remove = gtk_assistant_remove;
|
||||
@ -2161,5 +2167,189 @@ gtk_assistant_update_buttons_state (GtkAssistant *assistant)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* accessible implementation */
|
||||
|
||||
static gint
|
||||
gtk_assistant_accessible_get_n_children (AtkObject *accessible)
|
||||
{
|
||||
GtkAssistant *assistant;
|
||||
GtkWidget *widget;
|
||||
|
||||
widget = GTK_ACCESSIBLE (accessible)->widget;
|
||||
|
||||
if (!widget)
|
||||
return 0;
|
||||
|
||||
assistant = GTK_ASSISTANT (widget);
|
||||
|
||||
return g_list_length (assistant->priv->pages) + 1;
|
||||
}
|
||||
|
||||
|
||||
static AtkObject *
|
||||
gtk_assistant_accessible_ref_child (AtkObject *accessible,
|
||||
gint index)
|
||||
{
|
||||
GtkAssistant *assistant;
|
||||
GtkAssistantPrivate *priv;
|
||||
GtkWidget *widget, *child;
|
||||
gint n_pages;
|
||||
AtkObject *obj;
|
||||
|
||||
widget = GTK_ACCESSIBLE (accessible)->widget;
|
||||
if (!widget)
|
||||
return NULL;
|
||||
|
||||
assistant = GTK_ASSISTANT (widget);
|
||||
priv = assistant->priv;
|
||||
n_pages = g_list_length (priv->pages);
|
||||
|
||||
if (index < 0)
|
||||
return NULL;
|
||||
else if (index < n_pages)
|
||||
{
|
||||
GtkAssistantPage *page = g_list_nth_data (priv->pages, index / 2);
|
||||
|
||||
child = page->page;
|
||||
}
|
||||
else if (index == n_pages)
|
||||
{
|
||||
child = priv->action_area;
|
||||
}
|
||||
else
|
||||
return NULL;
|
||||
|
||||
obj = gtk_widget_get_accessible (child);
|
||||
|
||||
return g_object_ref (obj);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_assistant_accessible_class_init (AtkObjectClass *class)
|
||||
{
|
||||
class->get_n_children = gtk_assistant_accessible_get_n_children;
|
||||
class->ref_child = gtk_assistant_accessible_ref_child;
|
||||
}
|
||||
|
||||
static GType
|
||||
gtk_assistant_accessible_get_type (void)
|
||||
{
|
||||
static GType type = 0;
|
||||
|
||||
if (!type)
|
||||
{
|
||||
/*
|
||||
* Figure out the size of the class and instance
|
||||
* we are deriving from
|
||||
*/
|
||||
AtkObjectFactory *factory;
|
||||
GType derived_type;
|
||||
GTypeQuery query;
|
||||
GType derived_atk_type;
|
||||
|
||||
derived_type = g_type_parent (GTK_TYPE_ASSISTANT);
|
||||
factory = atk_registry_get_factory (atk_get_default_registry (),
|
||||
derived_type);
|
||||
derived_atk_type = atk_object_factory_get_accessible_type (factory);
|
||||
g_type_query (derived_atk_type, &query);
|
||||
|
||||
type = g_type_register_static_simple (derived_atk_type,
|
||||
"GtkAssistantAccessible",
|
||||
query.class_size,
|
||||
(GClassInitFunc) gtk_assistant_accessible_class_init,
|
||||
query.instance_size,
|
||||
NULL, 0);
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
static AtkObject *
|
||||
gtk_assistant_accessible_new (GObject *obj)
|
||||
{
|
||||
AtkObject *accessible;
|
||||
|
||||
g_return_val_if_fail (GTK_IS_ASSISTANT (obj), NULL);
|
||||
|
||||
accessible = g_object_new (gtk_assistant_accessible_get_type (), NULL);
|
||||
atk_object_initialize (accessible, obj);
|
||||
|
||||
return accessible;
|
||||
}
|
||||
|
||||
static GType
|
||||
gtk_assistant_accessible_factory_get_accessible_type (void)
|
||||
{
|
||||
return gtk_assistant_accessible_get_type ();
|
||||
}
|
||||
|
||||
static AtkObject*
|
||||
gtk_assistant_accessible_factory_create_accessible (GObject *obj)
|
||||
{
|
||||
return gtk_assistant_accessible_new (obj);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_assistant_accessible_factory_class_init (AtkObjectFactoryClass *class)
|
||||
{
|
||||
class->create_accessible = gtk_assistant_accessible_factory_create_accessible;
|
||||
class->get_accessible_type = gtk_assistant_accessible_factory_get_accessible_type;
|
||||
}
|
||||
|
||||
static GType
|
||||
gtk_assistant_accessible_factory_get_type (void)
|
||||
{
|
||||
static GType type = 0;
|
||||
|
||||
if (!type)
|
||||
{
|
||||
type = g_type_register_static_simple (ATK_TYPE_OBJECT_FACTORY,
|
||||
"GtkAssistantAccessibleFactory",
|
||||
sizeof (AtkObjectFactoryClass),
|
||||
(GClassInitFunc) gtk_assistant_accessible_factory_class_init,
|
||||
sizeof (AtkObjectFactory),
|
||||
NULL, 0);
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
static AtkObject *
|
||||
gtk_assistant_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 GtkAssistant.
|
||||
*/
|
||||
derived_type = g_type_parent (GTK_TYPE_ASSISTANT);
|
||||
|
||||
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_ASSISTANT,
|
||||
gtk_assistant_accessible_factory_get_type ());
|
||||
}
|
||||
first_time = FALSE;
|
||||
}
|
||||
|
||||
return GTK_WIDGET_CLASS (gtk_assistant_parent_class)->get_accessible (widget);
|
||||
}
|
||||
|
||||
|
||||
#define __GTK_ASSISTANT_C__
|
||||
#include "gtkaliasdef.c"
|
||||
|
Loading…
Reference in New Issue
Block a user