/usr/share/help/cs/accessibility-devel-guide/index.docbook is in gnome-devel-docs 3.28.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | <?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="cs">
<title>Vývojářská příručka ke zpřístupnění GNOME</title>
<bookinfo>
<abstract role="description">
<para>Příručka ke zpřístupnění GNOME je určena pro vývojáře, kteří chtějí mít jistotu, že výsledek jejich programování bude přístupný širokému okruhu uživatelů. Příručka také pokrývá řadu požadavků článku 508 vlády USA.</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>
<publisher role="maintainer">
<publishername>Dokumentační projekt GNOME</publishername>
</publisher>
<legalnotice id="legalnotice">
<para>Je povoleno kopírovat, šířit a/nebo upravovat tento dokument za podmínek GNU Free Documentation License (GFDL), verze 1.1 nebo jakékoli novější verze vydané nadací Free Software Foundation, bez neměnných oddílů, bez textů předních desek a bez textů zadních desek. Kopie GFD můžete najít <ulink type="help" url="ghelp:fdl">zde</ulink> nebo v souboru COPYING-DOCS dodávaném s touto příručkou.</para>
<para>Tato příručka je součástí kolekce příruček GNOME, distribuovaných pod licencí GFDL. Pokud chcete tento dokument šířit odděleně od kolekce, musíte přiložit kopii licence dle popisu v sekci 6 této licence.</para>
<para>Řada názvů užívaných firmami ke zviditelnění jejich produktů nebo služeb jsou registrované ochranné známky. Na místech, kde jsou tyto názvy v dokumentaci použity a členové Dokumentačního projektu GNOME jsou si vědomi skutečnosti, že se jedná o ochrannou známku, je takový název psán velkými písmeny celý nebo s velkým písmenem na začátku.</para>
<para>DOKUMENT A JEHO UPRAVENÉ VERZE JSOU ŠÍŘENY V SOULADU SE ZNĚNÍM LICENCE GNU FREE DOCUMENTATION LICENSE S NÁSLEDUJÍCÍM USTANOVENÍM: <orderedlist>
<listitem>
<para>DOKUMENT JE POSKYTOVÁN V PODOBĚ „JAK JE“ BEZ ZÁRUKY V JAKÉKOLIV PODOBĚ, NEPOSKYTUJÍ SE ANI ODVOZENÉ ZÁRUKY, ZÁRUKY, ŽE DOKUMENT, NEBO JEHO UPRAVENÁ VERZE, JE BEZCHYBNÝ, NEBO ZÁRUKY PRODEJNOSTI, VHODNOSTI PRO URČITÝ ÚČEL NEBO NEPORUŠENOSTI. RIZIKO NEKVALITY, NEPŘESNOSTI A ŠPATNÉHO PROVEDENÍ DOKUMENTU, NEBO JEHO UPRAVENÉ VERZE, LEŽÍ NA VÁS. POKUD KVŮLI TOMUTO DOKUMENTU, NEBO JEHO UPRAVENÉ VERZI, NASTANE PROBLÉM, VY (NIKOLIV PŮVODNÍ AUTOR NEBO JAKÝKOLIV PŘISPĚVATEL) PŘEBÍRÁTE JAKÉKOLIV NÁKLADY ZA NUTNÉ ÚPRAVY, OPRAVY ČI SLUŽBY. TOTO PROHLÁŠENÍ O ZÁRUCE PŘEDSTAVUJE ZÁKLADNÍ SOUČÁST TÉTO LICENCE. BEZ TOHOTO PROHLÁŠENÍ NENÍ, PODLE TÉTO DOHODY, POVOLENO TENTO DOKUMENT UŽÍVÁT ANI UPRAVOVAT; DÁLE</para>
</listitem>
<listitem>
<para>ZA ŽÁDNÝCH OKOLNOSTÍ A ŽÁDNÝCH PRÁVNÍCH PŘEDPOKLADŮ, AŤ SE JEDNÁ O PŘEČIN (VČETNĚ NEDBALOSTNÍCH), SMLOUVU NEBO JINÉ, NENÍ AUTOR, PŮVODNÍ PISATEL, KTERÝKOLIV PŘISPĚVATEL NEBO KTERÝKOLIV DISTRIBUTOR TOHOTO DOKUMENTU NEBO UPRAVENÉ VERZE DOKUMENTU NEBO KTERÝKOLIV DODAVATEL NĚKTERÉ Z TĚCHTO STRAN ODPOVĚDNÝ NĚJAKÉ OSOBĚ ZA PŘÍMÉ, NEPŘÍMÉ, SPECIÁLNÍ, NAHODILÉ NEBO NÁSLEDNÉ ŠKODY JAKÉHOKOLIV CHARAKTERU, VČETNĚ, ALE NEJEN, ZA POŠKOZENÍ ZE ZTRÁTY DOBRÉHO JMÉNA, PŘERUŠENÍ PRÁCE, PORUCHY NEBO NESPRÁVNÉ FUNKCE POČÍTAČE NEBO JINÉHO A VŠECH DALŠÍCH ŠKOD NEBO ZTRÁT VYVSTÁVAJÍCÍCH Z NEBO VZTAHUJÍCÍCH SE K POUŽÍVÁNÍ TOHOTO DOKUMENTU NEBO UPRAVENÝCH VERZÍ DOKUMENTU, I KDYŽ BY TAKOVÁTO STRANA BYLA INFORMOVANÁ O MOŽNOSTI TAKOVÉHOTO POŠKOZENÍ.</para>
</listitem>
</orderedlist></para>
</legalnotice>
<authorgroup>
<author><firstname>Vincent</firstname> <surname>Alexander</surname> <affiliation> <orgname>Dokumentační projekt GNOME</orgname> </affiliation></author>
<author><firstname>Calum</firstname> <surname>Benson</surname> <affiliation> <orgname>Dokumentační projekt GNOME</orgname> </affiliation></author>
<author><firstname>Brian</firstname> <surname>Cameron</surname> <affiliation> <orgname>Dokumentační projekt GNOME</orgname> </affiliation></author>
<author><firstname>Bill</firstname> <surname>Haneman</surname> <affiliation> <orgname>Dokumentační projekt GNOME</orgname> </affiliation></author>
<author><firstname>Padraig</firstname> <surname>O'Briain</surname> <affiliation> <orgname>Dokumentační projekt GNOME</orgname> </affiliation></author>
<author><firstname>Sharon</firstname> <surname>Snider</surname> <affiliation> <orgname>Dokumentační projekt GNOME</orgname> </affiliation></author>
</authorgroup>
<revhistory>
<revision><revnumber>Vývojářská příručka V2.24.0 ke zpřístupnění GNOME 2.24</revnumber> <date>září 2008</date> <revdescription>
<para role="author">Dokumentační projekt GNOME</para>
<para role="publisher">Dokumentační projekt GNOME</para>
</revdescription></revision>
<revision><revnumber>Vývojářská příručka V2.24.0 ke zpřístupnění GNOME 2.24</revnumber> <date>září 2008</date> <revdescription>
<para role="author">Dokumentační projekt GNOME</para>
<para role="publisher">Dokumentační projekt GNOME</para>
</revdescription></revision>
</revhistory>
<releaseinfo>Tato příručka popisuje pracovní prostředí GNOME ve verzi 2.24.</releaseinfo>
<legalnotice>
<title>Ohlasy</title>
<para>Pokud chcete oznámit chybu nebo navrhnout vylepšení vztahující se k pracovnímu prostředí GNOME nebo této příručce, postupujte dle instrukcí v <ulink type="help" url="ghelp:user-guide?feedback">kapitole Ohlasy v uživatelské příručce GNOME</ulink>.</para>
</legalnotice>
</bookinfo>
<chapter id="gad" status="draft">
<title>Co je to zpřístupnění</title>
<para>Zpřístupnění znamená pomoc lidem s postižením, aby se mohli účastnit běžných každodenních činností. Což zahrnuje práci a využívání služeb, věcí a informací. Součástí GNOME jsou knihovny a podpůrný základní rámec umožňující lidem s postižením používat veškerou funkcionalitu uživatelského pracovního prostředí GNOME.</para>
<para>Ve spojení s asistenčními technologiemi – hlasovým rozhraním, čtečkou obrazovky, alternativním vstupním zařízením, apod. – v případě potřeby mohou lidé s trvalým nebo dočasným postižením i navzdory svému postižení používat pracovní prostředí GNOME a aplikace. Asistenční technologie se mohou hodit i ostatním lidem, když jsou mimo domov nebo kancelář. Například v dopravní zácpě můžete využít hlasový vstup a výstup ke kontrole své elektronické pošty.</para>
<para>Asistenční technologie získávají informace od aplikací pře API ATK (Accessibility Toolkit), který můžete najít v modulu atk v repozitářích GNOME. Díky tomu, že je podpora pro API zpřístupnění vestavěná ve widgetech GNOME, měly by vaše programy pro GNOME fungovat s asistenčními technologiemi poměrně dobře i bez nějakého přispění z vaší strany. Například umí asistenční technologie automaticky číst popisky widgetů, které ve svém programu nastavujete tak jako tak (např. pomocí zavolání funkce jako je <function>gtk_label_set_text()</function> nebo <function>gtk_button_new_with_label()</function>). Umí také zjistit, jestli je k widgetu přiřazena nějaká vysvětlivka a použít ji k popisu widgetu uživateli.</para>
<para>Když věnujete trochu úsilí navíc, může váš program fungovat s asistenčními technologiemi ještě lépe. Mimo toho, že tím pomůžete jednotlivým uživatelům, zatraktivníte tím svůj výtvor také pro vládní a školské zakázky, nehledě na to, že zpřístupnění v těchto případech mnohdy požaduje zákon.</para>
<section>
<title>Typy postižení</title>
<para>Jen v samotné české republice je odhadem přes milión lidí s postižením, kterým může být používání počítače ztíženo kvůli nepřístupnému návrhu softwaru. Globálně má okolo 8 % lidí, který používají webové stránky, nějaký druh postižení. Jednotlivá postižení spadají do některé z těchto kategorií:</para>
<itemizedlist>
<listitem>
<para><emphasis>Zraková postižení</emphasis> – může se pohybovat od zhoršeného vidění (včetně, mimo jiné, šerosleposti, silné krátkozrakosti nebo dalekozrakosti, barvosleposti a tunelového vidění) po úplnou slepotu. Špatná volba velikosti textu a barev a úlohy vyžadující přesnou koordinaci ruky a oka (jako pohyb myší) mohou těmto lidem způsobovat problémy.</para>
</listitem>
<listitem>
<para><emphasis>Pohybové postižení</emphasis> – pro uživatele se špatným ovládáním svalstva nebo svalovou distrofií může být obtížné používat standardní klávesnici nebo myš. Například nemohou zmáčknout dvě klávesy současně nebo mohou s větší pravděpodobností zmáčknout klávesu nechtěně.</para>
</listitem>
<listitem>
<para><emphasis>Sluchová postižení</emphasis> – může se pohybovat od schopnosti slyšet nějaké zvuky, ale nedokázat rozpoznat slova, po úplnou hluchotu. Aplikace, které podávají podstatné informace jen ve zvukové podobě, mohou těmto uživatelům působit problémy.</para>
</listitem>
<listitem>
<para><emphasis>Poruchy rozpoznávání a jazykové</emphasis> – mohou se pohybovat od dyslexie po obtíže s pamatováním věcí, řešením problémů nebo chápáním a používání mluveného či psaného jazyka. Komplikované nebo nekonzistentní zobrazení či špatná volba slov mohou těmto uživatelům ztížit používání počítače.</para>
</listitem>
<listitem>
<para><emphasis>Poruchy vnímání</emphasis> – určité druhy světel nebo zvuků mohou způsobit u vnímavějších uživatelů epileptický záchvat.</para>
</listitem>
</itemizedlist>
</section>
<section id="gad-how-it-works">
<title>Jak zpřístupnění funguje v GNOME</title>
<para>ATK (Accessibility Toolkit – sada nástrojů zpřístupnění) popisuje sadu rozhraní, která musí být implementována v komponentách GUI, aby byly přístupné. Rozhraní jsou nezávislá na vývojářských sadách – implementaci je možné napsat pro libovolnou množinu widgetů, jako je GTK, Motif nebo Qt.</para>
<para>Implementace pro widgety GTK je v modulu nazývaném GAIL (GNOME Accessibility Implementation Library), který je dynamicky načítán za běhu aplikacemi GTK. Když je načten, tak části vaší aplikace, které používají standardní widgety GTK, budou mít základní úroveň zpřístupnění, aniž by bylo v aplikaci potřeba cokoliv upravovat. Když knihovna GAIL není načtená, budou mít widgety GTK výchozí implementaci zpřístupnění, která v podstatě nevrací žádné informace, i když formálně vyhovují API ATK. Aplikace, které používají ovládací prvky Bonobo, zejména ty nezpracovávané, rovněž načtou kód pro podporu zpřístupnění z modulu libgail-gnome. To, jestli aplikace v pracovní prostředí GNOME automaticky načte nebo nenačte knihovny s podporou zpřístupnění, závisí na hodnotě klíče <application>gconf</application> „/desktop/gnome/interface/accessibility“. Pravdivostní hodnota „true“ zapne podporu pro asistenční technologie a aplikace, které volají gnome_program_init automaticky za běhu načtou příslušné knihovny zpřístupnění. Aplikace čistě s GTK+, například ty, které používají gtk+, ale nejsou slinkovány s libgnome, musí spoléhat na hodnotu proměnné prostředí GTK_MODULES, která musí být nastavená na „gail:atk-bridge“, aby se zapnula podpora asistenčních technologií.</para>
<para>Většina asistenčních technologií, které běží v jiných pracovních prostředích, zjistila, že je z historických důvodů potřeba se starat o složitý mimoobrazovkový model běžící aplikace založený na zachytávání událostí OS, o používání nepodporovaných OS a aplikačních funkcí a API a o silně nepřenositelné techniky. To udělalo z podpory asistenčních technologií něco snadno rozbitelného a značně závislého na OS a aplikaci, nebo dokonce verzi aplikace. Oproti tomu v pracovním prostředí GNOME jsou všechny informace požadované AT poskytovány běžící aplikací přes základní rámec přístupnosti do SPI (Service Provider Interface) nezávislého na použité nástrojové sadě. SPI poskytuje prostředky pro unixové asistenční technologie, jako je čtečka obrazovky a lupa obrazovky, aby získaly informace o zpřístupnění od běžících aplikací přes jednotné a stabilní API, a ve většině případů dokáže vyloučit potřebu mimoobrazovkového modelu. Podpora zpřístupnění pro aplikace je „zabudovaná“ v nástrojové sadě pro vývoj aplikací pomocí příslušného API (např. ATK pro většinu nativních aplikací v jazyce C a Java Accessibility API pro aplikace v jazyce Java) a exportována do běžného rozhraní „AT-SPI“ přes příslušný „most“ (viz schéma níže).</para>
<figure id="gad-architecture">
<title>Architektura zpřístupnění v GNOME</title>
<mediaobject><imageobject><imagedata fileref="figures/GNOME_desktop_Accessibility.png" format="PNG"/></imageobject> <textobject><phrase>Schéma architektury zpřístupnění v GNOME</phrase></textobject></mediaobject>
</figure>
<para>Vestavěná podpora zpřístupnění v GNOME znamená, že aplikace vytvořené pomocí standardních widgetů GNOME dostávají podporu pro asistenční technologie „zdarma“ za předpokladu, že widgety nejsou používány neobvyklým způsobem, které by byl v konfliktu s touto vestavěnou podporou.</para>
<para>Widget gtk+/GNOME je zpřístupněný, pokud dodržuje obecná pravidla zpřístupnění uvedená v tomto dokumentu a implementuje rozhraní ATK odpovídající jeho roli v uživatelském rozhraní. Implementace ATK jsou poskytovány pro standardní widgety nástrojové sady GNOME (např. nezastaralé widgety gtk+ a GNOME) a nové widgety, které jsou jednoduše odvozeny ze stávajících widgetů GTK+ nebo GNOME, patřičnou podporu zpřístupnění většinou zdědí. </para>
<para>Ačkoliv vestavěná podpora zpřístupnění v GNOME poskytuje podstatnou funkcionalitu bez nutnosti úpravy částí kódu speciálně pro zpřístupnění, aplikace často vylepšují výchozí popisy pro některé widgety a přizpůsobují je na míru konkrétnímu účelu aplikace pomocí přímého volání metod ATK v aplikaci. Například, ve většině případů by aplikace měly přidat nebo změnit textové popisy u widgetů pomocí příslušného volání funkce ATK, aby asistenční technologie mohly popsat jejich účel nebo stav uživateli. Více informací viz <link linkend="gad-coding-guidelines">Příručka ke kódování s podporou zpřístupnění</link>.</para>
<para>Pokud vaše aplikace používá vlastní widgety, můžete mít nějakou práci s předáváním vlastností těchto widgetů asistenčním technologiím. Více informací viz <link linkend="gad-custom">Zpřístupnění vlastních komponent</link> a <link linkend="gad-api-examples">Příklady, které používají API zpřístupnění</link>.</para>
<para>Další informace ohledně GTK/GTK+ jdoucí více do hloubky najdete v <ulink url="http://library.gnome.org/devel/gtk">referenční příručce GTK+</ulink>, v <ulink url="http://live.gnome.org/GAP/AtkGuide/Gtk">příručce k ATK v části o GTK</ulink>, ve <ulink url="http://library.gnome.org/devel/gtk-tutorial/stable/">výuce GTK+ 2.0</ulink> na webu GNOME a v oficiálních <ulink url="http://library.gnome.org/devel/gtk-faq/stable/">častých dotazech a odpovědích GTK+</ulink>.</para>
</section>
<section id="dev-start">
<title>Rychlý úvod pro vývojáře</title>
<para>Zde je pár věcí pro začátek:</para>
<section id="dev-start-1">
<title>Jak si mohu ověřit, jestli je má aplikace přístupní či nikoliv?</title>
<para>Abyste správně začali, podívejte se nejdříve na <link linkend="gad-overview">Jak udělat aplikace v GNOME přístupné – přehled</link>. Než začnete psát kód, získejte přehled v <link linkend="gad-ui-guidelines">Pokyny k uživatelskému rozhraní ohledně podpory zpřístupnění</link> nebo v <link linkend="gad-coding-guidelines">Příručce k programování s podporou zpřístupnění</link>. Kontrolní seznam pro testování, až skončíte s psaním kódu, najdete v <link linkend="gad-checklist">Kontrolní seznam pro uživatelské rozhraní</link>.</para>
</section>
<section id="dev-start-2">
<title>Jaké jsou nejběžněnší nástrahy?</title>
<para><link linkend="gad-checklist">Kontrolní seznam pro uživatelské rozhraní</link> pokrývá všechny oblasti, které jsou občas přehlédnuty ve stádiu návrhu.</para>
</section>
<section id="dev-start-3">
<title>Jak můžu udělat běžné věci v ATK?</title>
<para>Stručný seznam běžných volání ATK najdete <link linkend="gad-api">zde</link>.</para>
</section>
<section id="dev-start-4">
<title>Jak můžu udělat složitější věci v ATK?</title>
<para>Další informace viz <link linkend="gad-custom">Zpřístupnění vlastních komponent</link> a <link linkend="gad-api-examples">Příklady, které používají API zpřístupnění</link>.</para>
</section>
<section id="dev-start-5">
<title>Úvod do ATK, AT-SPI, GAIL a GTK+</title>
<screenshot>
<mediaobject><imageobject> <imagedata fileref="figures/gaa.jpg"/> </imageobject> <textobject> <phrase>Architektura zpřístupnění v GNOME</phrase> </textobject></mediaobject>
</screenshot>
<para>ATK je sada nástrojů, které používá GNOME k zajištění přístupnosti pro uživatele, kteří potřebují speciální podporu, aby mohli používat svůj počítač. ATK je používáno nástroji, jako je čtečka obrazovky, lupa obrazovky a vstupní zařízení, zajišťujícími plnohodnotnou práci v pracovním prostředí alternativními způsoby. Další informace viz <ulink url="http://java-gnome.sourceforge.net/4.0/doc/api/org/gnome/atk/package-summary.html">projekt ATK na SourceForge</ulink> a <ulink url="http://library.gnome.org/devel/atk/stable/">knihovna ATK</ulink>.</para>
<para>AT-SPI je hlavní rozhraní služby, přes kterou se asistenční technologie dotazují a přijímají upozornění od běžících aplikací. Kompletní API si můžete projít <ulink url="http://library.gnome.org/devel/at-spi-cspi/stable/">zde</ulink>. Doplňující materiály jsou dostupné od <ulink url="http://accessibility.kde.org/developer/atk.php#coreclasses">komunity KDE vyvíjející zpřístupnění</ulink>.</para>
<para>GAIL (GNOME Accessibility Implementation Library) je implementací rozhraní zpřístupnění definovaného v ATK. GTK je nástrojová sada, která je již namapovaná na ATK pomocí modulu GAIL. Licenci, věci ke stažení a další informace můžete najít <ulink url="http://www.t2-project.org/packages/gail.html">zde</ulink>. Jako vynikající zdroj informací pro pokročilé využití ATK slouží i <ulink url="ftp://ftp.gnome.org/pub/GNOME/sources/gail/">zdrojový kód GAIL</ulink>. Ještě by vás mohla zajímat <ulink url="http://library.gnome.org/devel/gail-libgail-util/stable/">referenční příručka GAIL</ulink>.</para>
<para>GTK+ je knihovna pro vytváření grafického uživatelského rozhraní. Funguje na řadě platforem unixového typu, ve Windows a na zařízeních používajících framebuffer. GTK+ je vydána pod licencí GNU Library General Public License (GNU LGPL), která umožňuje flexibilní licencování pro klientské aplikace. GTK+ má objektově orientovanou architekturu napsanou v jazyce C, která umožňuje maximální pružnost. Je napsáno napojení na další jazyky, včetně C++, Objective-C, Guille/Scheme, Perl, Python, TOM, Ada95, Free Pascal a Eiffel.</para>
<para>Další informace o GTK/GTK+ jdoucí více do hloubky najdete v <ulink url="http://library.gnome.org/devel/gtk">Referenční příručce GTK+</ulink>, v <ulink url="http://wiki.gnome.org/Accessibility/Documentation/GNOME2/AtkGuide/Gtk">části o GTK v příručce ATK</ulink>, ve <ulink url="http://library.gnome.org/devel/gtk-tutorial/stable/">výuce GTK+ 2.0</ulink> hostované na GNOME a v oficiálních <ulink url="http://library.gnome.org/devel/gtk-faq/stable/">častých dotazech a odpovědích o GTK+</ulink>.</para>
</section>
</section>
<section id="gad-overview">
<title>Jak udělat aplikace v GNOME přístupné – přehled</title>
<para>Pokud vaše aplikace používá jen standardní widgety GTK, budete pravděpodobně muset udělat jen minimum věcí, nebo vůbec nic, aby vaše aplikace měla (rozumnou) přístupnost. Dejte ale pozor na objekty ve svém GUI, které nemají přiřazen textový popis, jako jsou grafická tlačítka nebo indikátory stavu, které nemají popisky nebo vysvětlivky.</para>
<para>Nejspíše také budete muset zdokonalit výchozí popis poskytovaný pro některé widgety a přizpůsobit je na míru konkrétnímu účelu widgetu ve vaší aplikaci. U těchto widgetů byste měli přidat nebo změnit textový popis pomocí příslušných funkcí ATK, aby asistenční technologie mohly popsat jejich účel nebo stav uživateli. Více informací viz <link linkend="gad-coding-guidelines">Příručka k programování s podporou zpřístupnění</link>.</para>
<para>Pokud vaše aplikace používá vlastní vidgety, můžete mít nějako práci s předáváním vlastností těchto widgetů asistenčním technologiím. Více informací viz <link linkend="gad-custom">Zpřístupnění vlastních komponent</link> a <link linkend="gad-api-examples">Příklady, které používají API zpřístupnění</link>. Další zajímavé věci se můžete dozvědět z prezentace, kterou měl Marc Mulcahy na konfefrenci GUADEC pod názvem <ulink url="https://projects.gnome.org/accessibility/talks/GUAD3C/making-apps-accessible/start.html">„Making GNOME Applications Accessible“</ulink> (Zpřístupnění aplikací GNOME).</para>
</section>
<section id="gad-coding-guidelines">
<title>Příručka k programování s podporou zpřístupnění</title>
<para>Zde je několik věcí, které můžete udělat ve svém kódu, abyste zajistili, že váš program bude pracovat co nejlépe s asistenčními technologiemi. (V části <link linkend="gad-ui-guidelines">Pokyny k uživatelskému rozhraní ohledně podpory zpřístupnění</link> v této příručce můžete najít seznam věcí, které byste měli vzít do úvahy, když navrhujete GUI.):</para>
<itemizedlist>
<listitem>
<para>U komponent, které nezobrazují krátký název (jako jsou grafická tlačítka), určete název pomocí <function>atk_object_set_name()</function>. Budete to chtít u čistě obrázkových tlačítek, u panelů, které poskytují logické seskupení, u textových oblastí a pod.</para>
</listitem>
<listitem>
<para>Pokud nemůžete ke komponentě poskytnout vysvětlivku, použijte místo toho <function>atk_object_set_description()</function>, která poskytne popis, který mohou asistenční technologie předat uživateli. Například poskytnutí zpřístupňujícího popisu pro tlačítko <guibutton>Zavřít</guibutton> by vypadalo takto:</para>
<example>
<title>Poskytnutí zpřístupňujícího popisu pro GtkButton</title>
<programlisting>
{
AtkObject *obj;
obj = gtk_widget_get_accessible(button);
atk_object_set_description(obj,_("Closes the window"));
}
</programlisting>
</example>
</listitem>
<listitem>
<para>Použijte <function>atk_image_set_description()</function> k poskytnutí textového popisu ke všem obrázkům a ikonám ve svém programu.</para>
</listitem>
<listitem>
<para>Pokud několik komponent tvoří logickou skupinu, zkuste je vložit do jednoho kontejneru.</para>
</listitem>
<listitem>
<para>Kdykoliv máte popisek, který popisuje jinou komponentu, použijte <function>atk_relation_set_add_relation()</function>, aby asistenční technologie dokázala najít komponentu, se kterou je popisek svázán. (Když přidružíte popisek s komponentou pomocí <function>gtk_label_set_mnemonic_widget()</function>, je vztah <constant>ATK_RELATION_LABEL_FOR</constant> vygenerován automaticky, takže následující kód nebude nutný):</para>
<example>
<title>Vytvoření vztahu mezi GtkLabel a 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>Když vytvoříte vlastní widget, zajistěte, aby podporoval zpřístupnění. Vlastní komponenty, které jsou potomky jiných widgetů GTK, by měly přepsat zděděnou podporu zpřístupnění podle potřeby. Více informací viz <link linkend="gad-custom">zpřístupnění vlastních komponent</link>.</para>
</listitem>
<listitem>
<para>Neničte věci, které dostanete zdarma! Když bude mít vaše GUI nezpřístupněný kontejner, kterákoliv komponenta uvnitř tohoto kontejneru se může stát nepřístupnou.</para>
</listitem>
</itemizedlist>
</section>
<section id="gad-api">
<title>API zpřístupnění</title>
<para>Zde je pár základních volání API, která můžete potřebovat pro použití ve své aplikaci, když chcete zajistit, že bude pracovat s asistenčními technologiemi. Celé API zpřístupnění je rozšiřitelné, abyste mohli například psát své vlastní widgety pro podporu zpřístupnění.</para>
<table frame="all">
<title>Běžně používaná volání API ATK</title>
<tgroup cols="2" align="left">
<thead>
<row>
<entry>API</entry>
<entry>Popis</entry>
</row>
</thead>
<tbody>
<row>
<entry>
<para><function>AtkObject* gtk_widget_get_accessible (GtkWidget*)</function></para>
</entry>
<entry>
<para>Vrací objekt zpřístupnění, který popisuje zadaný Widget GTK pro asistenční technologii.</para>
</entry>
</row>
<row>
<entry>
<para><function>void atk_object_set_name (AtkObject*, const gchar*)</function></para>
</entry>
<entry>
<para>Nastavuje název pro zpřístupněný objekt. Například, pokud je objektem grafické tlačítko, které při zmáčknutí ukončí aplikaci, může být název „Quit“.</para>
</entry>
</row>
<row>
<entry>
<para><function>void atk_object_set_description (AtkObject*, const gchar*)</function></para>
</entry>
<entry>
<para>Nastaví textový popis zpřístupněného objektu. Například, když je objektem grafické tlačítko „Zavřít“, může být popis „Closes the window“.</para>
</entry>
</row>
<row>
<entry>
<para><function>AtkRelation* atk_relation_new (AtkObject**, gint, AtkRelationType)</function></para>
</entry>
<entry>
<para>Vytvoří nový vztah mezi zadaným klíčem a zadaným seznamem cílových objektů. Vztah normálně říká asistenční technologii, že některý widget nějak souvisí s jiným. Například, že konkrétní widget GtkLabel je nadpisem widgetu GtkTreeView v tom samém okně.</para>
</entry>
</row>
<row>
<entry>
<para><function>void atk_image_set_description (AtkImage*, const gchar*)</function></para>
</entry>
<entry>
<para>Nastaví textový popis zpřístupněného obrázkového objektu. Například, když je objektem náhled viruální plochy v apletu na panel, může být popis „Image showing window arrangement on desktop 1“.</para>
</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section id="gad-api-examples">
<title>Příklady, které používají API zpřístupnění</title>
<para>Jak bylo uvedeno již dříve, měli byste mít jen málo práce, nebo vůbec žádnou, s tím, abyste měli svoji aplikaci zpřístupněnou, když budete používat sadu widgetů GTK nebo jinou knihovnu widgetů, které implementují rozhraní ATK. Dvě hlavní obvyklé věci, kterým byste měli věnovat v takovém případě věnovat pozornost, jsou:</para>
<itemizedlist>
<listitem>
<para>Poskytnout popisy některým ovládacím prvkům a obrázkům pomocí <function>atk_object_set_description()</function> nebo <function>atk_image_set_description():</function></para>
<example>
<title>Nastavení popisu zpřístupnění pro tlačítko</title>
<programlisting>
{
AtkObject *obj;
obj = gtk_widget_get_accessible(button);
atk_object_set_description(obj,_("Opens Preferences dialog"));
}
</programlisting>
</example>
<para>
</para>
</listitem>
<listitem>
<para>Určit vztahy mezi některými neobvyklými seskupeními widgetů pomocí <function>atk_relation_new()</function> a <function>atk_relation_set_add()</function>:</para>
<example>
<title>Definice zpřístupňujícího vztahu mezi dvěma ovládacími prvky</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>Příklady ve zbytku této části se většinou věnují nuancím v celém ATK. Pokrývá techniky, které možná nebudete nikdy potřebovat jako vývojář aplikací, ale mohou vás zajímat při psaní vlastních widgetů (viz <link linkend="gad-custom">Zpřístupnění vlastních komponent</link>) nebo když chcete napsat aplikaci pro asistenční technologii. Ať už bude účel jakýkoliv, je vynikajícím zdrojem informací pro pokročilé využití ATK přímo <ulink url="ftp://ftp.gnome.org/pub/GNOME/sources/gail/">zdrojový kód GAIL</ulink>. Upozorňujeme, že od GTK 3.1.10 byla knihovna Gail začleněna přímo do GTK+, a není již samostatným modulem.</para>
<section>
<title>Moduly Gtk</title>
<para>Programy, které používají GAIL (knihovnu implementující zpřístupnění pro widgety GTK), jsou napsány jako moduly GTK. Modul GTK se nahraje do programového prostoru, když proměnná prostředí <varname>GTK_MODULES</varname> uvádí název příslušné knihovny modulu. Pokud máte více knihoven modulů, oddělte je dvojtečkou. Například:</para>
<para><userinput>setenv GTK_MODULES "libgail:libtestprops"</userinput></para>
<para>Všechny moduly GTK mají funkci <function>gtk_module_init()</function>.</para>
</section>
<section>
<title>Sbírání informací o zpřístupnění z aplikace</title>
<para>Program, který si přeje používat volání ATK, bude pravděpodobně muset udělat jednu (nebo více) z následujících věcí:</para>
<orderedlist>
<listitem>
<para>Vytvořit sledování události, například pomocí funkce <function>atk_add_focus_tracker()</function>:</para>
<programlisting>atk_add_focus_tracker (_my_focus_tracker);</programlisting>
<para>kde <function>_my_focus_tracker()</function> je funkce s tímto prototypem:</para>
<programlisting>void _my_focus_tracker (AtkObject *aobject);</programlisting>
</listitem>
<listitem>
<para>Vytvořit globální naslouchání události pomocí 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>kde <function>_my_global_listener</function> má prototyp z <function>_my_global_listener</function> v Glib. Tento příklad způsobí, že funkce <function>_my_global_listener()</function> bude volána, kdykoliv se vyskytne signál enter_notify_even na objektu <type>GtkWidget</type>.</para>
</listitem>
<listitem>
<para>K objektu ATK nejvyšší úrovně získáte přístup zavoláním následující funkce.</para>
<programlisting>AtkObject *root_obj = atk_get_root();</programlisting>
<para>Vrací <type>AtkObject</type>, který obsahuje všechna okna nejvyšší úrovně v aktuálně běžícím programu. Uživatel pak může procházet hierarchií objektů pomocí přístupu k potomkům kořenového objektu, které odpovídají oknům nejvyšší úrovně.</para>
</listitem>
</orderedlist>
</section>
<section>
<title>Dotazování se rozhraní objektu <type>AtkObject</type></title>
<para>Když máte vyhledán <type>AtkObject</type> patřící k objektu v aplikaci (např. pomocí <function>gtk_widget_get_accessible()</function>), můžete různými způsoby zjistit, která rozhraní má implementována:</para>
<orderedlist>
<listitem>
<para>Použijte podporovaná makra <function>ATK_IS_…</function>, například:</para>
<itemizedlist>
<listitem>
<para><function>ATK_IS_ACTION(atkobj)</function></para>
</listitem>
<listitem>
<para><function>ATK_IS_COMPONENT(atkobj)</function></para>
</listitem>
<listitem>
<para>atd. (pro každé rozhraní je jedno)</para>
</listitem>
</itemizedlist>
<para>Pokud makro vrací <function>TRUE</function>, volání rozhraní může být na objektu ATK bezpečně provedeno.</para>
</listitem>
<listitem>
<para>Otestujte roli <type>AtkObject</type> zavoláním <function>atk_object_get_role()</function>. Kterákoliv daná role implementuje určitý počet API pro ATK.</para>
</listitem>
</orderedlist>
</section>
<section>
<title>Nastavení zpracování signálu ATK</title>
<para>Kupříkladu použití signálu <constant>column_inserted</constant>:</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>Tento kód způsobí, že funkce <function>_my_table_column_inserted_func()</function> bude volána pokaždé, když je na objektu <type>AtkObject</type> <varname>my_atk_object</varname> vyslán signál column_inserted.</para>
<para>Připojení signálu se lehce liší, když signál podporuje detaily. Signál <constant>children_changed</constant> podporuje detail <parameter>add</parameter>. Pro připojení k signálu, když je určen i detail <parameter>add</parameter>, se používá tato technika:</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>Tento kód způsobí, že funkce <function>_my_children_changed_func()</function> bude volána pokaždé, když je na objektu <type>AtkObject</type> <varname>my_atk_obj</varname> vyslán signál <constant>children_changed</constant> s detailem <parameter>add</parameter>.</para>
</section>
<section>
<title>Implementace objektu ATK</title>
<para>Budete muset implementovat vlastní objetky ATK pro widgety, které zatím nemají implementaci zpřístupnění v GAIL (nebo jiné obdobné knihovně pro jinou sadu widgetů). Měly by být implementovány jako modul GTK, který by, stejně jako před tím, měl být zahrnut v proměnné prostředí <envar>GTK_MODULES</envar>, aby se načetl za běhu.</para>
<section>
<title>Registr</title>
<para>V tomto příkladu budeme předpokládat, že máme objekt s názvem GTK_TYPE_MYTYPE. Implementace ATK bude volat <type>MYATKIMP_TYPE_MYTYPE</type>. Bude zapotřebí generátor s názvem <type>MYATKIMP_TYPE_MYTYPE_FACTORY</type>.</para>
<para>Abyste zaregistrovali implementaci ATK objektu GTK, musí ve funkci <function>gtk_module_init()</function> modulu následovat tyto kroky:</para>
<orderedlist>
<listitem>
<para>Získejte přístup k výchozímu registru:</para>
<programlisting>
default_registry = atk_get_default_registry();
</programlisting>
</listitem>
<listitem><para>Zaregistrujte objekt ATK ve funkci <function>gtk_module_init()</function> tohoto modulu pomocí zavolání této funkce:</para>
<programlisting>
atk_registry_set_factory_type (default_registry, GTK_TYPE_MYTYPE,
MYATKIMP_TYPE_MYTYPE_FACTORY);
</programlisting>
</listitem>
</orderedlist>
<para>Tím se zaregistruje implementace AtkObject pro <type>GTK_TYPE_MYTYPE</type> do <type>MYATKIMP_TYPE_MYTYPE_FACTORY</type>. Tento generátor bude implementován, takže bude známo, jak sestavit objekty typu <type>MYATKIMP_TYPE_MYTYPE</type>.</para>
</section>
<section>
<title>Generátor</title>
<para>Generátor (factory) musí být implementován jako dceřiná třída typu <type>ATK_TYPE_OBJECT_FACTORY</type> a musí implementovat funkci <function>create_accessible()</function>. Tato funkce musí vytvořit příslušný <type>AtkObject</type>. Generátor lze použít k vytvoření více než jednoho typu objektu, přičemž jeho funkce <function>create_accessible()</function> musí být dostatečně chytrá, aby sestavila a vrátila správný <type>AtkObject</type>.</para>
</section>
<section>
<title>Implementace ATK pro zadaný objekt</title>
<para>Všechny <type>GObject</type> implementují funkci <function>get_type()</function>. Když vezmeme předchozí příklad, podle konvence pojmenování by název funkce byl <function>myatkimp_mytype_get_type()</function>.</para>
<para>V této funkci určujete, která rozhraní bude váš objekt implementovat. Když by se použila logika, která byla použita v této funkci <function>get_type()</function>, implementoval by objekt rozhraní <type>ATK_TEXT</type>:</para>
<example>
<title>Vzorová funkce <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,
&atk_text_info);
</programlisting>
</example>
<para>Měla by být implementována funkce <function>atk_text_interface_init()</function>, která má následující prototyp:</para>
<programlisting>
void atk_text_interface_init (AtkTextIface *iface);
</programlisting>
<para>Tato funkce by napojila volání funkce rozhraní na konkrétní implementaci následovně:</para>
<example>
<title>Napojení volání vlastního rozhraní na implementaci AtkObject</title>
<programlisting>
void
atk_text_interface_init (AtkTextIface *iface)
{
g_return_if_fail (iface != NULL);
iface->get_text = myatkimp_mytype_get_text;
iface->get_character_at_offset = myatkimp_mytype_get_character_at_offset;
...
}
</programlisting>
</example>
<para>Potom by bylo potřeba implementovat funkce <function>myatkimp_mytype_get_text()</function>, <function>myatkimp_mytype_get_character_at_offset()</function> a zbytek funkcí rozhraní <type>ATK_TEXT</type>.</para>
</section>
<section>
<title>Implementace <type>AtkObject</type></title>
<para>Objekty <type>AtkObject</type> jsou potomci <type>GObjects</type> a všechny objekty <type>GObjects</type> potřebují specifikovat funkci <function>get_type()</function>. Zde je příklad, který nastavuje třídu a instanci inicializátoru. Tato funkce <function>get_type()</function> rovněž definuje, že objektu implementuje <type>ATK_TEXT</type>, a definuje, že rodičovský objekt bude <type>MYATKIMP_MYPARENTTYPE</type>.</para>
<example>
<title>Ukázková implementace <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, /* base init */
(GBaseFinalizeFunc) NULL, /* base finalize */
(GClassInitFunc) myatkimp_mytype_class_init, /* class init */
(GClassFinalizeFunc) NULL, /* class finalize */
NULL, /* class data */
sizeof (GailLabel), /* instance size */
0, /* nb preallocs */
(GInstanceInitFunc) myatkimp_mytype_instance_init, /* instance init */
NULL /* value table */
};
/* Set up atk_text_info structure used below */
static const GInterfaceInfo atk_text_info =
{
(GInterfaceInitFunc) atk_text_interface_init,
(GInterfaceFinalizeFunc) NULL,
NULL
};
/* Set up typename and specify parent type */
type = g_type_register_static (MYATKIMP_MYPARENTTYPE,
"MyatkimpMytype", &tinfo, 0);
/* This class implements interface ATK_TYPE_TEXT */
g_type_add_interface_static (type, ATK_TYPE_TEXT,
&atk_text_info);
}
return type;
}
</programlisting>
</example>
</section>
<section>
<title>Inicializace třídy/instance</title>
<para>Budete muset vytvořit inicializátor třídy pro objekt <type>GObject</type>, pokud vaše implementace <type>AtkObject</type> buď:</para>
<orderedlist>
<listitem>
<para>Znovu definuje kterákoliv volání funkcí definovaná v rodiči objektu. To je typicky nutné, když některý objekt potřebuje implementovat funkci, jako je <function>atk_object_get_n_accessible_children()</function>. To je nutné, když má objekt potomka, ale ten není reprezentován widgetem.</para>
<para>Například, když implementace ATK protřebuje přepsat funkci <function>get_name()</function> v <type>AtkObject</type>, vypadala by inicializace třídy nějak takto:</para>
<example>
<title>Inicializace třídy, která přepisuje rodičovskou funkci <function>get_name()</function></title>
<programlisting>
myatkimp_mytype_class_init (GailLabelClass *klass)
{
AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
class->get_name = myatkimp_mytype_get_name;
}
</programlisting>
</example>
</listitem>
<listitem><para>Vyžaduje funkci <function>parent->init</function>, <function>parent->notify_gtk</function> nebo <function>parent->finalize</function>. Tento příklad definuje všechny tři:</para>
<example>
<title>Inicializátor třídy, který definuje své vlastní funkce <function>init()</function>, <function>notify_gtk()</function> a <function>finalize()</function></title>
<programlisting>
static ParentObjectType *parent_class = NULL;
myatkimp_mytype_class_init (GailLabelClass *klass)
{
ParentObjectType *parent_class = (ParentObjectType*)klass;
/*
* Caching the parent_class is necessary if the init,
* notify_gtk, or finalize functions are set up.
*/
parent_class = g_type_class_ref (MYATKIMP_TYPE_PARENT);
parent_class->init = myatkimp_mytype_widget_init;
parent_class->notify_gtk = myatkimp_mytype_real_notify_gtk;
parent_class->finalize = myatkimp_mytype_finalize;
}
</programlisting>
</example>
<orderedlist>
<listitem>
<para>parent->init</para>
<para>Funkce <function>parent->init()</function> může být nutná, když implementace ATK potřebuje udělat něco z následujícího:</para>
<orderedlist>
<listitem>
<para>Ukládat do mezipaměti data získaná z widgetu GTK v pozadí.</para>
</listitem>
<listitem>
<para>Naslouchat signálům z widgetu GTK v pozadí.</para>
</listitem>
</orderedlist>
<para>Zde je příklad obojího:</para>
<example>
<title>Vlastní funkce <function>init()</function></title>
<programlisting>
void
gail_tree_view_widget_init (MyatkimpMytype *mytype,
GtkWidget *gtk_widget)
{
/* Make sure to call the parent's init function */
parent_class->init (widget, gtk_widget);
/* Cache a value in the ATK implementation */
mytype->cached_value = gtk_widget_function_call();
/* Listen to a signal */
gtk_signal_connect (GTK_OBJECT (gtk_widget),
"signal-type",
GTK_SIGNAL_FUNC (_myatkimp_mytype_signal_type),
NULL);
}
</programlisting>
</example>
<para>Když by byl v tomto příkladu zadaný signál <type>signal-type</type> vygenerován z <varname>gtk_widget</varname> v pozadí, byla by pak zavolána funkce <function>_myatkimp_mytype_signal_type()</function>.</para>
</listitem>
<listitem>
<para>parent->notify_gtk</para>
<para>Když implementace ATK potřebuje naslouchat upozornění na nějakou vlastnost u objektu GTK v pozadí, může být nutná funkce <function>parent->notify_gtk()</function>. Například:</para>
<example>
<title>Vlastní funkce <function>notify_gtk()</function></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->name, "property-of-interest") == 0)
{
/* Handle the property change. */
}
else
{
parent_class->notify_gtk (obj, pspec);
}
}
</programlisting>
</example>
</listitem>
<listitem>
<para>parent->finalize</para>
<para>Když je potřeba uvolnit některá data při zničení instance <type>GObject</type>, pak je potřeba funkce <function>finalize()</function> k uvolnění paměti: Například:</para>
<example>
<title>Vlastní funkce <function>finalize()</function></title>
<programlisting>
void
myatkimp_mytype_finalize (GObject *object)
{
MyAtkimpMyType *my_type = MYATKIMP_MYTYPE (object);
g_object_unref (my_type->cached_value);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
</programlisting>
</example>
</listitem>
</orderedlist>
</listitem>
</orderedlist>
</section>
</section>
</section>
<section id="gad-custom">
<title>Jak zajistit zpřístupnění vlastních komponent</title>
<para>Přidání podpory ATK do vašeho vlastního widgetu zajistí jeho spolupráci s infrastrukturou zpřístupnění. Zde jsou obecné kroky, které jsou nutné:</para>
<itemizedlist>
<listitem>
<para>vyhodnotit vlastní widget podle pravidel v <link linkend="gad-ui-guidelines">Příručce k uživatelskému rozhraní</link></para>
</listitem>
<listitem>
<para>určit, která <ulink url="https://developer.gnome.org/atk/stable/interfaces.html">rozhraní ATK</ulink> by měl vlastní widget implementovat, s ohledem na množinu vlastnosí widgetu a funkci</para>
</listitem>
<listitem>
<para>vyhodnotit, která <ulink url="https://developer.gnome.org/atk/stable/interfaces.html">rozhraní ATK</ulink> mohou být zděděna z třídy rodičovského widgetu</para>
</listitem>
<listitem>
<para>implementovat příslušná rozhraní ATK pro třídu widgetu jedním ze dvou způsobů:</para>
<itemizedlist>
<listitem>
<para>přímo vlastním widgetem nebo</para>
</listitem>
<listitem>
<para>v podtypu <ulink url="http://library.gnome.org/devel/atk/stable/AtkObject.html"><type>AtkObject</type></ulink> vytvořeném novou podtřídou <ulink url="http://library.gnome.org/devel/atk/stable/AtkObjectFactory.html"><type>AtkObjectFactory</type></ulink></para>
</listitem>
</itemizedlist>
<para>Pokud je použita druhá metoda, musí být za běhu pomocí <type>AtkObjectFactoryRegistry</type> zaregistrován typ generátoru.</para>
</listitem>
</itemizedlist>
<para><ulink url="ftp://ftp.gnome.org/pub/GNOME/sources/gail/">Zdrojový kód GAIL</ulink> poskytuje skvělou výuku pro pokročilé používání ATK.</para>
</section>
<section id="gad-ui-guidelines">
<title>Pokyny k uživatelskému rozhraní ohledně podpory zpřístupnění</title>
<para>Když navrhujete uživatelské rozhraní své aplikace, je zde několik jednoduchých zásad, kterých byste se měli držet, abyste zajistili, že bude použitelné pro tak široký okruhem uživatelů, jak jen to je možné, ať už spolu s asistenčními technologiemi nebo bez nich. Nenechte se zmást pocitem, že to „děláte jen pro lidi se zdravotním postižením“, a protože víte, že takováto osoba nebude vaši aplikaci nikdy používat, nemusíte se tím zabývat. Následující zásady vylepší použitelnost vaší aplikace celkově pro všechny, kdo ji budou používat – včetně vás!</para>
<section>
<title>Obecné</title>
<para>Všichni býváme znechucení, když nemůžeme v aplikaci najít některou funkci nebo se spleteme, což nás stojí pár minut to napravit, pokud to napravit je možné. Pokud máte nějaký typ postižení, jsou šance na potřebu věnovat více úsilí a přijít o čas podstatně vyšší. Následujících několik základních obecných zásad pomůže předejít těmto situacím pro všechny uživatele.</para>
<itemizedlist>
<listitem>
<para>Poskytněte funkci „Zpět“ pro všechny činnosti, které mění uživatelova data nebo nastavení aplikace. Pokud je to možné, nabídněte více úrovní pro funkce zpět a znovu a seznam s historií, kde uživatel získá přehled, které činnosti se budou vracet zpět.</para>
</listitem>
<listitem>
<para>Poskytněte příkazy pro obnovení výchozích nastavení. Pokud některé konkrétní nastavení může způsobit úplnou nepoužitelnost aplikace pro uživatele, např. nastavení příliš malého písma, bylo by vhodnější poskytnout možnost obnovit výchozí nastavení někde mimo vlastní aplikaci. Například se to dá provést přepínačem příkazového řádku.</para>
</listitem>
<listitem>
<para>Pomozte uživatelům vyvarovat se nesprávných věcí. To je důležité zejména pro činnosti, které mohou být provedné nechtěně (např. myší) nebo je nelze snadno vrátit zpět (např. přepsaný soubor). Zvažte použití potvrzovacího dialogového okna nebo přinucení uživatele přepnout se do určitého režimu, když se chystá provést potenciálně destruktivní činnost.</para>
</listitem>
<listitem>
<para>Omezte zátěž uživatele na zapamatování si věcí. Například umožněte uživateli zobrazit si naráz více dokumentů a zajistěte, že nápověda nebo jiné informace mohou být vidět i během postupu, který popisují. Umožněte uživatelům kopírovat libovolné informace, které jsou zobrazené, a vložit je kamkoliv, kde lze zadávat data.</para>
</listitem>
<listitem>
<para>Nenuťte uživatele vkládat disky. V závislosti na uživatelově konkrétním postižení může pro něj být fyzicky obtížné vložit nebo vyměnit disk, nebo pro něj může být obtížné zjistit, o který disk se jedná. Pokud je vaše aplikace instalována z disku CD, nabídněte možnost zkopírovat všechny soubory, které budou zapotřebí, na uživatelův pevný disk.</para>
</listitem>
<listitem>
<para>Neumisťujte často používané funkce hluboko do struktury nabídky. Ať už používáte myš, klávesnici nebo jiné vstupní zařízení, je lepší se hluboce vnořeným položkám v nabídkách vyhnout. Mimo to, že je obtížne si zapamatovat, kde je najdete, je vždy také časově náročné se k nim dostat.</para>
</listitem>
<listitem>
<para>Neveďte uživatele kroky, které nejsou nutné. Například, průvodci jsou užiteční pro uživatele, kteří mají problém pracovat s velkým množstvím různých voleb naráz, ale jiní uživatelé třeba potřebují ušetřit čas nebo počet zmáčknutí kláves. Tito uživatelé těží výhodu z možnosti přeskočit nepotřebné kroky nebo z možnosti přejít přímo na ten, který potřebují. Zvažte v průvodci nabídnutí tlačítka <guibutton>Dokončit</guibutton>, které přeskočí zbývající kroky do konce a bude pro ně předpokládat výchozí odpovědi. Pokud má proces mnoho kroků, zvažte, zda se na začátku uživatele nezeptat, jestli chce projít všemi kroky nebo jen těmi nejběžnějšími.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Ovládání klávesnicí</title>
<para>Dobře navržené klávesnicové uživatelské rozhraní hraje klíčovou roli, když navrhujete přístupný software. Slepí uživatelé dokáží software lépe obsluhovat pomocí klávesnice, protože ovládání myší závisí na vizuální zpětné vazbě vůči poloze ukazatele myši. Také pohybová postižení mohou uživateli bránit v úspěšné obsluze myší, protože to vyžaduje schopnost jemného motorického ovládání.</para>
<para>Proto je důležité umožnit všechny činnosti prováděné myší provést i pomocí klávesnice, včetně přístupu z klávesnice ke všem nástrojovým lištám, nabídkám, odkazům a tlačítkům. Každá funkce, kterou vaše aplikace nabízí, by měla být dostupná čistě pomocí klávesnice. Pokud musíte, skryjte si během testování své aplikace myš!</para>
<para>Většina funkcionality by měla být snadno přístupná pomocí horkých kláves a klávesových zkratek a pomocí funkcí ovládání zabudovaných v nástrojové sadě, na které je aplikace vyvíjena. Nicméně nad některými operacemi, jako „táhni a upusť“, se budete muset zamyslet hlouběji.</para>
<itemizedlist>
<listitem>
<para>Poskytněte účinný přístup z klávesnice ke všem funkcím aplikace. Někteří uživatelé nemusí být schopní používat myš a řada pokročilých uživatelů dává tak jako tak přednost klávesnici. Také některá specializovaná zařízení asistenčních technologií mohou simulovat spíše události od klávesnice než od myši. Protože pro některé uživatele je psaní náročně nebo až bolestivé, je důležité nabídnout uživatelské rozhraní, které minimalizuje počet zmáčknutí kláves pro libovolný účel.</para>
</listitem>
<listitem>
<para>Použijte logické pořadí pro obsluhu klávesnicí. Když se pohybujete po okně pomocí klávesy <keycap>Tab</keycap>, měly by se ovládací prvky zaměřovat v předvídatelném pořadí. V národních prostředích západní civilizace to normálně je zleva doprava a shora dolů.</para>
</listitem>
<listitem>
<para>Zajistěte správné pořadí pro ovládání klávesou Tabulátor u ovládacích prvků, které se aktivují zaškrtávacím políčkem, skupinovým přepínačem nebo přepínacím tlačítkem. Když je se takovýmto prvkem provede aktivace, všechny závislé ovládací prvky se aktivují naopak ovládací prvky závislé na ostatních přepínacích prvcích ve skupině se deaktivují. Když uživatel vybere zaškrtávací políčko, skupinový přepínač nebo přepínací tlačítko, které mají závislé ovládací prvky, nepřesouvejte automaticky zaměření na první závislý ovládací prvek, ale ponechte zaměřený ten, který uživatel vybral.</para>
</listitem>
<listitem>
<para>Nepřepisujte funkce zpřístupnění již existující na úrovní systému. Například <ulink url="http://www.rehab.uiuc.edu/accessx/overview.html">AccessX</ulink> je rozšíření pro Xserver, které je podporováno od X11R6. Funkce MouseKeys (myš z klávesnice) v tomto rozšíření umožňuje pohyb myši a kliknutí jejích tlačítek simulovat pomocí číselné klávesnice. Proto byste neměli přidávat do své aplikace funkce, které jsou přístupné jen zmáčknutím kláves na číselné klávesnici, protože uživatelé spoléhající na funkci MouseKeys je nebudou moci použít.</para>
</listitem>
<listitem>
<para>Pokud je to možné, nabídněte pro klávesnicové činnosti více variant. Pro některé uživatele mohou být některé klávesy a kombinace kláves snadnější na použití než jiné.</para>
</listitem>
<listitem>
<para>Pokud je to možné, poskytněte přístup k funkcím jak z klávesnice, tak myší. Někteří uživatelé mohou být schopní používat buď jen myš nebo jen klávesnici, ale ne obojí.</para>
</listitem>
<listitem>
<para>Nepřiřazujte nepříjemně dosažitelné kombinace často prováděným činnostem na klávesnici. Někteří lidé mohou být schopní používat na klávesnici jen jednu ruku, takže je pro běžné operace třeba dávat přednost klávesovým zkratkám, které se dají snadno provést jednou rukou. Nehledě na to, že mít pro často prováděné činnosti na klávesnici klávesy daleko od sebe nebo špatně dosažitelné, zvyšuje napětí svalů u všech uživatelů a tím i riziko bolesti a zdravotních komplikací.</para>
</listitem>
<listitem>
<para>Nepožadujte opakované použití současného zmáčknutí více kláves. Někteří uživatelé jsou schopní v jednu chvíli zmáčknout a držet jen jednu klávesu. Asistenční technologie, jako je AccessX, mohou uživateli umožnit zmáčknout klávesy po sobě, místo naráz, to ale samozřejmě znamená, že operace zabere více času.</para>
</listitem>
<listitem>
<para>Ujistěte se, že kterýkoliv text, který lze vybrat pomocí myši, je možné vybrat i pomocí klávesnice. To je výhodné pro všechny uživatele, ale zvláště pro ty, kterým činí obtíže přesné ovládání myši.</para>
</listitem>
<listitem>
<para>Ujistěte se, že objekty, u kterých lze měnit velikost nebo je přesouvat, to lze provést i pomocí klávesnice. Například ikony a okna na pracovní ploše. Tam kde je potenciálně důležitá přesná změna velikosti nebo umístění, např. útvary v diagramu, zvažte také poskytnutí dialogového okna, ve kterém půjdou zadat souřadnice a rozměry číselně, nebo promyslete přichytávání objektů k uživatelem definované mřížce.</para>
</listitem>
<listitem>
<para>Nepoužívejte obecné ovládací funkce ke spouštění činnosti. Například, nesnažte se použít ovládání klávesou <keycap>Tab</keycap> v dialogovém okně k aktivaci nějaké činnosti související s ovládacím prvkem.</para>
</listitem>
<listitem>
<para>Zobrazujte klávesnicí vyvolané nabídky, okna a vysvětlivky blízko objektu, ke kterému se vztahují. V GNOME 2 mohou uživatelé vyvolat vyskakovací nabídky pomocí <keycombo><keycap>Shift</keycap><keycap>F10</keycap></keycombo> a vysvětlivky pomocí <keycombo><keycap>Shift</keycap><keycap>F1</keycap></keycombo>. Pozor však, ať objekt, na který se nabídky nebo vysvětlivka odkazují, zcela nebo i jen částečně nezakryjete.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Spolupráce s myší</title>
<para>Pamatujte, že ne každý může používat myš se stejnou obratností a že někteří uživatelé mohou mít problém sledovat ukazatel myši.</para>
<itemizedlist>
<listitem>
<para>Nevytvářejte závislost na vstupu z tlačítek 2 a 3 u myši. Jednak bývá fyzicky náročnější je zmáčknout a jednak některá ukazovací zařízení a řada zařízení pro asistenční technologie podporuje jen tlačítko 1. Některé asistenční technologie nemusí emulovat myš vůbec, ale generují místo ní události od klávesnice.</para>
</listitem>
<listitem>
<para>Poskytněte možnost všechny operace s myší přerušit. Zmáčknutí klávesy <keycap>Esc</keycap> by mělo přerušit kteroukoliv operaci myší, která probíhá, jako třeba přetahování souboru ve správci souborů nebo přetahování útvaru v kreslícím programu.</para>
</listitem>
<listitem>
<para>Během operace táhni a upusť poskytněte zpětnou vizuální odezvu. Když myš dosáhne použitelného cíle, zvýrazněte jej a změňte ukazatel myši. Použijte ukazatel myši „nelze upustit“, když se přejíždí přes nepoužitelný cíl. Viz <link linkend="gad-mouse-examples">Příklady spolupráce s myší</link>.</para>
</listitem>
<listitem>
<para>Nezakrývejte ukazatel myši nebo neomezujte pohyb myši jen na část obrazovky. Může se to křížit s asistenčními technologiemi a obvykle to mate i uživatele, kteří na nich nejsou závislí.</para>
</listitem>
<listitem>
<para>Nevytvářejte příliš malé cíle pro myš. Obecně by cíle myši měly mít přinejmenším velikost „horké oblasti“ okolo okraje okna pro změnu velikosti v aktuálním okenním správci/motivu – s ohledem na to, že uživatel s poruchou zraku nebo pohyblivosti může používat okenního správce s širší oblastí, než je výchozí.</para>
</listitem>
</itemizedlist>
<section id="gad-mouse-examples">
<title>Příklady spolupráce s myší</title>
<figure>
<title>Příklad ukazatele „nelze upustit“ z CDE/Motif</title>
<mediaobject><imageobject><imagedata fileref="figures/nodrop.png" format="PNG"/></imageobject> <textobject><phrase>Příklad podoby ukazatele „nelze upustit“</phrase></textobject></mediaobject>
</figure>
</section>
</section>
<section>
<title>Grafické prvky</title>
<para>Poskytněte volbu k přizpůsobení prezentace všech podstatných grafických prvků ve své aplikaci. Díky tomu bude její používání snadnější pro lidí, kteří mají zrakové nebo pohybové postižení.</para>
<itemizedlist>
<listitem>
<para>Nevkládejte do kódu napevno vlastnosti grafiky, jako je tloušťka čar, okraje nebo stíny. Tyto prvky by ideálně měly být načítány z motivu GTK nebo z okenního správce. Pokud to není možné, nabídněte volbu změny přímo ve své aplikaci.</para>
</listitem>
<listitem>
<para>Poskytněte popisné názvy pro všechny prvky rozhraní. Knihovna GAIL poskytuje výchozí zpřístupňující popisy pro řadu widgetů GTK, ale i tak budete potřebovat v některých případech přidat své vlastní, třeba pro widgety, které používají grafiku místo textu (např. v barevné paletě nebo v ikoně bez popisku). Jestli je to možné, zvažte přepsání výchozího popisu nějakým názornějším nebo popisem specifickým pro aplikaci.</para>
</listitem>
<listitem>
<para>Pokud je to možné, umožněte vícebarevné grafické prvky (např. ikony na nástrojové liště) zobrazit jen monochromaticky. Tyto monochromatické obrázky by měly být zobrazeny v barvách popředí a pozadí, které si uživatel sám zvolí v nastavení systému (výběrem motivu GTK), aby dosáhl pro něj nejlepší čitelnosti.</para>
</listitem>
<listitem>
<para>Zajistěte, aby interaktivní prvky grafického rozhraní byly snadno rozpoznatelné. Například, nenuťte uživatele najíždět myší na objekt, aby zjistil, jestli se na něj dá kliknout či nikoliv. Ponechávejte mezi objekty dostatek místa a jasně vymezte jejich hranice. Nezobrazujte prvky grafického rozhraní, které sice vypadají hezky, ale ve skutečnosti nic nedělají, a když už ano, nabídněte volbu je vypnout.</para>
</listitem>
<listitem>
<para>Poskytněte volbu ke skrytí grafiky, která nevyjadřuje žádné podstatné informace. Grafické obrázky mohou být rušivé pro uživatele s některými poruchami rozpoznávání. Například lze vypnout ikony v nabídkách GNOME a funkčnost nabídek přitom zůstane zachována.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Písma a text</title>
<para>Dokonce i pro uživatele s normálním zrakem poskytují textové výstupy většinu informací a zpětné odezvy ve většině aplikací. Je proto rozhodující správně zvolit a umístit text na obrazovce a ponechat volbu písma a jeho velikosti na uživateli, aby se i uživatelům se zrakovým postižením poskytla možnost aplikaci plně používat.</para>
<itemizedlist>
<listitem>
<para>Neurčujte napevno styl a velikost písma. Uživatel by měl mít možnost přizpůsobit si u všech textů velikost a typ písma. Pokud z nějakého důvodu tuto funkčnost nemůžete nabídnout, nikdy napevno nezadávejte menší velikost než 10 bodů.</para>
</listitem>
<listitem>
<para>Poskytněte volbu vypnout grafické doplňky a „vodoznaky“ za textem. Takové obrázky narušují kontrast mezi textem a pozadím, což může způsobit obtíže pro uživatele se zrakovým postižením.</para>
</listitem>
<listitem>
<para>Popisky objektů mají mít názvy, které mají smysl, i když jsou vytržené z kontextu. Uživatelé spoléhající na čtečku obrazovky nebo podobné asistenční technologie nemusí být ihned schopni pochopit vztah mezi ovládacím prvkem a věcmi, které jej obklopují.</para>
</listitem>
<listitem>
<para>Nepoužívejte stejný popisek v jednom okně vícekrát. Když použijete stejný popisek v různých oknech, pomůže, když bude mít v obou dvou stejný význam. Rovněž nepoužívejte v jednom okně popisky, které se sice jinak píší, ale stejně znějí. Např. v angličtině „read“ a „red“ nebo v češtině „správa“ a „zpráva“, protože to může být matoucí pro uživatele spoléhající na čtečku obrazovky.</para>
</listitem>
<listitem>
<para>Umisťujte popisky v celé aplikaci stejným způsobem. Normálně to bývá přímo pod velkými ikonami, napravo hned vedle malých ikon a přímo nad nebo nalevo od ovládacích prvků. Viz <link linkend="gad-font-examples">Příklady písem a textů</link>.</para>
</listitem>
<listitem>
<para>Když použijete v popisku pro ovládací prvek statický text, zakončete jej dvojtečkou. Například <guilabel>Uživatelské jméno:</guilabel> v popisku pro textové pole, do kterého má uživatel napsat své uživatelské jméno. Pomůže to rozpoznat, že popisek není samostatný, ale patří k ovládacímu prvku.</para>
</listitem>
<listitem>
<para>Když používáte statický text jako popisek pro ovládací prvek, nastavte popisek tak, aby bezprostředně předcházel ovládacímu prvku v pořadí ovládání klávesou Tab. To zajistí, že horká (mneomotechnická) klávesa, kterou v popisku pomocí podtržítka nadefinujete, způsobí při zmáčknutí zaměření nebo aktivaci správného ovládacího prvku.</para>
</listitem>
<listitem>
<para>Poskytujte alternativu k WYSIWYG (přesnému grafickému zobrazení výsledné podoby). Například někteří uživatelé mohou potřebovat tisknout text malým písmem, ale upravovat jej s velkým písmem. Možné alternativy zahrnují zobrazení veškerého textu stejným písmem ve stejné velikosti (obojí podle výběru uživatele), volbu „zalamování do okna“, která umožní uživatelům číst všechen text bez nutnosti vodorovného posouvání, jednosloupcové zobrazení, které zobrazuje obsah okna v jediném sloupci, i když vytisknut bude ve více sloupcích, a čistě textové zobrazení, kdy je grafika nahrazena zástupnými objekty nebo popisným textem. Pokud má aplikace panely s podřízenými ovládacími prvky, zvažte umožnit roztáhnout je přes celé rodičovské okno.</para>
</listitem>
</itemizedlist>
<section id="gad-font-examples">
<title>Příklady s písmy a texty</title>
<figure id="label-placement-example">
<title>Správné umístění popisků pro různé prvky GUI</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>List control with label above</phrase>
</textobject>
</mediaobject> Ovládací prvek seznam s popiskem nad sebou</entry>
<entry valign="middle"><mediaobject>
<imageobject>
<imagedata fileref="figures/label_below.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Large file manager icon with label underneath</phrase>
</textobject>
</mediaobject> Velká ikona správce souborů s ikonou pod sebou</entry>
<entry valign="middle"><mediaobject>
<imageobject>
<imagedata fileref="figures/label_right.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Small toolbar icon with label to its right</phrase>
</textobject>
</mediaobject> Malá ikona nástrojové lišty s popiskem po své pravé straně</entry>
<entry valign="middle"><mediaobject>
<imageobject>
<imagedata fileref="figures/label_left.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Spinbox control with label to its left</phrase>
</textobject>
</mediaobject> Ovládací prvek číselník s popiskem po své levé straně</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</figure>
</section>
</section>
<section>
<title>Barvy a kontrast</title>
<para>Špatný výběr barev pro zobrazení může způsobit problémy lidem s barvoslepostí (pro ně je důležitý odstín barvy) nebo slabozrakostí (pro ně je důležitý jas/kontrast). Obecně byste měli umožnit uživatelům přizpůsobit si barvy kterékoliv části aplikace, která poskytuje podstatné informace.</para>
<para>Uživatelé se zrakovým postižením mohou požadovat vysoký kontrast mezi pozadím a barvou textu. Často je používáno černé pozadí a bílý text, aby se předešlo přepalování. Tato nastavení jsou rozhodující pro uživatele se zrakovým postižením.</para>
<itemizedlist>
<listitem>
<para>Nezadávejte do aplikace napevno barvy. Někteří uživatelé potřebují používat určité kombinace barev a úrovně kontrastu, aby dokázali pohodlně číst obrazovku. Z toho důvodu by měly být hlavní barvy požívané ve vaší aplikaci pro GNOME přebírány z motivu GTK, takže si uživatelé mohou nastavit barvy pro všechny své aplikace na něco čitelnějšího pouhou změnou motivu. Pokud z nějakého důvodu potřebujete použít barvu, která není dostupná v motivu, zajistěte, aby byla nastavitelná v rámci aplikace.</para>
</listitem>
<listitem>
<para>Nepoužívajte barvu jako jediné znázornění významu položky. Všechny informace by měly být poskytovány nejméně jedním dalším způsobem, třeba tvarem, polohou nebo textovým popisem. Viz <link linkend="gad-color-examples">Příklady s barvami a kontrastem</link>.</para>
</listitem>
<listitem>
<para>Podporujte všechny motivy GNOME s vysokým kontrastem. Ujistěte se, že když jeden z těchto motivů vyberete, bude všechen text ve vaší aplikaci ve vysokém kontrastu mezi barvou popředí a pozadí daného motivu.</para>
</listitem>
<listitem>
<para>Zajistěte, aby vaše aplikace nebyla závislá na konkrétním motivu s vysokým kontrastem. Otestujte ji s různými motivy s vysokým kontrastem, abyste měli jistotu, že aplikace respektuje nastavení.</para>
</listitem>
</itemizedlist>
<section id="gad-color-examples">
<title>Příklady s barvami a kontrastem</title>
<example>
<title>Příklad ukazující zdvojené použití barvy</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>Příklad ukazuje změny v cenách akcií jen pomocí barvy</phrase> </textobject></mediaobject>
</entry>
<entry>Takovéto zobrazení může způsobit problémy barvoslepým uživatelům, kteří nerozeznají červenou od zelené (barvoslepost postihuje v některých zemích až 1 ze 7 mužů). Nedostatečný kontrast mezi červeným textem a černým pozadím by rovněž mohl ztížit čtení některým slabozrakým uživatelům, i když použijí lupu obrazovky.</entry>
</row>
<row>
<entry valign="middle">
<mediaobject><imageobject> <imagedata fileref="figures/color_and_arrows.png" format="PNG"/> </imageobject> <textobject> <phrase>Příklad ukazuje změny v cenách akcií současně pomocí barvy a šipek</phrase> </textobject></mediaobject>
</entry>
<entry>Takovéto zobrazení vylepšuje barevné rozlišení ještě šipkami, které naznačují směr pohybu ceny akcií, a používá tmavší odstíny zelené a červené na světlejším pozadí, aby se zajistil větší kontrast. Nemusí jít o výchozí barevné schéma, pokud by testování ukázalo, že na většinu uživatelů působí příliš rušivě, ale mělo by být možné si jej přizpůsobit, buď pomocí motivů nebo v dialogovém okně <guilabel>Předvolby</guilabel> v dané aplikaci.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</example>
</section>
</section>
<section>
<title>Lupa</title>
<para>Z výhod zvětšení textu a grafiky může těžit spousta uživatelů, i když nemají zrakové postižení. Ale bez možnosti zvětšení nebudou uživatelé se zrakovým postižením moci program vůbec používat.</para>
<itemizedlist>
<listitem>
<para>Poskytněte uživateli možnost přiblížit si pracovní oblast.</para>
</listitem>
<listitem>
<para>Poskytněte v aplikaci volbu přiblížení/oddálení pracovní oblasti. Uživatelé potřebují v nabídce přiblížení pracovní oblasti 150 % až 400 % nebo více. Otestujte aplikaci, abyste ověřili, že zobrazené objekty nebudou změnou přiblížení nějak postiženy.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Zvuk</title>
<para>Lidé, kteří mají problém se sluchem, stejně jako lidé, kteří pracují na počítači s vypnutým zvukem, budou znevýhodněni, když vaše aplikace bude spoléhat na zvuk, jako jediný prostředek sdělení informace. Obecně, zajistěte, aby uživatelé mohli získat zvukové informace i jiným vhodným způsobem.</para>
<itemizedlist>
<listitem>
<para>Nepředpokládejte, že uživatel uslyší zvukové informace. Nemusí jít jen o zvukové postižení uživatele, stačí, když bude mít vadnou zvukovou kartu.</para>
</listitem>
<listitem>
<para>Nepoužívejte zvuk jako jediný prostředek sdělení informace. Dejte uživateli možnost volby mít všechny zvukové informace i ve vizuální podobě. Zahrnuje to poskytování titulků nebo přepisů pro všechny důležité mluvené zvukové klipy.</para>
</listitem>
<listitem>
<para>Umožněte uživatelům nastavit si frekvenci a hlasitost všech varovných pípnutí a dalších zvuků. Včetně možnosti vypnout naráz všechny zvuky.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Animace</title>
<para>Když se animace používají přiměřeně, mohou být užitečné pro zdůraznění důležitých informací ve vaší aplikaci – a navíc mohou vypadat dobře. Mohou ale působit potíže některým uživatelům, takže zajistěte, aby šly vypnout.</para>
<itemizedlist>
<listitem>
<para>Nepoužívejte blikání prvků s frekvencí větší net 2 Hz a nižší než 55 Hz. To platí jak pro text, tak pro grafické objekty. Cokoliv v tomto rozsahu frekvencí může způsobit problémy uživatelům s vjemově vyvolávanými záchvaty. Poznamenejme ale, že neexistuje žádná „bezpečná“ frekvence. U blikání je podstatné, že byste měli použít frekvenci blikání systémového kurzoru (kterou si uživatel může přizpůsobit), nebo umožnit uživateli si ji upravit v aplikaci.</para>
</listitem>
<listitem>
<para>Neblikejte velkými plochami obrazovky. U menší oblasti je méně pravděpodobné že spustí záchvat u lidí, kteří jsou na záchvaty náchylní.</para>
</listitem>
<listitem>
<para>Všechny animace ponechte volitelné. Všechny informace podávané animací by měly být na uživatelův požadavek dostupné nejméně jedním jiným způsobem.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Zaměření klávesnicí</title>
<para>Jasné označení místa zaměřeného klávesnicí je vždy důležité, jak pro uživatele se zrakovým postižením, tak pro „pokročilé“ uživatele, kteří dávají přednost ovládání z klávesnice před myší. Nikdy by neměli být zmateni tím, který ovládací prvek na pracovní ploše je zrovna zaměřený. Neměli byste mít problém opustit počítače s ponecháním zaměření na některém widgetu v aplikaci, jít někam pryč, zatelefonovat přítelkyni, vyvenčit psa a při tom všem zapomenout, který prvek byl zaměřen a až se vrátíte, měli byste okamžitě dokázat poznat, který widget to je.</para>
<para>Indikátor vizuálního zaměření je zvukovou podobou pozice kurzoru relativně vůči ostatním objektům v pracovním prostředí. Díky tomu se uživatel může pohybovat interaktivně okolo objektů tak, jak se mění zaměření. Vizuální zaměření musí být programově oznamováno asistenčním technologiím. Poznamenejme ale, že ve většině případů se tak děje automaticky pomocí ATK, aniž byste pro to museli něco udělat. Musíte ale tomuto požadavku například věnovat pozornost, když píšete svůj vlastní widget.</para>
<itemizedlist>
<listitem>
<para>Začněte se zaměřením nejčastěji používaného ovládacího prvku. Pokud nelze o žádném ovládacím prvku v okně říct, že by byl „nejčastěji“ používaný, začněte po otevření okna se zaměřením na prvním ovládacím prvku. Zaměření by nemělo začínat na tlačítkách <guilabel>Budiž</guilabel> nebo <guilabel>Zrušit</guilabel> v dialogovém okně, i když jsou nejčastěji používané, protože je lze vždy aktivovat bezprostředně zmáčknutím <keycap>Enter</keycap> nebo <keycap>Esc</keycap>.</para>
</listitem>
<listitem>
<para>Vždy jasně zobrazujte aktuální zaměření vstupu. Pamatujte, že v ovládacích prvcích, které obsahují posuvníky, nemusí stačit zvýraznit jen pravě vybraný prvek uvnitř posouvané oblasti, protože nemusí být zrovna vidět. Viz <link linkend="gad-focus-examples">Příklady zaměření klávesnicí</link>.</para>
</listitem>
<listitem>
<para>Zobrazujte zaměření vstupu jen v aktivním okně. Všechny primární vizuální ukazatele zaměření v oknech, které nemají zaměření a nejsou aktivní, skryjte. Když má jedno okno oddělené panely, jen jeden z nich by měl mít indikátor zaměření a v ostatních panelech by měly být skryty. Pokud je důležité zobrazovat, která položka je v nezaměřených seznamem vybrána, použijte například druhotný indikátor zaměření. Viz <link linkend="gad-focus-examples">Příklady zaměření klávesnicí</link>.</para>
</listitem>
<listitem>
<para>Poskytněte uživateli vhodnou zpětnou vazbu, když se pokusí dostat za konec skupiny souvisejících objektů. Například při cyklickém pohybu v seznamu je při přesunu zaměření zpět na první objekt v seznamu často používána zpětná vazba v podobě zastavení se zvukovým upozorněním. V opačném případě by slepí nebo slabozrací uživatelé netušili, že se vrátili na začátek. V případě vyhledávání textu v dokumentu můžete zobrazit dialogové okno, které upozorní na dosažení konce dokumentu a dotáže se, jestli chce uživatel pokračovat s hledáním od začátku dokumentu.</para>
</listitem>
<listitem>
<para>Když uživatel zmáčkne nevhodnou klávesu nebo když navigační klávesa selže v provedení pohybu na zaměřeném prvku, přehrajte výchozí systémový zvukový nebo vizuální signál pro varování. Například, když je zaměřen první znak v textovém poli a uživatel zmáčkne kurzorovou šipku doleva nebo když se uživatel pokusí vybrat více v souborů v dialogovém okně pro výběr jednoho souboru. (Poznamenejme, že uživatel se sluchovým postižením by měl mít možnost si v systému nastavit vizuální náhradu výchozího zvukového varování.)</para>
</listitem>
</itemizedlist>
<section id="gad-focus-examples">
<title>Příklady zaměření klávesnice</title>
<example><title>Příklady ukazují nutnost jasného zobrazení zaměření</title>
<informaltable frame="all">
<tgroup cols="2">
<tbody>
<row>
<entry valign="middle">
<mediaobject><imageobject><imagedata fileref="figures/badfocus1.png" format="PNG"/></imageobject> <textobject><phrase>Zaměřenou položku v tomto okně nemůžete vidět, protože je posunutá mimo obrazovku</phrase> </textobject></mediaobject>
</entry>
<entry>Jeden ovládací prvek v tomto okně má zaměření, ale není možné říci který…</entry>
</row>
<row>
<entry valign="middle">
<mediaobject><imageobject><imagedata fileref="figures/badfocus2.png" format="PNG"/></imageobject> <textobject><phrase>Zaměřená položka se posuvem dostala do viditelné části</phrase></textobject></mediaobject>
</entry>
<entry>…dokud se seznam neposune, čímž se právě vybraná položka odhalí.</entry>
</row>
<row>
<entry valign="middle">
<mediaobject><imageobject><imagedata fileref="figures/goodfocus.png" format="PNG"/></imageobject> <textobject><phrase>Ovládací prvek seznam v tomto příkladu má plné ohraničení, který signalizuje zaměření, ať už je vybraná položka vidět nebo ne</phrase></textobject></mediaobject>
</entry>
<entry>Když má přímo ovládací prvek se seznamem ohraničení „zaměřeno“, lze jednoduše říci, že je zaměřený, i když právě vybraná položka není vidět.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</example>
<example>
<title>Ilustrační příklad používající druhotné zaměření</title>
<informaltable frame="all">
<tgroup cols="2">
<tbody>
<row>
<entry valign="middle">
<mediaobject><imageobject><imagedata fileref="figures/badfocus3.png" format="PNG"/></imageobject> <textobject><phrase>Okno rozdělené na panely, kdy oba panely vypadají, že mají zaměření</phrase></textobject></mediaobject>
</entry>
<entry>V tomto příkladu není možné říci jen po pouhém pohledu, který ze dvou panelů má právě zaměření klávesnice.</entry>
</row>
<row>
<entry valign="middle">
<mediaobject><imageobject><imagedata fileref="figures/goodfocus3.png" format="PNG"/></imageobject> <textobject><phrase>Okno rozdělené na panely, kdy druhotné zvýraznění je použito k zobrazení, který panel má zaměření</phrase></textobject></mediaobject>
</entry>
<entry>Díky použití druhotného barevného zvýraznění výběru v neaktivním panelu, je ihned jasné, že zde má zaměření ovládací prvek se stromem…</entry>
</row>
<row>
<entry valign="middle">
<mediaobject><imageobject><imagedata fileref="figures/goodfocus2.png" format="PNG"/></imageobject> <textobject><phrase>Okno rozdělené na panely, kdy druhotné zvýraznění je použito k zobrazení, který panel má zaměření</phrase></textobject></mediaobject>
</entry>
<entry>… a zde má zaměření ovládací prvek se seznamem.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</example>
</section>
</section>
<section>
<title>Načasování</title>
<para>Uživatelská rozhraní, ve kterých se věci objevují, mizí nebo se dějí podle časových omezení napevno daných v kódu, jsou často překážkou v přístupnosti. Někteří uživatelé mohou číst, psát a reagovat jen velmi pomalu v porovnání s ostatními lidmi. Když se jim nějaká informace skryje dřív, než jsou s ní hotovi, nebo ji překryje jiná informace, kterou si výslovně nevyžádali, stává se pro ně použití aplikace velmi frustrující, ne-li nemožné.</para>
<itemizedlist>
<listitem>
<para>Nezadávejte časová omezení a jiné na čase závislé funkce napevno do kódu. Příklady budiž automatický posuv při tažení objektu k okraji okna, držení tlačítka posuvníku nebo automatické rozbalení uzlu ve stromu, když je přes něj tažen objekt a chvilku podržen na místě. Mělo by to být přizpůsobitelné buď přímo v aplikaci nebo v ovládacím centru GNOME nebo, jako nejhorší varianta, aspoň ručně z příkazového řádku záznamem v souboru s nastavením nebo v GConf.</para>
</listitem>
<listitem>
<para>Nezobrazujte a neskrývejte informace jen na okamžik v závislosti na pohybu ukazatelem myši. (Výjimka: funkce poskytované systémem, jako jsou vysvětlivky, které si může uživatel na úrovni systému nastavit). Pokud takové funkce musíte poskytovat, nabídněte k nim volbu je vypnout, když je nainstalován nástroj pro zkoumání obrazovky.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Dokumentace</title>
<para>Lidé s postižením nemohou používat aplikaci plně, když nemají přístup k potřebným příručkám a nápovědě. Podstatnou věcí je ovládání z klávesnice, protože pro řadu uživatelů to může být jediný způsob ovládání aplikace.</para>
<itemizedlist>
<listitem>
<para>Poskytněte veškerou dokumentaci v přístupném formátu. ASCII a HTML jsou skvělé formáty pro asistenční technologie.</para>
</listitem>
<listitem>
<para>Ke všem grafickým prvkům v dokumentaci poskytněte alternativní textový popis.</para>
</listitem>
<listitem>
<para>Zdokumentujte všechny funkce zpřístupnění ve své aplikaci. Ovládání klávesnicí a klávesové zkratky jsou zvláště důležitou věcí ke zdokumentování. Zahrňte do své dokumentace kapitolu o zpřístupnění, ve které bude možné najít všechny informace o funkcích zpřístupnění.</para>
</listitem>
</itemizedlist>
</section>
</section>
</chapter>
<chapter id="gtest" status="draft">
<title>Testování</title>
<para>Je několik věcí, které by měly být prověřeny, než je možné aplikaci prohlásit za přístupnou. V průběhu vývoje možná budete uvažovat o automatických testovacích technikách. Váš plán automatizovaných testů by mohlo doplnit například <ulink url="http://ldtp.freedesktop.org/">LDTP</ulink>.</para>
<para>Tato část popisuje řadu testů, které můžete u aplikace provést ručně, abyste odzkoušeli její zpřístupnění. To, že všechny testy projdou, ještě nutně neznamená, že aplikace je plně zpřístupněná, ale pokud naopak v některém z testů selže, bude potřeba další práce, aby se zdokonalila z hlediska zpřístupnění.</para>
<section>
<title>Ovládání klávesnicí</title>
<para>Otestovány by měly být následující operace z klávesnice. V žádné části z těchto testů nepoužívejte myš.</para>
<itemizedlist>
<listitem>
<para>Jen pomocí klávesnice projděte zaměřením všechny položky v nabídkové liště aplikace.</para>
</listitem>
<listitem>
<para>Ujistěte se, že:</para>
<itemizedlist>
<listitem>
<para>Kontextově citlivé nabídky se zobrazují správně.</para>
</listitem>
<listitem>
<para>Libovolné funkce uvedené na nástrojové liště lze provést i pomocí klávesnice.</para>
</listitem>
<listitem>
<para>Můžete použít všechny ovládací prvky v klientské části aplikace a v dialogových oknech.</para>
</listitem>
<listitem>
<para>Text a objekty v klientské oblasti je možné vybrat.</para>
</listitem>
<listitem>
<para>Vylepšené ovládání klávesnicí nebo klávesové zkratky fungují, jak mají.</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</section>
<section>
<title>Grafické prvky</title>
<para>Otestujte aplikaci pomocí čtečky obrazovky a ujistěte se, že:</para>
<itemizedlist>
<listitem>
<para>Popisky a text jsou správně čteny, včetně nabídek a nástrojových lišt.</para>
</listitem>
<listitem>
<para>Informace o objektu jsou správně čteny.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Vizuální indikátor zaměření</title>
<itemizedlist>
<listitem>
<para>Ověřte, že když se posouváte podél objektů, které mají indikátor vizuálního zaměření, je snadné je rozpoznat.</para>
</listitem>
<listitem>
<para>Při ovládání softwaru a nabídek klávesnicí by měl být jasně viditelné, kam se přesouvá zaměření.</para>
</listitem>
<listitem>
<para>Ověřte, že čtečka obrazovky sleduje indikátor vizuální zaměření tak, jak se pohybujete pomocí klávesnice.</para>
</listitem>
<listitem>
<para>Spusťte lupu obrazovky (pokud je k dispozici) a ověřte, že lupa sleduje indikátor vizuálního zaměření tak, jak se pohybujete pomocí klávesnice.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Písma a text</title>
<itemizedlist>
<listitem>
<para>Změňte v aplikaci písmo a ověřte si, že nastavení je použitelné.</para>
</listitem>
<listitem>
<para>Otestujte aplikaci změnou barev a ověřte si, že nastavení je použitelné.</para>
</listitem>
<listitem>
<para>Když je k dispozici zvětšení, otestujte s ním písmo, barvu a velikost.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Barvy a kontrast</title>
<itemizedlist>
<listitem>
<para>Vytiskněte snímek obrazovky na černobílou tiskárnu a ověřte si, že všechny informace jsou viditelné.</para>
</listitem>
<listitem>
<para>Otestujte aplikaci jen v černobílém nastavení s vysokým kontrastem a ověřte, že všechny informace jsou podávány správně.</para>
</listitem>
<listitem>
<para>Otestujte, že aplikace poskytuje nejméně tři kombinace barevných schémat, a že je k dispozici i schéma s vysokým kontrastem (např. bílá na černé nebo žlutá na modré).</para>
</listitem>
<listitem>
<para>Zapněte v ovládacím centru GNOME vysoký kontrast a ověřte, že aplikace toto nastavení respektuje.</para>
</listitem>
<listitem>
<para>Otestujte různé motivy, abyste se ujistili, že software funguje pro všechna dostupná nastavení.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Zvuk</title>
<para>V aplikaci by měla být možnost zobrazit všechna zvuková upozornění vizuálně.</para>
<para>Povolením zvuku v ovládacím centru GNOME otestujte, že zvuk funguje správně a proveďte následující činnosti:</para>
<itemizedlist>
<listitem>
<para>Proveďte činnosti, které by měly vyvolat zvukové upozornění a ověřte, že aplikace pracuje, jak byla navržena.</para>
</listitem>
<listitem>
<para>Ověřte, že aplikace funguje správně, když zvýšíte nebo snížíte hlasitost.</para>
</listitem>
<listitem>
<para>Ověřte, že varovné zprávy a upozornění budou dobře slyšet i v hlučném pracovním prostředí.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Animace</title>
<para>Ověřte, že je k dispozici volba k zastavení animace, a že funguje, jak má.</para>
<para>Vypněte animace. Ověřte, že všechny informace jsou stále podávány správně.</para>
</section>
<section>
<title>Zaměření klávesnicí</title>
<itemizedlist>
<listitem>
<para>Otestujte všechny zprávy, abyste si ověřili, že uživatel je upozorněn dříve, než zpráva zmizí, a že má možnost dát najevo, že potřebuje více času.</para>
</listitem>
<listitem>
<para>Ujistěte se, že je k dispozici volba pro přizpůsobení času na reagování a ověřte, že funguje, jak má.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Dokumentace</title>
<para>Otestujte dokumentaci v čistě textové podobě spolu se čtečkou obrazovky a ověřte, že je asistenční technologií čtena jasně a přesně.</para>
<para>Otestujte dokumentaci v HTML pomocí webového prohlížeče a čtečky obrazovky, abyste se ujistili, že k dokumentaci mají přístup asistenční technologie.</para>
<para>Poznámka: Příručka k zpřístupnění webů je dostupná na <ulink url="http://www.w3.org/TR/WAI-WEBCONTENT/">http://www.w3.org/TR/WAI-WEBCONTENT/</ulink>.</para>
<para>Zkontrolujte, že jsou součástí dokumentace následující informace:</para>
<itemizedlist>
<listitem>
<para>Upozornění, když aplikace nepodporuje některý ze standardních přístupů z klávesnice používaných operačním systémem.</para>
</listitem>
<listitem>
<para>Vypíchnutí jedinečných klávesnicových příkazů.</para>
</listitem>
<listitem>
<para>Vypíchnutí jedinečných funkcí zpřístupnění.</para>
</listitem>
<listitem>
<para>Pokud je nějaká činnost zdokumentovaná pro myš, informaci o alternativě pro použití klávesnice.</para>
</listitem>
</itemizedlist>
</section>
<section id="gad-checklist">
<title>Kontrolní seznam pro uživatelské rozhraní</title>
<para>Tato část shrnuje pokyny dané v kapitole <link linkend="gad-ui-guidelines">Pokyny k uživatelskému rozhraní ohledně podpory zpřístupnění</link>. Když budete chtít podrobnější informace k některé z položek kontrolního seznamu, měli byste se podívat právě do této kapitoly.</para>
<para>Když aplikaci testujete ohledně zpřístupnění, měli byste projít všechny položky v tomto seznamu. U každé si poznačte, zda test prošel nebo selhal, případně u aplikace nemá význam.</para>
<table frame="all" pgwide="1">
<title>Kontrolní seznam pro obecné principy</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>OP</entry>
<entry>Obecné principy</entry>
<entry>Prošlo/Selhalo/Nepoužíváno</entry>
</row>
</thead>
<tbody>
<row>
<entry>OP.1</entry>
<entry>Každá činnost, která mění uživatelská data nebo nastavení aplikace by měla jít vrátit zpět.</entry>
</row>
<row>
<entry>OP.2</entry>
<entry>Všechna nastavení aplikace by mělo být možné obnovit na výchozí hodnoty, aniž by si uživatel musel pamatovat, jaké byly.</entry>
</row>
<row>
<entry>OP.3</entry>
<entry>Po nainstalování by aplikace měla jít používat, aniž by uživatel musel někdy vkládat disk nebo CD.</entry>
</row>
<row><entry>OP.4</entry>
<entry>Nejčastěji používané funkce by se měly nacházet v horní úrovni struktury nabídek.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Kontrolní seznam pro ovládání z klávesnice</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>OK</entry>
<entry>Ovládání klávesnicí</entry>
<entry>Prošlo/Selhalo/Nepoužíváno</entry>
</row>
</thead>
<tbody>
<row>
<entry>OK.1</entry>
<entry>Použitelný přístup z klávesnice musí být poskytnut pro všechny funkce aplikace.</entry>
</row>
<row>
<entry>OK.2</entry>
<entry>Všechna okna musí mít logické pořadí pro ovládní z klávesnice.</entry>
</row>
<row><entry>OK.3</entry>
<entry>Ovládací prvky, které jsou přístupné v závislosti na zaškrtávacím políčku, skupinovém přepínači nebo přepínacím tlačítku, mají správné pořadí pro klávesu <keycap>Tab</keycap>.</entry>
</row>
<row><entry>OK.4</entry>
<entry>Přístup z klávesnice k funkcím týkajícím se aplikace nepřepisuje stávající systém funkcí zpřístupnění.</entry>
</row>
<row><entry>OK.5</entry>
<entry>Pokud je to možné, poskytuje aplikace více než jednu metodu k provedení úloh z klávesnice.</entry>
</row>
<row><entry>OK.6</entry>
<entry>Kdykoliv je to možné, je k dispozici alternativní kombinace kláves.</entry>
</row>
<row><entry>OK.7</entry>
<entry>Pro často prováděné operace z klávesnice se nepoužívají žádné špatně dosažitelné klávesy.</entry>
</row>
<row><entry>OK.8</entry>
<entry>Aplikace nepoužívá opakující se souběžná zmáčknutí kláves.</entry>
</row>
<row><entry>OK.9</entry>
<entry>Aplikace poskytuje pro všechny funkce myši odpovídající ovládání klávesnicí.</entry>
</row>
<row><entry>OK.10</entry>
<entry>Libovolný text nebo objekt, který je možné vybrat myší, musí jít vybrat i čistě pomocí klávesnice.</entry>
</row>
<row><entry>OK.11</entry>
<entry>Libovolný objekt, u kterého je možné měnit velikost pomocí myši nebo jej myší přesouvat, mustí být možná změna velikosti a přesun i čistě pomocí klávesnice.</entry>
</row>
<row><entry>OK.12</entry>
<entry>Aplikace nepoužívá žádné obecné ovládací funkce ke spouštění operací.</entry>
</row>
<row><entry>OK.13</entry>
<entry>Všechny nabídky, okna a vysvětlivky vyvolané klávesnicí se objeví poblíž objektu, ke kterému se vztahují.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Kontrolní seznam pro ovládání myší</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>SM</entry>
<entry>Spolupráce s myší</entry>
<entry>Prošlo/Selhalo/Nepoužíváno</entry>
</row>
</thead>
<tbody>
<row><entry>SM.1</entry>
<entry>Žádná operace nezávisí čistě na vstupu z <mousebutton>pravého</mousebutton> nebo <mousebutton>prostředního</mousebutton> tlačítka myši.</entry>
</row>
<row><entry>SM.2</entry>
<entry>Všechny operace s myší mohou být zrušeny dřív, než jsou dokončeny.</entry>
</row>
<row><entry>SM.3</entry>
<entry>Během operací táhni a upusť je poskytována zpětná vizuální vazba.</entry>
</row>
<row><entry>SM.4</entry>
<entry>Ukazatel myši nikdy nezajíždí pod ovládací prvky aplikace nebo není jeho pohyb aplikací omezen jen na část obrazovky.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Kontrolní seznam pro grafické prvky</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>GP</entry>
<entry>Grafické prvky</entry>
<entry>Prošlo/Selhalo/Nepoužíváno</entry>
</row>
</thead>
<tbody>
<row><entry>GP.1</entry>
<entry>Nejsou napevno zakódovány žádné grafické atributy, jako tloušťka čar, okraje nebo stíny.</entry>
</row>
<row><entry>GP.2</entry>
<entry>Všechny vícebarevné grafické prvky mohou být zobrazeny čistě monochromaticky, když je zapotřebí.</entry>
</row>
<row><entry>GP.3</entry>
<entry>Všechny interaktivní prvky uživatelského rozhraní musí být snadno rozlišitelné od statických prvků.</entry>
</row>
<row><entry>GP.4</entry>
<entry>Je k dispozici volba pro skrytí nedůležité grafiky.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Kontrolní seznam pro písma a texty</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>PT</entry>
<entry>Písma a text</entry>
<entry>Prošlo/Selhalo/Nepoužíváno</entry>
</row>
</thead>
<tbody>
<row><entry>PT.1</entry>
<entry>Žádný styl nebo velikost písma nejsou určeny natvrdo.</entry>
</row>
<row><entry>PT.2</entry>
<entry>Je poskytována volba vypnout grafické pozadí pod textem.</entry>
</row>
<row><entry>PT.3</entry>
<entry>Všechny popisky mají názvy, které dávají smysly, i když jsou vytržené z kontextu.</entry>
</row>
<row><entry>PT.4</entry>
<entry>Žádné názvy popisků nejsou v témže okně použity vícekrát.</entry>
</row>
<row><entry>PT.5</entry>
<entry>Umístění popisků je jednotné napříč celou aplikací.</entry>
</row>
<row><entry>PT.6</entry>
<entry>Všechny statické textové popisky, které identifikují ostatní ovládací prvky, jsou zakončené dvojtečkou (:).</entry>
</row>
<row><entry>PT.7</entry>
<entry>Všechny statické textové popisky, které identifikují ostatní ovládací prvky, se nachází před těmito ovládacími prvky v rámci pořadí přepínání tabulátorem.</entry>
</row>
<row><entry>PT.8</entry>
<entry>Je poskytnuta alternativa k WYSIWIG (přesnému grafickému zobrazení výsledné podoby). Například v podobě možnosti v textovém editoru určit jinou obrazovku nebo písmo tisku.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Kontrolní seznam pro barvy a kontrast</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>BC</entry>
<entry>Barvy a kontrast</entry>
<entry>Prošlo/Selhalo/Nepoužíváno</entry>
</row>
</thead>
<tbody>
<row><entry>BC.1</entry>
<entry>Žádné barvy nejsou v aplikaci určeny natvrdo, ale vychází buď z aktuálního motivu pracovního prostředí nebo se dají v aplikaci nastavit.</entry>
</row>
<row><entry>BC.2</entry>
<entry>Barva je použita jen jako vylepšení a ne jako hlavní způsob sdělení významu informace nebo činnosti.</entry>
</row>
<row>
<entry>BC.3</entry>
<entry>Aplikace podporuje všechny dostupné motivy s vysokým kontrastem a nastavení pro ně.</entry>
</row>
<row><entry>BC.4</entry>
<entry>Software není závislý na konkrétním motivu s vysokým kontrastem nebo jeho nastavení.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Kontrolní seznam pro zvětšování</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>ZL</entry>
<entry>Lupa</entry>
<entry>Prošlo/Selhalo/Nepoužíváno</entry>
</row>
</thead>
<tbody>
<row><entry>ZL.1</entry>
<entry>Aplikace poskytuje schopnost přiblížit pracovní oblast.</entry>
</row>
<row><entry>ZL.2</entry>
<entry>Aplikace nabízí volbu pro změnu měřítka pracovní oblasti.</entry>
</row>
<row><entry>ZL.3</entry>
<entry>Funkčnost aplikace není dotčena změnou zvětšení nebo nastavením přiblížení.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Kontrolní seznam pro zvuk</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>ZV</entry>
<entry>Zvuk</entry>
<entry>Prošlo/Selhalo/Nepoužíváno</entry>
</row>
</thead>
<tbody>
<row><entry>ZV.1</entry>
<entry>Zvuk není jediný způsob sdělení významu nějaké části informace.</entry>
</row>
<row><entry>ZV.2</entry>
<entry>Uživatel může nastavit frekvenci a hlasitost všech zvuků a varovných pípnutí.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Kontrolní seznam pro animace</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>AN</entry>
<entry>Animace</entry>
<entry>Prošlo/Selhalo/Nepoužíváno</entry>
</row>
</thead>
<tbody>
<row><entry>AN.1</entry>
<entry>Nepoužívají se blikající prvky s frekvencí větší než 2 Hz a menší než 55 Hz.</entry>
</row>
<row><entry>AN.2</entry>
<entry>Blikání je omezeno jen na malé části obrazovky.</entry>
</row>
<row><entry>AN.3</entry>
<entry>Pokud je použita animace, je k dispozici volba ji vypnout a to dříve, než se poprvé použije.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Kontrolní seznam pro zaměřování klávesnicí</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>ZK</entry>
<entry>Zaměření klávesnicí</entry>
<entry>Prošlo/Selhalo/Nepoužíváno</entry>
</row>
</thead>
<tbody>
<row><entry>ZK.1</entry>
<entry>Po otevření okna je zaměřen nejčastěji používaný ovládací prvek.</entry>
</row>
<row><entry>ZK.2</entry>
<entry>Aktuální pozice v zaměření vstupu je vždy jasně zobrazena.</entry>
</row>
<row><entry>ZK.3</entry>
<entry>Zaměření vstupu je zobrazené vždy jen v právě jednom okně.</entry>
</row>
<row><entry>ZK.4</entry>
<entry>Když se uživatel pokusí dostat za konec skupiny souvisejících objektů, dostane vhodnou zvukovou nebo vizuální zpětnou odezvu.</entry>
</row>
<row><entry>ZK.5</entry>
<entry>Když uživatel zmáčkne nesprávnou klávesu je přehráno výchozí zvukové a vizuální varování.</entry>
</row>
<row><entry>ZK.6</entry>
<entry>Existuje dostatek zvukových informací pro vizuální zaměření, aby uživatel mohl posoudit, co má dělat dál.</entry>
</row>
<row><entry>ZK.7</entry>
<entry>Když používáte asistenční technologie, jako je čtečka obrazovky nebo braillský řádek, aktuální program podává informaci o pozici a obsahu vizálního zaměření.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Kontrolní seznam pro načasování</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>NČ</entry>
<entry>Načasování</entry>
<entry>Prošlo/Selhalo/Nepoužíváno</entry>
</row>
</thead>
<tbody>
<row><entry>NČ.1</entry>
<entry>A aplikaci se nepoužívají žádné napevno zakódované časové limity a funkce závisející na čase.</entry>
</row>
<row><entry>NČ.2</entry>
<entry>Zobrazení nebo skrytí důležitých informací není spouštěno pouze pohybem ukazatele myši.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" pgwide="1">
<title>Kontrolní seznam pro dokumentaci</title>
<tgroup cols="3" align="left">
<thead>
<row>
<entry>DK</entry>
<entry>Dokumentace</entry>
<entry>Prošlo/Selhalo/Nepoužíváno</entry>
</row>
</thead>
<tbody>
<row><entry>DK.1</entry>
<entry>Veškerá dokumentace je v přístupném formátu, s alternativním textovým popisem pro všechny obrázky a schémata.</entry>
</row>
<row><entry>DK.2</entry>
<entry>Součástí dokumentace je kapitola popisující všechny funkce zpřístupnění v aplikaci.</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>GOK (GNOME Onscreen Keyboard)</title>
<note>
<para>Informace na této stránce jsou částečně neaktuální: <application><ulink url="http://wiki.gnome.org/Caribou">Caribou</ulink></application> v GNOME 3 v podstatě nahradil <application>gok</application> z GNOME 2.</para>
</note>
<para>Vaše aplikace by měla jít používat pomocí <application>gok</application>. Klávesové vstupy by měly být generovány zcela z <application>gok</application> a ne z klávesnice. Cílem by měla být práce s vaší aplikací a pracovním prostředím z obecného hlediska, ujistěte se, že z klávesnice na obrazovce je možné zadávat znaky.</para>
<para>Aplikace <application>gok</application> je šířena spolu s pracovním prostředím GNOME, takže v by něm měla být obsažena. Úplnou dokumentaci najdete na <ulink url="http://www.gok.ca">oficiálních webu gok</ulink>.</para>
<para>Následující kroky ověří správnost operací <application>gok</application> s vaší aplikací:</para>
<procedure>
<step>
<para>Přihlaste se do pracovního prostředí GNOME.</para>
</step>
<step>
<para>Spusťte <application>gok</application>.</para>
</step>
<step>
<para>Spusťte aplikaci.</para>
</step>
<step>
<para>Proveďte nějaký vstup do své aplikace pomocí ukazovacího zařízení (např. myší nebo zařízením pro sledování očí) a pomocí <application>gok</application>.</para>
</step>
<step>
<para>Pracujte pomocí funkce automatického doplňování a odhadu slov v <application>gok</application>.</para>
</step>
<step>
<para>Ověřte, že <application>gok</application> zapíná a vypíná tlačítka <guibutton>Nabídky</guibutton> a <guibutton>Nástrojové lišty</guibutton> podle druhu spuštěné aplikace. Například pro aplet „Vlastnosti písma“ budou tato tlačítka vypnutá, zatímco pro aplikaci <application>Gedit</application> budou zapnutá.</para>
</step>
<step>
<para>Ověřte, že klávesnice na obrazovce <application>gok</application> lze za pomocí tlačítka <guibutton>Compose</guibutton> použít k psaní libovolného textu pro vybranou aplikaci. Spusťte <application>Gedit</application>, klikněte do textové oblasti a pak klikněte na tlačítko <guibutton>Compose</guibutton> v <application>gok</application>. Na klávesnici na obrazovce vyberte požadovanou klávesu. V textové oblasti aplikace <application>Gedit</application> by se měl objevit kýžený znak.</para>
</step>
<step>
<para>Ověřte, že <guibutton>spouštěcí</guibutton> tlačítko umožňuje spustit některou z aplikací <application>terminál</application>, <application>webový prohlížeč</application> nebo <application>textový editor</application>.</para>
</step>
<step>
<para>Ověřte, že tlačítko <guibutton>Aktivovat</guibutton> umožňuje uživateli aktivovat libovolné okno právě běžících aplikací v uživatelově pracovním prostředí, včetně panelů GNOME a plochy GNOME.</para>
</step>
<step>
<para>Ověřte, že tlačítko <guibutton>Nabídky</guibutton> ukáže všechny dostupné nabídky v právě běžící aplikaci. Ověřte, že kliknutí na tlačítko nabídky zobrazí podnabídku a položky v podnabídce. Nakonec ověřte, že kliknutím na položku nabídky se aktivuje položka nabídky. Například klikněte na aplikaci <application>Prohlížeč nápovědy</application> a pak klikněte na tlačítko <guibutton>Nabídky</guibutton>. Okno <application>GOK</application> nyní zobrazuje tlačítka <guibutton>Soubor</guibutton>, <guibutton>Přejít</guibutton> a <guibutton>Nápověda</guibutton> (nabídky aplikace <application>Prohlížeč nápovědy</application>). Klikněte na tlačítko <guibutton>Soubor</guibutton> a měla by se zobrazit tlačítka (položky nabídky) <guibutton>Nové okno</guibutton> a <guibutton>Zavřít okno</guibutton>.</para>
</step>
<step>
<para>Ověřte, že tlačítko <guibutton>Nástrojové lišty</guibutton> ukáže všechna dostupná tlačítka z nástrojové lišty aplikace. Například klikněte na aplikaci <application>Prohlížeč nápovědy</application> a pak klikněte na tlačítko <guibutton>Nástrojové lišty</guibutton>. Okno <application>GOK</application> by nyní mělo zobrazovat tlačítka <guibutton>Zpět</guibutton>, <guibutton>Vpřed</guibutton> a <guibutton>Domů</guibutton>.</para>
</step>
<step>
<para>Ověřte, že tlačítko <guibutton>Zachytit UR</guibutton> zobrazí všechna tlačítka pro vybrané okno aplikace. Například otevřete aplet „Vlastnosti písma“ a klikněte na tlačítko <guibutton>Zachytit UR</guibutton> v okně <application>GOK</application>. Okno <guibutton>GOK</guibutton> by nyní mělo zobrazovat názvy tlačítek v apletu – <guibutton>Patkové</guibutton>, <guibutton>Bezpatkové</guibutton>, <guibutton>Zavřít</guibutton> a <guibutton>Nápověda</guibutton>.</para>
</step>
</procedure>
</section>
<section>
<title>Accerciser</title>
<screenshot>
<mediaobject><imageobject><imagedata fileref="figures/at-arch.png" format="PNG"/></imageobject> <textobject><phrase>Accerciser a architektura zpřístupnění v GNOME</phrase></textobject></mediaobject>
</screenshot>
<para><application>Accerciser</application> je interaktivní průzkumník zpřístupnění pro pracovní prostředí GNOME napsaný v jazyce Python. Používá AT-SPI ke zkoumání a ovládání widgetů, takže můžete zkontrolovat, jestli aplikace poskytuje správné informace asistenčním technologiím a automatizovaným testovacím systémům. <application>Accerciser</application> má jednoduchý základní rámec pro zásuvné moduly, který můžete použít k vytvoření vlastních zobrazení informací o zpřístupnění. Ucelenou dokumentaci najdete <ulink url="http://library.gnome.org/devel/accerciser/stable">v oficiální příručce k aplikaci Accerciser</ulink>. Na ukázku použití aplikace <application>Accerciser</application> a <application>PyATSPI</application> (Python-wrappered access and usage of AT-SPI) se podívejte do <ulink url="http://live.gnome.org/Accessibility/PythonPoweredAccessibility">tohoto článku</ulink>. Skvělou procházku zpřístupněním aplikace přímo od autorů najdete v článku s názvem <ulink url="http://www.linuxjournal.com/article/9991">Make Your Application Accessible with Accerciser</ulink>.</para>
<note>
<para><application>Accerciser</application> v podstatě nahradil starší nástroj <application>at-poke</application>.</para>
</note>
</section>
</chapter>
</book>
|