Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package at-spi2-core for openSUSE:Factory checked in at 2023-09-06 18:56:21 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/at-spi2-core (Old) and /work/SRC/openSUSE:Factory/.at-spi2-core.new.1766 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "at-spi2-core" Wed Sep 6 18:56:21 2023 rev:105 rq:1109061 version:2.48.4 Changes: -------- --- /work/SRC/openSUSE:Factory/at-spi2-core/at-spi2-core.changes 2023-08-07 15:28:44.048181210 +0200 +++ /work/SRC/openSUSE:Factory/.at-spi2-core.new.1766/at-spi2-core.changes 2023-09-06 18:57:43.174545514 +0200 @@ -1,0 +2,13 @@ +Mon Sep 4 18:20:58 UTC 2023 - Bjørn Lie <bjorn....@gmail.com> + +- Update to version 2.48.4: + + Add atspi_get_version() to return the runtime version of the + AT-SPI library. + + collection: + - Fix match testing for attributes. + - Avoid locking up if an object has a very large child count. + + Fix possible NULL pointer dereference when deregistering an + event listener. + + Various fixes for the new key grabbing API. + +------------------------------------------------------------------- Old: ---- at-spi2-core-2.48.3.tar.xz New: ---- at-spi2-core-2.48.4.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ at-spi2-core.spec ++++++ --- /var/tmp/diff_new_pack.RZBPVZ/_old 2023-09-06 18:57:44.338587010 +0200 +++ /var/tmp/diff_new_pack.RZBPVZ/_new 2023-09-06 18:57:44.346587295 +0200 @@ -19,7 +19,7 @@ %define atspiconfdir %{?_distconfdir}%{!?_distconfdir:%{_sysconfdir}} Name: at-spi2-core -Version: 2.48.3 +Version: 2.48.4 Release: 0 Summary: Assistive Technology Service Provider Interface - D-Bus based implementation License: LGPL-2.1-or-later ++++++ at-spi2-core-2.48.3.tar.xz -> at-spi2-core-2.48.4.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.48.3/NEWS new/at-spi2-core-2.48.4/NEWS --- old/at-spi2-core-2.48.3/NEWS 2023-05-27 17:00:48.000000000 +0200 +++ new/at-spi2-core-2.48.4/NEWS 2023-09-02 15:40:51.000000000 +0200 @@ -1,3 +1,15 @@ +What's new in at-spi2-core 2.48.4: + +* Add atspi_get_version() to return the runtime version of the AT-SPI library. + +* collection: Fix match testing for attributes. + +* collection: Avoid locking up if an object has a very large child count + +* Fix possible NULL pointer dereference when deregistering an event listener. + +* Various fixes for the new key grabbing API. + What's new in at-spi2-core 2.48.3: * Fix the build when dbus-broker is not set to be used by default. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.48.3/atk/meson.build new/at-spi2-core-2.48.4/atk/meson.build --- old/at-spi2-core-2.48.3/atk/meson.build 2023-05-27 17:00:48.000000000 +0200 +++ new/at-spi2-core-2.48.4/atk/meson.build 2023-09-02 15:40:51.000000000 +0200 @@ -72,13 +72,13 @@ # Features header atk_version_conf = configuration_data() -atk_version_conf.set('ATK_MAJOR_VERSION', atk_major_version) -atk_version_conf.set('ATK_MINOR_VERSION', atk_minor_version) -atk_version_conf.set('ATK_MICRO_VERSION', atk_micro_version) +atk_version_conf.set('ATK_MAJOR_VERSION', atspi_major_version) +atk_version_conf.set('ATK_MINOR_VERSION', atspi_minor_version) +atk_version_conf.set('ATK_MICRO_VERSION', atspi_micro_version) atk_version_conf.set('ATK_BINARY_AGE', atk_binary_age) atk_version_conf.set('ATK_INTERFACE_AGE', atk_interface_age) atk_version_conf.set('LT_CURRENT_MINUS_AGE', '0') -atk_version_conf.set('ATK_VERSION', atk_version) +atk_version_conf.set('ATK_VERSION', atspi_version) atk_includedir = join_paths(get_option('prefix'), get_option('includedir')) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.48.3/atk-adaptor/adaptors/collection-adaptor.c new/at-spi2-core-2.48.4/atk-adaptor/adaptors/collection-adaptor.c --- old/at-spi2-core-2.48.3/atk-adaptor/adaptors/collection-adaptor.c 2023-05-27 17:00:48.000000000 +0200 +++ new/at-spi2-core-2.48.4/atk-adaptor/adaptors/collection-adaptor.c 2023-09-02 15:40:51.000000000 +0200 @@ -36,6 +36,8 @@ #include "introspection.h" #include "object.h" +#define MAX_CHILDREN 65536 + typedef struct _MatchRulePrivate MatchRulePrivate; struct _MatchRulePrivate { @@ -355,7 +357,7 @@ AtkAttribute *attr = g_slist_nth_data (attributes, i); for (k = 0; k < oa_length; k++) { - AtkAttribute *oa_attr = g_slist_nth_data (attributes, i); + AtkAttribute *oa_attr = g_slist_nth_data (oa, k); if (!g_ascii_strcasecmp (oa_attr->name, attr->name) && !g_ascii_strcasecmp (oa_attr->value, attr->value)) { @@ -428,7 +430,7 @@ AtkAttribute *attr = g_slist_nth_data (attributes, i); for (k = 0; k < oa_length; k++) { - AtkAttribute *oa_attr = g_slist_nth_data (attributes, i); + AtkAttribute *oa_attr = g_slist_nth_data (oa, k); if (!g_ascii_strcasecmp (oa_attr->name, attr->name) && !g_ascii_strcasecmp (oa_attr->value, attr->value)) { @@ -484,6 +486,8 @@ glong acount = atk_object_get_n_accessible_children (obj); gboolean prev = pobj ? TRUE : FALSE; + if (acount > MAX_CHILDREN) + acount = MAX_CHILDREN; for (; i < acount && (max == 0 || kount < max); i++) { AtkObject *child = atk_object_ref_accessible_child (obj, i); @@ -551,9 +555,11 @@ while (nextobj && atk_object_get_n_accessible_children (nextobj) > 0) { AtkObject *follow; + gint count = atk_object_get_n_accessible_children (nextobj); + if (count > MAX_CHILDREN) + count = MAX_CHILDREN; - follow = atk_object_ref_accessible_child (nextobj, - atk_object_get_n_accessible_children (nextobj) - 1); + follow = atk_object_ref_accessible_child (nextobj, count - 1); g_object_unref (nextobj); nextobj = follow; } @@ -1123,6 +1129,8 @@ return; } count = atk_object_get_n_accessible_children (obj); + if (count > MAX_CHILDREN) + count = MAX_CHILDREN; for (i = 0; i < count; i++) { AtkObject *child = atk_object_ref_accessible_child (obj, i); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.48.3/atspi/atspi-device-x11.c new/at-spi2-core-2.48.4/atspi/atspi-device-x11.c --- old/at-spi2-core-2.48.3/atspi/atspi-device-x11.c 2023-05-27 17:00:48.000000000 +0200 +++ new/at-spi2-core-2.48.4/atspi/atspi-device-x11.c 2023-09-02 15:40:51.000000000 +0200 @@ -38,8 +38,6 @@ Window focused_window; GSource *source; int xi_opcode; - int device_id; - int device_id_alt; GSList *modifiers; GSList *key_grabs; guint virtual_mods_enabled; @@ -200,11 +198,12 @@ grab_key (AtspiDeviceX11 *x11_device, Window window, int keycode, int modmask) { AtspiDeviceX11Private *priv = atspi_device_x11_get_instance_private (x11_device); + gboolean include_numlock = !_atspi_key_is_on_keypad (keycode); grab_key_aux (x11_device, window, keycode, modmask); if (!(modmask & LockMask)) grab_key_aux (x11_device, window, keycode, modmask | LockMask); - if (!(modmask & priv->numlock_physical_mask)) + if (include_numlock && !(modmask & priv->numlock_physical_mask)) { grab_key_aux (x11_device, window, keycode, modmask | priv->numlock_physical_mask); if (!(modmask & LockMask)) @@ -234,7 +233,7 @@ xi_modifiers.modifiers = modmask; xi_modifiers.status = 0; - XIUngrabKeycode (priv->display, XIAllMasterDevices, keycode, window, sizeof (xi_modifiers), &xi_modifiers); + XIUngrabKeycode (priv->display, XIAllMasterDevices, keycode, window, 1, &xi_modifiers); } static void @@ -283,9 +282,14 @@ for (l = priv->key_grabs; l; l = l->next) { AtspiX11KeyGrab *grab = l->data; - gboolean new_enabled = grab_should_be_enabled (x11_device, grab); if (grab->window != priv->focused_window) disable_key_grab (x11_device, grab); + } + + for (l = priv->key_grabs; l; l = l->next) + { + AtspiX11KeyGrab *grab = l->data; + gboolean new_enabled = grab_should_be_enabled (x11_device, grab); if (new_enabled && !grab->enabled) enable_key_grab (x11_device, grab); else if (grab->enabled && !new_enabled) @@ -366,19 +370,11 @@ XLookupString ((XKeyEvent *) &keyevent, text, sizeof (text), &keysym, &status); if (text[0] < ' ') text[0] = '\0'; - /* The deviceid can change. Would be nice to find a better way of - handling this */ - if (priv->device_id && priv->device_id_alt && xiDevEv->deviceid != priv->device_id && xiDevEv->deviceid != priv->device_id_alt) - priv->device_id = priv->device_id_alt = 0; - else if (priv->device_id && !priv->device_id_alt && xiDevEv->deviceid != priv->device_id) - priv->device_id_alt = xiDevEv->deviceid; - if (!priv->device_id) - priv->device_id = xiDevEv->deviceid; set_virtual_modifier (device, xiRawEv->detail, xevent.xcookie.evtype == XI_KeyPress); modifiers = keyevent.xkey.state | priv->virtual_mods_enabled; if (modifiers & priv->numlock_physical_mask) modifiers |= (1 << ATSPI_MODIFIER_NUMLOCK); - if (xiDevEv->deviceid == priv->device_id) + if (xiDevEv->deviceid == xiDevEv->sourceid) atspi_device_notify_key (ATSPI_DEVICE (device), (xevent.xcookie.evtype == XI_KeyPress), xiRawEv->detail, keysym, modifiers, text); /* otherwise it's probably a duplicate event from a key grab */ XFreeEventData (priv->display, &xevent.xcookie); @@ -655,7 +651,7 @@ AtspiDeviceX11Private *priv = atspi_device_x11_get_instance_private (x11_device); AtspiX11KeyGrab *grab; - grab = g_new (AtspiX11KeyGrab, 1); + grab = g_new0 (AtspiX11KeyGrab, 1); grab->kd = g_boxed_copy (ATSPI_TYPE_KEY_DEFINITION, kd); grab->enabled = FALSE; priv->key_grabs = g_slist_append (priv->key_grabs, grab); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.48.3/atspi/atspi-device.c new/at-spi2-core-2.48.4/atspi/atspi-device.c --- old/at-spi2-core-2.48.3/atspi/atspi-device.c 2023-05-27 17:00:48.000000000 +0200 +++ new/at-spi2-core-2.48.4/atspi/atspi-device.c 2023-09-02 15:40:51.000000000 +0200 @@ -106,7 +106,7 @@ } static gboolean -key_matches_modifiers (guint key_mods, guint grab_mods) +key_matches_modifiers (gint keycode, guint key_mods, guint grab_mods) { /* The presence or lack thereof of locking modifiers should make no difference when testing, but other modifiers should match. If the @@ -114,7 +114,10 @@ not lock modifiers, then we reject the match. Alt + left arrow should not match a grab on left arrow, for instance, but whether numlock is on or off would be irrelevant. */ - key_mods &= ~((1 << ATSPI_MODIFIER_SHIFTLOCK) | (1 << ATSPI_MODIFIER_NUMLOCK)); + if (_atspi_key_is_on_keypad (keycode)) + key_mods &= ~((1 << ATSPI_MODIFIER_SHIFTLOCK)); + else + key_mods &= ~((1 << ATSPI_MODIFIER_SHIFTLOCK) | (1 << ATSPI_MODIFIER_NUMLOCK)); return (key_mods == grab_mods); } @@ -134,7 +137,7 @@ for (l = priv->keygrabs; l; l = l->next) { AtspiKeyGrab *grab = l->data; - if (keycode == grab->keycode && key_matches_modifiers (state, grab->modifiers)) + if (keycode == grab->keycode && key_matches_modifiers (keycode, state, grab->modifiers)) { if (grab->callback) grab->callback (device, pressed, keycode, keysym, state, text, grab->callback_data); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.48.3/atspi/atspi-event-listener.c new/at-spi2-core-2.48.4/atspi/atspi-event-listener.c --- old/at-spi2-core-2.48.3/atspi/atspi-event-listener.c 2023-05-27 17:00:48.000000000 +0200 +++ new/at-spi2-core-2.48.4/atspi/atspi-event-listener.c 2023-09-02 15:40:51.000000000 +0200 @@ -824,6 +824,8 @@ { if (!super || !super[0]) return TRUE; + if (!sub || !sub[0]) + return FALSE; return (strcmp (super, sub) == 0); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.48.3/atspi/atspi-matchrule.c new/at-spi2-core-2.48.4/atspi/atspi-matchrule.c --- old/at-spi2-core-2.48.3/atspi/atspi-matchrule.c 2023-05-27 17:00:48.000000000 +0200 +++ new/at-spi2-core-2.48.4/atspi/atspi-matchrule.c 2023-09-02 15:40:51.000000000 +0200 @@ -100,8 +100,8 @@ * interpret @attributes. * @interfaces: (element-type gchar*): An array of interfaces to match, or * NULL if not applicable. Interface names should be specified - * by their DBus names (org.a11y.Atspi.Accessible, - * org.a11y.Atspi.Component, etc). + * by the final component of their DBus names (Accessible, + * Component, etc). * @interfacematchtype: An #AtspiCollectionMatchType specifying how to * interpret @interfaces. * @roles: (element-type AtspiRole): A #GArray of roles to match, or NULL if diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.48.3/atspi/atspi-misc-private.h new/at-spi2-core-2.48.4/atspi/atspi-misc-private.h --- old/at-spi2-core-2.48.3/atspi/atspi-misc-private.h 2023-05-27 17:00:48.000000000 +0200 +++ new/at-spi2-core-2.48.4/atspi/atspi-misc-private.h 2023-09-02 15:40:51.000000000 +0200 @@ -162,6 +162,8 @@ gboolean _atspi_prepare_screen_reader_interface (); gchar *_atspi_strdup_and_adjust_for_dbus (const char *s); + +gboolean _atspi_key_is_on_keypad (gint keycode); G_END_DECLS #endif /* _ATSPI_MISC_PRIVATE_H_ */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.48.3/atspi/atspi-misc.c new/at-spi2-core-2.48.4/atspi/atspi-misc.c --- old/at-spi2-core-2.48.3/atspi/atspi-misc.c 2023-05-27 17:00:48.000000000 +0200 +++ new/at-spi2-core-2.48.4/atspi/atspi-misc.c 2023-09-02 15:40:51.000000000 +0200 @@ -2016,3 +2016,51 @@ d[0] = toupper (d[0]); return d; } + +/** + * atspi_get_version: + * @major: (out): the major version. + * @minor: (out): the minor version. + * @micro: (out): the micro/patch version. + * + * Returns the version of the AT-SPI library being used at runtime. + +* Since: 2.50 + */ +void +atspi_get_version (gint *major, gint *minor, gint *micro) +{ + if (major) + *major = ATSPI_MAJOR_VERSION; + if (minor) + *minor = ATSPI_MINOR_VERSION; + if (micro) + *micro = ATSPI_MICRO_VERSION; +} + +gboolean +_atspi_key_is_on_keypad (gint keycode) +{ + switch (keycode) + { + case 106: /* / */ + case 63: /* * */ + case 82: /* - */ + case 79: /* 7 */ + case 80: /* 8 */ + case 91: /* 9 */ + case 86: /* + */ + case 83: /* 4 */ + case 84: /* 5 */ + case 85: /* 6 */ + case 87: /* 1 */ + case 88: /* 2 */ + case 89: /* 3 */ + case 104: /* enter */ + case 90: /* 0 */ + case 81: /* . */ + return TRUE; + default: + return FALSE; + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.48.3/atspi/atspi-misc.h new/at-spi2-core-2.48.4/atspi/atspi-misc.h --- old/at-spi2-core-2.48.3/atspi/atspi-misc.h 2023-05-27 17:00:48.000000000 +0200 +++ new/at-spi2-core-2.48.4/atspi/atspi-misc.h 2023-09-02 15:40:51.000000000 +0200 @@ -47,6 +47,7 @@ atspi_set_main_context (GMainContext *cnx); gchar *atspi_role_get_name (AtspiRole role); +void atspi_get_version (gint *major, gint *minor, gint *micro); G_END_DECLS #endif /* _ATSPI_MISC_H_ */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.48.3/atspi/atspi-version.h.in new/at-spi2-core-2.48.4/atspi/atspi-version.h.in --- old/at-spi2-core-2.48.3/atspi/atspi-version.h.in 1970-01-01 01:00:00.000000000 +0100 +++ new/at-spi2-core-2.48.4/atspi/atspi-version.h.in 2023-09-02 15:40:51.000000000 +0200 @@ -0,0 +1,58 @@ +/* + * AT-SPI - Assistive Technology Service Provider Interface + * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap) + * + * Copyright 2023 SUSE LLC. + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef _ATSPI_VERSION_H_ +#define _ATSPI_VERSION_H_ + +G_BEGIN_DECLS + +/** + * ATSPI_MAJOR_VERSION: + * + * The major version of AT-SPI used at compile time. + * + * Since: 2.50.0 + */ +#define ATSPI_MAJOR_VERSION (@ATSPI_MAJOR_VERSION@) + +/** + * ATSPI_MINOR_VERSION: + * + * The minor version of AT-SPI used at compile time. + * + * Since: 2.50.0 + */ +#define ATSPI_MINOR_VERSION (@ATSPI_MINOR_VERSION@) + +/** + * ATSPI_MICRO_VERSION: + * + * The micro version / patch level of AT-SPI used at compile time. + * + * Since: 2.50.0 + */ +#define ATSPI_MICRO_VERSION (@ATSPI_MICRO_VERSION@) + +G_END_DECLS + +#endif /* _ATSPI_VERSION_H_ */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.48.3/atspi/atspi.h new/at-spi2-core-2.48.4/atspi/atspi.h --- old/at-spi2-core-2.48.3/atspi/atspi.h 2023-05-27 17:00:48.000000000 +0200 +++ new/at-spi2-core-2.48.4/atspi/atspi.h 2023-09-02 15:40:51.000000000 +0200 @@ -53,4 +53,6 @@ #include "atspi-gmain.h" #include "atspi-enum-types.h" + +#include "atspi-version.h" #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.48.3/atspi/meson.build new/at-spi2-core-2.48.4/atspi/meson.build --- old/at-spi2-core-2.48.3/atspi/meson.build 2023-05-27 17:00:48.000000000 +0200 +++ new/at-spi2-core-2.48.4/atspi/meson.build 2023-09-02 15:40:51.000000000 +0200 @@ -69,6 +69,18 @@ install_headers(atspi_headers, install_dir: atspi_includedir) +# Features header +atspi_version_conf = configuration_data() +atspi_version_conf.set('ATSPI_MAJOR_VERSION', atspi_major_version) +atspi_version_conf.set('ATSPI_MINOR_VERSION', atspi_minor_version) +atspi_version_conf.set('ATSPI_MICRO_VERSION', atspi_micro_version) + +atspi_version_h = configure_file(input: 'atspi-version.h.in', + output: 'atspi-version.h', + configuration: atspi_version_conf, + install_dir: atspi_includedir, +) + # Marshallers atspi_marshals = gnome.genmarshal('atspimarshal', sources: 'atspimarshal.list', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.48.3/meson.build new/at-spi2-core-2.48.4/meson.build --- old/at-spi2-core-2.48.3/meson.build 2023-05-27 17:00:48.000000000 +0200 +++ new/at-spi2-core-2.48.4/meson.build 2023-09-02 15:40:51.000000000 +0200 @@ -1,5 +1,5 @@ project('at-spi2-core', 'c', - version: '2.48.3', + version: '2.48.4', license: 'LGPLv2.1+', default_options: [ 'buildtype=debugoptimized', @@ -19,14 +19,14 @@ soversion = '0.0.1' -atk_version = meson.project_version() -version = atk_version.split('.') -atk_major_version = version[0].to_int() -atk_minor_version = version[1].to_int() -atk_micro_version = version[2].to_int() +atspi_version = meson.project_version() +version = atspi_version.split('.') +atspi_major_version = version[0].to_int() +atspi_minor_version = version[1].to_int() +atspi_micro_version = version[2].to_int() atk_interface_age = 1 -atk_binary_age = 10000 * atk_major_version + 100 * atk_minor_version + 10 + atk_micro_version +atk_binary_age = 10000 * atspi_major_version + 100 * atspi_minor_version + 10 + atspi_micro_version atk_api_version = '1.0' atk_api_name = 'atk-@0@'.format(atk_api_version) @@ -56,7 +56,7 @@ test_cflags = [] at_spi_conf = configuration_data() -at_spi_conf.set_quoted('ATK_VERSION', atk_version) +at_spi_conf.set_quoted('ATK_VERSION', atspi_version) at_spi_conf.set_quoted('GETTEXT_PACKAGE', meson.project_name()) # Symbol visibility diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.48.3/tests/at-spi2-atk/atk_test_collection.c new/at-spi2-core-2.48.4/tests/at-spi2-atk/atk_test_collection.c --- old/at-spi2-core-2.48.3/tests/at-spi2-atk/atk_test_collection.c 2023-05-27 17:00:48.000000000 +0200 +++ new/at-spi2-core-2.48.4/tests/at-spi2-atk/atk_test_collection.c 2023-09-02 15:40:51.000000000 +0200 @@ -117,6 +117,7 @@ { AtspiAccessible *obj = get_root_obj (DATA_FILE); AtspiCollection *iface = atspi_accessible_get_collection_iface (obj); + GHashTable *attributes; g_assert (iface); AtspiAccessible *child = atspi_accessible_get_child_at_index (obj, 0, NULL); @@ -150,6 +151,36 @@ g_assert_cmpstr ("obj3", ==, atspi_accessible_get_name (get, NULL)); get = g_array_index (ret, AtspiAccessible *, 2); g_assert_cmpstr ("obj3", ==, atspi_accessible_get_name (get, NULL)); + g_array_free (ret, TRUE); + g_object_unref (rule); + + attributes = g_hash_table_new (g_str_hash, g_str_equal); + g_hash_table_insert (attributes, "layout-guess", "true"); + rule = atspi_match_rule_new (NULL, + ATSPI_Collection_MATCH_ALL, + attributes, + ATSPI_Collection_MATCH_NONE, + NULL, + ATSPI_Collection_MATCH_ALL, + NULL, + ATSPI_Collection_MATCH_ALL, + FALSE); + ret = atspi_collection_get_matches_from (iface, + child1, + rule, + ATSPI_Collection_SORT_ORDER_CANONICAL, + ATSPI_Collection_TREE_INORDER, + 0, + FALSE, + NULL); + g_hash_table_unref (attributes); + g_assert_cmpint (6, ==, ret->len); + g_array_free (ret, TRUE); + g_object_unref (rule); + + g_object_unref (child1); + g_object_unref (child); + g_object_unref (iface); } void