+What's new in at-spi2-core 2.31.1:
+
+* Bus launcher: fix an issue where the error wasn't cleared on failure.
+
+* Add support for locking/unlocking modifiers.
+
+* Update error log text for consistency.
+
+* Documentation clean-ups.
+
+What's new in at-spi2-core 2.29.1:
+
+* Add dbus-broker support to bus launcher.
+
+* Add ScrollTo and ScrollToPoint component interfaces.
+
+* Do not use deprecated GSettings API
+
+* Fix various compiler warnings and documentation annotations.
+
+What's new in at-spi2-core 2.27.92:
+
+* Support building a static library (bgo#793652).
+\
+* Fix build on FreeBSD (bgo#791608).
+
+What's new in at-spi2-core 2.27.1:
+
+* Dropped autotools support.
+
+* documentation: Remove list association from
+ ATSPI_ROLE_DESCRIPTION_{TERM,VALUE} (bgo#791021).
+
+* Fix a potential buffer overflow in at-spi-bus-launcher (bgo#791124).
+
+* Make the build reproducible (bgo#791167).
+
What's new in at-spi2-core 2.26.1:
* Remove unused dependency on libxkbcommon.
AtspiAccessible *test,
GError **error)
{
- g_warning ("Atspi: TODO: Implement is_ancestor_of");
+ g_warning ("AT-SPI: TODO: Implement is_ancestor_of");
return FALSE;
}
AtspiAccessible *
atspi_collection_get_active_descendant (AtspiCollection *collection, GError **error)
{
- g_warning ("atspi: TODO: Implement get_active_descendants");
+ g_warning ("AT-SPI: TODO: Implement get_active_descendants");
return NULL;
}
return ret;
}
+/**
+ * atspi_component_scroll_to:
+ * @obj: a pointer to the #AtspiComponent object on which to operate.
+ * @type: a #AtspiScrollType indicating where the object should be placed on the
+ * screen.
+ *
+ * Scrolls whatever container of the #AtspiComponent object so it becomes
+ * visible on the screen.
+ *
+ * Returns: #TRUE if successful, #FALSE otherwise.
+ **/
+gboolean
+atspi_component_scroll_to (AtspiComponent *obj,
+ AtspiScrollType type,
+ GError **error)
+{
+ dbus_bool_t retval = FALSE;
+
+ g_return_val_if_fail (obj != NULL, FALSE);
+
+ _atspi_dbus_call (obj, atspi_interface_component,
+ "ScrollTo", error, "u=>b", type, &retval);
+
+ return retval;
+}
+
+/**
+ * atspi_component_scroll_to_point:
+ * @obj: a pointer to the #AtspiComponent object on which to operate.
+ * @coords: a #AtspiCoordType indicating whether the coordinates are relative to
+ * the screen, to the window, or to the parent object.
+ * @x: the x coordinate of the point to reach
+ * @y: the y coordinate of the point to reach
+ * @error: return location for a #GError
+ *
+ * Scrolls whatever container of the #AtspiComponent object so it becomes
+ * visible on the screen at a given position.
+ *
+ * Returns: #TRUE if successful, #FALSE otherwise.
+ **/
+gboolean
+atspi_component_scroll_to_point (AtspiComponent *obj,
+ AtspiCoordType coords,
+ gint x,
+ gint y,
+ GError **error)
+{
+ dbus_bool_t retval = FALSE;
+
+ g_return_val_if_fail (obj != NULL, FALSE);
+
+ _atspi_dbus_call (obj, atspi_interface_component,
+ "ScrollToPoint", error, "uii=>b", coords, x, y, &retval);
+
+ return retval;
+}
+
static void
atspi_component_base_init (AtspiComponent *klass)
{
gboolean atspi_component_set_size (AtspiComponent *obj, gint width, gint height, GError **error);
+gboolean atspi_component_scroll_to (AtspiComponent *obj, AtspiScrollType type, GError **error);
+
+gboolean atspi_component_scroll_to_point (AtspiComponent *obj, AtspiCoordType coords, gint x, gint y, GError **error);
+
G_END_DECLS
#endif /* _ATSPI_COMPONENT_H_ */
Accessibility::StateType\n
Accessibility::Event\n
Accessibility::EventDetails \n
+ Accessibility::ScrollType \n
+ Accessibility::CoordType \n
\section Registry
Accessibility also includes Accessibility::Registry,
/**
* AtspiCoordType:
* @ATSPI_COORD_TYPE_SCREEN: Specifies xy coordinates relative to the screen.
- * @ATSPI_COORD_TYPE_WINDOW: Specifies xy coordinates relative to the widget's
+ * @ATSPI_COORD_TYPE_WINDOW: Specifies xy coordinates relative to the widget's
* top-level window.
+ * @ATSPI_COORD_TYPE_PARENT: Specifies xy coordinates relative to the widget's
+ * immediate parent.
*
* Enumeration used by #AtspiComponent, #AtspiImage, and #AtspiText interfaces
* to specify whether coordinates are relative to the window or the screen.
typedef enum {
ATSPI_COORD_TYPE_SCREEN,
ATSPI_COORD_TYPE_WINDOW,
+ ATSPI_COORD_TYPE_PARENT,
} AtspiCoordType;
/**
*
* One higher than the highest valid value of #AtspiCoordType.
**/
-#define ATSPI_COORD_TYPE_COUNT (1+1)
+#define ATSPI_COORD_TYPE_COUNT (2+1)
/**
* AtspiCollectionSortOrder:
- * @ATSPI_Collection_SORT_ORDER_INVALID:
- * @ATSPI_Collection_SORT_ORDER_CANONICAL:
- * @ATSPI_Collection_SORT_ORDER_FLOW:
- * @ATSPI_Collection_SORT_ORDER_TAB:
- * @ATSPI_Collection_SORT_ORDER_REVERSE_CANONICAL:
- * @ATSPI_Collection_SORT_ORDER_REVERSE_FLOW:
- * @ATSPI_Collection_SORT_ORDER_REVERSE_TAB:
- * @ATSPI_Collection_SORT_ORDER_LAST_DEFINED:
+ * @ATSPI_Collection_SORT_ORDER_INVALID: Invalid sort order
+ * @ATSPI_Collection_SORT_ORDER_CANONICAL: Canonical sort order
+ * @ATSPI_Collection_SORT_ORDER_FLOW: Flow sort order
+ * @ATSPI_Collection_SORT_ORDER_TAB: Tab sort order
+ * @ATSPI_Collection_SORT_ORDER_REVERSE_CANONICAL: Reverse canonical sort order
+ * @ATSPI_Collection_SORT_ORDER_REVERSE_FLOW: Reverse flow sort order
+ * @ATSPI_Collection_SORT_ORDER_REVERSE_TAB: Reverse tab sort order
+ * @ATSPI_Collection_SORT_ORDER_LAST_DEFINED: Used only to determine the end of the
+ * enumeration.
+
*
* Enumeration used by interface #AtspiCollection to specify
* the way #AtspiAccesible objects should be sorted.
/**
* AtspiCollectionMatchType:
- * @ATSPI_Collection_MATCH_INVALID: Indicates an error condition or
+ * @ATSPI_Collection_MATCH_INVALID: Indicates an error condition or
* uninitialized value.
* @ATSPI_Collection_MATCH_ALL: #TRUE if all of the criteria are met.
* @ATSPI_Collection_MATCH_ANY: #TRUE if any of the criteria are met.
* @ATSPI_Collection_MATCH_NONE: #TRUE if none of the criteria are met.
* @ATSPI_Collection_MATCH_EMPTY: Same as @ATSPI_Collection_MATCH_ALL if
- * the criteria is non-empty; for empty criteria this rule requires returned
- * value to also have empty set.
+ * the criteria is non-empty; for empty criteria this rule requires returned
+ * value to also have empty set.
* @ATSPI_Collection_MATCH_LAST_DEFINED: Used only to determine the end of the
* enumeration.
*
/**
* AtspiCollectionTreeTraversalType:
- * @ATSPI_Collection_TREE_RESTRICT_CHILDREN:
- * @ATSPI_Collection_TREE_RESTRICT_SIBLING:
- * @ATSPI_Collection_TREE_INORDER:
- * @ATSPI_Collection_TREE_LAST_DEFINED:
+ * @ATSPI_Collection_TREE_RESTRICT_CHILDREN: Restrict children tree traveral
+ * @ATSPI_Collection_TREE_RESTRICT_SIBLING: Restrict sibling tree traversal
+ * @ATSPI_Collection_TREE_INORDER: In-order tree traversal.
+ * @ATSPI_Collection_TREE_LAST_DEFINED: Used only to determine the end of the
+ * enumeration.
*
* Enumeration used by interface #AtspiCollection to specify
* restrictions on #AtspiAccesible objects to be traversed.
* @ATSPI_STATE_ACTIVE: Indicates a window is currently the active window, or
* an object is the active subelement within a container or table.
* @ATSPI_STATE_ACTIVE should not be used for objects which have
- * @ATSPI_STATE_FOCUSABLE or @ATSPI_STATE_SELECTABLE: Those objects should use
+ * #ATSPI_STATE_FOCUSABLE or #ATSPI_STATE_SELECTABLE: Those objects should use
* @ATSPI_STATE_FOCUSED and @ATSPI_STATE_SELECTED respectively.
* @ATSPI_STATE_ACTIVE is a means to indicate that an object which is not
* focusable and not selectable is the currently-active item within its
* disclosure of its children.
* @ATSPI_STATE_EXPANDED: Indicates this object is expanded.
* @ATSPI_STATE_FOCUSABLE: Indicates this object can accept keyboard focus,
- * which means all events resulting from typing on the keyboard will
- * normally be passed to it when it has focus.
+ * which means all events resulting from typing on the keyboard will
+ * normally be passed to it when it has focus.
* @ATSPI_STATE_FOCUSED: Indicates this object currently has the keyboard
* focus.
* @ATSPI_STATE_HAS_TOOLTIP: Indicates that the object has an associated
/**
* AtspiKeyEventType:
- * @ATSPI_KEY_PRESSED:
- * @ATSPI_KEY_RELEASED:
+ * @ATSPI_KEY_PRESSED: Key press event
+ * @ATSPI_KEY_RELEASED: Key release event
*
* Deprecated. Should not be used.
*
* subject to the out-of-keymap limitations described for
* @ATSPI_KEY_SYM. In practice this limitation primarily effects
* Chinese and Japanese locales.
+ * @ATSPI_KEY_LOCKMODIFIERS: Emulates locking a set of modifiers.
+ * @ATSPI_KEY_UNLOCKMODIFIERS: Emulates unlocking a set of modifiers.
*
* Enumeration used when synthesizing keyboard input via
* #atspi_generate_keyboard_event.
ATSPI_KEY_PRESSRELEASE,
ATSPI_KEY_SYM,
ATSPI_KEY_STRING,
+ ATSPI_KEY_LOCKMODIFIERS,
+ ATSPI_KEY_UNLOCKMODIFIERS,
} AtspiKeySynthType;
/**
* the valuator. Common examples include association of scrollbars with the
* viewport or panel which they control.
*
- *
+ *
* Enumeration used to specify
* the type of relation encapsulated in an #AtspiRelation object.
*
* @ATSPI_ROLE_INFO_BAR: An object designed to present a message to the user
* within an existing window.
* @ATSPI_ROLE_LEVEL_BAR: A bar that serves as a level indicator to, for
- * instance, show the strength of a password or the state of a battery.
- * Since: 2.8
- *@ATSPI_ROLE_TITLE_BAR: A bar that serves as the title of a window or a
- * dialog. @Since: 2.12
- *@ATSPI_ROLE_BLOCK_QUOTE: An object which contains a text section
- * that is quoted from another source. @Since: 2.12
- *@ATSPI_ROLE_AUDIO: An object which represents an audio
- * element. @Since: 2.12
- *@ATSPI_ROLE_VIDEO: An object which represents a video
- * element. @Since: 2.12
- *@ATSPI_ROLE_DEFINITION: A definition of a term or concept. @Since: 2.12
- *@ATSPI_ROLE_ARTICLE: A section of a page that consists of a
- * composition that forms an independent part of a document, page, or
- * site. Examples: A blog entry, a news story, a forum post. @Since:
- * 2.12
- *@ATSPI_ROLE_LANDMARK: A region of a web page intended as a
- * navigational landmark. This is designed to allow Assistive
- * Technologies to provide quick navigation among key regions within a
- * document. @Since: 2.12
- *@ATSPI_ROLE_LOG: A text widget or container holding log content, such
- * as chat history and error logs. In this role there is a
- * relationship between the arrival of new items in the log and the
- * reading order. The log contains a meaningful sequence and new
- * information is added only to the end of the log, not at arbitrary
- * points. @Since: 2.12
- *@ATSPI_ROLE_MARQUEE: A container where non-essential information
- * changes frequently. Common usages of marquee include stock tickers
- * and ad banners. The primary difference between a marquee and a log
- * is that logs usually have a meaningful order or sequence of
- * important content changes. @Since: 2.12
- *@ATSPI_ROLE_MATH: A text widget or container that holds a mathematical
- * expression. @Since: 2.12
- *@ATSPI_ROLE_RATING: A widget whose purpose is to display a rating,
- * such as the number of stars associated with a song in a media
- * player. Objects of this role should also implement
- * AtspiValue. @Since: 2.12
- *@ATSPI_ROLE_TIMER: An object containing a numerical counter which
- * indicates an amount of elapsed time from a start point, or the time
- * remaining until an end point. @Since: 2.12
- *@ATSPI_ROLE_STATIC: A generic non-container object whose purpose is to display
- * a brief amount of information to the user and whose role is known by the
- * implementor but lacks semantic value for the user. Examples in which
- * @ATSPI_ROLE_STATIC is appropriate include the message displayed in a message
- * box and an image used as an alternative means to display text.
- * @ATSPI_ROLE_STATIC should not be applied to widgets which are traditionally
- * interactive, objects which display a significant amount of content, or any
- * object which has an accessible relation pointing to another object. The
- * displayed information, as a general rule, should be exposed through the
- * accessible name of the object. For labels which describe another widget, see
- * @ATSPI_ROLE_LABEL. For text views, see @ATSPI_ROLE_TEXT. For generic
- * containers, see @ATSPI_ROLE_PANEL. For objects whose role is not known by the
- * implementor, see @ATSPI_ROLE_UNKNOWN. @Since: 2.16.
- *@ATSPI_ROLE_MATH_FRACTION: An object that represents a mathematical fraction.
- * @Since: 2.16.
- *@ATSPI_ROLE_MATH_ROOT: An object that represents a mathematical expression
- * displayed with a radical. @Since: 2.16.
- *@ATSPI_ROLE_SUBSCRIPT: An object that contains text that is displayed as a
- * subscript. @Since: 2.16.
- *@ATSPI_ROLE_SUPERSCRIPT: An object that contains text that is displayed as a
- * superscript. @Since: 2.16.
- *@ATSPI_ROLE_DESCRIPTION_LIST: An object that represents a list of term-value
- * groups. A term-value group represents an individual description and consist
- * of one or more names (@ATSPI_ROLE_DESCRIPTION_TERM) followed by one or more
- * values (@ATSPI_ROLE_DESCRIPTION_VALUE). For each list, there should not be
- * more than one group with the same term name. @Since: 2.26.
- *@ATSPI_ROLE_DESCRIPTION_TERM: An object that represents the term, or name,
- * part of a term-description group in a description list. @Since: 2.26.
- *@ATSPI_ROLE_DESCRIPTION_VALUE: An object that represents the description,
- * definition, or value of a term-description group in a description list.
- * The values within a group are alternatives, meaning that you can have
- * several @ATSPI_ROLE_DESCRIPTION_VALUE objects for a given
- * @ATSPI_ROLE_DESCRIPTION_TERM. @Since: 2.26.
- *@ATSPI_ROLE_FOOTNOTE: An object that contains the text of a footnote. @Since: 2.26.
- * @ATSPI_ROLE_LAST_DEFINED: Not a valid role, used for finding end of
- * enumeration.
+ * instance, show the strength of a password or the state of a battery. @Since: 2.8
+ * @ATSPI_ROLE_TITLE_BAR: A bar that serves as the title of a window or a
+ * dialog. @Since: 2.12
+ * @ATSPI_ROLE_BLOCK_QUOTE: An object which contains a text section
+ * that is quoted from another source. @Since: 2.12
+ * @ATSPI_ROLE_AUDIO: An object which represents an audio
+ * element. @Since: 2.12
+ * @ATSPI_ROLE_VIDEO: An object which represents a video
+ * element. @Since: 2.12
+ * @ATSPI_ROLE_DEFINITION: A definition of a term or concept. @Since: 2.12
+ * @ATSPI_ROLE_ARTICLE: A section of a page that consists of a
+ * composition that forms an independent part of a document, page, or
+ * site. Examples: A blog entry, a news story, a forum post. @Since:
+ * 2.12
+ * @ATSPI_ROLE_LANDMARK: A region of a web page intended as a
+ * navigational landmark. This is designed to allow Assistive
+ * Technologies to provide quick navigation among key regions within a
+ * document. @Since: 2.12
+ * @ATSPI_ROLE_LOG: A text widget or container holding log content, such
+ * as chat history and error logs. In this role there is a
+ * relationship between the arrival of new items in the log and the
+ * reading order. The log contains a meaningful sequence and new
+ * information is added only to the end of the log, not at arbitrary
+ * points. @Since: 2.12
+ * @ATSPI_ROLE_MARQUEE: A container where non-essential information
+ * changes frequently. Common usages of marquee include stock tickers
+ * and ad banners. The primary difference between a marquee and a log
+ * is that logs usually have a meaningful order or sequence of
+ * important content changes. @Since: 2.12
+ * @ATSPI_ROLE_MATH: A text widget or container that holds a mathematical
+ * expression. @Since: 2.12
+ * @ATSPI_ROLE_RATING: A widget whose purpose is to display a rating,
+ * such as the number of stars associated with a song in a media
+ * player. Objects of this role should also implement
+ * AtspiValue. @Since: 2.12
+ * @ATSPI_ROLE_TIMER: An object containing a numerical counter which
+ * indicates an amount of elapsed time from a start point, or the time
+ * remaining until an end point. @Since: 2.12
+ * @ATSPI_ROLE_STATIC: A generic non-container object whose purpose is to display
+ * a brief amount of information to the user and whose role is known by the
+ * implementor but lacks semantic value for the user. Examples in which
+ * @ATSPI_ROLE_STATIC is appropriate include the message displayed in a message
+ * box and an image used as an alternative means to display text.
+ * @ATSPI_ROLE_STATIC should not be applied to widgets which are traditionally
+ * interactive, objects which display a significant amount of content, or any
+ * object which has an accessible relation pointing to another object. The
+ * displayed information, as a general rule, should be exposed through the
+ * accessible name of the object. For labels which describe another widget, see
+ * @ATSPI_ROLE_LABEL. For text views, see @ATSPI_ROLE_TEXT. For generic
+ * containers, see @ATSPI_ROLE_PANEL. For objects whose role is not known by the
+ * implementor, see @ATSPI_ROLE_UNKNOWN. @Since: 2.16.
+ * @ATSPI_ROLE_MATH_FRACTION: An object that represents a mathematical fraction. @Since: 2.16.
+ * @ATSPI_ROLE_MATH_ROOT: An object that represents a mathematical expression
+ * displayed with a radical. @Since: 2.16.
+ * @ATSPI_ROLE_SUBSCRIPT: An object that contains text that is displayed as a
+ * subscript. @Since: 2.16.
+ * @ATSPI_ROLE_SUPERSCRIPT: An object that contains text that is displayed as a
+ * superscript. @Since: 2.16.
+ * @ATSPI_ROLE_DESCRIPTION_LIST: An object that represents a list of term-value
+ * groups. A term-value group represents an individual description and consist
+ * of one or more names (@ATSPI_ROLE_DESCRIPTION_TERM) followed by one or more
+ * values (@ATSPI_ROLE_DESCRIPTION_VALUE). For each list, there should not be
+ * more than one group with the same term name. @Since: 2.26.
+ * @ATSPI_ROLE_DESCRIPTION_TERM: An object that represents a term or phrase
+ * with a corresponding definition. @Since: 2.26.
+ * @ATSPI_ROLE_DESCRIPTION_VALUE: An object that represents the description,
+ * definition, or value of a term. @Since: 2.26.
+ * @ATSPI_ROLE_FOOTNOTE: An object that contains the text of a footnote. @Since: 2.26.
+ * @ATSPI_ROLE_LAST_DEFINED: Not a valid role, used for finding end of
+ * enumeration.
*
* Enumeration used by interface #AtspiAccessible to specify the role
* of an #AtspiAccessible object.
ATSPI_CACHE_UNDEFINED = 0x40000000,
} AtspiCache;
+/**
+ * AtspiScrollType:
+ * @ATSPI_SCROLL_TOP_LEFT: Scroll the object to the top left corner of the
+ * window.
+ * @ATSPI_SCROLL_BOTTOM_RIGHT: Scroll the object to the bottom right corner of
+ * the window.
+ * @ATSPI_SCROLL_TOP_EDGE: Scroll the object to the top edge of the window.
+ * @ATSPI_SCROLL_BOTTOM_EDGE: Scroll the object to the bottom edge of the
+ * window.
+ * @ATSPI_SCROLL_LEFT_EDGE: Scroll the object to the left edge of the
+ * window.
+ * @ATSPI_SCROLL_RIGHT_EDGE: Scroll the object to the right edge of the
+ * window.
+ * @ATSPI_SCROLL_ANYWHERE: Scroll the object to application-dependent position
+ * on the window.
+ *
+ * Enumeration used by interface #AtspiAccessible to specify where an
+ * #AtspiAccessible object should be placed on the screen when using scroll_to.
+ *
+ */
+typedef enum {
+ ATSPI_SCROLL_TOP_LEFT,
+ ATSPI_SCROLL_BOTTOM_RIGHT,
+ ATSPI_SCROLL_TOP_EDGE,
+ ATSPI_SCROLL_BOTTOM_EDGE,
+ ATSPI_SCROLL_LEFT_EDGE,
+ ATSPI_SCROLL_RIGHT_EDGE,
+ ATSPI_SCROLL_ANYWHERE
+} AtspiScrollType;
+
+/**
+ * ATSPI_SCROLLTYPE_COUNT:
+ *
+ * One higher than the highest valid value of #AtspiScrollType.
+ */
+#define ATSPI_SCROLLTYPE_COUNT (6+1)
+
#define ATSPI_DBUS_NAME_REGISTRY "org.a11y.atspi.Registry"
#define ATSPI_DBUS_PATH_REGISTRY "/org/a11y/atspi/registry"
#define ATSPI_DBUS_INTERFACE_REGISTRY "org.a11y.atspi.Registry"
if (strcmp (dbus_message_get_signature (message), "(uiuuisb)") != 0)
{
- g_warning ("Atspi: Unknown signature for an event");
+ g_warning ("AT-SPI: Unknown signature for an event");
goto done;
}
if (sscanf (path, "/org/a11y/atspi/listeners/%d", &id) != 1)
{
- g_warning ("Atspi: Bad listener path: %s\n", path);
+ g_warning ("AT-SPI: Bad listener path: %s\n", path);
goto done;
}
retval = (*klass->device_event) (listener, &event);
if (retval != 0 && retval != 1)
{
- g_warning ("at-spi: device event handler returned %d; should be 0 or 1", retval);
+ g_warning ("AT-SPI: device event handler returned %d; should be 0 or 1", retval);
retval = 0;
}
}
/*** END file-header ***/
/*** BEGIN file-production ***/
-/* enumerations from "@filename@" */
+/* enumerations from "@basename@" */
#include "@filename@"
/*** END file-production ***/
/*** END file-header ***/
/*** BEGIN file-production ***/
-/* Enumerations from "@filename@" */
+/* Enumerations from "@basename@" */
/*** END file-production ***/
info = g_hash_table_lookup (callbacks, callback);
if (!info)
{
- g_warning ("Atspi: Dereferencing invalid callback %p\n", callback);
+ g_warning ("AT-SPI: Dereferencing invalid callback %p\n", callback);
return;
}
info->ref_count--;
dbus_bus_add_match (_atspi_bus(), matchrule, &d_error);
if (dbus_error_is_set (&d_error))
{
- g_warning ("Atspi: Adding match: %s", d_error.message);
+ g_warning ("AT-SPI: Adding match: %s", d_error.message);
dbus_error_free (&d_error);
/* TODO: Set error */
}
if (!convert_event_type_to_dbus (e->type, &category, &name, &detail, NULL))
{
- g_warning ("Atspi: Couldn't parse event: %s\n", e->type);
+ g_warning ("AT-SPI: Couldn't parse event: %s\n", e->type);
return;
}
for (l = event_listeners; l; l = g_list_next (l))
#define _(x) dgettext (GETTEXT_PACKAGE, x)
#define N_(x) x
-/**
+/*
* DBusGMessageQueue:
* A GSource subclass for dispatching DBusConnection messages.
* We need this on top of the IO handlers, because sometimes
*/
typedef struct
{
- GSource source; /**< the parent GSource */
- DBusConnection *connection; /**< the connection to dispatch */
+ GSource source; /* the parent GSource */
+ DBusConnection *connection; /* the connection to dispatch */
} DBusGMessageQueue;
static gboolean message_queue_prepare (GSource *source,
typedef struct
{
- GMainContext *context; /**< the main context */
- GSList *ios; /**< all IOHandler */
- GSList *timeouts; /**< all TimeoutHandler */
- DBusConnection *connection; /**< NULL if this is really for a server not a connection */
- GSource *message_queue_source; /**< DBusGMessageQueue */
+ GMainContext *context; /* the main context */
+ GSList *ios; /* all IOHandler */
+ GSList *timeouts; /* all TimeoutHandler */
+ DBusConnection *connection; /* NULL if this is really for a server not a connection */
+ GSource *message_queue_source; /* DBusGMessageQueue */
} ConnectionSetup;
return cs;
}
-/** @} */ /* End of GLib bindings internals */
+/* @} */ /* End of GLib bindings internals */
/**
* atspi_dbus_connection_setup_with_g_main: (skip)
if (role < 128)
rule->roles [role / 32] |= (1 << (role % 32));
else
- g_warning ("Atspi: unexpected role %d\n", role);
+ g_warning ("AT-SPI: unexpected role %d\n", role);
}
}
else
} \
if (strcmp (dbus_message_get_signature (message), type) != 0) \
{ \
- g_warning ("at-spi: Expected message signature %s but got %s at %s line %d", type, dbus_message_get_signature (message), __FILE__, __LINE__); \
+ g_warning ("AT-SPI: Expected message signature %s but got %s at %s line %d", type, dbus_message_get_signature (message), __FILE__, __LINE__); \
dbus_message_unref (message); \
return (ret); \
}
else
{
if (!strcmp (error.name, DBUS_ERROR_FILE_NOT_FOUND))
- g_warning ("Unable to open bus connection: %s", error.message);
+ g_warning ("AT-SPI: Unable to open bus connection: %s", error.message);
dbus_error_free (&error);
}
}
dbus_message_iter_init (reply, &iter);
if (dbus_message_iter_get_arg_type (&iter) != 'v')
{
- g_warning ("AT-SPI: expected a variant when fetching %s from interface %s; got %s\n", name, interface, dbus_message_get_signature (reply));
+ g_warning ("atspi_dbus_get_property: expected a variant when fetching %s from interface %s; got %s\n", name, interface, dbus_message_get_signature (reply));
goto done;
}
dbus_message_iter_recurse (&iter, &iter_variant);
if (!reply)
{
- g_warning ("Error retrieving accessibility bus address: %s: %s",
+ g_warning ("AT-SPI: Error retrieving accessibility bus address: %s: %s",
error.name, error.message);
dbus_error_free (&error);
goto out;
if (a11y_dbus_slot == -1)
if (!dbus_connection_allocate_data_slot (&a11y_dbus_slot))
- g_warning ("at-spi: Unable to allocate D-Bus slot");
+ g_warning ("AT-SPI: Unable to allocate D-Bus slot");
address_env = g_getenv ("AT_SPI_BUS_ADDRESS");
if (address_env != NULL && *address_env != 0)
/**
* atspi_generate_keyboard_event:
- * @keyval: a #gint indicating the keycode or keysym of the key event
- * being synthesized.
+ * @keyval: a #gint indicating the keycode or keysym or modifier mask of the
+ * key event being synthesized.
* @keystring: (allow-none): an (optional) UTF-8 string which, if
* @synth_type is %ATSPI_KEY_STRING, indicates a 'composed'
* keyboard input string being synthesized; this type of
* input method (such as XIM) were used.
* @synth_type: an #AtspiKeySynthType flag indicating whether @keyval
* is to be interpreted as a keysym rather than a keycode
- * (%ATSPI_KEY_SYM) or a string (%ATSPI_KEY_STRING), or
+ * (%ATSPI_KEY_SYM) or a string (%ATSPI_KEY_STRING) or a modifier
+ * mask (%ATSPI_KEY_LOCKMODIFIERS and %ATSPI_KEY_UNLOCKMODIFIERS), or
* whether to synthesize %ATSPI_KEY_PRESS,
* %ATSPI_KEY_RELEASE, or both (%ATSPI_KEY_PRESSRELEASE).
* @error: (allow-none): a pointer to a %NULL #GError pointer, or %NULL
install_header: true)
atspi_enum_h = atspi_enums[1]
-atspi = shared_library('atspi', atspi_sources + atspi_enums,
- version: soversion.split('.')[0],
- soversion: soversion,
+atspi = library('atspi', atspi_sources + atspi_enums,
+ version: soversion,
+ soversion: soversion.split('.')[0],
include_directories: [ root_inc, registryd_inc ],
dependencies: [ libdbus_dep, gobject_dep, dbind_dep, x11_deps ],
install: true)
gir_extra_args = [
'--c-include=atspi/atspi.h',
- '--pkg-export=atspi-2'
+ '--pkg-export=atspi-2',
+ '--quiet',
]
gir_dir = join_paths(atspi_datadir, 'gir-1.0')
)
endif
+pkgconfig = import('pkgconfig')
+pkgconfig.generate(
+ name: 'atspi',
+ description: 'Accessibility Technology software library',
+ version: meson.project_version(),
+ libraries: atspi,
+ requires: 'dbus-1 glib-2.0',
+ subdirs: 'at-spi-2.0',
+ filebase: 'atspi-2',
+)
*
* at-spi-bus-launcher: Manage the a11y bus as a child process
*
- * Copyright 2011 Red Hat, Inc.
+ * Copyright 2011-2018 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
#include <unistd.h>
#include <string.h>
#include <signal.h>
+#ifdef __linux__
+#include <sys/prctl.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#endif
#include <sys/wait.h>
#include <errno.h>
#include <stdio.h>
GDBusConnection *session_bus;
GSettings *a11y_schema;
GSettings *interface_schema;
+ int name_owner_id;
GDBusProxy *client_proxy;
int a11y_bus_pid;
char *a11y_bus_address;
int pipefd[2];
+ int listenfd;
char *a11y_launch_error_message;
} A11yBusLauncher;
register_client (app);
}
-static void
-setup_bus_child (gpointer data)
-{
- A11yBusLauncher *app = data;
- (void) app;
-
- close (app->pipefd[0]);
- dup2 (app->pipefd[1], 3);
- close (app->pipefd[1]);
-
- /* On Linux, tell the bus process to exit if this process goes away */
-#ifdef __linux
-#include <sys/prctl.h>
- prctl (PR_SET_PDEATHSIG, 15);
-#endif
-}
-
/**
* unix_read_all_fd_to_string:
*
{
ssize_t bytes_read;
- while (max_bytes > 1 && (bytes_read = read (fd, buf, MAX (4096, max_bytes - 1))))
+ while (max_bytes > 1 && (bytes_read = read (fd, buf, MIN (4096, max_bytes - 1))))
{
if (bytes_read < 0)
return FALSE;
g_main_loop_quit (app->loop);
}
+#ifdef DBUS_DAEMON
+static void
+setup_bus_child_daemon (gpointer data)
+{
+ A11yBusLauncher *app = data;
+ (void) app;
+
+ close (app->pipefd[0]);
+ dup2 (app->pipefd[1], 3);
+ close (app->pipefd[1]);
+
+ /* On Linux, tell the bus process to exit if this process goes away */
+#ifdef __linux__
+ prctl (PR_SET_PDEATHSIG, 15);
+#endif
+}
+
static gboolean
-ensure_a11y_bus (A11yBusLauncher *app)
+ensure_a11y_bus_daemon (A11yBusLauncher *app, char *config_path)
{
+ char *argv[] = { DBUS_DAEMON, config_path, "--nofork", "--print-address", "3", NULL };
GPid pid;
- char *argv[] = { DBUS_DAEMON, NULL, "--nofork", "--print-address", "3", NULL };
char addr_buf[2048];
GError *error = NULL;
- const char *config_path = NULL;
-
- if (app->a11y_bus_pid != 0)
- return FALSE;
-
- if (g_file_test (SYSCONFDIR"/at-spi2/accessibility.conf", G_FILE_TEST_EXISTS))
- config_path = "--config-file="SYSCONFDIR"/at-spi2/accessibility.conf";
- else
- config_path = "--config-file="DATADIR"/defaults/at-spi2/accessibility.conf";
-
- argv[1] = config_path;
if (pipe (app->pipefd) < 0)
g_error ("Failed to create pipe: %s", strerror (errno));
-
+
+ g_clear_pointer (&app->a11y_launch_error_message, g_free);
+
if (!g_spawn_async (NULL,
argv,
NULL,
G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
- setup_bus_child,
+ setup_bus_child_daemon,
app,
&pid,
&error))
app->a11y_bus_address = g_strchomp (g_strdup (addr_buf));
g_debug ("a11y bus address: %s", app->a11y_bus_address);
+ return TRUE;
+
+error:
+ close (app->pipefd[0]);
+ close (app->pipefd[1]);
+ app->state = A11Y_BUS_STATE_ERROR;
+
+ return FALSE;
+}
+#else
+static gboolean
+ensure_a11y_bus_daemon (A11yBusLauncher *app, char *config_path)
+{
+ return FALSE;
+}
+#endif
+
+#ifdef DBUS_BROKER
+static void
+setup_bus_child_broker (gpointer data)
+{
+ A11yBusLauncher *app = data;
+ gchar *pid_str;
+ (void) app;
+
+ dup2 (app->listenfd, 3);
+ close (app->listenfd);
+ g_setenv("LISTEN_FDS", "1", TRUE);
+
+ pid_str = g_strdup_printf("%u", getpid());
+ g_setenv("LISTEN_PID", pid_str, TRUE);
+ g_free(pid_str);
+
+ /* Tell the bus process to exit if this process goes away */
+ prctl (PR_SET_PDEATHSIG, SIGTERM);
+}
+
+static gboolean
+ensure_a11y_bus_broker (A11yBusLauncher *app, char *config_path)
+{
+ char *argv[] = { DBUS_BROKER, config_path, "--scope", "user", NULL };
+ struct sockaddr_un addr = { .sun_family = AF_UNIX };
+ socklen_t addr_len = sizeof(addr);
+ GPid pid;
+ GError *error = NULL;
+
+ if ((app->listenfd = socket (PF_UNIX, SOCK_STREAM | SOCK_NONBLOCK, 0)) < 0)
+ g_error ("Failed to create listening socket: %s", strerror (errno));
+
+ if (bind (app->listenfd, (struct sockaddr *)&addr, sizeof(sa_family_t)) < 0)
+ g_error ("Failed to bind listening socket: %s", strerror (errno));
+
+ if (getsockname (app->listenfd, (struct sockaddr *)&addr, &addr_len) < 0)
+ g_error ("Failed to get socket name for listening socket: %s", strerror(errno));
+
+ if (listen (app->listenfd, 1024) < 0)
+ g_error ("Failed to listen on socket: %s", strerror(errno));
+
+ g_clear_pointer (&app->a11y_launch_error_message, g_free);
+
+ if (!g_spawn_async (NULL,
+ argv,
+ NULL,
+ G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
+ setup_bus_child_broker,
+ app,
+ &pid,
+ &error))
+ {
+ app->a11y_bus_pid = -1;
+ app->a11y_launch_error_message = g_strdup (error->message);
+ g_clear_error (&error);
+ goto error;
+ }
+
+ close (app->listenfd);
+ app->listenfd = -1;
+
+ g_child_watch_add (pid, on_bus_exited, app);
+ app->a11y_bus_pid = pid;
+ g_debug ("Launched a11y bus, child is %ld", (long) pid);
+ app->state = A11Y_BUS_STATE_RUNNING;
+
+ app->a11y_bus_address = g_strconcat("unix:abstract=", addr.sun_path + 1, NULL);
+ g_debug ("a11y bus address: %s", app->a11y_bus_address);
+
+ return TRUE;
+
+error:
+ close (app->listenfd);
+ app->state = A11Y_BUS_STATE_ERROR;
+
+ return FALSE;
+}
+#else
+static gboolean
+ensure_a11y_bus_broker (A11yBusLauncher *app, char *config_path)
+{
+ return FALSE;
+}
+#endif
+
+static gboolean
+ensure_a11y_bus (A11yBusLauncher *app)
+{
+ char *config_path = NULL;
+ gboolean success = FALSE;
+
+ if (app->a11y_bus_pid != 0)
+ return FALSE;
+
+ if (g_file_test (SYSCONFDIR"/at-spi2/accessibility.conf", G_FILE_TEST_EXISTS))
+ config_path = "--config-file="SYSCONFDIR"/at-spi2/accessibility.conf";
+ else
+ config_path = "--config-file="DATADIR"/defaults/at-spi2/accessibility.conf";
+
+#ifdef WANT_DBUS_BROKER
+ success = ensure_a11y_bus_broker (app, config_path);
+ if (!success)
+ {
+ if (!ensure_a11y_bus_daemon (app, config_path))
+ return FALSE;
+ }
+#else
+ success = ensure_a11y_bus_daemon (app, config_path);
+ if (!success)
+ {
+ if (!ensure_a11y_bus_broker (app, config_path))
+ return FALSE;
+ }
+#endif
+
#ifdef HAVE_X11
{
Display *display = XOpenDisplay (NULL);
#endif
return TRUE;
-
- error:
- close (app->pipefd[0]);
- close (app->pipefd[1]);
- app->state = A11Y_BUS_STATE_ERROR;
-
- return FALSE;
}
static void
static GSettings *
get_schema (const gchar *name)
{
+#if GLIB_CHECK_VERSION (2, 32, 0)
+ GSettingsSchemaSource *source = g_settings_schema_source_get_default ();
+ GSettingsSchema *schema = g_settings_schema_source_lookup (source, name, FALSE);
+
+ if (schema == NULL)
+ return NULL;
+
+ return g_settings_new_full (schema, NULL, NULL);
+#else
const char * const *schemas = NULL;
gint i;
}
return NULL;
+#endif
}
static void
gsettings_key_changed (GSettings *gsettings, const gchar *key, void *user_data)
{
gboolean new_val = g_settings_get_boolean (gsettings, key);
- A11yBusLauncher *app = user_data;
if (!strcmp (key, "toolkit-accessibility"))
handle_a11y_enabled_change (_global_app, new_val, FALSE);
main (int argc,
char **argv)
{
- GError *error = NULL;
- GMainLoop *loop;
- GDBusConnection *session_bus;
- int name_owner_id;
gboolean a11y_set = FALSE;
gboolean screen_reader_set = FALSE;
gint i;
introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
g_assert (introspection_data != NULL);
- name_owner_id = g_bus_own_name (G_BUS_TYPE_SESSION,
- "org.a11y.Bus",
- G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT,
- on_bus_acquired,
- on_name_acquired,
- on_name_lost,
- _global_app,
- NULL);
+ _global_app->name_owner_id =
+ g_bus_own_name (G_BUS_TYPE_SESSION,
+ "org.a11y.Bus",
+ G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT,
+ on_bus_acquired,
+ on_name_acquired,
+ on_name_lost,
+ _global_app,
+ NULL);
g_main_loop_run (_global_app->loop);
install: true,
install_dir: systemd_user_dir)
+launcher_args = [
+ '-DSYSCONFDIR="@0@"'.format(atspi_sysconfdir),
+ '-DDATADIR="@0@"'.format(atspi_datadir),
+ ]
+
if get_option('dbus_daemon') != 'default'
- dbus_daemon = get_option('dbus_daemon')
+ launcher_args += '-DDBUS_DAEMON="@0@"'.format(get_option('dbus_daemon'))
else
dbus_daemon = find_program('dbus-daemon',
'/sbin/dbus-daemon',
'/libexec/dbus-daemon',
'/usr/libexec/dbus-daemon',
'/usr/pkg/bin/dbus-daemon',
- required: true).path()
+ required: false)
+ if dbus_daemon.found()
+ launcher_args += '-DDBUS_DAEMON="@0@"'.format(dbus_daemon.path())
+ endif
+endif
+
+if get_option('dbus_broker') != 'default'
+ launcher_args += '-DDBUS_BROKER="@0@"'.format(get_option('dbus_broker'))
+else
+ dbus_broker = find_program('dbus-broker-launch',
+ required: false)
+ if dbus_broker.found()
+ launcher_args += '-DDBUS_BROKER="@0@"'.format(dbus_broker.path())
+ endif
+endif
+
+if get_option('default_bus') == 'dbus-broker'
+ launcher_args += '-DWANT_DBUS_BROKER'
endif
executable('at-spi-bus-launcher', 'at-spi-bus-launcher.c',
include_directories: [ root_inc, include_directories('.') ],
dependencies: [ gio_dep, x11_deps ],
- c_args: [
- '-DSYSCONFDIR="@0@"'.format(atspi_sysconfdir),
- '-DDATADIR="@0@"'.format(atspi_datadir),
- '-DDBUS_DAEMON="@0@"'.format(dbus_daemon),
- ],
+ c_args: launcher_args,
install: true,
install_dir: atspi_libexecdir)
#define DESKICE_PATH "/Novell/ICEDesktop/Daemon"
#define DESKICE_NAMESPACE "Novell.ICEDesktop.Daemon"
-void marshal (DBusMessage *msg, char *type, void *ptr)
+void marshal (DBusMessage *msg, const char *type, void *ptr)
{
DBusMessageIter iter;
dbind_any_marshal (&iter, &type, &ptr);
}
-void demarshal (DBusMessage *msg, char *type, void *ptr)
+void demarshal (DBusMessage *msg, const char *type, void *ptr)
{
DBusMessageIter iter;
DBusMessage *msg;
DBusMessageIter iter;
TwoVal i, o;
- char *type_twoval = TYPEOF_TWOVAL;
- char *type;
+ const char *type_twoval = TYPEOF_TWOVAL;
+ const char *type;
void *ptr;
msg = dbus_message_new (DBUS_MESSAGE_TYPE_METHOD_CALL);
'dbind-any.c',
]
-dbind = static_library('dbind', dbind_sources,
- include_directories: root_inc,
- dependencies: [ libdbus_dep, glib_dep ],
- c_args: [ '-DG_LOG_DOMAIN="dbind"' ])
-
-dbind_dep = declare_dependency(link_with: dbind)
+dbind_dep = declare_dependency(sources: dbind_sources,
+ include_directories: root_inc,
+ compile_args: [ '-DG_LOG_DOMAIN="dbind"' ],
+ dependencies: [ libdbus_dep, glib_dep ])
test('dbind-test',
executable('dbind-test', [ 'dbtest.c', '../atspi/atspi-gmain.c' ],
<xi:include href="xml/atspi-types.xml"/>
<xi:include href="xml/atspi-constants.xml"/>
<xi:include href="xml/atspi-misc.xml"/>
- <xi:include href="xml/atspi-misc-private.xml"/>
- <xi:include href="xml/atspi-listener-private.xml"/>
</chapter>
<chapter id="object-tree">
<SECTION>
<FILE>atspi-text</FILE>
AtspiRange
-ATSPI_TYPE_RANGE
atspi_range_copy
AtspiTextRange
-ATSPI_TYPE_TEXT_RANGE
atspi_text_get_type
AtspiText
atspi_text_range_get_type
atspi_text_add_selection
atspi_text_remove_selection
atspi_text_set_selection
+atspi_text_get_string_at_offset
+atspi_text_get_text_attribute_value
+atspi_text_get_text_attributes
<SUBSECTION Standard>
ATSPI_TEXT
ATSPI_IS_TEXT
ATSPI_TYPE_TEXT
atspi_range_get_type
ATSPI_TEXT_GET_IFACE
+ATSPI_TYPE_RANGE
+ATSPI_TYPE_TEXT_RANGE
</SECTION>
<SECTION>
atspi_action_get_n_actions
atspi_action_get_description
atspi_action_get_key_binding
+atspi_action_get_action_description
+atspi_action_get_action_name
+atspi_action_get_localized_name
atspi_action_get_name
atspi_action_do_action
<SUBSECTION Standard>
atspi_document_get_locale
atspi_document_get_attribute_value
atspi_document_get_attributes
+atspi_document_get_current_page_number
+atspi_document_get_document_attribute_value
+atspi_document_get_document_attributes
+atspi_document_get_page_count
<SUBSECTION Standard>
ATSPI_DOCUMENT
ATSPI_IS_DOCUMENT
atspi_accessible_get_locale
atspi_accessible_get_toolkit_name
atspi_accessible_get_toolkit_version
+atspi_accessible_get_atspi_version
+atspi_accessible_get_id
atspi_accessible_get_application
atspi_accessible_get_action
atspi_accessible_get_collection
atspi_accessible_get_image
atspi_accessible_get_selection
atspi_accessible_get_table
+atspi_accessible_get_table_cell
atspi_accessible_get_text
atspi_accessible_get_value
+atspi_accessible_get_object_locale
+atspi_accessible_set_cache_mask
+atspi_accessible_clear_cache
+atspi_accessible_get_process_id
+atspi_accessible_get_action_iface
+atspi_accessible_get_collection_iface
+atspi_accessible_get_component_iface
+atspi_accessible_get_document_iface
+atspi_accessible_get_editable_text_iface
+atspi_accessible_get_hypertext_iface
+atspi_accessible_get_image_iface
+atspi_accessible_get_selection_iface
+atspi_accessible_get_table_iface
+atspi_accessible_get_text_iface
+atspi_accessible_get_value_iface
atspi_accessible_get_interfaces
<SUBSECTION Standard>
ATSPI_ACCESSIBLE
ATSPI_ACCESSIBLE_CLASS
ATSPI_IS_ACCESSIBLE_CLASS
ATSPI_ACCESSIBLE_GET_CLASS
+
+<SUBSECTION Private>
+AtspiAccessiblePrivate
</SECTION>
<SECTION>
</SECTION>
<SECTION>
+<FILE>atspi-hypertext</FILE>
+AtspiHypertext
+atspi_hypertext_get_n_links
+atspi_hypertext_get_link
+atspi_hypertext_get_link_index
+<SUBSECTION Standard>
+ATSPI_HYPERTEXT
+ATSPI_IS_HYPERTEXT
+ATSPI_TYPE_HYPERTEXT
+atspi_hypertext_get_type
+ATSPI_HYPERTEXT_GET_IFACE
+</SECTION>
+
+<SECTION>
<FILE>atspi-hyperlink</FILE>
<TITLE>AtspiHyperlink</TITLE>
AtspiHyperlink
<SECTION>
<FILE>atspi-editabletext</FILE>
AtspiEditableText
-atspi_editable_text_set_attributes
atspi_editable_text_insert_text
atspi_editable_text_copy_text
atspi_editable_text_cut_text
ATSPI_TYPE_EDITABLE_TEXT
atspi_editable_text_get_type
ATSPI_EDITABLE_TEXT_GET_IFACE
+<SUBSECTION Private>
+atspi_editable_text_set_attributes
</SECTION>
<SECTION>
atspi_table_cell_get_row_column_span
atspi_table_cell_get_table
<SUBSECTION Standard>
-ATSPI_TABLE
-ATSPI_IS_TABLE
-ATSPI_TYPE_TABLE
-atspi_table_get_type
-ATSPI_TABLE_GET_IFACE
+ATSPI_TABLE_CELL
+ATSPI_IS_TABLE_CELL
+ATSPI_TYPE_TABLE_CELL
+atspi_table_cell_get_type
+ATSPI_TABLE_CELL_GET_IFACE
</SECTION>
+
<SECTION>
<FILE>atspi-selection</FILE>
AtspiSelection
atspi_event_listener_new_simple
atspi_event_listener_register
atspi_event_listener_register_from_callback
+atspi_event_listener_register_from_callback_full
atspi_event_listener_register_no_data
+atspi_event_listener_register_full
atspi_event_listener_deregister
atspi_event_listener_deregister_from_callback
atspi_event_listener_deregister_no_data
</SECTION>
<SECTION>
-<FILE>atspi-hypertext</FILE>
-AtspiHypertext
-atspi_hypertext_get_n_links
-atspi_hypertext_get_link
-atspi_hypertext_get_link_index
-<SUBSECTION Standard>
-ATSPI_HYPERTEXT
-ATSPI_IS_HYPERTEXT
-ATSPI_TYPE_HYPERTEXT
-atspi_hypertext_get_type
-ATSPI_HYPERTEXT_GET_IFACE
-</SECTION>
-
-<SECTION>
<FILE>atspi-component</FILE>
AtspiRect
ATSPI_TYPE_RECT
atspi_component_get_mdi_z_order
atspi_component_grab_focus
atspi_component_get_alpha
+atspi_component_scroll_to
+atspi_component_scroll_to_point
+atspi_component_set_extents
+atspi_component_set_position
+atspi_component_set_size
<SUBSECTION Standard>
ATSPI_COMPONENT
ATSPI_IS_COMPONENT
<SECTION>
<FILE>atspi-types</FILE>
-AtspiAccessible
-AtspiAction
-AtspiCollection
-AtspiComponent
-AtspiDocument
-AtspiEditableText
-AtspiHyperlink
-AtspiHypertext
-AtspiImage
-AtspiSelection
-AtspiTable
-AtspiTableCell
-AtspiText
-AtspiValue
AtspiControllerEventMask
AtspiKeyMaskType
AtspiKeyEventMask
AtspiEventListenerMode
AtspiKeyDefinition
AtspiEvent
-ATSPI_TYPE_EVENT
AtspiKeystrokeListener
AtspiKeyListenerSyncType
+
+<SUBSECTION Standard>
+ATSPI_TYPE_EVENT
+atspi_device_event_get_type
+atspi_key_listener_sync_type_get_type
</SECTION>
<SECTION>
ATSPI_TREETRAVERSALTYPE
AtspiComponentLayer
ATSPI_COMPONENTLAYER_COUNT
+AtspiTextGranularity
AtspiTextBoundaryType
ATSPI_TEXT_BOUNDARY_TYPE_COUNT
AtspiTextClipType
ATSPI_RELATIONTYPE_COUNT
AtspiRole
ATSPI_ROLE_COUNT
+AtspiCache
+AtspiScrollType
+ATSPI_SCROLLTYPE_COUNT
+
+<SUBSECTION Standard>
+atspi_cache_get_type
+atspi_collection_match_type_get_type
+atspi_collection_sort_order_get_type
+atspi_collection_tree_traversal_type_get_type
+atspi_component_layer_get_type
+atspi_coord_type_get_type
+atspi_event_type_get_type
+atspi_key_event_type_get_type
+atspi_key_synth_type_get_type
+atspi_locale_type_get_type
+atspi_modifier_type_get_type
+atspi_modifier_type_get_type
+atspi_relation_type_get_type
+atspi_role_get_type
+atspi_scroll_type_get_type
+atspi_state_type_get_type
+atspi_text_boundary_type_get_type
+atspi_text_clip_type_get_type
+atspi_text_granularity_get_type
+ATSPI_TYPE_CACHE
+ATSPI_TYPE_COLLECTION_MATCH_TYPE
+ATSPI_TYPE_COLLECTION_SORT_ORDER
+ATSPI_TYPE_COLLECTION_TREE_TRAVERSAL_TYPE
+ATSPI_TYPE_COMPONENT_LAYER
+ATSPI_TYPE_COORD_TYPE
+ATSPI_TYPE_DEVICE_EVENT
+ATSPI_TYPE_EVENT_TYPE
+ATSPI_TYPE_KEY_EVENT_TYPE
+ATSPI_TYPE_KEY_LISTENER_SYNC_TYPE
+ATSPI_TYPE_KEY_SYNTH_TYPE
+ATSPI_TYPE_LOCALE_TYPE
+ATSPI_TYPE_MODIFIER_TYPE
+ATSPI_TYPE_RELATION_TYPE
+ATSPI_TYPE_ROLE
+ATSPI_TYPE_SCROLL_TYPE
+ATSPI_TYPE_STATE_TYPE
+ATSPI_TYPE_TEXT_BOUNDARY_TYPE
+ATSPI_TYPE_TEXT_CLIP_TYPE
+ATSPI_TYPE_TEXT_GRANULARITY
</SECTION>
<SECTION>
<FILE>atspi-misc</FILE>
atspi_init
+atspi_is_initialized
+atspi_set_timeout
+atspi_set_main_context
atspi_event_main
atspi_event_quit
atspi_exit
-</SECTION>
-<SECTION>
-<FILE>atspi-misc-private</FILE>
-ATSPI_CACHE_PARENT
+<SUBSECTION Private>
+atspi_main_loop
+atspi_get_a11y_bus
+atspi_dbus_connection_setup_with_g_main
+atspi_dbus_server_setup_with_g_main
+atspi_bus_registry
ATSPI_CACHE_CHILDREN
-ATSPI_CACHE_NAME
ATSPI_CACHE_DESCRIPTION
-ATSPI_CACHE_STATES
-ATSPI_CACHE_ROLE
ATSPI_CACHE_INTERFACES
-AtspiReference
-ATSPI_DBUS_NAME_REGISTRY
-ATSPI_DBUS_PATH_REGISTRY
-ATSPI_DBUS_INTERFACE_REGISTRY
-ATSPI_DBUS_PATH_NULL
-ATSPI_DBUS_PATH_ROOT
-ATSPI_DBUS_PATH_DEC
-ATSPI_DBUS_INTERFACE_DEC
-ATSPI_DBUS_INTERFACE_DEVICE_EVENT_LISTENER
-ATSPI_DBUS_INTERFACE_CACHE
+ATSPI_CACHE_NAME
+ATSPI_CACHE_PARENT
+ATSPI_CACHE_ROLE
+ATSPI_CACHE_STATES
ATSPI_DBUS_INTERFACE_ACCESSIBLE
ATSPI_DBUS_INTERFACE_ACTION
ATSPI_DBUS_INTERFACE_APPLICATION
+ATSPI_DBUS_INTERFACE_CACHE
ATSPI_DBUS_INTERFACE_COLLECTION
ATSPI_DBUS_INTERFACE_COMPONENT
+ATSPI_DBUS_INTERFACE_DEC
+ATSPI_DBUS_INTERFACE_DEVICE_EVENT_LISTENER
ATSPI_DBUS_INTERFACE_DOCUMENT
ATSPI_DBUS_INTERFACE_EDITABLE_TEXT
ATSPI_DBUS_INTERFACE_EVENT_KEYBOARD
ATSPI_DBUS_INTERFACE_HYPERLINK
ATSPI_DBUS_INTERFACE_HYPERTEXT
ATSPI_DBUS_INTERFACE_IMAGE
+ATSPI_DBUS_INTERFACE_REGISTRY
ATSPI_DBUS_INTERFACE_SELECTION
+ATSPI_DBUS_INTERFACE_SOCKET
ATSPI_DBUS_INTERFACE_TABLE
+ATSPI_DBUS_INTERFACE_TABLE_CELL
ATSPI_DBUS_INTERFACE_TEXT
ATSPI_DBUS_INTERFACE_VALUE
-ATSPI_DBUS_INTERFACE_SOCKET
-atspi_path_dec
-atspi_path_registry
-atspi_path_root
-atspi_bus_registry
+ATSPI_DBUS_NAME_REGISTRY
+ATSPI_DBUS_PATH_DEC
+ATSPI_DBUS_PATH_NULL
+ATSPI_DBUS_PATH_REGISTRY
+ATSPI_DBUS_PATH_ROOT
atspi_interface_accessible
atspi_interface_action
atspi_interface_application
+atspi_interface_cache
atspi_interface_collection
atspi_interface_component
atspi_interface_dec
atspi_interface_table
atspi_interface_table_cell
atspi_interface_text
-atspi_interface_cache
atspi_interface_value
-</SECTION>
+atspi_no_cache
+atspi_path_dec
+atspi_path_registry
+atspi_path_root
+AtspiReference
+AtspiError
+ATSPI_ERROR
-<SECTION>
-<FILE>atspi-listener-private</FILE>
-atspi_dbus_handle_deviceEvent
</SECTION>
-
+<!-- ##### ENUM AtspiScrollType ##### -->
+<para>
+
+</para>
+
+@ATSPI_SCROLL_TOP_LEFT:
+@ATSPI_SCROLL_BOTTOM_RIGHT:
+@ATSPI_SCROLL_TOP_EDGE:
+@ATSPI_SCROLL_BOTTOM_EDGE:
+@ATSPI_SCROLL_LEFT_EDGE:
+@ATSPI_SCROLL_RIGHT_EDGE:
+@ATSPI_SCROLL_ANYWHERE:
+
+<!-- ##### MACRO ATSPI_SCROLLTYPE_COUNT ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### ENUM AtspiCoordType ##### -->
<para>
@ATSPI_COORD_TYPE_SCREEN:
@ATSPI_COORD_TYPE_WINDOW:
+@ATSPI_COORD_TYPE_PARENT:
<!-- ##### MACRO ATSPI_COORD_TYPE_COUNT ##### -->
<para>
@ATSPI_KEY_PRESSRELEASE:
@ATSPI_KEY_SYM:
@ATSPI_KEY_STRING:
+@ATSPI_KEY_LOCKMODIFIERS:
+@ATSPI_KEY_UNLOCKMODIFIERS:
<!-- ##### MACRO ATSPI_KEYSYNTHTYPE_COUNT ##### -->
<para>
LAYER_WINDOW,
LAYER_LAST_DEFINED
}
-
+
+ /*
+ Describes where the object should be placed on the window.
+ */
+ enum uint32 ScrollType {
+ SCROLL_TOP_LEFT = 0,
+ SCROLL_BOTTOM_RIGHT,
+ SCROLL_TOP_EDGE,
+ SCROLL_BOTTOM_EDGE,
+ SCROLL_LEFT_EDGE,
+ SCROLL_RIGHT_EDGE,
+ SCROLL_ANYWHERE
+ }
+
+ /*
+ Specifies whether the coordinates are relative to the screen, to the
+ window, or to the parent object.
+ */
+ enum uint32 CoordType {
+ COORD_TYPE_SCREEN = 0,
+ COORD_TYPE_WINDOW,
+ COORD_TYPE_PARENT
+ }
+
/*
True if the specified point lies within the components bounding box.
*/
method GetAlpha reply {
double alpha;
}
+
+ /*
+ Scroll this object so it becomes visible on the screen.
+ */
+ method ScrollTo {
+ ScrollType type;
+ }
+
+ /*
+ Scroll this object so it becomes visible on the screen at a given position.
+ */
+ method ScrollToPoint {
+ CoordType type;
+ int32 x;
+ int32 y;
+ }
}
KEY_RELEASE,
KEY_PRESSRELEASE,
KEY_SYM,
- KEY_STRING
+ KEY_STRING,
+ KEY_LOCKMODIFIERS,
+ KEY_UNLOCKMODIFIERS
}
/*
project('at-spi2-core', 'c',
- version: '2.26.1',
+ version: '2.31.1',
license: 'LGPLv2.1+',
default_options: [
'buildtype=debugoptimized',
],
meson_version: '>= 0.40.1')
-add_project_arguments([ '-D_POSIX_C_SOURCE', '-D_DEFAULT_SOURCE' ], language: 'c')
+add_project_arguments([ '-D_POSIX_C_SOURCE=200809L', '-D_DEFAULT_SOURCE' ], language: 'c')
atspi_gir_ns = 'Atspi'
configure_file(output: 'config.h', configuration: at_spi_conf)
-# Compat variables for pkgconfig
-pkgconf = configuration_data()
-pkgconf.set('prefix', get_option('prefix'))
-pkgconf.set('exec_prefix', get_option('prefix'))
-pkgconf.set('libdir', atspi_libdir)
-pkgconf.set('includedir', atspi_includedir)
-pkgconf.set('VERSION', meson.project_version())
-
-configure_file(input: 'atspi-2.pc.in',
- output: 'atspi-2.pc',
- configuration: pkgconf,
- install: true,
- install_dir: join_paths(get_option('libdir'), 'pkgconfig'))
-
gnome = import('gnome')
subdir('dbind')
description: 'The path of the DBus daemon',
type: 'string',
value: 'default')
+option('dbus_broker',
+ description: 'The path of the DBus broker',
+ type: 'string',
+ value: 'default')
+option('default_bus',
+ description: 'The default DBus implementation to use',
+ type: 'combo',
+ choices: ['dbus-daemon', 'dbus-broker'],
+ value: 'dbus-daemon')
option('systemd_user_dir',
description: 'Location of the systemd user services',
type: 'string',
# Copyright (C) 2011 Listed translators
# This file is distributed under the same license as the at-spi2-core package.
# Claude Paroz <claude@2xlibre.net>, 2011.
+# Charles Monzat <charles.monzat@numericable.fr>, 2018.
#
msgid ""
msgstr ""
"Project-Id-Version: at-spi2-core master\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=at-"
-"spi&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2014-02-03 23:50+0000\n"
-"PO-Revision-Date: 2014-03-11 22:53+0100\n"
-"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
-"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/at-spi2-core/issues\n"
+"POT-Creation-Date: 2018-10-05 04:46+0000\n"
+"PO-Revision-Date: 2018-11-14 18:35+0100\n"
+"Last-Translator: Charles Monzat <charles.monzat@numericable.fr>\n"
+"Language-Team: français <gnomefr@traduc.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Gtranslator 3.30.0\n"
-#: ../atspi/atspi-component.c:325 ../atspi/atspi-misc.c:1034
-#: ../atspi/atspi-value.c:111
+#: atspi/atspi-component.c:326 atspi/atspi-misc.c:1073 atspi/atspi-value.c:111
msgid "The application no longer exists"
-msgstr "L'application n'existe plus"
+msgstr "L’application n’existe plus"
-#: ../atspi/atspi-misc.c:1777
+#: atspi/atspi-misc.c:1850
msgid "Attempted synchronous call where prohibited"
-msgstr "La tentative d'appel synchrone est interdite"
+msgstr "La tentative d’appel synchrone est interdite"
Accessibility_KEY_PRESSRELEASE,
Accessibility_KEY_SYM,
Accessibility_KEY_STRING,
+ Accessibility_KEY_LOCKMODIFIERS,
+ Accessibility_KEY_UNLOCKMODIFIERS,
} Accessibility_KeySynthType;
typedef struct _Accessibility_DeviceEvent Accessibility_DeviceEvent;
{
unsigned int time = CurrentTime;
unsigned int bounce_delay;
+#ifdef THIS_IS_BROKEN
unsigned int elapsed_msec;
struct timeval tv;
+#endif
DEControllerPrivateData *priv = controller->priv;
spi_x_error_trap ();
bounce_delay = xkb_get_bouncekeys_delay (controller);
if (bounce_delay)
{
+#ifdef THIS_IS_BROKEN
gettimeofday (&tv, NULL);
elapsed_msec =
(tv.tv_sec - priv->last_release_time.tv_sec) * 1000
+ (tv.tv_usec - priv->last_release_time.tv_usec) / 1000;
-#ifdef SPI_XKB_DEBUG
+# ifdef SPI_XKB_DEBUG
fprintf (stderr, "%d ms elapsed (%ld usec)\n", elapsed_msec,
(long) (tv.tv_usec - priv->last_release_time.tv_usec));
-#endif
-#ifdef THIS_IS_BROKEN
+# endif
if (elapsed_msec < bounce_delay)
time = bounce_delay - elapsed_msec + 1;
#else
{
unsigned int time = CurrentTime;
unsigned int slow_delay;
+#ifdef THIS_IS_BROKEN_DUNNO_WHY
unsigned int elapsed_msec;
struct timeval tv;
+#endif
DEControllerPrivateData *priv = controller->priv;
spi_x_error_trap ();
slow_delay = xkb_get_slowkeys_delay (controller);
if (slow_delay)
{
+#ifdef THIS_IS_BROKEN_DUNNO_WHY
gettimeofday (&tv, NULL);
elapsed_msec =
(tv.tv_sec - priv->last_press_time.tv_sec) * 1000
+ (tv.tv_usec - priv->last_press_time.tv_usec) / 1000;
-#ifdef SPI_XKB_DEBUG
+# ifdef SPI_XKB_DEBUG
fprintf (stderr, "%d ms elapsed (%ld usec)\n", elapsed_msec,
(long) (tv.tv_usec - priv->last_press_time.tv_usec));
-#endif
-#ifdef THIS_IS_BROKEN_DUNNO_WHY
+# endif
if (elapsed_msec < slow_delay)
time = slow_delay - elapsed_msec + 1;
#else
fprintf (stderr, "Keystring synthesis failure, string=%s\n",
keystring);
break;
+ case Accessibility_KEY_LOCKMODIFIERS:
+ spi_dec_plat_lock_modifiers (controller, keycode);
+ break;
+ case Accessibility_KEY_UNLOCKMODIFIERS:
+ spi_dec_plat_unlock_modifiers (controller, keycode);
+ break;
}
reply = dbus_message_new_method_return (message);
return reply;
GList *next;
GList *element;
gboolean first_item;
- GList *dummy; /* suppress warning */
+ GList *dummy G_GNUC_UNUSED;
g_return_if_fail (element_ptr != NULL);
<arg direction="out" type="b"/>
</method>
+ <method name="ScrollTo">
+ <arg direction="in" name="type" type="u"/>
+ </method>
+
+ <method name="ScrollToPoint">
+ <arg direction="in" name="type" type="u"/>
+ <arg direction="in" name="x" type="i"/>
+ <arg direction="in" name="y" type="i"/>
+ </method>
+
</interface>
</node>