SOURCES: xorg-app-xinit-consolekit-support.patch (NEW) - adds supp...

megabajt megabajt at pld-linux.org
Sun Dec 23 12:59:47 CET 2007


Author: megabajt                     Date: Sun Dec 23 11:59:47 2007 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- adds support for ConsoleKit (from https://bugs.freedesktop.org/show_bug.cgi?id=12378)

---- Files affected:
SOURCES:
   xorg-app-xinit-consolekit-support.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/xorg-app-xinit-consolekit-support.patch
diff -u /dev/null SOURCES/xorg-app-xinit-consolekit-support.patch:1.1
--- /dev/null	Sun Dec 23 12:59:47 2007
+++ SOURCES/xorg-app-xinit-consolekit-support.patch	Sun Dec 23 12:59:41 2007
@@ -0,0 +1,197 @@
+diff --git a/Makefile.am b/Makefile.am
+index babc2f3..9b912a3 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -24,8 +24,8 @@ XINITDIR = $(libdir)/X11/xinit
+ bin_PROGRAMS = xinit
+ bin_SCRIPTS = startx
+ 
+-xinit_CFLAGS = $(XINIT_CFLAGS) -DXINITDIR=\"$(XINITDIR)\" -DBINDIR=\"$(bindir)\"
+-xinit_LDADD = $(XINIT_LIBS)
++xinit_CFLAGS = $(XINIT_CFLAGS) $(CK_CFLAGS) -DXINITDIR=\"$(XINITDIR)\" -DBINDIR=\"$(bindir)\"
++xinit_LDADD = $(XINIT_LIBS) $(CK_LIBS)
+ 
+ xinit_SOURCES =	\
+         xinit.c
+diff --git a/configure.ac b/configure.ac
+index 1aee1d2..5775db3 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -47,6 +47,7 @@ DEFAULT_XMODMAP=xmodmap
+ DEFAULT_TWM=twm
+ DEFAULT_XCLOCK=xclock
+ DEFAULT_XTERM=xterm
++DEFAULT_CK=yes
+ # You always want to specify the full path to the X server
+ DEFAULT_XSERVER=${bindir}/X
+ DEFAULT_XAUTH=xauth
+@@ -104,6 +105,20 @@ esac
+ AC_SUBST(XINIT_CFLAGS)
+ AC_SUBST(XINIT_LIBS)
+ 
++# Check for ConsoleKit
++AC_ARG_WITH(consolekit,
++	 AS_HELP_STRING([--with-consolekit], [Use ConsoleKit in xinit]),
++	[CK="$withval"],
++	[CK="$DEFAULT_CK"])
++if test "x$CK" != xno ; then
++	PKG_CHECK_MODULES(CK, ck-connector,
++		have_conkit=yes,
++		[have_conkit=no; echo no])
++	if test "x$have_conkit" = xyes ; then
++		AC_DEFINE(USE_CONKIT, 1, [Define if you have ConsoleKit])
++	fi
++fi
++
+ AC_PATH_PROGS(MCOOKIE, [mcookie], [$MCOOKIE],
+   [$PATH:/bin:/usr/bin:/usr/lib:/usr/libexec:/usr/local/bin])
+ if test "x$MCOOKIE" != x ; then
+diff --git a/startx.cpp b/startx.cpp
+index 42421ef..998c7f8 100644
+--- a/startx.cpp
++++ b/startx.cpp
+@@ -222,6 +222,12 @@ EOF
+     fi
+ done
+ 
++if [ x"$display" != x ]; then
++    export DISPLAY=$display
++else
++    export DISPLAY=:0
++fi
++
+ #if defined(__SCO__) || defined(__UNIXWARE__)
+ if [ "$REMOTE_SERVER" = "TRUE" ]; then
+         exec SHELL_CMD ${client}
+diff --git a/xinit.c b/xinit.c
+index 46dee54..c2c4527 100644
+--- a/xinit.c
++++ b/xinit.c
+@@ -39,6 +39,12 @@ in this Software without prior written authorization from The Open Group.
+ #include <ctype.h>
+ #include <stdint.h>
+ 
++#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 +527,39 @@ processTimeout(int timeout, char *string)
+ 	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 +670,12 @@ startServer(char *server[])
+ 		break;
+ 	}
+ 
++#ifdef USE_CONKIT
++	if (serverpid != -1 ) {
++		register_new_session_with_console_kit ();
++	}
++#endif /* USE_CONKIT */
++
+ 	return(serverpid);
+ }
+ 
+@@ -775,6 +820,13 @@ shutdown(void)
+ 				clientpid);
+ 	}
+ 
++#ifdef USE_CONKIT
++	if (ckc != NULL) {
++		ck_connector_unref (ckc);
++		ckc = NULL;
++	}
++#endif
++
+ 	if (serverpid < 0)
+ 		return;
+ 	errno = 0;
+@@ -811,6 +863,13 @@ shutdown(void)
+  * 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)
+ {
+@@ -822,11 +881,11 @@ set_environment(void)
+     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);
+     }
+ 
+@@ -836,10 +895,18 @@ set_environment(void)
+     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
+-	 && strncmp (*oldPtr, "WINDOWPATH=", 11) != 0) {
++	 && strncmp (*oldPtr, "WINDOWPATH=", 11) != 0
++#ifdef USE_CONKIT
++	 && strncmp (*oldPtr, "XDG_SESSION_COOKIE=", 19) != 0
++#endif
++	 ) {
+ 	    *newPtr++ = *oldPtr;
+ 	}
+     }
================================================================


More information about the pld-cvs-commit mailing list