[gtk+] Add a GtkListBoxRow accessible
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Add a GtkListBoxRow accessible
- Date: Sun, 22 Sep 2013 00:51:33 +0000 (UTC)
commit c22e27f98681c7a7dac2e6a9abbe4a155499f487
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Sep 21 20:49:18 2013 -0400
Add a GtkListBoxRow accessible
This lets us do two things:
1. Set the list-item role
2. Set selectable and selected states as appropriate
https://bugzilla.gnome.org/show_bug.cgi?id=692258
gtk/a11y/Makefile.am | 6 +-
gtk/a11y/gtklistboxrowaccessible.c | 70 +++++++++++
gtk/a11y/gtklistboxrowaccessible.h | 55 +++++++++
gtk/gtk-a11y.h | 1 +
gtk/gtklistbox.c | 3 +
testsuite/a11y/listbox.txt | 222 +++++++++++++++++++++++-------------
testsuite/a11y/listbox.ui | 27 ++++-
7 files changed, 299 insertions(+), 85 deletions(-)
---
diff --git a/gtk/a11y/Makefile.am b/gtk/a11y/Makefile.am
index 9f643b8..25205b3 100644
--- a/gtk/a11y/Makefile.am
+++ b/gtk/a11y/Makefile.am
@@ -23,9 +23,10 @@ gtka11y_c_sources = \
gtkimageaccessible.c \
gtkimagecellaccessible.c \
gtklabelaccessible.c \
- gtklevelbaraccessible.c \
+ gtklevelbaraccessible.c \
gtklinkbuttonaccessible.c \
gtklistboxaccessible.c \
+ gtklistboxrowaccessible.c \
gtklockbuttonaccessible.c \
gtkmenuaccessible.c \
gtkmenushellaccessible.c \
@@ -71,9 +72,10 @@ gtka11yinclude_HEADERS = \
gtkimageaccessible.h \
gtkimagecellaccessible.h \
gtklabelaccessible.h \
- gtklevelbaraccessible.h \
+ gtklevelbaraccessible.h \
gtklinkbuttonaccessible.h \
gtklistboxaccessible.h \
+ gtklistboxrowaccessible.h \
gtklockbuttonaccessible.h \
gtkmenuaccessible.h \
gtkmenuitemaccessible.h \
diff --git a/gtk/a11y/gtklistboxrowaccessible.c b/gtk/a11y/gtklistboxrowaccessible.c
new file mode 100644
index 0000000..36e84a7
--- /dev/null
+++ b/gtk/a11y/gtklistboxrowaccessible.c
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2013 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 "gtklistboxrowaccessible.h"
+
+#include "gtk/gtklistbox.h"
+
+
+G_DEFINE_TYPE (GtkListBoxRowAccessible, gtk_list_box_row_accessible, GTK_TYPE_CONTAINER_ACCESSIBLE)
+
+static void
+gtk_list_box_row_accessible_init (GtkListBoxRowAccessible *accessible)
+{
+}
+
+static void
+gtk_list_box_row_accessible_initialize (AtkObject *obj,
+ gpointer data)
+{
+ ATK_OBJECT_CLASS (gtk_list_box_row_accessible_parent_class)->initialize (obj, data);
+
+ obj->role = ATK_ROLE_LIST_ITEM;
+}
+
+static AtkStateSet*
+gtk_list_box_row_accessible_ref_state_set (AtkObject *obj)
+{
+ AtkStateSet *state_set;
+ GtkWidget *widget, *parent;
+
+ state_set = ATK_OBJECT_CLASS (gtk_list_box_row_accessible_parent_class)->ref_state_set (obj);
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj));
+ if (widget != NULL)
+ {
+ parent = gtk_widget_get_parent (widget);
+ if (gtk_list_box_get_selection_mode (GTK_LIST_BOX (parent)) != GTK_SELECTION_NONE)
+ atk_state_set_add_state (state_set, ATK_STATE_SELECTABLE);
+
+ if (widget == (GtkWidget*)gtk_list_box_get_selected_row (GTK_LIST_BOX (parent)))
+ atk_state_set_add_state (state_set, ATK_STATE_SELECTED);
+ }
+
+ return state_set;
+}
+
+static void
+gtk_list_box_row_accessible_class_init (GtkListBoxRowAccessibleClass *klass)
+{
+ AtkObjectClass *object_class = ATK_OBJECT_CLASS (klass);
+
+ object_class->initialize = gtk_list_box_row_accessible_initialize;
+ object_class->ref_state_set = gtk_list_box_row_accessible_ref_state_set;
+}
diff --git a/gtk/a11y/gtklistboxrowaccessible.h b/gtk/a11y/gtklistboxrowaccessible.h
new file mode 100644
index 0000000..5b6bba9
--- /dev/null
+++ b/gtk/a11y/gtklistboxrowaccessible.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2013 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/>.
+ */
+
+#ifndef __GTK_LIST_BOX_ROW_ACCESSIBLE_H__
+#define __GTK_LIST_BOX_ROW_ACCESSIBLE_H__
+
+#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION)
+#error "Only <gtk/gtk-a11y.h> can be included directly."
+#endif
+
+#include <gtk/gtk.h>
+#include <gtk/a11y/gtkcontaineraccessible.h>
+
+G_BEGIN_DECLS
+
+#define GTK_TYPE_LIST_BOX_ROW_ACCESSIBLE (gtk_list_box_row_accessible_get_type ())
+#define GTK_LIST_BOX_ROW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
GTK_TYPE_LIST_BOX_ROW_ACCESSIBLE, GtkListBoxRowAccessible))
+#define GTK_LIST_BOX_ROW_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),
GTK_TYPE_LIST_BOX_ROW_ACCESSIBLE, GtkListBoxRowAccessibleClass))
+#define GTK_IS_LIST_BOX_ROW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),
GTK_TYPE_LIST_BOX_ROW_ACCESSIBLE))
+#define GTK_IS_LIST_BOX_ROW_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),
GTK_TYPE_LIST_BOX_ROW_ACCESSIBLE))
+#define GTK_LIST_BOX_ROW_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),
GTK_TYPE_LIST_BOX_ROW_ACCESSIBLE, GtkListBoxRowAccessibleClass))
+
+typedef struct _GtkListBoxRowAccessible GtkListBoxRowAccessible;
+typedef struct _GtkListBoxRowAccessibleClass GtkListBoxRowAccessibleClass;
+
+struct _GtkListBoxRowAccessible
+{
+ GtkContainerAccessible parent;
+};
+
+struct _GtkListBoxRowAccessibleClass
+{
+ GtkContainerAccessibleClass parent_class;
+};
+
+GDK_AVAILABLE_IN_3_10
+GType gtk_list_box_row_accessible_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GTK_LIST_BOX_ROW_ACCESSIBLE_H__ */
diff --git a/gtk/gtk-a11y.h b/gtk/gtk-a11y.h
index 34278da..ba46bcd 100644
--- a/gtk/gtk-a11y.h
+++ b/gtk/gtk-a11y.h
@@ -47,6 +47,7 @@
#include <gtk/a11y/gtklevelbaraccessible.h>
#include <gtk/a11y/gtklinkbuttonaccessible.h>
#include <gtk/a11y/gtklistboxaccessible.h>
+#include <gtk/a11y/gtklistboxrowaccessible.h>
#include <gtk/a11y/gtklockbuttonaccessible.h>
#include <gtk/a11y/gtkmenuaccessible.h>
#include <gtk/a11y/gtkmenuitemaccessible.h>
diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c
index 82a2811..2700dbd 100644
--- a/gtk/gtklistbox.c
+++ b/gtk/gtklistbox.c
@@ -28,6 +28,7 @@
#include <string.h>
#include "a11y/gtklistboxaccessibleprivate.h"
+#include "a11y/gtklistboxrowaccessible.h"
/**
* SECTION:gtklistbox
@@ -2812,6 +2813,8 @@ gtk_list_box_row_class_init (GtkListBoxRowClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_LIST_BOX_ROW_ACCESSIBLE);
+
object_class->get_property = gtk_list_box_row_get_property;
object_class->set_property = gtk_list_box_row_set_property;
object_class->finalize = gtk_list_box_row_finalize;
diff --git a/testsuite/a11y/listbox.txt b/testsuite/a11y/listbox.txt
index b9ebd07..18b5e35 100644
--- a/testsuite/a11y/listbox.txt
+++ b/testsuite/a11y/listbox.txt
@@ -7,109 +7,175 @@ window1
layer: window
alpha: 1
box1
- "list box"
+ "filler"
parent: window1
index: 0
- state: enabled sensitive showing visible manages-descendants
+ state: enabled horizontal sensitive showing visible
toolkit: gtk
<AtkComponent>
layer: widget
alpha: 1
- <AtkSelection>
- selected children: unnamed-GtkContainerAccessible-0
- unnamed-GtkContainerAccessible-0
- "list item"
+ listbox1
+ "list box"
parent: box1
index: 0
- state: enabled focusable sensitive showing visible
+ state: enabled sensitive showing visible manages-descendants
toolkit: gtk
<AtkComponent>
layer: widget
alpha: 1
- row1
- "label"
- parent: unnamed-GtkContainerAccessible-0
+ <AtkSelection>
+ unnamed-GtkListBoxRowAccessible-0
+ "list item"
+ parent: listbox1
index: 0
- name: Row One
- state: enabled multi-line sensitive showing visible
+ state: enabled focusable sensitive showing visible
toolkit: gtk
<AtkComponent>
layer: widget
alpha: 1
- <AtkText>
- text: Row One
- character count: 7
- caret offset: 0
- default attributes: bg-color: <omitted>
- bg-full-height: 0
- direction: <omitted>
- editable: false
- family-name: <omitted>
- fg-color: <omitted>
- indent: 0
- invisible: false
- justification: left
- language: <omitted>
- left-margin: 0
- pixels-above-lines: 0
- pixels-below-lines: 0
- pixels-inside-wrap: 0
- right-margin: 0
- rise: 0
- scale: 1
- size: <omitted>
- stretch: <omitted>
- strikethrough: false
- style: <omitted>
- underline: none
- variant: <omitted>
- weight: <omitted>
- wrap-mode: word
- unnamed-GtkContainerAccessible-1
- "list item"
+ row1
+ "label"
+ parent: unnamed-GtkListBoxRowAccessible-0
+ index: 0
+ name: Row One
+ state: enabled multi-line sensitive showing visible
+ toolkit: gtk
+ <AtkComponent>
+ layer: widget
+ alpha: 1
+ <AtkText>
+ text: Row One
+ character count: 7
+ caret offset: 0
+ default attributes: bg-color: <omitted>
+ bg-full-height: 0
+ direction: <omitted>
+ editable: false
+ family-name: <omitted>
+ fg-color: <omitted>
+ indent: 0
+ invisible: false
+ justification: left
+ language: <omitted>
+ left-margin: 0
+ pixels-above-lines: 0
+ pixels-below-lines: 0
+ pixels-inside-wrap: 0
+ right-margin: 0
+ rise: 0
+ scale: 1
+ size: <omitted>
+ stretch: <omitted>
+ strikethrough: false
+ style: <omitted>
+ underline: none
+ variant: <omitted>
+ weight: <omitted>
+ wrap-mode: word
+ unnamed-GtkListBoxRowAccessible-1
+ "list item"
+ parent: listbox1
+ index: 1
+ state: enabled focusable sensitive showing visible
+ toolkit: gtk
+ <AtkComponent>
+ layer: widget
+ alpha: 1
+ row2
+ "label"
+ parent: unnamed-GtkListBoxRowAccessible-1
+ index: 0
+ name: Row Two
+ state: enabled multi-line sensitive showing visible
+ toolkit: gtk
+ <AtkComponent>
+ layer: widget
+ alpha: 1
+ <AtkText>
+ text: Row Two
+ character count: 7
+ caret offset: 0
+ default attributes: bg-color: <omitted>
+ bg-full-height: 0
+ direction: <omitted>
+ editable: false
+ family-name: <omitted>
+ fg-color: <omitted>
+ indent: 0
+ invisible: false
+ justification: left
+ language: <omitted>
+ left-margin: 0
+ pixels-above-lines: 0
+ pixels-below-lines: 0
+ pixels-inside-wrap: 0
+ right-margin: 0
+ rise: 0
+ scale: 1
+ size: <omitted>
+ stretch: <omitted>
+ strikethrough: false
+ style: <omitted>
+ underline: none
+ variant: <omitted>
+ weight: <omitted>
+ wrap-mode: word
+ listbox2
+ "list box"
parent: box1
index: 1
- state: enabled focusable sensitive showing visible
+ state: enabled sensitive showing visible manages-descendants
toolkit: gtk
<AtkComponent>
layer: widget
alpha: 1
- row2
- "label"
- parent: unnamed-GtkContainerAccessible-1
+ <AtkSelection>
+ unnamed-GtkListBoxRowAccessible-2
+ "list item"
+ parent: listbox2
index: 0
- name: Row Two
- state: enabled multi-line sensitive showing visible
+ state: enabled focusable selectable sensitive showing visible
toolkit: gtk
<AtkComponent>
layer: widget
alpha: 1
- <AtkText>
- text: Row Two
- character count: 7
- caret offset: 0
- default attributes: bg-color: <omitted>
- bg-full-height: 0
- direction: <omitted>
- editable: false
- family-name: <omitted>
- fg-color: <omitted>
- indent: 0
- invisible: false
- justification: left
- language: <omitted>
- left-margin: 0
- pixels-above-lines: 0
- pixels-below-lines: 0
- pixels-inside-wrap: 0
- right-margin: 0
- rise: 0
- scale: 1
- size: <omitted>
- stretch: <omitted>
- strikethrough: false
- style: <omitted>
- underline: none
- variant: <omitted>
- weight: <omitted>
- wrap-mode: word
+ row3
+ "label"
+ parent: unnamed-GtkListBoxRowAccessible-2
+ index: 0
+ name: Row Tree
+ state: enabled multi-line sensitive showing visible
+ toolkit: gtk
+ <AtkComponent>
+ layer: widget
+ alpha: 1
+ <AtkText>
+ text: Row Tree
+ character count: 8
+ caret offset: 0
+ default attributes: bg-color: <omitted>
+ bg-full-height: 0
+ direction: <omitted>
+ editable: false
+ family-name: <omitted>
+ fg-color: <omitted>
+ indent: 0
+ invisible: false
+ justification: left
+ language: <omitted>
+ left-margin: 0
+ pixels-above-lines: 0
+ pixels-below-lines: 0
+ pixels-inside-wrap: 0
+ right-margin: 0
+ rise: 0
+ scale: 1
+ size: <omitted>
+ stretch: <omitted>
+ strikethrough: false
+ style: <omitted>
+ underline: none
+ variant: <omitted>
+ weight: <omitted>
+ wrap-mode: word
diff --git a/testsuite/a11y/listbox.ui b/testsuite/a11y/listbox.ui
index b51669d..d20c4c4 100644
--- a/testsuite/a11y/listbox.ui
+++ b/testsuite/a11y/listbox.ui
@@ -5,18 +5,35 @@
<property name="can_focus">False</property>
<property name="type">popup</property>
<child>
- <object class="GtkListBox" id="box1">
+ <object class="GtkBox" id="box1">
<property name="visible">True</property>
<child>
- <object class="GtkLabel" id="row1">
+ <object class="GtkListBox" id="listbox1">
<property name="visible">True</property>
- <property name="label">Row One</property>
+ <property name="selection-mode">none</property>
+ <child>
+ <object class="GtkLabel" id="row1">
+ <property name="visible">True</property>
+ <property name="label">Row One</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="row2">
+ <property name="visible">True</property>
+ <property name="label">Row Two</property>
+ </object>
+ </child>
</object>
</child>
<child>
- <object class="GtkLabel" id="row2">
+ <object class="GtkListBox" id="listbox2">
<property name="visible">True</property>
- <property name="label">Row Two</property>
+ <child>
+ <object class="GtkLabel" id="row3">
+ <property name="visible">True</property>
+ <property name="label">Row Tree</property>
+ </object>
+ </child>
</object>
</child>
</object>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]