2.42.0 02/270402/1 upstream/2.42.0
authorArtur Świgoń <a.swigon@samsung.com>
Tue, 1 Feb 2022 10:01:46 +0000 (11:01 +0100)
committerArtur Świgoń <a.swigon@samsung.com>
Tue, 1 Feb 2022 10:01:46 +0000 (11:01 +0100)
Change-Id: Ie3cf2615d77cd923b22e9f6c9a7233fe8682f95a

23 files changed:
NEWS
README
atspi/atspi-accessible.c
atspi/atspi-device-legacy.c
atspi/atspi-device-listener.h
atspi/atspi-device-x11.c
atspi/atspi-device.c
atspi/atspi-event-listener.c
bus/00-at-spi [new file with mode: 0755]
bus/accessibility.conf.in
bus/meson.build
meson.build
po/LINGUAS
po/ab.po [new file with mode: 0644]
po/be.po
po/gl.po
registryd/de-marshaller.c
registryd/deviceeventcontroller-x11.c
registryd/deviceeventcontroller.c
xml/Collection.xml
xml/Component.xml
xml/Document.xml
xml/Text.xml

diff --git a/NEWS b/NEWS
index d964ce2..6738a3d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,32 @@
+What's new in at-spi2-core 2.42.0:
+
+* Set X root property when Xwayland starts on demand.
+
+* Several dbus introspection fixes.
+
+What's new in at-spi2-core 2.40.3:
+
+* Use abstract sockets if libdbus is older than 1.12.0 (#37).
+
+What's new in at-spi2-core 2.40.2:
+
+* README: Remove outdated links.
+
+* Key grab fixes for the new API.
+
+* registryd: Add a missing call to va_end.
+
+What's new in at-spi2-core 2.40.1:
+
+* Fix double free when removing event listeners (#35).
+
+* Fix numlock detection.
+
+What's new in at-spi2-core 2.39.91:
+* Fix a couple of memory leaks.
+
+* Remove const from AtspiDeviceListenerCB prototype (#31).
+
 What's new in at-spi2-core 2.39.90.1:
 
 * Fix a crash introduced in 2.39.90, along with a few warnings (#30).
diff --git a/README b/README
index e41a5c6..b377fca 100644 (file)
--- a/README
+++ b/README
@@ -5,24 +5,22 @@ This version of at-spi is a major break from version 1.x.
 It has been completely rewritten to use D-Bus rather than
 ORBIT / CORBA for its transport protocol.
 
-A page including instructions for testing, project status and
-TODO items is kept up to date at:
+An outdated page including instructions for testing, project status and
+TODO items is at:
 
-        http://www.linuxfoundation.org/en/AT-SPI_on_D-Bus
+        https://wiki.linuxfoundation.org/accessibility/atk/at-spi/at-spi_on_d-bus
 
 The mailing list used for general questions is:
 
-        accessibility-atspi@lists.linux-foundation.org
+        https://lists.linuxfoundation.org/mailman/listinfo/accessibility-atspi
 
-For bug reports, feature requests, patches or enhancements please use
-the AT-SPI project on bugzilla.gnome.org. Use the at-spi2-core component for
-bugs specific to this module.
+For bug reports, feature requests, patches or enhancements please use:
 
-        http://bugzilla.gnome.org
+        https://gitlab.gnome.org/GNOME/at-spi2-core/
 
 A git repository with the latest development code is available at:
 
-       git://git.gnome.org/at-spi2-core
+       https://gitlab.gnome.org/GNOME/at-spi2-core/
 
 More information
 ----------------
@@ -32,15 +30,13 @@ the results of which are available on the GNOME wiki. Keep in
 mind that the D-Bus AT-SPI design documents on this page
 have not been kept up to date.
 
-        http://live.gnome.org/GAP/AtSpiDbusInvestigation/
+        https://wiki.gnome.org/Accessibility/Documentation/GNOME2/ATSPI2-Investigation
 
 Other sources of relevant information about AT-SPI and Accessibility
 include:
 
-        http://live.gnome.org/Accessibility
-        http://www.sun.com/software/star/gnome/accessibility/architecture.xml
-        http://accessibility.kde.org/developer/atk.php
-        http://www.gnome.org/~billh/at-spi-idl/html/
+        https://wiki.gnome.org/Accessibility
+        https://community.kde.org/Accessibility
 
 
 Contents of this package
index b078688..26cf0ba 100644 (file)
@@ -340,8 +340,11 @@ gchar *
 atspi_accessible_get_name (AtspiAccessible *obj, GError **error)
 {
   g_return_val_if_fail (obj != NULL, g_strdup (""));
+
   if (!_atspi_accessible_test_cache (obj, ATSPI_CACHE_NAME))
   {
+    g_free (obj->name);
+    obj->name = NULL;
     if (!_atspi_dbus_get_property (obj, atspi_interface_accessible, "Name", error,
                                    "s", &obj->name))
       return g_strdup ("");
@@ -366,6 +369,8 @@ atspi_accessible_get_description (AtspiAccessible *obj, GError **error)
 
   if (!_atspi_accessible_test_cache (obj, ATSPI_CACHE_DESCRIPTION))
   {
+    g_free (obj->description);
+    obj->description = NULL;
     if (!_atspi_dbus_get_property (obj, atspi_interface_accessible,
                                    "Description", error, "s",
                                    &obj->description))
index 6950bc3..eb67768 100644 (file)
@@ -47,6 +47,7 @@ struct _AtspiDeviceLegacyPrivate
   GSList *modifiers;
   guint virtual_mods_enabled;
   gboolean keyboard_grabbed;
+  unsigned int numlock_physical_mask;
 };
 
 GObjectClass *device_legacy_parent_class;
@@ -86,20 +87,27 @@ set_virtual_modifier (AtspiDeviceLegacy *legacy_device, gint keycode, gboolean e
 
 
 gboolean
-key_cb (const AtspiDeviceEvent *event, void *user_data)
+key_cb (AtspiDeviceEvent *event, void *user_data)
 {
   AtspiDeviceLegacy *legacy_device = ATSPI_DEVICE_LEGACY (user_data);
   AtspiDeviceLegacyPrivate *priv = atspi_device_legacy_get_instance_private (legacy_device);
   gboolean ret = priv->keyboard_grabbed;
-
+  guint modifiers;
+  
   set_virtual_modifier (legacy_device, event->hw_code,
                         event->type == (AtspiEventType)ATSPI_KEY_PRESS);
+
+  modifiers = event->modifiers | priv->virtual_mods_enabled;
+  if (modifiers & (1 << ATSPI_MODIFIER_NUMLOCK))
+    modifiers &= ~priv->numlock_physical_mask;
+
   ret |= atspi_device_notify_key (ATSPI_DEVICE (legacy_device),
                                   event->type == (AtspiEventType)ATSPI_KEY_PRESS,
                                   event->hw_code, event->id,
-                                  event->modifiers | priv->virtual_mods_enabled,
+                                  modifiers,
                                   event->event_string);
 
+  g_boxed_free (ATSPI_TYPE_DEVICE_EVENT, event);
   return ret;
 }
 
@@ -125,6 +133,9 @@ check_virtual_modifier (AtspiDeviceLegacy *legacy_device, guint modifier)
   AtspiDeviceLegacyPrivate *priv = atspi_device_legacy_get_instance_private (legacy_device);
   GSList *l;
 
+  if (modifier == (1 << ATSPI_MODIFIER_NUMLOCK))
+    return TRUE;
+
   for (l = priv->modifiers; l; l = l->next)
   {
     AtspiLegacyKeyModifier *entry = l->data;
@@ -268,6 +279,8 @@ atspi_device_legacy_init (AtspiDeviceLegacy *device)
   priv->display=XOpenDisplay("");
   if (priv->display)
     priv->window = DefaultRootWindow(priv->display);
+  priv->numlock_physical_mask = XkbKeysymToModifiers (priv->display,
+                                                     XK_Num_Lock);
 #endif
 
 }
index d91a203..718a415 100644 (file)
@@ -45,7 +45,7 @@ GType atspi_device_event_get_type (void);
  * Returns: #TRUE if the client wishes to consume/preempt the event, preventing it from being
  * relayed to the currently focussed application, #FALSE if the event delivery should proceed as normal.
  **/
-typedef gboolean (*AtspiDeviceListenerCB)    (const AtspiDeviceEvent *stroke,
+typedef gboolean (*AtspiDeviceListenerCB)    (AtspiDeviceEvent *stroke,
                                                     void                      *user_data);
 
 /**
index e8f2199..4f88e60 100644 (file)
@@ -44,6 +44,7 @@ struct _AtspiDeviceX11Private
   GSList *key_grabs;
   guint virtual_mods_enabled;
   gboolean keyboard_grabbed;
+  unsigned int numlock_physical_mask;
 };
 
 GObjectClass *device_x11_parent_class;
@@ -176,7 +177,7 @@ grab_has_active_duplicate (AtspiDeviceX11 *x11_device, AtspiX11KeyGrab *grab)
 }
 
 static void
-grab_key (AtspiDeviceX11 *x11_device, int keycode, int modmask)
+grab_key_aux (AtspiDeviceX11 *x11_device, int keycode, int modmask)
 {
   AtspiDeviceX11Private *priv = atspi_device_x11_get_instance_private (x11_device);
   XIGrabModifiers xi_modifiers;
@@ -197,6 +198,22 @@ grab_key (AtspiDeviceX11 *x11_device, int keycode, int modmask)
 }
 
 static void
+grab_key (AtspiDeviceX11 *x11_device, int keycode, int modmask)
+{
+  AtspiDeviceX11Private *priv = atspi_device_x11_get_instance_private (x11_device);
+
+  grab_key_aux (x11_device, keycode, modmask);
+  if (!(modmask & LockMask))
+    grab_key_aux (x11_device, keycode, modmask | LockMask);
+  if (!(modmask & priv->numlock_physical_mask))
+  {
+    grab_key_aux (x11_device, keycode, modmask | priv->numlock_physical_mask);
+    if (!(modmask & LockMask))
+      grab_key_aux (x11_device, keycode, modmask | LockMask | priv->numlock_physical_mask);
+  }
+}
+
+static void
 enable_key_grab (AtspiDeviceX11 *x11_device, AtspiX11KeyGrab *grab)
 {
   AtspiDeviceX11Private *priv = atspi_device_x11_get_instance_private (x11_device);
@@ -209,7 +226,7 @@ enable_key_grab (AtspiDeviceX11 *x11_device, AtspiX11KeyGrab *grab)
 }
 
 static void
-ungrab_key (AtspiDeviceX11 *x11_device, int keycode, int modmask)
+ungrab_key_aux (AtspiDeviceX11 *x11_device, int keycode, int modmask)
 {
   AtspiDeviceX11Private *priv = atspi_device_x11_get_instance_private (x11_device);
   XIGrabModifiers xi_modifiers;
@@ -221,6 +238,22 @@ ungrab_key (AtspiDeviceX11 *x11_device, int keycode, int modmask)
 }
 
 static void
+ungrab_key (AtspiDeviceX11 *x11_device, int keycode, int modmask)
+{
+  AtspiDeviceX11Private *priv = atspi_device_x11_get_instance_private (x11_device);
+
+  ungrab_key_aux (x11_device, keycode, modmask);
+  if (!(modmask & LockMask))
+    ungrab_key_aux (x11_device, keycode, modmask | LockMask);
+  if (!(modmask & priv->numlock_physical_mask))
+  {
+    ungrab_key_aux (x11_device, keycode, modmask | priv->numlock_physical_mask);
+    if (!(modmask & LockMask))
+      ungrab_key_aux (x11_device, keycode, modmask | LockMask | priv->numlock_physical_mask);
+  }
+}
+
+static void
 disable_key_grab (AtspiDeviceX11 *x11_device, AtspiX11KeyGrab *grab)
 {
   AtspiDeviceX11Private *priv = atspi_device_x11_get_instance_private (x11_device);
@@ -290,6 +323,7 @@ do_event_dispatch (gpointer user_data)
   char text[10];
   KeySym keysym;
   XComposeStatus status;
+  guint modifiers;
  
   while (XPending (display))
   {
@@ -301,7 +335,13 @@ do_event_dispatch (gpointer user_data)
     case KeyPress:
     case KeyRelease:
       XLookupString(&xevent.xkey, text, sizeof (text), &keysym, &status);
-      atspi_device_notify_key (ATSPI_DEVICE (device), (xevent.type == KeyPress), xevent.xkey.keycode, keysym, xevent.xkey.state | priv->virtual_mods_enabled, text);
+      modifiers = xevent.xkey.state | priv->virtual_mods_enabled;
+      if (modifiers & priv->numlock_physical_mask)
+      {
+        modifiers |= (1 << ATSPI_MODIFIER_NUMLOCK);
+        modifiers &= ~priv->numlock_physical_mask;
+      }
+      atspi_device_notify_key (ATSPI_DEVICE (device), (xevent.type == KeyPress), xevent.xkey.keycode, keysym, modifiers, text);
       break;
     case GenericEvent:
       if (xevent.xcookie.extension == priv->xi_opcode)
@@ -326,8 +366,11 @@ do_event_dispatch (gpointer user_data)
           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)
-            atspi_device_notify_key (ATSPI_DEVICE (device), (xevent.xcookie.evtype == XI_KeyPress), xiRawEv->detail, keysym, keyevent.xkey.state, text);
+            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);
           break;
@@ -396,6 +439,9 @@ check_virtual_modifier (AtspiDeviceX11 *x11_device, guint modifier)
   AtspiDeviceX11Private *priv = atspi_device_x11_get_instance_private (x11_device);
   GSList *l;
 
+  if (modifier == (1 << ATSPI_MODIFIER_NUMLOCK))
+    return TRUE;
+
   for (l = priv->modifiers; l; l = l->next)
   {
     AtspiX11KeyModifier *entry = l->data;
@@ -534,6 +580,9 @@ atspi_device_x11_init (AtspiDeviceX11 *device)
       create_event_source (device);
     }
   }
+
+  priv->numlock_physical_mask = XkbKeysymToModifiers (priv->display,
+                                                     XK_Num_Lock);
 }
 
 static void
index 5f62dc3..e4a564c 100644 (file)
@@ -107,6 +107,19 @@ atspi_device_new ()
   return ATSPI_DEVICE (atspi_device_legacy_new ());
 }
 
+static gboolean
+key_matches_modifiers (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
+     keypress has modifiers that (a) the grab does not check for and (b) are
+     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));
+  return (key_mods == grab_mods);
+}
+
 gboolean
 atspi_device_notify_key (AtspiDevice *device, gboolean pressed, int keycode, int keysym, gint state, gchar *text)
 {
@@ -123,8 +136,7 @@ atspi_device_notify_key (AtspiDevice *device, gboolean pressed, int keycode, int
   for (l = priv->keygrabs; l; l = l->next)
   {
     AtspiKeyGrab *grab = l->data;
-    //if (keycode == grab->keycode && (grab->modifiers & state) == grab->modifiers)
-    if (keycode == grab->keycode && grab->modifiers == state)
+    if (keycode == grab->keycode && key_matches_modifiers (state, grab->modifiers))
     {
       if (grab->callback)
         grab->callback (device, pressed, keycode, keysym, state, text, grab->callback_data);
index ca6828f..5455b58 100644 (file)
@@ -798,7 +798,10 @@ atspi_event_listener_deregister_from_callback (AtspiEventListenerCB callback,
       DBusMessage *message, *reply;
       l = g_list_next (l);
       if (in_send)
-      pending_removals = g_list_append (pending_removals, e);
+      {
+        pending_removals = g_list_remove (pending_removals, e);
+        pending_removals = g_list_append (pending_removals, e);
+      }
       else
         event_listeners = g_list_remove (event_listeners, e);
       for (i = 0; i < matchrule_array->len; i++)
diff --git a/bus/00-at-spi b/bus/00-at-spi
new file mode 100755 (executable)
index 0000000..dc3bb60
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# Copy a11y bus address from the DBus session bus to the X11 root property.
+# This is useful when Xwayland is started on demand and if the user has an
+# application with X11 access that does not have access to the session bus.
+
+ADDR="$( busctl call --user org.a11y.Bus /org/a11y/bus org.a11y.Bus GetAddress )" || exit 0
+ADDR="$( echo $ADDR | sed 's/s "\(.*\)"/\1/' )" || exit 0
+
+exec xprop -root -format AT_SPI_BUS 8s -set AT_SPI_BUS "$ADDR"
index 79c5146..33d6e1c 100644 (file)
@@ -6,7 +6,7 @@
 <servicedir>@DATADIR@/dbus-1/accessibility-services</servicedir>
   <auth>EXTERNAL</auth>
 
-  <listen>unix:dir=/tmp</listen>
+  <listen>@SOCKET_ADDRESS@</listen>
 
   <policy context="default">
     <!-- Allow root to connect -->
index f6c32c9..21408f2 100644 (file)
@@ -4,8 +4,15 @@ libexec_conf.set('libexecdir', atspi_libexecdir)
 accessibility_conf = configuration_data()
 accessibility_conf.set('DATADIR', atspi_datadir)
 
+if libdbus_dep.version().version_compare('>= 1.12.0')
+  accessibility_conf.set('SOCKET_ADDRESS', 'unix:dir=/tmp')
+else
+  accessibility_conf.set('SOCKET_ADDRESS', 'unix:tmpdir=/tmp')
+endif
+
 busconfig_dir = join_paths(atspi_datadir, 'defaults/at-spi2')
 session_dir = join_paths(atspi_sysconfdir, 'xdg/autostart')
+xwayland_session_dir = join_paths(atspi_sysconfdir, 'xdg/Xwayland-session.d')
 
 configure_file(input: 'accessibility.conf.in',
                output: 'accessibility.conf',
@@ -27,6 +34,13 @@ configure_file(input: 'at-spi-dbus-bus.service.in',
                configuration: libexec_conf,
                install_dir: systemd_user_dir)
 
+if x11_dep.found()
+  # Note: It is safe to always install it. However, we only need this on
+  #       systemd enabled machines where Xwayland may be started on-demand.
+  install_data('00-at-spi',
+               install_dir: xwayland_session_dir)
+endif
+
 launcher_args = [
              '-DSYSCONFDIR="@0@"'.format(atspi_sysconfdir),
              '-DDATADIR="@0@"'.format(atspi_datadir),
index ca49dfb..b5104c8 100644 (file)
@@ -1,5 +1,5 @@
 project('at-spi2-core', 'c',
-        version: '2.39.90.1',
+        version: '2.42.0',
         license: 'LGPLv2.1+',
         default_options: [
           'buildtype=debugoptimized',
index 4e2efbd..328b6c4 100644 (file)
@@ -1,3 +1,4 @@
+ab
 an
 as
 ast
diff --git a/po/ab.po b/po/ab.po
new file mode 100644 (file)
index 0000000..6f34b54
--- /dev/null
+++ b/po/ab.po
@@ -0,0 +1,28 @@
+# Abkhazian translation for at-spi2-core.
+# Copyright (C) 2011 at-spi2-core's COPYRIGHT HOLDER
+# This file is distributed under the same license as the at-spi2-core package.
+# Nart Tlisha <daniel.abzakh@gmail.com>, 2021.
+#
+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: 2021-08-16 13:50+0000\n"
+"Last-Translator: Nart Tlisha <daniel.abzakh@gmail.com>\n"
+"Language-Team: Abkhazian\n"
+"Language: ab\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.4\n"
+
+#: ../atspi/atspi-component.c:325 ../atspi/atspi-misc.c:1034
+#: ../atspi/atspi-value.c:111
+msgid "The application no longer exists"
+msgstr "Аԥшьы уаҳа ыҟаӡам"
+
+#: ../atspi/atspi-misc.c:1777
+msgid "Attempted synchronous call where prohibited"
+msgstr "Синхронтәу асра аҟаҵара азин ыҟаӡам"
index f7bc9c1..f0991f3 100644 (file)
--- a/po/be.po
+++ b/po/be.po
@@ -1,29 +1,31 @@
 # Yuras Shumovich <shumovichy@gmail.com>, 2017.
 msgid ""
 msgstr ""
-"Project-Id-Version: at-spi2-core.master\n"
-"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=at-"
-"spi&keywords=I18N+L10N&component=at-spi2-core\n"
-"POT-Creation-Date: 2017-03-13 21:58+0000\n"
-"PO-Revision-Date: 2017-03-26 18:30+0300\n"
+"Project-Id-Version: ab10e6d45488175674299c2d7fc854f6\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/at-spi2-core/issues\n"
+"POT-Creation-Date: 2020-12-28 16:53+0000\n"
+"PO-Revision-Date: 2021-06-15 12:46\n"
 "Last-Translator: Yuras Shumovich <shumovichy@gmail.com>\n"
-"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
+"Language-Team: Belarusian\n"
 "Language: be\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || n%10>=5 && n%10<=9 || n%100>=11 && n%100<=14 ? 2 : 3);\n"
 "X-Generator: Poedit 1.8.11\n"
+"X-Crowdin-Project: ab10e6d45488175674299c2d7fc854f6\n"
+"X-Crowdin-Project-ID: 104\n"
+"X-Crowdin-Language: be\n"
+"X-Crowdin-File: /Localizations/Gnome/Gnome development/in/at-spi2-core.master.be.po\n"
+"X-Crowdin-File-ID: 2608\n"
 
-#: ../atspi/atspi-component.c:326 ../atspi/atspi-misc.c:1073
-#: ../atspi/atspi-value.c:111
+#: atspi/atspi-component.c:332 atspi/atspi-misc.c:1077 atspi/atspi-value.c:111
 msgid "The application no longer exists"
 msgstr "Праграма больш не існуе"
 
-#: ../atspi/atspi-misc.c:1832
+#: atspi/atspi-misc.c:1855
 msgid "Attempted synchronous call where prohibited"
-msgstr "Спроба зрабіць сінхронны выклік, там дзе гэта забаронена"
+msgstr "Спроба сінхроннага выкліку ў забароненым месцы"
 
 #~ msgid "AT-SPI: Unknown signature %s for RemoveAccessible"
 #~ msgstr "AT-SPI: Невядомы подпіс %s для RemoveAccessible"
@@ -57,8 +59,7 @@ msgstr "Спроба зрабіць сінхронны выклік, там дз
 #~ "AT-SPI: пры сцягванні %s з інтэрфейсу %s чакаўся варыянт; атрыманы %s\n"
 
 #~ msgid "atspi_dbus_get_property: Wrong type: expected %s, got %c\n"
-#~ msgstr ""
-#~ "atspi_dbus_get_property: Няправільны тып: чакаўся %s, атрыманы %c\n"
+#~ msgstr "atspi_dbus_get_property: Няправільны тып: чакаўся %s, атрыманы %c\n"
 
 #~ msgid "AT-SPI: Unknown interface %s"
 #~ msgstr "AT-SPI: Невядомы інтэрфейс %s"
@@ -77,3 +78,4 @@ msgstr "Спроба зрабіць сінхронны выклік, там дз
 
 #~ msgid "Got invalid signature %s for signal %s from interface %s\n"
 #~ msgstr "Атрыманы хібны подпіс %s для сігналу %s інтэрфейсу %s\n"
+
index 932ffea..ed8f1fd 100644 (file)
--- a/po/gl.po
+++ b/po/gl.po
@@ -7,10 +7,10 @@ msgid ""
 msgstr ""
 "Project-Id-Version: at-spi 2-core\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"
+"POT-Creation-Date: 2020-12-28 16:53+0000\n"
 "PO-Revision-Date: 2019-12-25 05:11+0100\n"
 "Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
-"Language-Team: gnome-l10n-gl@gnome.org\n"
+"Language-Team: Proxecto Trasno <proxecto@trasno.gal>\n"
 "Language: gl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -18,10 +18,10 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 2.2.4\n"
 
-#: atspi/atspi-component.c:326 atspi/atspi-misc.c:1073 atspi/atspi-value.c:111
+#: atspi/atspi-component.c:332 atspi/atspi-misc.c:1077 atspi/atspi-value.c:111
 msgid "The application no longer exists"
 msgstr "A aplicación xa non existe"
 
-#: atspi/atspi-misc.c:1850
+#: atspi/atspi-misc.c:1855
 msgid "Attempted synchronous call where prohibited"
 msgstr "Tentouse unha chamada síncrona onde estaba prohibida"
index 2f212b0..f109484 100644 (file)
@@ -70,7 +70,11 @@ dbus_bool_t spi_dbus_message_iter_append_struct(DBusMessageIter *iter, ...)
     ptr = va_arg(args, void *);
     dbus_message_iter_append_basic(&iter_struct, type, ptr);
   }
-  if (!dbus_message_iter_close_container(iter, &iter_struct)) return FALSE;
+  if (!dbus_message_iter_close_container(iter, &iter_struct))
+  {
+    va_end(args);
+    return FALSE;
+  }
   va_end(args);
   return TRUE;
 }
index df16bd8..55239f4 100644 (file)
@@ -82,7 +82,7 @@ static unsigned int mouse_button_mask =
   Button1Mask | Button2Mask | Button3Mask | Button4Mask | Button5Mask;
 static unsigned int key_modifier_mask =
   Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask | ShiftMask | LockMask | ControlMask | SPI_KEYMASK_NUMLOCK;
-static unsigned int _numlock_physical_mask = Mod2Mask; /* a guess, will be reset */
+extern unsigned int _numlock_physical_mask;
 
 static XModifierKeymap* xmkeymap = NULL;
 
index acd089b..942f383 100644 (file)
@@ -73,7 +73,7 @@ static unsigned int key_modifier_mask =
   SPI_KEYMASK_MOD1 | SPI_KEYMASK_MOD2 | SPI_KEYMASK_MOD3 | SPI_KEYMASK_MOD4 |
   SPI_KEYMASK_MOD5 | SPI_KEYMASK_SHIFT | SPI_KEYMASK_SHIFTLOCK |
   SPI_KEYMASK_CONTROL | SPI_KEYMASK_NUMLOCK;
-static unsigned int _numlock_physical_mask = SPI_KEYMASK_MOD2; /* a guess, will be reset */
+unsigned int _numlock_physical_mask = SPI_KEYMASK_MOD2; /* a guess, will be reset */
 
 static gboolean have_mouse_listener = FALSE;
 static gboolean have_mouse_event_listener = FALSE;
index a6dff74..913ebcb 100644 (file)
@@ -3,7 +3,7 @@
 <interface name="org.a11y.atspi.Collection">
 
   <method name="GetMatches">
-    <arg direction="in" name="rule" type="(auuasuauusub)"/>
+    <arg direction="in" name="rule" type="(aiia{ss}iaiiasib)"/>
     <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QSpiMatchRule"/>
     <arg direction="in" name="sortby" type="u"/>
     <arg direction="in" name="count" type="i"/>
@@ -15,7 +15,7 @@
   <method name="GetMatchesTo">
     <arg direction="in" name="current_object" type="o"/>
     <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QSpiObjectReference"/>
-    <arg direction="in" name="rule" type="(auuasuauusub)"/>
+    <arg direction="in" name="rule" type="(aiia{ss}iaiiasib)"/>
     <annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="QSpiMatchRule"/>
     <arg direction="in" name="sortby" type="u"/>
     <arg direction="in" name="tree" type="u"/>
@@ -29,7 +29,7 @@
   <method name="GetMatchesFrom">
     <arg direction="in" name="current_object" type="o"/>
     <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QSpiObjectReference"/>
-    <arg direction="in" name="rule" type="(auuasuauusub)"/>
+    <arg direction="in" name="rule" type="(aiia{ss}iaiiasib)"/>
     <annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="QSpiMatchRule"/>
     <arg direction="in" name="sortby" type="u"/>
     <arg direction="in" name="tree" type="u"/>
index 94056ff..afefab8 100644 (file)
 
   <method name="ScrollTo">
     <arg direction="in" name="type" type="u"/>
+    <arg direction="out" type="b"/>
   </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"/>
+    <arg direction="out" type="b"/>
   </method>
 
 </interface>
index a82eb98..03c9693 100644 (file)
@@ -16,7 +16,7 @@
   </method>
 
   <method name="GetAttributes">
-    <arg direction="out" type="{ss}"/>
+    <arg direction="out" type="a{ss}"/>
     <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QSpiAttributeSet"/>
   </method>
 
index fe9f44b..da772ae 100644 (file)
     <arg direction="in" name="startOffset" type="i"/>
     <arg direction="in" name="endOffset" type="i"/>
     <arg direction="in" name="type" type="u"/>
+    <arg direction="out" type="b"/>
   </method>
 
   <method name="ScrollSubstringToPoint">
     <arg direction="in" name="type" type="u"/>
     <arg direction="in" name="x" type="i"/>
     <arg direction="in" name="y" type="i"/>
+    <arg direction="out" type="b"/>
   </method>
 
 </interface>