SHA256
1
0
forked from pool/at-spi2-core

Accepting request 412207 from GNOME:Factory

1

OBS-URL: https://build.opensuse.org/request/show/412207
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/at-spi2-core?expand=0&rev=69
This commit is contained in:
Dominique Leuenberger 2016-07-27 14:06:56 +00:00 committed by Git OBS Bridge
commit 9ac8f22aa7
3 changed files with 177 additions and 2 deletions

View File

@ -0,0 +1,161 @@
From 253ada975e0a374e7b1a6a07d2a483dd1d8c52fa Mon Sep 17 00:00:00 2001
From: Mike Gorse <mgorse@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

View File

@ -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 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(gobject-2.0), pkgconfig(gobject-introspection-1.0),
pkgconfig(x11), pkgconfig(xtst), pkgconfig(xi). 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 Sun May 22 19:09:47 UTC 2016 - zaitor@opensuse.org

View File

@ -25,16 +25,18 @@ Group: System/Libraries
Url: http://www.gnome.org/ Url: http://www.gnome.org/
Source0: http://download.gnome.org/sources/at-spi2-core/2.20/%{name}-%{version}.tar.xz Source0: http://download.gnome.org/sources/at-spi2-core/2.20/%{name}-%{version}.tar.xz
Source99: baselibs.conf 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: intltool
BuildRequires: update-desktop-files BuildRequires: update-desktop-files
BuildRequires: pkgconfig(xi)
BuildRequires: pkgconfig(xtst)
BuildRequires: pkgconfig(dbus-1) >= 1.0 BuildRequires: pkgconfig(dbus-1) >= 1.0
BuildRequires: pkgconfig(gio-2.0) >= 2.28 BuildRequires: pkgconfig(gio-2.0) >= 2.28
BuildRequires: pkgconfig(glib-2.0) >= 2.36.0 BuildRequires: pkgconfig(glib-2.0) >= 2.36.0
BuildRequires: pkgconfig(gobject-2.0) >= 2.0.0 BuildRequires: pkgconfig(gobject-2.0) >= 2.0.0
BuildRequires: pkgconfig(gobject-introspection-1.0) BuildRequires: pkgconfig(gobject-introspection-1.0)
BuildRequires: pkgconfig(x11) BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(xi)
BuildRequires: pkgconfig(xtst)
# dbus-daemon is needed to have this work fine # dbus-daemon is needed to have this work fine
Requires: dbus-1 Requires: dbus-1
@ -81,6 +83,7 @@ to develop applications that require these.
%lang_package %lang_package
%prep %prep
%setup -q %setup -q
%patch0 -p1
%build %build
%configure \ %configure \