Sophie

Sophie

distrib > Mandriva > 2010.0 > x86_64 > media > main-testing-src > by-pkgid > df5da2d17b5d75fa67e6b0793d622f0f > files > 5

xinit-1.1.0-5.1mdv2010.0.src.rpm

--- xinit-1.1.0/configure.ac.poke-ck	2008-06-12 21:26:07.000000000 +0200
+++ xinit-1.1.0/configure.ac	2009-04-13 07:56:19.000000000 +0200
@@ -123,7 +123,7 @@
 AM_CONDITIONAL(LAUNCHD, [test "x$LAUNCHD" = "xyes"])
 
 # Checks for pkg-config packages
-PKG_CHECK_MODULES(XINIT, x11)
+PKG_CHECK_MODULES(XINIT, x11 ck-connector)
 
 case $host_os in
     *bsd*)
--- xinit-1.1.0/startx.cpp.poke-ck	2009-04-13 07:56:19.000000000 +0200
+++ xinit-1.1.0/startx.cpp	2009-04-13 07:56:19.000000000 +0200
@@ -144,6 +144,12 @@
 #endif
 fi
 
+if [ x"$display" != x ]; then
+    export DISPLAY=$display
+else
+    export DISPLAY=:0
+fi
+
 #if defined(__SCO__) || defined(__UNIXWARE__)
 
 XCOMM SCO -t option: do not start an X server
--- xinit-1.1.0/xinit.c.poke-ck	2009-04-13 07:56:19.000000000 +0200
+++ xinit-1.1.0/xinit.c	2009-04-13 07:56:19.000000000 +0200
@@ -1,3 +1,4 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
 /* $Xorg: xinit.c,v 1.5 2001/02/09 02:05:49 xorgcvs Exp $ */
 /* $XdotOrg: $ */
 
@@ -39,6 +40,13 @@
 #include <ctype.h>
 #include <stdint.h>
 
+#define USE_CONKIT
+#ifdef USE_CONKIT
+#include <ck-connector.h>
+#include <X11/Xatom.h>
+static CkConnector *ckc = NULL;
+#endif /* USE_CONKIT */
+
 #ifdef X_POSIX_C_SOURCE
 #define _POSIX_C_SOURCE X_POSIX_C_SOURCE
 #include <signal.h>
@@ -521,6 +529,39 @@
 	return( serverpid != pidfound );
 }
 
+
+#ifdef USE_CONKIT
+static void
+register_new_session_with_console_kit (void)
+{
+	static char conkitbuf[256];
+	DBusError   error;
+
+	ckc = ck_connector_new ();
+	if (ckc == NULL) {
+		Error ("Cannot register with ConsoleKit: OOM creating CkConnector\n");
+		goto out;
+	}
+
+	dbus_error_init (&error);
+	if (!ck_connector_open_session (ckc, &error)) {
+		Error ("Cannot register with ConsoleKit: %s: %s\n", error.name, error.message);
+		goto out;
+	}
+
+	/* If we managed to register with ConsoleKit, put the
+	 * environment variable XDG_SESSION_COOKIE=cookie as second
+	 * element in newenviron. See set_environment() where we
+	 * earlier have made sure there is room...
+	 */
+	conkitbuf[sizeof (conkitbuf) - 1] = '\0';
+	snprintf (conkitbuf, sizeof (conkitbuf) - 1, "XDG_SESSION_COOKIE=%s", ck_connector_get_cookie (ckc));
+	newenviron[1] = conkitbuf;
+out:
+	;
+}
+#endif /* USE_CONKIT */
+
 static int
 startServer(char *server[])
 {
@@ -631,6 +672,12 @@
 		break;
 	}
 
+#ifdef USE_CONKIT
+	if (serverpid != -1 ) {
+		register_new_session_with_console_kit ();
+	}
+#endif /* USE_CONKIT */
+
 	return(serverpid);
 }
 
@@ -783,6 +830,13 @@
 				clientpid);
 	}
 
+#ifdef USE_CONKIT
+	if (ckc != NULL) {
+		ck_connector_unref (ckc);
+		ckc = NULL;
+	}
+#endif
+
 	if (serverpid < 0)
 		return;
 	errno = 0;
@@ -819,6 +873,13 @@
  * make a new copy of environment that has room for DISPLAY
  */
 
+
+#ifdef USE_CONKIT
+#define NUM_EXTRA_ENV_VARS 4
+#else
+#define NUM_EXTRA_ENV_VARS 3
+#endif
+
 static void 
 set_environment(void)
 {
@@ -830,11 +891,11 @@
     for (oldPtr = environ; *oldPtr; oldPtr++) ;
 
     nenvvars = (oldPtr - environ);
-    newenviron = (char **) malloc ((nenvvars + 3) * sizeof(char **));
+    newenviron = (char **) malloc ((nenvvars + NUM_EXTRA_ENV_VARS) * sizeof(char **));
     if (!newenviron) {
 	fprintf (stderr,
 		 "%s:  unable to allocate %d pointers for environment\n",
-		 program, nenvvars + 3);
+		 program, nenvvars + NUM_EXTRA_ENV_VARS);
 	exit (1);
     }
 
@@ -843,9 +904,16 @@
     newPtr = newenviron;
     *newPtr++ = displaybuf;
 
+#ifdef USE_CONKIT
+    *newPtr++ = "XDG_SESSION_COOKIE=";
+#endif
+
     /* copy pointers to other variables */
     for (oldPtr = environ; *oldPtr; oldPtr++) {
 	if (strncmp (*oldPtr, "DISPLAY=", 8) != 0
+#ifdef USE_CONKIT
+	 && strncmp (*oldPtr, "XDG_SESSION_COOKIE=", 19) != 0
+#endif
 	 && strncmp (*oldPtr, "WINDOWPATH=", 11) != 0) {
 	    *newPtr++ = *oldPtr;
 	}