From 7982b946c50bf904144bfd066602c6d6876805ed Mon Sep 17 00:00:00 2001 From: Joanmarie Diggs Date: Fri, 8 May 2015 11:46:42 -0400 Subject: [PATCH] ev-properties-view: Add accessible relations between the labels The properties view grid consists of two columns, the left column contains a GtkLabel which describes, or "labels," the property displayed in the GtkLabel in the right column. The lack of accessible relations between the labels in each column means Orca has no clue that it should also present the label on the left when the user Tabs amongst the labels on the right, and that it should not treat labels on the left as static text. https://bugzilla.gnome.org/show_bug.cgi?id=749127 --- properties/ev-properties-view.c | 38 +++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/properties/ev-properties-view.c b/properties/ev-properties-view.c index aa915382..1a6a78e1 100644 --- a/properties/ev-properties-view.c +++ b/properties/ev-properties-view.c @@ -158,32 +158,33 @@ set_property (EvPropertiesView *properties, const gchar *text, gint *row) { - GtkWidget *label; + GtkWidget *property_label = NULL; + GtkWidget *value_label = NULL; gchar *markup; gchar *valid_text; if (!properties->labels[property]) { - label = gtk_label_new (NULL); - g_object_set (G_OBJECT (label), "xalign", 0.0, NULL); + property_label = gtk_label_new (NULL); + g_object_set (G_OBJECT (property_label), "xalign", 0.0, NULL); markup = g_strdup_printf ("%s", _(properties_info[property].label)); - gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_label_set_markup (GTK_LABEL (property_label), markup); g_free (markup); - gtk_grid_attach (grid, label, 0, *row, 1, 1); - gtk_widget_show (label); + gtk_grid_attach (grid, property_label, 0, *row, 1, 1); + gtk_widget_show (property_label); } if (!properties->labels[property]) { - label = gtk_label_new (NULL); + value_label = gtk_label_new (NULL); - g_object_set (G_OBJECT (label), + g_object_set (G_OBJECT (value_label), "xalign", 0.0, "width_chars", 25, "selectable", TRUE, "ellipsize", PANGO_ELLIPSIZE_END, NULL); } else { - label = properties->labels[property]; + value_label = properties->labels[property]; } if (text == NULL || text[0] == '\000') { @@ -193,20 +194,29 @@ set_property (EvPropertiesView *properties, Keywords: None */ markup = g_markup_printf_escaped ("%s", _("None")); - gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_label_set_markup (GTK_LABEL (value_label), markup); g_free (markup); } else { valid_text = make_valid_utf8 (text ? text : ""); - gtk_label_set_text (GTK_LABEL (label), valid_text); + gtk_label_set_text (GTK_LABEL (value_label), valid_text); g_free (valid_text); } if (!properties->labels[property]) { - gtk_grid_attach (grid, label, 1, *row, 1, 1); - properties->labels[property] = label; + gtk_grid_attach (grid, value_label, 1, *row, 1, 1); + properties->labels[property] = value_label; } - gtk_widget_show (label); + if (property_label && value_label) { + atk_object_add_relationship (gtk_widget_get_accessible (property_label), + ATK_RELATION_LABEL_FOR, + gtk_widget_get_accessible (value_label)); + atk_object_add_relationship (gtk_widget_get_accessible (value_label), + ATK_RELATION_LABELLED_BY, + gtk_widget_get_accessible (property_label)); + } + + gtk_widget_show (value_label); *row += 1; }