Οδηγός προσιτότητας GNOME για προγραμματιστές
Ο οδηγός προσιτότητας GNOME είναι για προγραμματιστές που θέλουν να εξασφαλίσουν ότι το λογισμικό που παράγουν είναι προσιτό από όσο το δυνατόν περισσότερους χρήστες. Ο οδηγός καλύπτεί και αρκετές από τις απαιτήσεις του Section 508 (αμερικανικό δίκαιο για προσιτότητα προϊόντων).

Τι είναι η προσιτότητα;
Προσιτότητα σημαίνει να προσφέρουμε σε ανθρώπους με αναπηρία τη δυνατότητα να συμμετέχουν σε βασικές δραστηριότητες της ζωής. Αυτό περιλαμβάνει την εργασία και τη χρήση των υπηρεσιών, των προϊόντων και των πληροφοριών. Το 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 προσιτή - Επισκόπηση. Για μια προκωδικοποιημένη προοπτική, δείτε Οδηγίες για τη διεπαφή χρήστη για υποστήριξη προσιτότητας ή Οδηγίες κωδικοποίησης για υποστήριξη προσιτότητας. Για μια λίστα ελέγχου των στοιχείων δοκιμών μετασχεδιασμού, δείτε Λίστα ελέγχου διεπαφής χρήστη.

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

Πώς μπορώ να κάνω συνηθισμένα πράγματα σχετικά με την ΑΤΚ (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+ 3.1.10, το Gail συγχωνεύτηκε στο GTK+ και δεν υπάρχει πια δικιά του ενότητα.

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

Συγκεντρώνοντας πληροφορίες προσιτότητας από μια εφαρμογή
Ένα πρόγραμμα το οποίο θέλει να χρησιμοποιήσει τις κλήσεις ATK θα πρέπει κατά προτίμηση να κάνει ένα (ή περισσότερα) από τα παρακάτω:
Να δημιουργήσει ένα event watcher, για παράδειγμα με την συνάρτηση atk_add_focus_tracker():

atk_add_focus_tracker (_my_focus_tracker);

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

void _my_focus_tracker (AtkObject *aobject);

Να καθορίσει έναν καθολικό 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 αντικείμενο.
Αποκτήστε πρόσβαση στο αντικείμενο ανώτερου επιπέδου τύπου ATK με τη χρήση της ακόλουθης συνάρτησης.

AtkObject *root_obj = atk_get_root();

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

Δημιουργία αιτήσεων σε διεπαφές AtkObject
Έχοντας κλειδώσει το AtkObject το οποίο είναι συναφές με ένα αντικείμενο στην εφαρμογή (π.χ. χρησιμοποιώντας τη συνάρτηση gtk_widget_get_accessible()), μπορείτε να ανακαλύψετε τις διεπαφές που αυτό εκτελεί με διάφορους τρόπους:
Χρησιμοποιήστε τις μακροεντολές ATK_IS_... που παρέχονται, για παράδειγμα:
ATK_IS_ACTION(atkobj)
ATK_IS_COMPONENT(atkobj)
κλπ. (υπάρχει ένα για κάθε διεπαφή)
Αν η μακροεντολή επιστρέφει τιμή TRUE, οι κλήσεις της διεπαφής μπορούν με ασφάλεια να πραγματοποιηθούν σε αυτό το αντικείμενο ΑΤΚ.
Δοκιμάστε το ρόλο του 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():
Πρόσβαση στο προεπιλεγμένο μητρώο:

default_registry = atk_get_default_registry();

Καταχωρήστε το αντικείμενο ΑΤΚ στη συνάρτηση 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 είτε:
Ορίζει ξανά οποιεσδήποτε κλήσεις συναρτήσεων καθορίστηκαν από το ριζικό κατάλογο του αντικειμένου. Αυτό είναι τυπικά απαραίτητο όταν ένα αντικείμενο πρέπει να εκτελέσει μία συνάρτηση όπως η 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; 
}

Απαιτεί μία συνάρτηση 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; 
}

parent->init
Ενδεχομένως να είναι απαραίτητα μία συνάρτηση parent->init() αν η εκτέλεση ΑΤΚ χρειάζεται να εφαρμόζει τα ακόλουθα:
Αποθήκευση όλων των δεδομένων που λήφθηκαν από ένα γραφικό συστατικό υποστήριξης GTK.
Ακρόαση οποιουδήποτε σήματος από το γραφικό συστατικό υποστήριξης 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().
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); 
   } 
}

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

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

Ορθή τοποθέτηση ετικετών για διάφορα στοιχεία περιβάλλοντος
List control with label above Κατηγοριοποίηση ελέγχου με ετικέτα από πάνω	Large file manager icon with label underneath Μεγάλο εικονίδιο διαχειριστή αρχείων με ετικέτα από κάτω	Small toolbar icon with label to its right Μικρό εικονίδιο εργαλειοθήκης με ετικέτα στα δεξιά του	Spinbox control with label to its left Περιστρεφόμενος έλεγχος με ετικέτα στα αριστερά του

Χρώματα και αντίθεση
Η λιττή επιλογή χρωμάτων στην οθόνη ενδεχομένως προκαλέσει προβλήματα σε χρήστες με αχρωματοψία (για τους οποίους η απόχρωση είναι σημαντική) ή με χαμηλό επίπεδο όραση (για τους οποίους η φωτεινότητα/αντίθεση είναι σημαντική). Γενικά, θα πρέπει να επιτρέπετε στο χρήστη να προσαρμόζει τα χρώματα σε οποιοδήποτε τμήμα της εφαρμογής σας που μεταφέρει σημαντικές πληροφορίες.
Οι χρήστες με προβλήματα όρασης ενδεχομένως απαιτούν ένα υψηλό επίπεδο αντίθεσης μεταξύ των χρωμάτων παρασκηνίου και κειμένου. Συχνά ένα μαύρο παρασκήνιο και το λευκό κείμενο χρησιμοποιείται για να αποτρέψει την "σύγχυση". Αυτέ οι ρυθμίσεςι είναι κρίσιμες για χρήστες με προβλήματα όρασης.
Μην κωδικοποιείτε σταθερά τα χρώματα της εφαρμογής. Μερικοί χρήστες χρειάζονταινα χρησιμοποιήσουν συγκεκριμένους συνδυασμούς χρωμάτων αντίθεσης για να μπορούν να αναγνώσουν την οθόνη με άνεση. Συνεπώς όλα τα κύρια χρώματα που χρησιμοποιείτε στην εφαρμογή GNOME θα πρέπει να προέρχονται από το θέμα GTK, έτσι ώστε ο χρήστης να μπορείς ρυθμίσεςι τα χρώματα για όλες τις εφαρμογές του σε κάτι ευανάγνωστο απλά αλλάζοντας το θέμα. Αν για κάποιο λόγο χρειάζεστε να χρησιμοποιήσετε χρώματα που δεν είναι διαθέσιμα στο θέμα, βεβαιωθείτε ότι είναι προσαρμόσιμα εντός της εφαρμογής.
Μην χρησιμοποιείτε το χρώμα ως το μόνο μέσο για τη διάκριση στοιχείων από πληροφορίες. Όλες αυτές οι πληροφορίες θα παρέχονται από τουλάχιστον άλλη μία μέθοδο, όπως το σχήμα, η θέση ή η αναλυτική περιγραφή. Δείτε τα Παραδείγματα χρωμάτων και υψηλής αντίθεσης.
Υποστηρίξτε όλα τα θέματα υψηλής αντίθεσης του GNOME. Βεβαιωθείτε ότι όταν επιλέγεται ένα από αυτά τα θέματα, όλο το κείμενο στην εφαρμογή σας εμφανίζεται στο προσκήνιο με υψηλή αντίθεση και στα χρώματα του παρασκηνίου που καθορίστηκαν από το θέμα.
Βεβαιωθείτε ότι η εφαρμογή σας δεν εξαρτάται από ένα συγκεκριμένο θέμα υψηλής αντίθεσης. Ελέγξτε το με διαφορετικά θέματα υψηλής αντίθεσης για να βεβαιωθείτε ότι η εφαρμογή σας διατηρεί τις ρυθμίσεις.

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

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

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

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

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

Εστίαση πληκτολογίου
Είναι σημαντικό να εμφανίζεται η θέση της εστίασης πληκτρολογίου όλες τις φορές, και για χρήστες με προβλήματα όρασης όπως επίσης και με πιο "ενεργούς χρήστες" που προτιμούν να χρησιμοποιήσουν το πληκτρολόγιο αντί για το ποντίκι. Δεν πρέπει να υπάρχει σύγχυση όσον αφορά τον έλεγχο στην επιφάνεια εργασίας που θα έχει εστίαση σε οποιοδήποτε χρόνο. Θα πρέπει να μπορεί να αφήνετε τον υπολογιστή σας με την εστίαση σε οποιοδήποτε γραφικό συστατικό στην εφαρμογή σας, ύστερα να βγαίνετε έξω και να μιλάτε στο τηλέφωνο με τη φιλενάδα σας ή να βγάλετε περίπατο το σκύλο σας μέχρι να ξεχάσετε ποιο γραφικό συστατικό έχετε αφήσει ενεργοποιημένο. Όταν επιστρέψετε, θα πρέπει να μπορείτε να διακρίνετε άμεσα ακριβώς ποιο γραφικό συστατικό ήταν αυτό.
Μία ένδειξη οπτικής εστίασης είναι μία παρουσίαση με ήχο της θέσης του δρομέα που είναι σχετικό με άλλα αντικείμενα στην επιφάνεια εργασίας. Αυτό επιτρέπει στο χρήστη να μετακινείται ανάμεσα στα αντικείμενα αλληλεπιδραστικά όπως οι αλλαγές εστίασης. Η οπτική εστίαση πρέπει να εκτίθεται με προγραμματισμό στις τεχνολογίες υποβοήθιησης. Σημειώστε ότι στις περισσότερες περιπτώσεις, αυτό μπορεί να προσαρμοστεί αυτόματα από το ATK, χωρίς να απαιτείται οποιαδήποτε επιπρόσθετη εργασία. Παρόλα αυτά, θα πρέπει να γνωρίζετε αυτήν την απαίτηση κατά την σύνθεση των δικών σας προσαρμοσμένων γραφικών συστατικών, για παράδειγμα.
Εκκινήστε την εστίαση στον πιο συχνά χρησιμοποιημένο έλεγχο. Αν κανένας έλεγχος σε ένα παράθυρο δεν έχει οριστεί σαν το "πιο" χρήσιμο, εκκινήστε την εστίαση στον πρώτο έλεγχο στο παράθυρο όταν εκείνο το παράθυρο ανοίγεται. Η εστίαση δεν θα πρέπει να εκκινείται στα κουμπιά Εντάξει ή Ακύρωση ενός διαλόγου ακόμη κι αν αυτοί είναι οι πιο συχνοί χρησιμοποιημένοι έλεγχοι, επειδή αυτά μπορούν πάντα να ενεργοποιούνται πιέζονται το πλήκτρο Enter ή το Escape.
Εμφανίστε την τρέχουσα εστίαση εισόδου ξεκάθαρα όλες τις φορές. Θυμηθείτε ότι σε λεέγχους που περιλαμβάνουν ένα στοιχείο με κύλιση, δεν είναι πάντα επαρκής η επισήμανση απλά του επιλεγμένου αντικειμένου μέσα στην περιοχή κύλισης, επειδή ενδεχομένως να μην είναι ορατό. Δείτε τα Παραδείγματα εστίασης πληκτρολογίου.
Εμφανίστε την εστίαση εισόδου μόνο στο ενεργό παράθυρο. Αποκρύψτε όλες τις ενδείξης της πρωτεύουσας οπτικής εστίασης σε όλα τα παράθυρα που δεν έχουν εστίαση και ενεργοποίηση. Αν ένα απλό παράθυρο έχει ξεχαριστά πλαίσια, μόνο ένα πλαίσιο θα έχει την ένδειξη εστίασης, και οι ενδείξεις εστίασης θα αποκρύπτονται σε όλα τα άλλα πλαίσια. Αν είναι σημαντικό να συνεχίσετε την προβολή του στοιχείου που επιλέχθηκε σε μία λίστα χωρίς εστίαση, για παράδειγμα, χρησιμοποιήστε μία δευτερεύουσα ένδειξη εστίασης. Δείτε τα Παραδείγματα εστίασης πληκτρολογίου.
Παρέχετε κατάλληλη ανάδραση όταν ο χρήστης προσπαθεί να πλοηγηθεί μέχρι το τέλος μία ομάδας σχετικών αντικειμένων. Κατά την πλοήγηση σε μία λίστα, για παράδειγμα, η διακοπή με ανάδραση ήχου είναι συνήθς προτιμητές για τη μετακίνηση της εστίασης πίσω στο πρώτο αντικείμενο στη λίστα. Ειδάλλως, οι χρήστες που είναι τυφλοί ή έχουν χαμηλό επίπεδο όρασης ίσως δεν αναγνωρίσουν ότι έχουν επιστρέψει στην αρχή. Στην περίπτωση μίας αναζήτησης κειμένου σε ένα έγγραφο, ενδεχομένως αναδυθεί ένας διάλογος που θα δείχνει ότι το τέλος του εγγράφου έχει φτάσει, και θα σας ρωτάει αν επιθυμείτε η αναζήτηση να επιστρέψει στην αρχή του εγγράφου.
Αναπαράγετε τον προεπιλεγμένο ήχο ή το σήμα προειδοποίησης του συστήματος όταν ο χρήστης πιέζει ένα μη κατάλληλο πλήκτρο, ή όταν ένα πλήκτρο πλοήγησης αποτυγχάνει να μετακινήσει την εστίαση. Για παράδειγμα, όταν η εστίαση είναι στον πρώτο χαρακτήρα σε ένα πεδίο κειμένου και ο χρήστης πιέζει το πλήκτρο του αριστερού βέλους, ή προσπαθεί να κάνει μία πολλαπλή επιλογή σε ένα διάλογο επιλογής. (Σημειώστε ότι χρήστες με προβλήματα ακοής θα πρέπει να μπορούν να προσαρμόσου. ένα ισοδύναμο οπτικά με το σύστημα σε σχέση με τον ήχο προειδοποίησης.)

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

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

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

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

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