r23502 - in /desktop/experimental/gdm3/debian: changelog gdm-xnest.svg gdm3.install gdmflexiserver-xnest.desktop patches/11_xephyr_nested.patch patches/90_relibtoolize.patch patches/series

lethalman-guest at users.alioth.debian.org lethalman-guest at users.alioth.debian.org
Thu Apr 1 11:28:08 UTC 2010


Author: lethalman-guest
Date: Thu Apr  1 11:28:07 2010
New Revision: 23502

URL: http://svn.debian.org/wsvn/pkg-gnome/?sc=1&rev=23502
Log:
  * New upstream release.
  * debian/patches/11_xephyr_nested.patch:
    - Added, support running gdm in a nested window.

Added:
    desktop/experimental/gdm3/debian/gdm-xnest.svg
    desktop/experimental/gdm3/debian/gdmflexiserver-xnest.desktop
    desktop/experimental/gdm3/debian/patches/11_xephyr_nested.patch
Modified:
    desktop/experimental/gdm3/debian/changelog
    desktop/experimental/gdm3/debian/gdm3.install
    desktop/experimental/gdm3/debian/patches/90_relibtoolize.patch
    desktop/experimental/gdm3/debian/patches/series

Modified: desktop/experimental/gdm3/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/experimental/gdm3/debian/changelog?rev=23502&op=diff
==============================================================================
--- desktop/experimental/gdm3/debian/changelog [utf-8] (original)
+++ desktop/experimental/gdm3/debian/changelog [utf-8] Thu Apr  1 11:28:07 2010
@@ -1,3 +1,11 @@
+gdm3 (2.30.0-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+  * debian/patches/11_xephyr_nested.patch:
+    - Added, support running gdm in a nested window.
+
+ -- Luca Bruno <lethalman88 at gmail.com>  Thu, 01 Apr 2010 12:51:39 +0200
+
 gdm3 (2.29.92-1) experimental; urgency=low
 
   [ Luca Bruno ]
@@ -17,6 +25,8 @@
     - Added, really stop the welcome session.
   * debian/patches/06_first_vt.patch:
     - Fix vt mask to really start at given vtN.
+  * debian/patches/02_xephyr_nested.patch:
+    - Support running gdm in a nested window.
 
   [ Josselin Mouette ]
   * Pass --with-screenshot-dir, newly introduced.
@@ -24,7 +34,7 @@
     term.
   * Update list of copyright holders.
 
- -- Josselin Mouette <joss at debian.org>  Thu, 25 Mar 2010 20:02:20 +0100
+ -- Luca Bruno <lethalman88 at gmail.com>  Thu, 01 Apr 2010 12:49:57 +0200
 
 gdm3 (2.28.1-1) UNRELEASED; urgency=low
 

Added: desktop/experimental/gdm3/debian/gdm-xnest.svg
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/experimental/gdm3/debian/gdm-xnest.svg?rev=23502&op=file
==============================================================================
--- desktop/experimental/gdm3/debian/gdm-xnest.svg (added)
+++ desktop/experimental/gdm3/debian/gdm-xnest.svg [utf-8] Thu Apr  1 11:28:07 2010
@@ -1,0 +1,1011 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48"
+   height="48"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   version="1.0"
+   sodipodi:docname="gdm-xnest.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 24 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="48 : 24 : 1"
+       inkscape:persp3d-origin="24 : 16 : 1"
+       id="perspective108" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6380">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6382" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6384" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8368">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop8370" />
+      <stop
+         id="stop8376"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop8372" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient8358">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop8360" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop8362" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3307">
+      <stop
+         style="stop-color:#888a85;stop-opacity:1;"
+         offset="0"
+         id="stop3309" />
+      <stop
+         style="stop-color:#888a85;stop-opacity:0;"
+         offset="1"
+         id="stop3311" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3307"
+       id="linearGradient3313"
+       x1="36.201752"
+       y1="37.667465"
+       x2="32.268337"
+       y2="39.921551"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3315">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop3317" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop3319" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3315"
+       id="linearGradient3321"
+       x1="33.358002"
+       y1="37.386215"
+       x2="33.045502"
+       y2="46.323711"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3355">
+      <stop
+         id="stop3357"
+         offset="0"
+         style="stop-color:#6f716c;stop-opacity:1;" />
+      <stop
+         id="stop3359"
+         offset="1"
+         style="stop-color:#888a85;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3355"
+       id="linearGradient3329"
+       x1="38.201752"
+       y1="41.542465"
+       x2="38.979862"
+       y2="44.494751"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3331">
+      <stop
+         style="stop-color:#d3d7cf;stop-opacity:1;"
+         offset="0"
+         id="stop3333" />
+      <stop
+         style="stop-color:#d3d7cf;stop-opacity:0;"
+         offset="1"
+         id="stop3335" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3331"
+       id="linearGradient3337"
+       x1="35.118725"
+       y1="40.170986"
+       x2="35.358002"
+       y2="45.698715"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient5354">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop5356" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop5358" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6288">
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:1"
+         offset="0"
+         id="stop6290" />
+      <stop
+         style="stop-color:#729fcf;stop-opacity:1"
+         offset="1"
+         id="stop6292" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6288"
+       id="radialGradient8344"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.0249844,0,0,2.0992192,-9.3693601,0.8779019)"
+       cx="11.03125"
+       cy="11.49707"
+       fx="11.03125"
+       fy="11.49707"
+       r="10.96875" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5354"
+       id="linearGradient8346"
+       gradientUnits="userSpaceOnUse"
+       x1="18.119612"
+       y1="36.509514"
+       x2="18.119612"
+       y2="40.376373"
+       gradientTransform="matrix(0.9545455,0,0,1,1.0909091,0)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8358"
+       id="radialGradient8401"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.25,-4,-84.375)"
+       cx="1"
+       cy="37.5"
+       fx="1"
+       fy="37.5"
+       r="2" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8368"
+       id="linearGradient8403"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-1,0)"
+       x1="9"
+       y1="40"
+       x2="9"
+       y2="35" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8358"
+       id="radialGradient8405"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.25,44,-9.375)"
+       cx="1"
+       cy="37.5"
+       fx="1"
+       fy="37.5"
+       r="2" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6380"
+       id="radialGradient6386"
+       cx="17.48214"
+       cy="8.3041525"
+       fx="17.48214"
+       fy="8.3041525"
+       r="21"
+       gradientTransform="matrix(-3.2870561,0,0,1.48151,68.675557,7.969844)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       gradientUnits="userSpaceOnUse"
+       r="8.341651"
+       fy="9.3411446"
+       fx="38.658855"
+       cy="9.3411446"
+       cx="38.658855"
+       id="radialGradient3271"
+       xlink:href="#linearGradient2378"
+       inkscape:collect="always" />
+    <radialGradient
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.744653,0,0,1.283833,-26.58256,-3.478359)"
+       r="4.2929163"
+       fy="12.98915"
+       fx="37.030354"
+       cy="12.98915"
+       cx="37.030354"
+       id="radialGradient4796"
+       xlink:href="#linearGradient4790"
+       inkscape:collect="always" />
+    <radialGradient
+       r="86.70845"
+       fy="14.9373"
+       fx="30.653816"
+       cy="14.9373"
+       cx="30.653816"
+       gradientTransform="matrix(0.148355,1.009137e-2,-1.104438e-2,0.162365,25.06011,12.81706)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5352"
+       xlink:href="#linearGradient259"
+       inkscape:collect="always" />
+    <radialGradient
+       r="37.751713"
+       fy="2.3667307"
+       fx="31.863327"
+       cy="2.3667307"
+       cx="31.863327"
+       gradientTransform="matrix(0.331735,0,0,0.353831,20.10526,9.5823)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5350"
+       xlink:href="#linearGradient269"
+       inkscape:collect="always" />
+    <radialGradient
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.284916,0,30.08928)"
+       r="15.821514"
+       fy="42.07798"
+       fx="24.306795"
+       cy="42.07798"
+       cx="24.306795"
+       id="radialGradient4548"
+       xlink:href="#linearGradient4542"
+       inkscape:collect="always" />
+    <radialGradient
+       r="38.158695"
+       fy="7.2678967"
+       fx="8.1435566"
+       cy="7.2678967"
+       cx="8.1435566"
+       gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient15668"
+       xlink:href="#linearGradient15662"
+       inkscape:collect="always" />
+    <radialGradient
+       r="86.70845"
+       fy="35.736916"
+       fx="33.966679"
+       cy="35.736916"
+       cx="33.966679"
+       gradientTransform="scale(0.960493,1.041132)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient15658"
+       xlink:href="#linearGradient259"
+       inkscape:collect="always" />
+    <radialGradient
+       r="37.751713"
+       fy="3.7561285"
+       fx="8.824419"
+       cy="3.7561285"
+       cx="8.824419"
+       gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient15656"
+       xlink:href="#linearGradient269"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient259">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop260" />
+      <stop
+         style="stop-color:#bbbbbb;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop261" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient269">
+      <stop
+         style="stop-color:#a3a3a3;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop270" />
+      <stop
+         style="stop-color:#8a8a8a;stop-opacity:1;"
+         offset="1"
+         id="stop271" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient15662">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop15664" />
+      <stop
+         style="stop-color:#f8f8f8;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop15666" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4542"
+       inkscape:collect="always">
+      <stop
+         id="stop4544"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop4546"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       y2="38.070381"
+       x2="34.170048"
+       y1="36.921333"
+       x1="33.396004"
+       gradientTransform="matrix(-3.277938e-2,-0.999463,0.999463,-3.277938e-2,-0.709646,45.06274)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient8166"
+       xlink:href="#linearGradient2251"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient2251"
+       inkscape:collect="always">
+      <stop
+         id="stop2253"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2255"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4790"
+       inkscape:collect="always">
+      <stop
+         id="stop4792"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop4794"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2378">
+      <stop
+         id="stop2380"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#fefede;stop-opacity:0.91836733;"
+         offset="0.25"
+         id="stop4146" />
+      <stop
+         style="stop-color:#f5f328;stop-opacity:1;"
+         offset="0.5"
+         id="stop2386" />
+      <stop
+         id="stop2382"
+         offset="1"
+         style="stop-color:#f5f32d;stop-opacity:0.12234043;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4790"
+       id="radialGradient6219"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.744653,0,0,1.283833,-26.58256,-3.478359)"
+       cx="37.030354"
+       cy="12.98915"
+       fx="37.030354"
+       fy="12.98915"
+       r="4.2929163" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient259"
+       id="radialGradient6221"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.148355,1.009137e-2,-1.104438e-2,0.162365,25.06011,12.81706)"
+       cx="30.653816"
+       cy="14.9373"
+       fx="30.653816"
+       fy="14.9373"
+       r="86.70845" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient269"
+       id="radialGradient6223"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.331735,0,0,0.353831,20.10526,9.5823)"
+       cx="31.863327"
+       cy="2.3667307"
+       fx="31.863327"
+       fy="2.3667307"
+       r="37.751713" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2251"
+       id="linearGradient6225"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-3.277938e-2,-0.999463,0.999463,-3.277938e-2,-0.709646,45.06274)"
+       x1="33.396004"
+       y1="36.921333"
+       x2="34.170048"
+       y2="38.070381" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2378"
+       id="radialGradient6227"
+       gradientUnits="userSpaceOnUse"
+       cx="38.658855"
+       cy="9.3411446"
+       fx="38.658855"
+       fy="9.3411446"
+       r="8.341651" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2251"
+       id="linearGradient6232"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-3.277938e-2,-0.999463,0.999463,-3.277938e-2,63.914603,51.467346)"
+       x1="33.396004"
+       y1="36.921333"
+       x2="34.170048"
+       y2="38.070381" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient259"
+       id="radialGradient6235"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.148355,1.009137e-2,-1.104438e-2,0.162365,89.684359,19.221666)"
+       cx="30.653816"
+       cy="14.9373"
+       fx="30.653816"
+       fy="14.9373"
+       r="86.70845" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient269"
+       id="radialGradient6237"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.331735,0,0,0.353831,84.729509,15.986906)"
+       cx="31.863327"
+       cy="2.3667307"
+       fx="31.863327"
+       fy="2.3667307"
+       r="37.751713" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4790"
+       id="radialGradient6240"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.744653,0,0,1.283833,38.041689,2.9262474)"
+       cx="37.030354"
+       cy="12.98915"
+       fx="37.030354"
+       fy="12.98915"
+       r="4.2929163" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2378"
+       id="radialGradient6242"
+       gradientUnits="userSpaceOnUse"
+       cx="38.658855"
+       cy="9.3411446"
+       fx="38.658855"
+       fy="9.3411446"
+       r="8.341651" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2378"
+       id="radialGradient6248"
+       gradientUnits="userSpaceOnUse"
+       cx="38.658855"
+       cy="9.3411446"
+       fx="38.658855"
+       fy="9.3411446"
+       r="8.341651" />
+    <inkscape:perspective
+       id="perspective2922"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2378-3"
+       id="radialGradient6248-0"
+       gradientUnits="userSpaceOnUse"
+       cx="38.658855"
+       cy="9.3411446"
+       fx="38.658855"
+       fy="9.3411446"
+       r="8.341651" />
+    <linearGradient
+       id="linearGradient2378-3">
+      <stop
+         id="stop2380-7"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#fefede;stop-opacity:0.91836733;"
+         offset="0.25"
+         id="stop4146-8" />
+      <stop
+         style="stop-color:#f5f328;stop-opacity:1;"
+         offset="0.5"
+         id="stop2386-8" />
+      <stop
+         id="stop2382-6"
+         offset="1"
+         style="stop-color:#f5f32d;stop-opacity:0.12234043;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6380-4"
+       id="radialGradient6386-0"
+       cx="17.48214"
+       cy="8.3041525"
+       fx="17.48214"
+       fy="8.3041525"
+       r="21"
+       gradientTransform="matrix(-2.4847229,0,0,1.1198902,59.340411,12.760324)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6380-4">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6382-6" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6384-7" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6288-0"
+       id="radialGradient8344-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.0249844,0,0,2.0992192,-9.3693601,0.8779019)"
+       cx="11.03125"
+       cy="11.49707"
+       fx="11.03125"
+       fy="11.49707"
+       r="10.96875" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6288-0">
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:1"
+         offset="0"
+         id="stop6290-9" />
+      <stop
+         style="stop-color:#729fcf;stop-opacity:1"
+         offset="1"
+         id="stop6292-7" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5354-9"
+       id="linearGradient8346-5"
+       gradientUnits="userSpaceOnUse"
+       x1="18.119612"
+       y1="36.509514"
+       x2="18.119612"
+       y2="40.376373"
+       gradientTransform="matrix(0.9545455,0,0,1,1.0909091,0)" />
+    <linearGradient
+       id="linearGradient5354-9">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop5356-7" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop5358-8" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8358-3"
+       id="radialGradient8401-5"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.25,-4,-84.375)"
+       cx="1"
+       cy="37.5"
+       fx="1"
+       fy="37.5"
+       r="2" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient8358-3">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop8360-3" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop8362-8" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8368-7"
+       id="linearGradient8403-3"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-1,0)"
+       x1="9"
+       y1="40"
+       x2="9"
+       y2="35" />
+    <linearGradient
+       id="linearGradient8368-7">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop8370-9" />
+      <stop
+         id="stop8376-3"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop8372-7" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8358-3"
+       id="radialGradient8405-8"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.25,44,-9.375)"
+       cx="1"
+       cy="37.5"
+       fx="1"
+       fy="37.5"
+       r="2" />
+    <radialGradient
+       r="2"
+       fy="37.5"
+       fx="1"
+       cy="37.5"
+       cx="1"
+       gradientTransform="matrix(1,0,0,1.25,44,-9.375)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2978"
+       xlink:href="#linearGradient8358-3"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6288"
+       id="radialGradient3109"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.0249844,0,0,2.0992192,-9.3693601,0.8779019)"
+       cx="11.03125"
+       cy="11.49707"
+       fx="11.03125"
+       fy="11.49707"
+       r="10.96875" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5354"
+       id="linearGradient3111"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9545455,0,0,1,1.0909091,0)"
+       x1="18.119612"
+       y1="36.509514"
+       x2="18.119612"
+       y2="40.376373" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5354"
+       id="linearGradient3115"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9545455,0,0,1,0.0909091,0)"
+       x1="18.119612"
+       y1="36.509514"
+       x2="18.119612"
+       y2="40.376373" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6288"
+       id="radialGradient3124"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.0249844,0,0,2.0992192,-10.36936,0.8779019)"
+       cx="11.03125"
+       cy="11.49707"
+       fx="11.03125"
+       fy="11.49707"
+       r="10.96875" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="29.977494"
+     inkscape:cy="14.87383"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     width="48px"
+     height="48px"
+     inkscape:showpageshadow="false"
+     showgrid="false"
+     inkscape:window-width="1024"
+     inkscape:window-height="697"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     showborder="true"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid6113"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+    <inkscape:grid
+       id="GridFromPre046Settings"
+       type="xygrid"
+       originx="0px"
+       originy="0px"
+       spacingx="0.5px"
+       spacingy="0.5px"
+       color="#0000ff"
+       empcolor="#0000ff"
+       opacity="0.2"
+       empopacity="0.4"
+       empspacing="2"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Lapo Calamandrei</dc:title>
+          </cc:Agent>
+        </dc:creator>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Reproduction" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Distribution" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Notice" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/ShareAlike" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/SourceCode" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Livello 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <g
+       id="g8396"
+       style="opacity:0.3"
+       transform="matrix(1.0217391,0,0,1.1,-1.5217391,-1)">
+      <rect
+         style="opacity:1;fill:url(#radialGradient8401);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.7;stroke-opacity:1"
+         id="rect8348"
+         width="2"
+         height="5"
+         x="-3"
+         y="-40"
+         transform="scale(-1,-1)" />
+      <rect
+         style="opacity:1;fill:url(#linearGradient8403);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.7;stroke-opacity:1"
+         id="rect8366"
+         width="42"
+         height="5"
+         x="3"
+         y="35" />
+      <rect
+         style="opacity:1;fill:url(#radialGradient8405);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.7;stroke-opacity:1"
+         id="rect8390"
+         width="2"
+         height="5"
+         x="45"
+         y="35" />
+    </g>
+    <rect
+       style="fill:url(#radialGradient3124);fill-opacity:1;stroke:#3465a4;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.7"
+       id="rect5317"
+       width="42.975185"
+       height="33.001831"
+       x="1.5124066"
+       y="7.4990835"
+       rx="2.0508666"
+       ry="2.0508666" />
+    <rect
+       style="opacity:0.45;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.7"
+       id="rect6304"
+       width="41"
+       height="31"
+       x="2.5000012"
+       y="8.5"
+       rx="1.0764557"
+       ry="1.0764557" />
+    <g
+       id="g8378" />
+    <g
+       id="g8333-0"
+       transform="matrix(0.75591132,0,0,0.75591132,6.6718679,6.735829)">
+      <rect
+         ry="2.0508666"
+         rx="2.0508666"
+         y="7.4990835"
+         x="2.5124066"
+         height="33.001831"
+         width="42.975185"
+         id="rect5317-9"
+         style="fill:url(#radialGradient8344-6);fill-opacity:1;stroke:#3465a4;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.7" />
+      <rect
+         ry="1.0764557"
+         rx="1.0764557"
+         y="8.5"
+         x="3.5000012"
+         height="31"
+         width="41"
+         id="rect6304-8"
+         style="opacity:0.45;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.7" />
+      <rect
+         ry="1.0307201"
+         rx="1.0307201"
+         y="22.5"
+         x="13.5"
+         height="6"
+         width="20.999998"
+         id="rect6306-8"
+         style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.7" />
+      <path
+         transform="matrix(1.1505466,0,0,1.1128235,7.7796609,12.403126)"
+         d="m 8.883029,11.769049 c 0,0.744437 -0.583699,1.347922 -1.3037281,1.347922 -0.7200292,0 -1.3037281,-0.603485 -1.3037281,-1.347922 0,-0.744437 0.5836989,-1.347923 1.3037281,-1.347923 0.7200291,0 1.3037281,0.603486 1.3037281,1.347923 z"
+         sodipodi:ry="1.3479223"
+         sodipodi:rx="1.3037281"
+         sodipodi:cy="11.769049"
+         sodipodi:cx="7.5793009"
+         id="path6308-5"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         sodipodi:type="arc" />
+      <path
+         transform="matrix(1.1505466,0,0,1.1128235,11.779661,12.403126)"
+         d="m 8.883029,11.769049 c 0,0.744437 -0.583699,1.347922 -1.3037281,1.347922 -0.7200292,0 -1.3037281,-0.603485 -1.3037281,-1.347922 0,-0.744437 0.5836989,-1.347923 1.3037281,-1.347923 0.7200291,0 1.3037281,0.603486 1.3037281,1.347923 z"
+         sodipodi:ry="1.3479223"
+         sodipodi:rx="1.3037281"
+         sodipodi:cy="11.769049"
+         sodipodi:cx="7.5793009"
+         id="path5346-8"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         sodipodi:type="arc" />
+      <path
+         transform="matrix(1.1505466,0,0,1.1128235,15.779661,12.403126)"
+         d="m 8.883029,11.769049 c 0,0.744437 -0.583699,1.347922 -1.3037281,1.347922 -0.7200292,0 -1.3037281,-0.603485 -1.3037281,-1.347922 0,-0.744437 0.5836989,-1.347923 1.3037281,-1.347923 0.7200291,0 1.3037281,0.603486 1.3037281,1.347923 z"
+         sodipodi:ry="1.3479223"
+         sodipodi:rx="1.3037281"
+         sodipodi:cy="11.769049"
+         sodipodi:cx="7.5793009"
+         id="path5348-4"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         sodipodi:type="arc" />
+      <path
+         transform="matrix(1.1505466,0,0,1.1128235,19.779661,12.403126)"
+         d="m 8.883029,11.769049 c 0,0.744437 -0.583699,1.347922 -1.3037281,1.347922 -0.7200292,0 -1.3037281,-0.603485 -1.3037281,-1.347922 0,-0.744437 0.5836989,-1.347923 1.3037281,-1.347923 0.7200291,0 1.3037281,0.603486 1.3037281,1.347923 z"
+         sodipodi:ry="1.3479223"
+         sodipodi:rx="1.3037281"
+         sodipodi:cy="11.769049"
+         sodipodi:cx="7.5793009"
+         id="path5350-3"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         sodipodi:type="arc" />
+      <rect
+         ry="0"
+         rx="0"
+         y="36"
+         x="3"
+         height="5"
+         width="42"
+         id="rect5352-7"
+         style="opacity:0.6561086;fill:url(#linearGradient8346-5);fill-opacity:1;stroke:none" />
+      <rect
+         ry="0.5"
+         rx="0.5"
+         y="20"
+         x="13"
+         height="1"
+         width="12"
+         id="rect6331-1"
+         style="opacity:0.06896554;fill:#000000;fill-opacity:1;stroke:none" />
+    </g>
+    <path
+       style="opacity:0.5;fill:url(#radialGradient6386-0);fill-opacity:1;stroke:none"
+       d="m 39.506767,12.78312 c 0.659117,0 1.181111,0.521993 1.181111,1.181111 l 0,5.692957 C 31.095172,25.847813 20.10517,28.815317 8.9396019,26.058812 l 0,-12.094581 c 0,-0.659118 0.521994,-1.181111 1.1811121,-1.181111 l 29.386053,0 z"
+       id="path6374-3" />
+    <g
+       id="g6244-8"
+       transform="matrix(0.75591132,0,0,0.75591132,-55.253976,3.650357)">
+      <path
+         sodipodi:type="arc"
+         style="fill:url(#radialGradient6248-0);fill-opacity:1;fill-rule:evenodd;stroke:none"
+         id="path2388-0"
+         sodipodi:cx="38.658855"
+         sodipodi:cy="9.3411446"
+         sodipodi:rx="8.341651"
+         sodipodi:ry="8.341651"
+         d="m 47.000506,9.3411446 c 0,4.6069664 -3.734684,8.3416514 -8.341651,8.3416514 -4.606966,0 -8.341651,-3.734685 -8.341651,-8.3416514 0,-4.6069667 3.734685,-8.341651 8.341651,-8.341651 4.606967,0 8.341651,3.7346843 8.341651,8.341651 z"
+         transform="matrix(1.14985,0,0,1.14985,77.028921,6.8955014)" />
+      <path
+         sodipodi:type="star"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible"
+         id="path1345-9"
+         sodipodi:sides="5"
+         sodipodi:cx="36.9375"
+         sodipodi:cy="11.125"
+         sodipodi:r1="8.755579"
+         sodipodi:r2="5.0676599"
+         sodipodi:arg1="0.52359878"
+         sodipodi:arg2="1.1519173"
+         inkscape:flatsided="false"
+         inkscape:rounded="0.18352206"
+         inkscape:randomized="0"
+         d="m 44.520054,15.50279 c -0.507171,0.878446 -4.594703,-0.160823 -5.521351,0.251748 -0.926648,0.41257 -2.889414,4.145604 -3.88159,3.934711 -0.992177,-0.210894 -1.266891,-4.419519 -1.945618,-5.173323 -0.678728,-0.753803 -4.835582,-1.466933 -4.94161,-2.475719 -0.106028,-1.008786 3.811722,-2.5705906 4.318893,-3.4490369 0.507171,-0.8784463 -0.09914,-5.0522193 0.827507,-5.4647895 0.926648,-0.4125703 3.622664,2.8308064 4.614841,3.0417001 0.992176,0.2108936 4.77431,-1.6555099 5.453037,-0.9017066 0.678728,0.7538034 -1.572792,4.3201254 -1.466764,5.3289109 0.106027,1.008786 3.049826,4.029058 2.542655,4.907505 z"
+         transform="matrix(0.674116,0.299577,-0.299577,0.674116,100.08838,-0.7878626)" />
+    </g>
+  </g>
+</svg>

Modified: desktop/experimental/gdm3/debian/gdm3.install
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/experimental/gdm3/debian/gdm3.install?rev=23502&op=diff
==============================================================================
--- desktop/experimental/gdm3/debian/gdm3.install [utf-8] (original)
+++ desktop/experimental/gdm3/debian/gdm3.install [utf-8] Thu Apr  1 11:28:07 2010
@@ -4,5 +4,7 @@
 debian/greeter.gconf-defaults		etc/gdm3
 debian/gdmflexiserver.desktop		usr/share/gdm/applications
 debian/gdmflexiserver.svg		usr/share/icons/hicolor/scalable/apps
+debian/gdmflexiserver-xnest.desktop     usr/share/gdm/applications
+debian/gdm-xnest.svg                    usr/share/icons/hicolor/scalable/apps
 debian/default.desktop			usr/share/gdm/BuiltInSessions
 data/session-setup.entries		usr/share/gdm/greeter-config

Added: desktop/experimental/gdm3/debian/gdmflexiserver-xnest.desktop
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/experimental/gdm3/debian/gdmflexiserver-xnest.desktop?rev=23502&op=file
==============================================================================
--- desktop/experimental/gdm3/debian/gdmflexiserver-xnest.desktop (added)
+++ desktop/experimental/gdm3/debian/gdmflexiserver-xnest.desktop [utf-8] Thu Apr  1 11:28:07 2010
@@ -1,0 +1,166 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=New Login in a Window
+Name[ar]=ولوج جديد في نافذة
+Name[bg]=Ново влизане в прозорец
+Name[bn]=উইন্ডোর মধ্যে নতুন লগ-ইন
+Name[bn_IN]=উইন্ডোর মধ্যে নতুন লগ-ইন
+Name[ca]=Nova entrada a una finestra
+Name[cs]=Nové přihlášení v okně
+Name[da]=Nyt logind i et vindue
+Name[de]=In einem Fenster neu anmelden
+Name[dz]=སྒོ་སྒྲིག་ཅིག་ནང་ ནང་བསྐྱོད་གསརཔ
+Name[el]=Νέα είσοδος σε παράθυρο
+Name[en_CA]=New Login in a Window
+Name[en_GB]=New Login in a Window
+Name[es]=Nuevo acceso en una ventana
+Name[et]=Uus sisselogimine aknas
+Name[eu]=Saio berria leiho batean
+Name[fi]=Uusi kirjautuminen ikkunassa
+Name[fr]=Nouvelle connexion dans une fenêtre
+Name[ga]=Logáil Isteach Nua i bhFuinneog
+Name[gl]=Novo inicio de sesión nunha ventá
+Name[gu]=વિન્ડોમાં નવો પ્રવેશ
+Name[hi]=विंडो में नया लॉगइन
+Name[hu]=Új bejelentkezés egy ablakban
+Name[it]=Nuovo accesso in una finestra
+Name[ja]=ウィンドウから新しいログイン
+Name[kn]=ಒಂದು ವಿಂಡೋದಲ್ಲಿ ಹೊಸ ಪ್ರವೇಶ
+Name[ko]=창에서 새로 로그인
+Name[lt]=Naujas prisijungimas lange
+Name[mk]=Ново најавување во прозорец
+Name[ml]=ജാലകത്തില്‍ ഉളള പുതിയ ലോഗിന്‍
+Name[nb]=Ny innlogging i et vindu
+Name[ne]=सञ्झ्यालमा नयाँ लगइन
+Name[nl]=Aanmelden in een venster
+Name[nn]=Ny innlogging i eit vindauge
+Name[or]=ଗୋଟିଏ ୱିଣ୍ଡୋରେ ନୂତନ ଲଗଇନ
+Name[pa]=ਇੱਕ ਵਿੰਡੋ ਵਿੱਚ ਨਵਾਂ ਲਾਗਇਨ
+Name[pl]=Nowe logowanie w oknie
+Name[pt]=Nova Sessão numa Janela
+Name[pt_BR]=Nova Sessão em uma Janela
+Name[ro]=Autentificare nouă într-o fereastră
+Name[ru]=Новый сеанс во встроенном окне
+Name[sk]=Nové prihlásenie v okne
+Name[sl]=Nova prijava v oknu
+Name[sq]=Login i ri në një dritare
+Name[sv]=Ny inloggning i ett fönster
+Name[ta]=சாளரத்தில் புதிய நுழைவு
+Name[te]=ఒక గవాక్షం లో కొత్త ప్రవేశద్వారం
+Name[th]=การเข้าระบบใหม่ในหน้าต่าง
+Name[tr]=İçiçe Perncerede Yeni Giriş
+Name[uk]=Новий сеанс у вікні
+Name[vi]=Đăng nhập mới trong cửa sổ
+Name[zh_CN]=窗口中的新登录
+GenericName=New Login in a Window
+GenericName[ar]=ولوج جديد في نافذة
+GenericName[bg]=Ново влизане в прозорец
+GenericName[bn]=উইন্ডোর মধ্যে নতুন লগ-ইন
+GenericName[bn_IN]=উইন্ডোর মধ্যে নতুন লগ-ইন
+GenericName[ca]=Nova entrada a una finestra
+GenericName[cs]=Nové přihlášení v okně
+GenericName[da]=Nyt logind i et vindue
+GenericName[de]=In einem Fenster neu anmelden
+GenericName[dz]=སྒོ་སྒྲིག་ཅིག་ནང་ ནང་བསྐྱོད་གསརཔ
+GenericName[el]=Νέα είσοδος σε παράθυρο
+GenericName[en_CA]=New Login in a Window
+GenericName[en_GB]=New Login in a Window
+GenericName[es]=Nuevo acceso en una ventana
+GenericName[et]=Uus sisselogimine aknas
+GenericName[eu]=Saio berria leiho batean
+GenericName[fi]=Uusi kirjautuminen ikkunassa
+GenericName[fr]=Nouvelle connexion dans une fenêtre
+GenericName[ga]=Logáil Isteach Nua i bhFuinneog
+GenericName[gl]=Novo inicio de sesión nunha ventá
+GenericName[gu]=વિન્ડોમાં નવો પ્રવેશ
+GenericName[hi]=विंडो में नया लॉगइन
+GenericName[hu]=Új bejelentkezés egy ablakban
+GenericName[it]=Nuovo accesso in una finestra
+GenericName[ja]=ウィンドウから新しいログイン
+GenericName[kn]=ಒಂದು ವಿಂಡೋದಲ್ಲಿ ಹೊಸ ಪ್ರವೇಶ
+GenericName[ko]=창에서 새로 로그인
+GenericName[lt]=Naujas prisijungimas lange
+GenericName[mk]=Ново најавување во прозорец
+GenericName[ml]=ജാലകത്തില്‍ ഉളള പുതിയ ലോഗിന്‍
+GenericName[nb]=Ny innlogging i et vindu
+GenericName[ne]=सञ्झ्यालमा नयाँ लगइन
+GenericName[nl]=Aanmelden in een venster
+GenericName[nn]=Ny innlogging i eit vindauge
+GenericName[or]=ଗୋଟିଏ ୱିଣ୍ଡୋରେ ନୂତନ ଲଗଇନ
+GenericName[pa]=ਇੱਕ ਵਿੰਡੋ ਵਿੱਚ ਨਵਾਂ ਲਾਗਇਨ
+GenericName[pl]=Nowe logowanie w oknie
+GenericName[pt]=Nova Sessão numa Janela
+GenericName[pt_BR]=Nova Sessão em uma Janela
+GenericName[ro]=Autentificare nouă într-o fereastră
+GenericName[ru]=Новый сеанс во встроенном окне
+GenericName[sk]=Nové prihlásenie v okne
+GenericName[sl]=Nova prijava v oknu
+GenericName[sq]=Login i ri në një dritare
+GenericName[sv]=Ny inloggning i ett fönster
+GenericName[ta]=சாளரத்தில் புதிய நுழைவு
+GenericName[te]=ఒక గవాక్షం లో కొత్త ప్రవేశద్వారం
+GenericName[th]=การเข้าระบบใหม่ในหน้าต่าง
+GenericName[tr]=İçiçe Perncerede Yeni Giriş
+GenericName[uk]=Новий сеанс у вікні
+GenericName[vi]=Đăng nhập mới trong cửa sổ
+GenericName[zh_CN]=窗口中的新登录
+Comment=Login as another user in a window
+Comment[ar]=لُجْ كمستخدم آخر في نافذة
+Comment[bg]=Влизане в системата като друг потребител в прозорец
+Comment[bn]=লগ-আউট না করে পৃথক ব্যবহারকারীরূপে উইন্ডোর মধ্যে লগ-ইন করুন
+Comment[bn_IN]=লগ-আউট না করে পৃথক ব্যবহারকারীরূপে উইন্ডোর মধ্যে লগ-ইন করুন
+Comment[ca]=Entreu com un usuari diferent dins d'una finestra imbricada
+Comment[cs]=Přihlásit se jako jiný uživatel v okně
+Comment[da]=Log ind som en anden bruger i et vindue
+Comment[de]=Als anderer Benutzer in einem Fenster anmelden
+Comment[dz]=སྒོ་སྒྲིག་ གཞན་ཅིག་གི་ནང་ན་ ལག་ལེན་པ་ གཞན་བཟུམ་སྦེ་ ནང་བསྐྱོད་འབད
+Comment[el]=Είσοδος ως διαφορετικός χρήστης μέσα σε ένα παράθυρο
+Comment[en_CA]=Log in as another user in a window
+Comment[en_GB]=Log in as another user in a window
+Comment[es]=Acceda como un usuario distinto dentro de una ventana
+Comment[et]=Teise kasutaja alt aknas sisselogimine
+Comment[eu]=Sartu beste erabiltzaile baten moduan habiaratutako leiho batean
+Comment[fi]=Kirjaudu muuna käyttäjänä ikkunassa
+Comment[fr]=Se connecter sous une autre identité à l'intérieur d'une fenêtre
+Comment[gl]=Iniciar a sesión como outro usuario nunha ventá
+Comment[gu]=વિન્ડોમાં બીજા વપરાશકર્તા તરીકે પ્રવેશ કરો
+Comment[hi]=विंडो के भीतर अन्य उपयोक्ता के रूप में लॉगइन करें
+Comment[hu]=Bejelentkezés más felhasználóként egy ablakban
+Comment[it]=Accede come un altro utente in una finestra
+Comment[ja]=任意のウィンドウから別のユーザでログインします
+Comment[kn]=ಒಂದು ವಿಂಡೋದಲ್ಲಿ ಬೇರೆ ಬಳಕೆದಾರನಾಗಿ ಪ್ರವೇಶಿಸು
+Comment[ko]=창에서 다른 사용자로 로그인
+Comment[lt]=Prisijungti kitu naudojotu lange
+Comment[mk]=Најави се како друг корисник во прозорец
+Comment[ml]=ജാലകത്തില്‍ മറ്റൊരു ഉപയോക്താവായി പ്രവേശിക്കുക
+Comment[nb]=Logg inn som en annen bruker i et vindu
+Comment[ne]=अर्को प्रयोगकर्ताको रूपमा सञ्झ्याल भित्र लगइन गर्नुहोस्
+Comment[nl]=Als een andere gebruiker aanmelden in een venster
+Comment[nn]=Logg inn som ein annan brukar i eit vindauge
+Comment[or]=ଗୋଟିଏ ୱିଣ୍ଡୋରେ ଅନ୍ଯ ଗୋଟିଏ ଚାଳକ ଭାବରେ ଲଗଇନ କରନ୍ତୁ
+Comment[pa]=ਇੱਕ ਵਿੰਡੋ ਵਿੱਚ ਹੋਰ ਯੂਜ਼ਰ ਵਾਂਗ ਲਾਗਇਨ ਕਰੋ
+Comment[pl]=Logowanie jako inny użytkownik w oknie
+Comment[pt]=Iniciar sessão como outro utilizador dentro de uma janela
+Comment[pt_BR]=Iniciar uma sessão como outro usuário dentro de uma janela
+Comment[ro]=Autentificare cu un alt cont într-o fereastră
+Comment[ru]=Войти в окне под другим пользователем
+Comment[sk]=Prihlásiť sa ako iný používateľ v okne
+Comment[sl]=Prijavi se kot drug uporabnik znotraj okna
+Comment[sq]=Hyrje si një përdorues tjetër në një dritare
+Comment[sv]=Logga in som en annan användare i ett fönster
+Comment[ta]=சாளரத்தில் வேறொரு பயனராக நுழை
+Comment[te]=ఒక గవాక్షం లో మరియొక వినియోగదారు లాగా ప్రవేశద్వారం
+Comment[th]=เข้าระบบในนามผู้ใช้อื่นในหน้าต่าง
+Comment[tr]=Diğer bir pencerede farklı kullanıcı ile giriş
+Comment[uk]=Вхід як інший користувач у вікні
+Comment[vi]=Đăng nhập vào cửa sổ với tên người dùng khác
+Comment[zh_CN]=在窗口中以其他用户登录
+TryExec=/usr/share/gdm/gdmXnestWrapper
+Exec=gdmflexiserver --xnest
+Icon=gdm-xnest
+Terminal=false
+Type=Application
+Categories=GNOME;GTK;System;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gdm
+X-GNOME-Bugzilla-Component=general

Added: desktop/experimental/gdm3/debian/patches/11_xephyr_nested.patch
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/experimental/gdm3/debian/patches/11_xephyr_nested.patch?rev=23502&op=file
==============================================================================
--- desktop/experimental/gdm3/debian/patches/11_xephyr_nested.patch (added)
+++ desktop/experimental/gdm3/debian/patches/11_xephyr_nested.patch [utf-8] Thu Apr  1 11:28:07 2010
@@ -1,0 +1,1391 @@
+Debian: add CreateNestedDisplay(parent_display_id) dbus method.
+--- a/daemon/gdm-display.c
++++ b/daemon/gdm-display.c
+@@ -52,6 +52,7 @@
+ {
+         char                 *id;
+         char                 *seat_id;
++        GdmDisplay           *parent_display;
+ 
+         char                 *remote_hostname;
+         int                   x11_display_number;
+@@ -66,6 +67,7 @@
+         GdmDisplayAccessFile *access_file;
+ 
+         gboolean              is_local;
++        gboolean              is_nested;
+         guint                 finish_idle_id;
+ 
+         GdmSlaveProxy        *slave_proxy;
+@@ -78,12 +80,14 @@
+         PROP_ID,
+         PROP_STATUS,
+         PROP_SEAT_ID,
++        PROP_PARENT_DISPLAY,
+         PROP_REMOTE_HOSTNAME,
+         PROP_X11_DISPLAY_NUMBER,
+         PROP_X11_DISPLAY_NAME,
+         PROP_X11_COOKIE,
+         PROP_X11_AUTHORITY_FILE,
+         PROP_IS_LOCAL,
++        PROP_IS_NESTED,
+         PROP_SLAVE_COMMAND,
+ };
+ 
+@@ -275,6 +279,33 @@
+         return ret;
+ }
+ 
++gboolean
++gdm_display_get_user_authorization (GdmDisplay *display,
++                                    char      **username,
++                                    char      **filename,
++                                    GError    **error)
++{
++        gboolean ret;
++
++        g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
++
++        ret = FALSE;
++
++        if (display->priv->user_access_file != NULL) {
++                if (username)
++                        g_object_get (display->priv->user_access_file,
++                                      "username", username,
++                                      NULL);
++                if (filename)
++                        g_object_get (display->priv->user_access_file,
++                                      "path", filename,
++                                      NULL);
++                ret = TRUE;
++        }
++
++        return ret;
++}
++
+ static gboolean
+ gdm_display_real_set_slave_bus_name (GdmDisplay *display,
+                                      const char *name,
+@@ -742,6 +773,24 @@
+ }
+ 
+ gboolean
++gdm_display_get_parent_id (GdmDisplay         *display,
++                           char              **parent_id,
++                           GError            **error)
++{
++        g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
++
++        gboolean ret = TRUE;
++        if (parent_id != NULL) {
++                ret = FALSE;
++                if (display->priv->parent_display != NULL) {
++                        ret = gdm_display_get_id (display->priv->parent_display, parent_id, error);
++                }
++        }
++
++        return ret;
++}
++
++gboolean
+ gdm_display_get_x11_display_name (GdmDisplay   *display,
+                                   char        **x11_display,
+                                   GError      **error)
+@@ -769,6 +818,20 @@
+         return TRUE;
+ }
+ 
++gboolean
++gdm_display_is_nested (GdmDisplay *display,
++                       gboolean   *nested,
++                       GError    **error)
++{
++        g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
++
++        if (nested != NULL) {
++                *nested = display->priv->is_nested;
++        }
++
++        return TRUE;
++}
++
+ static void
+ _gdm_display_set_id (GdmDisplay     *display,
+                      const char     *id)
+@@ -786,6 +849,18 @@
+ }
+ 
+ static void
++_gdm_display_set_parent_display (GdmDisplay     *display,
++                                 GdmDisplay     *parent_display)
++{
++        if (display->priv->parent_display != NULL)
++                g_object_remove_weak_pointer (display, &display->priv->parent_display);
++
++        display->priv->parent_display = parent_display;
++        if (parent_display != NULL)
++                g_object_add_weak_pointer (display, &display->priv->parent_display);
++}
++
++static void
+ _gdm_display_set_remote_hostname (GdmDisplay     *display,
+                                   const char     *hostname)
+ {
+@@ -824,6 +899,13 @@
+ }
+ 
+ static void
++_gdm_display_set_is_nested (GdmDisplay     *display,
++                            gboolean        is_nested)
++{
++        display->priv->is_nested = is_nested;
++}
++
++static void
+ _gdm_display_set_slave_command (GdmDisplay     *display,
+                                 const char     *command)
+ {
+@@ -845,6 +927,9 @@
+         case PROP_ID:
+                 _gdm_display_set_id (self, g_value_get_string (value));
+                 break;
++        case PROP_PARENT_DISPLAY:
++                _gdm_display_set_parent_display (self, g_value_get_object (value));
++                break;
+         case PROP_STATUS:
+                 _gdm_display_set_status (self, g_value_get_int (value));
+                 break;
+@@ -866,6 +951,9 @@
+         case PROP_IS_LOCAL:
+                 _gdm_display_set_is_local (self, g_value_get_boolean (value));
+                 break;
++        case PROP_IS_NESTED:
++                _gdm_display_set_is_nested (self, g_value_get_boolean (value));
++                break;
+         case PROP_SLAVE_COMMAND:
+                 _gdm_display_set_slave_command (self, g_value_get_string (value));
+                 break;
+@@ -889,6 +977,9 @@
+         case PROP_ID:
+                 g_value_set_string (value, self->priv->id);
+                 break;
++        case PROP_PARENT_DISPLAY:
++                g_value_set_object (value, self->priv->parent_display);
++                break;
+         case PROP_STATUS:
+                 g_value_set_int (value, self->priv->status);
+                 break;
+@@ -914,6 +1005,9 @@
+         case PROP_IS_LOCAL:
+                 g_value_set_boolean (value, self->priv->is_local);
+                 break;
++        case PROP_IS_NESTED:
++                g_value_set_boolean (value, self->priv->is_nested);
++                break;
+         case PROP_SLAVE_COMMAND:
+                 g_value_set_string (value, self->priv->slave_command);
+                 break;
+@@ -979,6 +1073,11 @@
+ 
+         g_debug ("GdmDisplay: Disposing display");
+ 
++        if (display->priv->parent_display != NULL) {
++                g_object_remove_weak_pointer (display->priv->parent_display, &display->priv->parent_display);
++                display->priv->parent_display = NULL;
++        }
++
+         if (display->priv->finish_idle_id > 0) {
+                 g_source_remove (display->priv->finish_idle_id);
+                 display->priv->finish_idle_id = 0;
+@@ -1032,6 +1131,15 @@
+                                                               "id",
+                                                               NULL,
+                                                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
++
++        g_object_class_install_property (object_class,
++                                         PROP_PARENT_DISPLAY,
++                                         g_param_spec_object ("parent-display",
++                                                              "parent display",
++                                                              "parent display",
++                                                              GDM_TYPE_DISPLAY,
++                                                              G_PARAM_READWRITE));
++
+         g_object_class_install_property (object_class,
+                                          PROP_REMOTE_HOSTNAME,
+                                          g_param_spec_string ("remote-hostname",
+@@ -1086,6 +1194,14 @@
+                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ 
+         g_object_class_install_property (object_class,
++                                         PROP_IS_NESTED,
++                                         g_param_spec_boolean ("is-nested",
++                                                               "display is nested",
++                                                               "display is nested",
++                                                               FALSE,
++                                                               G_PARAM_READWRITE));
++
++        g_object_class_install_property (object_class,
+                                          PROP_SLAVE_COMMAND,
+                                          g_param_spec_string ("slave-command",
+                                                               "slave command",
+@@ -1137,6 +1253,10 @@
+         g_free (display->priv->x11_cookie);
+         g_free (display->priv->slave_command);
+ 
++        if (display->priv->parent_display != NULL) {
++                g_object_remove_weak_pointer (display->priv->parent_display, &display->priv->parent_display);
++        }
++
+         if (display->priv->access_file != NULL) {
+                 g_object_unref (display->priv->access_file);
+         }
+--- a/daemon/gdm-display.h
++++ b/daemon/gdm-display.h
+@@ -102,6 +102,9 @@
+ gboolean            gdm_display_get_id                         (GdmDisplay *display,
+                                                                 char      **id,
+                                                                 GError    **error);
++gboolean            gdm_display_get_parent_id                  (GdmDisplay *display,
++                                                                char      **parent_id,
++                                                                GError    **error);
+ gboolean            gdm_display_get_remote_hostname            (GdmDisplay *display,
+                                                                 char      **hostname,
+                                                                 GError    **error);
+@@ -117,6 +120,9 @@
+ gboolean            gdm_display_is_local                       (GdmDisplay *display,
+                                                                 gboolean   *local,
+                                                                 GError    **error);
++gboolean            gdm_display_is_nested                      (GdmDisplay *display,
++                                                                gboolean   *nested,
++                                                                GError    **error);
+ gboolean            gdm_display_get_timed_login_details        (GdmDisplay *display,
+                                                                 gboolean   *enabled,
+                                                                 char      **username,
+@@ -137,6 +143,10 @@
+ gboolean            gdm_display_remove_user_authorization      (GdmDisplay *display,
+                                                                 const char *username,
+                                                                 GError    **error);
++gboolean            gdm_display_get_user_authorization         (GdmDisplay *display,
++                                                                char      **username,
++                                                                char      **filename,
++                                                                GError    **error);
+ gboolean            gdm_display_set_slave_bus_name             (GdmDisplay *display,
+                                                                 const char *name,
+                                                                 GError    **error);
+--- a/daemon/gdm-local-display-factory.c
++++ b/daemon/gdm-local-display-factory.c
+@@ -22,6 +22,8 @@
+ 
+ #include <stdlib.h>
+ #include <stdio.h>
++#include <sys/types.h>
++#include <pwd.h>
+ 
+ #include <glib.h>
+ #include <glib/gi18n.h>
+@@ -274,6 +276,131 @@
+ 
+         return ret;
+ }
++
++static gboolean
++find_display_by_id (const char *id, GdmDisplay *display, gpointer    user_data)
++{
++        return !strcmp (id, (const char*)user_data);
++}
++
++gboolean
++gdm_local_display_factory_create_nested_display (GdmLocalDisplayFactory *factory,
++                                                 const char             *parent_display_id,
++                                                 DBusGMethodInvocation  *context)
++{
++        GdmDisplayStore *store;
++        GError     *error;
++        DBusGProxy *proxy;
++        gboolean    ret;
++        GdmDisplay *parent_display;
++        GdmDisplay *display;
++        char       *parent_username;
++        char       *sender;
++        uid_t      uid;
++        struct passwd *pw;
++        char       *id;
++        guint32     num;
++
++        g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE);
++
++        ret = FALSE;
++        display = NULL;
++        sender = NULL;
++        proxy = NULL;
++        parent_username = NULL;
++        pw = NULL;
++        error = NULL;
++
++        g_debug ("GdmLocalDisplayFactory: Creating nested display parent %s", parent_display_id);
++
++        store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
++        parent_display = gdm_display_store_find (store, find_display_by_id, parent_display_id);
++        if (!parent_display)
++                goto out;
++
++        if (!gdm_display_get_user_authorization (parent_display, &parent_username, NULL, &error))
++                goto out;
++
++        sender = dbus_g_method_get_sender (context);
++        if (!sender) {
++                g_debug ("GdmLocalDisplayFactory: Unable to get sender");
++                goto out;
++        }
++
++        proxy = dbus_g_proxy_new_for_name_owner (factory->priv->connection,
++                                                 "org.freedesktop.DBus",
++                                                 "/",
++                                                 "org.freedesktop.DBus",
++                                                 &error);
++        if (!proxy)
++                goto out;
++
++        if (!dbus_g_proxy_call (proxy,
++                                "GetConnectionUnixUser",
++                                &error,
++                                G_TYPE_STRING, sender,
++                                G_TYPE_INVALID,
++                                G_TYPE_UINT, &uid,
++                                G_TYPE_INVALID)) {
++                g_debug ("GdmLocalDisplayFactory: Unable to get unix user: %s", error->message);
++                goto out;
++        }
++
++        pw = getpwuid (uid);
++        if (pw == NULL) {
++                g_warning ("GdmLocalDisplayFactory: Can't get passwd for uid: %u", uid);
++                goto out;
++        }
++
++        if (!pw->pw_name || strcmp (pw->pw_name, parent_username)) {
++                g_warning ("GdmLocalDisplayFactory: Invalid attempt to create nested display for parent %s user %u", parent_display_id, uid);
++                goto out;
++        }
++
++        num = take_next_display_number (factory);
++
++        g_debug ("GdmLocalDisplayFactory: got display num %u", num);
++
++        display = gdm_transient_display_new (num);
++
++        /* FIXME: don't hardcode seat1? */
++        g_object_set (display,
++                      "seat-id", CK_SEAT1_PATH,
++                      "parent-display", parent_display,
++                      "is-nested", TRUE,
++                      NULL);
++
++        store_display (factory, num, display);
++
++        if (! gdm_display_manage (display)) {
++                display = NULL;
++                goto out;
++        }
++
++        if (! gdm_display_get_id (display, &id, &error)) {
++                display = NULL;
++                goto out;
++        }
++
++        g_debug ("GdmLocalDisplayFactory: Created nested display :%d for user %s", num, parent_username);
++        ret = TRUE;
++ out:
++        /* ref either held by store or not at all */
++        g_object_unref (display);
++        g_object_unref (proxy);
++        g_free (parent_username);
++        g_free (sender);
++
++        if (ret) {
++                dbus_g_method_return (context, id);
++        } else {
++                dbus_g_method_return_error (context, error);
++                if (error)
++                        g_error_free (error);
++        }
++
++        return ret;
++}
+ 
+ static void
+ on_static_display_status_changed (GdmDisplay             *display,
+--- a/daemon/gdm-local-display-factory.h
++++ b/daemon/gdm-local-display-factory.h
+@@ -65,6 +65,10 @@
+                                                                                char                  **id,
+                                                                                GError                **error);
+ 
++gboolean                   gdm_local_display_factory_create_nested_display (GdmLocalDisplayFactory *factory,
++                                                                            const char             *parent_display_id,
++                                                                            DBusGMethodInvocation  *context);
++
+ gboolean                   gdm_local_display_factory_create_product_display   (GdmLocalDisplayFactory *factory,
+                                                                                const char             *parent_display_id,
+                                                                                const char             *relay_address,
+--- a/daemon/gdm-local-display-factory.xml
++++ b/daemon/gdm-local-display-factory.xml
+@@ -9,5 +9,10 @@
+     <method name="CreateTransientDisplay">
+       <arg name="id" direction="out" type="o"/>
+     </method>
++    <method name="CreateNestedDisplay">
++      <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
++      <arg name="parent_display_id" direction="in" type="o"/>
++      <arg name="id" direction="out" type="o"/>
++    </method>
+   </interface>
+ </node>
+--- a/daemon/gdm-simple-slave.c
++++ b/daemon/gdm-simple-slave.c
+@@ -1043,6 +1043,9 @@
+ idle_connect_to_display (GdmSimpleSlave *slave)
+ {
+         gboolean res;
++        gboolean display_is_nested;
++
++        g_object_get (slave, "display-is-nested", &display_is_nested, NULL);
+ 
+         slave->priv->connection_attempts++;
+ 
+@@ -1053,7 +1056,8 @@
+ 
+                 /* FIXME: handle wait-for-go */
+ 
+-                setup_server (slave);
++                if (!display_is_nested)
++                        setup_server (slave);
+ 
+                 delay = 0;
+                 enabled = FALSE;
+@@ -1109,12 +1113,20 @@
+ {
+         char    *display_name;
+         char    *auth_file;
++        char    *parent_display_name;
++        char    *parent_user_auth_file;
++        char    *parent_username;
+         gboolean display_is_local;
++        gboolean display_is_nested;
+ 
+         g_object_get (slave,
+                       "display-is-local", &display_is_local,
++                      "display-is-nested", &display_is_nested,
+                       "display-name", &display_name,
+                       "display-x11-authority-file", &auth_file,
++                      "parent-display-name", &parent_display_name,
++                      "parent-display-user-auth-file", &parent_user_auth_file,
++                      "parent-display-username", &parent_username,
+                       NULL);
+ 
+         /* if this is local display start a server if one doesn't
+@@ -1133,6 +1145,16 @@
+                                       NULL);
+                 }
+ 
++                if (display_is_nested) {
++                        g_object_set (slave->priv->server,
++                                      "is-nested", TRUE,
++                                      "is-parented", TRUE,
++                                      "parent-display-name", parent_display_name,
++                                      "parent-auth-file", parent_user_auth_file,
++                                      "user-name", parent_username,
++                                      NULL);
++                }
++
+                 g_signal_connect (slave->priv->server,
+                                   "exited",
+                                   G_CALLBACK (on_server_exited),
+--- a/daemon/gdm-slave.c
++++ b/daemon/gdm-slave.c
+@@ -78,31 +78,41 @@
+ 
+         /* cached display values */
+         char            *display_id;
++        char            *display_parent_id;
+         char            *display_name;
+         int              display_number;
+         char            *display_hostname;
+         gboolean         display_is_local;
++        gboolean         display_is_nested;
+         gboolean         display_is_parented;
+         char            *display_seat_id;
+         char            *display_x11_authority_file;
+-        char            *parent_display_name;
+-        char            *parent_display_x11_authority_file;
+ 
+         GArray          *display_x11_cookie;
+ 
++        char            *parent_display_name;
++        char            *parent_display_user_auth_file;
++        char            *parent_display_username;
++
+         DBusGProxy      *display_proxy;
++        DBusGProxy      *parent_display_proxy;
+         DBusGConnection *connection;
+ };
+ 
+ enum {
+         PROP_0,
+         PROP_DISPLAY_ID,
++        PROP_DISPLAY_PARENT_ID,
+         PROP_DISPLAY_NAME,
+         PROP_DISPLAY_NUMBER,
+         PROP_DISPLAY_HOSTNAME,
+         PROP_DISPLAY_IS_LOCAL,
++        PROP_DISPLAY_IS_NESTED,
+         PROP_DISPLAY_SEAT_ID,
+-        PROP_DISPLAY_X11_AUTHORITY_FILE
++        PROP_DISPLAY_X11_AUTHORITY_FILE,
++        PROP_PARENT_DISPLAY_NAME,
++        PROP_PARENT_DISPLAY_USER_AUTH_FILE,
++        PROP_PARENT_DISPLAY_USERNAME
+ };
+ 
+ enum {
+@@ -378,6 +388,10 @@
+ 
+         g_debug ("GdmSlave: Server is ready - opening display %s", slave->priv->display_name);
+ 
++        /* don't let root connect to nested displays */
++        if (slave->priv->display_is_nested)
++                return TRUE;
++
+         g_setenv ("DISPLAY", slave->priv->display_name, TRUE);
+         g_setenv ("XAUTHORITY", slave->priv->display_x11_authority_file, TRUE);
+ 
+@@ -446,6 +460,15 @@
+         slave->priv->display_proxy = NULL;
+ }
+ 
++static void
++parent_display_proxy_destroyed_cb (DBusGProxy *parent_display_proxy,
++                                   GdmSlave   *slave)
++{
++        g_debug ("GdmSlave: Disconnected from parent display");
++
++        slave->priv->parent_display_proxy = NULL;
++}
++
+ static gboolean
+ gdm_slave_set_slave_bus_name (GdmSlave *slave)
+ {
+@@ -480,11 +503,13 @@
+ {
+         gboolean res;
+         char    *id;
++        char    *parent_id;
+         GError  *error;
+ 
+         g_debug ("GdmSlave: Starting slave");
+ 
+         g_assert (slave->priv->display_proxy == NULL);
++        g_assert (slave->priv->parent_display_proxy == NULL);
+ 
+         g_debug ("GdmSlave: Creating proxy for %s", slave->priv->display_id);
+         error = NULL;
+@@ -539,6 +564,134 @@
+         /* cache some values up front */
+         error = NULL;
+         res = dbus_g_proxy_call (slave->priv->display_proxy,
++                                 "IsNested",
++                                 &error,
++                                 G_TYPE_INVALID,
++                                 G_TYPE_BOOLEAN, &slave->priv->display_is_nested,
++                                 G_TYPE_INVALID);
++        if (! res) {
++                if (error != NULL) {
++                        g_warning ("Failed to get value: %s", error->message);
++                        g_error_free (error);
++                } else {
++                        g_warning ("Failed to get value");
++                }
++
++                return FALSE;
++        }
++
++        if (slave->priv->display_is_nested) {
++                /* parent display */
++                error = NULL;
++                res = dbus_g_proxy_call (slave->priv->display_proxy,
++                                         "GetParentId",
++                                         &error,
++                                         G_TYPE_INVALID,
++                                         DBUS_TYPE_G_OBJECT_PATH, &slave->priv->display_parent_id,
++                                         G_TYPE_INVALID);
++                if (! res) {
++                        if (error != NULL) {
++                                g_warning ("Failed to get display parent ID: %s", error->message);
++                                g_error_free (error);
++                        } else {
++                                g_warning ("Failed to get display parent ID");
++                        }
++
++                        return FALSE;
++                }
++        }
++
++        if (slave->priv->display_parent_id) {
++                g_debug ("GdmSlave: Got display parent ID: %s", slave->priv->display_parent_id);
++
++                g_debug ("GdmSlave: Creating proxy for parent %s", slave->priv->display_parent_id);
++                error = NULL;
++                slave->priv->parent_display_proxy = dbus_g_proxy_new_for_name_owner (slave->priv->connection,
++                                                                                     GDM_DBUS_NAME,
++                                                                                     slave->priv->display_parent_id,
++                                                                                     GDM_DBUS_DISPLAY_INTERFACE,
++                                                                                     &error);
++                g_signal_connect (slave->priv->parent_display_proxy,
++                                  "destroy",
++                                  G_CALLBACK (parent_display_proxy_destroyed_cb),
++                                  slave);
++
++                if (slave->priv->parent_display_proxy == NULL) {
++                        if (error != NULL) {
++                                g_warning ("Failed to create parent display proxy %s: %s", slave->priv->display_parent_id, error->message);
++                                g_error_free (error);
++                        } else {
++                                g_warning ("Unable to create parent display proxy");
++                        }
++                        return FALSE;
++                }
++
++                /* Make sure display parent ID works */
++                error = NULL;
++                res = dbus_g_proxy_call (slave->priv->parent_display_proxy,
++                                         "GetId",
++                                         &error,
++                                         G_TYPE_INVALID,
++                                         DBUS_TYPE_G_OBJECT_PATH, &parent_id,
++                                         G_TYPE_INVALID);
++                if (! res) {
++                        if (error != NULL) {
++                                g_warning ("Failed to get parent display ID %s: %s", slave->priv->display_parent_id, error->message);
++                                g_error_free (error);
++                        } else {
++                                g_warning ("Failed to get parent display ID %s", slave->priv->display_parent_id);
++                        }
++
++                        return FALSE;
++                }
++
++                g_debug ("GdmSlave: Got display parent ID: %s", parent_id);
++
++                if (strcmp (parent_id, slave->priv->display_parent_id) != 0) {
++                        g_critical ("Display parent ID doesn't match");
++                        exit (1);
++                }
++
++                error = NULL;
++                res = dbus_g_proxy_call (slave->priv->parent_display_proxy,
++                                         "GetX11DisplayName",
++                                         &error,
++                                         G_TYPE_INVALID,
++                                         G_TYPE_STRING, &slave->priv->parent_display_name,
++                                         G_TYPE_INVALID);
++                if (! res) {
++                        if (error != NULL) {
++                                g_warning ("Failed to get parent display value: %s", error->message);
++                                g_error_free (error);
++                        } else {
++                                g_warning ("Failed to get parent display value");
++                        }
++
++                        return FALSE;
++                }
++
++                error = NULL;
++                res = dbus_g_proxy_call (slave->priv->parent_display_proxy,
++                                         "GetUserAuthorization",
++                                         &error,
++                                         G_TYPE_INVALID,
++                                         G_TYPE_STRING, &slave->priv->parent_display_username,
++                                         G_TYPE_STRING, &slave->priv->parent_display_user_auth_file,
++                                         G_TYPE_INVALID);
++                if (! res) {
++                        if (error != NULL) {
++                                g_warning ("Failed to get parent display value: %s", error->message);
++                                g_error_free (error);
++                        } else {
++                                g_warning ("Failed to get parent display value");
++                        }
++
++                        return FALSE;
++                }
++        }
++
++        error = NULL;
++        res = dbus_g_proxy_call (slave->priv->display_proxy,
+                                  "IsLocal",
+                                  &error,
+                                  G_TYPE_INVALID,
+@@ -1284,6 +1437,14 @@
+ }
+ 
+ static void
++_gdm_slave_set_display_parent_id (GdmSlave   *slave,
++                                  const char *id)
++{
++        g_free (slave->priv->display_parent_id);
++        slave->priv->display_parent_id = g_strdup (id);
++}
++
++static void
+ _gdm_slave_set_display_name (GdmSlave   *slave,
+                              const char *name)
+ {
+@@ -1330,6 +1491,37 @@
+ }
+ 
+ static void
++_gdm_slave_set_display_is_nested (GdmSlave   *slave,
++                                  gboolean    is_nested)
++{
++        slave->priv->display_is_nested = is_nested;
++}
++
++static void
++_gdm_slave_set_parent_display_name (GdmSlave   *slave,
++                                    const char *name)
++{
++        g_free (slave->priv->parent_display_name);
++        slave->priv->parent_display_name = g_strdup (name);
++}
++
++static void
++_gdm_slave_set_parent_display_user_auth_file (GdmSlave   *slave,
++                                              const char *auth_file)
++{
++        g_free (slave->priv->parent_display_user_auth_file);
++        slave->priv->parent_display_user_auth_file = g_strdup (auth_file);
++}
++
++static void
++_gdm_slave_set_parent_display_username (GdmSlave   *slave,
++                                        const char *name)
++{
++        g_free (slave->priv->parent_display_username);
++        slave->priv->parent_display_username = g_strdup (name);
++}
++
++static void
+ gdm_slave_set_property (GObject      *object,
+                         guint         prop_id,
+                         const GValue *value,
+@@ -1343,6 +1535,9 @@
+         case PROP_DISPLAY_ID:
+                 _gdm_slave_set_display_id (self, g_value_get_string (value));
+                 break;
++        case PROP_DISPLAY_PARENT_ID:
++                _gdm_slave_set_display_parent_id (self, g_value_get_string (value));
++                break;
+         case PROP_DISPLAY_NAME:
+                 _gdm_slave_set_display_name (self, g_value_get_string (value));
+                 break;
+@@ -1361,6 +1556,18 @@
+         case PROP_DISPLAY_IS_LOCAL:
+                 _gdm_slave_set_display_is_local (self, g_value_get_boolean (value));
+                 break;
++        case PROP_DISPLAY_IS_NESTED:
++                _gdm_slave_set_display_is_nested (self, g_value_get_boolean (value));
++                break;
++        case PROP_PARENT_DISPLAY_NAME:
++                _gdm_slave_set_parent_display_name (self, g_value_get_string (value));
++                break;
++        case PROP_PARENT_DISPLAY_USER_AUTH_FILE:
++                _gdm_slave_set_parent_display_user_auth_file (self, g_value_get_string (value));
++                break;
++        case PROP_PARENT_DISPLAY_USERNAME:
++                _gdm_slave_set_parent_display_username (self, g_value_get_string (value));
++                break;
+         default:
+                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+                 break;
+@@ -1381,6 +1588,9 @@
+         case PROP_DISPLAY_ID:
+                 g_value_set_string (value, self->priv->display_id);
+                 break;
++        case PROP_DISPLAY_PARENT_ID:
++                g_value_set_string (value, self->priv->display_parent_id);
++                break;
+         case PROP_DISPLAY_NAME:
+                 g_value_set_string (value, self->priv->display_name);
+                 break;
+@@ -1399,6 +1609,18 @@
+         case PROP_DISPLAY_IS_LOCAL:
+                 g_value_set_boolean (value, self->priv->display_is_local);
+                 break;
++        case PROP_DISPLAY_IS_NESTED:
++                g_value_set_boolean (value, self->priv->display_is_nested);
++                break;
++        case PROP_PARENT_DISPLAY_NAME:
++                g_value_set_string (value, self->priv->parent_display_name);
++                break;
++        case PROP_PARENT_DISPLAY_USER_AUTH_FILE:
++                g_value_set_string (value, self->priv->parent_display_user_auth_file);
++                break;
++        case PROP_PARENT_DISPLAY_USERNAME:
++                g_value_set_string (value, self->priv->parent_display_username);
++                break;
+         default:
+                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+                 break;
+@@ -1480,6 +1702,13 @@
+                                                               NULL,
+                                                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+         g_object_class_install_property (object_class,
++                                         PROP_DISPLAY_PARENT_ID,
++                                         g_param_spec_string ("display-parent-id",
++                                                              "id",
++                                                              "id",
++                                                              NULL,
++                                                              G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
++        g_object_class_install_property (object_class,
+                                          PROP_DISPLAY_NAME,
+                                          g_param_spec_string ("display-name",
+                                                               "display name",
+@@ -1523,6 +1752,34 @@
+                                                                "display is local",
+                                                                TRUE,
+                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
++        g_object_class_install_property (object_class,
++                                         PROP_DISPLAY_IS_NESTED,
++                                         g_param_spec_boolean ("display-is-nested",
++                                                               "display is nested",
++                                                               "display is nested",
++                                                               FALSE,
++                                                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
++        g_object_class_install_property (object_class,
++                                         PROP_PARENT_DISPLAY_NAME,
++                                         g_param_spec_string ("parent-display-name",
++                                                              "parent display name",
++                                                              "parent display name",
++                                                              NULL,
++                                                              G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
++        g_object_class_install_property (object_class,
++                                         PROP_PARENT_DISPLAY_USER_AUTH_FILE,
++                                         g_param_spec_string ("parent-display-user-auth-file",
++                                                              "parent display user auth file",
++                                                              "parent display user auth file",
++                                                              NULL,
++                                                              G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
++        g_object_class_install_property (object_class,
++                                         PROP_PARENT_DISPLAY_USERNAME,
++                                         g_param_spec_string ("parent-display-username",
++                                                              "parent display authorized username",
++                                                              "parent display authorized username",
++                                                              NULL,
++                                                              G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ 
+         signals [STOPPED] =
+                 g_signal_new ("stopped",
+@@ -1568,7 +1825,7 @@
+         g_free (slave->priv->display_seat_id);
+         g_free (slave->priv->display_x11_authority_file);
+         g_free (slave->priv->parent_display_name);
+-        g_free (slave->priv->parent_display_x11_authority_file);
++        g_free (slave->priv->parent_display_user_auth_file);
+         g_array_free (slave->priv->display_x11_cookie, TRUE);
+ 
+         G_OBJECT_CLASS (gdm_slave_parent_class)->finalize (object);
+--- a/daemon/gdm-display.xml
++++ b/daemon/gdm-display.xml
+@@ -4,6 +4,9 @@
+     <method name="GetId">
+       <arg name="id" direction="out" type="o"/>
+     </method>
++    <method name="GetParentId">
++      <arg name="parent_id" direction="out" type="o"/>
++    </method>
+     <method name="GetX11DisplayName">
+       <arg name="name" direction="out" type="s"/>
+     </method>
+@@ -25,6 +28,9 @@
+     <method name="IsLocal">
+       <arg name="local" direction="out" type="b"/>
+     </method>
++    <method name="IsNested">
++      <arg name="nested" direction="out" type="b"/>
++    </method>
+     <method name="AddUserAuthorization">
+       <arg name="username" direction="in" type="s"/>
+       <arg name="filename" direction="out" type="s"/>
+@@ -32,6 +38,10 @@
+     <method name="RemoveUserAuthorization">
+       <arg name="username" direction="in" type="s"/>
+     </method>
++    <method name="GetUserAuthorization">
++      <arg name="username" direction="out" type="s"/>
++      <arg name="filename" direction="out" type="s"/>
++    </method>
+     <method name="SetSlaveBusName">
+       <arg name="name" direction="in" type="s"/>
+     </method>
+--- a/data/gdm.conf.in
++++ b/data/gdm.conf.in
+@@ -62,10 +62,16 @@
+     <allow send_destination="org.gnome.DisplayManager"
+            send_interface="org.gnome.DisplayManager.Display"
+            send_member="IsLocal"/>
++    <allow send_destination="org.gnome.DisplayManager"
++           send_interface="org.gnome.DisplayManager.Display"
++           send_member="IsNested"/>
+ 
+     <allow send_destination="org.gnome.DisplayManager"
+            send_interface="org.gnome.DisplayManager.LocalDisplayFactory"
+            send_member="CreateTransientDisplay"/>
++    <allow send_destination="org.gnome.DisplayManager"
++           send_interface="org.gnome.DisplayManager.LocalDisplayFactory"
++           send_member="CreateNestedDisplay"/>
+ 
+     <allow send_destination="org.gnome.DisplayManager"
+            send_interface="org.gnome.DisplayManager.Manager"
+--- a/daemon/gdm-server.c
++++ b/daemon/gdm-server.c
+@@ -76,11 +76,13 @@
+         char    *auth_file;
+ 
+         gboolean is_parented;
++        gboolean is_nested;
+         char    *parent_display_name;
+         char    *parent_auth_file;
+         char    *chosen_hostname;
+ 
+         guint    child_watch_id;
++        gboolean is_ready;
+ };
+ 
+ enum {
+@@ -89,6 +91,7 @@
+         PROP_DISPLAY_DEVICE,
+         PROP_AUTH_FILE,
+         PROP_IS_PARENTED,
++        PROP_IS_NESTED,
+         PROP_PARENT_DISPLAY_NAME,
+         PROP_PARENT_AUTH_FILE,
+         PROP_CHOSEN_HOSTNAME,
+@@ -166,9 +169,12 @@
+ static gboolean
+ emit_ready_idle (GdmServer *server)
+ {
+-        g_debug ("GdmServer: Got USR1 from X server - emitting READY");
++        if (!server->priv->is_ready) {
++                server->priv->is_ready = TRUE;
++                g_debug ("GdmServer: Got USR1 from X server - emitting READY");
+ 
+-        g_signal_emit (server, signals[READY], 0);
++                g_signal_emit (server, signals[READY], 0);
++        }
+         return FALSE;
+ }
+ 
+@@ -654,7 +660,13 @@
+         g_ptr_array_foreach (env, (GFunc)g_free, NULL);
+         g_ptr_array_free (env, TRUE);
+ 
+-        g_debug ("GdmServer: Started X server process %d - waiting for READY", (int)server->priv->pid);
++        if (server->priv->is_nested) {
++                // Xephyr doesn't send back any signal
++                g_debug ("GdmServer: Started Xephyr server process %d", (int)server->priv->pid);
++                g_timeout_add (500, (GSourceFunc)emit_ready_idle, server);
++        } else {
++                g_debug ("GdmServer: Started X server process %d - waiting for READY", (int)server->priv->pid);
++        }
+ 
+         server->priv->child_watch_id = g_child_watch_add (server->priv->pid,
+                                                           (GChildWatchFunc)server_child_watch,
+@@ -759,6 +771,41 @@
+ }
+ 
+ static void
++_gdm_server_set_parent_display_name (GdmServer  *server,
++                                     const char *name)
++{
++        g_free (server->priv->parent_display_name);
++        server->priv->parent_display_name = g_strdup (name);
++}
++
++static void
++_gdm_server_set_parent_auth_file (GdmServer  *server,
++                                  const char *auth_file)
++{
++        g_free (server->priv->parent_auth_file);
++        server->priv->parent_auth_file = g_strdup (auth_file);
++}
++
++static void
++_gdm_server_set_is_parented (GdmServer  *server,
++                             gboolean    is_parented)
++{
++        server->priv->is_parented = is_parented;
++}
++
++static void
++_gdm_server_set_is_nested (GdmServer  *server,
++                           gboolean    is_nested)
++{
++        server->priv->is_nested = is_nested;
++        g_free (server->priv->command);
++        if (is_nested)
++                server->priv->command = g_strdup (X_XNEST_CMD " " X_XNEST_CONFIG_OPTIONS " -br");
++        else
++                server->priv->command = g_strdup (X_SERVER " -br -verbose");
++}
++
++static void
+ _gdm_server_set_disable_tcp (GdmServer  *server,
+                              gboolean    disabled)
+ {
+@@ -785,9 +832,21 @@
+         case PROP_USER_NAME:
+                 _gdm_server_set_user_name (self, g_value_get_string (value));
+                 break;
++        case PROP_PARENT_DISPLAY_NAME:
++                _gdm_server_set_parent_display_name (self, g_value_get_string (value));
++                break;
++        case PROP_PARENT_AUTH_FILE:
++                _gdm_server_set_parent_auth_file (self, g_value_get_string (value));
++                break;
+         case PROP_DISABLE_TCP:
+                 _gdm_server_set_disable_tcp (self, g_value_get_boolean (value));
+                 break;
++        case PROP_IS_PARENTED:
++                _gdm_server_set_is_parented (self, g_value_get_boolean (value));
++                break;
++        case PROP_IS_NESTED:
++                _gdm_server_set_is_nested (self, g_value_get_boolean (value));
++                break;
+         default:
+                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+                 break;
+@@ -818,9 +877,21 @@
+         case PROP_USER_NAME:
+                 g_value_set_string (value, self->priv->user_name);
+                 break;
++        case PROP_PARENT_DISPLAY_NAME:
++                g_value_set_string (value, self->priv->parent_display_name);
++                break;
++        case PROP_PARENT_AUTH_FILE:
++                g_value_set_string (value, self->priv->parent_auth_file);
++                break;
+         case PROP_DISABLE_TCP:
+                 g_value_set_boolean (value, self->priv->disable_tcp);
+                 break;
++        case PROP_IS_PARENTED:
++                g_value_set_boolean (value, self->priv->is_parented);
++                break;
++        case PROP_IS_NESTED:
++                g_value_set_boolean (value, self->priv->is_nested);
++                break;
+         default:
+                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+                 break;
+@@ -921,6 +992,34 @@
+                                                                NULL,
+                                                                TRUE,
+                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
++        g_object_class_install_property (object_class,
++                                         PROP_IS_PARENTED,
++                                         g_param_spec_boolean ("is-parented",
++                                                               NULL,
++                                                               NULL,
++                                                               FALSE,
++                                                               G_PARAM_READWRITE));
++        g_object_class_install_property (object_class,
++                                         PROP_IS_NESTED,
++                                         g_param_spec_boolean ("is-nested",
++                                                               NULL,
++                                                               NULL,
++                                                               FALSE,
++                                                               G_PARAM_READWRITE));
++        g_object_class_install_property (object_class,
++                                         PROP_PARENT_DISPLAY_NAME,
++                                         g_param_spec_string ("parent-display-name",
++                                                              "parent name",
++                                                              "parent name",
++                                                              NULL,
++                                                              G_PARAM_READWRITE));
++        g_object_class_install_property (object_class,
++                                         PROP_PARENT_AUTH_FILE,
++                                         g_param_spec_string ("parent-auth-file",
++                                                              "parent auth file",
++                                                              "parent auth file",
++                                                              NULL,
++                                                              G_PARAM_READWRITE));
+ 
+ }
+ 
+@@ -933,6 +1032,7 @@
+         server->priv->pid = -1;
+         server->priv->command = g_strdup (X_SERVER " -br -verbose");
+         server->priv->log_dir = g_strdup (LOGDIR);
++        server->priv->is_ready = FALSE;
+ 
+         add_ready_handler (server);
+ }
+--- a/utils/gdmflexiserver.c
++++ b/utils/gdmflexiserver.c
+@@ -34,6 +34,9 @@
+ #include <dbus/dbus-glib-lowlevel.h>
+ 
+ #define GDM_DBUS_NAME                            "org.gnome.DisplayManager"
++#define GDM_DBUS_DISPLAY_INTERFACE               "org.gnome.DisplayManager.Display"
++#define GDM_DBUS_DISPLAY_MANAGER_PATH            "/org/gnome/DisplayManager/Manager"
++#define GDM_DBUS_DISPLAY_MANAGER_INTERFACE       "org.gnome.DisplayManager.Manager"
+ #define GDM_DBUS_LOCAL_DISPLAY_FACTORY_PATH      "/org/gnome/DisplayManager/LocalDisplayFactory"
+ #define GDM_DBUS_LOCAL_DISPLAY_FACTORY_INTERFACE "org.gnome.DisplayManager.LocalDisplayFactory"
+ 
+@@ -59,7 +62,7 @@
+ /* Keep all config options for compatibility even if they are noops */
+ GOptionEntry options [] = {
+         { "command", 'c', 0, G_OPTION_ARG_STRING, &send_command, N_("Only the VERSION command is supported"), N_("COMMAND") },
+-        { "xnest", 'n', 0, G_OPTION_ARG_NONE, &use_xnest, N_("Ignored - retained for compatibility"), NULL },
++        { "xnest", 'n', 0, G_OPTION_ARG_NONE, &use_xnest, N_("Run gdm in a nested window"), NULL },
+         { "no-lock", 'l', 0, G_OPTION_ARG_NONE, &no_lock, N_("Ignored - retained for compatibility"), NULL },
+         { "debug", 'd', 0, G_OPTION_ARG_NONE, &debug_in, N_("Debugging output"), NULL },
+         { "authenticate", 'a', 0, G_OPTION_ARG_NONE, &authenticate, N_("Ignored - retained for compatibility"), NULL },
+@@ -548,6 +551,216 @@
+ }
+ 
+ static char **
++get_displays (DBusConnection *connection)
++{
++        DBusError       error;
++        DBusMessage    *message;
++        DBusMessage    *reply;
++        DBusMessageIter iter_reply;
++        DBusMessageIter iter_array;
++        char           **displays;
++
++        displays = NULL;
++        message = NULL;
++        reply = NULL;
++
++        dbus_error_init (&error);
++        message = dbus_message_new_method_call (GDM_DBUS_NAME,
++                                                GDM_DBUS_DISPLAY_MANAGER_PATH,
++                                                GDM_DBUS_DISPLAY_MANAGER_INTERFACE,
++                                                "GetDisplays");
++        if (message == NULL) {
++                g_debug ("Couldn't allocate the D-Bus message");
++                goto out;
++        }
++
++        dbus_error_init (&error);
++        reply = dbus_connection_send_with_reply_and_block (connection,
++                                                           message,
++                                                           -1, &error);
++        dbus_connection_flush (connection);
++
++        if (dbus_error_is_set (&error)) {
++                g_debug ("Gdm %s raised:\n %s\n\n", error.name, error.message);
++                goto out;
++        }
++
++        if (reply == NULL) {
++                g_debug ("Gdm: No reply for GetDisplays");
++                goto out;
++        }
++
++        dbus_message_iter_init (reply, &iter_reply);
++        if (dbus_message_iter_get_arg_type (&iter_reply) != DBUS_TYPE_ARRAY) {
++                g_debug ("Gdm Wrong reply for GetDisplays - expecting an array.");
++                goto out;
++        }
++
++        dbus_message_iter_recurse (&iter_reply, &iter_array);
++        displays = get_path_array_from_iter (&iter_array, NULL);
++
++ out:
++        if (message != NULL) {
++                dbus_message_unref (message);
++        }
++        if (reply != NULL) {
++                dbus_message_unref (reply);
++        }
++
++        return displays;
++}
++
++static gboolean
++display_has_x11_name (DBusConnection *connection,
++                      const char *display_id,
++                      const char *display_name)
++{
++        DBusError       local_error;
++        DBusMessage    *message;
++        DBusMessage    *reply;
++        gboolean        ret;
++        DBusMessageIter iter;
++        const char     *value;
++
++        ret = FALSE;
++        reply = NULL;
++
++        dbus_error_init (&local_error);
++        message = dbus_message_new_method_call (GDM_DBUS_NAME,
++                                                display_id,
++                                                GDM_DBUS_DISPLAY_INTERFACE,
++                                                "GetX11DisplayName");
++        if (message == NULL) {
++                goto out;
++        }
++
++        dbus_error_init (&local_error);
++        reply = dbus_connection_send_with_reply_and_block (connection,
++                                                           message,
++                                                           -1,
++                                                           &local_error);
++        if (reply == NULL) {
++                if (dbus_error_is_set (&local_error)) {
++                        g_warning ("Unable to determine display name: %s", local_error.message);
++                        dbus_error_free (&local_error);
++                        goto out;
++                }
++        }
++
++        dbus_message_iter_init (reply, &iter);
++        dbus_message_iter_get_basic (&iter, &value);
++
++        if (value == NULL || value[0] == '\0' || strncmp (value, display_name, index(display_name,'.')-display_name) != 0) {
++                goto out;
++        }
++
++        ret = TRUE;
++ out:
++        if (message != NULL) {
++                dbus_message_unref (message);
++        }
++        if (reply != NULL) {
++                dbus_message_unref (reply);
++        }
++
++        return ret;
++}
++
++static char *
++get_current_display_id (DBusConnection *connection)
++{
++        const char *display_name;
++        char *display_id;
++        char **displays;
++        int i;
++
++        display_id = NULL;
++
++        display_name = g_getenv ("DISPLAY");
++        if (!display_name) {
++                g_warning ("DISPLAY environment variable not set. Can't start nested display without a parent display");
++                goto out;
++        }
++
++        displays = get_displays (connection);
++        for (i = 0; displays[i] != NULL; i++) {
++                if (display_has_x11_name (connection, displays[i], display_name)) {
++                        display_id = g_strdup (displays[i]);
++                        goto out;
++                }
++        }
++
++ out:
++        g_strfreev (displays);
++        return display_id;
++}
++
++static gboolean
++create_nested_display (DBusConnection *connection,
++                       GError        **error)
++{
++        DBusError       local_error;
++        DBusMessage    *message;
++        DBusMessage    *reply;
++        gboolean        ret;
++        DBusMessageIter iter;
++        const char     *value;
++        char           *display_id;
++
++        ret = FALSE;
++        reply = NULL;
++
++        display_id = get_current_display_id (connection);
++        if (display_id == NULL) {
++                g_set_error (error, GDM_FLEXISERVER_ERROR, 0, "Can't determine current display id.");
++                goto out;
++        }
++
++        dbus_error_init (&local_error);
++        message = dbus_message_new_method_call (GDM_DBUS_NAME,
++                                                GDM_DBUS_LOCAL_DISPLAY_FACTORY_PATH,
++                                                GDM_DBUS_LOCAL_DISPLAY_FACTORY_INTERFACE,
++                                                "CreateNestedDisplay");
++        if (message == NULL) {
++                g_set_error (error, GDM_FLEXISERVER_ERROR, 0, "Out of memory.");
++                goto out;
++        }
++
++        dbus_message_iter_init_append (message, &iter);
++        dbus_message_iter_append_basic (&iter, DBUS_TYPE_OBJECT_PATH, &display_id);
++
++        dbus_error_init (&local_error);
++        reply = dbus_connection_send_with_reply_and_block (connection,
++                                                           message,
++                                                           -1,
++                                                           &local_error);
++        if (reply == NULL) {
++                if (dbus_error_is_set (&local_error)) {
++                        g_warning ("Unable to create nested display: %s", local_error.message);
++                        g_set_error (error, GDM_FLEXISERVER_ERROR, 0, "%s", local_error.message);
++                        dbus_error_free (&local_error);
++                        goto out;
++                }
++        }
++
++        dbus_message_iter_init (reply, &iter);
++        dbus_message_iter_get_basic (&iter, &value);
++        g_debug ("Started %s", value);
++
++        ret = TRUE;
++ out:
++        if (message != NULL) {
++                dbus_message_unref (message);
++        }
++        if (reply != NULL) {
++                dbus_message_unref (reply);
++        }
++        g_free (display_id);
++
++        return ret;
++}
++
++static char **
+ seat_get_sessions (DBusConnection *connection,
+                    const char     *seat_id)
+ {
+@@ -666,6 +879,10 @@
+                 return FALSE;
+         }
+ 
++        if (use_xnest) {
++                return create_nested_display (connection, error);
++        }
++
+         /* First look for any existing LoginWindow sessions on the seat.
+            If none are found, create a new one. */
+ 
+@@ -742,11 +959,6 @@
+ 
+         }
+ 
+-        if (use_xnest) {
+-                g_warning ("Not yet implemented");
+-                return 1;
+-        }
+-
+         error = NULL;
+         res = goto_login_session (&error);
+         if (! res) {

Modified: desktop/experimental/gdm3/debian/patches/90_relibtoolize.patch
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/experimental/gdm3/debian/patches/90_relibtoolize.patch?rev=23502&op=diff
==============================================================================
--- desktop/experimental/gdm3/debian/patches/90_relibtoolize.patch [utf-8] (original)
+++ desktop/experimental/gdm3/debian/patches/90_relibtoolize.patch [utf-8] Thu Apr  1 11:28:07 2010
@@ -11267,8 +11267,8 @@
 @@ -1,20 +1,24 @@
  #! /bin/sh
  # Guess values for system-dependent variables and create Makefiles.
--# Generated by GNU Autoconf 2.63 for gdm 2.29.92.
-+# Generated by GNU Autoconf 2.65 for gdm 2.29.92.
+-# Generated by GNU Autoconf 2.63 for gdm 2.30.0.
++# Generated by GNU Autoconf 2.65 for gdm 2.30.0.
  #
  # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=gdm>.
  #
@@ -12316,8 +12316,8 @@
  # Identity of this package.
  PACKAGE_NAME='gdm'
 @@ -753,6 +705,7 @@
- PACKAGE_VERSION='2.29.92'
- PACKAGE_STRING='gdm 2.29.92'
+ PACKAGE_VERSION='2.30.0'
+ PACKAGE_STRING='gdm 2.30.0'
  PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=gdm'
 +PACKAGE_URL=''
  
@@ -12602,7 +12602,7 @@
 @@ -2011,124 +1968,656 @@
  if $ac_init_version; then
    cat <<\_ACEOF
- gdm configure 2.29.92
+ gdm configure 2.30.0
 -generated by GNU Autoconf 2.63
 +generated by GNU Autoconf 2.65
  
@@ -12618,7 +12618,7 @@
 -This file contains any messages produced by compilers while
 -running configure, to aid debugging if configure makes a mistake.
  
--It was created by gdm $as_me 2.29.92, which was
+-It was created by gdm $as_me 2.30.0, which was
 -generated by GNU Autoconf 2.63.  Invocation command line was
 +## ------------------------ ##
 +## Autoconf initialization. ##
@@ -13242,7 +13242,7 @@
 +This file contains any messages produced by compilers while
 +running configure, to aid debugging if configure makes a mistake.
 +
-+It was created by gdm $as_me 2.29.92, which was
++It was created by gdm $as_me 2.30.0, which was
 +generated by GNU Autoconf 2.65.  Invocation command line was
 +
 +  $ $0 $@
@@ -59774,7 +59774,7 @@
 +# report actual input values of CONFIG_FILES etc. instead of their
 +# values after options handling.
 +ac_log="
-+This file was extended by gdm $as_me 2.29.92, which was
++This file was extended by gdm $as_me 2.30.0, which was
 +generated by GNU Autoconf 2.65.  Invocation command line was
  
 -  full_var="$FROM_VAR"
@@ -59874,7 +59874,7 @@
 +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 +ac_cs_version="\\
-+gdm config.status 2.29.92
++gdm config.status 2.30.0
 +configured by $0, generated by GNU Autoconf 2.65,
 +  with options \\"\$ac_cs_config\\"
  
@@ -62138,7 +62138,7 @@
 -# report actual input values of CONFIG_FILES etc. instead of their
 -# values after options handling.
 -ac_log="
--This file was extended by gdm $as_me 2.29.92, which was
+-This file was extended by gdm $as_me 2.30.0, which was
 -generated by GNU Autoconf 2.63.  Invocation command line was
 +# Compiler flag to allow reflexive dlopens.
 +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
@@ -62243,7 +62243,7 @@
 -_ACEOF
 -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 -ac_cs_version="\\
--gdm config.status 2.29.92
+-gdm config.status 2.30.0
 -configured by $0, generated by GNU Autoconf 2.63,
 -  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
@@ -67411,7 +67411,7 @@
  installcheck-am:
  
  maintainer-clean: maintainer-clean-am
-@@ -995,6 +1036,7 @@
+@@ -994,6 +1035,7 @@
  
  #man_MANS = gdm.1
  #EXTRA_DIST = gdm.1

Modified: desktop/experimental/gdm3/debian/patches/series
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/experimental/gdm3/debian/patches/series?rev=23502&op=diff
==============================================================================
--- desktop/experimental/gdm3/debian/patches/series [utf-8] (original)
+++ desktop/experimental/gdm3/debian/patches/series [utf-8] Thu Apr  1 11:28:07 2010
@@ -8,4 +8,5 @@
 08_frequent-users_greeter.patch
 09_default_session.patch
 10_gdm3_pam.patch
+11_xephyr_nested.patch
 90_relibtoolize.patch




More information about the pkg-gnome-commits mailing list