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 - mgorse@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 - mgorse@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 mgorse@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
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