Accessibility in KDE

Accessibility aids in KDE

DCOP can be used to automate applications and access non-common features

Applications

Under development

The Qt accessible interface

// hierarchy
virtual int childCount() const = 0;
virtual int indexOfChild(const QAccessibleInterface *) const = 0;
virtual int childAt(int x, int y) const = 0;

// relations
virtual int relationTo(int child, const QAccessibleInterface *other, int otherChild) const = 0;

// navigation
virtual int navigate(Relation relation, int index, QAccessibleInterface **iface) const = 0;

// properties and state
virtual QString text(Text t, int child) const = 0;
virtual QRect rect(int child) const = 0;
virtual Role role(int child) const = 0;
virtual int state(int child) const = 0;

// action
virtual int userActionCount(int child) const = 0;
virtual QString actionText(int action, Text t, int child) const = 0;
virtual bool doAction(int action, int child, const QVariantList &params = QVariantList()) = 0;

How to make an accessible widget plugin

class AccessibleFactory : public QAccessiblePlugin
{
public:
    AccessibleFactory() {}

    QStringList keys() const;
    QAccessibleInterface *create(const QString &classname, QObject *object);
};

QStringList AccessibleFactory::keys() const
{
    QStringList list;
    list << "MyWidget1" << "MyWidget2"
    return list;
}

QAccessibleInterface *AccessibleFactory::create(const QString &classname, QObject *object)
{
    if (classname == "MyWidget1")
        return new MyWidget1Iface(object);

    if (classname == "MyWidget2")
        return new MyWidget2Iface(object);

    return 0;
}

Q_EXPORT_PLUGIN(AccessibleFactory)

Qt application in at-poke

Qt application in at-poke

This screenshot shows a Qt application in at-poke.