diff -Nru unity8-8.02+15.04.20150109.2/build.sh unity8-8.02+15.04.20150113.1/build.sh --- unity8-8.02+15.04.20150109.2/build.sh 2015-01-09 10:37:49.000000000 +0000 +++ unity8-8.02+15.04.20150113.1/build.sh 2015-01-13 20:57:22.000000000 +0000 @@ -61,7 +61,10 @@ } mk_build_deps() { - [ ! -f unity8-build-deps*deb -o $CODE_DIR/debian/control -nt unity8-build-deps*deb ] && mk-build-deps --install --root-cmd sudo $CODE_DIR/debian/control + if [ ! -f control -o $CODE_DIR/debian/control -nt control ]; then + sed 's/\:native//g' $CODE_DIR/debian/control > control + mk-build-deps --install --root-cmd sudo control + fi } if [ -f "/usr/bin/ccache" ] ; then diff -Nru unity8-8.02+15.04.20150109.2/debian/changelog unity8-8.02+15.04.20150113.1/debian/changelog --- unity8-8.02+15.04.20150109.2/debian/changelog 2015-01-14 18:00:18.000000000 +0000 +++ unity8-8.02+15.04.20150113.1/debian/changelog 2015-01-14 18:00:18.000000000 +0000 @@ -1,3 +1,32 @@ +unity8 (8.02+15.04.20150113.1-0ubuntu1) vivid; urgency=low + + [ Andrea Cimitan ] + * support background on horizontal cards with summary (LP: #1393008) + + [ Gerry Boland ] + * DashCommunicator: replace QDBusInterface with a non-blocking + simplification which does not introspect the service on creation + (LP: #1403508) + + [ Leo Arias ] + * Added an autopilot test for the edges demo. + + [ Albert Astals ] + * Don't show the manage dash pull up arrow on temp scopes (LP: + #1401869) + * Remove hack, newer Qt already support keyClick(char) + * Tests: Add Qt 5.5 removal TODOs + * Make sure we use fPIC when compiling files for the static library + too + * Make sure changing a scope doesn't trigger creation/destruction of + delegates until it's finished (LP: #1410122) + + [ Michael Zanetti ] + * patch debian/control file before using it to make it work with mk- + build-deps + + -- Ubuntu daily release Tue, 13 Jan 2015 20:58:08 +0000 + unity8 (8.02+15.04.20150109.2-0ubuntu1) vivid; urgency=low [ Michał Sawicz ] diff -Nru unity8-8.02+15.04.20150109.2/plugins/Dash/CardCreator.js unity8-8.02+15.04.20150113.1/plugins/Dash/CardCreator.js --- unity8-8.02+15.04.20150109.2/plugins/Dash/CardCreator.js 2015-01-09 10:37:49.000000000 +0000 +++ unity8-8.02+15.04.20150113.1/plugins/Dash/CardCreator.js 2015-01-13 20:57:49.000000000 +0000 @@ -320,7 +320,7 @@ var hasSummary = components["summary"] || false; var artAndSummary = hasArt && hasSummary; var isHorizontal = template["card-layout"] === "horizontal"; - var hasBackground = !isHorizontal && (template["card-background"] || components["background"] || artAndSummary); + var hasBackground = (hasSummary || !isHorizontal) && (template["card-background"] || components["background"] || artAndSummary); var hasTitle = components["title"] || false; var hasMascot = components["mascot"] || false; var hasEmblem = components["emblem"] && !(hasMascot && template["card-size"] === "small") || false; diff -Nru unity8-8.02+15.04.20150109.2/plugins/Unity/DashCommunicator/dashconnection.cpp unity8-8.02+15.04.20150113.1/plugins/Unity/DashCommunicator/dashconnection.cpp --- unity8-8.02+15.04.20150109.2/plugins/Unity/DashCommunicator/dashconnection.cpp 2015-01-09 10:37:49.000000000 +0000 +++ unity8-8.02+15.04.20150113.1/plugins/Unity/DashCommunicator/dashconnection.cpp 2015-01-13 20:56:45.000000000 +0000 @@ -19,12 +19,42 @@ #include #include +/* The default implementation of AbstractDBusServiceMonitor creates a QDBusInterface when the service + * appears on the bus. + * + * On construction QDBusInterface synchronously introspects the service, which will block the GUI + * thread of this process if the service is busy. QDBusAbstractInterface does not perform this + * introspection, so let's subclass that and avoid the blocking scenario. + * + * However we lose Qt's wrapping of the DBus service with a MetaObject, with the result that we + * cannot easily connect to DBus signals with the usual connect() calls. So this approach only + * suited to push communication with the DBus service. + */ +class AsyncDBusInterface : public QDBusAbstractInterface +{ +public: + AsyncDBusInterface(const QString &service, const QString &path, + const QString &interface, const QDBusConnection &connection, + QObject *parent = 0) + : QDBusAbstractInterface(service, path, interface.toLatin1().data(), connection, parent) + {} + ~AsyncDBusInterface() = default; +}; + + DashConnection::DashConnection(const QString &service, const QString &path, const QString &interface, QObject *parent): AbstractDBusServiceMonitor(service, path, interface, SessionBus, parent) { } +/* Override the default implementation to create a non-blocking DBus interface (see note above). */ +QDBusAbstractInterface* DashConnection::createInterface(const QString &service, const QString &path, + const QString &interface, const QDBusConnection &connection) +{ + return new AsyncDBusInterface(service, path, interface, connection); +} + void DashConnection::setCurrentScope(int index, bool animate, bool isSwipe) { if (dbusInterface()) { diff -Nru unity8-8.02+15.04.20150109.2/plugins/Unity/DashCommunicator/dashconnection.h unity8-8.02+15.04.20150113.1/plugins/Unity/DashCommunicator/dashconnection.h --- unity8-8.02+15.04.20150109.2/plugins/Unity/DashCommunicator/dashconnection.h 2015-01-09 10:37:49.000000000 +0000 +++ unity8-8.02+15.04.20150113.1/plugins/Unity/DashCommunicator/dashconnection.h 2015-01-13 20:56:45.000000000 +0000 @@ -20,7 +20,6 @@ // local #include "abstractdbusservicemonitor.h" - class DashConnection: public AbstractDBusServiceMonitor { Q_OBJECT @@ -29,6 +28,10 @@ public Q_SLOTS: void setCurrentScope(int index, bool animate, bool isSwipe); + +private: + QDBusAbstractInterface* createInterface(const QString &service, const QString &path, + const QString &interface, const QDBusConnection &connection) override; }; #endif diff -Nru unity8-8.02+15.04.20150109.2/po/fa.po unity8-8.02+15.04.20150113.1/po/fa.po --- unity8-8.02+15.04.20150109.2/po/fa.po 2015-01-09 10:37:49.000000000 +0000 +++ unity8-8.02+15.04.20150113.1/po/fa.po 2015-01-13 20:56:02.000000000 +0000 @@ -8,26 +8,26 @@ "Project-Id-Version: unity8\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2014-12-10 10:55+0100\n" -"PO-Revision-Date: 2014-12-10 12:53+0000\n" +"PO-Revision-Date: 2015-01-09 15:59+0000\n" "Last-Translator: Danial Behzadi \n" "Language-Team: Persian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2014-12-13 07:11+0000\n" -"X-Generator: Launchpad (build 17286)\n" +"X-Launchpad-Export-Date: 2015-01-10 07:18+0000\n" +"X-Generator: Launchpad (build 17298)\n" #: plugins/LightDM/Greeter.cpp:130 msgid "Password: " msgstr "گذرواژه: " #: plugins/Unity/Launcher/launcheritem.cpp:45 -#: plugins/Unity/Launcher/launcheritem.cpp:100 +#: plugins/Unity/Launcher/launcheritem.cpp:91 msgid "Pin shortcut" msgstr "سنجاق کردن میانبر" -#: plugins/Unity/Launcher/launcheritem.cpp:100 +#: plugins/Unity/Launcher/launcheritem.cpp:91 msgid "Unpin shortcut" msgstr "برداشتن سنجاق میانبر" @@ -50,45 +50,45 @@ msgid_plural "Please wait %1 minutes and then try again…" msgstr[0] "لطفاُ %1 دقیقه صبر نموده و سپس مجدّداً تلاش نمایید…" -#: qml/Components/Dialogs.qml:70 +#: qml/Components/Dialogs.qml:74 msgid "Log out" msgstr "خروج از حساب" -#: qml/Components/Dialogs.qml:71 +#: qml/Components/Dialogs.qml:75 msgid "Are you sure you want to log out?" msgstr "مطمئنید که می‌خواهید از حساب خارج شوید" -#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97 -#: qml/Components/Dialogs.qml:122 +#: qml/Components/Dialogs.qml:77 qml/Components/Dialogs.qml:101 +#: qml/Components/Dialogs.qml:126 msgid "No" msgstr "خیر" -#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104 -#: qml/Components/Dialogs.qml:129 +#: qml/Components/Dialogs.qml:84 qml/Components/Dialogs.qml:108 +#: qml/Components/Dialogs.qml:133 msgid "Yes" msgstr "بله" -#: qml/Components/Dialogs.qml:94 +#: qml/Components/Dialogs.qml:98 msgid "Shut down" msgstr "خاموش کردن" -#: qml/Components/Dialogs.qml:95 +#: qml/Components/Dialogs.qml:99 msgid "Are you sure you want to shut down?" msgstr "مطمئنید که می‌خواهید خاموش کنید؟" -#: qml/Components/Dialogs.qml:119 +#: qml/Components/Dialogs.qml:123 msgid "Reboot" msgstr "راه‌اندازی مجدّد" -#: qml/Components/Dialogs.qml:120 +#: qml/Components/Dialogs.qml:124 msgid "Are you sure you want to reboot?" msgstr "مطمئنید که می‌خواهید مجدّداً راه‌اندازی کنسد؟" -#: qml/Components/Dialogs.qml:144 +#: qml/Components/Dialogs.qml:148 msgid "Power" msgstr "توان" -#: qml/Components/Dialogs.qml:145 +#: qml/Components/Dialogs.qml:149 msgid "" "Are you sure you would like\n" "to power off?" @@ -96,15 +96,15 @@ "آیا مطمئن هستید که\n" "می‌خواهید خاموش کنید؟" -#: qml/Components/Dialogs.qml:147 +#: qml/Components/Dialogs.qml:151 msgid "Power off" msgstr "خاموش کردن" -#: qml/Components/Dialogs.qml:157 +#: qml/Components/Dialogs.qml:161 msgid "Restart" msgstr "شروع مجدّد" -#: qml/Components/Dialogs.qml:167 +#: qml/Components/Dialogs.qml:171 msgid "Cancel" msgstr "لغو" @@ -112,43 +112,43 @@ msgid "Skip intro" msgstr "پرش از مقدّمه" -#: qml/Components/EdgeDemo.qml:125 +#: qml/Components/EdgeDemo.qml:112 msgid "Right edge" msgstr "لبه‌ی راست" -#: qml/Components/EdgeDemo.qml:126 +#: qml/Components/EdgeDemo.qml:113 msgid "Try swiping from the right edge to unlock the phone" msgstr "برای باز کردن قفل تلفن، از لبه‌ی راست بکشید" -#: qml/Components/EdgeDemo.qml:157 +#: qml/Components/EdgeDemo.qml:144 msgid "Top edge" msgstr "لبه‌ی بالا" -#: qml/Components/EdgeDemo.qml:158 +#: qml/Components/EdgeDemo.qml:145 msgid "Try swiping from the top edge to access the indicators" msgstr "برای دست‌رسی به نشانگرها، از لبه‌ی بالا بکشید" -#: qml/Components/EdgeDemo.qml:183 +#: qml/Components/EdgeDemo.qml:170 msgid "Close" msgstr "بستن" -#: qml/Components/EdgeDemo.qml:184 +#: qml/Components/EdgeDemo.qml:171 msgid "Swipe up again to close the settings screen" msgstr "برای بستن صفحه‌ی تنظیمات، دوباره به بالا بکشپد" -#: qml/Components/EdgeDemo.qml:214 +#: qml/Components/EdgeDemo.qml:201 msgid "Left edge" msgstr "لبه‌ی چپ" -#: qml/Components/EdgeDemo.qml:215 +#: qml/Components/EdgeDemo.qml:202 msgid "Swipe from the left to reveal the launcher for quick access to apps" msgstr "برای آشکار شدن اجراگر به منظور دست‌رسی سریع به اپ‌ها از سمت چپ بکشید" -#: qml/Components/EdgeDemo.qml:242 +#: qml/Components/EdgeDemo.qml:229 msgid "Well done" msgstr "عالی بود" -#: qml/Components/EdgeDemo.qml:243 +#: qml/Components/EdgeDemo.qml:230 msgid "" "You have now mastered the edge gestures and can start using the " "phone

Tap on the screen to start" @@ -156,44 +156,44 @@ "هم اکنون در استفاده از ژست های حرکتی مهارت لازم را دارید و می‌توانید استفاده " "از تلفن را آغاز کنید

برای شروع صفحه را لمس کنید" -#: qml/Components/Lockscreen.qml:238 +#: qml/Components/Lockscreen.qml:223 msgid "Return to Call" msgstr "بازگشت به تماس" -#: qml/Components/Lockscreen.qml:238 +#: qml/Components/Lockscreen.qml:223 msgid "Emergency Call" msgstr "تماس اضطراری" -#: qml/Components/Lockscreen.qml:270 +#: qml/Components/Lockscreen.qml:255 msgid "OK" msgstr "قبول" -#: qml/Dash/GenericScopeView.qml:431 qml/Dash/GenericScopeView.qml:588 +#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591 msgid "See less" msgstr "کم‌تر ببینید" -#: qml/Dash/GenericScopeView.qml:431 +#: qml/Dash/GenericScopeView.qml:434 msgid "See all" msgstr "دیدن همه" -#: qml/Dash/GenericScopeView.qml:493 qml/Dash/PageHeader.qml:267 +#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:268 #: qml/Panel/SearchIndicator.qml:27 msgid "Search" msgstr "جست‌وجو" -#: qml/Dash/PageHeader.qml:260 +#: qml/Dash/PageHeader.qml:261 msgid "Store" msgstr "فروشگاه" -#: qml/Dash/PageHeader.qml:277 +#: qml/Dash/PageHeader.qml:278 msgid "Settings" msgstr "تنظیمات" -#: qml/Dash/PageHeader.qml:284 +#: qml/Dash/PageHeader.qml:285 msgid "Remove from Favorites" msgstr "برداشتن از برگزیده‌ها" -#: qml/Dash/PageHeader.qml:284 +#: qml/Dash/PageHeader.qml:285 msgid "Add to Favorites" msgstr "افزودن به برگزیده‌ها" @@ -289,49 +289,49 @@ msgid "Roaming" msgstr "رومینگ" -#: qml/Shell.qml:367 +#: qml/Shell.qml:402 #, qt-format msgid "Enter %1" msgstr "%1 را وارد کنید" -#: qml/Shell.qml:368 qml/Wizard/Pages/passwd-set.qml:60 +#: qml/Shell.qml:394 msgid "Enter passphrase" msgstr "عبارت‌عبور را وارد کنید" -#: qml/Shell.qml:369 +#: qml/Shell.qml:398 msgid "Enter passcode" msgstr "رمزعبور را وارد کنید" -#: qml/Shell.qml:370 +#: qml/Shell.qml:403 #, qt-format msgid "Sorry, incorrect %1" msgstr "متأسّفیم، %1 نادرست بود" -#: qml/Shell.qml:371 +#: qml/Shell.qml:395 msgid "Sorry, incorrect passphrase" msgstr "متأسّفیم، عبارت‌عبور نادرست بود" -#: qml/Shell.qml:372 +#: qml/Shell.qml:396 msgid "Please re-enter" msgstr "لطفاً دوباره وارد کنید" -#: qml/Shell.qml:373 +#: qml/Shell.qml:399 msgid "Sorry, incorrect passcode" msgstr "متأسّفیم، رمزعبور نادرست بود" -#: qml/Shell.qml:467 qml/Wizard/Pages/passwd-confirm.qml:53 +#: qml/Shell.qml:444 msgid "Sorry, incorrect passphrase." msgstr "متأسّفیم، عبارت‌عبور نادرست است." -#: qml/Shell.qml:468 qml/Wizard/Pages/passwd-confirm.qml:54 +#: qml/Shell.qml:445 msgid "Sorry, incorrect passcode." msgstr "متأسّفیم، رمزعبور نادرست است." -#: qml/Shell.qml:469 +#: qml/Shell.qml:446 msgid "This will be your last attempt." msgstr "این آخرین تلاش شما خواهد بود." -#: qml/Shell.qml:471 +#: qml/Shell.qml:448 msgid "" "If passphrase is entered incorrectly, your phone will conduct a factory " "reset and all personal data will be deleted." @@ -339,7 +339,7 @@ "اگر عبارت‌عبور نادرست وارد شود، تلفن شما بازنشانی کارخانه خواهد شد و تمامی " "اطّلاعات شخصی حذف خواهند شد." -#: qml/Shell.qml:472 +#: qml/Shell.qml:449 msgid "" "If passcode is entered incorrectly, your phone will conduct a factory reset " "and all personal data will be deleted." @@ -349,98 +349,100 @@ #: qml/Wizard/Page.qml:89 msgid "Back" -msgstr "" +msgstr "بازگشت" #: qml/Wizard/Pages/10-welcome.qml:27 msgid "Hi!" -msgstr "" +msgstr "سلام!" #: qml/Wizard/Pages/10-welcome.qml:44 msgid "Welcome to your Ubuntu phone." -msgstr "" +msgstr "به تلفن اوبونتوی خودتان خوش آمدید." #: qml/Wizard/Pages/10-welcome.qml:52 msgid "Let’s get started." -msgstr "" +msgstr "بیایید شروع کینم." #: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:128 #: qml/Wizard/Pages/40-wifi.qml:197 qml/Wizard/Pages/50-location.qml:131 #: qml/Wizard/Pages/60-reporting.qml:50 qml/Wizard/Pages/passwd-confirm.qml:82 #: qml/Wizard/Pages/passwd-set.qml:90 msgid "Continue" -msgstr "" +msgstr "ادامه" #: qml/Wizard/Pages/20-sim.qml:25 msgid "Add a SIM card and restart your device" -msgstr "" +msgstr "سیم‌کارتی افزوده و دستگاهتان را شروع مجدّد کنید" #: qml/Wizard/Pages/20-sim.qml:55 msgid "Without it, you won’t be able to make calls or use text messaging." msgstr "" +"بدون آن، نخواهید توانست تماس گرفته با از پیام‌رسانی متنی استفاده کنید." #: qml/Wizard/Pages/20-sim.qml:69 qml/Wizard/Pages/40-wifi.qml:197 msgid "Skip" -msgstr "" +msgstr "پرش" #: qml/Wizard/Pages/30-passwd-type.qml:39 msgid "Lock security" -msgstr "" +msgstr "امنیت قفل" #: qml/Wizard/Pages/30-passwd-type.qml:74 msgid "Please select how you’d like to unlock your phone." -msgstr "" +msgstr "لطفاً برگزینید که می‌خواهید چگونه قفل تلفنتان را باز کنید." #: qml/Wizard/Pages/30-passwd-type.qml:97 msgid "Swipe" -msgstr "" +msgstr "لغزش" #: qml/Wizard/Pages/30-passwd-type.qml:98 msgid "No security" -msgstr "" +msgstr "بدون امنیت" #: qml/Wizard/Pages/30-passwd-type.qml:100 msgid "Passcode" -msgstr "" +msgstr "رمزعبور" #: qml/Wizard/Pages/30-passwd-type.qml:101 msgid "4 digits only" -msgstr "" +msgstr "فقط ۴ رقم" #: qml/Wizard/Pages/30-passwd-type.qml:103 msgid "Passphrase" -msgstr "" +msgstr "عبارت‌عبور" #: qml/Wizard/Pages/30-passwd-type.qml:104 msgid "Numbers and letters" -msgstr "" +msgstr "اعداد و حروف" #: qml/Wizard/Pages/40-wifi.qml:28 msgid "Connect to Wi‑Fi" -msgstr "" +msgstr "اتّصال به بی‌سیم" #: qml/Wizard/Pages/40-wifi.qml:147 msgid "Available networks…" -msgstr "" +msgstr "شبکه‌های موجود…" #: qml/Wizard/Pages/40-wifi.qml:148 msgid "No available networks." -msgstr "" +msgstr "هیچ شبکه‌ای موجود نیست." #: qml/Wizard/Pages/50-location.qml:27 msgid "Location" -msgstr "" +msgstr "موقعیت" #: qml/Wizard/Pages/50-location.qml:62 msgid "Let the phone detect your location:" -msgstr "" +msgstr "اجازه به تلفن برای تشخیص موقعیّتتان:" #: qml/Wizard/Pages/50-location.qml:69 msgid "Using GPS only (less accurate)" -msgstr "" +msgstr "فقط با استفاده از جی‌پی‌اس (دقّت کم‌تر)" #: qml/Wizard/Pages/50-location.qml:86 msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)" msgstr "" +"با استفاده از جی‌پی‌اس، بی‌سیم ناشناس و اطّلاعات شبکه‌ی سلّولی (پیشنهاد شده)" #. TRANSLATORS: HERE is a trademark for Nokia's location service, you probably shouldn't translate it #: qml/Wizard/Pages/50-location.qml:103 @@ -448,81 +450,87 @@ "By selecting this option you agree to the Nokia HERE terms and " "conditions." msgstr "" +"با انتخاب این گزینه، با شرایط و ضوابط HERE نوکیا موافقت " +"می‌کنید." #: qml/Wizard/Pages/50-location.qml:112 msgid "Not at all" -msgstr "" +msgstr "به هیچ وجه" #: qml/Wizard/Pages/50-location.qml:124 msgid "You can change your mind later in System Settings." -msgstr "" +msgstr "می‌توانید بعدها نظرتان را در تنظیمات سامانه تغییر دهید." #: qml/Wizard/Pages/60-reporting.qml:24 msgid "Improving your experience" -msgstr "" +msgstr "ارتقای تجربه‌ی شما" #: qml/Wizard/Pages/60-reporting.qml:36 msgid "" "Your phone is set up to automatically report errors to Canonical and its " "partners, the makers of the operating system." msgstr "" +"تلفن شما تنظیم شده تا خطاها را به صورت خودکار به سازندگان سیستم‌عامل یعنی " +"شرکت کنونیکال و شرکایش گزارش دهد." #: qml/Wizard/Pages/60-reporting.qml:43 msgid "" "This can be disabled in System Settings under Security & " "Privacy" msgstr "" +"این می‌تواند در تنظیمات سامانه ذیل امنیت و محرمانگی غیرفعَال " +"شود" #: qml/Wizard/Pages/80-finished.qml:24 msgid "All done" -msgstr "" +msgstr "همه‌چیز انجام شد" #: qml/Wizard/Pages/80-finished.qml:39 msgid "Nice work!" -msgstr "" +msgstr "عالی بود!" #: qml/Wizard/Pages/80-finished.qml:46 msgid "Your phone is now ready to use." -msgstr "" +msgstr "هم‌اکنون تلفن شما آماده‌ی استفاده است." #: qml/Wizard/Pages/80-finished.qml:53 msgid "Finish" -msgstr "" +msgstr "پایان" #: qml/Wizard/Pages/here-terms.qml:27 msgid "Terms & Conditions" -msgstr "" +msgstr "شرایط و ضوابط" #: qml/Wizard/Pages/passwd-confirm.qml:49 msgid "Confirm passphrase" -msgstr "" +msgstr "تأیید عبارت‌عبور" #: qml/Wizard/Pages/passwd-confirm.qml:50 msgid "Confirm passcode" -msgstr "" +msgstr "تأیید رمزعبور" #: qml/Wizard/Pages/passwd-confirm.qml:53 #: qml/Wizard/Pages/passwd-confirm.qml:54 msgid "Please try again." -msgstr "" +msgstr "لطفاً دوباره سعی کنید." #: qml/Wizard/Pages/passwd-set.qml:61 msgid "Choose your passcode" -msgstr "" +msgstr "رمزعبور خود را انتخاب کنید" #: qml/Wizard/Pages/passwd-set.qml:68 msgid "Passphrase must be 4 characters long" -msgstr "" +msgstr "عبارت‌عبور باید ۴ نویسه طول داشته باشد" #: qml/Wizard/StackButton.qml:39 #, qt-format msgid "〈 %1" -msgstr "" +msgstr "〈 %1" #: qml/Wizard/StackButton.qml:42 #, qt-format msgid "%1 〉" -msgstr "" +msgstr "%1 〉" #~ msgid "Type or say a command" #~ msgstr "دستوری را بنویسید یا بگویید" diff -Nru unity8-8.02+15.04.20150109.2/qml/Dash/Dash.qml unity8-8.02+15.04.20150113.1/qml/Dash/Dash.qml --- unity8-8.02+15.04.20150109.2/qml/Dash/Dash.qml 2015-01-09 10:39:54.000000000 +0000 +++ unity8-8.02+15.04.20150113.1/qml/Dash/Dash.qml 2015-01-13 20:56:54.000000000 +0000 @@ -304,8 +304,8 @@ Image { source: "graphics/overview_hint.png" anchors.horizontalCenter: parent.horizontalCenter - opacity: (scopeItem.scope ? scopeItem.pageHeaderTotallyVisible : scopes.count == 0 || dashContent.pageHeaderTotallyVisible) && - (overviewDragHandle.enabled || bottomEdgeController.progress != 0) ? 1 : 0 + opacity: !scopeItem.scope && (scopes.count == 0 || dashContent.pageHeaderTotallyVisible) && + (overviewDragHandle.enabled || overviewDragHandle.status.progress != 0) ? 1 : 0 Behavior on opacity { enabled: bottomEdgeController.progress == 0 UbuntuNumberAnimation {} diff -Nru unity8-8.02+15.04.20150109.2/qml/Dash/GenericScopeView.qml unity8-8.02+15.04.20150113.1/qml/Dash/GenericScopeView.qml --- unity8-8.02+15.04.20150109.2/qml/Dash/GenericScopeView.qml 2015-01-09 10:40:32.000000000 +0000 +++ unity8-8.02+15.04.20150113.1/qml/Dash/GenericScopeView.qml 2015-01-13 20:57:40.000000000 +0000 @@ -41,6 +41,7 @@ property bool visibleToParent: false property alias pageHeaderTotallyVisible: categoryView.pageHeaderTotallyVisible property var holdingList: null + property bool wasCurrentOnMoveStart: false property var scopeStyle: ScopeStyle { style: scope ? scope.customizations : {} @@ -116,6 +117,9 @@ } onIsCurrentChanged: { + if (!holdingList || !holdingList.moving) { + wasCurrentOnMoveStart = scopeView.isCurrent; + } if (pageHeaderLoader.item && showPageHeader) { pageHeaderLoader.item.resetSearch(); } @@ -142,6 +146,15 @@ onHideDash: subPageLoader.closeSubPage() } + Connections { + target: holdingList + onMovingChanged: { + if (!moving) { + wasCurrentOnMoveStart = scopeView.isCurrent; + } + } + } + Rectangle { anchors.fill: parent color: scopeView.scopeStyle ? scopeView.scopeStyle.background : "transparent" @@ -367,7 +380,11 @@ function updateRanges() { // Don't want to create stress by requesting more items during scope - // changes so unless you're not part of the visible scopes just return + // changes so unless you're not part of the visible scopes just return. + // For the visible scopes we need to do some work, the previously non visible + // scope needs to adjust its ranges so that we define the new visible range, + // that still means no creation/destruction of delegates, it's just about changing + // the culling of the items so they are actually visible if (holdingList && holdingList.moving && !scopeView.visibleToParent) { return; } @@ -412,7 +429,18 @@ if (scopeView.isCurrent || scopeView.visibleToParent) { item.displayMarginBeginning = displayMarginBeginning; item.displayMarginEnd = displayMarginEnd; - item.cacheBuffer = scopeView.isCurrent ? categoryView.height * 1.5 : 0; + if (holdingList && holdingList.moving) { + // If we are moving we need to reset the cache buffer of the + // view that was not visible (i.e. !wasCurrentOnMoveStart) to 0 since + // otherwise the cache buffer we had set to preload the items of the + // visible range will trigger some item creations and we want move to + // be as smooth as possible meaning no need creations + if (!wasCurrentOnMoveStart) { + item.cacheBuffer = 0; + } + } else { + item.cacheBuffer = categoryView.height * 1.5; + } } else { var visibleRange = baseItem.height + displayMarginEnd + displayMarginBeginning; if (visibleRange < 0) { diff -Nru unity8-8.02+15.04.20150109.2/src/libunity8-private/abstractdbusservicemonitor.cpp unity8-8.02+15.04.20150113.1/src/libunity8-private/abstractdbusservicemonitor.cpp --- unity8-8.02+15.04.20150109.2/src/libunity8-private/abstractdbusservicemonitor.cpp 2015-01-09 10:37:49.000000000 +0000 +++ unity8-8.02+15.04.20150113.1/src/libunity8-private/abstractdbusservicemonitor.cpp 2015-01-13 20:56:45.000000000 +0000 @@ -32,19 +32,20 @@ , m_service(service) , m_path(path) , m_interface(interface) + , m_bus(bus) , m_watcher(new QDBusServiceWatcher(service, (bus == SystemBus) ? QDBusConnection::systemBus() : QDBusConnection::sessionBus())) , m_dbusInterface(nullptr) { - connect(m_watcher, &QDBusServiceWatcher::serviceRegistered, this, &AbstractDBusServiceMonitor::createInterface); - connect(m_watcher, &QDBusServiceWatcher::serviceUnregistered, this, &AbstractDBusServiceMonitor::destroyInterface); + connect(m_watcher, &QDBusServiceWatcher::serviceRegistered, this, &AbstractDBusServiceMonitor::onServiceRegistered); + connect(m_watcher, &QDBusServiceWatcher::serviceUnregistered, this, &AbstractDBusServiceMonitor::onServiceUnregistered); // Connect to the service if it's up already QDBusConnectionInterface* sessionBus = QDBusConnection::sessionBus().interface(); QDBusReply reply = sessionBus->isServiceRegistered(m_service); if (reply.isValid() && reply.value()) { - createInterface(m_service); + onServiceRegistered(m_service); } } @@ -54,19 +55,31 @@ delete m_dbusInterface; } -void AbstractDBusServiceMonitor::createInterface(const QString &) +void AbstractDBusServiceMonitor::onServiceRegistered(const QString &) { if (m_dbusInterface != nullptr) { delete m_dbusInterface; m_dbusInterface = nullptr; } - m_dbusInterface = new QDBusInterface(m_service, m_path, m_interface, - QDBusConnection::sessionBus()); + m_dbusInterface = createInterface(m_service, m_path, m_interface, + (m_bus == SystemBus) ? QDBusConnection::systemBus() + : QDBusConnection::sessionBus()); Q_EMIT serviceAvailableChanged(true); } -void AbstractDBusServiceMonitor::destroyInterface(const QString &) +/* + * Default implementation creates a QDBusInterface. This performs blocking introspection of the + * service at initialization, which may be undesirable if the service is slow/blocked. + */ +QDBusAbstractInterface* +AbstractDBusServiceMonitor::createInterface(const QString &service, const QString &path, + const QString &interface, const QDBusConnection &connection) +{ + return new QDBusInterface(service, path, interface, connection); +} + +void AbstractDBusServiceMonitor::onServiceUnregistered(const QString &) { if (m_dbusInterface != nullptr) { delete m_dbusInterface; @@ -76,7 +89,7 @@ Q_EMIT serviceAvailableChanged(false); } -QDBusInterface* AbstractDBusServiceMonitor::dbusInterface() const +QDBusAbstractInterface* AbstractDBusServiceMonitor::dbusInterface() const { return m_dbusInterface; } diff -Nru unity8-8.02+15.04.20150109.2/src/libunity8-private/abstractdbusservicemonitor.h unity8-8.02+15.04.20150113.1/src/libunity8-private/abstractdbusservicemonitor.h --- unity8-8.02+15.04.20150109.2/src/libunity8-private/abstractdbusservicemonitor.h 2015-01-09 10:37:49.000000000 +0000 +++ unity8-8.02+15.04.20150113.1/src/libunity8-private/abstractdbusservicemonitor.h 2015-01-13 20:56:45.000000000 +0000 @@ -24,7 +24,7 @@ #include #include -class QDBusInterface; +class QDBusAbstractInterface; class QDBusServiceWatcher; class Q_DECL_EXPORT AbstractDBusServiceMonitor : public QObject @@ -44,7 +44,7 @@ QObject *parent = 0); ~AbstractDBusServiceMonitor(); - QDBusInterface* dbusInterface() const; + QDBusAbstractInterface* dbusInterface() const; bool serviceAvailable() const; @@ -52,15 +52,19 @@ void serviceAvailableChanged(bool available); private Q_SLOTS: - void createInterface(const QString &service); - void destroyInterface(const QString &service); + void onServiceRegistered(const QString &service); + void onServiceUnregistered(const QString &service); protected: + virtual QDBusAbstractInterface* createInterface(const QString &service, const QString &path, + const QString &interface, const QDBusConnection &connection); + const QString m_service; const QString m_path; const QString m_interface; + const Bus m_bus; QDBusServiceWatcher* m_watcher; - QDBusInterface* m_dbusInterface; + QDBusAbstractInterface* m_dbusInterface; }; #endif // ABSTRACTDBUSSERVICEMONITOR_H diff -Nru unity8-8.02+15.04.20150109.2/tests/autopilot/unity8/shell/tests/test_edges_demo.py unity8-8.02+15.04.20150113.1/tests/autopilot/unity8/shell/tests/test_edges_demo.py --- unity8-8.02+15.04.20150109.2/tests/autopilot/unity8/shell/tests/test_edges_demo.py 2015-01-09 10:41:52.000000000 +0000 +++ unity8-8.02+15.04.20150113.1/tests/autopilot/unity8/shell/tests/test_edges_demo.py 2015-01-13 20:56:33.000000000 +0000 @@ -31,7 +31,7 @@ class EdgesDemoTestCase(tests.UnityTestCase): def setUp(self): - super().setUp() + super(EdgesDemoTestCase, self).setUp() self._qml_mock_enabled = False self._data_dirs_mock_enabled = False self._lightdm_mock_type = False diff -Nru unity8-8.02+15.04.20150109.2/tests/mocks/LightDM/demo/CMakeLists.txt unity8-8.02+15.04.20150113.1/tests/mocks/LightDM/demo/CMakeLists.txt --- unity8-8.02+15.04.20150109.2/tests/mocks/LightDM/demo/CMakeLists.txt 2015-01-09 10:37:49.000000000 +0000 +++ unity8-8.02+15.04.20150113.1/tests/mocks/LightDM/demo/CMakeLists.txt 2015-01-13 20:57:30.000000000 +0000 @@ -28,6 +28,7 @@ qt5_use_modules(MockLightDM-demo Concurrent Gui) qt5_use_modules(MockLightDM-demo-shared Concurrent Gui) +set_target_properties(MockLightDM-demo PROPERTIES COMPILE_FLAGS -fPIC) set_target_properties(MockLightDM-demo-shared PROPERTIES OUTPUT_NAME lightdm-qt5-2) diff -Nru unity8-8.02+15.04.20150109.2/tests/qmltests/Dash/tst_Card.qml unity8-8.02+15.04.20150113.1/tests/qmltests/Dash/tst_Card.qml --- unity8-8.02+15.04.20150109.2/tests/qmltests/Dash/tst_Card.qml 2015-01-09 10:42:41.000000000 +0000 +++ unity8-8.02+15.04.20150113.1/tests/qmltests/Dash/tst_Card.qml 2015-01-13 20:57:49.000000000 +0000 @@ -61,7 +61,7 @@ }, { "name": "Art, header, summary - horizontal", - "layout": { "template": { "card-layout": "horizontal" }, + "layout": { "template": { "card-layout": "horizontal", "card-background": { "type": "gradient", "elements": ["grey", "white"] } }, "components": JSON.parse(Helpers.fullMapping) } }, { @@ -407,7 +407,7 @@ return [ { tag: "Art and summary", visible: true, color: "#ffffff", index: 0 }, { tag: "No Summary", visible: false, index: 6 }, - { tag: "Horizontal", visible: false, index: 5 }, + { tag: "Horizontal", visible: true, color: "#808080", index: 5 }, { tag: "Grey background", visible: true, color: "#808080", index: 10 }, { tag: "Overriden Gradient background", visible: true, color: "#808080", gradientColor: "#ffffff", background: {type: "color", elements: ["grey", "white"]}, index: 10 }, diff -Nru unity8-8.02+15.04.20150109.2/tests/qmltests/Dash/tst_DashContent.qml unity8-8.02+15.04.20150113.1/tests/qmltests/Dash/tst_DashContent.qml --- unity8-8.02+15.04.20150109.2/tests/qmltests/Dash/tst_DashContent.qml 2015-01-09 10:42:41.000000000 +0000 +++ unity8-8.02+15.04.20150113.1/tests/qmltests/Dash/tst_DashContent.qml 2015-01-13 20:57:40.000000000 +0000 @@ -537,5 +537,62 @@ compare(categoryListView.pageHeader.item.searchHint, "Search People"); } + + function compareArrays(a, b) { + if (a.length != b.length) return false; + for (var i in a) { + if (a[i] != b[i]) return false; + } + return true; + } + + function getSettledButtons() { + var buttons = findChildsByType(dashContent, "AbstractButton"); + wait(2500); + var aux = findChildsByType(dashContent, "AbstractButton"); + while (!compareArrays(aux, buttons)) { + buttons = aux; + wait(2500); + aux = findChildsByType(dashContent, "AbstractButton"); + } + return buttons; + } + + function test_noDelegateCreationDestructionOnMove() { + // Our cards are of type AbstractButton as defined in CardCreator.js + // This gives also other things that are not cards but for our purpose it + // does not matter + + // Wait for the buttons to settle + var buttons = getSettledButtons(); + + // Move the scopes so that the item on the right is the current one + // without releasing the button + mouseFlick(dashContent, dashContent.width - units.gu(1), units.gu(1), units.gu(1), units.gu(1), true, false); + + // Make sure we have changed to a new scope + compare(dashContent.currentIndex, 1); + + // Wait for the buttons to settle + var buttons2 = getSettledButtons(); + + // Verify we have exactly the same buttons as before starting to move + verify(compareArrays(buttons2, buttons)); + + // Release the mouse + mouseRelease(dashContent, units.gu(1), units.gu(1)); + + // Wait for the scopes list to stop moving + var dashContentList = findChild(dashContent, "dashContentList"); + tryCompare(dashContentList, "moving", false); + compare(dashContent.currentIndex, 1); + + // Wait for the buttons to settle + var buttons3 = getSettledButtons(); + + // Verify we have a different set of buttons now + expectFail("", "There has to be new cards after releasing the list is not moving anymore"); + verify(compareArrays(buttons3, buttons)); + } } } diff -Nru unity8-8.02+15.04.20150109.2/tests/utils/modules/Unity/Test/UnityTestCase.qml unity8-8.02+15.04.20150113.1/tests/utils/modules/Unity/Test/UnityTestCase.qml --- unity8-8.02+15.04.20150109.2/tests/utils/modules/Unity/Test/UnityTestCase.qml 2015-01-09 10:42:41.000000000 +0000 +++ unity8-8.02+15.04.20150113.1/tests/utils/modules/Unity/Test/UnityTestCase.qml 2015-01-13 20:57:40.000000000 +0000 @@ -37,6 +37,7 @@ this.getCurrentTimeMs = function() {return this.currentTimeMs} } + // TODO This function can be removed altogether once we use Qt 5.5 which has the same feature function mouseClick(item, x, y, button, modifiers, delay) { if (button === undefined) button = Qt.LeftButton; @@ -52,6 +53,7 @@ qtest_fail("window not shown", 2); } + // TODO This function can be removed altogether once we use Qt 5.5 which has the same feature function mouseDoubleClick(item, x, y, button, modifiers, delay) { if (button === undefined) button = Qt.LeftButton; @@ -67,6 +69,7 @@ qtest_fail("window not shown", 2) } + // TODO This function can be removed altogether once we use Qt 5.5 which has the same feature function mousePress(item, x, y, button, modifiers, delay) { if (button === undefined) button = Qt.LeftButton; @@ -82,6 +85,7 @@ qtest_fail("window not shown", 2) } + // TODO This function can be removed altogether once we use Qt 5.5 which has the same feature function mouseRelease(item, x, y, button, modifiers, delay) { if (button === undefined) button = Qt.LeftButton; @@ -170,78 +174,22 @@ return null; } + function findChildsByType(obj, typeName) { + var res = new Array(0); + for (var i in obj.children) { + var c = obj.children[i]; + if (UT.Util.isInstanceOf(c, typeName)) { + res.push(c) + } + res = res.concat(findChildsByType(c, typeName)); + } + return res; + } + // Type a full string instead of keyClick letter by letter - // TODO: this is not ugly, this is uber-ugly and does not support - // any special character. Remove the keyMap once keyClick(obj, char) - // has landed in upstream Qt. function typeString(str) { - var keyMap = { - "a": Qt.Key_A, - "b": Qt.Key_B, - "c": Qt.Key_C, - "d": Qt.Key_D, - "e": Qt.Key_E, - "f": Qt.Key_F, - "g": Qt.Key_G, - "h": Qt.Key_H, - "i": Qt.Key_I, - "j": Qt.Key_J, - "k": Qt.Key_K, - "l": Qt.Key_L, - "m": Qt.Key_M, - "n": Qt.Key_N, - "o": Qt.Key_O, - "p": Qt.Key_P, - "q": Qt.Key_Q, - "r": Qt.Key_R, - "s": Qt.Key_S, - "t": Qt.Key_T, - "u": Qt.Key_U, - "v": Qt.Key_V, - "w": Qt.Key_W, - "x": Qt.Key_X, - "y": Qt.Key_Y, - "z": Qt.Key_Z, - "A": Qt.Key_A, - "B": Qt.Key_B, - "C": Qt.Key_C, - "D": Qt.Key_D, - "E": Qt.Key_E, - "F": Qt.Key_F, - "G": Qt.Key_G, - "H": Qt.Key_H, - "I": Qt.Key_I, - "J": Qt.Key_J, - "K": Qt.Key_K, - "L": Qt.Key_L, - "M": Qt.Key_M, - "N": Qt.Key_N, - "O": Qt.Key_O, - "P": Qt.Key_P, - "Q": Qt.Key_Q, - "R": Qt.Key_R, - "S": Qt.Key_S, - "T": Qt.Key_T, - "U": Qt.Key_U, - "V": Qt.Key_V, - "W": Qt.Key_W, - "X": Qt.Key_X, - "Y": Qt.Key_Y, - "Z": Qt.Key_Z, - "0": Qt.Key_0, - "1": Qt.Key_1, - "2": Qt.Key_2, - "3": Qt.Key_3, - "4": Qt.Key_4, - "5": Qt.Key_5, - "6": Qt.Key_6, - "7": Qt.Key_7, - "8": Qt.Key_8, - "9": Qt.Key_9, - " ": Qt.Key_Space, - } for (var i = 0; i < str.length; i++) { - keyClick(keyMap[str[i]]) + keyClick(str[i]) } }