on xenial help sign in
Merge trunk
33a7f65Daniel d'Andrada
debian/changelog+37
@@ -12,6 +12,43 @@ unity8 (8.00) UNRELEASED; urgency=medium
12
12
13 -- Gerry Boland <gerry.boland@canonical.com> Thu, 10 Jul 2014 10:34:18 +0100
13 -- Gerry Boland <gerry.boland@canonical.com> Thu, 10 Jul 2014 10:34:18 +0100
14
14
15+unity8 (7.90+14.10.20140717.1-0ubuntu1) utopic; urgency=low
16+
17+ [ Michał Sawicz ]
18+ * Only generate .qmltypes files manually, no need to do it build-time.
19+ It didn't work when cross-compiling either, and required builders to
20+ have otherwise unnecessary environment.
21+ * Fix CardCreator test. It got broken with a merge that got landed
22+ along side of it.
23+
24+ [ Ying-Chun Liu ]
25+ * Add reboot/shutdown (LP: #1234062)
26+
27+ [ Albert Astals ]
28+ * Make the departments test more stable
29+
30+ [ Mirco Müller ]
31+ * Fixes gap at top of sim-unlock/fullscreen notification (point 1.),
32+ fixes blocking overlay if underlying UnityMenuModel vanishes from
33+ DBus (point 2.). The third bullet-point of the bug-report, lockup of
34+ shell-UI, could not be reproduced. (LP: #1308011)
35+
36+ [ Michael Terry ]
37+ * Expose a new greeter DBus property, IsActive, which tells apps and
38+ indicators when the integrated-greeter screen is active. Useful for
39+ switching UI modes when the screen is locked.
40+ * Allow the session to bring up the greeter/lockscreen over DBus. The
41+ emergency dialer will need this support in order to cancel bringing
42+ it up.
43+
44+ [ Michael Zanetti ]
45+ * Fixes gap at top of sim-unlock/fullscreen notification (point 1.),
46+ fixes blocking overlay if underlying UnityMenuModel vanishes from
47+ DBus (point 2.). The third bullet-point of the bug-report, lockup of
48+ shell-UI, could not be reproduced. (LP: #1308011)
49+
50+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 17 Jul 2014 09:38:20 +0000
51+
15unity8 (7.90+14.10.20140714-0ubuntu1) utopic; urgency=low
52unity8 (7.90+14.10.20140714-0ubuntu1) utopic; urgency=low
16
53
17 [ Michał Sawicz ]
54 [ Michał Sawicz ]
debian/control+3−3
@@ -17,7 +17,7 @@ Build-Depends: cmake,
17 libhud-client2-dev,
17 libhud-client2-dev,
18 libpay1-dev,
18 libpay1-dev,
19 libpulse-dev,
19 libpulse-dev,
20− libqmenumodel-dev (>= 0.2.7),
20+ libqmenumodel-dev (>= 0.2.8),
21 libqt5xmlpatterns5-dev,
21 libqt5xmlpatterns5-dev,
22 libunity-api-dev (>= 7.85),
22 libunity-api-dev (>= 7.85),
23 libusermetricsoutput1-dev,
23 libusermetricsoutput1-dev,
@@ -51,7 +51,7 @@ Vcs-Browser: https://bazaar.launchpad.net/~unity-team/unity8/trunk
51
51
52Package: indicators-client
52Package: indicators-client
53Architecture: amd64 armhf i386
53Architecture: amd64 armhf i386
54−Depends: qmenumodel-qml (>= 0.2.7),
54+Depends: qmenumodel-qml (>= 0.2.8),
55 qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 0.1.49) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 0.1.49),
55 qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 0.1.49) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 0.1.49),
56 unity8 (= ${binary:Version}),
56 unity8 (= ${binary:Version}),
57 ${misc:Depends},
57 ${misc:Depends},
@@ -75,7 +75,7 @@ Provides: indicator-renderer,
75Depends: gsettings-desktop-schemas,
75Depends: gsettings-desktop-schemas,
76 libcap2-bin,
76 libcap2-bin,
77 libglib2.0-bin,
77 libglib2.0-bin,
78− qmenumodel-qml (>= 0.2.7),
78+ qmenumodel-qml (>= 0.2.8),
79 qml-module-qtquick-xmllistmodel,
79 qml-module-qtquick-xmllistmodel,
80 qtdeclarative5-gsettings1.0,
80 qtdeclarative5-gsettings1.0,
81 qtdeclarative5-qtmir-plugin (>= 0.4),
81 qtdeclarative5-qtmir-plugin (>= 0.4),
plugins/LightDM/CMakeLists.txt+1
@@ -15,6 +15,7 @@ include_directories(
15
15
16set(QMLPLUGIN_SRC
16set(QMLPLUGIN_SRC
17 ../Utils/qsortfilterproxymodelqml.cpp # FIXME evaluate a more generic approach for using other plugins
17 ../Utils/qsortfilterproxymodelqml.cpp # FIXME evaluate a more generic approach for using other plugins
18+ DBusGreeter.cpp
18 DBusGreeterList.cpp
19 DBusGreeterList.cpp
19 Greeter.cpp
20 Greeter.cpp
20 plugin.cpp
21 plugin.cpp
plugins/LightDM/DBusGreeter.cppnew file+65
@@ -0,0 +1,65 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "DBusGreeter.h"
18+#include "Greeter.h"
19+
20+#include <QDBusMessage>
21+#include <QStringList>
22+
23+DBusGreeter::DBusGreeter(Greeter *greeter, const QDBusConnection &connection, const QString &path)
24+ : QObject(greeter),
25+ m_greeter(greeter),
26+ m_connection(connection),
27+ m_path(path)
28+{
29+ connect(m_greeter, SIGNAL(isActiveChanged()), this, SLOT(isActiveChangedHandler()));
30+}
31+
32+bool DBusGreeter::isActive() const
33+{
34+ return m_greeter->isActive();
35+}
36+
37+void DBusGreeter::ShowGreeter()
38+{
39+ return Q_EMIT m_greeter->showGreeter();
40+}
41+
42+void DBusGreeter::isActiveChangedHandler()
43+{
44+ notifyPropertyChanged("IsActive", isActive());
45+ Q_EMIT isActiveChanged();
46+}
47+
48+// Manually emit a PropertiesChanged signal over DBus, because QtDBus
49+// doesn't do it for us on Q_PROPERTIES, oddly enough.
50+void DBusGreeter::notifyPropertyChanged(const QString& propertyName, const QVariant &value)
51+{
52+ QDBusMessage message;
53+ QVariantMap changedProps;
54+
55+ changedProps.insert(propertyName, value);
56+
57+ message = QDBusMessage::createSignal(m_path,
58+ "org.freedesktop.DBus.Properties",
59+ "PropertiesChanged");
60+ message << "com.canonical.UnityGreeter";
61+ message << changedProps;
62+ message << QStringList();
63+
64+ m_connection.send(message);
65+}
plugins/LightDM/DBusGreeter.hnew file+55
@@ -0,0 +1,55 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef UNITY_DBUSGREETER_H
18+#define UNITY_DBUSGREETER_H
19+
20+#include <QDBusConnection>
21+#include <QObject>
22+
23+class Greeter;
24+class QDBusInterface;
25+
26+/** This is an internal class used to talk with the indicators.
27+ */
28+
29+class DBusGreeter : public QObject
30+{
31+ Q_OBJECT
32+ Q_CLASSINFO("D-Bus Interface", "com.canonical.UnityGreeter")
33+
34+ Q_PROPERTY(bool IsActive READ isActive NOTIFY isActiveChanged) // since 14.10
35+
36+public:
37+ explicit DBusGreeter(Greeter *greeter, const QDBusConnection &connection, const QString &path);
38+
39+ bool isActive() const;
40+ Q_SCRIPTABLE void ShowGreeter(); // temporary, until we split the greeter again
41+
42+Q_SIGNALS:
43+ void isActiveChanged();
44+
45+private Q_SLOTS:
46+ void isActiveChangedHandler();
47+ void notifyPropertyChanged(const QString &propertyName, const QVariant &value);
48+
49+private:
50+ Greeter *m_greeter;
51+ QDBusConnection m_connection;
52+ QString m_path;
53+};
54+
55+#endif
plugins/LightDM/Greeter.cpp+17
@@ -25,6 +25,7 @@ public:
25 explicit GreeterPrivate(Greeter *parent);
25 explicit GreeterPrivate(Greeter *parent);
26
26
27 QLightDM::Greeter *m_greeter;
27 QLightDM::Greeter *m_greeter;
28+ bool m_active;
28 bool wasPrompted;
29 bool wasPrompted;
29 bool promptless;
30 bool promptless;
30
31
@@ -38,6 +39,7 @@ private:
38
39
39GreeterPrivate::GreeterPrivate(Greeter* parent)
40GreeterPrivate::GreeterPrivate(Greeter* parent)
40 : m_greeter(new QLightDM::Greeter(parent)),
41 : m_greeter(new QLightDM::Greeter(parent)),
42+ m_active(false),
41 wasPrompted(false),
43 wasPrompted(false),
42 promptless(false),
44 promptless(false),
43 q_ptr(parent)
45 q_ptr(parent)
@@ -60,6 +62,21 @@ Greeter::Greeter(QObject* parent)
60 d->m_greeter->connectSync();
62 d->m_greeter->connectSync();
61}
63}
62
64
65+bool Greeter::isActive() const
66+{
67+ Q_D(const Greeter);
68+ return d->m_active;
69+}
70+
71+void Greeter::setIsActive(bool active)
72+{
73+ Q_D(Greeter);
74+ if (d->m_active != active) {
75+ d->m_active = active;
76+ Q_EMIT isActiveChanged();
77+ }
78+}
79+
63bool Greeter::isAuthenticated() const
80bool Greeter::isAuthenticated() const
64{
81{
65 Q_D(const Greeter);
82 Q_D(const Greeter);
plugins/LightDM/Greeter.h+5
@@ -34,6 +34,7 @@ class Greeter : public QObject
34{
34{
35 Q_OBJECT
35 Q_OBJECT
36
36
37+ Q_PROPERTY(bool active READ isActive WRITE setIsActive NOTIFY isActiveChanged)
37 Q_PROPERTY(bool authenticated READ isAuthenticated)
38 Q_PROPERTY(bool authenticated READ isAuthenticated)
38 Q_PROPERTY(QString authenticationUser READ authenticationUser NOTIFY authenticationUserChanged)
39 Q_PROPERTY(QString authenticationUser READ authenticationUser NOTIFY authenticationUserChanged)
39 Q_PROPERTY(bool promptless READ promptless NOTIFY promptlessChanged)
40 Q_PROPERTY(bool promptless READ promptless NOTIFY promptlessChanged)
@@ -41,6 +42,7 @@ class Greeter : public QObject
41public:
42public:
42 explicit Greeter(QObject* parent=0);
43 explicit Greeter(QObject* parent=0);
43
44
45+ bool isActive() const;
44 bool isAuthenticated() const;
46 bool isAuthenticated() const;
45 QString authenticationUser() const;
47 QString authenticationUser() const;
46 bool promptless() const;
48 bool promptless() const;
@@ -49,13 +51,16 @@ public Q_SLOTS:
49 void authenticate(const QString &username=QString());
51 void authenticate(const QString &username=QString());
50 void respond(const QString &response);
52 void respond(const QString &response);
51 bool startSessionSync(const QString &session=QString());
53 bool startSessionSync(const QString &session=QString());
54+ void setIsActive(bool isActive);
52
55
53Q_SIGNALS:
56Q_SIGNALS:
54 void showMessage(const QString &text, bool isError);
57 void showMessage(const QString &text, bool isError);
55 void showPrompt(const QString &text, bool isSecret);
58 void showPrompt(const QString &text, bool isSecret);
56 void authenticationComplete();
59 void authenticationComplete();
57 void authenticationUserChanged(const QString &user);
60 void authenticationUserChanged(const QString &user);
61+ void isActiveChanged();
58 void promptlessChanged();
62 void promptlessChanged();
63+ void showGreeter();
59
64
60 // This signal is emitted by external agents like indicators, and the UI
65 // This signal is emitted by external agents like indicators, and the UI
61 // should switch to this user if possible.
66 // should switch to this user if possible.
plugins/LightDM/plugin.cpp+3
@@ -18,6 +18,7 @@
18 */
18 */
19
19
20#include "plugin.h"
20#include "plugin.h"
21+#include "DBusGreeter.h"
21#include "DBusGreeterList.h"
22#include "DBusGreeterList.h"
22#include "Greeter.h"
23#include "Greeter.h"
23#include "UsersModel.h"
24#include "UsersModel.h"
@@ -39,6 +40,8 @@ static QObject *greeter_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
39
40
40 Greeter *greeter = new Greeter();
41 Greeter *greeter = new Greeter();
41 QDBusConnection connection = QDBusConnection::sessionBus();
42 QDBusConnection connection = QDBusConnection::sessionBus();
43+ DBusGreeter *root = new DBusGreeter(greeter, connection, "/");
44+ connection.registerObject("/", root, QDBusConnection::ExportScriptableContents);
42 DBusGreeterList *list = new DBusGreeterList(greeter, connection, GREETER_LIST_DBUS_PATH);
45 DBusGreeterList *list = new DBusGreeterList(greeter, connection, GREETER_LIST_DBUS_PATH);
43 connection.registerObject(GREETER_LIST_DBUS_PATH, list, QDBusConnection::ExportScriptableContents);
46 connection.registerObject(GREETER_LIST_DBUS_PATH, list, QDBusConnection::ExportScriptableContents);
44 connection.registerService(GREETER_DBUS_SERVICE);
47 connection.registerService(GREETER_DBUS_SERVICE);
plugins/Lights/Lights.qmltypesnew file+45
@@ -0,0 +1,45 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Lights 0.1 plugins'
8+
9+Module {
10+ Component {
11+ name: "Lights"
12+ prototype: "QObject"
13+ exports: ["Lights/Lights 0.1"]
14+ isCreatable: false
15+ isSingleton: true
16+ exportMetaObjectRevisions: [0]
17+ Enum {
18+ name: "State"
19+ values: {
20+ "Off": 0,
21+ "On": 1
22+ }
23+ }
24+ Property { name: "state"; type: "State" }
25+ Property { name: "color"; type: "QColor" }
26+ Property { name: "onMillisec"; type: "int" }
27+ Property { name: "offMillisec"; type: "int" }
28+ Signal {
29+ name: "stateChanged"
30+ Parameter { name: "newState"; type: "State" }
31+ }
32+ Signal {
33+ name: "colorChanged"
34+ Parameter { name: "color"; type: "QColor" }
35+ }
36+ Signal {
37+ name: "onMillisecChanged"
38+ Parameter { name: "onMs"; type: "int" }
39+ }
40+ Signal {
41+ name: "offMillisecChanged"
42+ Parameter { name: "offMs"; type: "int" }
43+ }
44+ }
45+}
plugins/Powerd/Powerd.qmltypes+6−13
@@ -15,19 +15,12 @@ Module {
15 isSingleton: true
15 isSingleton: true
16 exportMetaObjectRevisions: [0]
16 exportMetaObjectRevisions: [0]
17 Enum {
17 Enum {
18− name: "DisplayFlag"
18+ name: "DisplayStateChangeReason"
19 values: {
19 values: {
20− "UseProximity": 1,
20+ "Unknown": 0,
21− "DisableAutoBrightness": 2,
21+ "Inactivity": 1,
22− "Bright": 4
22+ "PowerKey": 2,
23− }
23+ "Proximity": 3
24− }
25− Enum {
26− name: "DisplayFlags"
27− values: {
28− "UseProximity": 1,
29− "DisableAutoBrightness": 2,
30− "Bright": 4
31 }
24 }
32 }
25 }
33 Enum {
26 Enum {
@@ -40,7 +33,7 @@ Module {
40 Signal {
33 Signal {
41 name: "displayPowerStateChange"
34 name: "displayPowerStateChange"
42 Parameter { name: "status"; type: "int" }
35 Parameter { name: "status"; type: "int" }
43− Parameter { name: "flags"; type: "uint" }
36+ Parameter { name: "reason"; type: "int" }
44 }
37 }
45 }
38 }
46}
39}
plugins/Ubuntu/Gestures/Gestures.qmltypes+1
@@ -141,6 +141,7 @@ Module {
141 name: "touchSceneYChanged"
141 name: "touchSceneYChanged"
142 Parameter { name: "value"; type: "double" }
142 Parameter { name: "value"; type: "double" }
143 }
143 }
144+ Signal { name: "tapped" }
144 }
145 }
145 Component {
146 Component {
146 name: "PressedOutsideNotifier"
147 name: "PressedOutsideNotifier"
plugins/Unity/Session/dbusunitysessionservice.cpp+33
@@ -19,6 +19,7 @@
19
19
20// Qt
20// Qt
21#include <QDBusConnection>
21#include <QDBusConnection>
22+#include <QDBusInterface>
22
23
23DBusUnitySessionService::DBusUnitySessionService() : QObject()
24DBusUnitySessionService::DBusUnitySessionService() : QObject()
24{
25{
@@ -44,3 +45,35 @@ void DBusUnitySessionService::RequestLogout()
44{
45{
45 Q_EMIT logoutRequested(false);
46 Q_EMIT logoutRequested(false);
46}
47}
48+
49+void DBusUnitySessionService::Reboot()
50+{
51+ QDBusConnection connection = QDBusConnection::systemBus();
52+ QDBusInterface iface1 ("org.freedesktop.login1",
53+ "/org/freedesktop/login1",
54+ "org.freedesktop.login1.Manager",
55+ connection);
56+
57+ iface1.call("Reboot", false);
58+}
59+
60+void DBusUnitySessionService::RequestReboot()
61+{
62+ Q_EMIT rebootRequested(false);
63+}
64+
65+void DBusUnitySessionService::Shutdown()
66+{
67+ QDBusConnection connection = QDBusConnection::systemBus();
68+ QDBusInterface iface1 ("org.freedesktop.login1",
69+ "/org/freedesktop/login1",
70+ "org.freedesktop.login1.Manager",
71+ connection);
72+
73+ iface1.call("PowerOff", false);
74+}
75+
76+void DBusUnitySessionService::RequestShutdown()
77+{
78+ Q_EMIT shutdownRequested(false);
79+}
plugins/Unity/Session/dbusunitysessionservice.h+61−4
@@ -46,6 +46,27 @@ Q_SIGNALS:
46 */
46 */
47 void logoutRequested(bool have_inhibitors);
47 void logoutRequested(bool have_inhibitors);
48
48
49+ /**
50+ * rebootRequested signal
51+ *
52+ * This signal is emitted when some applications request the system to
53+ * reboot.
54+ * @param have_inhibitors if there are any special running applications
55+ * which inhibit the reboot.
56+ */
57+ void rebootRequested(bool have_inhibitors);
58+
59+ /**
60+ * shutdownRequested signal
61+ *
62+ * This signal is emitted when some applications request the system to
63+ * shutdown.
64+ * @param have_inhibitors if there are any special running applications
65+ * which inhibit the shutdown.
66+ */
67+ void shutdownRequested(bool have_inhibitors);
68+
69+
49 /**
70 /**
50 * logoutReady signal
71 * logoutReady signal
51 *
72 *
@@ -61,22 +82,58 @@ public Q_SLOTS:
61 * This method directly logout the system without user's confirmation.
82 * This method directly logout the system without user's confirmation.
62 * Ordinary applications should avoid calling this method. Please call
83 * Ordinary applications should avoid calling this method. Please call
63 * RequestLogout() to ask the user to decide logout or not.
84 * RequestLogout() to ask the user to decide logout or not.
64− * This method will stop all the running applications and then signal
65− * logoutReady when all the apps stopped.
66 */
85 */
67 Q_SCRIPTABLE void Logout();
86 Q_SCRIPTABLE void Logout();
68
87
88+ /**
89+ * Reboot the system.
90+ *
91+ * This method directly reboot the system without user's confirmation.
92+ * Ordinary applications should avoid calling this method. Please call
93+ * RequestReboot() to ask the user to decide reboot or not.
94+ */
95+ Q_SCRIPTABLE void Reboot();
96+
97+ /**
98+ * Shutdown the system.
99+ *
100+ * This method directly shutdown the system without user's confirmation.
101+ * Ordinary applications should avoid calling this method. Please call
102+ * RequestShutdown() to ask the user to decide shutdown or not.
103+ */
104+ Q_SCRIPTABLE void Shutdown();
105+
69 /**
106 /**
70 * Issue a logout request.
107 * Issue a logout request.
71 *
108 *
72 * This method emit the logoutRequested signal to the shell with a boolean
109 * This method emit the logoutRequested signal to the shell with a boolean
73 * which indicates if there's any inhibitors. The shell should receive
110 * which indicates if there's any inhibitors. The shell should receive
74 * this signal and display a dialog to ask the user to confirm the logout
111 * this signal and display a dialog to ask the user to confirm the logout
75− * action. If confirmed, shell can call Logout() method to kill the apps
112+ * action. If confirmed, shell can call Logout() method to logout.
76− * and then logout
77 */
113 */
78 Q_SCRIPTABLE void RequestLogout();
114 Q_SCRIPTABLE void RequestLogout();
79
115
116+ /**
117+ * Issue a reboot request.
118+ *
119+ * This method emit the rebootRequested signal to the shell with a boolean
120+ * which indicates if there's any inhibitors. The shell should receive
121+ * this signal and display a dialog to ask the user to confirm the reboot
122+ * action. If confirmed, shell can call Reboot() method to reboot
123+ */
124+ Q_SCRIPTABLE void RequestReboot();
125+
126+ /**
127+ * Issue a shutdown request.
128+ *
129+ * This method emit the shutdownRequested signal to the shell with a
130+ * boolean which indicates if there's any inhibitors.
131+ * The shell should receive
132+ * this signal and display a dialog to ask the user to confirm the reboot
133+ * action. If confirmed, shell can call Shutdown() method to reboot
134+ */
135+ Q_SCRIPTABLE void RequestShutdown();
136+
80};
137};
81
138
82#endif // DBUSUNITYSESSIONSERVICE_H
139#endif // DBUSUNITYSESSIONSERVICE_H
po/eu.po+18−18
@@ -8,23 +8,23 @@ msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11−"PO-Revision-Date: 2014-03-30 12:44+0000\n"
11+"PO-Revision-Date: 2014-07-16 18:11+0000\n"
12"Last-Translator: Ibai Oihanguren Sala <Unknown>\n"
12"Last-Translator: Ibai Oihanguren Sala <Unknown>\n"
13"Language-Team: Basque <eu@li.org>\n"
13"Language-Team: Basque <eu@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-17 06:38+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17114)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
22msgid "Pin shortcut"
22msgid "Pin shortcut"
23−msgstr ""
23+msgstr "Ainguratu lasterbidea"
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26msgid "Unpin shortcut"
26msgid "Unpin shortcut"
27−msgstr ""
27+msgstr "Askatu lasterbidea"
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -52,7 +52,7 @@ msgstr "Itxi"
52
52
53#: qml/Components/EdgeDemo.qml:172
53#: qml/Components/EdgeDemo.qml:172
54msgid "Swipe up again to close the settings screen"
54msgid "Swipe up again to close the settings screen"
55−msgstr "Arrastatu gora berriro ezarpenen leihoa ixteko"
55+msgstr "Pasatu hatza gora berriro ezarpenen leihoa ixteko"
56
56
57#: qml/Components/EdgeDemo.qml:199
57#: qml/Components/EdgeDemo.qml:199
58msgid "Left edge"
58msgid "Left edge"
@@ -61,7 +61,7 @@ msgstr "Ezkerreko ertza"
61#: qml/Components/EdgeDemo.qml:200
61#: qml/Components/EdgeDemo.qml:200
62msgid "Swipe from the left to reveal the launcher for quick access to apps"
62msgid "Swipe from the left to reveal the launcher for quick access to apps"
63msgstr ""
63msgstr ""
64−"Arrastatu ezkerretik abiarazlea erakutsi eta aplikazioak eskura berehala "
64+"Pasatu hatza ezkerretik abiarazlea erakutsi eta aplikazioak eskura berehala "
65"izateko"
65"izateko"
66
66
67#: qml/Components/EdgeDemo.qml:227
67#: qml/Components/EdgeDemo.qml:227
@@ -74,7 +74,7 @@ msgid ""
74"phone<br><br>Tap on the screen to start"
74"phone<br><br>Tap on the screen to start"
75msgstr ""
75msgstr ""
76"Jadanik ezagutzen dituzu ertzetako keinuak, eta mugikorra erabiltzen has "
76"Jadanik ezagutzen dituzu ertzetako keinuak, eta mugikorra erabiltzen has "
77−"zaitezke<br><br>Ukitu pantaila hasteko"
77+"zaitezke<br><br>Sakatu pantailan hasteko"
78
78
79#: qml/Components/Lockscreen.qml:214
79#: qml/Components/Lockscreen.qml:214
80msgid "Emergency Call"
80msgid "Emergency Call"
@@ -82,7 +82,7 @@ msgstr "Larrialdi-deia"
82
82
83#: qml/Components/Lockscreen.qml:231
83#: qml/Components/Lockscreen.qml:231
84msgid "OK"
84msgid "OK"
85−msgstr ""
85+msgstr "Ados"
86
86
87#: qml/Components/PageHeader.qml:366
87#: qml/Components/PageHeader.qml:366
88msgid "Recent searches"
88msgid "Recent searches"
@@ -99,11 +99,11 @@ msgstr "Kaixo"
99
99
100#: qml/Components/PinLockscreen.qml:198
100#: qml/Components/PinLockscreen.qml:198
101msgid "CANCEL"
101msgid "CANCEL"
102−msgstr ""
102+msgstr "UTZI"
103
103
104#: qml/Components/PinLockscreen.qml:216
104#: qml/Components/PinLockscreen.qml:216
105msgid "DONE"
105msgid "DONE"
106−msgstr ""
106+msgstr "EGINDA"
107
107
108#: qml/Components/SeeMore.qml:35
108#: qml/Components/SeeMore.qml:35
109msgid "See more"
109msgid "See more"
@@ -139,7 +139,7 @@ msgstr "Bidali"
139
139
140#: qml/Greeter/Greeter.qml:157
140#: qml/Greeter/Greeter.qml:157
141msgid "Swipe to unlock"
141msgid "Swipe to unlock"
142−msgstr ""
142+msgstr "Pasatu hatza desblokeatzeko"
143
143
144#: qml/Hud/HudParametrizedActionsPage.qml:132
144#: qml/Hud/HudParametrizedActionsPage.qml:132
145msgid "Confirm"
145msgid "Confirm"
@@ -171,27 +171,27 @@ msgstr "Sartu SIMaren PINa"
171
171
172#: qml/Panel/Indicators/MenuItemFactory.qml:583
172#: qml/Panel/Indicators/MenuItemFactory.qml:583
173msgid "In queue…"
173msgid "In queue…"
174−msgstr ""
174+msgstr "Ilaran..."
175
175
176#: qml/Panel/Indicators/MenuItemFactory.qml:587
176#: qml/Panel/Indicators/MenuItemFactory.qml:587
177msgid "Downloading"
177msgid "Downloading"
178−msgstr ""
178+msgstr "Deskargatzen"
179
179
180#: qml/Panel/Indicators/MenuItemFactory.qml:589
180#: qml/Panel/Indicators/MenuItemFactory.qml:589
181msgid "Paused, tap to resume"
181msgid "Paused, tap to resume"
182−msgstr ""
182+msgstr "Pausatuta, sakatu jarraitzeko"
183
183
184#: qml/Panel/Indicators/MenuItemFactory.qml:591
184#: qml/Panel/Indicators/MenuItemFactory.qml:591
185msgid "Canceled"
185msgid "Canceled"
186−msgstr ""
186+msgstr "Utzita"
187
187
188#: qml/Panel/Indicators/MenuItemFactory.qml:593
188#: qml/Panel/Indicators/MenuItemFactory.qml:593
189msgid "Finished"
189msgid "Finished"
190−msgstr ""
190+msgstr "Amaituta"
191
191
192#: qml/Panel/Indicators/MenuItemFactory.qml:595
192#: qml/Panel/Indicators/MenuItemFactory.qml:595
193msgid "Failed, tap to retry"
193msgid "Failed, tap to retry"
194−msgstr ""
194+msgstr "Huts egin du, sakatu berriro saiatzeko"
195
195
196#: qml/Panel/SearchIndicator.qml:27
196#: qml/Panel/SearchIndicator.qml:27
197msgid "Search"
197msgid "Search"
po/gd.po+18−17
@@ -2,29 +2,30 @@
2# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
2# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
3# This file is distributed under the same license as the unity8 package.
3# This file is distributed under the same license as the unity8 package.
4# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
4# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
5−#
5+# GunChleoc <fios@foramnagaidhlig.net>, 2014.
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11−"PO-Revision-Date: 2014-05-17 21:08+0000\n"
11+"PO-Revision-Date: 2014-07-16 14:48+0000\n"
12−"Last-Translator: Akerbeltz <fios@akerbeltz.org>\n"
12+"Last-Translator: GunChleoc <Unknown>\n"
13−"Language-Team: Gaelic; Scottish <gd@li.org>\n"
13+"Language-Team: Fòram na Gàidhlig http://www.foramnagaidhlig.net\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-17 06:38+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17114)\n"
19+"Language: gd\n"
19
20
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
22#: plugins/Unity/Launcher/launcheritem.cpp:73
22msgid "Pin shortcut"
23msgid "Pin shortcut"
23−msgstr ""
24+msgstr "Prìnich ath-ghoirid"
24
25
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26#: plugins/Unity/Launcher/launcheritem.cpp:73
26msgid "Unpin shortcut"
27msgid "Unpin shortcut"
27−msgstr ""
28+msgstr "Neo-phrìnich an ath-ghoirid"
28
29
29#: qml/Components/EdgeDemoOverlay.qml:151
30#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
31msgid "Skip intro"
@@ -86,7 +87,7 @@ msgstr "Gairm èiginn"
86
87
87#: qml/Components/Lockscreen.qml:231
88#: qml/Components/Lockscreen.qml:231
88msgid "OK"
89msgid "OK"
89−msgstr ""
90+msgstr "Ceart ma-hà"
90
91
91#: qml/Components/PageHeader.qml:366
92#: qml/Components/PageHeader.qml:366
92msgid "Recent searches"
93msgid "Recent searches"
@@ -103,11 +104,11 @@ msgstr "Shin thu"
103
104
104#: qml/Components/PinLockscreen.qml:198
105#: qml/Components/PinLockscreen.qml:198
105msgid "CANCEL"
106msgid "CANCEL"
106−msgstr ""
107+msgstr "SGUIR DHETH"
107
108
108#: qml/Components/PinLockscreen.qml:216
109#: qml/Components/PinLockscreen.qml:216
109msgid "DONE"
110msgid "DONE"
110−msgstr ""
111+msgstr "DÈANTA"
111
112
112#: qml/Components/SeeMore.qml:35
113#: qml/Components/SeeMore.qml:35
113msgid "See more"
114msgid "See more"
@@ -175,27 +176,27 @@ msgstr "Cuir a-steach SIM PIN"
175
176
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
177#: qml/Panel/Indicators/MenuItemFactory.qml:583
177msgid "In queue…"
178msgid "In queue…"
178−msgstr ""
179+msgstr "Air a' chiudha…"
179
180
180#: qml/Panel/Indicators/MenuItemFactory.qml:587
181#: qml/Panel/Indicators/MenuItemFactory.qml:587
181msgid "Downloading"
182msgid "Downloading"
182−msgstr ""
183+msgstr "'Ga luchdadh a-nuas"
183
184
184#: qml/Panel/Indicators/MenuItemFactory.qml:589
185#: qml/Panel/Indicators/MenuItemFactory.qml:589
185msgid "Paused, tap to resume"
186msgid "Paused, tap to resume"
186−msgstr ""
187+msgstr "'Na stad, thoir gnogag gus leantainn air"
187
188
188#: qml/Panel/Indicators/MenuItemFactory.qml:591
189#: qml/Panel/Indicators/MenuItemFactory.qml:591
189msgid "Canceled"
190msgid "Canceled"
190−msgstr ""
191+msgstr "Air a sgur dheth"
191
192
192#: qml/Panel/Indicators/MenuItemFactory.qml:593
193#: qml/Panel/Indicators/MenuItemFactory.qml:593
193msgid "Finished"
194msgid "Finished"
194−msgstr ""
195+msgstr "Coileanta"
195
196
196#: qml/Panel/Indicators/MenuItemFactory.qml:595
197#: qml/Panel/Indicators/MenuItemFactory.qml:595
197msgid "Failed, tap to retry"
198msgid "Failed, tap to retry"
198−msgstr ""
199+msgstr "Dh'fhàillig leis, thoir gnogag gus feuchainn a-rithist"
199
200
200#: qml/Panel/SearchIndicator.qml:27
201#: qml/Panel/SearchIndicator.qml:27
201msgid "Search"
202msgid "Search"
po/km.po+2−2
@@ -14,8 +14,8 @@ msgstr ""
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-16 07:27+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-17 06:38+0000\n"
18−"X-Generator: Launchpad (build 17112)\n"
18+"X-Generator: Launchpad (build 17114)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
po/ko.po+45−43
@@ -8,23 +8,23 @@ msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11−"PO-Revision-Date: 2013-10-10 07:04+0000\n"
11+"PO-Revision-Date: 2014-07-17 03:56+0000\n"
12−"Last-Translator: Kim Boram <boramism@gmail.com>\n"
12+"Last-Translator: MinSik CHO <Unknown>\n"
13"Language-Team: Korean <ko@li.org>\n"
13"Language-Team: Korean <ko@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-17 06:38+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17114)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
22msgid "Pin shortcut"
22msgid "Pin shortcut"
23−msgstr ""
23+msgstr "바로가기를 고정하기"
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26msgid "Unpin shortcut"
26msgid "Unpin shortcut"
27−msgstr ""
27+msgstr "바로가기를 고정 해제하기"
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -36,49 +36,51 @@ msgstr "오른쪽 끝"
36
36
37#: qml/Components/EdgeDemo.qml:114
37#: qml/Components/EdgeDemo.qml:114
38msgid "Try swiping from the right edge to unlock the phone"
38msgid "Try swiping from the right edge to unlock the phone"
39−msgstr ""
39+msgstr "휴대 전화를 잠금 해제하려면 오른쪽에서부터 끌어보세요."
40
40
41#: qml/Components/EdgeDemo.qml:145
41#: qml/Components/EdgeDemo.qml:145
42msgid "Top edge"
42msgid "Top edge"
43−msgstr ""
43+msgstr "윗쪽 끝"
44
44
45#: qml/Components/EdgeDemo.qml:146
45#: qml/Components/EdgeDemo.qml:146
46msgid "Try swiping from the top edge to access the indicators"
46msgid "Try swiping from the top edge to access the indicators"
47−msgstr ""
47+msgstr "알림을 보려면 위쪽에서 끌어보세요."
48
48
49#: qml/Components/EdgeDemo.qml:171
49#: qml/Components/EdgeDemo.qml:171
50msgid "Close"
50msgid "Close"
51−msgstr ""
51+msgstr "닫기"
52
52
53#: qml/Components/EdgeDemo.qml:172
53#: qml/Components/EdgeDemo.qml:172
54msgid "Swipe up again to close the settings screen"
54msgid "Swipe up again to close the settings screen"
55−msgstr ""
55+msgstr "환경설정 창을 닫으려면 위로 다시 끌어보세요."
56
56
57#: qml/Components/EdgeDemo.qml:199
57#: qml/Components/EdgeDemo.qml:199
58msgid "Left edge"
58msgid "Left edge"
59−msgstr ""
59+msgstr "왼쪽 끝"
60
60
61#: qml/Components/EdgeDemo.qml:200
61#: qml/Components/EdgeDemo.qml:200
62msgid "Swipe from the left to reveal the launcher for quick access to apps"
62msgid "Swipe from the left to reveal the launcher for quick access to apps"
63−msgstr ""
63+msgstr "애플리케이션을 빠르게 열기 위해 런처를 보려면 왼쪽에서 끌어보세요."
64
64
65#: qml/Components/EdgeDemo.qml:227
65#: qml/Components/EdgeDemo.qml:227
66msgid "Well done"
66msgid "Well done"
67−msgstr ""
67+msgstr "잘하셨습니다."
68
68
69#: qml/Components/EdgeDemo.qml:228
69#: qml/Components/EdgeDemo.qml:228
70msgid ""
70msgid ""
71"You have now mastered the edge gestures and can start using the "
71"You have now mastered the edge gestures and can start using the "
72"phone<br><br>Tap on the screen to start"
72"phone<br><br>Tap on the screen to start"
73msgstr ""
73msgstr ""
74+"여러분은 끝에서 끌어오기 제스쳐를 완벽히 익히셨기 때문에 휴대 전화를 사용하기 시작할 수 있습니다. <br><br> 스크린을 터치해서 "
75+"시작하세요."
74
76
75#: qml/Components/Lockscreen.qml:214
77#: qml/Components/Lockscreen.qml:214
76msgid "Emergency Call"
78msgid "Emergency Call"
77−msgstr ""
79+msgstr "긴급 통화"
78
80
79#: qml/Components/Lockscreen.qml:231
81#: qml/Components/Lockscreen.qml:231
80msgid "OK"
82msgid "OK"
81−msgstr ""
83+msgstr "확인"
82
84
83#: qml/Components/PageHeader.qml:366
85#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
86msgid "Recent searches"
@@ -87,107 +89,107 @@ msgstr "최근 검색"
87#: qml/Components/PassphraseLockscreen.qml:60
89#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
90#, qt-format
89msgid "Hello %1"
91msgid "Hello %1"
90−msgstr ""
92+msgstr "안녕하세요 %1"
91
93
92#: qml/Components/PassphraseLockscreen.qml:60
94#: qml/Components/PassphraseLockscreen.qml:60
93msgid "Hello"
95msgid "Hello"
94−msgstr ""
96+msgstr "안녕하세요"
95
97
96#: qml/Components/PinLockscreen.qml:198
98#: qml/Components/PinLockscreen.qml:198
97msgid "CANCEL"
99msgid "CANCEL"
98−msgstr ""
100+msgstr "취소"
99
101
100#: qml/Components/PinLockscreen.qml:216
102#: qml/Components/PinLockscreen.qml:216
101msgid "DONE"
103msgid "DONE"
102−msgstr ""
104+msgstr "완료"
103
105
104#: qml/Components/SeeMore.qml:35
106#: qml/Components/SeeMore.qml:35
105msgid "See more"
107msgid "See more"
106−msgstr ""
108+msgstr "더 보기"
107
109
108#: qml/Components/SeeMore.qml:58
110#: qml/Components/SeeMore.qml:58
109msgid "See less"
111msgid "See less"
110−msgstr ""
112+msgstr "간단히 표시하기"
111
113
112#: qml/Dash/DashApps.qml:37
114#: qml/Dash/DashApps.qml:37
113msgid "Recent"
115msgid "Recent"
114−msgstr ""
116+msgstr "최근"
115
117
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
119msgid "More..."
118−msgstr ""
120+msgstr "더 보기..."
119
121
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
122#: qml/Dash/Previews/PreviewActionCombo.qml:34
121msgid "Less..."
123msgid "Less..."
122−msgstr ""
124+msgstr "간단하게..."
123
125
124#: qml/Dash/Previews/PreviewRatingInput.qml:82
126#: qml/Dash/Previews/PreviewRatingInput.qml:82
125msgid "Rate this"
127msgid "Rate this"
126−msgstr ""
128+msgstr "이 애플리케이션 평가하기"
127
129
128#: qml/Dash/Previews/PreviewRatingInput.qml:128
130#: qml/Dash/Previews/PreviewRatingInput.qml:128
129msgid "Add a review"
131msgid "Add a review"
130−msgstr ""
132+msgstr "평가 제출하기"
131
133
132#: qml/Dash/Previews/PreviewRatingInput.qml:168
134#: qml/Dash/Previews/PreviewRatingInput.qml:168
133msgid "Send"
135msgid "Send"
134−msgstr ""
136+msgstr "보내기"
135
137
136#: qml/Greeter/Greeter.qml:157
138#: qml/Greeter/Greeter.qml:157
137msgid "Swipe to unlock"
139msgid "Swipe to unlock"
138−msgstr ""
140+msgstr "휴대전화를 잠금 해제하려면 움직이세요."
139
141
140#: qml/Hud/HudParametrizedActionsPage.qml:132
142#: qml/Hud/HudParametrizedActionsPage.qml:132
141msgid "Confirm"
143msgid "Confirm"
142−msgstr ""
144+msgstr "확인"
143
145
144#: qml/Hud/Hud.qml:61 qml/Hud/Hud.qml:99 qml/Hud/Hud.qml:372
146#: qml/Hud/Hud.qml:61 qml/Hud/Hud.qml:99 qml/Hud/Hud.qml:372
145msgid "Type or say a command"
147msgid "Type or say a command"
146−msgstr ""
148+msgstr "명령을 입력하거나 말하세요."
147
149
148#: qml/Hud/Hud.qml:84
150#: qml/Hud/Hud.qml:84
149msgid "Loading. Please Wait..."
151msgid "Loading. Please Wait..."
150−msgstr ""
152+msgstr "준비 중.. 잠시만 기다려 주세요..."
151
153
152#: qml/Hud/Hud.qml:89
154#: qml/Hud/Hud.qml:89
153msgid "Speak Now..."
155msgid "Speak Now..."
154−msgstr ""
156+msgstr "지금 말하세요..."
155
157
156#: qml/Hud/Hud.qml:94
158#: qml/Hud/Hud.qml:94
157msgid "Speaking..."
159msgid "Speaking..."
158−msgstr ""
160+msgstr "말하는 중..."
159
161
160#: qml/Notifications/NotificationMenuItemFactory.qml:91
162#: qml/Notifications/NotificationMenuItemFactory.qml:91
161msgid "Show password"
163msgid "Show password"
162−msgstr ""
164+msgstr "비밀 번호 보기"
163
165
164#: qml/Notifications/NotificationMenuItemFactory.qml:103
166#: qml/Notifications/NotificationMenuItemFactory.qml:103
165msgid "Please enter SIM PIN"
167msgid "Please enter SIM PIN"
166−msgstr ""
168+msgstr "심카드의 PIN 번호를 입력하세요."
167
169
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
170#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
171msgid "In queue…"
170−msgstr ""
172+msgstr "재생 중..."
171
173
172#: qml/Panel/Indicators/MenuItemFactory.qml:587
174#: qml/Panel/Indicators/MenuItemFactory.qml:587
173msgid "Downloading"
175msgid "Downloading"
174−msgstr ""
176+msgstr "다운로드 중"
175
177
176#: qml/Panel/Indicators/MenuItemFactory.qml:589
178#: qml/Panel/Indicators/MenuItemFactory.qml:589
177msgid "Paused, tap to resume"
179msgid "Paused, tap to resume"
178−msgstr ""
180+msgstr "일시 중지 되었습니다. 계속하려면 누르세요."
179
181
180#: qml/Panel/Indicators/MenuItemFactory.qml:591
182#: qml/Panel/Indicators/MenuItemFactory.qml:591
181msgid "Canceled"
183msgid "Canceled"
182−msgstr ""
184+msgstr "취소됨"
183
185
184#: qml/Panel/Indicators/MenuItemFactory.qml:593
186#: qml/Panel/Indicators/MenuItemFactory.qml:593
185msgid "Finished"
187msgid "Finished"
186−msgstr ""
188+msgstr "완료됨"
187
189
188#: qml/Panel/Indicators/MenuItemFactory.qml:595
190#: qml/Panel/Indicators/MenuItemFactory.qml:595
189msgid "Failed, tap to retry"
191msgid "Failed, tap to retry"
190−msgstr ""
192+msgstr "실패하였습니다. 재시도하려면 누르세요."
191
193
192#: qml/Panel/SearchIndicator.qml:27
194#: qml/Panel/SearchIndicator.qml:27
193msgid "Search"
195msgid "Search"
@@ -196,4 +198,4 @@ msgstr "검색"
196#: qml/Shell.qml:359
198#: qml/Shell.qml:359
197#, qt-format
199#, qt-format
198msgid "Please enter %1"
200msgid "Please enter %1"
199−msgstr ""
201+msgstr "%1 를 입력해주세요."
po/pt_BR.po+8−8
@@ -8,14 +8,14 @@ msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11−"PO-Revision-Date: 2014-05-15 14:31+0000\n"
11+"PO-Revision-Date: 2014-07-17 05:46+0000\n"
12−"Last-Translator: Rafael Neri <Unknown>\n"
12+"Last-Translator: Tiago Hillebrandt <tiagohillebrandt@gmail.com>\n"
13"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
13"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-17 06:38+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17114)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -82,7 +82,7 @@ msgstr "Chamada de emergência"
82
82
83#: qml/Components/Lockscreen.qml:231
83#: qml/Components/Lockscreen.qml:231
84msgid "OK"
84msgid "OK"
85−msgstr ""
85+msgstr "OK"
86
86
87#: qml/Components/PageHeader.qml:366
87#: qml/Components/PageHeader.qml:366
88msgid "Recent searches"
88msgid "Recent searches"
@@ -99,7 +99,7 @@ msgstr "Olá"
99
99
100#: qml/Components/PinLockscreen.qml:198
100#: qml/Components/PinLockscreen.qml:198
101msgid "CANCEL"
101msgid "CANCEL"
102−msgstr ""
102+msgstr "CANCELAR"
103
103
104#: qml/Components/PinLockscreen.qml:216
104#: qml/Components/PinLockscreen.qml:216
105msgid "DONE"
105msgid "DONE"
@@ -175,7 +175,7 @@ msgstr ""
175
175
176#: qml/Panel/Indicators/MenuItemFactory.qml:587
176#: qml/Panel/Indicators/MenuItemFactory.qml:587
177msgid "Downloading"
177msgid "Downloading"
178−msgstr ""
178+msgstr "Baixando"
179
179
180#: qml/Panel/Indicators/MenuItemFactory.qml:589
180#: qml/Panel/Indicators/MenuItemFactory.qml:589
181msgid "Paused, tap to resume"
181msgid "Paused, tap to resume"
@@ -183,7 +183,7 @@ msgstr ""
183
183
184#: qml/Panel/Indicators/MenuItemFactory.qml:591
184#: qml/Panel/Indicators/MenuItemFactory.qml:591
185msgid "Canceled"
185msgid "Canceled"
186−msgstr ""
186+msgstr "Cancelado"
187
187
188#: qml/Panel/Indicators/MenuItemFactory.qml:593
188#: qml/Panel/Indicators/MenuItemFactory.qml:593
189msgid "Finished"
189msgid "Finished"
po/tr.po+14−14
@@ -8,23 +8,23 @@ msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11−"PO-Revision-Date: 2014-05-19 12:52+0000\n"
11+"PO-Revision-Date: 2014-07-16 17:58+0000\n"
12"Last-Translator: Volkan Gezer <Unknown>\n"
12"Last-Translator: Volkan Gezer <Unknown>\n"
13"Language-Team: Turkish <tr@li.org>\n"
13"Language-Team: Turkish <tr@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-17 06:38+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17114)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
22msgid "Pin shortcut"
22msgid "Pin shortcut"
23−msgstr ""
23+msgstr "Kısayolu iğnele"
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26msgid "Unpin shortcut"
26msgid "Unpin shortcut"
27−msgstr ""
27+msgstr "Kısayol iğnesini kaldır"
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -81,7 +81,7 @@ msgstr "Acil Arama"
81
81
82#: qml/Components/Lockscreen.qml:231
82#: qml/Components/Lockscreen.qml:231
83msgid "OK"
83msgid "OK"
84−msgstr ""
84+msgstr "Tamam"
85
85
86#: qml/Components/PageHeader.qml:366
86#: qml/Components/PageHeader.qml:366
87msgid "Recent searches"
87msgid "Recent searches"
@@ -98,11 +98,11 @@ msgstr "Merhaba"
98
98
99#: qml/Components/PinLockscreen.qml:198
99#: qml/Components/PinLockscreen.qml:198
100msgid "CANCEL"
100msgid "CANCEL"
101−msgstr ""
101+msgstr "İPTAL"
102
102
103#: qml/Components/PinLockscreen.qml:216
103#: qml/Components/PinLockscreen.qml:216
104msgid "DONE"
104msgid "DONE"
105−msgstr ""
105+msgstr "BİTTİ"
106
106
107#: qml/Components/SeeMore.qml:35
107#: qml/Components/SeeMore.qml:35
108msgid "See more"
108msgid "See more"
@@ -170,27 +170,27 @@ msgstr "Lütfen SIM PIN'inizi girin"
170
170
171#: qml/Panel/Indicators/MenuItemFactory.qml:583
171#: qml/Panel/Indicators/MenuItemFactory.qml:583
172msgid "In queue…"
172msgid "In queue…"
173−msgstr ""
173+msgstr "Beklemede..."
174
174
175#: qml/Panel/Indicators/MenuItemFactory.qml:587
175#: qml/Panel/Indicators/MenuItemFactory.qml:587
176msgid "Downloading"
176msgid "Downloading"
177−msgstr ""
177+msgstr "İndiriliyor"
178
178
179#: qml/Panel/Indicators/MenuItemFactory.qml:589
179#: qml/Panel/Indicators/MenuItemFactory.qml:589
180msgid "Paused, tap to resume"
180msgid "Paused, tap to resume"
181−msgstr ""
181+msgstr "Duraklatıldı, devam etmek için dokunun"
182
182
183#: qml/Panel/Indicators/MenuItemFactory.qml:591
183#: qml/Panel/Indicators/MenuItemFactory.qml:591
184msgid "Canceled"
184msgid "Canceled"
185−msgstr ""
185+msgstr "İptal edildi"
186
186
187#: qml/Panel/Indicators/MenuItemFactory.qml:593
187#: qml/Panel/Indicators/MenuItemFactory.qml:593
188msgid "Finished"
188msgid "Finished"
189−msgstr ""
189+msgstr "Bitti"
190
190
191#: qml/Panel/Indicators/MenuItemFactory.qml:595
191#: qml/Panel/Indicators/MenuItemFactory.qml:595
192msgid "Failed, tap to retry"
192msgid "Failed, tap to retry"
193−msgstr ""
193+msgstr "Başarısız, yeniden denemek için dokunun"
194
194
195#: qml/Panel/SearchIndicator.qml:27
195#: qml/Panel/SearchIndicator.qml:27
196msgid "Search"
196msgid "Search"
qml/Notifications/Notification.qml+21−7
@@ -36,7 +36,7 @@ Item {
36 property var hints
36 property var hints
37 property var notification
37 property var notification
38 property color color
38 property color color
39− property bool fullscreen
39+ property bool fullscreen: false
40 property int maxHeight
40 property int maxHeight
41 property int margins
41 property int margins
42 property Gradient greenGradient : Gradient {
42 property Gradient greenGradient : Gradient {
@@ -48,7 +48,6 @@ Item {
48 GradientStop { position: 1.0; color: "#4d4745" }
48 GradientStop { position: 1.0; color: "#4d4745" }
49 }
49 }
50
50
51− fullscreen: false
52 objectName: "background"
51 objectName: "background"
53 implicitHeight: type !== Notification.PlaceHolder ? (fullscreen ? maxHeight : contentColumn.height + contentColumn.spacing * 2) : 0
52 implicitHeight: type !== Notification.PlaceHolder ? (fullscreen ? maxHeight : contentColumn.height + contentColumn.spacing * 2) : 0
54
53
@@ -80,7 +79,7 @@ Item {
80 Audio {
79 Audio {
81 id: sound
80 id: sound
82 objectName: "sound"
81 objectName: "sound"
83− source: hints["suppress-sound"] != "" ? hints["sound-file"] : undefined
82+ source: hints["suppress-sound"] != "true" && hints["sound-file"] != undefined ? hints["sound-file"] : ""
84 }
83 }
85
84
86 onOpacityChanged: {
85 onOpacityChanged: {
@@ -159,9 +158,17 @@ Item {
159 UnityMenuModel {
158 UnityMenuModel {
160 id: unityMenuModel
159 id: unityMenuModel
161
160
161+ property string lastNameOwner: ""
162+
162 busName: paths.busName
163 busName: paths.busName
163 actions: paths.actions
164 actions: paths.actions
164 menuObjectPath: paths.menuObjectPath
165 menuObjectPath: paths.menuObjectPath
166+ onNameOwnerChanged: {
167+ if (lastNameOwner != "" && nameOwner == "" && notification.notification != undefined) {
168+ notification.notification.close()
169+ }
170+ lastNameOwner = nameOwner
171+ }
165 }
172 }
166
173
167 Behavior on implicitHeight {
174 Behavior on implicitHeight {
@@ -272,14 +279,18 @@ Item {
272 }
279 }
273
280
274 Column {
281 Column {
282+ id: dialogColumn
275 objectName: "dialogListView"
283 objectName: "dialogListView"
276 spacing: units.gu(2)
284 spacing: units.gu(2)
277
285
278 visible: count > 0
286 visible: count > 0
279
287
288+ anchors {
289+ left: parent.left
280− anchors.left: parent.left; anchors.right: parent.right
290+ right: parent.right
281− anchors.top: fullscreen ? parent.top : undefined
291+ top: fullscreen ? parent.top : undefined
282− anchors.bottom: fullscreen ? parent.bottom : undefined
292+ bottom: fullscreen ? parent.bottom : undefined
293+ }
283
294
284 Repeater {
295 Repeater {
285 model: unityMenuModel
296 model: unityMenuModel
@@ -287,7 +298,10 @@ Item {
287 NotificationMenuItemFactory {
298 NotificationMenuItemFactory {
288 id: menuItemFactory
299 id: menuItemFactory
289
300
290− anchors.left: parent.left; anchors.right: parent.right
301+ anchors {
302+ left: dialogColumn.left
303+ right: dialogColumn.right
304+ }
291
305
292 menuModel: unityMenuModel
306 menuModel: unityMenuModel
293 menuData: model
307 menuData: model
qml/Notifications/NotificationMenuItemFactory.qml+12−3
@@ -50,7 +50,10 @@ Loader {
50 Column {
50 Column {
51 spacing: units.gu(2)
51 spacing: units.gu(2)
52
52
53+ anchors {
54+ left: parent.left
53− anchors.left: parent.left; anchors.right: parent.right
55+ right: parent.right
56+ }
54
57
55 Component.onCompleted: {
58 Component.onCompleted: {
56 menuModel.loadExtendedAttributes(menuIndex, {"x-echo-mode-password": "bool"});
59 menuModel.loadExtendedAttributes(menuIndex, {"x-echo-mode-password": "bool"});
@@ -67,7 +70,10 @@ Loader {
67
70
68 // TODO using Qt.ImhNoPredictiveText here until lp #1291575 is fixed for ubuntu-ui-toolkit
71 // TODO using Qt.ImhNoPredictiveText here until lp #1291575 is fixed for ubuntu-ui-toolkit
69 inputMethodHints: Qt.ImhNoAutoUppercase | Qt.ImhNoPredictiveText
72 inputMethodHints: Qt.ImhNoAutoUppercase | Qt.ImhNoPredictiveText
73+ anchors {
74+ left: parent.left
70− anchors.left: parent.left; anchors.right: parent.right
75+ right: parent.right
76+ }
71 echoMode: checkBox.checked ? TextInput.Normal : TextInput.Password
77 echoMode: checkBox.checked ? TextInput.Normal : TextInput.Password
72 height: units.gu(5)
78 height: units.gu(5)
73 onTextChanged: {
79 onTextChanged: {
@@ -98,7 +104,10 @@ Loader {
98 id: pinLock
104 id: pinLock
99
105
100 Lockscreen {
106 Lockscreen {
107+ anchors {
108+ left: parent.left
101− anchors.left: parent.left; anchors.right: parent.right
109+ right: parent.right
110+ }
102 height: menuFactory.maxHeight
111 height: menuFactory.maxHeight
103 placeholderText: i18n.tr("Please enter SIM PIN")
112 placeholderText: i18n.tr("Please enter SIM PIN")
104 background: shell.background
113 background: shell.background
qml/Notifications/Notifications.qml+17−1
@@ -36,8 +36,11 @@ ListView {
36 filterRole: UnityNotifications.ModelInterface.RoleType
36 filterRole: UnityNotifications.ModelInterface.RoleType
37 filterRegExp: RegExp(UnityNotifications.Notification.SnapDecision)
37 filterRegExp: RegExp(UnityNotifications.Notification.SnapDecision)
38 }
38 }
39− spacing: delegate.fullscreen ? 0 : units.gu(.5)
40
39
40+ property bool topmostIsFullscreen: false
41+ spacing: topmostIsFullscreen ? 0 : units.gu(.5)
42+
43+ // FIXME: This doesn't make any sense and results in a binding loop
41 currentIndex: (currentIndex < 1 && count > 1) ? 1 : -1
44 currentIndex: (currentIndex < 1 && count > 1) ? 1 : -1
42
45
43 delegate: Notification {
46 delegate: Notification {
@@ -61,6 +64,19 @@ ListView {
61 // make sure there's no opacity-difference between the several
64 // make sure there's no opacity-difference between the several
62 // elements in a notification
65 // elements in a notification
63 layer.enabled: add.running || remove.running || populate.running
66 layer.enabled: add.running || remove.running || populate.running
67+
68+ Component.onCompleted: {
69+ if (index == 1) {
70+ notificationList.topmostIsFullscreen = fullscreen
71+ }
72+ }
73+
74+ onFullscreenChanged: {
75+ // index 1 because 0 is the PlaceHolder...
76+ if (index == 1) {
77+ notificationList.topmostIsFullscreen = fullscreen
78+ }
79+ }
64 }
80 }
65
81
66 populate: Transition {
82 populate: Transition {
qml/Shell.qml+200−2
@@ -19,6 +19,7 @@ import AccountsService 0.1
19import GSettings 1.0
19import GSettings 1.0
20import Unity.Application 0.1
20import Unity.Application 0.1
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22+import Ubuntu.Components.Popups 0.1
22import Ubuntu.Gestures 0.1
23import Ubuntu.Gestures 0.1
23import Unity.Launcher 0.1
24import Unity.Launcher 0.1
24import Utils 0.1
25import Utils 0.1
@@ -242,7 +243,128 @@ Item {
242 }
243 }
243 }
244 }
244
245
246+ property bool dialogShown: false
247+
248+ Component {
249+ id: logoutDialog
250+ Dialog {
251+ id: dialogueLogout
252+ title: "Logout"
253+ text: "Are you sure that you want to logout?"
254+ Button {
255+ text: "Cancel"
256+ onClicked: {
257+ PopupUtils.close(dialogueLogout);
258+ stages.dialogShown = false;
259+ }
260+ }
261+ Button {
262+ text: "Yes"
263+ onClicked: {
264+ DBusUnitySessionService.Logout();
265+ PopupUtils.close(dialogueLogout);
266+ stages.dialogShown = false;
267+ }
268+ }
269+ }
270+ }
271+
272+ Component {
273+ id: shutdownDialog
274+ Dialog {
275+ id: dialogueShutdown
276+ title: "Shutdown"
277+ text: "Are you sure that you want to shutdown?"
278+ Button {
279+ text: "Cancel"
280+ onClicked: {
281+ PopupUtils.close(dialogueShutdown);
282+ stages.dialogShown = false;
283+ }
284+ }
285+ Button {
286+ text: "Yes"
287+ onClicked: {
288+ dBusUnitySessionServiceConnection.closeAllApps();
289+ DBusUnitySessionService.Shutdown();
290+ PopupUtils.close(dialogueShutdown);
291+ stages.dialogShown = false;
292+ }
293+ }
294+ }
295+ }
296+
297+ Component {
298+ id: rebootDialog
299+ Dialog {
300+ id: dialogueReboot
301+ title: "Reboot"
302+ text: "Are you sure that you want to reboot?"
303+ Button {
304+ text: "Cancel"
305+ onClicked: {
306+ PopupUtils.close(dialogueReboot)
307+ stages.dialogShown = false;
308+ }
309+ }
310+ Button {
311+ text: "Yes"
312+ onClicked: {
313+ dBusUnitySessionServiceConnection.closeAllApps();
314+ DBusUnitySessionService.Reboot();
315+ PopupUtils.close(dialogueReboot);
316+ stages.dialogShown = false;
317+ }
318+ }
319+ }
320+ }
321+
322+ Component {
323+ id: powerDialog
324+ Dialog {
325+ id: dialoguePower
326+ title: "Power"
327+ text: i18n.tr("Are you sure you would like to turn power off?")
328+ Button {
329+ text: i18n.tr("Power off")
330+ onClicked: {
331+ dBusUnitySessionServiceConnection.closeAllApps();
332+ PopupUtils.close(dialoguePower);
333+ stages.dialogShown = false;
334+ shutdownFadeOutRectangle.enabled = true;
335+ shutdownFadeOutRectangle.visible = true;
336+ shutdownFadeOut.start();
337+ }
338+ }
339+ Button {
340+ text: i18n.tr("Restart")
341+ onClicked: {
342+ dBusUnitySessionServiceConnection.closeAllApps();
343+ DBusUnitySessionService.Reboot();
344+ PopupUtils.close(dialoguePower);
345+ stages.dialogShown = false;
346+ }
347+ }
348+ Button {
349+ text: i18n.tr("Cancel")
350+ onClicked: {
351+ PopupUtils.close(dialoguePower);
352+ stages.dialogShown = false;
353+ }
354+ }
355+ }
356+ }
357+
358+ function showPowerDialog() {
359+ if (!stages.dialogShown) {
360+ stages.dialogShown = true;
361+ PopupUtils.open(powerDialog);
362+ }
363+ }
364+
245 Connections {
365 Connections {
366+ id: dBusUnitySessionServiceConnection
367+ objectName: "dBusUnitySessionServiceConnection"
246 target: DBusUnitySessionService
368 target: DBusUnitySessionService
247
369
248 function closeAllApps() {
370 function closeAllApps() {
@@ -256,8 +378,27 @@ Item {
256 }
378 }
257
379
258 onLogoutRequested: {
380 onLogoutRequested: {
381+ // Display a dialog to ask the user to confirm.
382+ if (!stages.dialogShown) {
383+ stages.dialogShown = true;
384+ PopupUtils.open(logoutDialog);
385+ }
386+ }
387+
388+ onShutdownRequested: {
259− // TODO: Display a dialog to ask the user to confirm.
389+ // Display a dialog to ask the user to confirm.
260− DBusUnitySessionService.Logout();
390+ if (!stages.dialogShown) {
391+ stages.dialogShown = true;
392+ PopupUtils.open(shutdownDialog);
393+ }
394+ }
395+
396+ onRebootRequested: {
397+ // Display a dialog to ask the user to confirm.
398+ if (!stages.dialogShown) {
399+ stages.dialogShown = true;
400+ PopupUtils.open(rebootDialog);
401+ }
261 }
402 }
262
403
263 onLogoutReady: {
404 onLogoutReady: {
@@ -349,6 +490,8 @@ Item {
349 Connections {
490 Connections {
350 target: LightDM.Greeter
491 target: LightDM.Greeter
351
492
493+ onShowGreeter: greeter.show()
494+
352 onShowPrompt: {
495 onShowPrompt: {
353 if (LightDM.Users.count == 1) {
496 if (LightDM.Users.count == 1) {
354 // TODO: There's no better way for now to determine if its a PIN or a passphrase.
497 // TODO: There's no better way for now to determine if its a PIN or a passphrase.
@@ -374,6 +517,12 @@ Item {
374 }
517 }
375 }
518 }
376
519
520+ Binding {
521+ target: LightDM.Greeter
522+ property: "active"
523+ value: greeter.shown || lockscreen.shown
524+ }
525+
377 Rectangle {
526 Rectangle {
378 anchors.fill: parent
527 anchors.fill: parent
379 color: "black"
528 color: "black"
@@ -413,6 +562,9 @@ Item {
413 onShownChanged: {
562 onShownChanged: {
414 if (shown) {
563 if (shown) {
415 lockscreen.reset();
564 lockscreen.reset();
565+ if (!LightDM.Greeter.promptless) {
566+ lockscreen.show();
567+ }
416 // If there is only one user, we start authenticating with that one here.
568 // If there is only one user, we start authenticating with that one here.
417 // If there are more users, the Greeter will handle that
569 // If there are more users, the Greeter will handle that
418 if (LightDM.Users.count == 1) {
570 if (LightDM.Users.count == 1) {
@@ -613,4 +765,50 @@ Item {
613 target: SessionBroadcast
765 target: SessionBroadcast
614 onShowHome: showHome()
766 onShowHome: showHome()
615 }
767 }
768+
769+ Keys.onPressed: {
770+ if (event.key == Qt.Key_PowerOff || event.key == Qt.Key_PowerDown) {
771+ if (!powerKeyTimer.running) {
772+ powerKeyTimer.start();
773+ }
774+ event.accepted = true;
775+ }
776+ }
777+
778+ Keys.onReleased: {
779+ if (event.key == Qt.Key_PowerOff || event.key == Qt.Key_PowerDown) {
780+ powerKeyTimer.stop();
781+ event.accepted = true;
782+ }
783+ }
784+
785+ Timer {
786+ id: powerKeyTimer
787+ interval: 2000
788+ repeat: false
789+ triggeredOnStart: false
790+
791+ onTriggered: {
792+ stages.showPowerDialog();
793+ }
794+ }
795+
796+ Rectangle {
797+ id: shutdownFadeOutRectangle
798+ enabled: false
799+ visible: false
800+ color: "black"
801+ anchors.fill: parent
802+ opacity: 0.0
803+ NumberAnimation on opacity {
804+ id: shutdownFadeOut
805+ from: 0.0
806+ to: 1.0
807+ onStopped: {
808+ if (shutdownFadeOutRectangle.enabled && shutdownFadeOutRectangle.visible) {
809+ DBusUnitySessionService.Shutdown();
810+ }
811+ }
812+ }
813+ }
616}
814}
tests/mocks/LightDM/CMakeLists.txt+1
@@ -18,6 +18,7 @@ include_directories(
18)
18)
19
19
20set(QMLPLUGIN_SRC
20set(QMLPLUGIN_SRC
21+ ${CMAKE_SOURCE_DIR}/plugins/LightDM/DBusGreeter.cpp
21 ${CMAKE_SOURCE_DIR}/plugins/LightDM/DBusGreeterList.cpp
22 ${CMAKE_SOURCE_DIR}/plugins/LightDM/DBusGreeterList.cpp
22 ${CMAKE_SOURCE_DIR}/plugins/LightDM/Greeter.cpp
23 ${CMAKE_SOURCE_DIR}/plugins/LightDM/Greeter.cpp
23 ${CMAKE_SOURCE_DIR}/plugins/LightDM/plugin.cpp
24 ${CMAKE_SOURCE_DIR}/plugins/LightDM/plugin.cpp
tests/mocks/Powerd/Powerd.qmltypes+6−13
@@ -15,19 +15,12 @@ Module {
15 isSingleton: true
15 isSingleton: true
16 exportMetaObjectRevisions: [0]
16 exportMetaObjectRevisions: [0]
17 Enum {
17 Enum {
18− name: "DisplayFlag"
18+ name: "DisplayStateChangeReason"
19 values: {
19 values: {
20− "UseProximity": 1,
20+ "Unknown": 0,
21− "DisableAutoBrightness": 2,
21+ "Inactivity": 1,
22− "Bright": 4
22+ "PowerKey": 2,
23− }
23+ "Proximity": 3
24− }
25− Enum {
26− name: "DisplayFlags"
27− values: {
28− "UseProximity": 1,
29− "DisableAutoBrightness": 2,
30− "Bright": 4
31 }
24 }
32 }
25 }
33 Enum {
26 Enum {
@@ -40,7 +33,7 @@ Module {
40 Signal {
33 Signal {
41 name: "displayPowerStateChange"
34 name: "displayPowerStateChange"
42 Parameter { name: "status"; type: "int" }
35 Parameter { name: "status"; type: "int" }
43− Parameter { name: "flags"; type: "uint" }
36+ Parameter { name: "reason"; type: "int" }
44 }
37 }
45 }
38 }
46}
39}
tests/mocks/Unity/Unity.qmltypes+10−2
@@ -89,6 +89,10 @@ Module {
89 name: "loadDepartment"
89 name: "loadDepartment"
90 Parameter { name: "id"; type: "string" }
90 Parameter { name: "id"; type: "string" }
91 }
91 }
92+ Method {
93+ name: "performQuery"
94+ Parameter { name: "query"; type: "string" }
95+ }
92 }
96 }
93 Component {
97 Component {
94 name: "Scopes"
98 name: "Scopes"
@@ -133,8 +137,8 @@ Module {
133 "RoleRawRendererTemplate": 3,
137 "RoleRawRendererTemplate": 3,
134 "RoleRenderer": 4,
138 "RoleRenderer": 4,
135 "RoleComponents": 5,
139 "RoleComponents": 5,
136− "RoleResults": 6,
140+ "RoleResults": 7,
137− "RoleCount": 7
141+ "RoleCount": 8
138 }
142 }
139 }
143 }
140 Method {
144 Method {
@@ -179,6 +183,9 @@ Module {
179 Component {
183 Component {
180 name: "unity::shell::scopes::PreviewModelInterface"
184 name: "unity::shell::scopes::PreviewModelInterface"
181 prototype: "QAbstractListModel"
185 prototype: "QAbstractListModel"
186+ exports: ["Unity/PreviewModel 0.2"]
187+ isCreatable: false
188+ exportMetaObjectRevisions: [0]
182 Enum {
189 Enum {
183 name: "Roles"
190 name: "Roles"
184 values: {
191 values: {
@@ -272,6 +279,7 @@ Module {
272 Property { name: "isActive"; type: "bool" }
279 Property { name: "isActive"; type: "bool" }
273 Property { name: "currentDepartmentId"; type: "string"; isReadonly: true }
280 Property { name: "currentDepartmentId"; type: "string"; isReadonly: true }
274 Property { name: "hasDepartments"; type: "bool"; isReadonly: true }
281 Property { name: "hasDepartments"; type: "bool"; isReadonly: true }
282+ Property { name: "customizations"; type: "QVariantMap"; isReadonly: true }
275 Signal { name: "showDash" }
283 Signal { name: "showDash" }
276 Signal { name: "hideDash" }
284 Signal { name: "hideDash" }
277 Signal {
285 Signal {
tests/plugins/Dash/cardcreator/6.res+1
@@ -5,6 +5,7 @@ AbstractButton {
5 property var cardData;
5 property var cardData;
6 property var artShapeBorderSource: undefined;
6 property var artShapeBorderSource: undefined;
7 property real fontScale: 1.0;
7 property real fontScale: 1.0;
8+ property var scopeStyle: null;
8 property int headerAlignment: Text.AlignLeft;
9 property int headerAlignment: Text.AlignLeft;
9 property int fixedHeaderHeight: -1;
10 property int fixedHeaderHeight: -1;
10 property size fixedArtShapeSize: Qt.size(-1, -1);
11 property size fixedArtShapeSize: Qt.size(-1, -1);
tests/plugins/LightDM/CMakeLists.txt+1−1
@@ -19,7 +19,7 @@ target_link_libraries(test-lightdm-dbus
19
19
20add_definitions(-DCURRENT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
20add_definitions(-DCURRENT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
21
21
22−add_custom_target(testLightDMDBus dbus-launch env QML2_IMPORT_PATH=${CMAKE_BINARY_DIR}/tests/mocks LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full ${CMAKE_CURRENT_BINARY_DIR}/test-lightdm-dbus)
22+add_custom_target(testLightDMDBus xvfb-run --server-args "-screen 0 1024x768x24" --auto-servernum dbus-launch env QML2_IMPORT_PATH=${CMAKE_BINARY_DIR}/tests/mocks LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full ${CMAKE_CURRENT_BINARY_DIR}/test-lightdm-dbus)
23add_dependencies(testLightDMDBus test-lightdm-dbus)
23add_dependencies(testLightDMDBus test-lightdm-dbus)
24
24
25add_dependencies(qmluitests testLightDMDBus)
25add_dependencies(qmluitests testLightDMDBus)
tests/plugins/LightDM/dbus.cpp+40
@@ -38,6 +38,13 @@ private Q_SLOTS:
38 // SIGNAL method, because QtDBus doesn't know about PropertiesChanged.
38 // SIGNAL method, because QtDBus doesn't know about PropertiesChanged.
39 // So we connect the hard way for the benefit of any tests that want
39 // So we connect the hard way for the benefit of any tests that want
40 // to watch.
40 // to watch.
41+ QDBusConnection::sessionBus().connect(
42+ "com.canonical.UnityGreeter",
43+ "/",
44+ "org.freedesktop.DBus.Properties",
45+ "PropertiesChanged",
46+ this,
47+ SIGNAL(PropertiesChangedRelay(const QString&, const QVariantMap&, const QStringList&)));
41 QDBusConnection::sessionBus().connect(
48 QDBusConnection::sessionBus().connect(
42 "com.canonical.UnityGreeter",
49 "com.canonical.UnityGreeter",
43 "/list",
50 "/list",
@@ -57,6 +64,12 @@ private Q_SLOTS:
57 view->show();
64 view->show();
58 QTest::qWaitForWindowExposed(view);
65 QTest::qWaitForWindowExposed(view);
59
66
67+ dbusMain = new QDBusInterface("com.canonical.UnityGreeter",
68+ "/",
69+ "com.canonical.UnityGreeter",
70+ QDBusConnection::sessionBus(), view);
71+ QVERIFY(dbusMain->isValid());
72+
60 dbusList = new QDBusInterface("com.canonical.UnityGreeter",
73 dbusList = new QDBusInterface("com.canonical.UnityGreeter",
61 "/list",
74 "/list",
62 "com.canonical.UnityGreeter.List",
75 "com.canonical.UnityGreeter.List",
@@ -155,9 +168,36 @@ private Q_SLOTS:
155 QVERIFY(arguments.at(1).toMap()["EntryIsLocked"] == false);
168 QVERIFY(arguments.at(1).toMap()["EntryIsLocked"] == false);
156 }
169 }
157
170
171+ void testIsActive()
172+ {
173+ QVERIFY(!greeter->isActive());
174+ QVERIFY(!dbusMain->property("IsActive").toBool());
175+
176+ QSignalSpy spy(this, SIGNAL(PropertiesChangedRelay(QString, QVariantMap, QStringList)));
177+ greeter->setIsActive(true);
178+ spy.wait();
179+
180+ QVERIFY(greeter->isActive());
181+ QVERIFY(dbusMain->property("IsActive").toBool());
182+
183+ QCOMPARE(spy.count(), 1);
184+ QList<QVariant> arguments = spy.takeFirst();
185+ QCOMPARE(arguments.at(0).toString(), QString("com.canonical.UnityGreeter"));
186+ QVERIFY(arguments.at(1).toMap().contains("IsActive"));
187+ QVERIFY(arguments.at(1).toMap()["IsActive"].toBool());
188+ }
189+
190+ void testShowGreeter()
191+ {
192+ // Just confirm the call exists and doesn't fail
193+ QDBusReply<void> reply = dbusMain->call("ShowGreeter");
194+ QVERIFY(reply.isValid());
195+ }
196+
158private:
197private:
159 QQuickView *view;
198 QQuickView *view;
160 Greeter *greeter;
199 Greeter *greeter;
200+ QDBusInterface *dbusMain;
161 QDBusInterface *dbusList;
201 QDBusInterface *dbusList;
162};
202};
163
203
tests/qmltests/Dash/tst_DashContent.qml+1
@@ -312,6 +312,7 @@ Item {
312 compare(allButton.visible, true);
312 compare(allButton.visible, true);
313 compare(backButton.visible, true);
313 compare(backButton.visible, true);
314
314
315+ tryCompare(departmentListView, "contentX", departmentList1.x);
315 waitForRendering(departmentListView);
316 waitForRendering(departmentListView);
316 mouseClick(allButton, 0, 0);
317 mouseClick(allButton, 0, 0);
317 compare(dashDepartments.showList, false);
318 compare(dashDepartments.showList, false);
tests/qmltests/tst_Shell.qml+8
@@ -20,6 +20,7 @@
20import QtQuick 2.0
20import QtQuick 2.0
21import QtTest 1.0
21import QtTest 1.0
22import GSettings 1.0
22import GSettings 1.0
23+import LightDM 0.1 as LightDM
23import Unity.Application 0.1
24import Unity.Application 0.1
24import Unity.Test 0.1 as UT
25import Unity.Test 0.1 as UT
25import Powerd 0.1
26import Powerd 0.1
@@ -520,5 +521,12 @@ Item {
520 tryCompare(greeter, "showProgress", 0)
521 tryCompare(greeter, "showProgress", 0)
521 waitUntilApplicationWindowIsFullyVisible()
522 waitUntilApplicationWindowIsFullyVisible()
522 }
523 }
524+
525+ function test_showGreeterDBusCall() {
526+ var greeter = findChild(shell, "greeter")
527+ tryCompare(greeter, "showProgress", 0)
528+ LightDM.Greeter.showGreeter()
529+ tryCompare(greeter, "showProgress", 1)
530+ }
523 }
531 }
524}
532}