Bug 793915 - Option to convert UTC time to local time in Reply credits
[evolution.git] / src / libgnomecanvas / gailcanvas.c
blob6cfd504d85e1763df4567aeab7f90eba2ad1488e
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
11 * for more details.
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"
19 #include <gtk/gtk.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,
31 gpointer data);
33 static gint gail_canvas_get_n_children (AtkObject *obj);
34 static AtkObject * gail_canvas_ref_child (AtkObject *obj,
35 gint i);
37 static void adjustment_changed (GtkAdjustment *adjustment,
38 GnomeCanvas *canvas);
40 G_DEFINE_TYPE (GailCanvas, gail_canvas, GTK_TYPE_CONTAINER_ACCESSIBLE)
42 static void
43 gail_canvas_init (GailCanvas *canvas)
47 /**
48 * Tell ATK how to create the appropriate AtkObject peers
49 **/
50 void
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 ());
67 static void
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;
77 AtkObject *
78 gail_canvas_new (GtkWidget *widget)
80 GObject *object;
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);
90 return accessible;
93 static void
94 gail_canvas_real_initialize (AtkObject *obj,
95 gpointer data)
97 GnomeCanvas *canvas;
98 GtkAdjustment *adj;
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));
105 g_signal_connect (
106 adj, "value_changed",
107 G_CALLBACK (adjustment_changed), canvas);
109 adj = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (canvas));
110 g_signal_connect (
111 adj, "value_changed",
112 G_CALLBACK (adjustment_changed), canvas);
114 obj->role = ATK_ROLE_LAYERED_PANE;
117 static gint
118 gail_canvas_get_n_children (AtkObject *obj)
120 GtkAccessible *accessible;
121 GtkWidget *widget;
122 GnomeCanvas *canvas;
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);
129 if (widget == NULL)
130 /* State is defunct */
131 return 0;
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);
138 return 1;
141 static AtkObject *
142 gail_canvas_ref_child (AtkObject *obj,
143 gint i)
145 GtkAccessible *accessible;
146 GtkWidget *widget;
147 GnomeCanvas *canvas;
148 GnomeCanvasGroup *root_group;
149 AtkObject *atk_object;
151 /* Canvas only has one child, so return NULL if anything else is requested */
152 if (i != 0)
153 return NULL;
154 g_return_val_if_fail (GAIL_IS_CANVAS (obj), NULL);
156 accessible = GTK_ACCESSIBLE (obj);
157 widget = gtk_accessible_get_widget (accessible);
158 if (widget == NULL)
159 /* State is defunct */
160 return NULL;
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);
169 return atk_object;
172 static void
173 adjustment_changed (GtkAdjustment *adjustment,
174 GnomeCanvas *canvas)
176 AtkObject *atk_obj;
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");