File: accessibility-devel-guide.xml

package info (click to toggle)
gnome-devel-docs 3.4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 28,808 kB
  • sloc: xml: 101,979; sh: 625; makefile: 380; ansic: 340; cpp: 131; python: 80
file content (1785 lines) | stat: -rw-r--r-- 114,317 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
<!ENTITY gnomeversion "2.24">
<!ENTITY manrevision "2.24.0">
<!ENTITY date "September 2008">
<!ENTITY LEGAL SYSTEM "legal.xml">
<!ENTITY gad SYSTEM "gad.xml">
<!ENTITY gtest SYSTEM "gtest.xml">
]>
<?db.chunk.max_depth 4?>
<book id="index" lang="es">
<title>Guía de accesibilidad para los desarrolladores de GNOME</title>
<bookinfo>
<abstract role="description">
<para>La Guía de accesibilidad de GNOME es para desarrolladores que quieren asegurarse de que sus esfuerzos de programación son accesibles a la mayoría de usuarios. Esta guía también cubre muchos de los requisitos de la Sección 508.</para>
</abstract>
<copyright> 
<year>2008</year>
<holder>Vincent Alexander</holder>
</copyright>
<copyright> 
<year>2001, 2002</year>
<holder>Calum Benson, Brian Cameron, Bill Haneman, Padraig O'Briain, Sharon Snider</holder>
</copyright><copyright><year>2009-2010</year><holder>Jorge González (jorgegonz@svn.gnome.org)</holder></copyright><copyright><year>2010</year><holder>Francisco Javier F. Serrador (fserrador@gmail.com)</holder></copyright><copyright><year>2011</year><holder>Daniel Mustieles (daniel.mustieles@gmail.com)</holder></copyright>
<publisher role="maintainer"> 
<publishername>Proyecto de documentación de GNOME</publishername> 
</publisher>
<legalnotice id="legalnotice">
<para>Se concede permiso para copiar, distribuir o modificar este documento según las condiciones de la GNU Free Documentation License (GFDL), Versión 1.1 o cualquier versión posterior publicada por la Free Software Foundation sin Secciones invariantes, Textos de portada y Textos de contraportada. Encontrará una copia de la GFDL en este <ulink type="help" url="ghelp:fdl">enlace</ulink> o en el archivo COPYING-DOCS distribuido con este manual.</para>
<para>Este manual es parte de la colección de manuales GNOME distribuidos bajo el GFDL. Si quiere distribuir este manual separadamente de la colección, puede hacerlo añadiendo una copia de la licencia al manual, como está descrito en la sección 6 de la licencia.</para>
<para>Muchos de los nombres utilizados por las empresas para distinguir sus productos y servicios se consideran marcas comerciales. Cuando estos nombres aparezcan en la documentación de GNOME, y siempre que se haya informado a los miembros del Proyecto de documentación de GNOME de dichas marcas comerciales, los nombres aparecerán en mayúsculas o con las iniciales en mayúsculas.</para>
<para>ESTE DOCUMENTO Y LAS VERSIONES MODIFICADAS DEL MISMO SE PROPORCIONAN SEGÚN LAS CONDICIONES ESTABLECIDAS EN LA LICENCIA DE DOCUMENTACIÓN LIBRE DE GNU (GFDL) Y TENIENDO EN CUENTA QUE: <orderedlist>
<listitem>
<para>EL DOCUMENTO SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI EXPLÍCITA NI IMPLÍCITA INCLUYENDO, SIN LIMITACIÓN, GARANTÍA DE QUE EL DOCUMENTO O VERSIÓN MODIFICADA DE ÉSTE CAREZCA DE DEFECTOS COMERCIALES, SEA ADECUADO A UN FIN CONCRETO O INCUMPLA ALGUNA NORMATIVA. TODO EL RIESGO RELATIVO A LA CALIDAD, PRECISIÓN Y UTILIDAD DEL DOCUMENTO O SU VERSIÓN MODIFICADA RECAE EN USTED. SI CUALQUIER DOCUMENTO O VERSIÓN MODIFICADA DE AQUÉL RESULTARA DEFECTUOSO EN CUALQUIER ASPECTO, USTED (Y NO EL REDACTOR INICIAL, AUTOR O CONTRIBUYENTE) ASUMIRÁ LOS COSTES DE TODA REPARACIÓN, MANTENIMIENTO O CORRECCIÓN NECESARIOS. ESTA RENUNCIA DE GARANTÍA ES UNA PARTE ESENCIAL DE ESTA LICENCIA. NO SE AUTORIZA EL USO DE NINGÚN DOCUMENTO NI VERSIÓN MODIFICADA DE ÉSTE POR EL PRESENTE, SALVO DENTRO DEL CUMPLIMIENTO DE LA RENUNCIA;Y</para>
</listitem>
<listitem>
<para>EN NINGUNA CIRCUNSTANCIA NI SEGÚN NINGÚN ARGUMENTO LEGAL, SEA POR MOTIVOS CULPOSOS (INCLUIDA LA NEGLIGENCIA), CONTRACTUALES O DE OTRO TIPO, NI EL AUTOR, NI EL REDACTOR INICIAL, NI CUALQUIER COLABORADOR, NI CUALQUIER DISTRIBUIDOR DEL DOCUMENTO O VERSIÓN MODIFICADA DEL MISMO, NI CUALQUIER PROVEEDOR DE CUALQUIERA DE DICHAS PARTES, SERÁN RESPONSABLES, ANTE NINGÚN TERCERO, DE NINGÚN DAÑO O PERJUICIO DIRECTO, INDIRECTO, ESPECIAL, INCIDENTAL O CONSIGUIENTE DE NINGÚN TIPO, INCLUIDOS, SIN LIMITACIÓN, LOS DAÑOS POR PÉRDIDA DE FONDO DE COMERCIO, INTERRUPCIÓN DEL TRABAJO, FALLO O MAL FUNCIONAMIENTO INFORMÁTICO, NI CUALQUIER OTRO DAÑO O PÉRDIDA DERIVADOS DEL USO DEL DOCUMENTO Y LAS VERSIONES MODIFICADAS DEL MISMO, O RELACIONADO CON ELLO, INCLUSO SI SE HABÍA COMUNICADO A AQUELLA PARTE LA POSIBILIDAD DE TALES DAÑOS.</para>
</listitem>
</orderedlist></para>
</legalnotice>
 
<authorgroup> 
<author>
<firstname>Vincent</firstname>
<surname>Alexander</surname>
<affiliation>
<orgname>Proyecto de documentación de GNOME</orgname>
</affiliation>
</author>
<author>
<firstname>Calum</firstname>
<surname>Benson</surname>
<affiliation>
<orgname>Proyecto de documentación de GNOME</orgname>
</affiliation>
</author>
<author>
<firstname>Brian</firstname>
<surname>Cameron</surname>
<affiliation>
<orgname>Proyecto de documentación de GNOME</orgname>
</affiliation>
</author>
<author> 
<firstname>Bill</firstname>
<surname>Haneman</surname>
<affiliation>
<orgname>Proyecto de documentación de GNOME</orgname>  
</affiliation>
</author>
<author>
<firstname>Padraig</firstname> 
<surname>O'Briain</surname> 
<affiliation> 
<orgname>Proyecto de documentación de GNOME</orgname>  
</affiliation> 
</author> 
<author> 
<firstname>Sharon</firstname> 
<surname>Snider</surname> 
<affiliation> 
<orgname>Proyecto de documentación de GNOME</orgname>  
</affiliation> 
</author>
</authorgroup>
<revhistory>
<revision> 
<revnumber>Guía de accesibilidad para los desarrolladores de GNOME 2.24 V2.24.0</revnumber> 
<date>Septiembre de 2008</date> 
<revdescription> 
<para role="author">Proyecto de documentación de GNOME</para> 
<para role="publisher">Proyecto de documentación de GNOME</para> 
</revdescription> 
</revision>
<revision> 
<revnumber>Guía de accesibilidad para los desarrolladores de GNOME 2.24 V2.24.0</revnumber> 
<date>Septiembre de 2008</date> 
<revdescription> 
<para role="author">Proyecto de documentación de GNOME</para> 
<para role="publisher">Proyecto de documentación de GNOME</para> 
</revdescription> 
</revision>
</revhistory>
<releaseinfo>Este manual describe la versión 2.24 del Escritorio GNOME.</releaseinfo>
<legalnotice> 
<title>Comentarios</title> 
<para>Para informar de un error o hacer una sugerencia respecto al Escritorio GNOME o este manual, siga las indicaciones en la <ulink type="help" url="ghelp:user-guide?feedback">Página de comentarios de GNOME</ulink>.</para>
</legalnotice> 
</bookinfo>
<chapter id="gad" status="draft">
<title>¿Qué es la accesibilidad?</title>
<para>Accesibilidad significa ayudar a que gente con discapacidades participe en las actividades sustanciales de la vida. Esto incluye trabajo, el uso de servicios, productos e información. GNOME incluye bibliotecas y soporte para entorno de trabajo que permite que personas con discapacidades utilicen toda la funcionalidad del entorno de usuario de GNOME.</para>
<para>Junto con las tecnologías de asistencia si es necesario (interfaces de voz, pantallas de lector, dispositivos de entrada alternativos, y similares) gente con discapacidades permanentes o temporales puede usar el escritorio y las aplicaciones de GNOME. Las tecnologías de asistencia también son útiles para gente que usa los equipos fuera de su casa u oficina. Por ejemplo, si está en un atasco de tráfico puede utilizar la entrada y salida de voz para comprobar su correo electrónico.</para>
<para>Las tecnologías de asistencia reciben información desde aplicaciones a través del API de las Herramientas de accesibilidad, que puede encontrar en el módulo de atk en el repositorio de GNOME. Debido a que el soporte de accesibilidad API está construido dentro de los widgets de GNOME, su programa GNOME debería funcionar razonablemente bien con las tecnologías de asistencia sin ningún trabajo adicional por su parte. Por ejemplo, las tecnologías de asistencia pueden leer automáticamente las etiquetas de los widgets que generalmente establecerá en su programa (ej. con las llamadas a funciones de GTK tales como <function>gtk_label_set_text()</function> o <function>gtk_button_new_with_label()</function>). También pueden encontrarse si hay cualquier descripción de texto asociada con un widget, y usarlo para describir el widget al usuario.</para>
<para>Con un poco de esfuerzo adicional puede hacer que su programa funcione aún más suavemente con tecnologías de asistencia. Además de ayudar a usuarios individuales, también hará que su producto sea más atractivo en el mercados del gobierno y educativo, muchos de los cuales ahora requieren que sus aplicaciones sean accesibles por ley.</para>

<section>
<title>Tipos de discapacidades</title>
<para>Sólo en los EE. UU. existe una estimación de 30 000 000 personas cuya capacidad para usar equipos puede estar comprometida por un diseño inaccesible. Globalmente alrededor del 8% de la población que usa Internet tiene algún tipo de discapacidad. Las discapacidades pueden ser de una de estas categorías:</para>
<itemizedlist>
<listitem>
<para><emphasis>Discapacidades visuales</emphasis>: estos pueden ir desde baja visión (incluyendo visión borrosa o nublada, visión extrema de hipermetropía o miopía, daltonismo, y visión de túnel, entre otros) hasta la ceguera completa. Una pobre elección del tamaño y color del texto, y tareas que implican una buena coordinación mano-ojo (tales como mover el ratón) pueden causan problemas para estos usuarios.</para>
</listitem>
<listitem>
<para><emphasis>Discapacidades de movimiento</emphasis>: los usuarios con un control pobre o debilidad en sus músculos pueden encontrar muy difícil usar un teclado estándar o un ratón. Por ejemplo, pueden ser incapaces de mantener pulsadas dos teclas a la vez, o pueden ser más propensos a pulsar teclas accidentalmente.</para>
</listitem>
<listitem>
<para><emphasis>Deficiencias auditivas</emphasis>: éstas pueden variar desde ser capaz de oír algunos sonidos pero no distinguir las palabras habladas, hasta sordera profunda. Las aplicaciones que comunican información importante exclusivamente a través del sonido pueden causar problemas para estos usuarios.</para>
</listitem>
<listitem>
<para><emphasis>Trastornos Cognitivos y del Lenguaje</emphasis> - éstas pueden ir desde la dislexia a las dificultades para recordar cosas, resolver problemas o comprender y utilizar el lenguaje hablado o escrito. Es difícil la exposición compleja o inconsistente, o la selección pobre de palabras usando ordenadores para estos usuarios.</para>
</listitem>
<listitem>
<para><emphasis>Trastornos convulsivos</emphasis>: cierta luz o patrones de sonido pueden causar ataques epilépticos en algunos usuarios susceptibles.</para>
</listitem>
</itemizedlist>
</section>

<section id="gad-how-it-works">
<title>Cómo funciona la accesibilidad en GNOME</title>
<para>El Kit de herramientas de accesibilidad (ATK) describe un grupo de interfaces que necesita ser implementado por los componentes IGU para hacerlos accesibles. Los interfaces son conjuntos de herramientas independientes; las implementaciones se pueden escribir para cualquier conjunto de widgets, como GTK, Motif o Qt.</para>
<para>La implementación para los widgets GTK está en un módulo llamado GAIL («GNOME Accessibility Implementation Library», Biblioteca de implementación de accesibilidad de GNOME), cargada dinámicamente, en tiempo de ejecución, por una aplicación GTK. Una vez cargadas, dichas partes de su aplicación que usan widgets estándar GTK tendrán un nivel básico de accesibilidad, sin tener que modificar nada de su aplicación. Si no se carga GAIL, los widgets GTK tendrán una implementación de accesibilidad predeterminada que esencialmente no devuelve ninguna información, aunque nominalmente se ajusta la API de ATK. Las aplicaciones que usan controladores Bonobo, particularmente aquellas fuera del proceso, también cargan códigos para el soporte de accesibilidad desde el módulo libgail-gnome. Que las aplicaciones del escritorio GNOME carguen automáticamente estas bibliotecas de soporte para la accesibilidad depende del valor de una clave de <application>gconf</application>, «/desktop/gnome/interface/accessibility»; un valor booleano cierto activa el soporte para las tecnologías de asistencia y las aplicaciones que llaman a gnome_program_init que cargará automáticamente librerías de accesibilidad en tiempo de carga. Las «aplicaciones GTK puras» por ejemplo, aquellas que usan gtk+ pero no enlazan libgnome, dependen del valor de la variable de entorno GTK_MODULES, las cual debe establecerse a «gail:atk-bridge» para activar el soporte de las tecnologías de asistencia.</para>
<para>La mayoría de las tecnologías de asistencia que funcionan en otros escritorios históricamente han encontrado necesario mantener un modelo complejo fuera de la pantalla de las aplicaciones del escritorio, basada en fisgonear los eventos del S.O., uso de S.O. no soportados y características de la aplicación y API y otras técnicas altamente no portables. Esto ha hecho que el apoyo tecnológico de la ayuda sea un poco frágil y la aplicación específica del S.O., incluso específicos de la aplicación de versiones. Por el contrario, en el escritorio GNOME, toda la información requerida por las TA lo proporcionan las aplicaciones en ejecución, a través del marco de accesibilidad de GNOME, un conjunto de herramientas independientes de la interfaz de proveedor de servicios (SPI). El SPI proporciona medios de TA basados en UNIX, tales como lectores de pantalla y magnificadores de pantalla, para obtener información sobre la accesibilidad de la ejecución de aplicaciones a través de una API consistente y estable, y en muchos casos puede eliminar la necesidad de un modelo fuera de la pantalla. El soporte de accesibilidad para las solicitudes está «incluída» en los kits de herramientas de aplicaciones a través del conjunto del API de herramientas adecuadas (por ejemplo, ATK para la mayoría de las aplicaciones nativas de C y el API de accesibilidad de Java para las aplicaciones Java), y exportados al interfaz común «AT-SPI» a través del correspondiente «bridge» (vea el diagrama abajo).</para>
<figure id="gad-architecture">
<title>Arquitectura de accesibilidad de GNOME</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/GNOME_desktop_Accessibility.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Diagrama de la arquitectura de accesibilidad en GNOME</phrase>
</textobject>
</mediaobject>
</figure>
<para>El soporte integrado de accesibilidad de GNOME significa que las aplicaciones creadas utilizando los widgets obtienen soporte para ñas tecnologías de asistencia de forma predeterminada, siempre que los widgets no se utilicen de forma inusual utilizan y entre en conflicto con este soporte integrado.</para>
<para>Un widget de GTK+/GNOME es accesible si su uso sigue las directrices de accesibilidad general en otras partes de este documento, e implementa los interfaces de ATK apropiadamente para su rol en el interfaz del usuario. La implementaciones de ATK se proporcionan para el kit de herramientas de los widgets de GNOME llamado «stock» (ej. GTK+ no obsoleto y los widgets de GNOME), y en muchos casos los widgets nuevos que derivan tribialmente desde los widgets de GTK+ y GNOME existentes que también heredarán el soporte adecuado de accesibilidad.</para>
<para>Aunque el soporte integrado de accesibilidad de GNOME proporciona una funcionalidad significativa, sin cambios de código específicos de accesibilidad en la parte de la aplicación, a menudo las aplicaciones puede mejorar sus descripciones predeterminadas que proporcionan algunos de los «widgets», y adaptarlas para algunos de los widgets específicos de su aplicación, a través de llamadas directas a los métodos de ATK en la aplicación. Por ejemplo, en la mayoría de los casos las solicitudes deben añadir o cambiar las descripciones textuales de los widgets con la llamada de función apropiada de ATK, de forma que una tecnología de asistencia puede describir su finalidad o del estado para el usuario. Para obtener más información consulte las <link linkend="gad-coding-guidelines">Instrucciones de programación para soporte de accesibilidad</link>.</para>
<para>Si su aplicación usa widgets personalizados, puede que tenga que hacer algún trabajo para exponer las propiedades de los widgets para las tecnologías de asistencia. Para obtener más información, consulte <link linkend="gad-custom">Creación de componentes personalizados accesibles</link> y <link linkend="gad-api-examples">Ejemplos de uso de la API de accesibilidad</link>.</para>
<para>Para obtener información en mayor profundidad acerca de GTK/GTK+, consulte el <ulink url="http://library.gnome.org/devel/gtk">Manual de referencia de GTK+</ulink>, <ulink url="http://live.gnome.org/GAP/AtkGuide/Gtk">la sección de GTK de la Guía de ATK</ulink>, la organización para GNOME del <ulink url="http://library.gnome.org/devel/gtk-tutorial/stable/">Tutorial de GTK+ 2.0</ulink> y las <ulink url="http://library.gnome.org/devel/gtk-faq/stable/">P+F de GTK+</ulink>.</para>
</section>

<section id="dev-start">
<title>Inicio rápido para desarrolladores</title>
<para>Aquí hay algunos puntos comunes de inicio:</para>

<section id="dev-start-1">
<title>¿Cómo compruebo si mi aplicación es accesible o no?</title>
<para>Para comenzar correctamente, consulte <link linkend="gad-overview">Programación de una aplicación accesible para GNOME - Información general</link>. Para obtener una perspectiva pre-codificación, consulte las <link linkend="gad-ui-guidelines">Directrices de interfaz de usuario para el soporte de accesibilidad</link> o <link linkend="gad-coding-guidelines">Instrucciones de codificación de apoyo de accesibilidad</link>. Para obtener una lista de elementos de prueba de post-diseño consulte la <link linkend="gad-checklist">Lista de comprobación de la interfaz de usuario</link>.</para>
</section>

<section id="dev-start-2">
<title>¿Cuáles son las principales dificultades?</title>
<para>La <link linkend="gad-checklist">lista de comprobación del interfaz de usuario</link> cubre todas las áreas y algunas veces ignoradas en la fase de diseño.</para>
</section>

<section id="dev-start-3">
<title>¿Cómo hago cosas ATK comunes?</title>
<para>Una lista abreviada de llamadas a ATK se puede encontrar <link linkend="gad-api">aquí</link>.</para>
</section>

<section id="dev-start-4">
<title>¿Cómo hago cosas ATK complejas?</title>
<para>Para obtener más información consulte <link linkend="gad-custom">Hacer los componentes personalizados accesibles</link> y <link linkend="gad-api-examples">Ejemplos que usano la API de accesibilidad</link>.</para>
</section>

<section id="dev-start-5">
<title>Introducción a ATK, AT-SPI, GAIL y GTK+</title>
<screenshot>
<mediaobject>
<imageobject>
<imagedata fileref="figures/gaa.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Arquitectura de accesibilidad de GNOME</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>ATK es el kit de herramientas que usa GNOME para activar la accesibilidad para usuarios que necesiten un soporte adicional para sacar el mayor rendimiento de sus equipos. ATK lo usan herramientas tales como los lectores de pantalla, magnificadores y dispositivos de entrada para permitir una interacción rica con el escritorio a través de medios alternativos. Para obtener más información, consulte el <ulink url="http://java-gnome.sourceforge.net/4.0/doc/api/org/gnome/atk/package-summary.html">Proyecto ATK en SourceForge</ulink> y la <ulink url="http://library.gnome.org/devel/atk/stable/atk.html">biblioteca de ATK</ulink>.</para>
<para>AT-SPI es el servicio primario de interfaz por el que las tecnologías de asistencia solicitan y reciben notificaciones desde las aplicaciones en ejecución. Puede examinar la API <ulink url="http://library.gnome.org/devel/at-spi-cspi/stable/">aquí</ulink>. Existe material adicional disponible en la <ulink url="http://accessibility.kde.org/developer/atk.php#coreclasses">Comunidad de desarrollo de accesibilidad de KDE</ulink>.</para>
<para>GAIL («GNOME Accessibility Implementation Library», Biblioteca de implementación de accesibilidad de GNOME) es una implementación de las interfaces de accesibilidad definidas por ATK. GTK es un grupo de herramientas que ya está mapeado para ATK por el módulo de GAIL. Puede encontrar la licencia, la descarga y otra información <ulink url="http://www.t2-project.org/packages/gail.html">aquí</ulink>. El <ulink url="ftp://ftp.gnome.org/pub/GNOME/sources/gail/">código fuente de GAIL</ulink> también sirve como un tutorial excelente para el uso avanzado de ATK. Además, puede interesarle el <ulink url="http://library.gnome.org/devel/gail-libgail-util/stable/">Manual de Referencia de GAIL</ulink>.</para>
<para>GTK+ es una biblioteca para crear interfaces gráficas de usuario. Funciona en muchas plataformas UNIX, Windows y en dispositivos de framebuffer. GTK + se publica bajo la Licencia General Pública de GNU (GNU LGPL), la cual permite que la concesión flexible de licencias de aplicaciones cliente. GTK+ tiene una arquitectura basada en C orientada a objetos que proporciona una flexibilidad máxima. Se han escrito «bindings» para otros lenguajes, incluyendo C++, Objective-C, Guile/Scheme, Perl, Python, TOM, Ada95, Free Pascal y Eiffel.</para>
<para>Para obtener información en mayor profundidad acerca de GTK/GTK+, consulte el <ulink url="http://library.gnome.org/devel/gtk">Manual de referencia de GTK+</ulink>, <ulink url="http://live.gnome.org/GAP/AtkGuide/Gtk">la sección de GTK de la Guía de ATK</ulink>, la organización para GNOME del <ulink url="http://library.gnome.org/devel/gtk-tutorial/stable/">Tutorial de GTK+ 2.0</ulink> y las <ulink url="http://library.gnome.org/devel/gtk-faq/stable/">P+F de GTK+</ulink>.</para>
</section>
</section>

<section id="gad-overview">
<title>Hacer que una aplicación de GNOME sea accesible: Visión general</title>
<para>Si su aplicación sólo usa los widgets estándar de GTK, probablemente tendrá poco o nada que hacer para hacer (razonablemente) accesible su aplicación. Pero cuidado con los objetos de la interfaz gráfica de usuario que no tienen una descripción textual asociada a ellos, tales como botones gráficos o indicadores de estado que no tienen etiquetas o información sobre herramientas.</para>
<para>Probablemente también pueda mejorar las descripciones predeterminadas para algunos de los widgets, y adaptarlos a propósito específico del widget en su aplicación. Podría añadir o cambiar las descripciones textuales para estos widgets con la llamada de función ATK apropiada, de forma que una tecnología de asistencia puede describir su propósito o estado al usuario. Consulte las <link linkend="gad-coding-guidelines">Guías de codificación para soportar accesibilidad</link> para obtener más información.</para>
<para>Si su aplicación usa widgets personalizados, puede tener que trabajar un poco para exponer las propiedades de los widgets para las tecnologías de asistencia. Consulte <link linkend="gad-custom">Creación de componentes personalizados accesibles</link> y <link linkend="gad-api-examples">Ejemplos que usan la API de accesibilidad</link> para obtener más información. Puede encontrar información adicional detallada en la presentación de Marc Mulcahy's 2002 GUADEC, <ulink url="http://developer.gnome.org/projects/gap/presentations/GUAD3C/making-apps-accessible/start.html">"Making GNOME Applications Accessible".</ulink></para>
</section>

<section id="gad-coding-guidelines">
<title>Guías de programación para soporte de accesibilidad</title>
<para>Aquí hay algunas cosas que puede codificar para hacer que su programa trabaje tan bien como sea posible con las tecnologías de asistencia. (Puede encontrar una lista de cosas que tener en cuenta cuando diseñe su IGU en la sección <link linkend="gad-ui-guidelines">Guías de la interfaz de usuario para soportar accesibilidad</link> más tarde en sus documentos):</para>
<itemizedlist>
<listitem>
<para>Para los componentes que no muestren una cadena corta (tales como un botón gráfico), especifique un nombre para ellos con <function>atk_object_set_name()</function>. Puede querer hacerlo para botones con imagen exclusivamente, paneles que proporcionen agrupaciones lógicas, áreas de texto y demás.</para>
</listitem>
<listitem>
<para>Si no puede proporcionar una sugerencia para un componente, use <function>atk_object_set_description()</function> en su lugar para proporcionar una descripción que las tecnologías de asistencia puedan proporcionar al usuario. Por ejemplo, para proporcionar una descripción accesible para un botón <function>Cerrar</function>.</para>
<example>
<title>Proporcionar una descripción accesible para un GtkButton</title>
<programlisting>
{
  AtkObject *obj;
  obj = gtk_widget_get_accessible(button);
  atk_object_set_description(obj,_("Cierra la ventana"));
}
</programlisting>
</example>
</listitem>
<listitem>
<para>Use <function>atk_image_set_description()</function> para proporcionar una descripción de texto para todas las imágenes e iconos de su programa.</para>
</listitem>
<listitem>
<para>Si varios componentes forman un grupo lógico, intente ponerlos en un contenedor.</para>
</listitem>
<listitem>
<para>Cuando tenga una etiqueta que describe otro componente, utilice <function>atk_relation_set_add_relation()</function> para que la tecnología de asistencia pueda encontrar el componente con el que la etiqueta está asociada. (Si asocia la etiqueta con el componente usando <function>gtk_label_set_mnemonic_widget()</function>, generalmente la relación de <constant>ATK_RELATION_LABEL_FOR</constant> se genera automáticamente, así que el siguiente código podría no ser necesario):</para>
<example>
<title>Relacionar un GtkLabel con un GtkWidget</title>
<programlisting>
{
  GtkWidget *widget;
  GtkLabel *label;

  AtkObject *atk_widget, *atk_label;
  AtkRelationSet *relation_set;
  AtkRelation *relation;
  AtkObject *targets[1];

  atk_widget = gtk_widget_get_accessible(widget);
  atk_label = gtk_widget_get_accessible (GTK_WIDGET(label));

  relation_set = atk_object_ref_relation_set (atk_label);
  targets[0] = atk_widget;

  relation = atk_relation_new(targets,1, ATK_RELATION_LABEL_FOR);
  atk_relation_set_add(relation_set,relation);
  g_object_unref(G_OBJECT(relation));
}
</programlisting>
</example>
</listitem>
<listitem>
<para>Si crea un widget personalizado, asegúrese que soporta accesibilidad. Los componentes personalizados que descienden de otros widgets GTK deben reemplazar la información heredada de accesibilidad según sea necesario. Para obtener más información, consulte la <link linkend="gad-custom">Creación de componentes accesibles personalizados</link>.</para>
</listitem>
<listitem>
<para>No rompa lo que consigue gratis. Si su IGU tiene un contenedor inaccesible, cualquier componente dentro de ese contenedor puede resultar inaccesible.</para>
</listitem>
</itemizedlist>
</section>

<section id="gad-api">
<title>La API de accesibilidad</title>
<para>Aquí hay unas pocas llamadas básicas de la API que puede necesitar usar en sus aplicaciones para asegurarse que funciona bien con la tecnología de asistencia. La API completa de accesibilidad es extensible, para permitirle escribir sus propios widgets personalizados de accesibilidad, por ejemplo.</para>
<table frame="all">
<title>Llamadas a la API de ATK comúnmente usadas</title>
<tgroup cols="2" align="left">
<thead>
<row>
<entry>API</entry>
<entry>Descripción</entry>
</row>
</thead>
<tbody>
<row>
<entry>
<para>
<function>AtkObject* gtk_widget_get_accessible (GtkWidget*)</function>
</para>
</entry>
<entry>
<para>Devuelve a una tecnología accesible el objeto accesible que describe el widget GTK especificado.</para>
</entry>
</row>
<row>
<entry>
<para>
<function>void atk_object_set_name (AtkObject*, const gchar*)</function>
</para>
</entry>
<entry>
<para>Establece el nombre del objeto accesible. Por ejemplo, si el objeto es un botón gráfico que sale de la aplicación al pulsarlo, el nombre puede ser «Salir».</para>
</entry>
</row>
<row>
<entry>
<para>
<function>void atk_object_set_description (AtkObject*, const gchar*)</function>
</para>
</entry>
<entry>
<para>Establece la descripción textual del objeto accesible. Por ejemplo, si el objeto es un botón gráfico «Cerrar», la descripción puede ser «Cierra la ventana».</para>
</entry>
</row>
<row>
<entry>
<para>
<function>AtkRelation* atk_relation_new (AtkObject**, gint, AtkRelationType)</function>
</para>
</entry>
<entry>
<para>Crea una nueva relación entre la clave especificada y la lista especificada de objetos de destino. Generalmente una relación indica a las tecnologías de asistencia que un widget está relacionado, de alguna forma, con otro. Por ejemplo, que un widget GtkLabel en particular es el título de un GtkTreeView en la misma ventana.</para>
</entry>
</row>
<row>
<entry>
<para>
<function>void atk_image_set_description (AtkImage*, const gchar*)</function>
</para>
</entry>
<entry>
<para>Establece la descripción textual del objeto de la imagen accesible. Por ejemplo, si el objeto es una miniatura de un escritorio virtual en una miniaplicación del panel, la descripción puede ser «Imagen mostrando la organización de las ventanas en el escritorio 1».</para>
</entry>
</row>
</tbody>
</tgroup>
</table>
</section>

<section id="gad-api-examples">
<title>Ejemplos que usan la API de accesibilidad</title>
<para>Como se indicó anteriormente, podría tener poco o nada de trabajo para hacer su aplicación accesible si usa el conjunto de widgets de GTK, o cualquier otra biblioteca de widgets que implemente las interfaces de ATK. Las dos cosas más comunes que debe hacer en este caso son:</para>
<itemizedlist>
<listitem>
<para>proporcione descripciones de algunos controles e imágenes usando <function>atk_object_set_description()</function> o <function>atk_image_set_description():</function></para>
<example>
<title>Establecer la descripción accesible para un botón</title>
<programlisting>
{
   AtkObject *obj;
   obj = gtk_widget_get_accessible(button);
   atk_object_set_description(obj,_("Abre el diálogo de preferencias"));
}
</programlisting>
</example>
<para>
</para>
</listitem>
<listitem>
<para>Especifique la relación entre cualquier agrupación inusual de widgets usando <function>atk_relation_new()</function> y <function>atk_relation_set_add()</function>:</para>
<example>
<title>Especificar la relación accesible entre dos controles</title>
<programlisting>
{
  GtkWidget *widget;
  GtkLabel *label;

  AtkObject *atk_widget, *atk_label;
  AtkRelationSet *relation_set;
  AtkRelation *relation;
  AtkObject *targets[1];

  atk_widget = gtk_widget_get_accessible (widget);
  atk_label = gtk_widget_get_accessible (GTK_WIDGET(label));

  relation_set = atk_object_ref_relation_set (atk_label);
  targets[0] = atk_widget;

  relation = atk_relation_new(targets,1, ATK_RELATION_LABEL_FOR);
  atk_relation_set_add(relation_set,relation);
  g_object_unref(G_OBJECT(relation));
}
</programlisting>
</example>
</listitem>
</itemizedlist>
<para>Los ejemplos en el resto de esta sección son mayoritariamente para que se haga una idea del alcance de ATK. Cubren técnicas que puede que nunca necesite usar como desarrollador de una aplicación, aunque pueden ser de interés si está escribiendo su propia modificación de los widgets (consulte <link linkend="gad-custom">Construir componentes accesibles personalizados</link>) o si quiere escribir una aplicación de tecnología asistida. Sea cual sea el propósito, los servicios del <ulink url="ftp://ftp.gnome.org/pub/GNOME/sources/gail/">código fuente de GAIL</ulink> son un excelente tutorial para conocer el uso avanzado de ATK.</para>

<section>
<title>Módulos GTK</title>
<para>Los programas que hacen uso de GAIL (la biblioteca de implementación de accesibilidad para los widgets de GTK) se escriben como módulos de GTK. Los módulos de GTK se cargan en el espacio del programa si la variable de entorno <varname>GTK_MODULES</varname> especifica el nombre o los nombres de la biblioteca del módulo. Si hay varias bibliotecas de módulos, sepárelas con dos puntos (:). Por ejemplo:</para>
<para>
<userinput>setenv GTK_MODULES "libgail:libtestprops"</userinput>
</para>
<para>Todos los módulos GTK tienen una función <function>gtk_module_init()</function>.</para>
</section>

<section>
<title>Obtener la información de accesibilidad de una aplicación</title>
<para>Un programa que quiera hacer llamadas ATK debería hacer una, o más, de las siguientes:</para>
<orderedlist>
<listitem>
<para>Crear un vigilante de eventos, por ejemplo con la función <function>atk_add_focus_tracker()</function>:</para>
<programlisting>atk_add_focus_tracker (_my_focus_tracker);</programlisting>
<para>donde <function>_my_focus_tracker()</function> es una función con este prototipo:</para>
<programlisting>void _my_focus_tracker (AtkObject *aobject);</programlisting>
</listitem>
<listitem>
<para>Configurar un detector de eventos globales, con atk_add_global_event_listener():</para>
<programlisting>
mouse_watcher_focus_id =   atk_add_global_event_listener(_my_global_listener,"Gtk:GtkWidget:enter_notify_event");
</programlisting>
<para>donde <function>_my_global_listener</function> tiene el prototipo de un <type>GSignalEmissionHook</type> de Glib . Este ejemplo podría hacer que la función <function>_my_global_listener()</function> se llamara cada vez que ocurra una señal «enter_notify_even» en un objeto <type>GtkWidget</type>.</para>
</listitem>
<listitem>
<para>Acceder al objeto ATK de nivel superior con la siguiente llamada de función.</para>
<programlisting>AtkObject *root_obj = atk_get_root();</programlisting>
<para>Esto devuelve un <type>AtkObject</type> que contiene todos las ventanas de nivel superior del programa en ejecución. El usuario puede navegar a través de la jerarquía de objetos accediendo a la raíz de los objetos hijos, que con las ventanas del nivel superior.</para>
</listitem>
</orderedlist>
</section>

<section>
<title>Preguntar a la interfaz de un <type>AtkObject</type></title>
<para>Una vez localizado el tipo <type>AtkObject</type> asociado a un objeto en la aplicación (ej. usando <function>gtk_widget_get_accessible()</function>), puede averiguar qué interfaces implementa de varias formas:</para>
<orderedlist>
<listitem>
<para>Use las macros proporcionadas <function>ATK_IS_...</function>, por ejemplo:</para>
<itemizedlist>
<listitem>
<para>
<function>ATK_IS_ACTION(atkobj)</function>
</para>
</listitem>
<listitem>
<para>
<function>ATK_IS_COMPONENT(atkobj)</function>
</para>
</listitem>
<listitem>
<para>etc. (existe uno para cada interfaz)</para>
</listitem>
</itemizedlist>
<para>Si la macro devuelve <function>TRUE</function>, las llamadas a la interfaz se pueden hacer de forma segura sobre ese objeto ATK.</para>
</listitem>
<listitem>
<para>Prueba del tipo <type>AtkObject</type> llamando la función <function>atk_object_get_role()</function>. Cualquier tipo asignado implementa un número específico de API de ATK.</para>
</listitem>
</orderedlist>
</section>

<section>
<title>Establecer un manejador de señal ATK</title>
<para>Usando la señal <constant>column_inserted</constant> como un ejemplo:</para>
<programlisting>
table_column_inserted_id = g_signal_connect_closure_by_id(my_atk_obj, 
g_signal_lookup("column_inserted", G_OBJECT_TYPE(my_atk_obj)),0,g_cclosure_new(G_CALLBACK (_my_table_column_inserted_func),NULL,NULL), FALSE);
</programlisting>
<para>Esto hará que se llame a la función <function>_my_table_column_inserted_func()</function> cada vez que se emita una señal «column_inserted» en el <type>AtkObject</type><varname>my_atk_object</varname>.</para>
<para>Conectar a una señal es levemente diferente si la señal del soporte detalles. La señal <constant>children_changed</constant> soporta el detalle <parameter>add</parameter>. Para conectar a una señal cuando el detalle <parameter>add</parameter> también está especificado, se usa esta técnica:</para>
<programlisting>
child_added_id = g_signal_connect_closure (my_atk_obj,"children_changed::add",   g_cclosure_new (G_CALLBACK(_my_children_changed_func),NULL,NULL),FALSE); 
</programlisting>
<para>Esto hará que se llame a la función <function>_my_children_changed_func()</function> se siempre que una señal <constant>children_changed</constant> con el detalle <parameter>add</parameter> se emita en el <type>AtkObject</type><varname>my_atk_obj</varname>.</para>
</section>

<section>
<title>Implementar un objeto ATK</title>
<para>Tendrá que implementar sus propios objetos ATK para cualquier widget que todavía no tenga una implementación accesible en GAIL (o en la biblioteca equivalente para otro conjunto de widgets). Esto debería implementarse como un módulo de GTK, que, como antes, debe incluirse en la variable de entorno <envar>GTK_MODULES</envar> ya que se carga en tiempo de ejecución.</para>

<section>
<title>Registro</title>
<para>Para este ejemplo se asume que hay un objeto llamado «GTK_TYPE_MYTYPE». La implementación de ATK se llamará <type>MYATKIMP_TYPE_MYTYPE</type>. Será necesaria una factoría, que se llamará <type>MYATKIMP_TYPE_MYTYPE_FACTORY</type>.</para>
<para>Para registrar una implementación ATK de un objeto GTK, se deben seguir estos pasos en la función <function>gtk_module_init()</function> del módulo:</para>
<orderedlist>
<listitem>
<para>Acceso al registro predeterminado:</para>
<programlisting>
default_registry = atk_get_default_registry();
</programlisting>
</listitem>
<listitem><para>Registrar el objeto ATK en la función <function>gtk_module_init()</function> de este módulo haciendo esta llamada a la función:</para>
<programlisting>
atk_registry_set_factory_type (default_registry, GTK_TYPE_MYTYPE, MYATKIMP_TYPE_MYTYPE_FACTORY); 
</programlisting>
</listitem>
</orderedlist>
<para>Esto registrará la implementación AtkObject de <type>GTK_TYPE_MYTYPE</type> en <type>MYATKIMP_TYPE_MYTYPE_FACTORY</type>. Esta factoría se implementará para que sepa cómo construir objetos de tipo <type>MYATKIMP_TYPE_MYTYPE</type>.</para>
</section>

<section>
<title>Fábrica</title>
<para>La factoría debe ser implementada como un hijo del tipo de clase <type>ATK_TYPE_OBJECT_FACTORY</type> y debe implementar la función <function>create_accessible()</function>.  Esta función debe crear un <type>AtkObject</type> apropiado. Una factoría se puede usar para crear más de un tipo de objeto, en cuyo caso su función <function>create_accessible()</function> necesitará ser suficientemente inteligente para construir y devolver el <type>AtkObject</type> correcto.</para>
</section>

<section>
<title>Implementación ATK para un objeto específico</title>
<para>Todos los <type>GObject</type> implementan una función <function>get_type()</function>. Usando el ejemplo anterior, la convención de nombres para el nombre de esta función sería <function>myatkimp_mytype_get_type()</function>.</para>
<para>En esta función, especifique qué interfaces implementa su objeto. Si la siguiente lógica se incluyese en esta función <function>get_type()</function>, este objeto podría implementar la interfaz del tipo <type>ATK_TEXT</type>:</para>
<example>
<title>Ejemplo de función <function>get_type()</function></title>
<programlisting>
static const GInterfaceInfo atk_text_info = 
{ 
   (GInterfaceInitFunc) atk_text_interface_init, 
   (GInterfaceFinalizeFunc) NULL, 
   NULL 
}; 

g_type_add_interface_static (type, ATK_TYPE_TEXT, 
                             &amp;atk_text_info); 
</programlisting>
</example>
<para>La función <function>atl_text_interface_init()</function>, que tiene el siguiente prototipo, deberá implementarse:</para>
<programlisting>
void atk_text_interface_init (AtkTextIface *iface); 
</programlisting>
<para>Esta función conectará las llamadas de función de interfaz con la implementación específica tal y como sigue:</para>
<example>
<title>Conectar llamadas de interfaz personalizadas con una implementación de un AtkObject</title>
<programlisting>
void 
atk_text_interface_init (AtkTextIface *iface) 
{ 
   g_return_if_fail (iface != NULL); 
   iface-&gt;get_text = myatkimp_mytype_get_text; 
   iface-&gt;get_character_at_offset = myatkimp_mytype_get_character_at_offset; 
   ... 
}
</programlisting>
</example>
<para>Entonces podría ser necesario implementar las funciones <function>myatkimp_mytype_get_text()</function>, <function>myatkimp_mytype_get_character_at_offset()</function>, y el resto de las funciones <type>ATK_TEXT</type> de la interfaz.</para>
</section>

<section>
<title>Implementación de <type>AtkObject</type></title>
<para>Los <type>AtkObject</type> son <type>GObjects</type>, y todos los <type>GObject</type> necesitan especificar la función <function>get_type()</function>. Aquí hay un ejemplo que establece una clase e inicializa una instancia. Esta función <function>get_type()</function> también especifica que el objeto implementa <type>ATK_TEXT</type> y especifica el objeto padre para ser <type>MYATKIMP_MYPARENTTYPE</type>.</para>
<example>
<title>Ejemplo de implementación de <function>get_type()</function></title>
<programlisting>
GType 
myatkimp_mytype_get_type (void) 
{ 
   static GType type = 0; 

   if (!type) 
   { 
      static const GTypeInfo tinfo = 
      { 
         sizeof (GailLabelClass), 
         (GBaseInitFunc) NULL,                              /* inicialización de la base */ 
         (GBaseFinalizeFunc) NULL,                          /* finalización de la base */
         (GClassInitFunc) myatkimp_mytype_class_init,       /* inicialización de la clase */ 
         (GClassFinalizeFunc) NULL,                         /* finalización de la clase */ 
         NULL,                                              /* datos de la clase */ 
         sizeof (GailLabel),                                /* tamaño de la instancia */ 
         0,                                                 /* número de reservas de memoria («preallocs») */ 
         (GInstanceInitFunc) myatkimp_mytype_instance_init, /* inicialización de la instancia */ 
         NULL                                               /* tabla de valores */ 
      }; 

      /* Configurar la estructura atk_text_info usada a continuación */ 
      static const GInterfaceInfo atk_text_info = 
      { 
         (GInterfaceInitFunc) atk_text_interface_init, 
         (GInterfaceFinalizeFunc) NULL, 
         NULL 
      }; 

      /* Establecer el tipo de nombre y especificar el tipo de padre */ 
      type = g_type_register_static (MYATKIMP_MYPARENTTYPE, 
            "MyatkimpMytype", &amp;tinfo, 0); 

      /* Esta clase implementa la interfaz ATK_TYPE_TEXT */ 
      g_type_add_interface_static (type, ATK_TYPE_TEXT, 
                                   &amp;atk_text_info); 
   } 
   return type; 
} 
</programlisting>
</example>
</section>

<section>
<title>Inicializadores de clases/instancias</title>
<para>Deberá tener creada un inicializador de clases para el <type>GObject</type> si su implementación de <type>AtkObject</type>:</para>
<orderedlist>
<listitem>
<para>Redefina cualquier llamada de función por el padre del objeto. Generalmente esto es necesario cuando un objeto necesita implementar una función como <function>atk_object_get_n_accessible_children()</function>. Es necesario si el objeto tiene hijos pero no están representados con los widgets.</para>
<para>Por ejemplo, si su implementación de ATK necesita pasar por encima del tipo <type>AtkObject</type> de la función <function>get_name()</function>, entonces las clases inicializadas podrían ser así:</para>
<example>
<title>Inicializador de clase que sobreescribe la función padre <function>get_name()</function></title>
<programlisting>
myatkimp_mytype_class_init (GailLabelClass *klass) 
{ 
  AtkObjectClass *class = ATK_OBJECT_CLASS (klass); 
  class-&gt;get_name = myatkimp_mytype_get_name; 
} 
</programlisting>
</example>
</listitem>
<listitem><para>Requere una función <function>parent-&gt;init</function>, <function>parent-&gt;notify_gtk</function>, o <function>parent-&gt;finalize</function>. Este ejemplo define las tres:</para>
<example>
<title>Inicializador de clases que define su propia función <function>init()</function>, <function>notify_gtk()</function> y <function>finalize()</function></title>
<programlisting>
static ParentObjectType *parent_class = NULL; 

myatkimp_mytype_class_init (GailLabelClass *klass) 
{ 
   ParentObjectType *parent_class = (ParentObjectType*)klass; 

   /* 
    * Es necesario almacenar en caché «parent_class» si se
    * configuran las funciones init, notify_gtk, o finalize. 
    */ 
    parent_class = g_type_class_ref (MYATKIMP_TYPE_PARENT); 

    parent_class-&gt;init = myatkimp_mytype_widget_init; 
    parent_class-&gt;notify_gtk = myatkimp_mytype_real_notify_gtk; 
    parent_class-&gt;finalize = myatkimp_mytype_finalize; 
}
</programlisting>
</example>
<orderedlist>
<listitem>
<para>parent-&gt;init</para>
<para>Se puede necesitar una función <function>parent-&gt;init()</function> si la implementación de ATK necesita hacer cualquiera de las siguientes:</para> 
<orderedlist>
<listitem>
<para>Cachear cualquier dato obtenido desde un respaldo del widget de GTK.</para>
</listitem>
<listitem>
<para>Escuche cualquier señal desde el widget GTK de respaldo.</para>
</listitem>
</orderedlist>
<para>Aquí hay un ejemplo de ambas:</para>
<example>
<title>Una función <function>init()</function> personalizada</title>
<programlisting>
void 
gail_tree_view_widget_init (MyatkimpMytype  *mytype, 
                            GtkWidget       *gtk_widget) 
{ 
   /* Asegúrese de llamar a la función de inicio de los padres */ 
   parent_class-&gt;init (widget, gtk_widget); 
   
   /* Caché un valor en la implementación de ATK */ 
   mytype-&gt;cached_value = gtk_widget_function_call(); 

   /* Esperar una señal */ 
   gtk_signal_connect (GTK_OBJECT (gtk_widget), 
                       "signal-type", 
                       GTK_SIGNAL_FUNC (_myatkimp_mytype_signal_type), 
                       NULL); 
} 
</programlisting>
</example>
<para>En este ejemplo, si la señal especificada <type>signal-type</type> se generase en el respaldo de <varname>gtk_widget</varname>, entonces se podría llamar a la función <function>_myatkimp_mytype_signal_type()</function>.</para>
</listitem>
<listitem>
<para>parent-&gt;notify_gtk</para>
<para>Si la implementación de ATK necesita escuchar cualquier notificación de propiedad en el respaldo del objeto GTK, podría ser necesaria una función <function>parent-&gt;notify_gtk()</function>. Por ejemplo:</para>
<example>
<title>Una función <function>notify_gtk()</function> personalizada</title>
<programlisting>
void 
myatkimp_mytype_real_notify_gtk (GObject    *obj, 
                                 GParamSpec *pspec) 
{ 
   GtkWidget *widget = GTK_WIDGET (obj); 
   AtkObject* atk_obj = gtk_widget_get_accessible (widget); 

   if (strcmp (pspec-&gt;name, "property-of-interest") == 0) 
   { 
      /* Gestionar el cambio de la propiedad. */ 
   } 
   else 
   { 
      parent_class-&gt;notify_gtk (obj, pspec); 
   } 
} 
</programlisting>
</example>
</listitem>
<listitem>
<para>parent-&gt;finalize</para>
<para>Si es necesario para liberar cualquier dato cuando se destruye una instancia de <type>GObject</type>, entonces se necesita una función <function>finalize()</function> para liberar la memoria. Por ejemplo:</para>
<example>
<title>Una función <function>finalize()</function> personalizada</title>
<programlisting>
void 
myatkimp_mytype_finalize (GObject *object) 
{ 
   MyAtkimpMyType *my_type = MYATKIMP_MYTYPE (object); 

   g_object_unref (my_type-&gt;cached_value); 
   G_OBJECT_CLASS (parent_class)-&gt;finalize (object); 
} 
</programlisting>
</example>
</listitem>
</orderedlist>
</listitem>
</orderedlist>
</section>
</section>
</section>

<section id="gad-custom">
<title>Hacer accesibles componentes personalizados</title>
<para>Añadir soporte de ATK en su widget personalizado asegurará su cooperación con la infraestructura de accesibilidad. Estos son los pasos generales necesarios:</para>
<itemizedlist>
<listitem>
<para>evaluar un widget personalizado de acuerdo a las <link linkend="gad-ui-guidelines">Guías de la interfaz de usuario</link>;</para>
</listitem>
<listitem>
<para>determinar qué <ulink url="http://library.gnome.org/devel/atk/stable/atk.html">interfaces de ATK</ulink> debería implementar un widget personalizado, de acuerdo a la característica del widget establecido y la funcionalidad;</para>
</listitem>
<listitem>
<para>evaluar qué <ulink url="http://library.gnome.org/devel/atk/stable/atk.html">interfaces de ATK</ulink> pueden heredarse desde la clase del widget padre;</para>
</listitem>
<listitem>
<para>implementar las interfaces apropiadas de ATK para la clase de widget de una o dos formas:</para>
<itemizedlist>
<listitem>
<para>directamente a través del widget personalizado o</para>
</listitem>
<listitem>
<para>en un subtipo <ulink url="http://library.gnome.org/devel/atk/stable/AtkObject.html"><type>AtkObject</type></ulink> creado por una nueva subclase <ulink url="http://library.gnome.org/devel/atk/stable/AtkObjectFactory.html"><type>AtkObjectFactory</type></ulink></para>
</listitem>
</itemizedlist>
<para>Si se usa el segundo método, se debe registrar el tipo de factor apropiado con el <type>AtkObjectFactoryRegistry</type> en tiempo de ejecución.</para>
</listitem>
</itemizedlist>
<para>El <ulink url="ftp://ftp.gnome.org/pub/GNOME/sources/gail/">código fuente de GAIL</ulink> sirve como un excelente turorial para el uso avanzado de ATK.</para>
</section>

<section id="gad-ui-guidelines">
<title>Guías de interfaz de usuario para soportar accesibilidad</title>
<para>Cuando diseñe la IGU de su aplicación, existen ciertas guías simples que debería seguir para asegurarse de que puede usarse por tanta gente como sea posible, ya sea con tecnologías de asistencia o sin ellas. No sea tonto pensando que esto es sólo en caso de «hacer que su interfaz gráfica de usuario pueda usarse por personas discapacitadas», aunque, y ya que usted no debe molestarse si sabe que una persona con discapacidad nunca va a usar la aplicación. Siguiendo estas directrices mejorará la usabilidad general de su aplicación para todos los que lo usen, incluyéndole a usted.</para>

<section>
<title>General</title>
<para>Todos el mundo se siente frustrado si no puede encontrar una característica en una aplicación, o comete un error que tarda un par de minutos en recuperarse, si es posible recuperarse del todo. Si usted tiene algún tipo de discapacidad, el esfuerzo y el tiempo perdidoserá varias veces peor. Siguiendo algunas pautas básicas puede ayudar a prevenir este tipo de situaciones para todos los usuarios.</para>
<itemizedlist>
<listitem>
<para>Proporcione «Deshacer» para cada acción que cambie los datos del usuario o la configuración de la aplicación. Si es posible, proporcione más de un nivel de deshacer y rehacer, y una lista del histórico para permitir un vista previa de qué acciones se pueden deshacer.</para>
</listitem>
<listitem>
<para>Proporcione comandos para restaurar la configuración predeterminada. Si una configuración particular puede hacer la aplicación completamente inservible para un individuo, por ejemplo, haciendo que las tipografías sean muy pequeñas, sería útil proporcionar una opción para restaurar la configuración predeterminada fuera de la propia aplicación. Esto podría hacerse, por ejemplo, mediante un interruptor de línea de comandos.</para>
</listitem>
<listitem>
<para>La ayuda evita que los usuarios hagan mal las cosas. Es particularmente importante para las acciones que se puedan hacer de forma accidental (por ejemplo, las acciones del ratón) o algo que no se puede deshacer fácilmente (por ejemplo, sobrescribir un archivo). Considere usar los diálogos de confirmación o forzar al usuario para entrar en un modo particular para llevar a cabo acciones potencialmente destructivas.</para>
</listitem>
<listitem>
<para>Minimize la carga de memoria de los usuarios. Por ejemplo, deje que el usuario vea múltiples documentos al mismo tiempo, y asegurare la ayuda en línea u otras instrucciones puede permanecer visibles mientras llevan a cabo el procedimiento que se describe. Déjeles copiar toda la información mostrada, y pegarla en cualquier parte donde se puedan introducir los datos.</para>
</listitem>
<listitem>
<para>No haga que los usuarios inserten discos. Dependiendo de la discapacidad particular de un usuario, pueden encontrar difícil insertar físicamente o cambiar un disco, o pueden encontrarlo para identificar el disco correcto en el primer lugar. Si su aplicación está instalada desde el CD-ROM, proporcione una opción para copiar todos los ficheros que sean necesarios en el disco duro del usuario.</para>
</listitem>
<listitem>
<para>No coloque funciones más utilizadas muy profundas en los menús. Ya sea que usted está usando un ratón, teclado o algún otro dispositivo de entrada, es mejor evitar los elementos de menú profundamente anidados. Así como la carga de memoria sobre su localización, siempre es más difícil y cuesta mucho tiempo para acceder a él.</para>
</listitem>
<listitem>
<para>No guíe a los usuarios a través de pasos innecesarios. Por ejemplo, los asistentes son útiles para los usuarios que tienen problemas para manejar un gran número de opciones a la vez, pero otros usuarios pueden necesitar minimizar la cantidad de tiempo o las pulsaciones de teclado que utilizan. Dichos usuarios se benefician de la posibilidad de saltarse los pasos innecesarios o de ir directamente a la que necesitan. Considere la posibilidad de proporcionar un botón <guibutton>Finalizar</guibutton> en los asistentes que permitan saltar hasta el final y asumir las respuestas predeterminadas para los pasos intermedios. Si el proceso tiene muchos pasos, considere preguntar al usuario al inicio si se quiere atravesar todos los pasos, o simplemente los más comúnmente utilizados.</para>
</listitem>
</itemizedlist>
</section>

<section>
<title>Navegación por teclado</title>
<para>Una interfaz de teclado de usuario bien diseñada juega un papel clave al diseñar el software de accesibilidad. Los usuarios ciegos pueden navegar por el software más eficazmente usando el teclado, ya que con el ratón depende de la percepción visual de la posición del puntero del ratón. Además, los problemas de movilidad pueden evitar que un usuario se mueva con éxito usando el ratón, debido a las habilidades necesarias para la motricidad final de control.</para>
<para>Por lo tanto es importante hacer todas las acciones del ratón disponibles desde el teclado, e incluir el acceso al teclado para todas las barras de herramientas, menús, enlaces y botones. Cada función proporciona que su aplicación puede está disponible usando sólo el teclado. Si es necesario, su ratón se oculta mientras está utilizando su aplicación.</para>
<para>La mayoría de la funcionalidad debería ser fácil para hacerla accesible usando atajaos del teclado y aceleradores, y el conjunto de herramientas integrado en las funciones de navegación. Sin embargo, las operaciones que dependen de arrastrar y colocar, por ejemplo, puede requerir un mayor conocimiento.</para>
<itemizedlist>
<listitem>
<para>Facilite el acceso eficiente del teclado a todas las funciones de la aplicación. Algunos usuarios pueden ser incapaces de usar un ratón, y muchos «usuarios avanzados» prefieren usar el teclado de todos modos. Además, algunas tecnologías de asistencia especializadas con dispositivos de entrada pueden simular los eventos del teclado mejor que los eventos del ratón. Ya que que para algunos usuarios la escritura es difícil o incluso dolorosa, es importante proporcionar un interfaz del teclado que minimize el número de las pulsaciones requeridas para cualquier tarea.</para>
</listitem>
<listitem>
<para>Use un orden de navegación de teclado lógico. Al navegar alrededor de una ventana con la tecla <keycap>Tab</keycap>, el foco del teclado debería moverse entre los controles en un orden predecible. En configuraciones regionales occidentales, ésto normalmente es de izquierda a derecha y de arriba a abajo.</para>
</listitem>
<listitem>
<para>Garantice el orden correcto de la etiquetas para los controles que permitieron el estado depende de la casilla de verificación, botón de opción o botón de alternar el estado. Cuando un botón se selecciona, todos sus controles dependientes deben estar habilitados y todos los controles que dependan de cualquier otro botón del grupo se deben desactivar. Cuando el usuario selecciona una casilla de verificación, botón de opción o el botón de alternar que tiene controles dependientes, no da automáticamente el foco al primer control dependiente, pero en su lugar deja el foco en el botón.</para>
</listitem>
<listitem>
<para>No anule las características de accesibilidad existentes a nivel de sistema. Por ejemplo, <ulink url="http://www.rehab.uiuc.edu/accessx/overview.html">AccessX</ulink> es una extensión del servidor X que se ha apoyado desde X11R6. La característica «MouseKeys» de esta extensión permite el movimiento del ratón y similar las pulsaciones del botón utilizando el teclado. Por lo tanto, no debe añadir características a su aplicación que sólo se puede acceder pulsando las teclas en el teclado, ya que los usuarios basándose en la característica «MouseKeys» no podrán usarlas.</para>
</listitem>
<listitem>
<para>Proporcione más de un método para realizar las tareas del teclado siempre que sea posible. Algunos usuarios pueden encontrar algunas claves y combinaciones de teclas más fáciles de usar que otras.</para>
</listitem>
<listitem>
<para>Proporcione el acceso del teclado y el ratón para que funcionen a la vez donde sea posible. Algunos usuarios quizás sólo pueden usar el teclado o el ratón, pero no ambos.</para>
</listitem>
<listitem>
<para>No asigne alcanza difícil de las operaciones de teclado se realizan con frecuencia. Algunas personas sólo pueden ser capaces de usar una mano en el teclado, por lo que los accesos directos que se pueden usar fácilmente con una mano, son preferibles para operaciones comunes. En cualquier caso, tener que realizar en el teclado operaciones largas o difíciles con frecuencia puede aumentar la tensión del músculo para todos los usuarios, aumentando el riesgo de dolor o lesión.</para>
</listitem>
<listitem>
<para>No requiera el uso repetitivo de pulsaciones simultáneas. Algunos usuarios sólo son capaces de mantener presionado una tecla a la vez. Las tecnologías de apoyo, tales como «AccessX» pueden permitir a los usuarios presionar las teclas de forma secuencial y no simultáneamente, pero esto, por supuesto, significa que la operación tomará más tiempo para ellos.</para>
</listitem>
<listitem>
<para>Asegúrese de que cualquier texto que se pueda seleccionar con el ratón también se puede seleccionar con el teclado. Esta es una comodidad para todos los usuarios, pero especialmente para aquellos para quienes un control preciso del ratón es difícil.</para>
</listitem>
<listitem>
<para>Asegúrese de que los objetos que pueden ser redimensionado o movidos por arrastrar y soltar también pueden cambiar el tamaño o moverse con el teclado. Por ejemplo, los iconos y ventanas en el escritorio. Cuando la precisión del tamaño y la colocación son potencialmente importantes, por ejemplo, formas en un diagrama, considere también la posibilidad de un diálogo en el que puede escribir las coordenadas, o un medio para ajustar de objetos a una cuadrícula definida por el usuario.</para>
</listitem>
<listitem>
<para>No use las funciones generales de navegación para activar las operaciones. Por ejemplo, la navegación básica de <keycap>Tab</keycap> con el teclado en un cuadro de diálogo para activar las acciones asociadas a un control.</para>
</listitem>
<listitem>
<para>Muestre menús invocados por teclado, ventanas y sugerencias cerca del objeto que se relacionan. En GNOME 2.0, los usuarios pueden llamar a los menús emergentes con <keycombo><keycap>Mayús.</keycap><keycap>F10</keycap></keycombo>, y a la información sobre las herramientas con <keycombo><keycap>Mayús</keycap><keycap>F1</keycap></keycombo>. Sin embargo, no oculte u oscurezca completamente el objeto al que el menú o la descripción se refiere.</para>
</listitem>
</itemizedlist>
</section>

<section>
<title>Interacción del ratón</title>
<para>Recuerde que no todo el mundo puede usar un ratón con igual destreza y que algunos usuarios pueden tener dificultad viendo o siguiendo el puntero del ratón.</para>
<itemizedlist>
<listitem>
<para>No dependa de pulsaciones de los botones 2 o 3 del ratón. Aparte de ser físicamente más difíciles de pulsar, algunos dispositivos apuntadores y muchos dispositivos con tecnología de asistencia sólo soportan el botón 1. Algunas tecnologías de asistencia pueden no emular el ratón en absoluto, pero generan eventos de teclas del teclado en su lugar.</para>
</listitem>
<listitem>
<para>Permita cancelar todas las operaciones del ratón. Pulsar la tecla <keycap>Esc</keycap> debería cancelar cualquier operación en progreso, como arrastrar y soltar un fichero en un administrador de ficheros, o dibujar una forma en un programa de dibujo.</para>
</listitem>
<listitem>
<para>Proporcione realimentación visual a través de una operación de arrastrar y soltar. A medida que el ratón pasa por encima de objetivos válidos, selecciónelos y cambie el puntero del ratón. Utilice el puntero «no drop» del ratón al pasar sobre los destinos de arrastre válidos. Consulte <link linkend="gad-mouse-examples">Ejemplos de iteración del ratón</link>.</para>
</listitem>
<listitem>
<para>No deforme el puntero del ratón, ni restrinja el movimiento del ratón a la parte de la pantalla. Esto puede interferir con las ayudas técnicas, y suele ser confusa incluso para los usuarios que no dependen de la AT.</para>
</listitem>
<listitem>
<para>No haga los objetivos del ratón muy pequeños. En general, los objetivos del ratón debe ser al menos del tamaño de la «zona caliente» en todo el borde de la ventana de tamaño variable en el actual gestor de ventanas/tema; teniendo en cuenta que un usuario con motricidad disminuida o visión puede estar utilizando un gestor de ventanas con áreas más grandes de la predeterminada.</para>
</listitem>
</itemizedlist>

<section id="gad-mouse-examples">
<title>Ejemplos de interacción con el ratón</title>
<figure>
<title>Ejemplo del puntero «no-drop» desde CDE/Motif</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/nodrop.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Ejemplo de una forma «objetivo de soltado no válido» del puntero</phrase>
</textobject>
</mediaobject>
</figure>
</section>
</section>

<section>
<title>Elementos gráficos</title>
<para>Proporcione opciones para personalizar la presentación de todos los elementos importantes en su aplicación gráfica. Esto hará que sea más fácil de usar para las personas con discapacidades visuales o cognitivas.</para>
<itemizedlist>
<listitem>
<para>No programe atributos gráficos como la línea, el borde o el grosor de sombra. Estos elementos idealmente se deben leer desde el tema GTK o gestor de ventanas. Si esto no es posible, ofrezca opciones dentro de su aplicación para cambiarlos.</para>
</listitem>
<listitem>
<para>Proporcione nombres descriptivos para todos los componentes de las interfaces. La librería de GAIL proporciona descripciones accesibles de manera predeterminada para muchos widgets GTK, pero usted todavía tendrá que añadir las suyas propias en algunos casos, como para los widgets que utilizan gráficos en lugar de texto (por ejemplo, un pozo en una paleta de colores, o un icono sin etiqueta). Considere la posibilidad de reemplazar los valores predeterminados, con descripciones más útiles o específicas de la aplicación siempre que sea posible.</para>
</listitem>
<listitem>
<para>Permita elementos gráficos de varios colores (ej. iconos  de barra de herramientas) que sea vean sólo en monocromo, si es posible. Estas imágenes monocromo se deben mostrar en los colores de primer plano y de fondo del sistema, que cada usuario habrá elegido (al elegir el tema de GTK), para una legibilidad máxima.</para>
</listitem>
<listitem>
<para>Haga que los elementos interactivos de la IGU se identifiquen fácilmente. Por ejemplo, no haga que el usuario pase el ratón sobre un objeto para determinar si se es pulsable o no. Deje suficiente espacio entre los objetos y delimite claramente los bordes de los objetos. No muestre los elementos de IGU que son bonitos, pero en realidad no hacen nada, a menos que también proporcione una opción para desactivarlos.</para>
</listitem>
<listitem>
<para>Proporcione una opción para ocultar los gráficos que no transmitan información esencial. Las imágenes gráficas pueden distraer a los usuarios con algunas desórdenes cognitivos. Los iconos en el menú del pie de GNOME, por ejemplo, se pueden quitar mientras sigue dejando los menús completamente funcionales.</para>
</listitem>
</itemizedlist>
</section>

<section>
<title>Tipografías y textos</title>
<para>Incluso para un usuario con visión normal, la salida textual proporciona la mayor parte de la información y la retroalimentación en la mayoría de las aplicaciones. Por tanto, es crítico elegir la posición del texto con cuidado en la pantalla, y dejar la elección de la fuente y el tamaño para el usuario, para garantizar que las personas con visión deteriorada puede también utilizar su aplicación eficazmente.</para>
<itemizedlist>
<listitem>
<para>No programe estilos de tipografías ni tamaños. El usuario debería ser capaz de ajustar todos los tamaños y tipos de letras. Si por alguna razón no puede hacer esta funcionalidad disponible, nunca programe una tipografía con un tamaño inferior a 10 puntos.</para>
</listitem>
<listitem>
<para>Proporcione opciones para desactivar cualquier telón de fondo gráfico o «marcas de agua» detrás del texto. Tales imágenes interfieren con el contraste entre el texto y el fondo, lo que puede causar dificultad para los usuarios con impedimentos visuales.</para>
</listitem>
<listitem>
<para>La etiqueta de objetos con nombres que tienen sentido cuando se toman fuera del contexto. Los usuarios que basándose en los lectores de pantalla o tecnologías de apoyo similares no necesariamente serán capaces de comprender inmediatamente la relación entre un control y aquellos que lo rodean.</para>
</listitem>
<listitem>
<para>No use la misma etiqueta más de una vez en la misma ventana. Si utiliza la misma etiqueta en diferentes ventanas, ayudará si significa lo mismo en ambas ventanas. Además, no use etiquetas que se deletrean diferentemente, pero suenan igual, por ejemplo, «Read» y «Red», (N. del T.: «Leer» y «Rojo»		) ya que esto puede ser confuso para los usuarios dependientes de lectores de pantalla.</para>
</listitem>
<listitem>
<para>Coloque las etiquetas de manera coherente en toda la aplicación. Esto normalmente significa inmediatamente por debajo de iconos grandes, inmediatamente a la derecha de los iconos pequeños, e inmediatamente por encima o a la izquierda de otros controles. Consulte <link linkend="gad-font-examples">Ejemplos de tipografías y de texto</link>.</para>
</listitem>
<listitem>
<para>Cuando se utiliza texto estático para etiquetar un control, termine la etiqueta con dos puntos. Por ejemplo, <guilabel>Nombre del usuario:</guilabel> para marcar un campo del texto en el que el usuario debe escribir su nombre. Esto ayuda a identificarlo como una etiqueta de control, en lugar de un elemento de texto independiente.</para>
</listitem>
<listitem>
<para>Cuando usa texto estático para etiquetar un control, asegúrese de que la etiqueta precede inmediatamente ese control en el orden de pestañas. Esto asegurará que el mnemónico (carácter subrayado) que asigna a la etiqueta moverá el foco a o activará el control correcto al pulsarlo.</para>
</listitem>
<listitem>
<para>Ofrece alternativas a WYSIWYG. Algunos usuarios pueden necesitar imprimir el texto en letra pequeña, pero editarlo en una tipografía de pantalla más grande. Las alternativas posibles incluyen mostrar todo el texto en la misma tipografía y tamaño (elegido por el usuario); una opción «ajustar a la ventana» que le permite leer todo el texto en una ventana sin necesidad de desplazarse horizontalmente; una vista de una sola columna que muestra el contenido de la ventana en una sola columna, incluso si se imprimen en varias columnas; y una vista de sólo texto, donde los gráficos se muestran como marcadores de posición o descripciones de texto. Si la aplicación tiene paneles con controles secundarios, considere la posibilidad de cambiar el tamaño de los paneles junto a la ventana madre.</para>
</listitem>
</itemizedlist>

<section id="gad-font-examples">
<title>Ejemplos de tipografías y textos</title>
<figure id="label-placement-example">
<title>Ubicación correcta de etiquetas para varios elementos de la IGU</title>
<informaltable frame="all">
<tgroup cols="3" align="center">
<tbody>
<row>
<entry valign="middle"><mediaobject>
<imageobject>
<imagedata fileref="figures/label_above.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Lista de control con etiqueta arriba</phrase>
</textobject>
</mediaobject> Lista de control con etiqueta arriba</entry>
<entry valign="middle"><mediaobject>
<imageobject>
<imagedata fileref="figures/label_below.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Icono de gestor de archivos de gran tamaño con etiqueta debajo de él</phrase>
</textobject>
</mediaobject> Icono del gestor de archivos de gran tamaño con etiqueta debajo de él</entry>
<entry valign="middle"><mediaobject>
<imageobject>
<imagedata fileref="figures/label_right.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Icono pequeño de barra de herramientas con etiqueta a su derecha</phrase>
</textobject>
</mediaobject> Icono pequeño de barra de herramientas con etiqueta a su derecha</entry>
<entry valign="middle"><mediaobject>
<imageobject>
<imagedata fileref="figures/label_left.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Caja de control incrementable con etiqueta a su izquierda</phrase>
</textobject>
</mediaobject> Caja de control incrementable con etiqueta a su izquierda</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</figure>
</section>
</section>

<section>
<title>Color y contraste</title>      
<para>Una mala elección de los colores en la pantalla puede causar problemas a los usuarios daltónicos (para los que el tono es importante) o de baja visión (para quienes el brillo y el contraste es importante). Generalmente debería permitir al usuario personalizar los colores en cualquier parte de su aplicación que transmita información importante.</para>
<para>Los usuarios con impedimentos visuales pueden requerir un alto nivel de contraste entre los colores de fondo y texto. A menudo se usa un fondo negro y texto en blanco para prevenir el fondo de «sangrado» más. Estos ajustes son críticos para los usuarios con impedimentos visuales.</para>
<itemizedlist>
<listitem>
<para>No programe en el código los colores de las aplicaciones. Algunos usuarios necesitan usar determinadas combinaciones de colores y niveles de contraste para poder leer la pantalla cómodamente. Por lo tanto todos los colores principales que su aplicación de GNOME usa, se deben tomar desde el tema GTK, para que el usuario puede configurar los colores para todas sus aplicaciones a algo legible, tan solo cambiando el tema. Si por alguna razón necesita usar colores que no están disponibles en el tema, asegúrese de que se pueden personalizar en la propia aplicación.</para>
</listitem>
<listitem>
<para>No use el color como el único medio de distinguir los elementos de información. Toda esa información se debe proporcionar al menos por otro método, tales como forma, posición o descripción textual. Consulte los <link linkend="gad-color-examples">Ejemplos de color y contraste</link>.</para>
</listitem>
<listitem>
<para>Soporte todos los temas de alto contraste de GNOME. Asegúrese que cuando uno de estos temas está seleccionado, todo el texto de su aplicación aparece con los colores de primer plano y de fondo de alto contraste especificados por el tema.</para>
</listitem>
<listitem>
<para>Asegúrese de que su aplicación no depende de un tema de alto contraste en particular. Pruebe con diferentes temas de alto contraste para asegurarse de que su aplicación respeta la configuración.</para>
</listitem>
</itemizedlist>

<section id="gad-color-examples">
<title>Ejemplos de color y contraste</title>
<example>
<title>Ejemplo que ilustra el uso redundante de color</title>
<informaltable frame="all">
<tgroup cols="2">
<tbody>
<row>
<entry valign="middle">
<mediaobject>
<imageobject>
<imagedata fileref="figures/color_only.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Ejemplo que muestra cambios en el precio usando sólo colores</phrase>
</textobject>
</mediaobject>
</entry>
<entry>Esta pantalla puede causar problemas para un usuario daltónico (el daltonismo afecta a casi 1 de cada 7 hombres en algunas partes del mundo). La falta de contraste entre el texto en rojo y el fondo negro también hace que sea difícil de leer para un usuario con visión baja, incluso con un magnificador de pantalla.</entry>
</row>
<row>
<entry valign="middle">
<mediaobject>
<imageobject>
<imagedata fileref="figures/color_and_arrows.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Ejemplo que muestra cambios en el precio usando colores y flechas</phrase>
</textobject>
</mediaobject>
</entry>
<entry>Esta pantalla refuerza la codificación de los colores con flechas para indicar el movimiento de los precios, y utiliza tonos verdes y rojos más oscuros sobre un fondo más claro para proporcionar un mayor contraste. Esta no tiene por qué ser la combinación de colores predeterminada si las pruebas fueron para mostrar que es demasiado molesto para la mayoría de los usuarios, pero debería ser posible personalizarlo de esta forma, ya sea mediante un tema o a través del diálogo <guilabel>Preferencias</guilabel> de la aplicación.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</example>
</section>
</section>

<section>
<title>Aumento</title>
<para>Muchos usuarios, incluso los que no tienen una discapacidad visual, se benefician de magnificación del texto y de los gráficos. Sin embargo, sin magnificación, un usuario con discapacidad visual no puede acceder ni utilizar el programa el absoluto.</para>
<itemizedlist>
<listitem>
<para>Proporcione al usuario la posibilidad de magnificar el área de trabajo.</para>
</listitem>
<listitem>
<para>Proporcione opciones en la aplicación para escalar el área de trabajo. Los usuarios necesitan tener una opción para magnificar el área de trabajo entre un 150% y un 400%. Verifique la aplicación para confirmar que el objeto que está viendo no se ve afectado al cambiar la configuración de la magnificación.</para>
</listitem>
</itemizedlist>
</section>

<section>
<title>Sonido</title>
<para>Las personas que tienen dificultades auditivas, así como aquellas que trabajan con el sonido del equipo apagado, estarán en desventaja si su aplicación se basa en el sonido para transmitir información. En general, asegúrese de que el usuario puede recibir la información audible de otras maneras.</para>
<itemizedlist>
<listitem>
<para>No dé por hecho que el usuario oirá la información sonora. Esto se aplica tanto a usuarios con tarjetas de sonido estropeadas como a aquellos que tienen problemas auditivos.</para>
</listitem>
<listitem>
<para>No use el sonido como la única manera de transmitir información. Dé al usuario la posibilidad de tener toda la información sonora de una manera visual. Esto implica proporcionar subtítulos o transcripciones de todos los fragmentos de sonido hablados importantes.</para>
</listitem>
<listitem>
<para>Permita a los usuarios configurar la frecuencia y el volumen de los pitidos de aviso y otros sonidos. Esto incluye poder apagar el sonido por completo.</para>
</listitem>
</itemizedlist>
</section>

<section>
<title>Animación</title>
<para>Usada con moderación, la animación puede ser útil para llamar la atención sobre información importante en su aplicación; y también puede quedar bien. Sin embargo, puede ser problemático para algunos usuarios, así que asegúrese de que se puede desactivar.</para>
<itemizedlist>
<listitem>
<para>No use elementos que parpadeen o destellen con una frecuencia mayor de 2 Hz ni inferior a 55 Hz. Esto incluye el texto y los objetos gráficos. Cualquier cosa en este rango de frecuencias puede causar problemas a los usuarios susceptibles de convulsiones por inducción visual. Tenga en cuenta que, sin embargo, no hay una frecuencia «segura». Si los destellos son esenciales, debería usar la frecuencia de parpadeo del cursor del sistema (que debería ser configurable), o permitir a los usuarios configurar la frecuencia ellos mismos.</para>
</listitem>
<listitem>
<para>No haga que destellen o parpadeen áreas grandes de la pantalla. Las áreas pequeñas son menos propensas a provocar convulsiones en quienes son susceptibles a ellas.</para>
</listitem>
<listitem>
<para>Haga todas las animaciones opcionales. La información animada debería estar disponible en al menos un formato no animado, a elección del usuario.</para>
</listitem>
</itemizedlist>
</section>

<section>
<title>Foco del teclado</title>
<para>Mostrar la posición del foco del teclado claramente en todo momento es importante, tanto para los usuarios con problemas visuales, como para «usuarios avanzados» que prefieren usar el teclado en lugar del ratón. No debería haber ninguna confusión en cuanto a qué control tiene del escritorio tiene el foco en un momento dado. Debe ser capaz de dejar el equipo con el foco en cualquier control de su aplicación, irse y llamar por teléfono a su novia o pasear al perro hasta olvidar en que widget lo dejó en. Cuando vuelva, debería ser capaz de decir exactamente en qué widget estaba.</para>
<para>Un indicador visual del foco es una representación sonora de la posición del cursor en relación con el resto de objetos del escritorio. Esto permite al usuario moverse entre los objetos de forma interactiva a medida que cambia el foco. El foco visual se debe exponer mediante programación a las tecnologías de asistencia. Tenga en cuenta que en la mayoría de los casos, esto lo maneja ATK automáticamente, sin necesidad de realizar ningún trabajo adicional. Sin embargo, tendrá que tener en cuenta este requisito al escribir sus propios widgets personalizados, por ejemplo.</para>
<itemizedlist>
<listitem>
<para>Inicie el foco en el control mas usado habitualmente. Si no hay control en una ventana considerada la «más» útil, inicie el foco en el primer control de la ventana cuando esta se abra. El foco no debería iniciarse en los botones <guilabel>Aceptar</guilabel> ni <guilabel>Cancelar</guilabel> de un diálogo, aunque sean los controles más usados habitualmente, ya que se pueden activar inmediatamente pulsando <keycap>Intro</keycap> o <keycap>Esc</keycap>.</para>
</listitem>
<listitem>
<para>Muestre claramente el foco de entrada actual todas las veces. Recuerde que los controles que incluyen un elemento deslizante, no siempre es suficiente resaltar sólo el elemento seleccionado dentro del área de desplazamiento, ya que puede no ser visible. Consulte los <link linkend="gad-focus-examples">ejemplos de foco del teclado</link>.</para>
</listitem>
<listitem>
<para>Muestre el foco de entrada sólo en la ventana activa. Oculte todos los indicadores visuales del foco principales en todas las ventanas que no tienen el foco ni la activación. Si una única ventana tiene paneles separados, sólo uno de los paneles deben tener el indicador del foco, y los indicadores del foco deben estar escondidos en el resto de paneles. Si es importante seguir mostrando qué elemento de una lista sin foco está seleccionado, por ejemplo, use un indicador de foco secundario. Consulte los <link linkend="gad-focus-examples">ejemplos de foco del teclado</link>.</para>
</listitem>
<listitem>
<para>Proporcione comentarios adecuados cuando el usuario intenta navegar más allá del final de un grupo de objetos relacionados. Al navegar por una lista, por ejemplo, pararse con comentarios sonoros es preferible a mover el foco al primer objeto en la lista. De lo contrario, los usuarios que son ciegos o con baja visión podrían no darse cuenta de que han regresado al principio. En el caso de una búsqueda de texto en un documento, puede aparecer un cuadro de diálogo para indicar que se ha alcanzado el final del documento, y le preguntará si desea reanudar la búsqueda desde el principio del documento.</para>
</listitem>
<listitem>
<para>Reproduzca la señal de alerta sonora o visual predeterminada del sistema cuando el usuario pulse una tecla inadecuada, o cuando falle una tecla de navegación para mover el foco. Por ejemplo, cuando el foco está en el primer carácter en un campo de texto y el usuario presiona la tecla izquierda de flecha, o el usuario intenta realizar una selección múltiple en un diálogo de selección única. (Tenga en cuenta que los usuarios con dificultades de audición debe ser capaz de configurar un equivalente visual de todo el sistema con la alerta sonora predeterminada.)</para>
</listitem>
</itemizedlist>

<section id="gad-focus-examples">
<title>Ejemplos de foco del teclado</title>
<example><title>Ejemplo que ilustra la necesidad de mostrar el foco con claridad</title>
<informaltable frame="all">
<tgroup cols="2">
<tbody>
<row>
<entry valign="middle">
<mediaobject>
<imageobject>
<imagedata fileref="figures/badfocus1.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>No se puede ver el elemento de esta ventana que tiene el foco porque se ha desplazado fuera de la pantalla.</phrase>
</textobject>
</mediaobject>
</entry>
<entry>Uno de los controles de esta ventana tiene el foco, pero es imposible decir cuál...</entry>
</row>
<row>
<entry valign="middle">
<mediaobject>
<imageobject>
<imagedata fileref="figures/badfocus2.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>El artículo enfocado en la lista se ha mostrado desplazando la lista</phrase>
</textobject>
</mediaobject>
</entry>
<entry>...hasta que desplaza la lista, lo que revela que uno de los elementos está actualmente seleccionado.</entry>
</row>
<row>
<entry valign="middle">
<mediaobject>
<imageobject>
<imagedata fileref="figures/goodfocus.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>El control de lista de este ejemplo tiene un borde sólido que indica el foco, si su elemento seleccionado está visible actualmente o no.</phrase>
</textobject>
</mediaobject>
</entry>
<entry>Si el control de lista tiene un borde «enfocado», es fácil decir que tiene el foco incluso cuando el elemento seleccionado actualmente no es visible.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</example>
<example>
<title>Ejemplo que ilustra el uso de foco secundario</title>
<informaltable frame="all">
<tgroup cols="2">
<tbody>
<row>
<entry valign="middle">
<mediaobject>
<imageobject>
<imagedata fileref="figures/badfocus3.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Ventana dividida en la que ambos paneles parecen tener el foco</phrase>
</textobject>
</mediaobject>
</entry>
<entry>En este ejemplo, es imposible decir, simplemente mirando, cuál de los dos paneles tiene actualmente el foco del teclado.</entry>
</row>
<row>
<entry valign="middle">
<mediaobject>
<imageobject>
<imagedata fileref="figures/goodfocus3.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Ventana dividida en la que el resaltado secundario se usa para mostrar qué panel tiene el foco</phrase>
</textobject>
</mediaobject>
</entry>
<entry>Usando un color de selección de relieve secundario en el panel inactivo, es obvio que el control de árbol tiene el foco aquí...</entry>
</row>
<row>
<entry valign="middle">
<mediaobject>
<imageobject>
<imagedata fileref="figures/goodfocus2.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Ventana dividida en la que el resaltado secundario se usa para mostrar qué panel tiene el foco</phrase>
</textobject>
</mediaobject>
</entry>
<entry>... y que el control de lista tiene el foco aquí.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</example>
</section>
</section>

<section>
<title>Sincronización</title>
<para>Interfaces en las aparecen o desaparecen cosas o se producen de acuerdo a un límite de tiempo codificado de manera que no se puede variar, son a menudo un obstáculo a la accesibilidad. Algunos usuarios pueden leer, escribir o reaccionar muy lentamente en comparación con otros. Si la información que requieren se oculta antes de terminar con ella, o la tapa  otro tipo de información que aparece sin que la soliciten expresamente, la aplicación será muy frustrante o imposible de usar.</para>
<itemizedlist>
<listitem>
<para>No programe los tiempos de espera ni otras características basadas ​​en el tiempo. Los ejemplos incluyen el desplazamiento automático al arrastrar un objeto hacia el borde de una ventana, manteniendo pulsado un botón de la barra de desplazamiento, o la expansión automática de un nodo del árbol cuando se arrastra un objeto sobre él y se mantiene durante un corto tiempo. Estos se deberían poder personalizar en la aplicación, en el Centro de control de GNOME o, en el peor de los casos, poder editarse manualmente desde la línea de comandos a través de un archivo de configuración o una entrada de GConf.</para>
</listitem>
<listitem>
<para>No muestre ni oculte brevemente la información basada en el movimiento del puntero del ratón. (Excepción: el sistema proporciona características tales como consejos, que el usuario puede configurar a nivel de todo el sistema). Si tiene que proporcionar estas características, haga que sean opcionales para que los usuarios puedan desactivarlas cuando se instala una utilidad para revisar la pantalla.</para>
</listitem>
</itemizedlist>
</section>

<section>
<title>Documentación</title>
<para>Las personas con discapacidades no pueden usar aplicación de manera efectiva si no tienen acceso a los manuales requeridos ni a los archivos de ayuda. Especialmente importante es la navegación con el teclado, ya que es la única manera en que muchos usuarios puede moverse por la aplicación.</para>
<itemizedlist>
<listitem>
<para>Proporcione toda la documentación en un formato accesible. HTML y texto en ASCII son formatos excelentes para las tecnologías de asistencia.</para>
</listitem>
<listitem>
<para>Proporcione descripciones de texto alternativas para todos los gráficos de la documentación.</para>
</listitem>
<listitem>
<para>Documente todas las características de accesibilidad de su aplicación. Es especialmente importante que se documenten la navegación con el teclado y los atajos. incluya una sección de accesibilidad en su documentación, donde se pueda encontrar información sobre todas las características de accesibilidad.</para>
</listitem>
</itemizedlist>
</section>
</section>
</chapter>

<chapter id="gtest" status="draft">
<title>Pruebas</title>
<para>Hay varios puntos de revisión que llevar a cabo antes de declarar una aplicación accesible. Durante el desarrollo, se pueden considerar técnicas de pruebas automatizadas. <ulink url="http://people.redhat.com/zcerza/dogtail">Dogtail</ulink>, por ejemplo, puede complementar su plan de pruebas automatizadas.</para>
<para>Esta sección describe una serie de pruebas que puede realizar manualmente en una aplicación para comprobar su accesibilidad. Superar todas las pruebas no implica necesariamente que la aplicación sea completamente accesible, pero si la aplicación falla en alguna de estas pruebas, el futuro trabajo debe ser mejorar estos aspectos de la accesibilidad.</para>

<section>
<title>Navegación por teclado</title>
<para>Se deberían probar las siguientes operaciones con el teclado. No use el ratón en ninguna parte de esta prueba.</para>
<itemizedlist>
<listitem>
<para>Usando sólo comandos del teclado, mueva el foco a través de todas las barras de menús de la aplicación.</para>
</listitem>
<listitem>
<para>Confirme que:</para>
<itemizedlist>
<listitem>
<para>Los menús sensitivos de contexto se muestran correctamente.</para>
</listitem>
<listitem>
<para>Cualquier función listada en la barra de herramientas se puede realizar usando el teclado.</para>
</listitem>
<listitem>
<para>Puede manejar todos los controles en el área de cliente de la aplicación y en los cuadros de diálogo.</para>
</listitem>
<listitem>
<para>El texto y los objetos en el área del cliente se pueden seleccionar.</para>
</listitem>
<listitem>
<para>Cualquier atajo o mejora de teclado funciona como se ha diseñado.</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</section>

<section>
<title>Elementos gráficos</title>
<para>Pruebe la aplicación usando un lector de pantalla y confirme que:</para>
<itemizedlist>
<listitem>
<para>Las etiquetas y el texto se leen correctamente, incluyendo los menús y las barras de heramientas.</para>
</listitem>
<listitem>
<para>La información del objeto se lee correctamente.</para>
</listitem>
</itemizedlist>
</section>

<section>
<title>Indicador visual del foco</title>
<itemizedlist>
<listitem>
<para>Verifique que cuando se mueve entre objetos el indicador visual del foco es fácil de identificar.</para>
</listitem>
<listitem>
<para>La navegación con el teclado a través del software y de los menús debería ser claramente visible cuando se mueve el foco.</para>
</listitem>
<listitem>
<para>Confirme que el lector de pantalla sigue el indicador de foco visual a medida que navega usando el teclado.</para>
</listitem>
<listitem>
<para>Ejecute un programa de magnificación de la pantalla (si está disponible) y compruebe que el magnificador puede seguir el indicador de foco visual a medida que navega usando el teclado y el ratón.</para>
</listitem>
</itemizedlist>
</section>

<section>
<title>Tipografías y textos</title>
<itemizedlist>
<listitem>
<para>Cambie la tipografía en la aplicación y confirme que los cambios se mantienen.</para>
</listitem>
<listitem>
<para>Pruebe la aplicación cambiando los colores y confirme que toda la configuración se mantiene.</para>
</listitem>
<listitem>
<para>Si la magnificación está disponible, comprobar la tipografía, color y tamaño al usar la opción de magnificación.</para>
</listitem>
</itemizedlist>
</section>

<section>
<title>Color y contraste</title>
<itemizedlist>
<listitem>
<para>Imprima capturas de pantalla en una impresora en blanco y negro y confirme que toda la información es visible.</para>
</listitem>
<listitem>
<para>Pruebe aplicaciones usando sólo los ajustes de alto contraste de blanco y negro y confirme que toda la información se transmite correctamente.</para>
</listitem>
<listitem>
<para>Compruebe que la aplicación proporciona al menos tres combinaciones de esquemas de color y que están disponibles los esquemas de alto contraste (ej. blanco sobre negro o amarillo sobre azul).</para>
</listitem>
<listitem>
<para>Active las características de contraste alto en el Centro de control de GNOME y confirmar que la aplicación respeta esos ajustes.</para>
</listitem>
<listitem>
<para>Pruebe varios temas para asegurarse de que el software funciona para todos los ajustes disponibles.</para>
</listitem>
</itemizedlist>
</section>

<section>
<title>Sonido</title>
<para>Debe existir una opción en la aplicación para mostrar visualmente las alertas de sonido.</para>
<para>Compruebe que el sonido funciona correctamente activando el sonido en el Centro de control de GNOME y realizando después las siguientes acciones:</para>
<itemizedlist>
<listitem>
<para>Realice una acción que debe generar una alerta de sonido y confirme que la aplicación funciona como se ha diseñado.</para>
</listitem>
<listitem>
<para>Compruebe que la aplicación funciona correctamente al aumentar o reducir el volumen.</para>
</listitem>
<listitem>
<para>Confirme que los mensajes de advertencia y alertas se pueden oír correctamente en un entorno de trabajo ruidoso.</para>
</listitem>
</itemizedlist>
</section>

<section>
<title>Animación</title>
<para>Compruebe que existe una opción disponible para detener la animación y que funciona como se ha diseñado.</para>
<para>Desactive la animación. Confirme que aún así se hace llegar correctamente toda la información.</para>
</section>

<section>
<title>Foco del teclado</title>
<itemizedlist>
<listitem>
<para>Compruebe todos los mensajes para confirmar que se le notifica al usuario antes de que un mensaje caduque y se da la opción de indicar que se necesita más tiempo.</para>
</listitem>
<listitem>
<para>Asegúrese de que se ha incluido una opción para ajustar el tiempo de respuesta y confirme que funciona como se ha diseñado.</para>
</listitem>
</itemizedlist>
</section>

<section>
<title>Documentación</title>
<para>Compruebe la documentación de texto ASCII con un lector de pantalla para comprobar que es limpia y precisa y las tecnologías de asistencia la pueden leer.</para>
<para>Compruebe que las aplicaciones HTML que usan un navegador web y el lector de pantalla confirman que la documentación es accesible a las tecnologías de asistencia.</para>
<para>Nota: existen guías de accesibilidad web disponibles en <ulink url="http://www.w3.org/TR/WAI-WEBCONTENT/">http://www.w3.org/TR/WAI-WEBCONTENT/</ulink>.</para>
<para>Confirme que la siguiente información se incluye en la documentación:</para>
<itemizedlist>
<listitem>
<para>Plantee si la aplicación no soporta los accesos de teclado estándar usados por el Sistema Operativo.</para>
</listitem>
<listitem>
<para>Identifique si existen comandos únicos de teclado.</para>
</listitem>
<listitem>
<para>Identifique cualquier característica única de accesibilidad.</para>
</listitem>
<listitem>
<para>Si una acción se documenta para el ratón, asegúrese de que existe una alternativa para usar el teclado.</para>
</listitem>
</itemizedlist>
</section>

<section id="gad-checklist">
<title>Lista de comprobación de la interfaz de usuario</title>
<para>Esta sección resume las guías proporcionadas en la <link linkend="gad-ui-guidelines">Guías de interfaz de usuario para soportar accesibilidad</link>. Debe referirse a esa sección de la guía para obtener información más detallada sobre cualquiera de los elementos de la lista de comprobación aquí proporcionados.</para>
<para>Al comprobar una aplicación para su accesibilidad debería ir a través de cada uno de los elementos de la lista. Notar si la aplicación pasa o falla cada comprobación o no se aplica a dicha comprobación.</para>
<table frame="all" pgwide="1">
<title>Lista de comprobación de los principios generales</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>PG</entry>
<entry>Principios generales</entry>
<entry>Pasa/Falla/No aplicable</entry>
</row>
</thead>
<tbody>
<row>
<entry>PG.1</entry>
<entry>Se puede deshacer cada acción que altera los datos del usuario o la configuración de una aplicación.</entry>
</row>
<row>
<entry>PG.2</entry>
<entry>Toda la configuración de las aplicaciones se puede restaurar a sus valores predeterminados sin que el usuario tenga que recordar cuáles eran esos valores.</entry>
</row>
<row>
<entry>PG.3</entry>
<entry>Después de la instalación, la aplicación se puede usar sin que el usuario tenga que introducir un disco o CD en ningún momento.</entry>
</row>
<row><entry>PG.4</entry>
<entry>Las funciones más frecuentemente usadas se encuentran en la parte superior de la estructura del menú.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Lista de comprobación de la navegación por teclado</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>NT</entry>
<entry>Navegación por teclado</entry>
<entry>Pasa/Falla/No aplicable</entry>
</row>
</thead>
<tbody>
<row>
<entry>NT.1</entry>
<entry>Se proporciona acceso eficiente al teclado para todas las características de la aplicación.</entry>
</row>
<row>
<entry>NT.2</entry>
<entry>Todas las ventanas tienen un orden lógico de navegación por teclado.</entry>
</row>
<row><entry>NT.3</entry>
<entry>Se usa el orden correcto de tabulación para los controles cuyos estados activados dependen de cajas de verificación, botones de radio o botones de conmutación.</entry>
</row>
<row><entry>NT.4</entry>
<entry>El acceso a las funciones específicas de la aplicación a través del teclado no anulan las características de accesibilidad del sistema.</entry>
</row>
<row><entry>NT.5</entry>
<entry>La aplicación proporciona más de un método para realizar tareas con el teclado, siempre que sea posible.</entry>
</row>
<row><entry>NT.6</entry>
<entry>Existen combinaciones de teclas alternativas siempre que sea posible.</entry>
</row>
<row><entry>NT.7</entry>
<entry>No existen combinaciones incómodas de alcanzar para operaciones de teclado realizadas frecuentemente.</entry>
</row>
<row><entry>NT.8</entry>
<entry>La aplicación no usa pulsaciones de teclado simultáneas y/o repetitivas.</entry>
</row>
<row><entry>NT.9</entry>
<entry>La aplicación proporciona equivalentes de teclado para todas las funciones del ratón.</entry>
</row>
<row><entry>NT.10</entry>
<entry>Cualquier texto u objeto que se puede seleccionar con el ratón también se puede seleccionar sólo con el teclado.</entry>
</row>
<row><entry>NT.11</entry>
<entry>Cualquier objeto que se puede redimensionar o mover con el ratón también se puede redimensionar y mover sólo con el teclado.</entry>
</row>
<row><entry>NT.12</entry>
<entry>La aplicación no usa funciones de navegación generales para disparar operaciones.</entry>
</row>
<row><entry>NT.13</entry>
<entry>Todos los menús, ventanas y consejos invocados con el teclado aparecen junto al objeto al que están relacionados.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Lista de comprobación de la interacción con el ratón</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>IR</entry>
<entry>Interacción del ratón</entry>
<entry>Pasa/Falla/No aplicable</entry>
</row>
</thead>
<tbody>
<row><entry>IR.1</entry>
<entry>Ninguna operación depende de la entrada de los botones del ratón <mousebutton>derecha</mousebutton> o <mousebutton>medio</mousebutton>.</entry>
</row>
<row><entry>IR.2</entry>
<entry>Todas las operaciones con el ratón se pueden cancelar antes de que se completen.</entry>
</row>
<row><entry>IR.3</entry>
<entry>Se proporciona contexto visual a en todas las operaciones de arrastrar y soltar</entry>
</row>
<row><entry>IR.4</entry>
<entry>El puntero del ratón nunca se ajusta bajo el control de la aplicación, o la aplicación restringe su movimiento se restringe a parte de la pantalla.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Lista de comprobación de los elementos gráficos</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>EG</entry>
<entry>Elementos gráficos</entry>
<entry>Pasa/Falla/No aplicable</entry>
</row>
</thead>
<tbody>
<row><entry>EG.1</entry>
<entry>No existen atributos gráficos incrustados e inmutables («hard-coded») tales como el grosor de las líneas, bordes o sombras.</entry>
</row>
<row><entry>EG.2</entry>
<entry>Todos los elementos gráficos multicolor se pueden mostrar en monocromo, siempre que sea posible.</entry>
</row>
<row><entry>EG.3</entry>
<entry>Todos los elementos interactivos del IGU son fácilmente distinguibles desde elementos del IGU estáticos.</entry>
</row>
<row><entry>EG.4</entry>
<entry>Se proporciona una opción para ocultar los gráficos no esenciales.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Lista de comprobación de las tipografías y del texto</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>TT</entry>
<entry>Tipografías y textos</entry>
<entry>Pasa/Falla/No aplicable</entry>
</row>
</thead>
<tbody>
<row><entry>TT.1</entry>
<entry>No hay estilos o tamaños incrustados e inmutables («hard-coded»)</entry>
</row>
<row><entry>TT.2</entry>
<entry>Se proporciona una opción para desactivar los fondos gráficos detrás del texto.</entry>
</row>
<row><entry>TT.3</entry>
<entry>Todas las etiquetas deben tener nombres que tengan sentido al sacarlas de contexto.</entry>
</row>
<row><entry>TT.4</entry>
<entry>No se usa más de una vez el mismo nombre de etiqueta en la misma ventana.</entry>
</row>
<row><entry>TT.5</entry>
<entry>La posición de las etiquetas es consistente en toda la aplicación.</entry>
</row>
<row><entry>TT.6</entry>
<entry>Todas las etiquetas de texto estático que identifican otros controles terminan con dos puntos (:).</entry>
</row>
<row><entry>TT.7</entry>
<entry>Las etiquetas de texto estático que identifican otros controles preceden inmediatamente a esos controles en el orden de las pestañas.</entry>
</row>
<row><entry>TT.8</entry>
<entry>Se proporciona una alternativa a «WYSIWYG» (lo que se ve es lo que se obtiene). Por ejemplo, la capacidad de especificar una pantalla diferente o tipografías de impresión diferentes en un editor de textos.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Lista de comprobación del color y contraste</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>CC</entry>
<entry>Color y contraste</entry>
<entry>Pasa/Falla/No aplicable</entry>
</row>
</thead>
<tbody>
<row><entry>CC.1</entry>
<entry>Los colores de la aplicación no están incrustados ni son inmutables («hard-coded»), sino que se dibujan desde el tema actual del escritorio o desde un ajuste de la aplicación.</entry>
</row>
<row><entry>CC.2</entry>
<entry>El color sólo se usa como mejora y no como el único medio de comunicar información u acciones.</entry>
</row>
<row>
<entry>CC.3</entry>
<entry>La aplicación soporta todos los temas y ajustes de los temas de alto contraste.</entry>
</row>
<row><entry>CC.4</entry>
<entry>El software no depende de ningún tema de alto contraste o ajuste en particular.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Lista de comprobación de la magnificación</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>MG</entry>
<entry>Aumento</entry>
<entry>Pasa/Falla/No aplicable</entry>
</row>
</thead>
<tbody>
<row><entry>MG.1</entry>
<entry>La aplicación proporciona la capacidad de magnificar el área de trabajo.</entry>
</row>
<row><entry>MG.2</entry>
<entry>La aplicación proporciona la opción de escalar el área de trabajo.</entry>
</row>
<row><entry>MG.3</entry>
<entry>La funcionalidad de la aplicación no se ve afectada por cambiar la magnificación o los ajustes de escala.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Lista de comprobación del sonido</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>SO</entry>
<entry>Sonido</entry>
<entry>Pasa/Falla/No aplicable</entry>
</row>
</thead>
<tbody>
<row><entry>SO.1</entry>
<entry>El sonido no se usa como el único medio de comunicación de cualquier elemento de información.</entry>
</row>
<row><entry>SO.2</entry>
<entry>El usuario puede configurar la frecuencia y volumen de todos los sonidos y pitidos de advertencia.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Lista de comprobación de animaciones</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>AN</entry>
<entry>Animación</entry>
<entry>Pasa/Falla/No aplicable</entry>
</row>
</thead>
<tbody>
<row><entry>AN.1</entry>
<entry>No existe ningún elemento que destelle o parpadee con una frecuencia mayor de 2Hz o menor de 55Hz.</entry>
</row>
<row><entry>AN.2</entry>
<entry>Cualquier destello o parpadeo está confinado en pequeñas áreas de la pantalla.</entry>
</row>
<row><entry>AN.3</entry>
<entry>Si se usa una animación existe una opción disponible para desactivarla antes de que se muestre por primera vez.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Lista de comprobación del foco del teclado</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>FT</entry>
<entry>Foco del teclado</entry>
<entry>Pasa/Falla/No aplicable</entry>
</row>
</thead>
<tbody>
<row><entry>FT.1</entry>
<entry>Al abrir una ventana el foco está en el control más usado.</entry>
</row>
<row><entry>FT.2</entry>
<entry>La posición del foco de entrada está claramente mostrada en todo momento.</entry>
</row>
<row><entry>FT.3</entry>
<entry>El foco de entrada se muestra exactamente en una ventana en todo momento.</entry>
</row>
<row><entry>FT.4</entry>
<entry>Se proporciona el contexto sonoro o visual apropiado cuando el usuario intenta navegar más allá del límite de un grupo de objetos relacionados.</entry>
</row>
<row><entry>FT.5</entry>
<entry>La señal de advertencia sonora o visual predeterminada se reproduce cuando el usuario pulsa una tecla inapropiada.</entry>
</row>
<row><entry>FT.6</entry>
<entry>Existe suficiente información sonora para el foco visual tal que el usuario puede intuir qué hacer a continuación.</entry>
</row>
<row><entry>FT.7</entry>
<entry>Al usar tecnologías de asistencia, tales como el lector de pantalla o un dispositivo braille, el programa actual indica la posición y contenido del indicador visual del foco.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Lista de comprobación de los tiempos</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>TM</entry>
<entry>Sincronización</entry>
<entry>Pasa/Falla/No aplicable</entry>
</row>
</thead>
<tbody>
<row><entry>TM.1</entry>
<entry>En la aplicación no existen tiempos de expiración invariables en el código o características basadas en tiempo.</entry>
</row>
<row><entry>TM.2</entry>
<entry>El mostrado u ocultación de información importante no se dispara exclusivamente por el movimiento del puntero del ratón.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Lista de comprobación de la documentación</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>DC</entry>
<entry>Documentación</entry>
<entry>Pasa/Falla/No aplicable</entry>
</row>
</thead>
<tbody>
<row><entry>DC.1</entry>
<entry>Toda la documentación está en un formato accesible, con descripciones textuales alternativas proporcionadas para todas las figuras y diagramas.</entry>
</row>
<row><entry>DC.2</entry>
<entry>La documentación incluye una sección que cubre las características de accesibilidad de la aplicación.</entry>
</row>
</tbody>
</tgroup>
</table>
</section>

<section>
<title>GOK (Teclado en pantalla de GNOME)</title>
<para>Su aplicación debería poder usarse a través de <application>gok</application>; las entradas de teclado debería generarlas <application>gok</application> completamente, no el teclado. El objetivo aquí sería trabajar con su aplicación y el escritorio, en general, asegurándose que se puede escribir cualquier carácter de entrada con el teclado en pantalla.</para>
<para>La aplicación <application>gok</application> viene con el Escritorio GNOME, así que debería estar presente. Consulte el <ulink url="http://www.gok.ca">sitio oficial de gok</ulink> para obtener la documentación completa.</para>
<para>Siga estos pasos para comprobar el correcto funcionamiento de <application>gok</application> con su aplicación:</para>
<procedure>
<step>
<para>Inicie sesión en el Escritorio GNOME</para>
</step>
<step>
<para>Ejecute <application>gok</application></para>
</step>
<step>
<para>Inicie su aplicación</para>
</step>
<step>
<para>Proporcione entrada a su aplicación con un dispositivo apuntador (ej. un ratón o seguidor de mirada) y <application>gok</application>.</para>
</step>
<step>
<para>Trabaje usando las características de autocompletado y predicción de palabras de <application>gok</application>.</para>
</step>
<step>
<para>Compruebe que <application>gok</application> activa y desactiva los botones de los <guibutton>Menús</guibutton> y <guibutton>Barras de herramientas</guibutton> basadas en la clase de aplicación invocada; por ejemplo, los botones de los <guibutton>Menús</guibutton> y <guibutton>Barras de Herramientas</guibutton> están desactivados para el «capplet» «Propiedades de las tipografías», pero los mismos botones están activados para la aplicación <application>gedit</application>.</para>
</step>
<step>
<para>Compruebe que el teclado en pantalla <application>gok</application> proporciona el botón <guibutton>Redactar</guibutton> y que se puede usar para escribir cualquier texto para la aplicación seleccionada; ejecute <application>gedit</application>, pulse en el área de texto y después pulse el botón <guibutton>Redactar</guibutton> de <application>gok</application>. Seleccione las teclas necesarias en el teclado en pantalla. Los caracteres deberían aparecer en el área de texto de <application>gedit</application>.</para>
</step>
<step>
<para>Compruebe que el botón del <guibutton>Lanzador</guibutton> permite usar el lanzador de cualquiera de las aplicaciones <application>Terminal</application>, <application>Navegador web</application> o <application>Editor de textos</application>.</para>
</step>
<step>
<para>Compruebe que el botón <guibutton>Activar</guibutton> permite al usuario activar cualquiera de las ventanas de las aplicaciones actualmente en ejecución en el escritorio del usuario, incluyendo los paneles de GNOME y el escritorio GNOME.</para>
</step>
<step>
<para>Compruebe que el botón <guibutton>Menús</guibutton> lista todos los menús disponibles en la aplicación actual. Compruebe que al pulsar en el botón de un menú se muestran el submenú y los elementos de menú que contiene el submenú. Finalmente, compruebe que al pulsar en un elemento de menú se activa el elemento del menú. Por ejemplo, pulse en la aplicación <application>Visor de ayuda</application> y pulse el botón <guibutton>Menús</guibutton>. Ahora, la ventana de <application>GOK</application> muestra los botones <guibutton>Archivo</guibutton>, <guibutton>Ir</guibutton> y <guibutton>Ayuda</guibutton> (los menús de <application>Visor de ayuda</application>). Pulse en el botón <guibutton>Archivo</guibutton> y se mostrarán los botones <guibutton>Ventana nueva</guibutton> and <guibutton>Cerrar ventana</guibutton> (elementos del menú).</para>
</step>
<step>
<para>Compruebe que las listas de botones <guibutton>Barras de herramientas</guibutton> listan todos los botones disponibles en la barra de herramientas de la aplicación. Por ejemplo, pulse en la aplicación del <application>Examinador de la ayuda</application> y después pulse en el botón  <guibutton>Barras de herramientas</guibutton>. Ahora la ventana de <application>GOK</application> muestra los botones <guibutton>Atrás</guibutton>, <guibutton>Adelante</guibutton> e <guibutton>Inicio</guibutton>.</para>
</step>
<step>
<para>Verifique que el botón <guibutton>Extractor IU</guibutton> muestra todos los objetos de botones para la ventana de la aplicación seleccionada. Por ejemplo, abra la miniaplicación «Propiedades de la tipografía» y pulse el botón <guibutton>Extractor IU</guibutton> en la ventana de <application>GOK</application>. La ventana de <application>GOK</application> debería mostrar los botones de la miniaplicación: <guibutton>Sans</guibutton>, <guibutton>Sans-serif</guibutton>, <guibutton>Cerrar</guibutton> y <guibutton>Ayuda</guibutton>.</para>
</step>
</procedure>
</section>

<section>
<title>Accerciser</title>
<screenshot>
<mediaobject>
<imageobject>
<imagedata fileref="figures/at-arch.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Accerciser y la arquitectura de accesibilidad de GNOM</phrase>
</textobject>
</mediaobject>
</screenshot>

<para><application>Accerciser</application> es un examinador interactivo de accesibilidad desarrollado en Python para el Escritorio de GNOME. Usa AT-SPI para inspeccionar y controlar widgets, permitiéndole comprobar si una aplicación está proporcionando información correcta a las tecnologías de asistencia y pruebas automáticas de trabajo. <application>Accerciser</application> tiene un entorno de trabajo de complementos simple que puede usar para crear vistas personalizadas de la información de accesibilidad. Se puede obtener la documentación completa en el <ulink url="http://library.gnome.org/devel/accerciser/stable">Manual oficial de Accerciser</ulink>. Para ver una demostración de <application>Accerciser</application> y <application>PyATSPI</application> (acceso al entorno del envoltorio de Python y uso de AT-SPI), consulte <ulink url="http://live.gnome.org/Accessibility/PythonPoweredAccessibility">este artículo</ulink>. Para una excelente visión general por el autor, consulte el artículo titulado <ulink url="http://www.linuxjournal.com/article/9991">Make Your Application Accessible with Accerciser</ulink>.</para>
<note>
<para><application>Accerciser</application> ha reemplazado la anterior herramienta <application>at-poke</application>.</para>
</note>
</section>

</chapter>

</book>