1 /* GAIL - The GNOME Accessibility Implementation Library
2 * Copyright 2001, 2002, 2003 Sun Microsystems Inc.
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License as published by
6 * the Free Software Foundation.
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
10 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program; if not, see <http://www.gnu.org/licenses/>.
17 #include "evolution-config.h"
20 #include <libgnomecanvas/gnome-canvas.h>
21 #include <libgnomecanvas/gnome-canvas-text.h>
22 #include <libgnomecanvas/gnome-canvas-widget.h>
23 #include "gailcanvas.h"
24 #include "gailcanvasitem.h"
25 #include "gailcanvasgroupfactory.h"
26 #include "gailcanvastextfactory.h"
27 #include "gailcanvasitemfactory.h"
28 #include "gailcanvaswidgetfactory.h"
30 static void gail_canvas_real_initialize (AtkObject
*obj
,
33 static gint
gail_canvas_get_n_children (AtkObject
*obj
);
34 static AtkObject
* gail_canvas_ref_child (AtkObject
*obj
,
37 static void adjustment_changed (GtkAdjustment
*adjustment
,
40 G_DEFINE_TYPE (GailCanvas
, gail_canvas
, GTK_TYPE_CONTAINER_ACCESSIBLE
)
43 gail_canvas_init (GailCanvas
*canvas
)
48 * Tell ATK how to create the appropriate AtkObject peers
51 gail_canvas_a11y_init (void)
53 atk_registry_set_factory_type (atk_get_default_registry (),
54 GNOME_TYPE_CANVAS_GROUP
,
55 gail_canvas_group_factory_get_type ());
56 atk_registry_set_factory_type (atk_get_default_registry (),
57 GNOME_TYPE_CANVAS_TEXT
,
58 gail_canvas_text_factory_get_type ());
59 atk_registry_set_factory_type (atk_get_default_registry (),
60 GNOME_TYPE_CANVAS_WIDGET
,
61 gail_canvas_widget_factory_get_type ());
62 atk_registry_set_factory_type (atk_get_default_registry (),
63 GNOME_TYPE_CANVAS_ITEM
,
64 gail_canvas_item_factory_get_type ());
68 gail_canvas_class_init (GailCanvasClass
*klass
)
70 AtkObjectClass
*class = ATK_OBJECT_CLASS (klass
);
72 class->get_n_children
= gail_canvas_get_n_children
;
73 class->ref_child
= gail_canvas_ref_child
;
74 class->initialize
= gail_canvas_real_initialize
;
78 gail_canvas_new (GtkWidget
*widget
)
81 AtkObject
*accessible
;
83 g_return_val_if_fail (GNOME_IS_CANVAS (widget
), NULL
);
85 object
= g_object_new (GAIL_TYPE_CANVAS
, NULL
);
87 accessible
= ATK_OBJECT (object
);
88 atk_object_initialize (accessible
, widget
);
94 gail_canvas_real_initialize (AtkObject
*obj
,
100 ATK_OBJECT_CLASS (gail_canvas_parent_class
)->initialize (obj
, data
);
102 canvas
= GNOME_CANVAS (data
);
104 adj
= gtk_scrollable_get_hadjustment (GTK_SCROLLABLE (canvas
));
106 adj
, "value_changed",
107 G_CALLBACK (adjustment_changed
), canvas
);
109 adj
= gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (canvas
));
111 adj
, "value_changed",
112 G_CALLBACK (adjustment_changed
), canvas
);
114 obj
->role
= ATK_ROLE_LAYERED_PANE
;
118 gail_canvas_get_n_children (AtkObject
*obj
)
120 GtkAccessible
*accessible
;
123 GnomeCanvasGroup
*root_group
;
125 g_return_val_if_fail (GAIL_IS_CANVAS (obj
), 0);
127 accessible
= GTK_ACCESSIBLE (obj
);
128 widget
= gtk_accessible_get_widget (accessible
);
130 /* State is defunct */
133 g_return_val_if_fail (GNOME_IS_CANVAS (widget
), 0);
135 canvas
= GNOME_CANVAS (widget
);
136 root_group
= gnome_canvas_root (canvas
);
137 g_return_val_if_fail (root_group
, 0);
142 gail_canvas_ref_child (AtkObject
*obj
,
145 GtkAccessible
*accessible
;
148 GnomeCanvasGroup
*root_group
;
149 AtkObject
*atk_object
;
151 /* Canvas only has one child, so return NULL if anything else is requested */
154 g_return_val_if_fail (GAIL_IS_CANVAS (obj
), NULL
);
156 accessible
= GTK_ACCESSIBLE (obj
);
157 widget
= gtk_accessible_get_widget (accessible
);
159 /* State is defunct */
161 g_return_val_if_fail (GNOME_IS_CANVAS (widget
), NULL
);
163 canvas
= GNOME_CANVAS (widget
);
164 root_group
= gnome_canvas_root (canvas
);
165 g_return_val_if_fail (root_group
, NULL
);
167 atk_object
= atk_gobject_accessible_for_object (G_OBJECT (root_group
));
168 g_object_ref (atk_object
);
173 adjustment_changed (GtkAdjustment
*adjustment
,
179 * The scrollbars have changed
181 atk_obj
= gtk_widget_get_accessible (GTK_WIDGET (canvas
));
183 g_signal_emit_by_name (atk_obj
, "visible_data_changed");