# Οδηγός προσιτότητας GNOME για προγραμματιστές

## Τι είναι η προσιτότητα;

Προσιτότητα σημαίνει να προσφέρουμε σε ανθρώπους με αναπηρία τη δυνατότητα να συμμετέχουν σε βασικές δραστηριότητες της ζωής. Αυτό περιλαμβάνει την εργασία και τη χρήση των υπηρεσιών, των προϊόντων και των πληροφοριών. Το GNOME περιλαμβάνει βιβλιοθήκες και ένα υποστηρικτικό πλαίσιο το οποίο επιτρέπει στους ανθρώπους με αναπηρίες να εκμεταλλευτούν πλήρως τη λειτουργικότητα του περιβάλλοντος εργασίας GNOME.

Σε συνδυασμό με τεχνολογίες υποβοήθησης αν είναι απαραίτητες - επικοινωνία με ομιλία, αναγνώστες οθόνης, εναλλακτικές συσκευές εισόδου κ.ο.κ. - άνθρωποι με παροδικές ή μόνιμες ανικανότητες μπορούν να χρησιμοποιήσουν την επιφάνεια εργασίας GNOME και τις εφαρμογές της. Οι τεχνολογίες υποβοήθησης είναι επίσης χρήσιμες σε ανθρώπους που χρησιμοποιούν τους υπολογιστές τους έξω από το σπίτι ή το γραφείο τους. Για παράδειγμα αν έχετε κολλήσει στην κίνηση, μπορείτε να χρησιμοποιήσετε την επικοινωνία με ομιλία για να ελέγξετε την ηλεκτρονική σας αλληλογραφία.

Οι τεχνολογίες υποβοήθησης δέχονται πληροφορίες από τις εφαρμογές μέσω της του API της Εργαλειοθήκης Προσιτότητας (Accessibility Toolkit, ATK) το οποίο μπορεί κανείς να βρει μέσα στο άρθρωμα atk στα αποθετήρια του GNOME. Εξαιτίας της εγγενούς υποστήριξης του API προσιτότητας στα GNOME widgets, το πρόγραμμά σας θα πρέπει να συνεργάζεται καλά με τις τεχνολογίες υποβοήθησης, χωρίς επιπλέον κόπο από την πλευρά σας. Για παράδειγμα οι τεχνολογίες υποβοήθησης μπορούν να διαβάζουν αυτόματα τις ετικέτες widget τις οποίες κανονικά θα βάζατε στο πρόγραμμά σας ούτως ή άλλως (για παράδειγμα με τις κλήσεις εφαρμογής GTK όπως `gtk_label_set_text()` ή `gtk_button_new_with_label()`). Επίσης μπορούν να βρουν αν υπάρχει κάποιο κείμενο tooltip συνδεδεμένο με ένα widget, και να το χρησιμοποιήσουν για να περιγράψουν το widget στον χρήστη.

Ωστόσο με λίγη επιπλέον προσπάθεια μπορείτε να κάνετε το πρόγραμμά σας να συνεργάζεται με ακόμη καλύτερο τρόπο με τις τεχνολογίες υποβοήθησης. Έτσι το προϊόν της εργασίας σας όχι μόνο θα βοηθάει μεμονωμένους χρήστες αλλά θα είναι και περισσότερο ελκυστικό στις κυβερνήσεις και τις εκπαιδευτικές αγορές, πολλές από τις οποίες πλέον απαιτούν με σχετική νομοθεσία από τις εφαρμογές να είναι προσιτές.

### Τύποι αναπηρίας

Μόνο στις ΗΠΑ, υπάρχει ένας εκτιμώμενος αριθμός 30.000.000 ανθρώπων των οποίων η δυνατότητα να χρησιμοποιούν ηλεκτρονικούς υπολογιστές ίσως περιορίζεται από σχεδιασμό που έγινε χωρίς να έχει στόχο την προσιτότητα. Παγκοσμίως, περίπου το 8% των ανθρώπων που χρησιμοποιούν τον παγκόσμιο ιστό έχουν κάποιο είδος αναπηρίας. Οι αναπηρίες κατατάσσονται σε μια από τις εξής κατηγορίες:

- Προβλήματα στην όραση - αυτά ποικίλουν από χαμηλή όραση (συμπεριλαμβάνονται μεταξύ άλλων και η εξασθενημένη ή θολή όραση, η πρεσβυωπία, η μυωπία, η αχρωματοψία και "όραση τούνελ") μέχρι την ολική τύφλωση. Λανθασμένη επιλογή του μεγέθους και του χρώματος της γραμματοσειράς και εργασίες που απαιτούν καλό συγχρονισμό χεριού και ματιού (όπως το να μετακινείς το ποντίκι) μπορούν να προκαλέσουν πρόβλημα σε αυτούς τους χρήστες.

- Κινητικά προβλήματα - χρήστες με μειωμένο μυικό έλεγχο ή αδυναμία δυσκολεύονται να χρησιμοποιήσουν ένα κανονικό πληκτρολόγιο ή ένα ποντίκι. Για παράδειγμα, ίσως δεν έχουν τη δυνατότητα να κρατούν πατημένα δυο κουμπιά συγχρόνως, ή είναι πιο πιθανό να πατούν πλήκτρα κατά λάθος.

- Προβλήματα ακοής - αυτά ποικίλουν από το να μπορείς να ακούς κάποιους ήχους αλλά να μην είναι δυνατόν να ξεχωρίσεις την ομιλία, μέχρι την πλήρη κωφότητα. Οι εφαρμογές οι οποίες επικοινωνούν χρήσιμες πληροφορίες με ήχους και μόνο θα προκαλέσουν προβλήματα σε αυτούς τους χρήστες.

- Μαθησιακά και Γλωσσικά προβλήματα -αυτά ποικίλουν από τη δυσλεξία μέχρι τη δυσκολία να θυμάσαι πράγματα, να λύνεις προβλήματα ή να καταλαβαίνεις και να χρησιμοποιείς τον προφορικό ή γραπτό λόγο. Πολύπλοκες ή αλλοπρόσαλλες εικόνες, ή ατυχής επιλογή λέξεων μπορεί να δυσκολέψει την χρήση ηλεκτρονικών υπολογιστών από αυτούς τους χρήστες.

- Προβλήματα με κρίσεις - κάποια συγκεκριμένα περιβάλλοντα φωτός και ήχου μπορούν να προκαλέσουν κρίσεις επιληψίας σε κάποιους ευπαθείς χρήστες.

### Πώς λειτουργεί η προσιτότητα στο GNOME

Η Εργαλειοθήκη προσιτότητας (Accessibility Toolkit, ATK) περιγράφει ένα σύνολο από διεπαφές οι οποίες πρέπει να περιλαμβάνονται στα γραφικά περιβάλλοντα διεπαφών (GUI) ώστε να είναι προσιτά. Οι διεπαφές είναι ανεξάρτητες από την εργαλειοθήκη - εφαρμογές μπορούν να γραφούν σε κάθε εργαλειοθήκη όπως GTK, Motif ή Qt.

Τα εργαλεία GTK υλοποιούνται σε ένα άρθρωμα με το όνομα GAIL (GNOME Accessibility Implementation Library, Βιβλιοθήκη υλοποίησης προσιτότητας του GNOME), η οποία μπορεί να φορτωθεί δυναμικά κατά τη διάρκεια της εκτέλεσης από μια εφαρμογή GTK. Αφού φορτωθεί, εκείνα τα τμήματα της εφαρμογής σας τα οποία χρησιμοποιούν τα κανονικά εργαλεία της GTK θα έχουν ένα βασικό επίπεδο προσιτότητας, χωρίς να χρειαστεί καμία αλλαγή της εφαρμογής από εσάς. Αν το GAIL δεν έχει φορτωθεί, τα εργαλεία της GTK θα έχουν μια προεπιλεγμένη υλοποίηση προσιτότητας η οποία ουσιαστικά δεν επιστρέφει καθόλου πληροφορίες, αν και τυπικά συμμορφώνεται στο API της εργαλειοθήκης προσιτότητας. Οι εφαρμογές που χρησιμοποιούν τα χειριστήρια Bonobo, και συγκεκριμένα εκείνα που είναι εκτός διαδικασίας, φορτώνουν επίσης τον κώδικα υποστήριξης της προσιτότητας από το άρθρωμα libgail-gnome. Το αν οι εφαρμογές της επιφάνειας εργασίας GNOME θα φορτώσουν αυτόματα αυτές τις βιβλιοθήκες υποστήριξης της προσιτότητας εξαρτάται από την τιμή ενός κλειδιού gconf, του «/desktop/gnome/interface/accessibility», μια boolean τιμή «αληθές» ενεργοποιεί την υποστήριξη για τις τεχνολογίες υποβοήθησης και οι εφαρμογές οι οποίες καλούν την gnome_program_init θα φορτώσουν αυτόματα τις κατάλληλες βιβλιοθήκες προσιτότητας κατά την εκτέλεση. Οι «καθαρές GTK+ εφαρμογές», για παράδειγμα εκείνες που χρησιμοποιούν την εργαλειοθήκη gtk+ αλλά δεν συνδέονται με την βιβλιοθήκη libgnome, βασίζονται στην τιμή της μεταβλητής περιβάλλοντος GTK_MODULES, η οποία πρέπει να είναι ρυθμισμένη σε «gail:atk-bridge» ούτως ώστε να ενεργοποιηθεί η υποστήριξη τεχνολογίας προσιτότητας.

Οι περισσότερες τεχνολογίες υποβοήθησης που τρέχουν σε άλλες επιφάνειες εργασίας, ιστορικά θεώρησαν αναγκαία τη διατήρηση ενός «εκτός οθόνης» μοντέλου των εφαρμογών της επιφάνειας εργασίας, βασισμένου στην υφαρπαγή των γεγονότων του λειτουργικού συστήματος, στη χρήση μη υποστηριζόμενων χαρακτηριστικών της εφαρμογής και του API, και σε άλλες μη φορητές τεχνικές. Αυτά έχουν κάνει την υποστήριξη τεχνολογιών υποβοήθησης κάπως «εύθραυστη» και υπερβολικά εξαρτώμενη από το λειτουργικό σύστημα και από την κάθε εφαρμογή, ακόμα και από την κάθε έκδοση εφαρμογής. Αντιθέτως, στην επιφάνεια εργασίας του GNOME, όλες οι πληροφορίες που είναι αναγκαίες για τις τεχνολογίες υποβοήθησης παρέχονται από τις εφαρμογές που εκτελούνται μέσω του Framework προσιτότητας του GNOME, σε μια Διεπαφή παροχής υπηρεσιών (SPI) ανεξάρτητη από την εργαλειοθήκη. Η SPI παρέχει τα μέσα στις τεχνολογίες υποβοήθησης που βασίζονται στο UNIX, όπως οι αναγνώστες και οι μεγεθυντές οθόνης, να λαμβάνουν πληροφορίες προσιτότητας από εκτελούμενες εφαρμογές μέσω ενός συμπαγούς, σταθερού API, και μπορεί να εξαλείψει την ανάγκη για ένα «εκτός οθόνης» μοντέλο σε πολλές περιπτώσεις. Η υποστήριξη προσιτότητας είναι «ενσωματωμένη» στις εργαλειοθήκες εφαρμογών μέσω API προσαρμοσμένων στις εργαλειοθήκες (για παράδειγμα, το ATK για τις περισσότερες εγγενείς εφαρμογές σε C και το API προσιτότητας της JAVA για εφαρμογές Java), και εξάγεται στην κοινή διεπαφή «AT-SPI» μέσω της σχετικής «γέφυρας» (βλ. και το ακόλουθο διάγραμμα).

#### Αρχιτεκτονική προσιτότητας του GNOME

Διάγραμμα της αρχιτεκτονικής προσιτότητας του GNOME

Η ενσωματωμένη υποστήριξη προσιτότητας στο GNOME, σημαίνει ότι εφαρμογές οι οποίες δημιουργήθηκαν με χρήση των αποθηκευμένων γραφικών συστατικών του GNOME έχουν εξ αρχής υποστήριξη για τις τεχνολογίες υποβοήθησης "δωρεάν", με την προϋπόθεση ότι τα γραφικά συστατικά δεν έχουν χρησιμοποιηθεί με ασυνήθιστους τρόπους, οι οποίοι έρχονται σε σύγκρουση με αυτήν την ενσωματωμένη υποστήριξη.

Μια εργαλειοθήκη gtk+/GNOME είναι προσιτή αν η χρήση της ακολουθεί τις κατευθυντήριες γραμμές προσιτότητας που αναφέρονται σε άλλο σημείο αυτού του εγγράφου, και αν υλοποιεί τις διεπαφές ATK ανάλογα με το ρόλο της στη διεπαφή χρήστη. Οι υλοποιήσεις του ATK παρέχονται για τις «πρότυπες» εργαλειοθήκες του GNOME (δηλ. τις μη ξεπερασμένες εργαλειοθήκες του gtk+ και του GNOME), και σε πολλές περιπτώσεις οι νέες εργαλειοθήκες που προέρχονται με απλό τρόπο από υφιστάμενες εργαλειοθήκες GTK+ ή GNOME θα κληρονομήσουν επίσης την υποστήριξη προσιτότητας.

Παρότι η ενσωματωμένη στο GNOME υποστήριξη προσιτότητας παρέχει σημαντική λειτουργικότητα χωρίς καθόλου αλλαγές στον κώδικα που έχουν συγκεκριμένα στόχο της προσιτότητα, οι εφαρμογές μπορούν να βελτιώσουν τις προεπιλεγμένες περιγραφές που παρέχονται από τις εργαλειοθήκες, και να τις προσαρμόσουν στο συγκεκριμένο σκοπό εκείνης της εργαλειοθήκης μέσα στην εφαρμογή, μέσω άμεσων κλήσεων σε μεθόδους της ATK μέσα στην εφαρμογή. Για παράδειγμα, στις περισσότερες περιπτώσεις οι εφαρμογές θα πρέπει να αλλάζουν το κείμενο περιγραφής των εργαλειοθηκών με την κατάλληλη κλήση συνάρτησης του ATK, ώστε οι τεχνολογίες υποβοήθησης να περιγράφουν το σκοπό ή την κατάστασή τους στο χρήστη. Βλ. τις Κατευθυντήριες γραμμές κώδικα για υποστήριξη προσιτότητας για περισσότερες πληροφορίες.

Αν η εφαρμογή σας χρησιμοποιεί τροποποιημένες εργαλειοθήκες, ίσως χρειαστεί λίγο περισσότερη δουλειά για να εκθέσετε τις ιδιότητες εκείνων των εργαλειοθηκών στις τεχνολογίες υποβοήθησης. Δείτε το Κάνοντας τα προσαρμένα συστατικά προσιτά και τα Παραδείγματα που χρησιμοποιούν το API προσιτότητας για περισσότερες πληροφορίες.

Για περισσότερες και πιο αναλυτικές πληροφορίες σχετικά με τα GTK/GTK+, δείτε (στα Αγγλικά) το Εγχειρίδιο χρήσης GTK+, το κομμάτι για το GTK στο εγχειρίδιο του ATK, το φιλοξενούμενο στο GNOME Εγχειρίδιο GTK+ 2.0 και το επίσημο GTK+ FAQ.

### Γρήγορη εκκίνηση για προγραμματιστές

Εδώ παρουσιάζονται κάποια συνηθισμένα θέματα που πρέπει κανείς να γνωρίζει:

#### Πώς μπορώ να ελέγξω αν η εφαρμογή μου είναι προσιτή ή όχι;

Για να ξεκινήσετε αμέσως, δείτε (στα Αγγλικά) το Κάνοντας μια εφαρμογή GNOME προσιτή - Γενικά. Για μια οπτική πριν το ξεκίνημα του προγραμματισμού, δείτε Βασικές αρχές για Διεπαφή Χρήστη για υποστήριξη Προσιτότητας ή Βασικές αρχές προγραμματισμού για υποστήριξη Προσιτότητας. Για μια λίστα ελέγχου (checklist) δοκιμών μετά τον προγραμματισμό, δείτε Λίστα Ελέγχου Διεπαφής Χρήστη.

#### Ποιά είναι τα συνηθισμένα λάθη;

Η Λίστα ελέγχου διεπαφής χρήστη καλύπτει όλα τα θέματα τα οποία κάποιες φορές παραβλέπονται στο στάδιο του σχεδιασμού.

#### Πώς μπορώ να κάνω συνηθισμένα πράγματα σχετικά με την ΑΤΚ (Accessibility toolkit, εργαλειοθήκη προσιτότητας);

Μια περιληπτική λίστα συνηθισμένων κλήσεων ATK μπορεί να βρεθεί εδώ.

#### Πώς μπορώ να κάνω περισσότερο πολύπλοκα πράγματα σχετικά με την ΑΤΚ;

Δείτε τις ενότητες Δημιουργία προσαρμοσμένων προσιτών περιεχομένων και Παράδειγμα για τη χρήση της προσιτότητας API για περισσότερες πληροφορίες.

#### Παρουσιάζοντας τα ATK, AT-SPI, GAIL και GTK+

Αρχιτεκτονική προσιτότητας του GNOME

Η ATK είναι η εργαλειοθήκη την οποία η επιφάνεια εργασίας GNOME χρησιμοποιεί για να ενεργοποιήσει την προσιτότητα για τους χρήστες που χρειάζονται επιπλέον υποστήριξη για να μπορέσουν να εκμεταλλευτούν τους υπολογιστές τους. Η ATK χρησιμοποιείται από εργαλεία όπως αναγνώστες οθόνης, μεγεθυντές, και συσκευές εισόδου ώστε να επιτρέψει μια πλούσια αλληλεπίδραση με την επιφάνεια εργασίας με εναλλακτικά μέσα. Δείτε το Έργο ATK στο SourceForge και τη βιβλιοθήκη ATK για περισσότερες πληροφορίες.

Το AT-SPI είναι η κυρίως διεπαφή της υπηρεσίας με την οποία οι τεχνολογίες υποβοήθησης κάνουν ερωτήματα και δέχονται απαντήσεις από εφαρμογές που τρέχουν. Το πλήρες API μπορεί να μελετηθεί εδώ.Επιπλέον υλικό είναι διαθέσιμο από την Κοινότητα Ανάπτυξης της Προσιτότητας του KDE.

Η GAIL (Βιβλιοθήκη εφαρμογής προσιτότητας) της επιφάνειας εργασίας GNOME, είναι μια εφαρμογή των διεπαφών προσιτότητας που καθορίζεται από την ATK. Η GTK είναι μία εργαλειοθήκη η οποία έχει ήδη συνδεθεί στην ATK από το συστατικό GAIL. Μπορείτε να δείτε την άδεια ή να κατεβάσετε την GAIL εδώ. Ο πηγαίος κώδικας της GAIL μπορεί επίσης να χρησιμοποιηθεί ως ένα εξαιρετικό διδακτικό βοήθημα για προχωρημένη χρήση της ATK. Επιπλέον, ίσως ενδιαφέρεστε για το πλήρες εγχειρίδιο της GAIL.

Η GTK+ είναι μια βιβλιοθήκη για τη δημιουργία γραφικών διεπαφών χρήστη. Δουλεύει σε πολλές πλατφόρμες βασισμένες στο UNIX, σε Windows και σε συσκευές framebuffer. Η GTK+ εκδίδεται υπό την Γενική δημόσια άδεια βιβλιοθηκών GNU (GNU Library General Public License, GNU LGPL), η οποία επιτρέπει την ευέλικτη αδειοδότηση παράγωγων εφαρμογών. Η GTK+ έχει μια βασισμένη στην C αντικειμενοστρφή αρχιτεκτονική η οποία επιτρέπει την μέγιστη δυνατή ευελιξία. Δεσμοί (bindings) με άλλες γλώσσες έχουν γραφτεί, συμπεριλαμαβωνμένων των C++, Objective-C, Guile/Scheme, Perl, Python, TOM, Ada95, Free Pascal, και Eiffel.

Για περισσότερες και πιο αναλυτικές πληροφορίες σχετικά με τα GTK/GTK+, δείτε (στα Αγγλικά) το Εγχειρίδιο χρήσης GTK+, το κομμάτι για το GTK στο εγχειρίδιο του ATK, το φιλοξενούμενο στο GNOME Εγχειρίδιο GTK+ 2.0 και το επίσημο GTK+ FAQ.

### Κάνοντας μια Εφαρμογή GNOME Προσιτή - Γενικά

Αν η εφαρμογή σας χρησιμοποιεί μόνο τα κανονικά εργαλεία της GTK, πιθανώς θα χρειατεί να κάνετε λίγα ή καθόλου ώστε να κάνετε την εφαρμογή σας προσιτή σε ένα λογικό επίπεδο. Αλλά να έχετε το νου σας για αντικείμενα στη Γραφική Διεπαφή Χρήστη (GUI) τα οποία δεν έχουν μια περιγραφή σε κείμενο.συσχετισμένη με αυτά, όπως γραφικά κουμπιά ή ενδείκτες κατάστασης (status indicators) τα οποία δεν έχουν ετικέτες ή ενδεικτικά βοηθήματα (tooltip).

Μπορείτε πιθανόν επίσης να βελτιώσετε τις προεπιλεγμένες περιγραφές που παρέχονται σε μερικά γραφικά συστατικά, και να τα ενσωματώσετε στο συγκεκριμένο σκοπό του γραφικού συστατικού μέσα στην εφφαρμογή σας. Θα πρέπει να προσθέσετε ή να αλλάξετε τις αναλυτικές περιγραφές για αυτά τα γραφικά συστατικά με την κλήση της κατάλληλης συνάρτησης ΑΤΚ, έτσι ώστε μία τεχνολογία υποβοήθησης να μπορεί να περιγράχει τον σκοπό ή να τη δήλωσω απέναντι στο χρήστη. Δείτε Οδηγίες κωδικοποίησης για υποστήριξη προσιτότητας για περισσότερες πληροφορίες.

Αν η εφαρμογή σας χρησιμοποιεί προσαρμοσμένα γραφικά συστατικά, ενδεχομένως να πρέπει να κάνετε μερικές ενέργειες για να εκθέσετε τις ιδότητές τους σε τεχνολογίες υποβοήθησης. Δείτε τις ενότητες Δημιουργία προσαρμοσμένων προσιτών περιεχομένων και Παραδείγματα για τη χρήση προσιτότητας API για περισσότερες πληροφορίες. Επιπρόσθετες αναλυτικές πληροφορίες μπορούν να βρεθούν στην παρουσίασ του Marc Mulcahy στην GUADEC του 2002, "Δημιουργία προσιτών εφαρμογών για το GNOME".

### Οδηγίες για τον προγραμματισμό σε σχέση με την υποστήριξη της προσιτότητας

Εδώ παραθέτονται κάποιες ενέργειες που μπορείτε να εφαρμόσετε στον κώδικά σας για να βελτιώσετε τη λειτουργία του προγράμματός σας όσον αφορά τιε τεχνολογίες υποβοήθησης. (Μπορείτε να βρείτε μία λίστα ενεργειών για να θυμάστε κατά το σχεδιασμό του γραφικού περιβάλλοντος στην ενότητα Οδηγίες διεπαφής χρήστη για υποστήριξης προσιτότητας πιο κάτω σε αυτό το έγγραφο):

- Για περιεχόμενα που δεν εμφανίζουν ένα μικρό αλφαριθμητικό (όπως ένα γραφικό κουμπί), καθορίστε ένα όνομα για αυτό με τη συνάρτηση `atk_object_set_name()`. Ενδεχομένως να επιθυμείτε να το κάνετε για κουμπιά με εικόνες, για πλαίσια που παρέχουν λογικές ομάδες, για περιοχές κειμένου, κοκ.

- Αν δε μπορείτε να παρέχετε μία συμβουλή οθόνης για ένα περιεχόμενο, χρησιμποιήστε αντί για αυτή τη συνάρτηση `atk_object_set_description()` για να παρέχετε μία περιγραφή που οι τεχνολογίες υποβοήθησης μπορούν να προσφέρουν στο χρήστη. Για παράδειγμα, για να παρέχετε μία προσιτή περιγραφή για ένα κουμπί Κλείσιμο εφαρμόστε τα εξής:

  #### Παρέχοντας μια προσιτή περιγραφή για ένα GtkButton

      {
        AtkObject *obj;
        obj = gtk_widget_get_accessible(button);
        atk_object_set_description(obj,_("Κλείνει το παράθυρο"));
      }

- Χρησιμοποιήστε την `atk_image_set_description()` για να δώσετε μια περιγραφή κειμένου για όλες τις εικόνες και τα εικονίδια του προγράμματός σας.

- Αν μερικά από τα στοιχεία μιας λογικής ομάδας, προσπαθήστε να τα βάλετε σε ένα σημείο.

- Όταν έχετε μια ετικέτα η οποία περιγράφει ένα άλλο στοιχείο, χρησιμοποιήστε την `atk_relation_set_add_relation()` έτσι ώστε οι τεχνολογίες υποβοήθησης να μπορούν να βρουν το στοιχείο με το οποίο η ετικέτα έχει συσχετιστεί. (Εάν συσχετίσετε την ετικέτα με το στοιχείο χρησιμοποιώντας την `gtk_label_set_mnemonic_widget()`, τότε ο συσχετισμός `ATK_RELATION_LABEL_FOR` δημιουργείται αυτόματα, έτσι ο κώδικας που ακολουθεί δεν είναι απαραίτητος):

  #### Συσχετίζοντας μια ετικέτα GtkLabel με ένα GtkWidget

      {
        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));
      }

- Αν δημιουργείτε ένα προσαρμοσμένο γραφικό συστατικό, βεβαιωθείτε ότι αυτό υποστηρίζει την προσιτότητα. Τα προσαρμοσμένα περιεχόμενα που εξαρτώνται από άλλα γραφικά συστατικά GTK θα αντικαθιστούν τις πληροφορίες προσιτότητας που κληρονομήθηκαν όπου αυτό είναι απαραίτητο. Για περισσότερες πληροφορίες, δείτε την ενότητα Δημιουργία προσιτών προσαρμοσμένων περιεχομένων.

- Μην αφήνετε κάτι που το έχετε δωρεάν! Αν το περιβάλλον χρήση σας έχει ένα στοιχείο που δεν είναι προσιτό, οποιαδήποτε περιεχόμενα μέσα σε αυτό το στοιχείο ενδεχομένως γίνουν μη προσιτά επίσης.

### Η προσιτότητα API

Εδώ βρίσκονται μερικές κλήσεις API που ενδεχομένως χρειαστεί να χρησιμοποιήσετε στην εφαρμογή σας για να βεβαιωθείτε ότι δουλεύει σωστά με τεχνολογίες υποβοήθησης. Η πλήρης προσιτότητα του API είναι εκτενής, για να σας επιτρέπει να συνθέτετε τα δικά σας προσιτά προσαρμοσμένα γραφικά συστατικά, για παράδειγμα.

### Οι πιο δημοφιλείς ATK API

API | Περιγραφή
`AtkObject* gtk_widget_get_accessible (GtkWidget*)` | Επιστρέφει το προσιτό αντικείμενο που περιγράφει το καθορισμένο γραφικό συστατικό GTK σε μία τεχνολογία υποβοήθησης.
`void atk_object_set_name (AtkObject*, const gchar*)` | Καθορίζει το όνομα του προσιτού αντικειμένου. Για παράδειγμα, αν το αντικείμενο είναι ένα γραφικό κουμπί που τερματίζει την εφαρμογή όταν το πιέσετε, το όνομα ενδεχομένως να είναι "Τερματισμός".
`void atk_object_set_description (AtkObject*, const gchar*)` | Καθορίζει την αναλυτική περιγραφή του προσιτού αντικειμένου. Για παράδειγμα, αν το αντικείμενο είναι ένα γραφικό κουμπί με όνομα "Κλείσιμο", η περιγραφή ενδεχομένως να είναι "Κλείνει το παράθυρο".
`AtkRelation* atk_relation_new (AtkObject**, gint, AtkRelationType)` | Δημιουργεί μία νέα σχέση μεταξύ του καθορισμένου κλειδιού και της καθορισμένης λίστας με τα αντικείμενα προορισμού. Μία σχέση σε κανονικές συνθήκες αναδεικνύει την τεχνολογία υποβοήθησης σχετικά με την κάθε είδους σχέση μεταξύ των γραφικών συστατικών. Για παράφειγμα, ένα ειδικό γραφικό συστατικό DtkLabel είναι η λεζάντα για ένα GtkTreeView στο ίδιο παράθυρο.
`void atk_image_set_description (AtkImage*, const gchar*)` | Καθορίζει την περιγραφή κειμένου του προσιτού αντικειμένου εικόνας. Για παράδειγμα αν το αντικείμενο είναι μια μικρογραφία μιας εικονικής επιφάνειας εργασίας μέσα σε μια μικροεφαρμογή του πάνελ, τότε η περιγραφή θα μπορούσε να είναι "Εικόνα που δείχνει τη διάταξη των παραθύρων στην επιφάνεια εργασίας 1".

### Παραδείγμα για τη χρήση της προσιτότητας API

Όπως σημειώθηκε νωρίτερα, θα πρέπει να κάνετε λίγη ή καθόλου δουλειά για να κάνετε την εφαρμογή σας προσιτή αν χρησιμοποιείτε το πακέτο εργαλείων GTK, ή οποιαδήποτε άλλη βιβλιοθήκη εργαλείων η οποία να ενσωματώνει τις διεπαφές ATK. Τα δυο πιο κοινά πράγματα που ίσως χρειαστεί να κάνετε σε αυτές τις περιπτώσεις είναι:

- να δώσετε περιγραφές για κάποια στοιχεία ελέγχου και κάποιες εικόνες χρησιμοποιώντας την `atk_object_set_description()` ή την `atk_image_set_description():`

  #### Καθορισμός της προσιτής περιγραφής για ένα κουμπί

      {
         AtkObject *obj;
         obj = gtk_widget_get_accessible(button);
         atk_object_set_description(obj,_("Ανοίγει το παράθυρο Προτιμήσεις"));
      }

- Καθορίστε τους συσχετισμούς ανάμεσα σε κάθε ασυνήθιστη ομαδοποίηση εργαλείων χρησιμοποιώντας τις `atk_relation_new()` και `atk_relation_set_add()`:

  #### Καθορισμός προσιτών συσχετισμών ανάμεσα σε δύο στοιχεία ελέγχου (controls)

      {
        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));
      }

Τα παραδείγματα στο υπόλοιπο αυτής της ενότητας βρίσκονται περισσότερο για να σας δώσουν μία γεύση του σκοπού του ΑΤΚ. Καλύπτουν τεχνικές που ενδεχομένων ποτέ δεν θα χρειαστείτε να χρησιμοποιήσετε ως συντελεστής μίας εφαρμογής, αν και ίσως να σας ενδιαφέρουν αν γράφετε μόνοι σας το δικό σας γραφικό συστατικό (δείτε Κάντε προσιτά τα προσαρμοσμένα στοιχεία) ή αν θέλετε να γράψετε μίας εφαρμογή βοηθητικής τεχνολογίας. Οποιοσδήποτε κι αν είναι ο σκοπός, ο πηγαίος κώδικας GAIL παρέχεται ως ένα εξαιρετικό βοήθημα για μία εξειδικευμένη χρήση του ATK.

#### Αρθρώματα Gtk

Τα προγράμματα που κάνουν χρήση του GAIL (η βιβλιοθήκη με την εφαρμογή προσιτότητας για τα γραφικά συστατικά GTK) έχουν κατασκευαστεί ως αρθρώματα GTΚ. Τα αρθρώματα GTK φορτώνονται στο χώρο του προγράμματος αν η μεταβλητή περιβάλλοντος `GTK_MODULES` καθορίζει το όνομα ή τα ονόματα της βιβλιοθήκης αρθρωμάτων. Αν υφίστανται πολλαπλές βιβιοθήκες αρθρωμάτων, διαχωρίστε τις με άνω-κάτω τελεία. Για παράδειγμα:

`setenv GTK_MODULES "libgail:libtestprops"`

Όλα τα αρθρώματα GTK έχουν μία συνάρτηση `gtk_module_init()`.

#### Συγκεντρώνοντας πληροφορίες προσιτότητας από μια εφαρμογή

Ένα πρόγραμμα το οποίο θέλει να χρησιμοποιήσει τις κλήσεις ATK θα πρέπει κατά προτίμηση να κάνει ένα (ή περισσότερα) από τα παρακάτω:

1. Να δημιουργήσει ένα event watcher, για παράδειγμα με την συνάρτηση `atk_add_focus_tracker()` :

       atk_add_focus_tracker (_my_focus_tracker);

   όπου η `_my_focus_tracker()` είναι μια συνάρτηση με αυτόν τον τύπο:

       void _my_focus_tracker (AtkObject *aobject);

2. Να καθορίσει έναν καθολικό event listener, με atk_add_global_event_listener():

       mouse_watcher_focus_id =   atk_add_global_event_listener(_my_global_listener,"Gtk:GtkWidget:enter_notify_event");

   όπου η συνάρτηση `_my_global_listener` έχει τον τύπο της Glib `GSignalEmissionHook`. Αυτό το παράδειγμα θα έκανε τη συνάρτηση `_my_global_listener()` να καλείται κάθε φορά που συμβαίνει ένα σήμα enter_notify_even σε ένα `GtkWidget` αντικείμενο.

3. Αποκτήστε πρόσβαση στο αντικείμενο ανώτερου επιπέδου τύπου ATK με τη χρήση της ακόλουθης συνάρτησης.

       AtkObject *root_obj = atk_get_root();

   Με αυτόν τον τρόπο επιστρέφεται ένα `AtkObject` το οποίο περιέχει όλα τα παράθυρα ανώτερου επιπέδου στο τρέχον πρόγραμμα που εκτελείται. Ο χρήστης μπορεί τότε να πλοηγηθεί μέσω της ιεραρχίας αντικειμένων έχοντας πρόσβαση στους θυγατρικούς καταλόγους των αντικειμένων του ριζικού καταλόγου, το οποίο αντιστοιχεί σε παράθυρα ανώτερου επιπέδου.

#### Δημιουργία αιτήσεων σε διεπαφές `AtkObject`

Έχοντας κλειδώσει το `AtkObject` το οποίο είναι συναφές με ένα αντικείμενο στην εφαρμογή (π.χ. χρησιμοποιώντας τη συνάρτηση `gtk_widget_get_accessible()`), μπορείτε να ανακαλύψετε τις διεπαφές που αυτό εκτελεί με διάφορους τρόπους:

1. Χρησιμοποιήστε τις μακροεντολές `ATK_IS_...` που παρέχονται, για παράδειγμα:

   - `ATK_IS_ACTION(atkobj)`

   - `ATK_IS_COMPONENT(atkobj)`

   - κλπ. (υπάρχει ένα για κάθε διεπαφή)

   Αν η μακροεντολή επιστρέφει τιμή `TRUE`, οι κλήσεις της διεπαφής μπορούν με ασφάλεια να πραγματοποιηθούν σε αυτό το αντικείμενο ΑΤΚ.

2. Δοκιμάστε το ρόλο του `AtkObject` καλώντας τη συνάρτηση `atk_object_get_role()`. Οποιοσδήποτε δοσμένος ρόλος εκτελεί ένα ειδικό αριθμό από ATK API.

#### Ρύθμισης ενός χειριστή σήματος ΑΤΚ

Χρήση του σήματος `column_inserted` ως παράδειγμα:

    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);

Αυτό θα έχει ως αποτέλεσμα να κληθεί η συνάρτηση `_my_table_column_inserted_func()` οποτεδήποτε εκπέμπεται ένα σήμα column_inserted στο `AtkObject` `my_atk_object`.

Η σύνδεση σε ένα σήμα είναι ελαφρώς διαφορετική αν το σήμα υποστηρίζει λεπτομέρειες παραμέτρων. Το σήμα `children_changed` υποστηρίζει τη λεπτομέρεια παραμέτρου `add` . Για να συνδεθείτε σε ένα σήμα όταν έχει καθοριστεί η λεπτομέρεια παραμέτρου `add`, χρησιμοποιείτε η εξής τεχνική:

    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);

Αυτό θα έχει ως αποτέλεσμα να κληθεί η συνάρτηση `_my_children_changed_func()` οποτεδήποτε εκπέμπεται ένα σήμα`children_changed` με τη λεπτομέρεια παραμέτρου `add` στο `AtkObject` `my_atk_obj`.

#### Εκτέλεση ενός αντικειμένου ΑΤΚ

Θα πρέπει να εκτελέσετε τα δικά σας αντικείμενα ΑΤΚ για κάθε γραφικό συστατικό που δεν έχει ακόμη μία προσιτή εκτέλεση στο GAIL (ή την ισοδύναμη βιβλιοθήκη για άλλα σύνολα γραφικών συστατικών). Αυτό θα έπρεπε να εκτελείται ως άρθρωμα GTK, το οποίο, όπως πριν, θα πρέπει να συμπεριληφθεί στη μεταβλητή περιβάλλοντος `GTK_MODULES` έτσι ώστε να φορτώνεται κατά τη διάρκεια της εκτέλεσης.

##### Μητρώο

Για αυτό το παράδειγμα θα θεωρήσουν ότι υπάρχει ένα αντικείμενο με ονομασία GTK_TYPE_MYTYPE. Η εκτέλεση του ATK θα καλείτε `MYATKIMP_TYPE_MYTYPE`. Θα χρειαστεί το εργοστάσιο το οποίο θα καλείται `MYATKIMP_TYPE_MYTYPE_FACTORY`.

Για να καταχωρήσετε στο μητρώο μία εκτέλεση ΑΤΚ ενός αντικειμένου GTK, θα πρέπει να ακολουθήσετε αυτά τα βήματα στη συνάρτηση αρθρωμάτων `gtk_module_init()`:

1. Πρόσβαση στο προεπιλεγμένο μητρώο:

       default_registry = atk_get_default_registry();

2. Καταχωρήστε το αντικείμενο ΑΤΚ στη συνάρτηση `gtk_module_init()` αυτού του αρθρώματος καλώντας αυτή τη συνάρτηση:

       atk_registry_set_factory_type (default_registry, GTK_TYPE_MYTYPE, MYATKIMP_TYPE_MYTYPE_FACTORY);

Αυτό θα καταχωρήσει την εκτέλεση AtkObject του `GTK_TYPE_MYTYPE` στο `MYATKIMP_TYPE_MYTYPE_FACTORY`. Το εργοστάσιο αυτό θα εκτελεστεί έτσι ώστε να είναι γνωστός ο τρόπος κατασκευής των αντικειμένων για τον τύπο `MYATKIMP_TYPE_MYTYPE`.

##### Εργοστάσιο

Το εργοστάσιο πρέπει να εκτελείται ως θυγατρικό του τύπου κλάσης `ATK_TYPE_OBJECT_FACTORY` και πρέπει να εκτελεί τη συνάρτηση `create_accessible()`. Η συνάρτηση αυτή πρέπει να δημιουργεί ένα κατάλληλο `AtkObject`. Μπορεί να χρησιμοποιηθεί ένα εργοστάσιο για τη δημιουργία περισσότερων από έναν τύπο αντικειμένου, στην όποια περίπτωση η συνάρτησή του `create_accessible()` θα απαιτεί να είναι αρκετά ευφυές ώστε να κατασκευαστεί και να επιστραφεί το ορθό `AtkObject`.

##### Εκτέλεση ΑΤΚ για ένα ειδικό αντικείμενο

Όλα τα `GObject` εκτελούν μία συνάρτηση `get_type()`. Χρησιμοποιώντας το παραπάνω παράδειγμα η σύμαση ονομασίας για αυτό το όνομα συνάρτησης θα πρέπει να είναι `myatkimp_mytype_get_type()`.

Στη συνάρτηση αυτή, θα ορίσετε ποιες διεπαφές θα εκτελεί το αντικείμενό σας. Αν τα επόμενα λογικά ορίσματα συμπεριλαμβάνονται στη συνάρτηση `get_type()`, το αντικείμενο αυτό θα εκτελεί τη διεπαφή `ATK_TEXT`:

###### Συνάρτηση υπόδειξης `get_type()`

    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);

Η συνάρτηση `atk_text_interface_init()`, η οποία έχει το ακόλουθο πρωτότυπο, θα πρέπει να εκτελείται ως εξής:

    void atk_text_interface_init (AtkTextIface *iface);

Η συνάρτηση αυτή θα πρέπει να συνδέει τις κλήσεις συναρτήσεων διεπαφής στη συγκεκριμένη εκτέλεση ως ακολούθως:

###### Σύνδεση κλήσεων προσαρμοσμένων διεπαφών σε μία εκτέλεση AtkObject

    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;
       ...
    }

Τότε οι συναρτήσεις `myatkimp_mytype_get_text()`, `myatkimp_mytype_get_character_at_offset()`, και το υπόλοιπο των συναρτήσεων διεπαφής `ATK_TEXT` θα πρέπει να είναι απαραίτητα για την εκτέλεση.

##### Εκτέλεση `AtkObject`

Τα `AtkObject` είναι `GObjects`, και όλα τα `GObject` απαιτούν τον ορισμό της συνάρτησης `get_type()`. Εδώ υπάρχει ένα παράδειγμα το οποίο ρυθμίζει μία κλάση και την αρχικοποίηση υποδείξεων. Αυτή η συνάρτηση `get_type()` επίσης ορίζει ότι το αντικείμενο εκτελεί το `ATK_TEXT` και καθορίζει ως γονικό αντικείμενο να είναι το `MYATKIMP_MYPARENTTYPE`.

###### Εκτέλεση της συνάρτηση `get_type()` ως παράδειγμα

    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;
    }

##### Αρχικοποιήσεις κλάσης/υπόδειξης

Θα πρέπει να ρυθμίσετε μία αρχικοποίηση κλάσης για το `GObject` αν η εκτέλεση `AtkObject` είτε:

1. Ορίζει ξανά οποιεσδήποτε κλήσεις συναρτήσεων καθορίστηκαν από το ριζικό κατάλογο του αντικειμένου. Αυτό είναι τυπικά απαραίτητο όταν ένα αντικείμενο πρέπει να εκτελέσει μία συνάρτηση όπως η `atk_object_get_n_accessible_children()`. Αυτό είναι απαραίτητο αν το αντικείμενο έχει θυγατρικό κατάλογο, αλλά δεν αντιπροσωπεύεται με γραφικά συστατικά.

   Για παράδειγμα, αν η εκτέλεση ΑΤΚ πρέπει να παρακάμψει τη συνάρτηση `AtkObject` `get_name()`, τότε η αρχικοποίηση κλάσης θα μοιάζει κάπως έτσι:

   ###### Αρχικοποίηση κλάσης η οποία παρακάμπτει την τη συνάρτηση `get_name()` του ριζικού καταλόγου

       myatkimp_mytype_class_init (GailLabelClass *klass)
       {
         AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
         class->get_name = myatkimp_mytype_get_name;
       }

2. Απαιτεί μία συνάρτηση `parent->init`, μία `parent->notify_gtk`, ή μία `parent->finalize` function. Το παράδειγμα αυτό ορίζει και τις τρεις:

   ###### Αρχικοποίηση κλάσης που ορίζει τις δικές της συναρτήσεις `init()`, `notify_gtk()` και `finalize()`

       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;
       }

   1. parent->init

      Ενδεχομένως να είναι απαραίτητα μία συνάρτηση `parent->init()` αν η εκτέλεση ΑΤΚ χρειάζεται να εφαρμόζει τα ακόλουθα:

      1. Αποθήκευση όλων των δεδομένων που λήφθηκαν από ένα γραφικό συστατικό υποστήριξης GTK.

      2. Ακρόαση οποιουδήποτε σήματος από το γραφικό συστατικό υποστήριξης GTK.

      Δείτε ένα παράδειγμα και για τις δύο περιπτώσεις:

      ###### Μία προσαρμοσμένη συνάρτηση `init()`

          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);
          }

      Στο παράδειγμα αυτό, αν το καθορισμένο σήμα `signal-type` δημιουργήθηκε στο `gtk_widget`υποστήριξης , τότε θα κληθεί η συνάρτηση `_myatkimp_mytype_signal_type()`.

   2. parent->notify_gtk

      Αν η εκτέλεση ATK πρέπει να κάνει ακρόαση σε οποιεσδήποτε ειδοποιήσεις ιδιοτήτων στο αντικείμενο υποστήριξης GTK, ενδεχομένως να είναι απαραίτητη μία συνάρτηση `parent->notify_gtk()`. Για παράδειγμα:

      ###### Μία προσαρμοσμένη συνάρτηση `notify_gtk()`

          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);
             }
          }

   3. parent->finalize

      Αν αυτό είναι απαραίτητα για την ελευθέρωση οποιονδήποτε δεδομένων όταν καταστρέφεται μία υπόδειξη `GObject`, τότε είναι απαραίτητη μία συνάρτηση `finalize()` για την απελευθέρωση μνήμης. Για παράδειγμα:

      ###### Μία προσαρμοσμένη συνάρτηση `finalize()`

          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);
          }

### Δημιουργία προσιτών προσαρμοσμένων στοιχείων

Προσθήκη υποστήριξης ΑΤΚ στο προσαρμοσμένο σας γραφικό συστατικό θα διασφάλιζε τη συνεργασία του με την υποδομή προσιτότητας. Αυτά είναι τα γενικά βήματα που απαιτούνται:

- πρόσβαση σε ένα προσαρμοσμένο γραφικό συστατικό σύμφωνα με τις εφαρμόσιμες Οδηγίες διεπαφής χρήστη,

- καθορισμός των διεπαφών ATΚ τις οποίες εκτελεί ένα προσαρμοσμένο γραφικό συστατικό, σύμφωνα με τις ρυθμίσεις και τη συνάρτηση λειτουργίας του συστατικού,

- πρόσβαση στις διεπαφές ATK οι οποίες μπορούν να κληρονομηθούν από την κλάση του γονικού γραφικού συστατικού,

- εκτέλεση των κατάλληλων διεπαφών ΑΤΚ για την κλάση του γραφικού συστατικού με έναν από τους δύο εξής τρόπους:

  - απευθείας από το προσαρμοσμένο γραφικό συστατικό, ή

  - σε ένα δευτερεύονται τύπο `AtkObject` που δημιουργήθηκε από μία νέα υποκλάση `AtkObjectFactory`

  Αν χρησιμοποιείται η δεύτερη μέθοδος, ο κατάλληλος τύπος εργοστασίου θα πρέπει να καταχωρηθεί με το `AtkObjectFactoryRegistry` κατά τη διάρκεια της εκτέλεσης.

Ο πηγαίος κώδικας GAIL παρέχεται ως ένα εξαιρετικό βοήθημα για εξειδικευμένη χρήση του ΑΤΚ.

### Οδηγίες διεπαφής χρήστη για την υποστήριξη προσιτότητας

Κατά τη σχεδίαη του γραφικού περιβάλλοντος της εφαρμογής σας, υπάρχει ένας αριθμός απλών οδηγιών που θα πρέπει να ακολουθούνται για να βεβαιωθείτε ότι μπορεί να χρησιμοποιηθεί από όσο πιο ευρύ κοινό είναι δυνατό, είτε σε συνδυασμό με τεχνολογίες υποβοήθησης είτε όχι. Μην νομίσετε ότι αυτό είναι μόνο μία περίπτωση της "δημιουργίας του δικού σας χρήσιμου γραφικού περιβάλλοντος από άτομα με ανικανότητες", αν και, δεν θα πρέπει να ανησυχείτε αν ένα άτομο με ανικανότητες δεν πρόκειται να χρησιμοποιήσει την εφαρμογή αυτή. Ακολουθώντας αυτές τις οδηγίες θα βελτιωθεί η συνολική χρησιμότητα της εφαρμογής για κάθε έναν που την χρησιμοποιεί - ακόμη και για εσάς!

#### Γενικά

Όλοι θα απογοητευόμασταν αν δεν μπορούσαμε να εντοπίσουμε μία λειτουργία σε μία εφαρμογή, ή αν κάναμε ένα λάθος βήμα από το οποίο θα έπρεπε να περιμένουμε κάποια λεπτά για την αναίρεσή του, ή αν δεν ήταν καν δυνατή η αναίρεσή του. Αν έχετε κάποιο είδος αναπηρίας, οι εναλλακτικές λύσεις θα ήταν κάποια διακοπή της προσπάθειας ή του χρόνου που θα χρειαζόταν για την ενέργεια αλλιώς τα πράγματα θα ήταν αρκετά πιο δύσκολα. Ακολουθώντας μερικές βασικές οδηγίες θα μπορούσαν να σας βοηθήσουν να εμποδίσετε αυτά τα είδη περιπτώσεων για όλους τους χρήστες.

- Κάντε Αναίρεση για κάθε ενέργεια που τροποποιεί τα δεδομένα χρήστη ή τις ρυθμίσεις της εφαρμογής. Αν είναι δυνατό, να παρέχετε περισσότερα από ένα επίπεδα αναίρεση ή επανάληψης, και μία λίστα ιστορικού που θα επιτρέπει την προεπισκόπηση των ενεργειών που θα αναιρεθούν.

- Εκτελέστε κάποιες εντολές για την επαναφορά των προεπιλεγμένων ρυθμίσεων. Αν κάποια συγκεκριμένη ρύθμιση καθιστά την εφαρμογή απόλυτα μη χρησιμοποιήσιμη για κάτι ειδικό, π.χ. για την κατασκευή πολύ μικρών γραμματοσειρών, θα ήταν χρήσιμο να παρέχετε μία επιλογή για την επαναφορά των προεπιλεγμένων ρυθμίσεων ανεξάρτητα από την εφαρμογή. Αυτό θα μπορούσε να γίνει χρησιμοποιώντας μία εναλλαγή γραμμής εντολής, για παράδειγμα.

- Βοηθήστε στο να εμποδίσετε τους χρήστες να ενεργούν με λανθασμένο τρόπο. Αυτό είναι ιδιαίτερα σημαντικό για ενέργειες που θα μπορούσαν να εκτελεστούν καταλάθος (π.χ. οι ενέργειες του ποντικιού) ή που δεν θα μπορούσαν να αναιρεθούν εύκολα (π.χ. η αντικατάσταση ενός αρχείου). Μπορείτε να το πραγματοποιήσετε χρησιμοποιώντας διαλόγους επιβεβαίωσης ή αναγκάζοντας το χρήστη να μεταβαίνει σε συγκεκριμένη λειτουργία για την εφαρμογή επιλογών ενδεχομένως καταστροφικών.

- Ελαχιστοποιήστε τη φόρτωση της μνήμης των χρηστών. Για παράδειγμα, επιτρέψτε στο χρήστη να προβάλλει πολλαπλά έγγραφα ταυτόχρονα, και βεβαιωθείτε ότι η δικτυακή βοήθεια ή άλλες οδηγίες μπορούν να παραμείνουν ορατές ενώ αυτά μεταφέρονται έξω από τη διαδικασία που περιγράφεται. Επιτρέψτε τους να αντιγράψουν οποιεσδήποτε πληροφορίες που προβάλλονται, και να τις επικολλήσουν οπουδήποτε μπορούν να εισαχθούν δεδομένα.

- Μην αφήσετε τους χρήστες να εισάγουν δίσκους. Ανάλογα με τη συγκεκριμένη αναπηρία ενός χρήστη, ίσως βρουν πολύ δύσκολη την φυσική εισαγωγή ενός δίσκου, ή ίσως δύσκολη την αναγνώριση του ορθού δίσκου στην πρώτη τοποθεσία. Αν η εφαρμογή σας εγκαθίσταται από την είσοδο δίσκων, παρέχετε μία επιλογή για αντιγραφή όλων των αρχείων που θα απαιτηθούν στο σκληρό δίσκο του χρήστη.

- Μη τοποθετείτε συναρτήσεις που χρησιμοποιούνται συχνά μακριά από την αρχή της δομής του μενού. Αν χρησιμοποιείτε ποντίκι, πληκτρολόγιο ή κάποια άλλη συσκευή εισόδου, θα πρέπει να αποφεύγονται βαθιά εμφωλευμένα στοιχεία μενού. Εκτός επίσης από την επιβάρυνση της απομνημόνευσης του τρόπου εύρεσής τους, είναι πάντα περισσότερο δύσκολη και χρειάζεται χρόνο η πρόσβαση σε αυτά.

- Μην οδηγείτε τους χρήστες σε μη απαραίτητα βήματα. Για παράδειγμα, οι αυτόματοι οδηγοί είναι χρήσιμοι για χρήστες που έχουν πρόβλημα στη διαχείριση μεγάλων αριθμών από επιλογές ταυτόχρονα, αλλά άλλοι χρήστες ενδεχομένως επιθυμούν να ελαχιστοποιήσουν το χρονικό διάστημα ή τις πληκτρολογήσεις που χρησιμοποιούν. Τέτοιου είδους χρήστες ωφελούνται με το να μπορούν να παραβλέπουν βήματα ή να μεταβαίνουν απευθείας στο βήμα που χρειάζονται. Θυμηθείτε να παρέχετε ένα κουμπί Τέλος στους οδηγούς αυτούς το οποίο θα μεβαίνει μέχρι το τέλος και θα θεωρεί τις προεπιλεγμένες απαντήσεις για τα ενδιάμεσα βήματα. Αν η διαδικασία έχει πολλά βήματα. θυμηθείτε να ρωτήσετε το χρήστη στην εκκίνηση αν επιθυμεί να δει όλα τα βήματα, ή απλά να επιλεγούν αυτόματα αυτά που χρησιμοποιούνται πιο συχνά.

#### Πλοήγηση μέσω πληκτρολογίου

Ένα καλώς σχεδιασμένη διεπαφή χρήστη αναπαράγει ένα ρόλο πλήκτρων όταν σχεδιάζεται λογισμικό με προσιτότητα. Τα άτομα που είναι τυφλά μπορούν να πληγηθούν σε ένα λογισμικό πιο αποτελεσματικά χρησιμοποιώντας το πληκτρολόγιο, επειδή η χρήση του ποντικιού εξαρτάται από την οπτική ανάδραση της θέσης του δείκτη του. Επισης, τα προβλήματα κινητικότητας μπορούν να εμποδίσουν ένα χρήστη από την επιτυχή πλοήγηση με χρήση του ποντικιού, επειδή απαιτούνται υψηλές δεξιότητες ελέγχου της κίνησης.

Είναι επομένως σημαντικό να κάνετε διαθέσιμες όλες τις ενέργειες του ποντικιού και μέσω του πληκτρολογίου και, να συμπεριλάβετε την πρόσβαση του πληκτρολογίου σε όλες τις εργαλειοθήκες, τα μενού, τους συνδέσμους και τα κουμπιά. Κάθε συνάρτηση που παρέχει η εφαρμογή σας θα πρέπει να είναι διαθέσιμη χρησιμοποιώντας μόνο το πληκτρολόγιο. Αποκρύψτε το ποντίκι σας ενώ δοκιμάζετε την εφαρμογή αν έτσι πρέπει να κάνετε!

Με περισσότερη λειτουργικότητα θα ήταν πιο εύκολη η προσιτότητα χρησιμοποιώντας απομνημονεύσεις και επιταχυντές πληκτρολογίου, και λειτουργίες πλοήγησης με ενσωματωμένα βοηθήματα. Παρόλα αυτά, λειτουργίες που εξαρτώνται από τη μεταφορά κι απόθεση, για παράδειγμα, ενδεχομένως να απαιτούν περισσότερη συγκέντρωση.

- Παρέχετε αποτελεσματική πρόσβαση μέσω πληκτρολογίου σε όλες τις λειτουργίες της εφαρμογής. Μερικοί χρήστες ενδεχομένως να μη μπορούν να χρησιμοποιήσουν το ποντίκι, και πολλοί "πλήρως ενεργοί χρήστες" προτιμούν να χρησιμοποιούν το πληκτρολόγιο ούτως η άλλως. Επίσης, μερικές ειδικευμένες συσκευές εισόδου τεχνολογίας υποβοήθησης ενδεχομένως προσομοιώνουν συμβάντα του πληκτρολογίου αντί για συμβάντα μέσω του ποντικιού. Επειδή η πληκτρολόγησ είναι δύσκολη ή ακόμη και οδυνηρή για μερικούς χρήστες, είναι σημαντικό να παρέχετε μία διεπαφή πληκτρολογίου που ελαχιστοποιεί το αριθμό πληκτρολογήσεων που απαιτούνται για κάθε δοθείσα εργασία.

- Χρησιμοποιήστε μία λογική σειρά πλοήγησης μέσω πληκτρολογίου. Κατά την πλοήγηση γύρω από ένα παράθυρο με το πλήκτρο Tab, η εστίαση πληκτρολογίου θα μετακινείται μεταξύ ελέγχων σε μία προβλεπόμενη σειρά. Στην δυτική κυρίων εντοπιότητα, αυτό είναι συνήθως από αριστερά προς δεξιά και από πάνω προς τα κάτω.

- Βεβαιωθείτε για την ορθή σειρά καρτελών για ελέγχους των οποίων η ενεργοποιημένη κατάσταση εξαρτάται από ένα πεδίο ελέγχου, ένα κουμπί συχνοτήτων ή μία δήλωση κουμπιού εναλλαγής. Αν είναι επιλεγμένο κάποιο κουμπί τέτοιου είδους, όλοι οι εξαρτώμενοι έλεγχοι θα πρέπει να είναι ενεργοποιημένοι, και όλοι οι εξαρτώμενοι έλεγχοι για κάθε άλλο κουμπί στην ομάδα απενεργοποιημένο αντίστοιχα. Όταν ο χρήστης επιλέγει ένα πεδίο ελέγχου, κουμπί συχνοτήτων ή εναλλαγής που έχει εξαρτώμενους ελέγχους, μη δίνετε αυτόματη εστίαση στον πρώτο εξαρτώμενο έλεγχο, αλλά αντί για αυτό αφήστε την εστίαση στο κουμπί.

- Μην αντικαθιστάτε υπάρχουσες λειτουργίες προσιτότητας για το επίπεδο του συστήματος. Για παράδειγμα, το AccessX είναι μία επέκταση Xserver που δεν υποστηρίζεται από την έκδοση του X11R6. Η λειτουργία Mousekeys της επέκτασης αυτής επιτρέπει την κίνηση του ποντικιού και κλικ κουμπιών να προσομοιώνονται χρησιμοποιώντας το πληκτρολόγιο. Συνεπώς, θα πρέπει να προσθέσετε λειτουργίες στην εφαρμογή που να μπορούν να είναι προσιτές πιέζοντας πλήκτρα στο πληκτρολόγιο, επειδή οι χρήστες που στηρίζονται στη λειτουργία Mousekeys δεν θα μπορούν να τα χρησιμοποιήσουν.

- Παρέχετε περισσότερες από μία μεθόδους για την εφαρμογή εργασιών του πληκτρολογίου όπου είναι δυνατό. Μερικοί χρήστες ενδεχομένως βρίσκουν μερικά πλήκτρα και συνδυασμούς πλήκτρων πιο εύκολα σε χρήση από κάποια άλλα.

- Παρέχετε ταυτόχρονα πρόσβαση μέσω ποντικιού και μέσω πληκτρολογίου όπου είναι δυνατό. Μερικοί χρήστες ενδεχομένως να μπορούν να χρησιμοποιήσουν είτε το ποντίκι είτε το πληκτρολόγιο, αλλά όχι και τα δύο μαζί.

- Μη αναθέτετε αδέξιες εκτάσεις σε λειτουργίες πληκτρολογίου που εκτελούνται συχνά. Μερικά άτομα ενδεχομένως να χρησιμοποιούν μόνο ένα χέρι στο πληκτρολόγιο, έτσι οι συντομεύσεις πληκτρολογίου που μπορούν εύκολα να χρησιμοποιηθούν με ένα χέρι να είναι πιο επιθυμητές για τις κοινές λειτουργίες. Σε κάθε περίπτωση, όταν πρέπει να εκτελείτε συχνά μακρές και δύσκολες εκτάσεις στο πληκτρολόγιο, αυτό μπορεί να αυξήσει τις πιέσεις των μυών για όλους τους χρήστες, αυξάνοντας τον κίνδυνο πόνου και τραυματισμού.

- Μην απαιτείτε επαναλαμβανόμενη χρήση ταυτόχρονων πλήκτρων. Μερικοί χρήστες μπορούν μόνο να πιέζουν και να κρατούν ένα πλήκτρο κάθε φορά. Οι τεχνολογίες υποβοήθηθσης όπως το AccessX ενδεχομένως επιτρέπουν στους χρήστες να πιέζουν τα πλήκτρα διαδοχικά από το να το κάνουν ταυτόχρονα, αλλά αυτό φυσικά σημαίνει ότι ο χρόνος της διαδικασίας θα είναι μεγαλύτερος.

- Βεβαιωθείτε ότι οποιοδήποτε κείμενο που μπορεί να επιλεγεί με το ποντίκι μπορεί επίσης να επιλεγεί με τη χρήση πληκτρολογίου. Αυτό παρέχει μία άνεση για όλους τους χρήστες, αλλά ειδικά για εκείνους των οποίων ο ορθός έλεγχος του ποντικιού είναι δύσκολος.

- Βεβαιωθείτε ότι τα αντικείμενα που μπορούν να αλλάξουν μέγεθος ή να μετακινηθούν με μεταφορά κι απόθεση μπορούν να αλλάξουν μέγεθος και να μετακινηθούν με τη χρήση πληκτρολογίου. Για παράδειγμα, τα εικονίδια και τα παράθυρα στην επιφάνεια εργασίας. Όπου η αλλαγή μεγέθους και η τοποθέτηση με ακρίβεια είναι ενδεχόμενα σημαντικά, π.χ. τα σχήματα σε ένα γράφημα, επίσης θυμηθείτε να παρέχετε ένα διάλογο στον οποίο να μπορείτε να πληκτρολογήσετε τις συντεταγμένες, ή ένα μέσο διαχείρισης αντικειμένων σε ένα πλέγμα που καθορίζεται από το χρήστη.

- Μη χρησιμοποιείτε συναρτήσεις γενικής πλοήγησης για την εκτέλεση λειτουργιών. Για παράδειγμα, μην χρησιμοποιείτε τη βασική πλοήγηση πληκτρολογίου με το πλήκτρο Tab σε ένα διάλογο οποιωνδήποτε ενεργειών που σχετίζονται με έναν έλεγχο.

- Εμφανίστε μενού, παράθυρα, και συμβουλές οθόνης που επικαλέστηκατε με το πληκτρολόγιο, κοντά στο αντικείμενο με το οποίο σχετίζονται. Στο GNOME 2.0, οι χρήστες μπορούν να καλούν αναδυόμενα μενού με το συνδυασμό πλήκτρων Shift F10, και συμβουλές οθόνης με το συνδυασμό Shift F1. Μην αποκρύπτετε εντελώς ή επισκοτίζετε το αντικείμενο στο οποίο αναφέρεται το μενού ή η συμβουλή οθόνης, παράλα αυτά.

#### Χρήση του ποντικιού

Θυμηθείτε δε μπορεί ο καθένας να χρησιμοποιήσει ένα ποντίκι με ισοδύναμη επιδεξιότητα και ότι μερικοί χρήστες ενδεχομένως να μην μπορούν να δουν ή να ακολουθήσουν το δείκτη του ποντικιού.

- Μην εξαρτάστε από την εισαγωγή του κουμπιού 2 ή 3 του ποντικιού. Εκτός επίσης από το πιο δύσκολο φυσικό κλικ, μερικές συσκευές ένδειξης και πολλές συσκευές τεχνολογίας υποβοήθησης υποστηρίζουν μόνο το κουμπί 1. Μερικές τεχνολογίες υποβοήθησης δεν υποστηρίζουν καθόλου το ποντίκι, αλλά αντί για αυτό χρησιμοποιούν το πληκτρολόγιο.

- Επιτρέψτε σε όλες τις λειτουργίες του ποντικιού να μπορούν να ακυρωθούν. Πιέζοντας το πλήκτρο Esc θα μπορούσε να ακυρωθεί οποιαδήποτε λειτουργία του ποντικιού που βρισκόταν σε εξέλιξη, όπως η μεταφορά κι απόθεση σε ένα διαχειριστή αρχείων , ή η σχεδίαση ενός σχήματος σε ένα πρόγραμμα σχεδίασης.

- Παρέχετε οπτική ανάδραση κατά τη διάρκεια της λειτουργίας μεταφοράς κι απόθεσης. Ενώ το ποντίκι διέρχεται πάνω από έγκυρους προορισμούς, τους επισημαίνει και τροποποιείται ο δείκτης του. Χρησιμοποιήστε το δείκτη του ποντικιού για "μη μεταφορά" όταν διέρχεται πάνω από μη έγκυρους προορισμούς για μεταφορά. Δείτε τα Παραδείγμα ανάδρασης ποντικιού.

- Μην μετατρέπετε το δείκτη του ποντικιού, ή περιορίζετε την κίνησή του σε ένα μέρος της οθόνης. Αυτό θα συγκρουστεί με τις τεχνολογίες υποβοήθησης, και συνήθως μπερδεύει ακόμη και χρήστς που δεν εξαρτώνται από ΑΤ.

- Μην κατασκευάζετε τους προορισμούς του ποντικιού πολύ μικρόυς. Γενικά, οι προορισμοί του ποντικιού θα πρέπει να έχουν τουλάχιστον το μέγεθος της "ενεργής περιοχής" γύρω από το προσαρμόσιμο περίγραμμα παραθύρου στον τρέχοντα διαχειριστή παραθύρων ή θέμα - έχοντας κατά νου ότι ένας χρήστης με μειωμένη επιδεξιότητα ή όραση ενεδεχομένως να χρησιμοποιεί ένα διαχειριστή παραθύρων με μεγάλες περιοχές από το προεπιλεγμένο μέγεθος.

##### Παραδείγματα σχετικά με τη χρήση του ποντικιού

###### Παράδειγμα δείκτη "no-drop" από CDE/Motif

Παράδειγμα ενός σχήματος δείκτη "μη έγκυρος προορισμός για μεταφορά"

#### Γραφικά στοιχεία

Παρέχετε επιλογές προσαρμογής της παρουσίασης όλων των σημαντικών γραφικών στοιχείων στην εφαρμογή σας. Αυτό θα το κάνει πιο εύκολο στη χρήση για άτομα με προβλήματα όρασης ή γνωστικές διαταραχές.

- Μην δίνετε σταθερή κωδικοποίηση σε γραφικά στοιχεία όπως μία γραμμή, περίγραμμα ή πάχος σκιάς. Αυτά τα στοιχεία θα πρέπει ιδανικά να φορτώνονται από το GTK ή το θέμα του διαχειριστή παραθύρων. Αν αυτό δεν είναι δυνατό. παρέχετε επιλογές μέσω της εφαρμογής σας για τροποποίησή τους.

- Παρέχετε περιγραφικά ονόματα για όλα τα περιεχόμενα της διεπαφής. Η βιβλιοθήκη GAIL παρέχει προεπιλεγμένες προσιτές περιγραφές για πολλά γραφικά συστατικά GTK, αλλά ακόμη και τότε θα απαιτείται η προσθήκη των δικών σας σε μερικές περιπτώσεοις, όπως για γραφικά συστατικά αντί για κείμενο (π.χ. μία πολύχρωμη παλέτα, ή ένα εικονίδιο χωρίς ετικέτα). Θυμηθείτε να αντικαταστήσετε τις προεπιλογές με πιο βοηθητικές ή πιο ειδικευμένες περιγραφές για την εφαρμογή σας όπου αυτό είναι δυνατό.

- Επιτρέψτε σε πολύχρωμα γραφικά στοιχεία (π.χ. εικονίδια εργαλειοθήκης) να εμφανίζονται μόνο με ένα χρώμα, αν αυτό είναι δυνατό. Αυτές οι μονόχρωμες εικόνες θα εμφανίζονται στα χρώματα προσκηνίου και παρασκηνίου του συστήματος, τα οποία έχει επιλέξει ο χρήστης (με επιλογή του θέματος GTK) για μέγιστη ευκρίνεια.

- Κατασκευάστε αλληλεπιδραστικά στοιχεία περιβάλλοντος που να είναι εύκολα αναγνωρίσιμα. Για παράδειγμα, μην αναγκάσετε το χρήστη να περνά το ποντίκι του πάνω από ένα αντικείμενο για να αναγνωρίσει αν μπορεί να γίνει κλικ πάνω του ή όχι. Αφήστε επαρκές διάστημα μεταξύ αντικειμένων και καθαρά οριοθετημένα όρια αντικειμένων. Μην προβάλλετε στοιχεία περιβάλλοντος που φαίνονται αρκετά καλαίσθητα αλλά στην πραγματικά δεν έχουν κανένα αποτέλεσμα, εκτός κι παρέχετε επίσης μία επιλογή απενεργοποίησής τους.

- Παρέχετε μία επιλογή απόκρυψης που δεν μεταφέρει πολύ σημαντικές πληροφορίες. Οι γραφικές εικόνες μπορούν να αποσπούν την προσοχή των χρηστών σε μερικές γνωστικές διαταραχές. Τα εικονίδια στο μενού του GNOME, για παράδειγμα, μπορούν να απενεργοποιηθούν ενώ εξακολουθεί να αφήνεται το μενού πλήρως λειτουργικό.

#### Γραμματοσειρές και κείμενο

Ακόμα και για ένα χρήστη με κανονική όραση, η αναλυτική έξοδος παρέχει την πλειοψηφία των πληροφοριών και της ανάδρασης στις περισσότερες εφαρμογές. Είναι συνεπώς κρίσιμο όσον αφορά την επιλογή και την ορθή τοποθέτηση του κειμένου στην οθόνη, και τη δυνατότητα επιλογής γραμματοσειράς και μεγέθους για το χρήστη, ώστε να βεβαιωθείτε ότι άτομα με προβλήματα όρασης μπορούν επίσης να χρησιμοποιούν αποτελεσματικά την εφαρμογή σας.

- Μην κωδικοποιείτε σταθερά τύπους και μεγέθη γραμματοσειρών. Ο χρήστης θα είναι ικανός να προσαρμόσει όλα τα μεγέθη και τις γραμματοσειρές. Αν για κάποιο λόγο δεν μπορείτε να κάνετε διαθέσιμη αυτή τη λειτουργικότητα, ποτέ να μην κωδικοποιείτε σταθερά μεγέθη γραμματοσειρών μικρότερα από 10 πόντους.

- Παρέχετε επιλογές για την απενεργοποίηση των γραφικών σκηνικών ή των "υδατογραφημάτων" πίσω από το κείμενο. Τέτοιες εικόνες παρεμβαίνουν με την αντίθεση μεταξύ του κειμένου και του παρασκηνίου του, το οποίο μπορεί να προκαλέσει δυσκολία για χρήστες με προβλήματα όρασης.

- Προσθέστε ετικέτες σε αντικείμενα με ονόματα τα οποία έχουν σημασία όταν εξέρχονται από το περιεχόμενο. Οι χρήστες που στηρίζονται σε αναγνώστες οθόνης ή παρόμοιες τεχνολογίες υποβοήθησης δεν θα μπορούν απαραίτητα να καταλάβουν άμεσα τη σχέση μεταξύ ενός ελέγχου και του τμήματος που το περιβάλλει.

- Μην χρησιμοποιείτε την ίδια ετικέτα περισσότερο από μία φορά στο ίδιο παράθυρο. Αν χρησιμοποιείτε την ίδια ετικέτα σε διαφορετικά παράθυρα, θα σας βοηθήσει αν αυτό σημαίνει το ίδιο πράγμα και στα δύο παράθυρα. Επίσης, μην χρησιμοποιείτε ετικέτες που συλλαβίζονται διαφορετικά αλλά βγάζουν τον ίδιο ήχο,, π.χ. στα αγγλικά οι λέξεις "Read" και "Red", επειδή αυτό θα αποπροσανατόλιζε τους χρήστες που στηρίζονται σε αναγνώστες οθόνης.

- Τοποθετήστε με συνέπεια ετικέτα στην εφαρμογή σας. Αυτό τυπικά σημαίνει απευθείας κάτω από μεγάλα εικονίδια, απευθείας στα δεξιά των μικρών, και απευθείας πάνω ή στα αριστερά των άλλων ελέγχων. Δείτε τα Παραδείγματα γραμματοσειρών και κειμένου.

- Όταν χρησιμοποιείτε στατικό κείμενο σε ετικετά για έναν έλεγχο, τελειώστε την ετικέτα με μία άνω-κάτω τελεία. Για παράδειγμα, το Όνομα χρήστη: για την εισαγωγή ετικέτα στο πεδίο κειμένου όπου ο χρήστης θα πληκτρολογήσει το όνομα χρήστη. Αυτό θα τον βοηθήσει να το αναγνωρίσει ως ετικέτα ελέγχου αντί για ένα ανεξάρτητο στοιχείο κειμένου.

- Όταν χρησιμοποιείτε στατικό κείμενο σε ετικετά για έναν έλεγχο, βεβαιωθείτε ότι η ετικέτα προηγείται άμεσα από τον έλεγχο αυτό στην σειρά της καρτέλας. Αυτό θα σας βεβαιώσει ότι η απομνημόνευση (υπογραμμισμένος χαρακτήρας) που ανατίθεται στην ετικέτα θα μετακινήσει την εστίασης ή θα ενεργοποιήσει το σωστό έλεγχο όταν την πιέσετε.

- Παρέχετε εναλλακτικές λύσεις με το πρότυπο WYSIWYG. Μερικοί χρήστες ενδεχομένως χρειάζονται να εκτυπώσουν κείμενο σε μία μικρή γραμματοσειρά αλλά να το επεξεργαστούν σε μία μεγαλύτερη γραμματοσειρά οθόνης, για παράδειγμα. Πιθανές εναλλακτικές λύσεις περιλαμβάνουν την προβολή όλου του κειμένου στην ίδια γραμματοσειρά και μέγεθος (και οι δύο επιλέγονται από το χρήστη), μία επιλογή "αναδίπλωσης στο παράθυρο" που σας επιτρέπει να κάνετε ανάγνωση όλου του κειμένου σε ένα παράθυρο χωρίς να κάνετε κύλιση οριζόντια, μία απλή προβολή στηλών που εμφανίζει τα περιεχόμενα του παραθύρου σε μία απλή στήλη ακόμη κι αν εκτυπωθούν σε πολλαπλές στήλες και, μία προβολή μόνο με κείμενο, όπου τα γραφικά στοιχεία εμφανίζονται σε ένα πεδίο υπόδειξης ή με περιγραφές κειμένου. Αν η εφαρμογή έχει πλαίσια με θυγατρικούς ελέγχους, θυμηθείτε να επιτρέπετε στα πλαίσια να αλλάζουν μέγεθος κατά μήκος του γονικού παραθύρου.

##### Παραδείγματα γραμματοσειρών και κειμένου

###### Ορθή τοποθέτηση ετικετών για διάφορα στοιχεία περιβάλλοντος

Κατηγοριοποίηση ελέγχου με ετικέτα από πάνω Κατηγοριοποίηση ελέγχου με ετικέτα από πάνω | Μεγάλο εικονίδιο διαχειριστή αρχείων με ετικέτα από κάτω Μεγάλο εικονίδιο διαχειριστή αρχείων με ετικέτα από κάτω | Μικρό εικονίδιο εργαλειοθήκης με ετικέτα στα δεξιά του Μικρό εικονίδιο εργαλειοθήκης με ετικέτα στα δεξιά του | Περιστρεφόμενος έλεγχος με ετικέτα στα αριστερά του Περιστρεφόμενος έλεγχος με ετικέτα στα αριστερά του

#### Χρώματα και αντίθεση

Η λιττή επιλογή χρωμάτων στην οθόνη ενδεχομένως προκαλέσει προβλήματα σε χρήστες με αχρωματοψία (για τους οποίους η απόχρωση είναι σημαντική) ή με χαμηλό επίπεδο όραση (για τους οποίους η φωτεινότητα/αντίθεση είναι σημαντική). Γενικά, θα πρέπει να επιτρέπετε στο χρήστη να προσαρμόζει τα χρώματα σε οποιοδήποτε τμήμα της εφαρμογής σας που μεταφέρει σημαντικές πληροφορίες.

Οι χρήστες με προβλήματα όρασης ενδεχομένως απαιτούν ένα υψηλό επίπεδο αντίθεσης μεταξύ των χρωμάτων παρασκηνίου και κειμένου. Συχνά ένα μαύρο παρασκήνιο και το λευκό κείμενο χρησιμοποιείται για να αποτρέψει την "σύγχυση". Αυτέ οι ρυθμίσεςι είναι κρίσιμες για χρήστες με προβλήματα όρασης.

- Μην κωδικοποιείτε σταθερά τα χρώματα της εφαρμογής. Μερικοί χρήστες χρειάζονταινα χρησιμοποιήσουν συγκεκριμένους συνδυασμούς χρωμάτων αντίθεσης για να μπορούν να αναγνώσουν την οθόνη με άνεση. Συνεπώς όλα τα κύρια χρώματα που χρησιμοποιείτε στην εφαρμογή GNOME θα πρέπει να προέρχονται από το θέμα GTK, έτσι ώστε ο χρήστης να μπορείς ρυθμίσεςι τα χρώματα για όλες τις εφαρμογές του σε κάτι ευανάγνωστο απλά αλλάζοντας το θέμα. Αν για κάποιο λόγο χρειάζεστε να χρησιμοποιήσετε χρώματα που δεν είναι διαθέσιμα στο θέμα, βεβαιωθείτε ότι είναι προσαρμόσιμα εντός της εφαρμογής.

- Μην χρησιμοποιείτε το χρώμα ως το μόνο μέσο για τη διάκριση στοιχείων από πληροφορίες. Όλες αυτές οι πληροφορίες θα παρέχονται από τουλάχιστον άλλη μία μέθοδο, όπως το σχήμα, η θέση ή η αναλυτική περιγραφή. Δείτε τα Παραδείγματα χρωμάτων και υψηλής αντίθεσης.

- Υποστηρίξτε όλα τα θέματα υψηλής αντίθεσης του GNOME. Βεβαιωθείτε ότι όταν επιλέγεται ένα από αυτά τα θέματα, όλο το κείμενο στην εφαρμογή σας εμφανίζεται στο προσκήνιο με υψηλή αντίθεση και στα χρώματα του παρασκηνίου που καθορίστηκαν από το θέμα.

- Βεβαιωθείτε ότι η εφαρμογή σας δεν εξαρτάται από ένα συγκεκριμένο θέμα υψηλής αντίθεσης. Ελέγξτε το με διαφορετικά θέματα υψηλής αντίθεσης για να βεβαιωθείτε ότι η εφαρμογή σας διατηρεί τις ρυθμίσεις.

##### Παραδείγματα σχετικά με τα χρώματα και την αντίθεση

###### Παράδειγμα αποτύπωσης της περιττής χρήσης χρώματος

Παράδειγμα που εμφανίζει τις αλλαγές στην τιμή χρησιμοποιώντας μόνο χρώμα | Αυτή η προβολή θα μπορούσε να προκαλέσει προβλήματα για έναν χρήστη που έχει αχρωματοψία σε κόκκινο-πράσινο (η αχρωματοψία πλήττει 1 από τους 7 άνδρεας σε μερικά μέρη του κόσμου). Η έλλειψη της αντίθεσης μεταξύ του κόκκινου κειμένου και του μαύρου παρασκηνίου θα μπορούσε επίσης να κάνει δύσκολη την ανάγνωση από ένα χρήστη με χαμηλή όραση, ακόμα και με ένα μεγεθυντή οθόνης.
Παράδειγμα προβολής των αλλαγών στην τιμή χρησιμοποιώντας χρώματα και βέλη | Αυτή η προβολή ενισχύει την κωδικοποίηση χρωμάτων με βέλη για την προβολή της κίνησης της τιμής, και χρησιμοποιεί πιο σκοτεινές σκιές του πράσινου και του κόκκινου χρώματος σε ένα παρασκήνιου πιο ανοικτού χρώματος για να παρέχει έτσι υψηλότερη αντίθεση. Αυτό δεν χρειάζεται να είναι το προεπιλεγμένο σχήμα χρωμάτων αν ο έλεγχος ήταν η εμφάνισή του να είναι πιο διασπαστική για την πλειοψηφία χρηστών, αλλά θα πρέπει να είναι δυνατή η προσαρμογή της με αυτόν τον τρόπο είτε αλλάζοντας θέμα είτε μέσω του διαλόγου Ρυθμίσεις της εφαρμογής.

#### Μεγέθυνση

Πολλοί χρήστες, ακόμη κι εκείνοι που δεν έχουν προβλήματα όρασης, ωφελούνται από αυτή τη μεγέθυνση του κειμένου και των γραφικών. Παρόλα αυτά, χωρίς μεγέθυνση, ένας χρήστης με προβλήματα όρασγης ενδεχομένως να μην μπορεί να έχει πρόσβαση και να χρησιμοποιήσει καθόλου το πρόγραμμα.

- Παρέχετε στο χρήστη τη δυνατότητα μέγεθυνσης της περιοχής εργασίας.

- Παρέχετε επιλογές στην εφαρμογή για κλιμάκωση της περιοχής εργασίας. Οι χρήστες πρέπει να έχουν μία επιλογή για μεγέθυνση της περιοχής εργασίας από 150% μέχρι 400% ή περισσότερο. Δοκιμάστε την εφαρμογή για να επιβεβαιώσετε ότι το αντικείμενο που προβάλετε δεν επηρεάζεται από την αλλαγή των ρυθμίσεων μεγέθυνσης.

#### Ήχος

Τα άτομα που έχουν προβλήματα ακοής, όπως επίσης κι εκείνα που εργάζονται με κλειστό τον ήχο στον υπολογιστή, θα βρεθούν σε μειονεκτική θέση αν η εφαρμογή σας στηρίζεται στον ήχο για τη μεταφορά πληροφοριών. Γενικά, βεβαιωθείτε ότι ο χρήστης μπορεί να έχει οποιεσδήποτε ηχητικές πληροφορίες που θα μεταφέρονται με άλλους τρόπους.

- Μην θεωρήσετε ότι ένας χρήστης θα ακούσει σίγουρα τις πληροφορίες ήχου. Αυτό συμβαίνει σε χρήστες που έχουν προβλήματα με την καρτα ήχου τους όπως επίσης και σε χρήστες με προβλήματα όρασης!

- Μην χρησιμοποιείτε ήχο ως το μόνο μέσο μεταφοράς πληροφοριών. Δώστε στο χρήστη την επιλογή να έχει όλες τις πληροφορίες ήχου που παρέχονται με οπτικό τρόπο επίσης. Αυτό περιλαμβάνει την παροχή κλεισμένων λεζάντων ή μεταγραφών για οποιαδήποτε σημαντικά ομιλούντα ηχητικά αποσπάσματα βίντεο.

- Επιτρέψτε στους χρήστες να ρυθμίζουν τη συχνότητα και την ένταση όλων των μπιπ ειδοποιήσεων και άλλων ήχων. Αυτό περιλαμβάνει τη δυνατότητα απενεργοποίησης όλων των ήχων μαζί.

#### Κινούμενες εικόνες

Αν χρησιμοποιούνται με φειδώ, τα εφέ κίνησης μπορούν να είναι χρήσιμα για προσθήκη μεγαλύτερης σημασίας σε σημαντικές πληροφορίες στην εφαρμογή σας - και μπορούν να είναι καλαίσθητα, επίσης. Παρόλα αυτά, μπορούν να είναι προβληματικά για μερικούς χρήστες, έτσι βεβαιωθείτε ότι μπορούν να απενεργοποιούνται.

- Μην χρησιμοποιείτε αντικείμενα που αναβοσβηνουν με κάποια συχνότητα μεγαλύτερη από 2 Hz ή μικρότερη από 55 Hz. Αυτό περιλαμβάνει κείμενο όπως επίσης γραφικά αντικείμενα. Οτιδήποτε σε αυτό το εύρος συχνοτήτων ενδεχομένως να προκαλέσει ιδιαίτερα προβλήματα για χρληστης ευπαθείς σε καταλήψεις που προκαλούνται από την όραση. Σημειώστε ότι δεν υπάρχει "ασφαλής" συχνότητα, παρόλα αυτά. Αν πρέπει να αναβοσβήνουν, θα πρέπει να χρησιμοποιήσετε τη συχνότητα του δείκτη του συστήματος (η οποία θα πρέπει να είναι προσαρμόσιμη), ή να επιτρέπετε στους χρήστες να ρυθμίζουν τη συχνότητα μόνοι τους.

- Μην χρησιμοποιείτε αναλαμπές σε μεγάλες περιοχές της οθόνης. Οι μικρές περιοχές είναι λιγότερο πιθανές για πρόκληση καταλήψεων στους ευπαθείς χρήστες.

- Κάντε προαιρετικά όλα τα εφέ κίνησης. Οι πληροφορίες των οπτικών εφέ θα πρέπει να είναι διαθέσιμες σε τουλάχιστον μία μορφοποίηση χωρίς εφέ κίνησης, όταν το ζητήσει ο χρήστης.

#### Εστίαση πληκτολογίου

Είναι σημαντικό να εμφανίζεται η θέση της εστίασης πληκτρολογίου όλες τις φορές, και για χρήστες με προβλήματα όρασης όπως επίσης και με πιο "ενεργούς χρήστες" που προτιμούν να χρησιμοποιήσουν το πληκτρολόγιο αντί για το ποντίκι. Δεν πρέπει να υπάρχει σύγχυση όσον αφορά τον έλεγχο στην επιφάνεια εργασίας που θα έχει εστίαση σε οποιοδήποτε χρόνο. Θα πρέπει να μπορεί να αφήνετε τον υπολογιστή σας με την εστίαση σε οποιοδήποτε γραφικό συστατικό στην εφαρμογή σας, ύστερα να βγαίνετε έξω και να μιλάτε στο τηλέφωνο με τη φιλενάδα σας ή να βγάλετε περίπατο το σκύλο σας μέχρι να ξεχάσετε ποιο γραφικό συστατικό έχετε αφήσει ενεργοποιημένο. Όταν επιστρέψετε, θα πρέπει να μπορείτε να διακρίνετε άμεσα ακριβώς ποιο γραφικό συστατικό ήταν αυτό.

Μία ένδειξη οπτικής εστίασης είναι μία παρουσίαση με ήχο της θέσης του δρομέα που είναι σχετικό με άλλα αντικείμενα στην επιφάνεια εργασίας. Αυτό επιτρέπει στο χρήστη να μετακινείται ανάμεσα στα αντικείμενα αλληλεπιδραστικά όπως οι αλλαγές εστίασης. Η οπτική εστίαση πρέπει να εκτίθεται με προγραμματισμό στις τεχνολογίες υποβοήθιησης. Σημειώστε ότι στις περισσότερες περιπτώσεις, αυτό μπορεί να προσαρμοστεί αυτόματα από το ATK, χωρίς να απαιτείται οποιαδήποτε επιπρόσθετη εργασία. Παρόλα αυτά, θα πρέπει να γνωρίζετε αυτήν την απαίτηση κατά την σύνθεση των δικών σας προσαρμοσμένων γραφικών συστατικών, για παράδειγμα.

- Εκκινήστε την εστίαση στον πιο συχνά χρησιμοποιημένο έλεγχο. Αν κανένας έλεγχος σε ένα παράθυρο δεν έχει οριστεί σαν το "πιο" χρήσιμο, εκκινήστε την εστίαση στον πρώτο έλεγχο στο παράθυρο όταν εκείνο το παράθυρο ανοίγεται. Η εστίαση δεν θα πρέπει να εκκινείται στα κουμπιά Εντάξει ή Ακύρωση ενός διαλόγου ακόμη κι αν αυτοί είναι οι πιο συχνοί χρησιμοποιημένοι έλεγχοι, επειδή αυτά μπορούν πάντα να ενεργοποιούνται πιέζονται το πλήκτρο Enter ή το Escape.

- Εμφανίστε την τρέχουσα εστίαση εισόδου ξεκάθαρα όλες τις φορές. Θυμηθείτε ότι σε λεέγχους που περιλαμβάνουν ένα στοιχείο με κύλιση, δεν είναι πάντα επαρκής η επισήμανση απλά του επιλεγμένου αντικειμένου μέσα στην περιοχή κύλισης, επειδή ενδεχομένως να μην είναι ορατό. Δείτε τα Παραδείγματα εστίασης πληκτρολογίου.

- Εμφανίστε την εστίαση εισόδου μόνο στο ενεργό παράθυρο. Αποκρύψτε όλες τις ενδείξης της πρωτεύουσας οπτικής εστίασης σε όλα τα παράθυρα που δεν έχουν εστίαση και ενεργοποίηση. Αν ένα απλό παράθυρο έχει ξεχαριστά πλαίσια, μόνο ένα πλαίσιο θα έχει την ένδειξη εστίασης, και οι ενδείξεις εστίασης θα αποκρύπτονται σε όλα τα άλλα πλαίσια. Αν είναι σημαντικό να συνεχίσετε την προβολή του στοιχείου που επιλέχθηκε σε μία λίστα χωρίς εστίαση, για παράδειγμα, χρησιμοποιήστε μία δευτερεύουσα ένδειξη εστίασης. Δείτε τα Παραδείγματα εστίασης πληκτρολογίου.

- Παρέχετε κατάλληλη ανάδραση όταν ο χρήστης προσπαθεί να πλοηγηθεί μέχρι το τέλος μία ομάδας σχετικών αντικειμένων. Κατά την πλοήγηση σε μία λίστα, για παράδειγμα, η διακοπή με ανάδραση ήχου είναι συνήθς προτιμητές για τη μετακίνηση της εστίασης πίσω στο πρώτο αντικείμενο στη λίστα. Ειδάλλως, οι χρήστες που είναι τυφλοί ή έχουν χαμηλό επίπεδο όρασης ίσως δεν αναγνωρίσουν ότι έχουν επιστρέψει στην αρχή. Στην περίπτωση μίας αναζήτησης κειμένου σε ένα έγγραφο, ενδεχομένως αναδυθεί ένας διάλογος που θα δείχνει ότι το τέλος του εγγράφου έχει φτάσει, και θα σας ρωτάει αν επιθυμείτε η αναζήτηση να επιστρέψει στην αρχή του εγγράφου.

- Αναπαράγετε τον προεπιλεγμένο ήχο ή το σήμα προειδοποίησης του συστήματος όταν ο χρήστης πιέζει ένα μη κατάλληλο πλήκτρο, ή όταν ένα πλήκτρο πλοήγησης αποτυγχάνει να μετακινήσει την εστίαση. Για παράδειγμα, όταν η εστίαση είναι στον πρώτο χαρακτήρα σε ένα πεδίο κειμένου και ο χρήστης πιέζει το πλήκτρο του αριστερού βέλους, ή προσπαθεί να κάνει μία πολλαπλή επιλογή σε ένα διάλογο επιλογής. (Σημειώστε ότι χρήστες με προβλήματα ακοής θα πρέπει να μπορούν να προσαρμόσου. ένα ισοδύναμο οπτικά με το σύστημα σε σχέση με τον ήχο προειδοποίησης.)

##### Παραδείγματα εστίασης πληκτρολογίου

###### Παράδειγμα αποτύπωσης της ανάγκης για εμφάνιση καθαρής εστίασης

Το εστιασμένο στοιχείο σε αυτό το παράθυρο δε διακρίνεται επειδή έχει γίνει κύλιση έξω από την οθόνη | Ένας από τους ελέγχους σε αυτό το παράθυρο έχει εστιαστεί, αλλά είναι αδύνατο να διακρίνουμε ποιος…
Το εστιασμένο αντικείμενο στη λίστα έχει γίνει ορατό κάνοντας κύλιση της λίστας | …μέχρι να κυλίσετε τη λίστα, το οποίο αποκαλύπτει ότι ένα από τα στοιχεία είναι επιλεγμένο.
Ο έλεγχος της λίστας σε αυτό το παράδειγμα έχει ένα συμπαγές περίγραμμα που αμαδεικνύει την εστίαση, όταν το επιλεγμένο του αντικείμενο είναι ορατό ή όχι | Αν ο έλεγχος λίστας δίνεται ως ένα "εστιασμένο" περίγραμμα, είναι εύκολο να συμπεράνουμε ότι έχει εστίαση ακόμη κι όταν το επιλεγμένο στοιχείο δεν είναι ορατό.

###### Παράδειγμα αποτύπωσης της χρήσης δευτερεύουσας εστίασης

Παράθυρο που έχει διαχωριστεί στο οποίο τα πλαίσια φαίνονται εστιασμένα | Στο παράδειγμα αυτό, είναι αδύνατο να βγάλουμε συμπέρσμα απλά κοιτώντας ποιο από τα δύο πλαίσια έχει πραγματικά εστίαση πληκτρολογίου.
Παράθυρο το οποίο διαχωρίστηκε στο οποίο η δευτερεύουσα επισήμανση χρησιμοποιείται για την εμφάνιση του πλαισίου που έχει εστίαση | Χρησιμοποιώντας ένα χρώμα δευτερεύουσας επισήμανσης της επιλογής στο μη ενεργό πλαίσιο, είναι άμεσα φανερό ότι ο έλεγχος του δέντρου έχει εστίαση εδώ…
Παράθυρο το οποίο διαχωρίστηκε στο οποίο η δευτερεύουσα επισήμανση χρησιμοποιείται για την εμφάνιση του πλαισίου που έχει εστίαση | ...και ότι ο έλεγχος λίστας έχει εστίαση εδώ.

#### Συγχρονισμός

Διεπαφές στις οποίες εμφανίζονται όλα τα πράγμτα, εξαφανίζονται ή συμβαίνουν σύμφωνα με κάποιο όριο χρόνου με σταθερή κωδικοποίηση, αποτελούν συχνά ένα εμπόδιο στην προσιτότητα. Μερικοί χρήστες ενδεχομένως κάνουν ανάγνωση, πληκτρολογούν ή αντιδρούν πολύ αργά σε σύγκριση με άλλους. Αν οι πληροφορίες που απαιτούν αποκρύπτονται πριν οι χρήστες προλάβουν να τιςδουν, ή επικαλύπτονται από άλλες πληροφορίες που αναδύονται οι οποίες δεν ζητήθηκαν ρητά, τότε η εφαρμογή σας θα γίνει πολύ απογοητευτική ή ακόμη και αδύνατη σε χρήση.

- Μην κωδικοποιείτε σταθερά διακοπές ή άλλες λειτουργίες που βασίζονται στο χρόνο. Τα παραδείγματα περιλαμβάνουν αυτόματη κύλιση κατά τη μεταφορά ενός αντικειμένου προς την άκρη του πραθύρου, ενώ κρατάτε πατημένο το κουμπί κύλισης, ή επεκτείνετε αυτόματα έναν κόμβο δένδρου όταν ένα αντικείμενο μεταφέρεται πάνω του και στέκεται εκεί για ένα μικρό διάστημα χρόνου. Αυτά θα πρέπει είτε να είναι προσαρμόσιμα στην εφαρμογή, το κέντρου ελέγχου του GNOME, ή στη χειρότερη περίπτωση, να μπορεί να επεξεργαστεί χειροκίνητα από τη γραμμή εντολών μέσω ενός αρχείου ρυθμίσεων ή μίας εισόδου GConf.

- Μην εμφανίζετε με σύντομο τρόπο αποκρύπτετε πληροφορίες που βασίζονται στην κίνηση του δείκτη του ποντικιού (Εξαίρεση: λειτουργίες που παρέχονται από το σύστημα όπως οι συμβουλές, τις οποίες ο χρήστης μπορεί να ρυθμίσει σε ένα ευρύ επίπεδο συστήματος). Αν πρέπει να παράχετε τέτοιες λειτουργίες, να τις έχετε προαιρετικές έτσι ώστε οι χρήστες να μπορούν να της απενεργοποιούν όταν είναι εγκατεστημένη μία λειτουργία προεπισκόπησης οθόνης.

#### Τεκμηρίωση

Τα άτομα με ανικανότητες δεν μπορούν να χρησιμοποιήσουν αποτελεσματικά την εφαρμογή αν δεν έχουν πρόσβαση στα απαιτούμενα αρχεία εγχειριδίων και βοήθειας. Ιδιαίτερης σημασίας είναι η πλοήγηση μέσω πληκτρολογίου, επειδή είναι ο μόνος τρόπος με τον οποίο πολλοί χρήστες πλοηγούνται στην εφαρμογή.

- Παρέχετε όλη την τεκμηρίωση σε μία προσιτή μορφή. Οι μορφοποιήσεις σε κείμενο ASCII και HTML είναι εξαιρετικές για τεχνολογίες υποβοήθησης.

- Παρέχετε εναλλακτικές περιγραφές κειμένου για όλα τα γραφικά στοιχεία στην τεκμηρίωση.

- Τεκμηριώστε όλες τις λειτουργίες προσιτότητας της εφαρμογής σας. Η πλοήγηση μέσω πληκτρολογίου και οι συντομεύσεις είναι ιδιαίτερα σημαντικά για την τεκμηρίωση. Συμπεριλάβετε μία ενότητα προσιτότητας στην τεκμηρίωσή σας, όπου μπορούν να βρεθούν πληροφορίες για όλες τις λειτουργίες προσιτότητας.

## Δοκιμές

Αυτά είναι μερικά σημεία προβολής για τη διεξαγωγή πριν δηλώσετε ότι μία εφαρμογή είναι προσιτή. Πάνω από το μάθημα της ανάπτυξης λογισμικού ενδεοχμένως πρέπει να εφαρμόσετε αυτοματοποιημένες τεχνικές ελέγχου. Το Dogtail, για παράδειγμα, ενδεχομένως να συμπληρώσει το αυτοματοποιημένο σχέδιο ελέγχου σας.

Η ενότητα αυτή περιγράφει ένα αριθμό ελέγχων που μπορείτε να εφαρμόσετε χειροκίνητα σε μία εφαρμογή για να ελέγξτε την προσιτότητά της. Επιτυγχάνοντας σε όλους τους ελέγχους δε σημαίνει απαραίτητα ότι η εφαρμογή είναι πλήρως προσιτή, αλλά αν η εφαρμογή αποτύχει σε όλους αυτούς τους ελέγχος, τότε χρειάζεται περισσότερη δουλειά ώστε να βελτιωθεί το θέμα της προσιτότητας.

### Πλοήγηση μέσω πληκτρολογίου

Οι ακόλουθες λειτουργίες πληκτρολογίου θα πρέπει να ελεγχθούν. Μην χρησιμοποιήσετε το ποντίκι σε κανένα τμήμα αυτού του ελέγχου.

- Χρησιμοποιώντας μόνο εντολές πληκτρολογίου, μεταινήστε την εστίαση διαμέσουν όλων των γραμμών του μενού στην εφαρμογή.

- Επιβεβαιώστε ότι:

  - Εμφανίζονται σωστά τα ευαίσθητα μενού περιεχομένων.

  - Μπορούν να εφαρμοστούν οποιεσδήποτε συναρτήσεις που υπάρχουν στην εργαλειοθήκη χρησιμοποιώντας το πληκτρολόγιο.

  - Μπορείτε να χρησιμοποιήσετε κάθε στοιχείο ελέγχου στην περιοχή πελάτη της εφαρμογής και των πεδίων διαλόγου.

  - Μπορούν να επιλεγούν κείμενο και αντικείμενα μέσα στην περιοχή του πελάτη.

  - Όλες οι λειτουργίες ή οι συντομεύσεις πληκτρολογίου δουλεύουν όπως σχεδιάστηκαν.

### Γραφικά στοιχεία

Δοκιμάστε την εφαρμογή χρησιμοποιώντας έναν αναγνώστη οθόνης και επιβεβαιώστε ότι:

- Οι ετικέτες και το κείμενο φορτώνονται ορθά, καθώς επίσης τα μενού και οι εργαλειοθήκες.

- Οι πληροφορίες αντικειμένων φορτώνονται σωστά.

### Ένδειξη οπτικής εστίασης

- Επιβεβαιώστε ότι η ένδειξη οπτικής εστίασης είναι εύκολο να αναγνωριστεί όταν γίνεται κίνηση μεταξύ αντικειμένων.

- Η πλοήγηση πληκτρολογίου μέσω του λογισμικού και των μενού θα πρέπει να είναι φανερά ορατή όταν η εστίασης μετακινείται.

- Επιβεβαιώστε ότι ο αναγνώστης οθόνης ανιχνεύει την ένδειξη της οπτικής εστίασης ενώ κάνετε πλοήγηση χρησιμοποιώντας το πληκτρολόγιο.

- Εκτελέστε ένα πρόγραμμα μεγέθυνσης οθόνης (αν είναι διαθέσιμο) και επιβεβαιώστε ότι η μεγέθυνση μπορεί να ανιχνεύσει την ένδειξη οπτικής εστίασης ενώ κάνετε πλοήγηση χρησιμοποιώντας το πληκτρολόγιο και το ποντίκι.

### Γραμματοσειρές και κείμενο

- Αλλάξτε τη γραμματοσειρά στην εφαρμογή και επιβεβαιώστε ότι οι ρυθμίσεις παραμένουν.

- Δοκιμάστε την εφαρμογή μεταβάλλοντας τα χρώματα και επιβεβαιώστε ότι όλες οι ρυθμίσεις παραμένουν.

- Αν είναι διαθέσιμη η μεγέθυνση, ελέγξτε τη γραμματοσειρά, το χρώμα και το μέγεθος χρησιμοποιώντας την επιλογή μεγέθυνσης.

### Χρώματα και αντίθεση

- Εκτυπώστε στιγμιότυπα οθόνης σε ασπρόμαυρο εκτυπωτή και επιβεβαιώστε ότι όλες οι πληροφορίες είναι ορατές.

- Δοκιμάστε εφαρμογές χρησιμοποιώντας ασπρόμαυρες ρυθμίσεις ή ρυθμίσεις υψηλής αντίθεσης και επιβεβαιώστε ότι όλες οι πληροφορίες μεταφέρθηκαν σωστά.

- Ελέγξτε ότι η εφαρμογή παρέχει τουλάχιστον τρεις συνδυασμούς από σχήματα χρωμάτων και ότι είναι διαθέσιμα τα σχήματα υψηλής αντίθεσης. (π.χ. το ασπρόμαυρο ή το κίτρινο σε μπλε).

- Turn on high-contrast settings in the GNOME Control Center and confirm that the application respects these settings.

- Δοκιμάστε διάφορα θέματα για να βεβαιωθείτε ότι το λογισμικό δουλεύει σωστά για όλες τις διαθέσιμες ρυθμίσεις.

### Ήχος

Θα πρέπει να υπάρχει μία επιλογή στην εφαρμογή για την εμφάνιση προειδοποιήσεων ήχου με γραφικό τρόπο.

Δοκιμάστε τον ήχο αν δουλεύει σωστά ενεργχοποιώντας τον ήχο στο Κέντρο ελέγχου του GNOME και ύστερα εκτελέστε τις ακόλουθες ενέργειες:

- Εκτελέστε μία ενέργεια που θα είχε σαν αποτέλεσμα μία ειδοποίηση ήχου και επιβεβαιώστε ότι η εφαρμογή δουλεύει με τον τρόπο που σχεδιάστηκε.

- Επιβεβαιώστε ότι η εφαρμογή δουλεύει σωστά κατά την αύξηση ή τη μείωση της έντασης.

- Επιβεβαιώστε ότι τα μηνύματα προειδοποίησης και οι ειδοποιήσεις μπορούν να ακούγονται σωστά σε ένα θορυβώδες περιβάλλον χρήσης.

### Κινούμενες εικόνες

Επιβεβαιώστε ότι είναι διαθέσιμη μία επιλογή για τη διακοπή των εφέ κίνησης και ότι δουλεύει όπως έχει σχεδιαστεί.

Απενεργοποιήστε τα εφέ κίνησης. Επιβεβαιώστε ότι όλες οι πληροφορίες μεταφέρονται σωστά.

### Εστίαση πληκτολογίου

- Ελέγξτε όλα τα μηνύματα και επιβεβαιώστε ότι ο χρήστης προειδοποιείται πριν ένα μήνυμα υπερβαίνει το επιτρεπόμενο χρόνο και ότι δίνεται η επιλογή ένδειξης ότι είναι απαραίτητος περισσότερος χρόνος.

- Επιβεβαιώστε ότι μία επιλογή έχει συμπεριληφθεί για την προσαρμογή του χρόνου απόκρισης και επιβεβαιώστε ότι δουλεύει όπως έχει σχεδιαστεί.

### Τεκμηρίωση

Δοκιμάστε την τεκμηρίωση κειμένου ASCII με έναν αναγνώστη οθόνης για να επιβεβαιώσετε ότι είναι ευκρινές και ακριβές και μπορεί να φορτωθεί σε τεχνολογίες υποβοήθησης.

Δοκιμάστε εφαρμογές HTML χρησιμοποιώντας έναν περιηγητή διαδικτύου και τον αναγνώστη οθόνης για να επιβεβαιώσετε ότι η τεκμηρίωση είναι προσιτή σε τεχνολογίες υποβοήθησης.

Σημείωση: Υπάρχουν οδηγίες προσιτότητας στο διαδίκτυο, στην ιστοσελίδα http://www.w3.org/TR/WAI-WEBCONTENT/.

Επιβεβαιώστε ότι οι ακόλουθες πληροφορίες περιλαμβάνονται στην τεκμηρίωση:

- Δηλώστε αν η εφαρμογή δεν υποστηρίζει την τυπική πρόσβαση μέσω πληκτρολογίου που χρησιμοποιείται από το λειτουργικό σύστημα.

- Αναγνωρίστε αν υπάρχουν μοναδικές εντολές πληκτρολογίου.

- Αναγνωρίστε οποιεσδήποτε μοναδικές λειτουργίες προσιτότητας.

- Αν μία ενέργεια τεκμηριώνεται για το ποντίκι, βεβαιωθείτε ότι υπάρχει μία εναλλακτική ενέργεια χρησιμοποιώντας το πληκτρολόγιο.

### Λίστα ελέγχου με το γραφικό περιβάλλον χρήστη

Η ενότητα αυτή συνοψίζει τις οδηγίες που δόθηκαν στις Οδηγίες γραφικού περιβάλλοντος χρήστη για την υποστήριξη της προσιτότητας. Θα πρέπει να παραπεμφθείτε στην ενότητα αυτή του οδηγού για περισσότερες λεπτομερειακές πληροφορίες για κάθε στοιχείο της λίστας ελέγχου που δόθηκε εδώ.

Κατά τη δοκιμή προσιτότητας για μία εφαρμογής, θα πρέπει να μεταβείτε μέσα σε όλα τα στοιχεία της λίστας. Σημειώστε αν η εφαρμογή επιτυγχάνει ή αποτυγχάνει σε κάθε δοκιμή, ή αν η δοκιμή δεν εφαρμόζεται στην εφαρμογή.

### Λίστα ελέγχου με τις γενικές αρχές

ΓΑ | Γενικές αρχές | Επιτυχία/Αποτυχία/ΝΑ
ΓΑ.1 | Μπορεί να αναιρεθεί κάθε ενέργεια που μεταβάλλει τα δεδομένα του χρήστη ή τις ρυθμίσεις της εφαρμογής.
ΓΑ.2 | Όλες οι ρυθμίσεις της εφαρμογής μπορούν να αποθηκευτούν ξανά με τις προεπιλεγμένες επιλογές χωρίς ο χρήστης να πρέπει να τις απομνημονεύσει.
ΓΑ.3 | Ύστερα από την εγκατάσταση, η εφαρμογή μπορεί να χρησιμοποιηθεί χωρίς ο χρήστης να πρέπει να εισάγει κάποιο δίσκο ή άλλο αποθηκευτικό μέσο.
ΓΑ.4 | Οι συναρτήσεις που χρησιμοποιούνται πιο συχνά βρίσκονται στο ανώτερο επίπεδο της δομής του μενού.

### Λίστα ελέγχου με την πλοήγηση πληκτρολογίου

ΠΠ | Πλοήγηση μέσω πληκτρολογίου | Επιτυχία/Αποτυχία/ΝΑ
ΠΠ.1 | Παρέχεται αποκλειστική πρόσβαση μέσω του πληκτρολογίου σε όλες τις λειτουργίες τις εφαρμογής.
ΠΠ.2 | Όλα τα παράθυρα έχουν μία λογική σειρά πλοήγησης μέσω του πληκτρολογίου.
ΠΠ.3 | Η ορθή σειρά καρτελών χρησιμοποιείται για ελέγχους που η ενεργοποιημένη τους κατάστασης εξαρτάται από τα πεδία επιλογών, τα κουμπιά συχνοτήτων ή τα κουμπιά εναλλαγής.
ΠΠ.4 | Η πρόσβαση μέσω του πληκτρολογίου σε ειδικές συναρτήσεις τις εφαρμογής δεν παρακάμπτει τις υπάρχοντες λειτουργίες προσιτότητας του συστήματος.
ΠΠ.5 | Η εφαρμογή παρέχει περισσότερες από μία μεθόδους για την εκτέλεση εργασιών μέσω του πληκτρολογίου οποτεδήποτε αυτό είναι δυνατό.
ΠΠ.6 | Υπάρχουν εναλλακτικοί συνδυασμοί πλήκτρων όπου αυτό είναι δυνατό.
ΠΠ.7 | Δεν υπάρχουν αδέξιες προσβάσεις για λειτουργίες του πληκτρολογίου που εκτελούνται συχνά.
ΠΠ.8 | Η εφαρμογή δεν κάνει επαναλαμβανόμενη, ταυτόχρονη χρήση των πλήκτρων.
ΠΠ.9 | Η εφαρμογή παρέχει ισοδύναμες ενέργειες μέσω του πληκτρολογίου για όλες τις λειτουργίες που εκτελούνται με το ποντίκι.
ΠΠ.10 | Οποιοδήποτε κείμενο ή αντικείμενο, που μπορεί να επιλεγεί με το ποντίκι, μπορεί επίσης να επιλεγεί και μόνο με τη χρήση του πληκτρολογίου.
ΠΠ.11 | Κάθε αντικείμενο που μπορεί να αλλάξει μέγεθος ή να μετακινηθεί με το ποντίκι, μπορεί επίσης να το κάνει και μόνο με τη χρήση πληκτρολογίου.
ΠΠ.12 | Η εφαρμογή δεν χρησιμοποιεί οποιεσδήποτε συναρτήσεις γενικής πλοήγησης για την εκτέλεση κάποιων λειτουργιών.
ΠΠ.13 | Όλα τα μενού, τα παράθυρα και οι υποδείξεις που επικλήθηκαν από το πληκτρολόγιο εμφανίζονται κοντά στο αντικείμενο με το οποίο σχετίζονται.

### Λίστα ελέγχου με την αλληλεπίδραση του ποντικιού

ΑΠ | Χρήση του ποντικιού | Επιτυχία/Αποτυχία/ΝΑ
ΑΠ.1 | Καμία λειτουργία δεν εξαρτάται από την είσοδο από τα κουμπιά του ποντικιού δεξιά ή μεσαίο.
ΑΠ.2 | Όλες οι λειτουργίες του ποντικιού μπορούν να ακυρωθούν πριν ολοκληρωθούν.
ΑΠ.3 | Παρέχεται οπτική ανάδραση μέσω των λειτουργιών μεταφοράς κι απόθεσης
ΑΠ.4 | Ο δέικτης του ποντικιού ποτέ δεν επηρεάζεται από τον έλεγχο της εφαρμογή, ή η κίνησή του περιορίζεται από την εφαρμογή σε ένα μέρος της οθόνης.

### Λίστα ελέγχου με τα γραφικά στοιχεία

ΓΣ | Γραφικά στοιχεία | Επιτυχία/Αποτυχία/ΝΑ
ΓΣ.1 | Δεν υπάρχουν γραφικά στοιχεία με σταθερή κωδικοποίηση όπως στη γραμμή, στο περίγραμμα ή στο πάχος της σκιάς.
ΓΣ.2 | Όλα τα γραφικά στοιχεία με πολλά χρώματα μπορούν να προβληθούν μόνο με ένα χρώμα, όπου αυτό είναι δυνατό.
ΓΣ.3 | Όλα τα στοιχεία του γραφικού περιβάλλοντος που αλληλεππιδρούν διακρίνονται εύκολα σε σχέση με τα στατικά στοιχεία του.
ΓΣ.4 | Παρέχεται μία επιλογή για την απόκρυψη των μη ουισιωδών γραφικών στοιχείων.

### Λίστα ελέγχου με γραμματοσειρές και κείμενο

ΓΚ | Γραμματοσειρές και κείμενο | Επιτυχία/Αποτυχία/ΝΑ
ΓΚ.1 | Δεν κωδικοποιούνται σταθερά ούτε τύποι ούτε μεγέθη γραμματοσειρών.
ΓΚ.2 | Παρέχεται μία επιλογή για την απενεργοποίηση των γραφικών σκηνικών πίσω από το κείμενο.
ΓΚ.3 | Όλες οι ετικέτες έχουν ονόματα τα οποία έχουν σημασία κατά την εξαγωγή τους από το περιεχόμενο.
ΓΚ.4 | Στο ίδιο παράθυρο δεν χρησιμοποιούνται πάνω από μία φορά τα ονόματα ετικετών.
ΓΚ.5 | Η τοποθέτηση ειτικετών είναι συνεπής από την εφαρμογή.
ΓΚ.6 | Όλες οι ετικέτες στατικού κειμένου που αναγνωρίζουν άλλους ελέγχους λήγουν με άνω-κάτω τελεία (:).
ΓΚ.7 | Όλες οι ετικέτες στατικού κειμένου που αναγνωρίζουν άλλους ελέγχους προηγούνται άμεσα από τους ελέγχους αυτούς στη σειρά ταξινόμησης καρτελών.
ΓΚ.8 | Παρέχεται κάτι εναλλακτικό όπως το WYSIWYG. Για παράδειγμα, η δυνατότητα για τον ορισμό διαφορετικών γραμματοσειρών οθόνης και εκτύπωσης σε έναν επεξεργαστή κειμένου.

### Λίστα ελέγχου χρώματος και αντίθεσης

ΧΑ | Χρώματα και αντίθεση | Επιτυχία/Αποτυχία/ΝΑ
ΧΑ.1 | Τα χρώματα της εφαρμογής δεν έχουν σταθερή κωδικοποίησης, αλλά σχεδιάζονται είτε από το τρέχον θέμα της επιφάνειας εργασίας είτε από τις ρυθμίσεις της εφαρμογής.
ΧΑ.2 | Το χρώμα χρησιμοποιείται μόνο ως απορρόφηση, και όχι σαν το μόνο μέσο για τη μεταφορά πληροφοριών και ενεργειών.
ΧΑ.3 | Η ερφαρμογή υποστηρίζει όλα τα διαθέσιμα θέματα και τις ρυθμίσεις ηψηλής αντίθεσης.
ΧΑ.4 | Το λογισμικό δεν εξαρτάται από κάποιο συγκεκριμένο θέμα ή ρυθμίσεις υψηλής αντίθεσης.

### Λίστα ελέγχου μεγέθυνσης

ΜΓ | Μεγέθυνση | Επιτυχία/Αποτυχία/ΝΑ
ΜΓ.1 | Η εφαρμογή παρέχει τη δυνατότητα μεγέθυνσης της περιοχής εργασίας.
ΜΓ.2 | Η εφαρμογή παρέχει την επιλογή κλιμάκωσης της περιοχής εργασίας.
ΜΓ.3 | Η λειτουργικότητα της εφαρμογής δεν επηρεάζεται από τις ρυθμίσεις μεγέθυνσης και κλιμάκωσης.

### Λίστα ελέγχου ήχου

ΗΧ | Ήχος | Επιτυχία/Αποτυχία/ΝΑ
ΗΧ.1 | Ο ήχος δεν χρησιμοποιείται ως το μόνο μέσο μεταφοράς στοιχείων από πληροφορίες.
ΗΧ.2 | Ο χρήστης μπορεί να ρυθμίσει τη συχνότητα και την ένταση όλων των ήχων και των μπιπ προειδοποίησης.

### Λίστα ελέγχου εφέ κίνησης

ΕΦ | Κινούμενες εικόνες | Επιτυχία/Αποτυχία/ΝΑ
ΕΦ.1 | Δεν υπάρχουν στοιχεία που αναβοσβήνουν με συχνότητα μεγαλύτερη από 2Hz και μικρότερη από 55Hz.
ΕΦ.2 | Οτιδήποτε αναβοσβήνει περιορίζεται σε μικρές περιοχές της οθόνης.
ΕΦ.3 | Αν χρησιμοποιούνται εφέ κίνησης, είναι διαθέσιμη μία επιλογή για την απενεργοποίηση πριν προβληθούν για πρώτη φορά.

### Λίστα ελέγχου με την εστίασης πληκτρολογίου

ΕΠ | Εστίαση πληκτολογίου | Επιτυχία/Αποτυχία/ΝΑ
ΕΠ.1 | Όταν ανοίγεται ένα παράθυρο, η εστίαση ξεκινά με τον έλεγχο που χρησιμοποιήθηκε πιο συχνά.
ΕΠ.2 | Η τρέχουσα θέση της εστίασης εισόδου προβάλλετε ολοφάνερα όλες τις φορές.
ΕΠ.3 | Η εστίαση εισόδου εμφανίζεται σε ακριβώς ένα παράθυρο όλες τις φορές.
ΕΠ.4 | Παρέχεται ο κατάλληλος ήχος ή οπτική ανάδραση όταν ο χρήστης προσπαθεί να πλοηγηθεί πίσω ή στο τέλος μίας ομάδας σχετικών αντικειμένων.
ΕΠ.5 | Ο προεπιλεγμένος ήχος ή το σήμα οπτικής προειδοποίησης αναπαράγονται όταν ο χρήστης πιέζει ένα μη κατάλληλο πλήκτρο.
ΕΠ.6 | Υπάρχουν επαρκείς πληροφορίες σχετικά με τον ήχο για την οπτική εστίαση ώστε ο χρήστης να μπορεί να κατανοήσει το επόμενο βήμα του.
ΕΠ.7 | Κατά τη χρήση τεχνολογιών υποβοήθησης, όπως ο αναγνώστης οθόνης ή η συσκευή ανάγλυφης γραφής τυφλών, το τρέχον πρόγραμμα περιλαμβάνει τη θέση και το περιεχόμενο της ένδειξης της οπτικής εστίασης.

### Λίστα ελέγχου συγχρονισμού

ΣΧ | Συγχρονισμός | Επιτυχία/Αποτυχία/ΝΑ
ΣΧ.1 | Δεν υπάρχει στην εφαρμογή διακοπές σταθερής κωδικοποίησης ή λειτουργίες βασισμένες στο χρόνο.
ΣΧ.2 | Η προβολή ή η απόκρυψη σημαντικών πληροφοριών δεν ενεργοποιείται μόνο από την κίνηση του δείκτη του ποντικιού.

### Λίστα ελέγχου τεκμηρίωσης

ΤΚ | Τεκμηρίωση | Επιτυχία/Αποτυχία/ΝΑ
ΤΚ.1 | Ολόκληρη η τεκμηρίωση είναι σε μία προσιτή μορφή, με αναλυτικές εναλλακτικές περιγραφές που παρέχονται για όλα τα σχήματα και τα διαγράμματα.
ΤΚ.2 | Η τεκμηρίωση περιλαμβάνει μία ενότητα που καλύπτει όλες τις λειτουργίες προσιτότητας της εφαρμογής.

### GOK (GNOME Onscreen Keyboard)

Η εφαρμογή σας θα πρέπει να είναι χρήσιμη μέσω του gok, η είσοδος πλήκτρων θα πρέπει εξολοκλήρου να δημιουργείτε από το gok, όχι από το πληκτρολόγιο. Ο στόχος εδώ θα ήταν η χρήση της εφαρμογής σας και η επιφάνεια εργασίας γενικά, βεβαιώνοντας ότι οποιαδήποτε είσοδος τύπου ή χαρακτήρα θα εκτελείτε με το πληκτρολόγιο της οθόνης.

Η εφαρμογή gok έρχεται μαζί με την επιφάνεια εργασίας του GNOME έτσι θα πρέπει να εκτελείται ήδη. Για να δείτε όλη την τεκμηρίωση, παραπεμφθείτε στην επίσημη σελίδα του gok.

Ακολουθήστε αυτά τα βήματα για να επιβεβαιώσετε την ορθή λειτουργία του gok με την εφαρμογή σας:

1. Εκκίνηση της επιφάνειας εργασίας του GNOME

2. Εκτέλεση του gok

3. Ξεκινήστε την εφαρμογή σας

4. Δώστε μία είσοδο στην εφαρμογή σας με μία συσκευή ένδειξης (π.χ. το ποντίκι ή ανιχνευτή επικεφαλίδας) και το gok.

5. Εργαστείτε χρησιμοποιώντας τις λειτουργίες αυτόματης συμπλήρωσης και πρόβλεψης λέξεων του gok.

6. Επιβεβαιώστε ότι το gok ενεργοποιεί και απενεργοποιεί τα κουμπιά Μενού και Εργαλειοθήκες που βασίζονται στο είδος της εφαρμογής που επικαλεστήκατε. Για παράδειγμα, τα κουμπιά Μενού και Εργαλειοθήκες είναι επενεργοποιημένα για τη μικροεφαρμογή Ιδιότητες γραμματοσειράς' , αλλά τα ίδια κουμπιά είναι ενεργοποιημένα για την εφαρμογή Gedit.

7. Επιβεβαιώστε ότι το πληκτρολόγιο οθόνης του gok που έχει προκύψει από το κουμπί Σύνθεση μπορεί να χρησιμοποιηθεί για την πληκτρολόγηση οποιουδήποτε κειμένου για την επιλεγμένη εφαρμογή, εκτελέστε το Gedit, κάντε κλικ στην περιοχή του κειμένου, και ύστερα στο κουμπί Σύνθεση στο gok. Επιλέξτε τα απαραίτητα πλήκτρα από το πληκτρολόγιο της οθόνης. Οι χαρακτήρες θα πρέπει να εμφανιστούν στην περιοχή κειμένου του Gedit.

8. Επιβεβαιώστε ότι το κουμπί Εκκινητής επιτρέπει στο χρήστη να εκκινήσει οποιαδήποτε από τις εφαρμογές Τερματικό, Περιηγητής διαδικτύου ή Επεξεργαστής κειμένου.

9. Επιβεβαιώστε ότι το κουμπί Ενεργοποίηση επιτρέπει στο χρήστη να ενεργοποιήσει οποιοδήποτε παράθυρο από τις τρέχουσες εφαρμογές στην επιφάνεια εργασίας του χρήστη, μαζί με τους πίνακες εφαρμογών του GNOME και την επιφάνεια εργασίας του GNOME.

10. Επιβεβαιώστε ότι το κουμπί Μενού περιέχει όλα τα διαθέσιμα μενού στην τρέχουσα εφαρμογή. Επιβεβαιώστε ότι κάνοντας κλικ σε ένα κουμπί μενού εμφανίζεται ένα υπομενού και τα στοιχεία μενού που περιέχονται μέσα σε αυτό. Τέλος, επιβεβαιώστε ότι κάνοντας κλικ σε ένα στοιχείο μενού αυτό ενεργοποιείται. Για παράδειγμα, κάντε κλικ στην εφαρμογή Περιηγητής βοήθειας και ύστερα στο κουμπί Μενού. Το παράθυρο του GOK τώρα εμφανίζει τα κουμπιά Αρχείο, Μετάβαση και Βοήθεια (τα μενού του Περιηγητή βοήθειας menus). Κάντε κλικ στο κουμπί Αρχέιο και θα εμφανιστούν τα κουμπιά Νέο παράθυρο και Κλείσιμο παραθύρου (στοιχεία μενού).

11. Επιβεβαιώστε ότι το κουμπί Εργαλειοθήκες περιέχει όλα τα διαθέσιμα κουμπιά στην εργαλειοθήκη της εφαρμογής. Για παράδειγμα, κάντε κλικ στην εφαρμογή Περιηγητής βοήθειας και ύστερα στο κουμπί Εργαλειοθήκες. Το παράθυρο του GOK τώρα εμφανίζει τα κουμπιά Πίσω, Εμπρός και Αρχή.

12. Επιβεβαιώστε ότι το κουμπί Αρπαγή παραθύρων εμφανίζει όλα τα αντικείμενα κουμπιών για το επιλεγμένο παράθυρο της εφαρμογής. Για παράδειγμα, ανοίξτε τη μικροεφαρμογή 'Ιδιότητες γραμματοσειράς' και κάντε κλικ στο κουμπί Αρπαγή παραθύρων στο παράθυρο της εφαρμογής GOK. Το παράθυρο του GOK θα πρέπει τώρα να εμφανίζει τα ονόματα των κουμπιών στη μικροεφαρμογή - Sans, Sans-serif, Κλείσιμο και Βοήθεια.

### Accerciser

Accerciser και η Αρχιτεκτονική προσιτότητας του GNOME

Το Accerciser είναι ένας διαδραστικός περιηγητής προσιτότητα σε γλώσσα Python για την επιφάνεια εργασίας του GNOME. Χρησιμοποιεί το AT-SPI για να επιθεωρεί και να ελέγχει γραφικά συστατικά, επιτρέποντάς σας να ελέγχετε αν μία εφαρμογή παρέχει επαρκείς πληροφορίες σε τεχνολογίες υποβοήθησης και σε αυτοματοποιημένα πλαίσια ελέγχου. Το Accerciser έχει ένα απλό πλαίσιο πρόσθετων λειτουργιών το οποίο μπορείτε να χρησιμοποιήσετε για τη δημιουργία προσαρμοσμένων προβολών των πληροφοριών προσιτότητας. Η πλήρης τεκμηρίωση μπορεί να βρεθεί στο Επίσημο εγχειρίδιο του Accerciser. Για μία επίδειξη του Accerciser και του PyATSPI (πρόσαβαση και χρήση του AT-SPIπου καλύπτεται από την Python), δείτε αυτό το άρθρο. Για μία εξαιρετική εξιστόρηση από το συγγραφέα του, δείτε το άρθρο με τίτλο Make Your Application Accessible with Accerciser.

Το Accerciser έχει αντικαταστήσει αποτελεσματικά το παλαιότερο εργαλείο at-poke.