diff --git a/at-spi2-core-session-management.patch b/at-spi2-core-session-management.patch new file mode 100644 index 0000000..b53a709 --- /dev/null +++ b/at-spi2-core-session-management.patch @@ -0,0 +1,161 @@ +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 + diff --git a/at-spi2-core.changes b/at-spi2-core.changes index 9cfb97c..1990908 100644 --- a/at-spi2-core.changes +++ b/at-spi2-core.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +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). + ------------------------------------------------------------------- Sat May 28 17:29:53 UTC 2016 - zaitor@opensuse.org @@ -11,6 +17,11 @@ Sat May 28 17:29:53 UTC 2016 - zaitor@opensuse.org pkgconfig(gobject-2.0), pkgconfig(gobject-introspection-1.0), pkgconfig(x11), pkgconfig(xtst), pkgconfig(xi). +------------------------------------------------------------------- +Mon May 23 20:21:38 UTC 2016 - mgorse@suse.com + +- Update to GNOME 3.20.2 Fate#318572 + ------------------------------------------------------------------- Sun May 22 19:09:47 UTC 2016 - zaitor@opensuse.org diff --git a/at-spi2-core.spec b/at-spi2-core.spec index ea6bbce..0ad2d9b 100644 --- a/at-spi2-core.spec +++ b/at-spi2-core.spec @@ -25,16 +25,18 @@ Group: System/Libraries 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 @@ to develop applications that require these. %lang_package %prep %setup -q +%patch0 -p1 %build %configure \