]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Merge with trunk
authorRobert Ancell <robert.ancell@canonical.com>
Tue, 9 Jul 2013 04:07:14 +0000 (16:07 +1200)
committerRobert Ancell <robert.ancell@canonical.com>
Tue, 9 Jul 2013 04:07:14 +0000 (16:07 +1200)
117 files changed:
.bzrignore
NEWS
configure.ac
data/lightdm.conf
po/af.po
po/an.po
po/ar.po
po/ast.po
po/az.po
po/be.po
po/bg.po
po/bn.po
po/bo.po
po/br.po
po/bs.po
po/ca.po
po/ca@valencia.po
po/ckb.po
po/cs.po
po/da.po
po/de.po
po/el.po
po/en_AU.po
po/en_CA.po
po/en_GB.po
po/eo.po
po/es.po
po/et.po
po/eu.po
po/fa.po
po/fi.po
po/fo.po
po/fr.po
po/fy.po
po/gd.po
po/gl.po
po/gu.po
po/he.po
po/hi.po
po/hr.po
po/hu.po
po/ia.po
po/id.po
po/is.po
po/it.po
po/ja.po
po/kk.po
po/km.po
po/kn.po
po/ko.po
po/ku.po
po/lb.po
po/lt.po
po/lv.po
po/mhr.po
po/mi.po
po/ml.po
po/mr.po
po/ms.po
po/my.po
po/nb.po
po/nl.po
po/nn.po
po/oc.po
po/pa.po
po/pl.po
po/pt.po
po/pt_BR.po
po/ro.po
po/ru.po
po/sc.po
po/sd.po
po/shn.po
po/si.po
po/sk.po
po/sl.po
po/sq.po
po/sr.po
po/sv.po
po/ta.po
po/te.po
po/tg.po
po/th.po
po/tl.po
po/tr.po
po/ug.po
po/uk.po
po/uz.po
po/vi.po
po/wae.po
po/zh_CN.po
po/zh_HK.po
po/zh_TW.po
src/Makefile.am
src/display-manager.c
src/lightdm.c
src/seat-unity.c [new file with mode: 0644]
src/seat-unity.h [new file with mode: 0644]
src/xserver-local.c
src/xserver-local.h
tests/Makefile.am
tests/scripts/unity-autologin.conf [new file with mode: 0644]
tests/scripts/unity-compositor-command.conf [new file with mode: 0644]
tests/scripts/unity-compositor-fail-ready.conf [new file with mode: 0644]
tests/scripts/unity-compositor-fail-start.conf [new file with mode: 0644]
tests/scripts/unity-login.conf [new file with mode: 0644]
tests/scripts/unity-switch.conf [new file with mode: 0644]
tests/src/Makefile.am
tests/src/X.c
tests/src/test-runner.c
tests/src/unity-system-compositor.c [new file with mode: 0644]
tests/test-unity-autologin [new file with mode: 0755]
tests/test-unity-compositor-command [new file with mode: 0755]
tests/test-unity-compositor-fail-ready [new file with mode: 0755]
tests/test-unity-compositor-fail-start [new file with mode: 0755]
tests/test-unity-login [new file with mode: 0755]
tests/test-unity-switch [new file with mode: 0755]

index 15ae951c6e142b1dea4b9df4018447fc0582d656..124458a2dca6d5ccdd1ad4a5fb3769369cd7d49a 100644 (file)
@@ -71,6 +71,7 @@ tests/src/test-qt5-greeter
 tests/src/test-runner
 tests/src/test-script-hook
 tests/src/test-session
+tests/src/unity-system-compositor
 tests/src/vnc-client
 tests/src/X
 tests/src/Xvnc
diff --git a/NEWS b/NEWS
index d026227ada058873466d3376c8278cee9d2910f3..d29cd1a60cbdb0787c4a83400101de5869c53160 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,9 @@
+Overview of changes in lightdm 1.7.4
+
+    * Set XDG_SEAT and XDG_VTNR environment variables.
+    * Add initial support for Unity (i.e. Mir based) seats.
+    * Add a greeter wrapper option.
+
 Overview of changes in lightdm 1.7.3
 
     * Load configuration from /etc/lightdm/lightdm.conf.d.
index 32488aa40530c6e9d303f7d06e9eab9f75fbdc8c..a9b56328682fb997e270fd4d672593ebe5a90cf7 100644 (file)
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 
-AC_INIT(lightdm, 1.7.3)
+AC_INIT(lightdm, 1.7.4)
 AC_CONFIG_MACRO_DIR(m4)
 AC_CONFIG_HEADER(config.h)
 AM_INIT_AUTOMAKE([1.11 no-dist-gzip dist-xz foreign])
index e9d2f88080b967a16be44f87ad144de6184a9d6d..20148a02dc7ee3fa2888a9c96632fbba4d3d758f 100644 (file)
@@ -44,6 +44,8 @@
 # xdmcp-manager = XDMCP manager to connect to (implies xserver-allow-tcp=true)
 # xdmcp-port = XDMCP UDP/IP port to communicate on
 # xdmcp-key = Authentication key to use for XDM-AUTHENTICATION-1 (stored in keys.conf)
+# unity-compositor-command = Unity compositor command to run (can also contain arguments e.g. unity-system-compositor -special-option)
+# unity-compositor-timeout = Number of seconds to wait for compositor to start
 # greeter-session = Session to load for greeter
 # greeter-hide-users = True to hide the user list
 # greeter-allow-guest = True if the greeter should show a guest login option
@@ -75,6 +77,8 @@
 #xdmcp-manager=
 #xdmcp-port=177
 #xdmcp-key=
+#unity-compositor-command=unity-system-compositor
+#unity-compositor-timeout=60
 #greeter-session=example-gtk-gnome
 #greeter-hide-users=false
 #greeter-allow-guest=true
index 90d2a5c65b7ea09ee9d4d7fc9c21d6906b07887e..0d7406dce6c2c30e64e30bab5126d6051c31cda1 100644 (file)
--- a/po/af.po
+++ b/po/af.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 12a1010a2eafc3a0610178a46b23bcc90e6a926e..0b796b61a34a35c7ecdd5966d88018ccb0390da1 100644 (file)
--- a/po/an.po
+++ b/po/an.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index dd9b1a33a6eccd60e8da6111a5eb6b8b0fb4924d..1fb38186e3c0a2282c93eeb8e2b1d4c6e562e0fd 100644 (file)
--- a/po/ar.po
+++ b/po/ar.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index e9f94c2836ba190872cdaea92cd2fd4665c4ed3f..ce1facad51e713c6850dadc07eacdaa711c426ca 100644 (file)
--- a/po/ast.po
+++ b/po/ast.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 48c7e1ef4560530145eab47d97975dbbe3333216..2c0d6893cff680de9bc3f54a3a189eef12ae7c6e 100644 (file)
--- a/po/az.po
+++ b/po/az.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 92f42e20801d86c0346aeb4b80b2fa81bd3ca2e6..2e56a8f576479b3d50ada042d51b007a29b7e37d 100644 (file)
--- a/po/be.po
+++ b/po/be.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index f7a23b65c0101938b45c0981744b10338db6aecb..b97cc7843a3caa5b7d12dc5a6da58fcea84f0b66 100644 (file)
--- a/po/bg.po
+++ b/po/bg.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 48a03d04de3280e7c80b09157ddf2af0868b5ca8..cfe9bee2bc7c909b65005a075ae14c7bcc358036 100644 (file)
--- a/po/bn.po
+++ b/po/bn.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 592ccd6110bce2a72be57e15e08acb08073d40e9..80a705be55758156c3b79265571c178273e63efe 100644 (file)
--- a/po/bo.po
+++ b/po/bo.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 2c224e46928210c015c8e41dd8591ac9f7bf5052..d06a0b9acfe9120782567b047b3ccdaff5ffeb77 100644 (file)
--- a/po/br.po
+++ b/po/br.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 125628a656b2a69a535a9a33553fc7dbe2b4aa35..8aa16ec99253b6036010bc63b078d8e268354460 100644 (file)
--- a/po/bs.po
+++ b/po/bs.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 9850e433cebc1674b4c9e5493d0d42ba23b73510..66dc068dcbc2cd590e2d10c9ae495a12dfc68f2d 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 85c27988d67905320e55d770faf5340e90f2b0fc..7c72fabbf52844066d27d53c481913de9d0c93dd 100644 (file)
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 6abeecdf142720a106605887f1e609174e055ce6..98611f0c5d12c9857e69eb3ffe1b926beb875791 100644 (file)
--- a/po/ckb.po
+++ b/po/ckb.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 6ae86aaefe9879065d02d67dac08f5e9c4236605..6e222e9fcd01f11130461407f9897b4bd9890f1c 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 70c669a8771247850bf196dc5d73d422b5f04321..d27529fe51b4df7a5569983e28767fafd120e1f9 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -15,8 +15,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 576343a283716ce861573cdb6e4b0dd64215df42..bea6c172748eeda2eaaea467e61e5a340c22fd5f 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 48d526aa8017739146b8cd00b3167636a9f84057..1a98b270b8536279444d465eed7a92964cd7937c 100644 (file)
--- a/po/el.po
+++ b/po/el.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index cb25e41c8d5dc7e11500e74d2f4ca0ecc456d523..9dd470f7f5e08450e23dcff43dfaa47c5407ca52 100644 (file)
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index cc433432d43414020477dc23598e999f0c836b5d..012f7746ab97ee99f7b92ddf5beb28b7bd24b936 100644 (file)
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 7ec0655cc791d417992016c0fd07ae5d1e5cd36a..0fe57cc92a2e7d3efa78e8fc2af7296647c84ffe 100644 (file)
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 801a9be802f75865248965f78ea1c52bf2714c11..f6bc92daf5b844e116d7e4092752eefd3d95f656 100644 (file)
--- a/po/eo.po
+++ b/po/eo.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index e5ee8af01004f00021be6fa268320a5f5f238cfc..0bee1264a06b422169136f80f73cae9bf8f4d5bd 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index c5d5db1e48e5a1f5716b8b421eaa3194ca9bd047..71b1a35a020b92de9c45c6f48aedd23d1d8fd79f 100644 (file)
--- a/po/et.po
+++ b/po/et.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index ee643f5f9c6cd326de7eab3e054ff985fa186ae0..ad016f7713cbba6d4e57b41d75ac5ddc153de4ff 100644 (file)
--- a/po/eu.po
+++ b/po/eu.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index ab64f3ebda447b25dc5c2577d2b037e0eba85dc1..522a2ca4af4a6ae275cb1f8b065a2208d555990f 100644 (file)
--- a/po/fa.po
+++ b/po/fa.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index ce687ae7c49eb457be8d4b3491204aaa64a01da5..c2c2bd75f8784bbc3cd11d05c80aca4488a51867 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 486af0b3204d8021089159ca10fda0cb01ad7317..8857151bf9fc632941798643ed5a221b75e1c8e0 100644 (file)
--- a/po/fo.po
+++ b/po/fo.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 9893d1035e235645341f8465389153b9ad95801a..87bc6302f12c72c45a640c0ce478a66bceb00ea6 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 8e1997586773e7a6dd4f24a74e05e6dbcae36075..650e28eaab6f1eb2a39bc9590f39d05594638a88 100644 (file)
--- a/po/fy.po
+++ b/po/fy.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 59996b5cae6efb9fe41f33e5007fa22e0ddea457..805a9b638011a3a2022ead6dcdfa9ebd9e7f2142 100644 (file)
--- a/po/gd.po
+++ b/po/gd.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index e7de81881eaec396658f7054db9943e0cf160221..bda1f90f4bea07e2897c834ec94a2ba59acac599 100644 (file)
--- a/po/gl.po
+++ b/po/gl.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 0dd58f046e5a0e88cb129900e8f30894a23ed3ac..bafbbdc7c7e7bad97fb79d6255ee0bbf784af957 100644 (file)
--- a/po/gu.po
+++ b/po/gu.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 912eaad3a7d65e1aa19224145ea862c5dac9d9d4..4f66bc1b7afe5e545ce578f445161ef3a8fdd27b 100644 (file)
--- a/po/he.po
+++ b/po/he.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index b290bc976b657064b13b692b60f71846ab605bec..f8fe066d921e0aff294d8d401e94e3bc5a135c5f 100644 (file)
--- a/po/hi.po
+++ b/po/hi.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 957b192f5fac34cf2973ef33d66fb2ddb3e10ee9..382460e995d6959e929d719f001b7848035733d5 100644 (file)
--- a/po/hr.po
+++ b/po/hr.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index c51d250f661298e540e7ac227c78e83c60e96b78..4c55b9242c3b404cecf2f7f572800340bef5275d 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 597f0e5e4fa6d1a736eb87ed18f9589fa9f3e90e..2694f4a12713f4b0c0707977ec4321b30dd91b61 100644 (file)
--- a/po/ia.po
+++ b/po/ia.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 36c6a885ad5a29c3217cf0b011fa0d98b0d21e6d..874be0daf7bcfdb2ca991402f3d7e63fa1fa39f1 100644 (file)
--- a/po/id.po
+++ b/po/id.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 8bdbecf2603838ef7676c5f7afbf4e421ca898fb..04ee94f5f7f175c3b53c43248eac010570c30c00 100644 (file)
--- a/po/is.po
+++ b/po/is.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index a63de2fcb1b48dad902b2d004e6e3ebb0505f969..c92968fb9ab512312fa96875c48927b3e4dc2031 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 65176b6616661cde8c7425173e3f47f79edae1e2..66fd153381563b1e3fe657d0c7c878143a2f8ed7 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 8a9d7e5d441c2d05893a6677302649acac881ccf..95261574b98ad96fac6ccf06524eefcb138c8245 100644 (file)
--- a/po/kk.po
+++ b/po/kk.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 89f1094eb1379aae5260cb97d6c5be0f7c282bcd..a95244a458636dd44f5d998b3c081c4a2d870f14 100644 (file)
--- a/po/km.po
+++ b/po/km.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index fd6bdd1767da5ac121569e3a9bea26bf97f762f4..b61fb4ff57851b840abb2de9f501038e4bdd7193 100644 (file)
--- a/po/kn.po
+++ b/po/kn.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 9fc848e65d62310dc924c659f79ee9c39de66cc9..968efd473e66e795c5ab05ddf1cf3acb363e53ae 100644 (file)
--- a/po/ko.po
+++ b/po/ko.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 89b7275d5ef7939d511984aa733ac01bae4f7e64..35591eecf51ab5dc75ebae97aa283199b20025e2 100644 (file)
--- a/po/ku.po
+++ b/po/ku.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index fe3c99ae24bcc859aadcfa5918d75221f624e4b0..b7973918740b1e6e7226141f877dea203c9af761 100644 (file)
--- a/po/lb.po
+++ b/po/lb.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 5f5a827d1540fdcbb77a3121c17a5271ae3d9ece..58781d8ad5c2809f319079c006097440ab95171a 100644 (file)
--- a/po/lt.po
+++ b/po/lt.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 57cfa3d200717d37e33191e4bcb8413ee6e1f14c..c01cc3763013dc9d49e7e5cef8e22c4c35290820 100644 (file)
--- a/po/lv.po
+++ b/po/lv.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 7a47fb3a71d81512b4aa2f0432447c5c7c121696..aff29c42f9254d42b63758219c715233d510b2e5 100644 (file)
--- a/po/mhr.po
+++ b/po/mhr.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index d94aa231e64e685192a2b9804bb050615fff5583..2efe871e12f62b8598e520e57b57e99e891a1874 100644 (file)
--- a/po/mi.po
+++ b/po/mi.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index bf0e3c00ef491f1c38d9094e99dc5d1647f3b046..4d56e1977875267352652d0220be60ef568b968a 100644 (file)
--- a/po/ml.po
+++ b/po/ml.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 8aa839d44c1def962bcd455440031bf9b446ed2b..a55d2ebc5e3f2c94211e797e5883f6a026cd8780 100644 (file)
--- a/po/mr.po
+++ b/po/mr.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 5afb96e3326feef766cf49046b99ecf4465190f5..a6c508545f559d3dd0d7e432bc4e41ad8a310f3a 100644 (file)
--- a/po/ms.po
+++ b/po/ms.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 7ecbf0fee8375a9acdd9dc3a480e9d02b9b0a553..75f72284d0c2c22f92e69e71157d06a61f68d2ac 100644 (file)
--- a/po/my.po
+++ b/po/my.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 3865cce285c14a75159dbd05208b9f385a0caa45..87384e28be7427c68627977183325d7717aa0cec 100644 (file)
--- a/po/nb.po
+++ b/po/nb.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 9871f3fb97de52b97e2cc999346f5be78169fec5..8d70884147441544a5c935ec56944adaafac1ed4 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 64ca3bcdd80f536b559299860f24ea3f52fd0abc..99af2661557fc8042fa36be8287403525bc16ebf 100644 (file)
--- a/po/nn.po
+++ b/po/nn.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 5045fdeec92255f86546a199fa472b21355e048d..83d6fd37d5747e6e7fbc6f90a31a1afccf1383ce 100644 (file)
--- a/po/oc.po
+++ b/po/oc.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 404a2f49d2afa6048ea8b4539c5567ddd75ae1a9..f5eece723905bff6190a333c1af82b014e470064 100644 (file)
--- a/po/pa.po
+++ b/po/pa.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 4684ca286da4a17ce80d1e0dd250e98fce40c522..db3d15929d41f3b1ddff46f85bccf8818dc1f06f 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 5cc4f7cd3170fcba9857f9298f0f2a6e87c69828..4a9c37446152bddd858cc67dce342364240069e8 100644 (file)
--- a/po/pt.po
+++ b/po/pt.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 9d1c4685a8eae9dd2865810ae37f1d822b3f4cc8..6dd25843d2ca9004af18ba95d0c4638e9155ff9b 100644 (file)
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 0d45f3566195f7dd2a6fbf12fac3f1fdc869c61d..950a2dcbc11346fee7614b0f3b80ea28a716f748 100644 (file)
--- a/po/ro.po
+++ b/po/ro.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index de4990e8907cfa56226781f4267a9f5d727abe8a..2204d671c0b264393a890d8ddc4f3907a75fa6aa 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index cfa167d5b0909f84cf909e476cb3456380e73660..13d4f8ea30c91277d22a5a467262334580cace68 100644 (file)
--- a/po/sc.po
+++ b/po/sc.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 71118fcb175d44d0d42679c59bf1e790d42d82f8..ac9e44f212fa011a199cc603871ac673cb091f80 100644 (file)
--- a/po/sd.po
+++ b/po/sd.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 848a284d1a0da3e1686ff3799ec4dde93a8ac686..ca430b3995cabbedffa5066494230e1c8caf5792 100644 (file)
--- a/po/shn.po
+++ b/po/shn.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 7e966a1452ec26d76444af91c6c3229771bee7c6..436e005c02bf6ba8a0af2d6f1ca562871e17da8d 100644 (file)
--- a/po/si.po
+++ b/po/si.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 6b695f6494e13a19d0928daadf6d3d38366d3583..75e04670c11ae1ecd518cce54e33e4d2d9ce86c3 100644 (file)
--- a/po/sk.po
+++ b/po/sk.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index df4306f2cf308eab84d34a284059e6476b8e7fc8..f3832002183497001aeb87fe3899659fb3bd52ea 100644 (file)
--- a/po/sl.po
+++ b/po/sl.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index d84d9127573c063b06e227eab0f2149e2ad25216..039b62609b1f5f57fccf0f9bbef36331eb75dfd0 100644 (file)
--- a/po/sq.po
+++ b/po/sq.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 7d72f462ffe991ddf2a3998f8a5271675c45ae73..3699ea0e5656e62472acf0ecd7cc1b003d3f0ef3 100644 (file)
--- a/po/sr.po
+++ b/po/sr.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 "Language: sr\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
index 71f4243ffc0da9c62877e2ac1de46d27dad6701b..2d48c03b82b15a3d3f6abdb7fb00d7312e05f86d 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 2eafcdd4f9ec4f8317e7018a68fe3f7bb5001995..8ccc270abb9a3243f248eab872c93114dd1ce672 100644 (file)
--- a/po/ta.po
+++ b/po/ta.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 6b111972239f33c4867e7ee860dfc214b3c52faf..e454dadf3c11b38f929040a288f903dc62ac15a7 100644 (file)
--- a/po/te.po
+++ b/po/te.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 13146758b34b904cfb783efabc5b72c188b4e027..a29f2feb82b71ab5a033b496bd3e2a7bc419e7c9 100644 (file)
--- a/po/tg.po
+++ b/po/tg.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index d89073129cb450a8262deb1cd9a385fc268027a6..3322677813805fbe63a4c1935312f6b1c769900a 100644 (file)
--- a/po/th.po
+++ b/po/th.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 1698e0060cb55a940322f137948144411ace6866..231ce287ef11c5162059a4fc921791c824e74562 100644 (file)
--- a/po/tl.po
+++ b/po/tl.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 50e84d051ce237962f945fb67a65ec9dd0b0dae1..30a7276bcc2e6d03f5fb0c73b59d2862818bb22d 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 6a3e7d1790ddfc510b3b613d10154380d14216b3..2a715a80c78b180fdcc7ab3fb4a2efdcaf7ac906 100644 (file)
--- a/po/ug.po
+++ b/po/ug.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 7eaa44d686f89e2680a1f1df71a3b95d10aae55b..081df4942c0040266b602de8a7fc79108ed5a8d1 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 982ff9794c75813e055e74bcc46c4becd3f5d68a..319915e268946b5490f5158a6c15c640aaf03220 100644 (file)
--- a/po/uz.po
+++ b/po/uz.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 22dce70580702fab617fb742688760af92ac004d..138a327ff6f09e1f0ed55e0c68df8a1d29d6b855 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 7bc1be21716215671632734137b6b8f5d6a6c0c2..4f2d053dc7ee2b234a535a10bcb54aab989f2309 100644 (file)
--- a/po/wae.po
+++ b/po/wae.po
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 67d66d39049092d92270c8b78c0af8535e1e1f50..0a50b720d40bfba4d97f9365f0fc10917f174b81 100644 (file)
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 795879cbb126930560cf54ca7a7b1549ae585c91..90d15a1de769bef32df7e0944cb7760586fb40db 100644 (file)
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index 880b093bb69e1b0f92232c00eabf4c2991d40f3c..d0a05c71274a48f9baa15b270181d78cb84142f6 100644 (file)
@@ -14,8 +14,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-24 04:49+0000\n"
-"X-Generator: Launchpad (build 16677)\n"
+"X-Launchpad-Export-Date: 2013-07-02 05:18+0000\n"
+"X-Generator: Launchpad (build 16692)\n"
 
 #: ../greeters/gtk/lightdm-gtk-greeter.c:409
 msgid "Are you sure you want to close all programs and restart the computer?"
index c18af5d9bfbe75fac8b3bd9c4563adba42bf34a1..1b7fe28465ed297ca09e3f92c4cda347f02bf8a4 100644 (file)
@@ -38,6 +38,8 @@ lightdm_SOURCES = \
        process.h \
        seat.c \
        seat.h \
+       seat-unity.c \
+       seat-unity.h \
        seat-xdmcp-session.c \
        seat-xdmcp-session.h \
        seat-xlocal.c \
index 14b78f2ba6ce08690e53610c96d65eb9efa0cb6a..465023e3b99bd44a9dae8887676c5ef095c9df4e 100644 (file)
@@ -20,6 +20,7 @@
 #include "display.h"
 #include "seat-xlocal.h"
 #include "seat-xremote.h"
+#include "seat-unity.h"
 #include "plymouth.h"
 
 enum {
@@ -148,6 +149,7 @@ display_manager_init (DisplayManager *manager)
     /* Load the seat modules */
     seat_register_module ("xlocal", SEAT_XLOCAL_TYPE);
     seat_register_module ("xremote", SEAT_XREMOTE_TYPE);
+    seat_register_module ("unity", SEAT_UNITY_TYPE);
 }
 
 static void
index 01ec727360d5e634ecaefacca18ec5ba9df87dfa..fba6f7aad1ffe470f6b37ea683a1a1b36c9cdaa4 100644 (file)
@@ -1042,6 +1042,8 @@ main (int argc, char **argv)
         config_set_string (config_get_instance (), "SeatDefaults", "xserver-command", "X");
     if (!config_has_key (config_get_instance (), "SeatDefaults", "xserver-share"))
         config_set_boolean (config_get_instance (), "SeatDefaults", "xserver-share", TRUE);
+    if (!config_has_key (config_get_instance (), "SeatDefaults", "unity-compositor-command"))
+        config_set_string (config_get_instance (), "SeatDefaults", "unity-compositor-command", "unity-system-compositor");
     if (!config_has_key (config_get_instance (), "SeatDefaults", "start-session"))
         config_set_boolean (config_get_instance (), "SeatDefaults", "start-session", TRUE);
     if (!config_has_key (config_get_instance (), "SeatDefaults", "allow-guest"))
diff --git a/src/seat-unity.c b/src/seat-unity.c
new file mode 100644 (file)
index 0000000..6f4b15e
--- /dev/null
@@ -0,0 +1,643 @@
+/*
+ * Copyright (C) 2012-2013 Robert Ancell.
+ * Author: Robert Ancell <robert.ancell@canonical.com>
+ *
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
+ * license.
+ */
+
+#include <string.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#include "seat-unity.h"
+#include "configuration.h"
+#include "xserver-local.h"
+#include "xsession.h"
+#include "vt.h"
+#include "plymouth.h"
+
+typedef enum
+{
+   USC_MESSAGE_PING = 0,
+   USC_MESSAGE_PONG = 1,
+   USC_MESSAGE_READY = 2,
+   USC_MESSAGE_SESSION_CONNECTED = 3,
+   USC_MESSAGE_SET_ACTIVE_SESSION = 4
+} USCMessageID;
+
+struct SeatUnityPrivate
+{
+    /* VT we are running on */
+    gint vt;
+
+    /* TRUE if waiting for X server to start before stopping Plymouth */
+    gboolean stopping_plymouth;
+
+    /* File to log to */
+    gchar *log_file;
+
+    /* Filename of Mir socket */
+    gchar *mir_socket_filename;
+
+    /* Pipes to communicate with compositor */
+    int to_compositor_pipe[2];
+    int from_compositor_pipe[2];
+
+    /* IO channel listening on for messages from the compositor */
+    GIOChannel *from_compositor_channel;
+
+    /* TRUE when the compositor indicates it is ready */
+    gboolean compositor_ready;
+
+    /* Buffer reading from channel */
+    guint8 *read_buffer;
+    gsize read_buffer_length;
+    gsize read_buffer_n_used;
+
+    /* Compositor process */
+    Process *compositor_process;
+
+    /* Timeout when waiting for compositor to start */
+    guint compositor_timeout;
+
+    /* Next Mir ID to use for a compositor client */
+    gint next_id;
+
+    /* TRUE if using VT switching fallback */
+    gboolean use_vt_switching;
+
+    /* The currently visible display */
+    Display *active_display;
+};
+
+G_DEFINE_TYPE (SeatUnity, seat_unity, SEAT_TYPE);
+
+static void
+seat_unity_setup (Seat *seat)
+{
+    seat_set_can_switch (seat, TRUE);
+    SEAT_CLASS (seat_unity_parent_class)->setup (seat);
+}
+
+static void
+compositor_stopped_cb (Process *process, SeatUnity *seat)
+{
+    if (seat->priv->compositor_timeout != 0)
+        g_source_remove (seat->priv->compositor_timeout);
+    seat->priv->compositor_timeout = 0;
+
+    if (seat_get_is_stopping (SEAT (seat)))
+    {
+        SEAT_CLASS (seat_unity_parent_class)->stop (SEAT (seat));
+        return;
+    }
+
+    /* If stopped before it was ready, then revert to VT mode */
+    if (!seat->priv->compositor_ready)
+    {
+        g_debug ("Compositor failed to start, switching to VT mode");
+        seat->priv->use_vt_switching = TRUE;
+        SEAT_CLASS (seat_unity_parent_class)->start (SEAT (seat));
+        return;
+    }
+
+    g_debug ("Stopping Unity seat, compositor terminated");
+
+    if (seat->priv->stopping_plymouth)
+    {
+        g_debug ("Stopping Plymouth, compositor failed to start");
+        plymouth_quit (FALSE);
+        seat->priv->stopping_plymouth = FALSE;
+    }
+
+    seat_stop (SEAT (seat));
+}
+
+static void
+compositor_run_cb (Process *process, SeatUnity *seat)
+{
+    int fd;
+
+    /* Make input non-blocking */
+    fd = open ("/dev/null", O_RDONLY);
+    dup2 (fd, STDIN_FILENO);
+    close (fd);
+
+    /* Redirect output to logfile */
+    if (seat->priv->log_file)
+    {
+         int fd;
+
+         fd = g_open (seat->priv->log_file, O_WRONLY | O_CREAT | O_TRUNC, 0600);
+         if (fd < 0)
+             g_warning ("Failed to open log file %s: %s", seat->priv->log_file, g_strerror (errno));
+         else
+         {
+             dup2 (fd, STDOUT_FILENO);
+             dup2 (fd, STDERR_FILENO);
+             close (fd);
+         }
+    }
+}
+
+static void
+write_message (SeatUnity *seat, guint16 id, const guint8 *payload, guint16 payload_length)
+{
+    guint8 *data;
+    gsize data_length = 4 + payload_length;
+
+    data = g_malloc (data_length);
+    data[0] = id >> 8;
+    data[1] = id & 0xFF;
+    data[2] = payload_length >> 8;
+    data[3] = payload_length & 0xFF;
+    memcpy (data + 4, payload, payload_length);
+
+    errno = 0;
+    if (write (seat->priv->to_compositor_pipe[1], data, data_length) != data_length)
+        g_warning ("Failed to write to compositor: %s", strerror (errno));
+}
+
+static gboolean
+read_cb (GIOChannel *source, GIOCondition condition, gpointer data)
+{
+    SeatUnity *seat = data;
+    gsize n_to_read = 0;
+    guint16 id, payload_length;
+    guint8 *payload;
+  
+    if (condition == G_IO_HUP)
+    {
+        g_debug ("Compositor closed communication channel");
+        return FALSE;
+    }
+
+    /* Work out how much required for a message */
+    if (seat->priv->read_buffer_n_used < 4)
+        n_to_read = 4 - seat->priv->read_buffer_n_used;
+    else
+    {
+        payload_length = seat->priv->read_buffer[2] << 8 | seat->priv->read_buffer[3];
+        n_to_read = 4 + payload_length - seat->priv->read_buffer_n_used;
+    }
+
+    /* Read from compositor */
+    if (n_to_read > 0)
+    {
+        gsize n_total, n_read = 0;
+        GIOStatus status;
+        GError *error = NULL;
+
+        n_total = seat->priv->read_buffer_n_used + n_to_read;
+        if (seat->priv->read_buffer_length < n_total)
+            seat->priv->read_buffer = g_realloc (seat->priv->read_buffer, n_total);
+
+        status = g_io_channel_read_chars (source,
+                                          seat->priv->read_buffer + seat->priv->read_buffer_n_used,
+                                          n_to_read,
+                                          &n_read,
+                                          &error);
+        if (error)
+            g_warning ("Failed to read from compositor: %s", error->message);
+        if (status != G_IO_STATUS_NORMAL)
+            return TRUE;
+        g_clear_error (&error);
+        seat->priv->read_buffer_n_used += n_read;
+    }
+
+    /* Read header */
+    if (seat->priv->read_buffer_n_used < 4)
+         return TRUE;
+    id = seat->priv->read_buffer[0] << 8 | seat->priv->read_buffer[1];
+    payload_length = seat->priv->read_buffer[2] << 8 | seat->priv->read_buffer[3];
+
+    /* Read payload */
+    if (seat->priv->read_buffer_n_used < 4 + payload_length)
+        return TRUE;
+    payload = seat->priv->read_buffer + 4;
+
+    switch (id)
+    {
+    case USC_MESSAGE_PING:
+        g_debug ("PING!");
+        write_message (seat, USC_MESSAGE_PONG, NULL, 0);
+        break;
+    case USC_MESSAGE_PONG:
+        g_debug ("PONG!");
+        break;
+    case USC_MESSAGE_READY:
+        g_debug ("READY");
+        if (!seat->priv->compositor_ready)
+        {
+            seat->priv->compositor_ready = TRUE;
+            g_debug ("Compositor ready");
+            g_source_remove (seat->priv->compositor_timeout);
+            seat->priv->compositor_timeout = 0;
+            SEAT_CLASS (seat_unity_parent_class)->start (SEAT (seat));
+        }
+        break;
+    case USC_MESSAGE_SESSION_CONNECTED:
+        g_debug ("SESSION CONNECTED");
+        break;
+    default:
+        g_warning ("Ingoring unknown message %d with %d octets from system compositor", id, payload_length);
+        break;
+    }
+
+    /* Clear buffer */
+    seat->priv->read_buffer_n_used = 0;
+
+    return TRUE;
+}
+
+static gchar *
+get_absolute_command (const gchar *command)
+{
+    gchar **tokens;
+    gchar *absolute_binary, *absolute_command = NULL;
+
+    tokens = g_strsplit (command, " ", 2);
+
+    absolute_binary = g_find_program_in_path (tokens[0]);
+    if (absolute_binary)
+    {
+        if (tokens[1])
+            absolute_command = g_strjoin (" ", absolute_binary, tokens[1], NULL);
+        else
+            absolute_command = g_strdup (absolute_binary);
+        g_free (absolute_binary);
+    }
+    else
+        absolute_command = g_strdup (command);
+
+    g_strfreev (tokens);
+
+    return absolute_command;
+}
+
+static gboolean
+compositor_timeout_cb (gpointer data)
+{
+    SeatUnity *seat = data;
+
+    /* Stop the compositor - it is not working */
+    process_stop (seat->priv->compositor_process);
+
+    return TRUE;
+}
+
+static gboolean
+seat_unity_start (Seat *seat)
+{
+    const gchar *compositor_command;
+    gchar *command, *absolute_command, *dir;
+    gboolean result;
+    int timeout;
+
+    /* Replace Plymouth if it is running */
+    if (plymouth_get_is_active () && plymouth_has_active_vt ())
+    {
+        gint active_vt = vt_get_active ();
+        if (active_vt >= vt_get_min ())
+        {
+            g_debug ("Compositor will replace Plymouth");
+            SEAT_UNITY (seat)->priv->vt = active_vt;
+            plymouth_deactivate ();
+        }
+        else
+            g_debug ("Plymouth is running on VT %d, but this is less than the configured minimum of %d so not replacing it", active_vt, vt_get_min ());
+    }
+    if (SEAT_UNITY (seat)->priv->vt < 0)
+        SEAT_UNITY (seat)->priv->vt = vt_get_unused ();
+    if (SEAT_UNITY (seat)->priv->vt < 0)
+    {
+        g_debug ("Failed to get a VT to run on");
+        return FALSE;
+    }
+    vt_ref (SEAT_UNITY (seat)->priv->vt);
+
+    /* Create pipes to talk to compositor */
+    if (pipe (SEAT_UNITY (seat)->priv->to_compositor_pipe) < 0 || pipe (SEAT_UNITY (seat)->priv->from_compositor_pipe) < 0)
+    {
+        g_debug ("Failed to create compositor pipes: %s", g_strerror (errno));
+        return FALSE;
+    }
+
+    /* Don't allow the daemon end of the pipes to be accessed in the compositor */
+    fcntl (SEAT_UNITY (seat)->priv->to_compositor_pipe[1], F_SETFD, FD_CLOEXEC);
+    fcntl (SEAT_UNITY (seat)->priv->from_compositor_pipe[0], F_SETFD, FD_CLOEXEC);
+
+    /* Listen for messages from the compositor */
+    SEAT_UNITY (seat)->priv->from_compositor_channel = g_io_channel_unix_new (SEAT_UNITY (seat)->priv->from_compositor_pipe[0]);
+    g_io_add_watch (SEAT_UNITY (seat)->priv->from_compositor_channel, G_IO_IN | G_IO_HUP, read_cb, seat);
+
+    /* Setup logging */
+    dir = config_get_string (config_get_instance (), "LightDM", "log-directory");
+    SEAT_UNITY (seat)->priv->log_file = g_build_filename (dir, "unity-system-compositor.log", NULL);
+    g_debug ("Logging to %s", SEAT_UNITY (seat)->priv->log_file);
+    g_free (dir);
+
+    SEAT_UNITY (seat)->priv->mir_socket_filename = g_strdup ("/tmp/mir_socket"); // FIXME: Use this socket by default as XMir is hardcoded to this
+    timeout = seat_get_integer_property (seat, "unity-compositor-timeout");
+    compositor_command = seat_get_string_property (seat, "unity-compositor-command");
+    command = g_strdup_printf ("%s --from-dm-fd %d --to-dm-fd %d --vt %d", compositor_command, SEAT_UNITY (seat)->priv->to_compositor_pipe[0], SEAT_UNITY (seat)->priv->from_compositor_pipe[1], SEAT_UNITY (seat)->priv->vt);
+
+    absolute_command = get_absolute_command (command);
+    g_free (command);
+
+    /* Start the compositor */
+    process_set_command (SEAT_UNITY (seat)->priv->compositor_process, absolute_command);
+    g_free (absolute_command);
+    g_signal_connect (SEAT_UNITY (seat)->priv->compositor_process, "stopped", G_CALLBACK (compositor_stopped_cb), seat);
+    g_signal_connect (SEAT_UNITY (seat)->priv->compositor_process, "run", G_CALLBACK (compositor_run_cb), seat);
+    result = process_start (SEAT_UNITY (seat)->priv->compositor_process, FALSE);
+
+    /* Close compostor ends of the pipes */
+    close (SEAT_UNITY (seat)->priv->to_compositor_pipe[0]);
+    SEAT_UNITY (seat)->priv->to_compositor_pipe[0] = 0;
+    close (SEAT_UNITY (seat)->priv->from_compositor_pipe[1]);
+    SEAT_UNITY (seat)->priv->from_compositor_pipe[1] = 0;
+
+    if (!result)
+        return FALSE;
+
+    /* Connect to the compositor */
+    timeout = seat_get_integer_property (seat, "unity-compositor-timeout");
+    if (timeout <= 0)
+        timeout = 60;
+    g_debug ("Waiting for system compositor for %ds", timeout);
+    SEAT_UNITY (seat)->priv->compositor_timeout = g_timeout_add (timeout * 1000, compositor_timeout_cb, seat);
+
+    return TRUE;
+}
+
+static DisplayServer *
+seat_unity_create_display_server (Seat *seat)
+{
+    XServerLocal *xserver;
+    const gchar *command = NULL, *layout = NULL, *config_file = NULL, *xdmcp_manager = NULL, *key_name = NULL;
+    gboolean allow_tcp;
+    gint port = 0;
+    gchar *id;
+
+    g_debug ("Starting X server on Unity compositor");
+
+    xserver = xserver_local_new ();
+
+    if (!SEAT_UNITY (seat)->priv->use_vt_switching)
+    {
+        id = g_strdup_printf ("%d", SEAT_UNITY (seat)->priv->next_id);
+        SEAT_UNITY (seat)->priv->next_id++;
+        xserver_local_set_mir_id (xserver, id);
+        xserver_local_set_mir_socket (xserver, SEAT_UNITY (seat)->priv->mir_socket_filename);
+        g_free (id);
+    }
+
+    command = seat_get_string_property (seat, "xserver-command");
+    if (command)
+        xserver_local_set_command (xserver, command);
+
+    layout = seat_get_string_property (seat, "xserver-layout");
+    if (layout)
+        xserver_local_set_layout (xserver, layout);
+
+    config_file = seat_get_string_property (seat, "xserver-config");
+    if (config_file)
+        xserver_local_set_config (xserver, config_file);
+
+    allow_tcp = seat_get_boolean_property (seat, "xserver-allow-tcp");
+    xserver_local_set_allow_tcp (xserver, allow_tcp);
+
+    xdmcp_manager = seat_get_string_property (seat, "xdmcp-manager");
+    if (xdmcp_manager)
+        xserver_local_set_xdmcp_server (xserver, xdmcp_manager);
+
+    port = seat_get_integer_property (seat, "xdmcp-port");
+    if (port > 0)
+        xserver_local_set_xdmcp_port (xserver, port);
+
+    key_name = seat_get_string_property (seat, "xdmcp-key");
+    if (key_name)
+    {
+        gchar *dir, *path;
+        GKeyFile *keys;
+        gboolean result;
+        GError *error = NULL;
+
+        dir = config_get_string (config_get_instance (), "LightDM", "config-directory");
+        path = g_build_filename (dir, "keys.conf", NULL);
+        g_free (dir);
+
+        keys = g_key_file_new ();
+        result = g_key_file_load_from_file (keys, path, G_KEY_FILE_NONE, &error);
+        if (error)
+            g_debug ("Error getting key %s", error->message);
+        g_clear_error (&error);
+
+        if (result)
+        {
+            gchar *key = NULL;
+
+            if (g_key_file_has_key (keys, "keyring", key_name, NULL))
+                key = g_key_file_get_string (keys, "keyring", key_name, NULL);
+            else
+                g_debug ("Key %s not defined", key_name);
+
+            if (key)
+                xserver_local_set_xdmcp_key (xserver, key);
+            g_free (key);
+        }
+
+        g_free (path);
+        g_key_file_free (keys);
+    }
+
+    return DISPLAY_SERVER (xserver);
+}
+
+static Session *
+seat_unity_create_session (Seat *seat, Display *display)
+{
+    XServerLocal *xserver;
+    XSession *session;
+    int vt_number;
+    gchar *t;
+
+    xserver = XSERVER_LOCAL (display_get_display_server (display));
+
+    if (SEAT_UNITY (seat)->priv->use_vt_switching)
+        vt_number = xserver_local_get_vt (xserver);
+    else
+        vt_number = SEAT_UNITY (seat)->priv->vt;
+
+    session = xsession_new ();
+    t = g_strdup_printf ("/dev/tty%d", vt_number);
+    session_set_tty (SESSION (session), t);
+    g_free (t);
+
+    /* Set variables for logind */
+    session_set_env (SESSION (session), "XDG_SEAT", "seat0");
+    t = g_strdup_printf ("%d", vt_number);
+    session_set_env (SESSION (session), "XDG_VTNR", t);
+    g_free (t);
+
+    return SESSION (session);
+}
+
+static void
+seat_unity_set_active_display (Seat *seat, Display *display)
+{
+    XServerLocal *xserver;
+    const gchar *id;
+
+    /* If no compositor, have to use VT switching */
+    if (SEAT_UNITY (seat)->priv->use_vt_switching)
+    {
+        gint vt = xserver_local_get_vt (XSERVER_LOCAL (display_get_display_server (display)));
+        if (vt >= 0)
+            vt_set_active (vt);
+
+        SEAT_CLASS (seat_unity_parent_class)->set_active_display (seat, display);
+        return;
+    }
+
+    if (display == SEAT_UNITY (seat)->priv->active_display)
+        return;
+    SEAT_UNITY (seat)->priv->active_display = display;
+
+    xserver = XSERVER_LOCAL (display_get_display_server (display));
+    id = xserver_local_get_mir_id (xserver);
+
+    g_debug ("Switching to Mir session %s", id);
+    write_message (SEAT_UNITY (seat), USC_MESSAGE_SET_ACTIVE_SESSION, id, strlen (id));
+
+    SEAT_CLASS (seat_unity_parent_class)->set_active_display (seat, display);
+}
+
+static Display *
+seat_unity_get_active_display (Seat *seat)
+{
+    if (SEAT_UNITY (seat)->priv->use_vt_switching)
+    {
+        gint vt;
+        GList *link;
+        vt = vt_get_active ();
+        if (vt < 0)
+            return NULL;
+
+        for (link = seat_get_displays (seat); link; link = link->next)
+        {
+            Display *display = link->data;
+            XServerLocal *xserver;
+
+            xserver = XSERVER_LOCAL (display_get_display_server (display));
+            if (xserver_local_get_vt (xserver) == vt)
+                return display;
+        }
+
+        return NULL;
+    }
+
+    return SEAT_UNITY (seat)->priv->active_display;
+}
+
+static void
+seat_unity_run_script (Seat *seat, Display *display, Process *script)
+{
+    const gchar *path;
+    XServerLocal *xserver;
+
+    xserver = XSERVER_LOCAL (display_get_display_server (display));
+    path = xserver_local_get_authority_file_path (xserver);
+    process_set_env (script, "DISPLAY", xserver_get_address (XSERVER (xserver)));
+    process_set_env (script, "XAUTHORITY", path);
+
+    SEAT_CLASS (seat_unity_parent_class)->run_script (seat, display, script);
+}
+
+static void
+seat_unity_stop (Seat *seat)
+{
+    /* Stop the compositor first */
+    if (process_get_is_running (SEAT_UNITY (seat)->priv->compositor_process))
+    {
+        process_stop (SEAT_UNITY (seat)->priv->compositor_process);
+        return;
+    }
+
+    SEAT_CLASS (seat_unity_parent_class)->stop (seat);
+}
+
+static void
+seat_unity_display_removed (Seat *seat, Display *display)
+{
+    if (seat_get_is_stopping (seat))
+        return;
+
+    /* If this is the only display and it failed to start then stop this seat */
+    if (g_list_length (seat_get_displays (seat)) == 0 && !display_get_is_ready (display))
+    {
+        g_debug ("Stopping Unity seat, failed to start a display");
+        seat_stop (seat);
+        return;
+    }
+
+    /* Show a new greeter */
+    if (display == seat_get_active_display (seat))
+    {
+        g_debug ("Active display stopped, switching to greeter");
+        seat_switch_to_greeter (seat);
+    }
+}
+
+static void
+seat_unity_init (SeatUnity *seat)
+{
+    seat->priv = G_TYPE_INSTANCE_GET_PRIVATE (seat, SEAT_UNITY_TYPE, SeatUnityPrivate);
+    seat->priv->vt = -1;
+    seat->priv->compositor_process = process_new ();
+}
+
+static void
+seat_unity_finalize (GObject *object)
+{
+    SeatUnity *seat = SEAT_UNITY (object);
+
+    if (seat->priv->vt >= 0)
+        vt_unref (seat->priv->vt);
+    g_free (seat->priv->log_file);
+    g_free (seat->priv->mir_socket_filename);
+    close (seat->priv->to_compositor_pipe[0]);
+    close (seat->priv->to_compositor_pipe[1]);
+    close (seat->priv->from_compositor_pipe[0]);
+    close (seat->priv->from_compositor_pipe[1]);
+    g_io_channel_unref (seat->priv->from_compositor_channel);
+    g_free (seat->priv->read_buffer);
+    g_object_unref (seat->priv->compositor_process);
+
+    G_OBJECT_CLASS (seat_unity_parent_class)->finalize (object);
+}
+
+static void
+seat_unity_class_init (SeatUnityClass *klass)
+{
+    GObjectClass *object_class = G_OBJECT_CLASS (klass);
+    SeatClass *seat_class = SEAT_CLASS (klass);
+
+    object_class->finalize = seat_unity_finalize;
+    seat_class->setup = seat_unity_setup;
+    seat_class->start = seat_unity_start;
+    seat_class->create_display_server = seat_unity_create_display_server;
+    seat_class->create_session = seat_unity_create_session;
+    seat_class->set_active_display = seat_unity_set_active_display;
+    seat_class->get_active_display = seat_unity_get_active_display;
+    seat_class->run_script = seat_unity_run_script;
+    seat_class->stop = seat_unity_stop;
+    seat_class->display_removed = seat_unity_display_removed;
+
+    g_type_class_add_private (klass, sizeof (SeatUnityPrivate));
+}
diff --git a/src/seat-unity.h b/src/seat-unity.h
new file mode 100644 (file)
index 0000000..7a446cd
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2012-2013 Robert Ancell.
+ * Author: Robert Ancell <robert.ancell@canonical.com>
+ *
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
+ * license.
+ */
+
+#ifndef _SEAT_UNITY_H_
+#define _SEAT_UNITY_H_
+
+#include <glib-object.h>
+#include "seat.h"
+
+G_BEGIN_DECLS
+
+#define SEAT_UNITY_TYPE (seat_unity_get_type())
+#define SEAT_UNITY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SEAT_UNITY_TYPE, SeatUnity))
+
+typedef struct SeatUnityPrivate SeatUnityPrivate;
+
+typedef struct
+{
+    Seat              parent_instance;
+    SeatUnityPrivate *priv;
+} SeatUnity;
+
+typedef struct
+{
+    SeatClass parent_class;
+} SeatUnityClass;
+
+GType seat_unity_get_type (void);
+
+G_END_DECLS
+
+#endif /* _SEAT_UNITY_H_ */
index 2db24ae251b86f1d30374e010128742bf9e908b2..a9bd56548141149a6a9bdf7761fca99758ef484f 100644 (file)
@@ -56,6 +56,12 @@ struct XServerLocalPrivate
     /* XDMCP key to use */
     gchar *xdmcp_key;
 
+    /* ID to report to Mir */
+    gchar *mir_id;
+
+    /* Filename of socket Mir is listening on */
+    gchar *mir_socket;
+
     /* TRUE when received ready signal */
     gboolean got_signal;
 
@@ -249,6 +255,35 @@ xserver_local_set_xdmcp_key (XServerLocal *server, const gchar *key)
     server->priv->xdmcp_key = g_strdup (key);
 }
 
+void
+xserver_local_set_mir_id (XServerLocal *server, const gchar *id)
+{
+    g_return_if_fail (server != NULL);
+    g_free (server->priv->mir_id);
+    server->priv->mir_id = g_strdup (id);
+
+    if (server->priv->have_vt_ref)
+    {
+        vt_unref (server->priv->vt);
+        server->priv->have_vt_ref = FALSE;
+    }
+    server->priv->vt = -1;
+}
+
+const gchar *xserver_local_get_mir_id (XServerLocal *server)
+{
+    g_return_val_if_fail (server != NULL, NULL);
+    return server->priv->mir_id; 
+}
+
+void
+xserver_local_set_mir_socket (XServerLocal *server, const gchar *socket)
+{
+    g_return_if_fail (server != NULL);
+    g_free (server->priv->mir_socket);
+    server->priv->mir_socket = g_strdup (socket);
+}
+
 gint
 xserver_local_get_vt (XServerLocal *server)
 {
@@ -458,6 +493,13 @@ xserver_local_start (DisplayServer *display_server)
     if (server->priv->authority_file)
         g_string_append_printf (command, " -auth %s", server->priv->authority_file);
 
+    /* Setup for running inside Mir */
+    if (server->priv->mir_id)
+        g_string_append_printf (command, " -mir %s", server->priv->mir_id);
+
+    if (server->priv->mir_socket)
+        g_string_append_printf (command, " -mirSocket %s", server->priv->mir_socket);
+
     /* Connect to a remote server using XDMCP */
     if (server->priv->xdmcp_server != NULL)
     {
@@ -546,6 +588,8 @@ xserver_local_finalize (GObject *object)
     g_free (self->priv->layout);
     g_free (self->priv->xdmcp_server);
     g_free (self->priv->xdmcp_key);
+    g_free (self->priv->mir_id);
+    g_free (self->priv->mir_socket);
     g_free (self->priv->authority_file);
     if (self->priv->have_vt_ref)
         vt_unref (self->priv->vt);
index 0a60aa3e17456019fc1a25a966eaa913e9fc63e2..43c0744a47cdc59590ba2459d2895787df1053dc 100644 (file)
@@ -61,6 +61,12 @@ guint xserver_local_get_xdmcp_port (XServerLocal *server);
 
 void xserver_local_set_xdmcp_key (XServerLocal *server, const gchar *key);
 
+void xserver_local_set_mir_id (XServerLocal *server, const gchar *id);
+
+const gchar *xserver_local_get_mir_id (XServerLocal *server);
+
+void xserver_local_set_mir_socket (XServerLocal *server, const gchar *socket);
+
 gint xserver_local_get_vt (XServerLocal *server);
 
 const gchar *xserver_local_get_authority_file_path (XServerLocal *server);
index 8d718225db5fc26e21dd4684594a0cd53b684c96..67dd342ce1798f37d004931b444ca8996dff67d9 100644 (file)
@@ -153,7 +153,13 @@ TESTS = \
        test-python-power-no-login1 \
        test-python-power-no-services \
        test-open-file-descriptors \
-       test-xdmcp-open-file-descriptors
+       test-xdmcp-open-file-descriptors \
+       test-unity-compositor-command \
+       test-unity-compositor-fail-start \
+       test-unity-compositor-fail-ready \
+       test-unity-autologin \
+       test-unity-login \
+       test-unity-switch
 
 #      test-session-exit-error
 #      test-greeter-no-exit
@@ -352,6 +358,12 @@ EXTRA_DIST = \
        scripts/switch-to-user-logout.conf \
        scripts/switch-to-user-no-password.conf \
        scripts/system-xauthority.conf \
+       scripts/unity-autologin.conf \
+       scripts/unity-compositor-command.conf \
+       scripts/unity-compositor-fail-ready.conf \
+       scripts/unity-compositor-fail-start.conf \
+       scripts/unity-login.conf \
+       scripts/unity-switch.conf \
        scripts/users.conf \
        scripts/util-path.conf \
        scripts/user-renamed.conf \
diff --git a/tests/scripts/unity-autologin.conf b/tests/scripts/unity-autologin.conf
new file mode 100644 (file)
index 0000000..481e362
--- /dev/null
@@ -0,0 +1,36 @@
+#
+# Check can automatically login with Unity seat type
+#
+
+[SeatDefaults]
+type=unity
+autologin-user=have-password1
+user-session=default
+
+#?RUNNER DAEMON-START
+
+# System compositor starts
+#?UNITY-SYSTEM-COMPOSITOR START
+#?*UNITY-SYSTEM-COMPOSITOR READY
+
+# X server starts
+#?XSERVER-0 START MIR-ID=0
+#?XSERVER-0 INDICATE-READY
+   
+# LightDM connects to X server
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Session starts
+#?SESSION-X-0 START USER=have-password1
+#?XSERVER-0 ACCEPT-CONNECT
+#?SESSION-X-0 CONNECT-XSERVER
+
+# System compositor switches to session
+#?UNITY-SYSTEM-COMPOSITOR SET-ACTIVE-SESSION ID=0
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/unity-compositor-command.conf b/tests/scripts/unity-compositor-command.conf
new file mode 100644 (file)
index 0000000..a768993
--- /dev/null
@@ -0,0 +1,38 @@
+#
+# Check can set the unity compositor command
+#
+
+[SeatDefaults]
+type=unity
+user-session=default
+unity-compositor-command=unity-system-compositor --test
+
+#?RUNNER DAEMON-START
+
+# System compositor starts
+#?UNITY-SYSTEM-COMPOSITOR START TEST
+#?*UNITY-SYSTEM-COMPOSITOR READY
+
+# X server starts
+#?XSERVER-0 START MIR-ID=0
+#?XSERVER-0 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER-X-0 START
+#?XSERVER-0 ACCEPT-CONNECT
+#?GREETER-X-0 CONNECT-XSERVER
+#?GREETER-X-0 CONNECT-TO-DAEMON
+#?GREETER-X-0 CONNECTED-TO-DAEMON
+
+# System compositor switches to greeter
+#?UNITY-SYSTEM-COMPOSITOR SET-ACTIVE-SESSION ID=0
+
+# Cleanup
+#?*STOP-DAEMON
+#?GREETER-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/unity-compositor-fail-ready.conf b/tests/scripts/unity-compositor-fail-ready.conf
new file mode 100644 (file)
index 0000000..bad936e
--- /dev/null
@@ -0,0 +1,35 @@
+#
+# Check falls back to VT switching when the compositor fails to indicate it is ready
+#
+
+[SeatDefaults]
+type=unity
+unity-compositor-timeout=1
+
+#?RUNNER DAEMON-START
+
+# System compositor starts but doesn't indicate it is ready
+#?UNITY-SYSTEM-COMPOSITOR START
+
+# Timeout and compositor is stopped
+#?UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=15
+
+# X server starts in VT mode
+#?XSERVER-0 START VT=8
+#?XSERVER-0 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER-X-0 START
+#?XSERVER-0 ACCEPT-CONNECT
+#?GREETER-X-0 CONNECT-XSERVER
+#?GREETER-X-0 CONNECT-TO-DAEMON
+#?GREETER-X-0 CONNECTED-TO-DAEMON
+
+# Cleanup
+#?*STOP-DAEMON
+#?GREETER-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/unity-compositor-fail-start.conf b/tests/scripts/unity-compositor-fail-start.conf
new file mode 100644 (file)
index 0000000..258b7f4
--- /dev/null
@@ -0,0 +1,35 @@
+#
+# Check falls back to VT switching when the compositor fails to start
+#
+
+[unity-system-compositor-config]
+return-value=1
+
+[SeatDefaults]
+type=unity
+
+#?RUNNER DAEMON-START
+
+# System compositor fails to start
+#?UNITY-SYSTEM-COMPOSITOR START
+#?UNITY-SYSTEM-COMPOSITOR EXIT CODE=1
+
+# X server starts in VT mode
+#?XSERVER-0 START VT=8
+#?XSERVER-0 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER-X-0 START
+#?XSERVER-0 ACCEPT-CONNECT
+#?GREETER-X-0 CONNECT-XSERVER
+#?GREETER-X-0 CONNECT-TO-DAEMON
+#?GREETER-X-0 CONNECTED-TO-DAEMON
+
+# Cleanup
+#?*STOP-DAEMON
+#?GREETER-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/unity-login.conf b/tests/scripts/unity-login.conf
new file mode 100644 (file)
index 0000000..4750c23
--- /dev/null
@@ -0,0 +1,50 @@
+#
+# Check can login with Unity seat type
+#
+
+[SeatDefaults]
+type=unity
+user-session=default
+
+#?RUNNER DAEMON-START
+
+# System compositor starts
+#?UNITY-SYSTEM-COMPOSITOR START
+#?*UNITY-SYSTEM-COMPOSITOR READY
+
+# X server starts
+#?XSERVER-0 START MIR-ID=0
+#?XSERVER-0 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER-X-0 START
+#?XSERVER-0 ACCEPT-CONNECT
+#?GREETER-X-0 CONNECT-XSERVER
+#?GREETER-X-0 CONNECT-TO-DAEMON
+#?GREETER-X-0 CONNECTED-TO-DAEMON
+
+# System compositor switches to greeter
+#?UNITY-SYSTEM-COMPOSITOR SET-ACTIVE-SESSION ID=0
+
+# Log into account with a password
+#?*GREETER-X-0 AUTHENTICATE USERNAME=have-password1
+#?GREETER-X-0 SHOW-PROMPT TEXT="Password:"
+#?*GREETER-X-0 RESPOND TEXT="password"
+#?GREETER-X-0 AUTHENTICATION-COMPLETE USERNAME=have-password1 AUTHENTICATED=TRUE
+#?*GREETER-X-0 START-SESSION
+#?GREETER-X-0 TERMINATE SIGNAL=15
+
+# Session starts
+#?SESSION-X-0 START USER=have-password1
+#?XSERVER-0 ACCEPT-CONNECT
+#?SESSION-X-0 CONNECT-XSERVER
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/unity-switch.conf b/tests/scripts/unity-switch.conf
new file mode 100644 (file)
index 0000000..939738c
--- /dev/null
@@ -0,0 +1,91 @@
+#
+# Check system compositor correctly switches
+#
+
+[SeatDefaults]
+type=unity
+autologin-user=have-password1
+user-session=default
+
+#?RUNNER DAEMON-START
+
+# System compositor starts
+#?UNITY-SYSTEM-COMPOSITOR START
+#?*UNITY-SYSTEM-COMPOSITOR READY
+
+# X server starts
+#?XSERVER-0 START MIR-ID=0
+#?XSERVER-0 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Session starts
+#?SESSION-X-0 START USER=have-password1
+#?XSERVER-0 ACCEPT-CONNECT
+#?SESSION-X-0 CONNECT-XSERVER
+
+# System compositor switches to session
+#?UNITY-SYSTEM-COMPOSITOR SET-ACTIVE-SESSION ID=0
+
+# Show the greeter
+#?*SWITCH-TO-GREETER
+#?RUNNER SWITCH-TO-GREETER
+
+# New X server starts
+#?XSERVER-1 START MIR-ID=1
+#?XSERVER-1 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER-1 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER-X-1 START
+#?XSERVER-1 ACCEPT-CONNECT
+#?GREETER-X-1 CONNECT-XSERVER
+#?GREETER-X-1 CONNECT-TO-DAEMON
+#?GREETER-X-1 CONNECTED-TO-DAEMON
+
+# System compositor switches to greeter
+#?UNITY-SYSTEM-COMPOSITOR SET-ACTIVE-SESSION ID=1
+
+# Login
+#?*GREETER-X-1 AUTHENTICATE USERNAME=have-password2
+#?GREETER-X-1 SHOW-PROMPT TEXT="Password:"
+#?*GREETER-X-1 RESPOND TEXT="password"
+#?GREETER-X-1 AUTHENTICATION-COMPLETE USERNAME=have-password2 AUTHENTICATED=TRUE
+#?*GREETER-X-1 START-SESSION
+#?GREETER-X-1 TERMINATE SIGNAL=15
+
+# New session starts
+#?SESSION-X-1 START USER=have-password2
+#?XSERVER-1 ACCEPT-CONNECT
+#?SESSION-X-1 CONNECT-XSERVER
+
+# Logout of new session
+#?*SESSION-X-1 LOGOUT
+#?XSERVER-1 TERMINATE SIGNAL=15
+
+# X server starts
+#?XSERVER-1 START MIR-ID=2
+#?XSERVER-1 INDICATE-READY
+#?XSERVER-1 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER-X-1 START
+#?XSERVER-1 ACCEPT-CONNECT
+#?GREETER-X-1 CONNECT-XSERVER
+#?GREETER-X-1 CONNECT-TO-DAEMON
+#?GREETER-X-1 CONNECTED-TO-DAEMON
+
+# System compositor switches to greeter
+#?UNITY-SYSTEM-COMPOSITOR SET-ACTIVE-SESSION ID=2
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?GREETER-X-1 TERMINATE SIGNAL=15
+#?XSERVER-1 TERMINATE SIGNAL=15
+#?UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
index 30235524e68fc65821d58302a3b684f8c70604c0..4b65fa0a22918e6cc12cd3aa9ed021c388ccd1dc 100644 (file)
@@ -1,5 +1,18 @@
-noinst_PROGRAMS = dbus-env test-runner X Xvnc test-greeter-wrapper test-gobject-greeter test-session test-script-hook guest-account initctl plymouth vnc-client
-dist_noinst_SCRIPTS = lightdm-session test-python-greeter
+noinst_PROGRAMS = dbus-env \
+                  initctl \
+                  plymouth \
+                  test-gobject-greeter \
+                  test-greeter-wrapper \
+                  test-runner \
+                  test-script-hook \
+                  test-session \
+                  guest-account \
+                  unity-system-compositor \
+                  vnc-client \
+                  X \
+                  Xvnc
+dist_noinst_SCRIPTS = lightdm-session \
+                      test-python-greeter
 noinst_LTLIBRARIES = libsystem.la
 
 libsystem_la_SOURCES = libsystem.c
@@ -181,6 +194,17 @@ plymouth_LDADD = \
        $(GLIB_LIBS) \
        $(GIO_UNIX_LIBS)
 
+unity_system_compositor_SOURCES = unity-system-compositor.c status.c status.h
+unity_system_compositor_CFLAGS = \
+       $(WARN_CFLAGS) \
+       $(GLIB_CFLAGS) \
+       $(GIO_CFLAGS) \
+       $(GIO_UNIX_CFLAGS)
+unity_system_compositor_LDADD = \
+       $(GLIB_LIBS) \
+       $(GIO_LIBS) \
+       $(GIO_UNIX_LIBS)
+
 vnc_client_SOURCES = vnc-client.c status.c status.h
 vnc_client_CFLAGS = \
        $(WARN_CFLAGS) \
index 5746d7a0c9b8161a703e4d15342f1ab873408890..6657423861e28800d9cfc855d710f77bec5877d0 100644 (file)
@@ -198,6 +198,7 @@ main (int argc, char **argv)
     gboolean do_xdmcp = FALSE;
     guint xdmcp_port = 0;
     gchar *xdmcp_host = NULL;
+    gchar *mir_id = NULL;
     gchar *lock_filename;
     int lock_file;
     GString *status_text;
@@ -263,10 +264,20 @@ main (int argc, char **argv)
         {
             vt_number = atoi (arg + 2);
         }
-        else if (g_str_has_prefix (arg, "-novtswitch"))
+        else if (strcmp (arg, "-novtswitch") == 0)
         {
             /* Ignore VT args */
         }
+        else if (strcmp (arg, "-mir") == 0)
+        {
+            mir_id = argv[i+1];
+            i++;
+        }
+        else if (strcmp (arg, "-mirSocket") == 0)
+        {
+            /* FIXME */
+            i++;
+        }
         else
         {
             g_printerr ("Unrecognized option: %s\n"
@@ -278,6 +289,8 @@ main (int argc, char **argv)
                         "-query host-name       Contact named host for XDMCP\n"
                         "-broadcast             Broadcast for XDMCP\n"
                         "-port port-num         UDP port number to send messages to\n"
+                        "-mir id                Mir ID to use\n"
+                        "-mirSocket name        Mir socket to use\n"
                         "vtxx                   Use virtual terminal xx instead of the next available\n",
                         arg, argv[0]);
             return EXIT_FAILURE;
@@ -292,6 +305,8 @@ main (int argc, char **argv)
     g_string_printf (status_text, "XSERVER-%d START", display_number);
     if (vt_number >= 0)
         g_string_append_printf (status_text, " VT=%d", vt_number);
+    if (mir_id != NULL)
+        g_string_append_printf (status_text, " MIR-ID=%s", mir_id);
     status_notify (status_text->str);
     g_string_free (status_text, TRUE);
 
index 67cd921e533c29aebb2ae9e532c0b41d2bef666b..ce6afd39e9b24dd40b62248110782e1829460832 100644 (file)
@@ -533,7 +533,8 @@ handle_command (const gchar *command)
     /* Forward to external processes */
     else if (g_str_has_prefix (name, "SESSION-") ||
              g_str_has_prefix (name, "GREETER-") ||
-             g_str_has_prefix (name, "XSERVER-"))
+             g_str_has_prefix (name, "XSERVER-") ||
+             strcmp (name, "UNITY-SYSTEM-COMPOSITOR") == 0)
     {
         GList *link;
         for (link = status_clients; link; link = link->next)
diff --git a/tests/src/unity-system-compositor.c b/tests/src/unity-system-compositor.c
new file mode 100644 (file)
index 0000000..2dcf8c1
--- /dev/null
@@ -0,0 +1,185 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include "status.h"
+
+static GMainLoop *loop;
+static int exit_status = EXIT_SUCCESS;
+static int from_dm_fd = -1, to_dm_fd = -1;
+
+static GKeyFile *config;
+
+static void
+quit (int status)
+{
+    exit_status = status;
+    g_main_loop_quit (loop);
+}
+
+static void
+signal_cb (int signum)
+{
+    status_notify ("UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=%d", signum);
+    quit (EXIT_SUCCESS);
+}
+
+typedef enum
+{
+   USC_MESSAGE_PING = 0,
+   USC_MESSAGE_PONG = 1,
+   USC_MESSAGE_READY = 2,
+   USC_MESSAGE_SESSION_CONNECTED = 3,
+   USC_MESSAGE_SET_ACTIVE_SESSION = 4
+} USCMessageID;
+
+static void
+write_message (guint16 id, const guint8 *payload, guint16 payload_length)
+{
+    guint8 *data;
+    gsize data_length = 4 + payload_length;
+
+    data = g_malloc (data_length);
+    data[0] = id >> 8;
+    data[1] = id & 0xFF;
+    data[2] = payload_length >> 8;
+    data[3] = payload_length & 0xFF;
+    memcpy (data + 4, payload, payload_length);
+
+    if (write (to_dm_fd, data, data_length) < 0)
+        fprintf (stderr, "Failed to write to daemon: %s\n", strerror (errno));
+}
+
+static gboolean
+read_message_cb (GIOChannel *channel, GIOCondition condition, gpointer data)
+{
+    gchar header[4], *payload;
+    gsize n_read;
+    guint16 id;
+    guint16 payload_length;
+    GError *error = NULL;
+
+    if (g_io_channel_read_chars (channel, header, 4, &n_read, &error) != G_IO_STATUS_NORMAL)
+    {
+        g_printerr ("Failed to read header: %s\n", error->message);
+        return FALSE;
+    }
+    if (n_read != 4)
+    {
+        g_printerr ("Short read for header, %d instead of expected 4\n", n_read);
+        return FALSE;
+    }
+    id = header[0] << 8 | header[1];
+    payload_length = header[2] << 8 | header[3];
+    payload = g_malloc0 (payload_length + 1);
+    if (g_io_channel_read_chars (channel, payload, payload_length, &n_read, &error) != G_IO_STATUS_NORMAL)
+    {
+        g_printerr ("Failed to read payload: %s\n", error->message);
+        return FALSE;
+    }
+    if (n_read != payload_length)
+    {
+        g_printerr ("Short read for payload, %d instead of expected %d\n", n_read, payload_length);
+        return FALSE;      
+    }
+
+    switch (id)
+    {
+    case USC_MESSAGE_PING:
+        status_notify ("UNITY-SYSTEM-COMPOSITOR PING");
+        break;
+    case USC_MESSAGE_SET_ACTIVE_SESSION:
+        status_notify ("UNITY-SYSTEM-COMPOSITOR SET-ACTIVE-SESSION ID=%s", (gchar *)payload);
+        break;
+    default:
+        g_printerr ("Ignoring message %d with %d octets\n", id, payload_length);
+        break;
+    }
+
+    free (payload);
+
+    return TRUE;
+}
+
+static void
+request_cb (const gchar *request)
+{
+    if (!request)
+    {
+        g_main_loop_quit (loop);
+        return;
+    }
+
+    if (strcmp (request, "UNITY-SYSTEM-COMPOSITOR PING") == 0)
+        write_message (USC_MESSAGE_PING, NULL, 0);
+    else if (strcmp (request, "UNITY-SYSTEM-COMPOSITOR PONG") == 0)
+        write_message (USC_MESSAGE_PONG, NULL, 0);
+    else if (strcmp (request, "UNITY-SYSTEM-COMPOSITOR READY") == 0)
+        write_message (USC_MESSAGE_READY, NULL, 0);
+}
+
+int
+main (int argc, char **argv)
+{
+    int i;
+    gboolean test = FALSE;
+
+    signal (SIGINT, signal_cb);
+    signal (SIGTERM, signal_cb);
+    signal (SIGHUP, signal_cb);
+
+#if !defined(GLIB_VERSION_2_36)
+    g_type_init ();
+#endif
+
+    loop = g_main_loop_new (NULL, FALSE);
+
+    status_connect (request_cb);
+
+    for (i = 1; i < argc; i++)
+    {
+        char *arg = argv[i];
+
+        if (strcmp (arg, "--from-dm-fd") == 0)
+        {
+            from_dm_fd = atoi (argv[i+1]);
+            i++;
+        }
+        else if (strcmp (arg, "--to-dm-fd") == 0)
+        {
+            to_dm_fd = atoi (argv[i+1]);
+            i++;
+        }
+        else if (strcmp (arg, "--vt") == 0)
+        {
+            //vt_number = atoi (argv[i+1]);
+            i++;
+        }
+        else if (strcmp (arg, "--test") == 0)
+            test = TRUE;
+        else
+            return EXIT_FAILURE;
+    }
+
+    g_io_add_watch (g_io_channel_unix_new (from_dm_fd), G_IO_IN, read_message_cb, NULL);
+
+    if (test)
+        status_notify ("UNITY-SYSTEM-COMPOSITOR START TEST");
+    else
+        status_notify ("UNITY-SYSTEM-COMPOSITOR START");
+
+    config = g_key_file_new ();
+    g_key_file_load_from_file (config, g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), "script", NULL), G_KEY_FILE_NONE, NULL);
+
+    if (g_key_file_has_key (config, "unity-system-compositor-config", "return-value", NULL))
+    {
+        int return_value = g_key_file_get_integer (config, "unity-system-compositor-config", "return-value", NULL);
+        status_notify ("UNITY-SYSTEM-COMPOSITOR EXIT CODE=%d", return_value);
+        return return_value;
+    }
+
+    g_main_loop_run (loop);
+
+    return exit_status;
+}
diff --git a/tests/test-unity-autologin b/tests/test-unity-autologin
new file mode 100755 (executable)
index 0000000..1e15178
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner unity-autologin test-gobject-greeter
diff --git a/tests/test-unity-compositor-command b/tests/test-unity-compositor-command
new file mode 100755 (executable)
index 0000000..f953527
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner unity-compositor-command test-gobject-greeter
diff --git a/tests/test-unity-compositor-fail-ready b/tests/test-unity-compositor-fail-ready
new file mode 100755 (executable)
index 0000000..25b8495
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner unity-compositor-fail-ready test-gobject-greeter
diff --git a/tests/test-unity-compositor-fail-start b/tests/test-unity-compositor-fail-start
new file mode 100755 (executable)
index 0000000..7e49cd2
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner unity-compositor-fail-start test-gobject-greeter
diff --git a/tests/test-unity-login b/tests/test-unity-login
new file mode 100755 (executable)
index 0000000..dea45ca
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner unity-login test-gobject-greeter
diff --git a/tests/test-unity-switch b/tests/test-unity-switch
new file mode 100755 (executable)
index 0000000..6f5fb3f
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner unity-switch test-gobject-greeter