]> code.delx.au - pulseaudio/commitdiff
client-conf-x11: unbreak autospawn due to stale X11 properties
authorLennart Poettering <lennart@poettering.net>
Mon, 13 Apr 2009 20:28:35 +0000 (22:28 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 13 Apr 2009 20:28:35 +0000 (22:28 +0200)
If the X11 property data is from the same session than the client the
client may do autospawning in case the X11 property data is stale.

Closes #518.

src/modules/module-x11-publish.c
src/pulse/client-conf-x11.c

index 83e69d1b6c441d423281a87ddcb5c5a4fcbf82e6..2c7fdc12352f631a1259612d18c67597bb030134 100644 (file)
@@ -136,7 +136,7 @@ static void x11_kill_cb(pa_x11_wrapper *w, void *userdata) {
 int pa__init(pa_module*m) {
     struct userdata *u;
     pa_modargs *ma = NULL;
-    char *mid;
+    char *mid, *sid;
     char hx[PA_NATIVE_COOKIE_LENGTH*2+1];
     const char *t;
 
@@ -170,6 +170,11 @@ int pa__init(pa_module*m) {
 
     pa_x11_set_prop(pa_x11_wrapper_get_display(u->x11_wrapper), "PULSE_ID", u->id);
 
+    if ((sid = pa_session_id())) {
+        pa_x11_set_prop(pa_x11_wrapper_get_display(u->x11_wrapper), "PULSE_SESSION_ID", sid);
+        pa_xfree(sid);
+    }
+
     publish_servers(u, pa_native_protocol_servers(u->protocol));
 
     if ((t = pa_modargs_get_value(ma, "source", NULL)))
@@ -219,6 +224,7 @@ void pa__done(pa_module*m) {
             pa_x11_del_prop(pa_x11_wrapper_get_display(u->x11_wrapper), "PULSE_SINK");
             pa_x11_del_prop(pa_x11_wrapper_get_display(u->x11_wrapper), "PULSE_SOURCE");
             pa_x11_del_prop(pa_x11_wrapper_get_display(u->x11_wrapper), "PULSE_COOKIE");
+            pa_x11_del_prop(pa_x11_wrapper_get_display(u->x11_wrapper), "PULSE_SESSION_ID");
             XSync(pa_x11_wrapper_get_display(u->x11_wrapper), False);
         }
 
index 3bec742f3ea5df08ac64cfeedc01ce2028214650..4970363b1fb786b34a3e96c7fd1b1dc68f0c0652 100644 (file)
@@ -57,8 +57,23 @@ int pa_client_conf_from_x11(pa_client_conf *c, const char *dname) {
     }
 
     if (pa_x11_get_prop(d, "PULSE_SERVER", t, sizeof(t))) {
+        pa_bool_t disable_autospawn = TRUE;
+
         pa_xfree(c->default_server);
         c->default_server = pa_xstrdup(t);
+
+        if (pa_x11_get_prop(d, "PULSE_SESSION_ID", t, sizeof(t))) {
+            char *id;
+
+            if ((id = pa_session_id())) {
+                if (pa_streq(t, id))
+                    disable_autospawn = FALSE;
+                pa_xfree(id);
+            }
+        }
+
+        if (disable_autospawn)
+            c->autospawn = FALSE;
     }
 
     if (pa_x11_get_prop(d, "PULSE_SINK", t, sizeof(t))) {