diff options
Diffstat (limited to 'gtk/a11y/gtkcompositeaccessible.c')
-rw-r--r-- | gtk/a11y/gtkcompositeaccessible.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/gtk/a11y/gtkcompositeaccessible.c b/gtk/a11y/gtkcompositeaccessible.c new file mode 100644 index 0000000000..8e8a6297b3 --- /dev/null +++ b/gtk/a11y/gtkcompositeaccessible.c @@ -0,0 +1,87 @@ +/* GTK+ - accessibility implementations + * Copyright 2020 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "config.h" + +#include "gtkcompositeaccessible.h" + +#include <gtk/gtk.h> + +#include "gtkwidgetprivate.h" + +G_DEFINE_TYPE (GtkCompositeAccessible, gtk_composite_accessible, GTK_TYPE_WIDGET_ACCESSIBLE) + +static int +gtk_composite_accessible_get_n_children (AtkObject *obj) +{ + GtkWidget *widget; + GtkWidget *child; + int count = 0; + + widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); + if (widget == NULL) + return 0; + + for (child = gtk_widget_get_first_child (widget); child; child = gtk_widget_get_next_sibling (child)) + count++; + + return count; +} + +static AtkObject * +gtk_composite_accessible_ref_child (AtkObject *obj, + int i) +{ + GtkWidget *widget; + GtkWidget *child; + int pos; + + widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); + if (widget == NULL) + return NULL; + + for (child = gtk_widget_get_first_child (widget), pos = 0; child && pos < i; child = gtk_widget_get_next_sibling (child), pos++); + + if (child) + return g_object_ref (gtk_widget_get_accessible (GTK_WIDGET (child))); + + return NULL; +} + +static void +gtk_composite_accessible_initialize (AtkObject *obj, + gpointer data) +{ + ATK_OBJECT_CLASS (gtk_composite_accessible_parent_class)->initialize (obj, data); + + obj->role = ATK_ROLE_FILLER; +} + +static void +gtk_composite_accessible_class_init (GtkCompositeAccessibleClass *klass) +{ + AtkObjectClass *class = ATK_OBJECT_CLASS (klass); + + class->initialize = gtk_composite_accessible_initialize; + class->get_n_children = gtk_composite_accessible_get_n_children; + class->ref_child = gtk_composite_accessible_ref_child; +} + +static void +gtk_composite_accessible_init (GtkCompositeAccessible *composite) +{ +} |