xinit-1.0.7-poke-ck.patch 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. diff -up xinit-1.0.7/xinit.c.poke-ck xinit-1.0.7/xinit.c
  2. --- xinit-1.0.7/xinit.c.poke-ck 2007-09-24 13:48:04.000000000 -0400
  3. +++ xinit-1.0.7/xinit.c 2007-09-24 13:53:55.000000000 -0400
  4. @@ -1,3 +1,4 @@
  5. +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  6. /* $Xorg: xinit.c,v 1.5 2001/02/09 02:05:49 xorgcvs Exp $ */
  7. /* $XdotOrg: $ */
  8. @@ -39,6 +40,13 @@ in this Software without prior written a
  9. #include <ctype.h>
  10. #include <stdint.h>
  11. +#define USE_CONKIT
  12. +#ifdef USE_CONKIT
  13. +#include <ck-connector.h>
  14. +#include <X11/Xatom.h>
  15. +static CkConnector *ckc = NULL;
  16. +#endif /* USE_CONKIT */
  17. +
  18. #ifdef X_POSIX_C_SOURCE
  19. #define _POSIX_C_SOURCE X_POSIX_C_SOURCE
  20. #include <signal.h>
  21. @@ -521,6 +529,39 @@ processTimeout(int timeout, char *string
  22. return( serverpid != pidfound );
  23. }
  24. +
  25. +#ifdef USE_CONKIT
  26. +static void
  27. +register_new_session_with_console_kit (void)
  28. +{
  29. + static char conkitbuf[256];
  30. + DBusError error;
  31. +
  32. + ckc = ck_connector_new ();
  33. + if (ckc == NULL) {
  34. + Error ("Cannot register with ConsoleKit: OOM creating CkConnector\n");
  35. + goto out;
  36. + }
  37. +
  38. + dbus_error_init (&error);
  39. + if (!ck_connector_open_session (ckc, &error)) {
  40. + Error ("Cannot register with ConsoleKit: %s: %s\n", error.name, error.message);
  41. + goto out;
  42. + }
  43. +
  44. + /* If we managed to register with ConsoleKit, put the
  45. + * environment variable XDG_SESSION_COOKIE=cookie as second
  46. + * element in newenviron. See set_environment() where we
  47. + * earlier have made sure there is room...
  48. + */
  49. + conkitbuf[sizeof (conkitbuf) - 1] = '\0';
  50. + snprintf (conkitbuf, sizeof (conkitbuf) - 1, "XDG_SESSION_COOKIE=%s", ck_connector_get_cookie (ckc));
  51. + newenviron[1] = conkitbuf;
  52. +out:
  53. + ;
  54. +}
  55. +#endif /* USE_CONKIT */
  56. +
  57. static int
  58. startServer(char *server[])
  59. {
  60. @@ -631,6 +672,12 @@ startServer(char *server[])
  61. break;
  62. }
  63. +#ifdef USE_CONKIT
  64. + if (serverpid != -1 ) {
  65. + register_new_session_with_console_kit ();
  66. + }
  67. +#endif /* USE_CONKIT */
  68. +
  69. return(serverpid);
  70. }
  71. @@ -785,6 +832,13 @@ shutdown(void)
  72. clientpid);
  73. }
  74. +#ifdef USE_CONKIT
  75. + if (ckc != NULL) {
  76. + ck_connector_unref (ckc);
  77. + ckc = NULL;
  78. + }
  79. +#endif
  80. +
  81. if (serverpid < 0)
  82. return;
  83. errno = 0;
  84. @@ -821,6 +875,13 @@ shutdown(void)
  85. * make a new copy of environment that has room for DISPLAY
  86. */
  87. +
  88. +#ifdef USE_CONKIT
  89. +#define NUM_EXTRA_ENV_VARS 3
  90. +#else
  91. +#define NUM_EXTRA_ENV_VARS 2
  92. +#endif
  93. +
  94. static void
  95. set_environment(void)
  96. {
  97. @@ -832,11 +893,11 @@ set_environment(void)
  98. for (oldPtr = environ; *oldPtr; oldPtr++) ;
  99. nenvvars = (oldPtr - environ);
  100. - newenviron = (char **) malloc ((nenvvars + 3) * sizeof(char **));
  101. + newenviron = (char **) malloc ((nenvvars + NUM_EXTRA_ENV_VARS) * sizeof(char **));
  102. if (!newenviron) {
  103. fprintf (stderr,
  104. "%s: unable to allocate %d pointers for environment\n",
  105. - program, nenvvars + 3);
  106. + program, nenvvars + NUM_EXTRA_ENV_VARS);
  107. exit (1);
  108. }
  109. @@ -846,10 +907,19 @@ set_environment(void)
  110. newPtr = newenviron;
  111. *newPtr++ = displaybuf;
  112. +#ifdef USE_CONKIT
  113. + *newPtr++ = "XDG_SESSION_COOKIE=";
  114. +#endif
  115. +
  116. /* copy pointers to other variables */
  117. for (oldPtr = environ; *oldPtr; oldPtr++) {
  118. if (strncmp (*oldPtr, "DISPLAY=", 8) != 0
  119. - && strncmp (*oldPtr, "WINDOWPATH=", 11) != 0) {
  120. + && strncmp (*oldPtr, "WINDOWPATH=", 11) != 0
  121. +#ifdef USE_CONKIT
  122. + && strncmp (*oldPtr, "XDG_SESSION_COOKIE=", 19) != 0
  123. +#endif
  124. + )
  125. + {
  126. *newPtr++ = *oldPtr;
  127. }
  128. }
  129. diff -up xinit-1.0.7/configure.ac.poke-ck xinit-1.0.7/configure.ac
  130. --- xinit-1.0.7/configure.ac.poke-ck 2007-09-17 06:46:38.000000000 -0400
  131. +++ xinit-1.0.7/configure.ac 2007-09-24 13:48:04.000000000 -0400
  132. @@ -92,7 +92,7 @@ AC_ARG_WITH(xinit,
  133. [XINIT="$DEFAULT_XINIT"])
  134. # Checks for pkg-config packages
  135. -PKG_CHECK_MODULES(XINIT, x11)
  136. +PKG_CHECK_MODULES(XINIT, x11 ck-connector)
  137. case $host_os in
  138. *bsd*)
  139. diff -up xinit-1.0.7/startx.cpp.poke-ck xinit-1.0.7/startx.cpp
  140. --- xinit-1.0.7/startx.cpp.poke-ck 2007-09-16 17:24:48.000000000 -0400
  141. +++ xinit-1.0.7/startx.cpp 2007-09-24 13:48:04.000000000 -0400
  142. @@ -223,6 +223,12 @@ EOF
  143. fi
  144. done
  145. +if [ x"$display" != x ]; then
  146. + export DISPLAY=$display
  147. +else
  148. + export DISPLAY=:0
  149. +fi
  150. +
  151. #if defined(__SCO__) || defined(__UNIXWARE__)
  152. if [ "$REMOTE_SERVER" = "TRUE" ]; then
  153. exec SHELL_CMD ${client}