/* * AT-SPI - Assistive Technology Service Provider Interface * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap) * * Copyright 2001, 2002 Sun Microsystems Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef __ACCESSIBILITY_EVENT_DEFINED__ #define __ACCESSIBILITY_EVENT_DEFINED__ module Accessibility { interface Accessible; /** * A struct encapsulating detailed information about an Event. * This struct supercedes the previous use of the 'any' field * in EventDetails; the content previously stored in Event::any_data * is now stored in EventDetails::any_data, and Event::any_data * points to an instance of the EventDetails structure, if * the object's implementation supports event detail reporting, * otherwise Event::any_data contains CORBA_OBJECT_NIL. * * @since AT-SPI 1.7.0 */ struct EventDetails { Application host_application; Role source_role; string source_name; any any_data; }; /** * A structure encapsulating information about an event * for which notification was requested. Usually such notification * is requested via a call to Registry::registerGlobalEventListener. * The structure contains a colon-delimited string indicating the event * type, a reference to the generating Accessible, two detail fields whose * interpretation is event-type-specific, and a final field containing * event-type-specific data. * * @note Since AT-SPI 1.7.0 the 'any' field contains an EventDetails * struct, which encapsulates additional information about the event * and its generating object. */ struct Event { /** A colon-delimited string indicating the type of the event. * The string can be interpreted as * \c class:type:subtype * For instance ¨object:text-changed:insert¨ is an event * from the 'Object' class, which corresponds to Accessible objects * general, the type of the event is a ¨text-changed¨ event (i.e. a change in the * content of an implementor of the Text interface), and the * specific subtype of the change is an insertion event. * * Event classes include the following: * \li focus: an object has received keyboard focus. This event has no type or subtype. * \li window: a toplevel window has changed state. * \li object: an object (i.e. Accessible) has undergone some change in state, content, * or hierarchy * \li document:a change to a document's content has occurred, or its * content loading status has changed. * \li mouse: an event originating from the pointing device. Rarely used; * in most cases clients will wish to register for pointer events via * the DeviceEventController::registerDeviceEvent method instead. * \li keyboard: an event indicating that the keyboard state (for example, the * modifier state) has changed significantly. * "keyboard:" events are not sent for individual keystrokes except as * a side-effect of certain keys, for instance modifier keys. * Clients interested in key events should listen for DeviceEvents * via DeviceEventController::registerKeystrokeListener instead. * * @note For more information on specific event types, see the documentation for * each of the individual interfaces supported by some Accessible objects. * * @see Accessible, Component, Image, Selection, Table, Text, Value. */ string type; /** * The Accessible object which is the source of the event. The source object is the object * to which the change inferred by the event emission occurs; for instance, * the object emitting a ¨object:parent-changed¨ event is the child, not the parent. * Likewise, the event source of an ¨object:children-changed:insert¨ event is the parent, * not the inserted child. */ Accessible source; /** An integer whose meaning is event type dependent. It may indicate the offset of * text being inserted, in the case of ¨object:text-changed:insert¨, or the index of a * newly added child in the case of ¨object:children-changed:add¨. * @note since most AT-SPI clients react to events via an asynchronous queue, for * performance reasons, this field may be of limited utility unless the client maintains * a large client-side cache of the hierarchy and contained data. This is because by the time * such an event is asynchronously processed, the state of the originating object may have * changed. In other words, the data in the detail1 member is not state-coherent outside * of the event handler. More useful results are gotten by examination of the 'any_data' field. */ long detail1; /** see description of detail2 */ long detail2; /** * A generic storage location for event-type-specific data which provides more specific * information about the event; for instance, in AT-SPI versions prior to 1.7.0, * in the case of ¨object:text-changed:insert¨ events, this field contains a string * indicating the inserted text. * * @note Since AT-SPI 1.7.0, the data contained in this field is an EventDetails struct. */ any any_data; }; /** * A generic interface implemented by objects for the * receipt of event notifications. EventListener is the interface from which * Accessibility::Registry is derived, and via which clients of the Registry * receive notification of changes to an application's user interface and content. */ interface EventListener : Bonobo::Unknown { /** * Synchronously notify an EventListener that an event has occurred, by passing it an * Event struct. * @param e The Event about which the listener is being notified. */ void notifyEvent (in Event e); /** \cond */ void unImplemented_ (); void unImplemented2_ (); void unImplemented3_ (); void unImplemented4_ (); /** \endcond */ }; }; #endif