Hello community,

here is the log from the commit of package at-spi2-core for openSUSE:Factory 
checked in at 2016-07-27 16:06:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/at-spi2-core (Old)
 and      /work/SRC/openSUSE:Factory/.at-spi2-core.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "at-spi2-core"

Changes:
--------
--- /work/SRC/openSUSE:Factory/at-spi2-core/at-spi2-core.changes        
2016-06-03 16:26:56.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.at-spi2-core.new/at-spi2-core.changes   
2016-07-27 16:06:58.000000000 +0200
@@ -1,0 +2,6 @@
+Thu Jul 14 21:09:36 UTC 2016 - mgo...@suse.com
+
+- Add at-spi2-core-session-management.patch: properly register
+  at-spi-bus-launcher with gnome-session (bsc#984109).
+
+-------------------------------------------------------------------
@@ -12,0 +19,5 @@
+
+-------------------------------------------------------------------
+Mon May 23 20:21:38 UTC 2016 - mgo...@suse.com
+
+- Update to GNOME 3.20.2  Fate#318572

New:
----
  at-spi2-core-session-management.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ at-spi2-core.spec ++++++
--- /var/tmp/diff_new_pack.BkiALO/_old  2016-07-27 16:06:59.000000000 +0200
+++ /var/tmp/diff_new_pack.BkiALO/_new  2016-07-27 16:06:59.000000000 +0200
@@ -25,16 +25,18 @@
 Url:            http://www.gnome.org/
 Source0:        
http://download.gnome.org/sources/at-spi2-core/2.20/%{name}-%{version}.tar.xz
 Source99:       baselibs.conf
+# PATCH-FIX-UPSTREAM at-spi2-core-session-management.patch bsc#984109 
mgo...@suse.com -- properly register at-spi-bus-launcher with gnome-session.
+Patch0:         at-spi2-core-session-management.patch
 BuildRequires:  intltool
 BuildRequires:  update-desktop-files
-BuildRequires:  pkgconfig(xi)
-BuildRequires:  pkgconfig(xtst)
 BuildRequires:  pkgconfig(dbus-1) >= 1.0
 BuildRequires:  pkgconfig(gio-2.0) >= 2.28
 BuildRequires:  pkgconfig(glib-2.0) >= 2.36.0
 BuildRequires:  pkgconfig(gobject-2.0) >= 2.0.0
 BuildRequires:  pkgconfig(gobject-introspection-1.0)
 BuildRequires:  pkgconfig(x11)
+BuildRequires:  pkgconfig(xi)
+BuildRequires:  pkgconfig(xtst)
 
 # dbus-daemon is needed to have this work fine
 Requires:       dbus-1
@@ -81,6 +83,7 @@
 %lang_package
 %prep
 %setup -q
+%patch0 -p1
 
 %build
 %configure \

++++++ at-spi2-core-session-management.patch ++++++
>From 253ada975e0a374e7b1a6a07d2a483dd1d8c52fa Mon Sep 17 00:00:00 2001
From: Mike Gorse <mgo...@suse.com>
Date: Thu, 14 Jul 2016 11:38:25 -0500
Subject: [PATCH] at-spi-bus-launcher: session management fixes

At-spi-bus-launcher was attempting to register with gnome-session but
typically failed because it was started before gnome-session is initialized.
Now we check whether gnome-session is running and only attempt to register
if it is; otherwise watch for SessionRunning and register when se wee it.

Also, handle SessionOver.
---
 bus/at-spi-bus-launcher.c | 97 ++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 80 insertions(+), 17 deletions(-)

diff --git a/bus/at-spi-bus-launcher.c b/bus/at-spi-bus-launcher.c
index 54aa07f..50e76f4 100644
--- a/bus/at-spi-bus-launcher.c
+++ b/bus/at-spi-bus-launcher.c
@@ -61,6 +61,11 @@ typedef struct {
   char *a11y_launch_error_message;
 } A11yBusLauncher;
 
+#define SM_DBUS_NAME      "org.gnome.SessionManager"
+#define SM_DBUS_PATH      "/org/gnome/SessionManager"
+#define SM_DBUS_INTERFACE "org.gnome.SessionManager"
+
+#define SM_CLIENT_DBUS_INTERFACE "org.gnome.SessionManager.ClientPrivate"
 static A11yBusLauncher *_global_app = NULL;
 
 static const gchar introspection_xml[] =
@@ -129,11 +134,12 @@ client_proxy_ready_cb (GObject      *source_object,
                     G_CALLBACK (g_signal_cb), app);
 }
 
+static GDBusProxy *sm_proxy;
+
 static void
 register_client (A11yBusLauncher *app)
 {
   GDBusProxyFlags flags;
-  GDBusProxy *sm_proxy;
   GError *error;
   const gchar *app_id;
   const gchar *autostart_id;
@@ -141,24 +147,12 @@ register_client (A11yBusLauncher *app)
   GVariant *parameters;
   GVariant *variant;
   gchar *object_path;
+  static gboolean session_registered = FALSE;
 
-  flags = G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
-          G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS;
+  if (session_registered)
+    return;
 
   error = NULL;
-  sm_proxy = g_dbus_proxy_new_sync (app->session_bus, flags, NULL,
-                                    "org.gnome.SessionManager",
-                                    "/org/gnome/SessionManager",
-                                    "org.gnome.SessionManager",
-                                    NULL, &error);
-
-  if (error != NULL)
-    {
-      g_warning ("Failed to get session manager proxy: %s", error->message);
-      g_error_free (error);
-
-      return;
-    }
 
   app_id = "at-spi-bus-launcher";
   autostart_id = g_getenv ("DESKTOP_AUTOSTART_ID");
@@ -202,6 +196,75 @@ register_client (A11yBusLauncher *app)
                             NULL, client_proxy_ready_cb, app);
 
   g_free (object_path);
+
+  session_registered = TRUE;
+}
+
+static void
+on_session_signal (GDBusProxy *proxy,
+                   gchar      *sender_name,
+                   gchar      *signal_name,
+                   GVariant   *parameters,
+                   gpointer    user_data)
+{
+  A11yBusLauncher *app = user_data;
+
+        if (g_strcmp0 (signal_name, "SessionOver") == 0) {
+                g_main_loop_quit (app->loop);
+        } else if (g_strcmp0 (signal_name, "SessionRunning") == 0) {
+                register_client (app);
+        }
+}
+
+static void
+is_session_running_ready_cb (GObject      *source_object,
+                       GAsyncResult *res,
+                       gpointer      user_data)
+{
+       GDBusProxy *proxy;
+  A11yBusLauncher *app = user_data;
+       GVariant   *values;
+       GError     *error = NULL;
+        gboolean is_running;
+
+       proxy = G_DBUS_PROXY (source_object);
+       values = g_dbus_proxy_call_finish (proxy, res, &error);
+        if (values) {
+                g_variant_get (values, "(b)", &is_running);
+                g_variant_unref (values);
+        }
+                if (is_running) {
+                        register_client (app);
+                }
+        }
+
+static gboolean
+session_manager_connect (A11yBusLauncher *app)
+{
+        GVariant *res;
+  GError *error = NULL;
+
+        sm_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION, 0, NULL,
+                                              SM_DBUS_NAME,
+                                              SM_DBUS_PATH,
+                                              SM_DBUS_INTERFACE, NULL, &error);
+
+  if (error != NULL)
+    {
+      g_warning ("Failed to get session manager proxy: %s", error->message);
+      g_error_free (error);
+
+      return;
+    }
+ 
+        g_dbus_proxy_call (sm_proxy,
+                           "IsSessionRunning", NULL,
+                            0, 1000, NULL, is_session_running_ready_cb, app);
+
+        g_signal_connect (G_OBJECT (sm_proxy), "g-signal",
+                          G_CALLBACK (on_session_signal), app);
+
+        return (sm_proxy != NULL);
 }
 
 static void
@@ -590,7 +653,7 @@ on_name_acquired (GDBusConnection *connection,
 {
   A11yBusLauncher *app = user_data;
 
-  register_client (app);
+  session_manager_connect (app);
 }
 
 static int sigterm_pipefd[2];
-- 
2.6.6


Reply via email to