on xenial help sign in
Merge latest trunk
a96fa77Daniel van Vugt
debian/changelog+20
@@ -1,3 +1,23 @@
1+unity8 (8.12+16.04.20160330-0ubuntu1) xenial; urgency=medium
2+
3+ [ Albert Astals Cid ]
4+ * Use tutorialLeftLoader instead of tutorialLeft
5+
6+ [ CI Train Bot ]
7+ * Update translation template
8+
9+ [ Lukáš Tinkl ]
10+ * Fix the last chance popup colors/theme
11+
12+ [ Michael Terry ]
13+ * Adjust text for desktop right edge tutorial to be accurate. (LP:
14+ #1563103)
15+ * Fix OOBE wizard not setting your name. (LP: #1562872)
16+ * Fix showing "Retry" in password prompt when turning on screen in
17+ tablet mode.
18+
19+ -- Michał Sawicz <michal.sawicz@canonical.com> Wed, 30 Mar 2016 07:46:51 +0000
20+
1unity8 (8.12+16.04.20160323.2-0ubuntu1) xenial; urgency=medium
21unity8 (8.12+16.04.20160323.2-0ubuntu1) xenial; urgency=medium
2
22
3 [ Michael Terry ]
23 [ Michael Terry ]
plugins/AccountsService/AccountsServiceDBusAdaptor.cpp+12−2
@@ -57,8 +57,18 @@ QDBusPendingCall AccountsServiceDBusAdaptor::setUserPropertyAsync(const QString
57{
57{
58 QDBusInterface *iface = getUserInterface(user);
58 QDBusInterface *iface = getUserInterface(user);
59 if (iface != nullptr && iface->isValid()) {
59 if (iface != nullptr && iface->isValid()) {
60+ if (interface == QStringLiteral("org.freedesktop.Accounts.User")) {
61+ // Standard AccountsService properties use special set methods.
62+ // It will not let you use the usual DBus property setters.
63+ QDBusInterface accountsIface(iface->service(),
64+ iface->path(),
65+ interface,
66+ iface->connection());
67+ return accountsIface.asyncCall(QStringLiteral("Set") + property, value);
68+ } else {
60− // The value needs to be carefully wrapped
69+ // The value needs to be carefully wrapped
61− return iface->asyncCall(QStringLiteral("Set"), interface, property, QVariant::fromValue(QDBusVariant(value)));
70+ return iface->asyncCall(QStringLiteral("Set"), interface, property, QVariant::fromValue(QDBusVariant(value)));
71+ }
62 }
72 }
63 return QDBusPendingCall::fromCompletedCall(QDBusMessage::createError(QDBusError::Other, QStringLiteral("Invalid Interface")));
73 return QDBusPendingCall::fromCompletedCall(QDBusMessage::createError(QDBusError::Other, QStringLiteral("Invalid Interface")));
64}
74}
po/nb.po+84−81
@@ -8,15 +8,15 @@ 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: 2016-03-23 10:01+0000\n"
10"POT-Creation-Date: 2016-03-23 10:01+0000\n"
11−"PO-Revision-Date: 2015-07-05 19:44+0000\n"
11+"PO-Revision-Date: 2016-03-29 08:56+0000\n"
12−"Last-Translator: Mathias Bynke <Unknown>\n"
12+"Last-Translator: Åka Sikrom <Unknown>\n"
13"Language-Team: Norwegian Bokmal <nb@li.org>\n"
13"Language-Team: Norwegian Bokmal <nb@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"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-03-24 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2016-03-30 06:25+0000\n"
19−"X-Generator: Launchpad (build 17958)\n"
19+"X-Generator: Launchpad (build 17967)\n"
20
20
21#: plugins/IntegratedLightDM/Greeter.cpp:112
21#: plugins/IntegratedLightDM/Greeter.cpp:112
22msgid "Password: "
22msgid "Password: "
@@ -142,6 +142,8 @@ msgctxt ""
142"Re-dock means connect the device again to an external screen/mouse/keyboard"
142"Re-dock means connect the device again to an external screen/mouse/keyboard"
143msgid "Re-dock, save your work and close these apps to continue."
143msgid "Re-dock, save your work and close these apps to continue."
144msgstr ""
144msgstr ""
145+"Koble enheten til strøm, lagre arbeidet ditt og lukk disse programmene for å "
146+"fortsette."
145
147
146#: qml/Components/ModeSwitchWarningDialog.qml:63
148#: qml/Components/ModeSwitchWarningDialog.qml:63
147msgid "Or force close now (unsaved data will be lost)."
149msgid "Or force close now (unsaved data will be lost)."
@@ -184,11 +186,11 @@ msgstr "Legg til i favoritter"
184
186
185#: qml/Dash/FiltersPopover.qml:60
187#: qml/Dash/FiltersPopover.qml:60
186msgid "Refine your results"
188msgid "Refine your results"
187−msgstr ""
189+msgstr "Filtrer søketreff"
188
190
189#: qml/Dash/FiltersPopover.qml:69
191#: qml/Dash/FiltersPopover.qml:69
190msgid "Reset"
192msgid "Reset"
191−msgstr ""
193+msgstr "Tilbakestill"
192
194
193#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
195#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
194msgid "See less"
196msgid "See less"
@@ -205,11 +207,11 @@ msgstr "Søk"
205
207
206#: qml/Dash/PageHeaderExtraPanel.qml:55
208#: qml/Dash/PageHeaderExtraPanel.qml:55
207msgid "Recent Searches"
209msgid "Recent Searches"
208−msgstr ""
210+msgstr "Nylige søk"
209
211
210#: qml/Dash/PageHeaderExtraPanel.qml:66
212#: qml/Dash/PageHeaderExtraPanel.qml:66
211msgid "Clear All"
213msgid "Clear All"
212−msgstr ""
214+msgstr "Tøm alt"
213
215
214#: qml/Dash/Previews/PreviewActionCombo.qml:35
216#: qml/Dash/Previews/PreviewActionCombo.qml:35
215msgid "More..."
217msgid "More..."
@@ -265,6 +267,8 @@ msgid ""
265"Your device is now connected to an external display. Use this screen as a "
267"Your device is now connected to an external display. Use this screen as a "
266"touch pad to interact with the pointer."
268"touch pad to interact with the pointer."
267msgstr ""
269msgstr ""
270+"Enheten er nå koblet til en ekstern skjerm. Bruk denne skjermen som en "
271+"pekeplate for å styre pekeren."
268
272
269#: qml/Greeter/CoverPage.qml:118
273#: qml/Greeter/CoverPage.qml:118
270msgid "Unlock"
274msgid "Unlock"
@@ -426,51 +430,51 @@ msgstr "Ring tilbake"
426
430
427#: qml/Stages/SideStage.qml:76
431#: qml/Stages/SideStage.qml:76
428msgid "Drag using 3 fingers any application from one window to the other"
432msgid "Drag using 3 fingers any application from one window to the other"
429−msgstr ""
433+msgstr "Dra et program fra et vindu til et annet med 3 fingre"
430
434
431#: qml/Tutorial/TutorialBottom.qml:78
435#: qml/Tutorial/TutorialBottom.qml:78
432msgid "Swipe up to add a contact"
436msgid "Swipe up to add a contact"
433−msgstr ""
437+msgstr "Dra opp for å legge til en kontakt"
434
438
435#: qml/Tutorial/TutorialBottom.qml:80
439#: qml/Tutorial/TutorialBottom.qml:80
436msgid "Swipe up for favorite calculations"
440msgid "Swipe up for favorite calculations"
437−msgstr ""
441+msgstr "Dra opp for å se favoritt-utregninger"
438
442
439#: qml/Tutorial/TutorialBottom.qml:82
443#: qml/Tutorial/TutorialBottom.qml:82
440msgid "Swipe up for recent calls"
444msgid "Swipe up for recent calls"
441−msgstr ""
445+msgstr "Dra opp for å se nylige anrop"
442
446
443#: qml/Tutorial/TutorialBottom.qml:84
447#: qml/Tutorial/TutorialBottom.qml:84
444msgid "Swipe up to create a message"
448msgid "Swipe up to create a message"
445−msgstr ""
449+msgstr "Dra opp for å lage en melding"
446
450
447#: qml/Tutorial/TutorialBottom.qml:85
451#: qml/Tutorial/TutorialBottom.qml:85
448msgid "Swipe up to manage the app"
452msgid "Swipe up to manage the app"
449−msgstr ""
453+msgstr "Dra opp for å håndtere programmet"
450
454
451#: qml/Tutorial/TutorialLeft.qml:47
455#: qml/Tutorial/TutorialLeft.qml:47
452msgid "Swipe from the left edge to open the launcher"
456msgid "Swipe from the left edge to open the launcher"
453−msgstr ""
457+msgstr "Dra fra venstre kant for å åpne oppstarteren"
454
458
455#: qml/Tutorial/TutorialLeftLong.qml:47
459#: qml/Tutorial/TutorialLeftLong.qml:47
456msgid "Long swipe from the left edge to open the Today scope"
460msgid "Long swipe from the left edge to open the Today scope"
457−msgstr ""
461+msgstr "Dra langt fra venstre kant for å åpne virkefeltet «I dag»"
458
462
459#: qml/Tutorial/TutorialRight.qml:54
463#: qml/Tutorial/TutorialRight.qml:54
460msgid "Hover your mouse on the right edge to view your open apps"
464msgid "Hover your mouse on the right edge to view your open apps"
461−msgstr ""
465+msgstr "Hold musepekeren over høyre kant for å vise åpne programmer"
462
466
463#: qml/Tutorial/TutorialRight.qml:55
467#: qml/Tutorial/TutorialRight.qml:55
464msgid "Short or long swipe from the right edge to view your open apps"
468msgid "Short or long swipe from the right edge to view your open apps"
465−msgstr ""
469+msgstr "Dra fra høyre kant for å vise åpne programmer"
466
470
467#: qml/Tutorial/TutorialTop.qml:53
471#: qml/Tutorial/TutorialTop.qml:53
468msgid "Swipe from the top right edge to open the notification bar"
472msgid "Swipe from the top right edge to open the notification bar"
469−msgstr ""
473+msgstr "Dra fra øvre høyre hjørne for å åpne varslingslinja"
470
474
471#: qml/Tutorial/TutorialTop.qml:54
475#: qml/Tutorial/TutorialTop.qml:54
472msgid "Swipe from the top edge to open the notification bar"
476msgid "Swipe from the top edge to open the notification bar"
473−msgstr ""
477+msgstr "Dra fra øvre kant for å åpne varslingslinja"
474
478
475#: qml/Wizard/Page.qml:54
479#: qml/Wizard/Page.qml:54
476msgctxt "Button: Go back one page in the Wizard"
480msgctxt "Button: Go back one page in the Wizard"
@@ -479,7 +483,7 @@ msgstr "Tilbake"
479
483
480#: qml/Wizard/Pages/10-welcome.qml:27
484#: qml/Wizard/Pages/10-welcome.qml:27
481msgid "Language"
485msgid "Language"
482−msgstr ""
486+msgstr "Språk"
483
487
484#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
488#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
485#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
489#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
@@ -488,7 +492,7 @@ msgstr ""
488#: qml/Wizard/Pages/passcode-desktop.qml:124
492#: qml/Wizard/Pages/passcode-desktop.qml:124
489#: qml/Wizard/Pages/password-set.qml:141
493#: qml/Wizard/Pages/password-set.qml:141
490msgid "Next"
494msgid "Next"
491−msgstr ""
495+msgstr "Neste"
492
496
493#: qml/Wizard/Pages/30-wifi.qml:29
497#: qml/Wizard/Pages/30-wifi.qml:29
494msgid "Connect to Wi‑Fi"
498msgid "Connect to Wi‑Fi"
@@ -496,15 +500,15 @@ msgstr "Koble til trådløst nettverk"
496
500
497#: qml/Wizard/Pages/30-wifi.qml:130
501#: qml/Wizard/Pages/30-wifi.qml:130
498msgid "Connected"
502msgid "Connected"
499−msgstr ""
503+msgstr "Koblet til"
500
504
501#: qml/Wizard/Pages/30-wifi.qml:163
505#: qml/Wizard/Pages/30-wifi.qml:163
502msgid "Available Wi-Fi networks"
506msgid "Available Wi-Fi networks"
503−msgstr ""
507+msgstr "Tilgjengelige trådløse nettverk"
504
508
505#: qml/Wizard/Pages/30-wifi.qml:164
509#: qml/Wizard/Pages/30-wifi.qml:164
506msgid "No available Wi-Fi networks"
510msgid "No available Wi-Fi networks"
507−msgstr ""
511+msgstr "Intet trådløst nettverk tilgjengelig"
508
512
509#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
513#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
510#: qml/Wizard/Pages/sim.qml:101
514#: qml/Wizard/Pages/sim.qml:101
@@ -513,98 +517,101 @@ msgstr "Hopp over"
513
517
514#: qml/Wizard/Pages/40-location.qml:27
518#: qml/Wizard/Pages/40-location.qml:27
515msgid "Location Services"
519msgid "Location Services"
516−msgstr ""
520+msgstr "Posisjonstjenester"
517
521
518#: qml/Wizard/Pages/40-location.qml:83
522#: qml/Wizard/Pages/40-location.qml:83
519msgid ""
523msgid ""
520"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
524"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
521"(recommended)"
525"(recommended)"
522msgstr ""
526msgstr ""
527+"Bruk GPS, åpne trådløse nettverk og mobilnett for å regne ut posisjon "
528+"anonymt (anbefales)"
523
529
524#: qml/Wizard/Pages/40-location.qml:105
530#: qml/Wizard/Pages/40-location.qml:105
525#, qt-format
531#, qt-format
526msgid "By selecting this option you agree to the Nokia HERE %1."
532msgid "By selecting this option you agree to the Nokia HERE %1."
527−msgstr ""
533+msgstr "Ved å velge dette godtar du %1 for Nokia HERE."
528
534
529#: qml/Wizard/Pages/40-location.qml:106
535#: qml/Wizard/Pages/40-location.qml:106
530msgctxt "part of: Nokia HERE terms and conditions"
536msgctxt "part of: Nokia HERE terms and conditions"
531msgid "terms and conditions"
537msgid "terms and conditions"
532−msgstr ""
538+msgstr "bruksvilkår"
533
539
534#: qml/Wizard/Pages/40-location.qml:160
540#: qml/Wizard/Pages/40-location.qml:160
535msgid "GPS only"
541msgid "GPS only"
536−msgstr ""
542+msgstr "Bare GPS"
537
543
538#: qml/Wizard/Pages/40-location.qml:214
544#: qml/Wizard/Pages/40-location.qml:214
539msgid "Don't use my location"
545msgid "Don't use my location"
540−msgstr ""
546+msgstr "Ikke bruk posisjon"
541
547
542#: qml/Wizard/Pages/40-location.qml:260
548#: qml/Wizard/Pages/40-location.qml:260
543msgid "You can change it later in System Settings."
549msgid "You can change it later in System Settings."
544−msgstr ""
550+msgstr "Du kan endre dette senere i systemoppsettet."
545
551
546#: qml/Wizard/Pages/50-timezone.qml:29
552#: qml/Wizard/Pages/50-timezone.qml:29
547msgid "Time Zone"
553msgid "Time Zone"
548−msgstr ""
554+msgstr "Tidssone"
549
555
550#: qml/Wizard/Pages/50-timezone.qml:178
556#: qml/Wizard/Pages/50-timezone.qml:178
551msgid "Enter your city"
557msgid "Enter your city"
552−msgstr ""
558+msgstr "Skriv inn by"
553
559
554#: qml/Wizard/Pages/60-account.qml:24
560#: qml/Wizard/Pages/60-account.qml:24
555msgid "Personalize Your Device"
561msgid "Personalize Your Device"
556−msgstr ""
562+msgstr "Tilpass enhet"
557
563
558#: qml/Wizard/Pages/60-account.qml:48
564#: qml/Wizard/Pages/60-account.qml:48
559msgid "Preferred Name"
565msgid "Preferred Name"
560−msgstr ""
566+msgstr "Foretrukket navn"
561
567
562#: qml/Wizard/Pages/70-passwd-type.qml:39
568#: qml/Wizard/Pages/70-passwd-type.qml:39
563msgid "Lock Screen"
569msgid "Lock Screen"
564−msgstr ""
570+msgstr "Låseskjerm"
565
571
566#: qml/Wizard/Pages/70-passwd-type.qml:101
572#: qml/Wizard/Pages/70-passwd-type.qml:101
567msgctxt "Label: Type of security method"
573msgctxt "Label: Type of security method"
568msgid "Create new password"
574msgid "Create new password"
569−msgstr ""
575+msgstr "Lag nytt passord"
570
576
571#: qml/Wizard/Pages/70-passwd-type.qml:103
577#: qml/Wizard/Pages/70-passwd-type.qml:103
572msgctxt "Label: Type of security method"
578msgctxt "Label: Type of security method"
573msgid "Create passcode (numbers only)"
579msgid "Create passcode (numbers only)"
574−msgstr ""
580+msgstr "Lag kode (kun tall)"
575
581
576#: qml/Wizard/Pages/70-passwd-type.qml:105
582#: qml/Wizard/Pages/70-passwd-type.qml:105
577msgctxt "Label: Type of security method"
583msgctxt "Label: Type of security method"
578msgid "No lock code"
584msgid "No lock code"
579−msgstr ""
585+msgstr "Ingen låsekode"
580
586
581#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
587#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
582msgid "Privacy Policy"
588msgid "Privacy Policy"
583−msgstr ""
589+msgstr "Personvernregler"
584
590
585#: qml/Wizard/Pages/75-report-check.qml:26
591#: qml/Wizard/Pages/75-report-check.qml:26
586msgid "Help Us Improve"
592msgid "Help Us Improve"
587−msgstr ""
593+msgstr "Hjelp oss med å bli bedre"
588
594
589#: qml/Wizard/Pages/75-report-check.qml:59
595#: qml/Wizard/Pages/75-report-check.qml:59
590msgid "Improve system performance by sending us crashes and error reports."
596msgid "Improve system performance by sending us crashes and error reports."
591msgstr ""
597msgstr ""
598+"Send oss kræsj- og feilrapporter og hjelp oss med å gjøre systemet bedre."
592
599
593#: qml/Wizard/Pages/75-report-check.qml:60
600#: qml/Wizard/Pages/75-report-check.qml:60
594msgid "Privacy policy"
601msgid "Privacy policy"
595−msgstr ""
602+msgstr "Personvernregler"
596
603
597#: qml/Wizard/Pages/80-finished.qml:89
604#: qml/Wizard/Pages/80-finished.qml:89
598msgid "Welcome to Ubuntu"
605msgid "Welcome to Ubuntu"
599−msgstr ""
606+msgstr "Velkommen til Ubuntu"
600
607
601#: qml/Wizard/Pages/80-finished.qml:104
608#: qml/Wizard/Pages/80-finished.qml:104
602msgid "You are ready to use your device now"
609msgid "You are ready to use your device now"
603−msgstr ""
610+msgstr "Enheten er nå klar til bruk"
604
611
605#: qml/Wizard/Pages/80-finished.qml:124
612#: qml/Wizard/Pages/80-finished.qml:124
606msgid "Get Started"
613msgid "Get Started"
607−msgstr ""
614+msgstr "Kom i gang"
608
615
609#: qml/Wizard/Pages/here-terms.qml:25
616#: qml/Wizard/Pages/here-terms.qml:25
610msgid "Terms & Conditions"
617msgid "Terms & Conditions"
@@ -612,7 +619,7 @@ msgstr "Brukervilkår"
612
619
613#: qml/Wizard/Pages/here-terms.qml:69
620#: qml/Wizard/Pages/here-terms.qml:69
614msgid "Your device uses positioning technologies provided by HERE."
621msgid "Your device uses positioning technologies provided by HERE."
615−msgstr ""
622+msgstr "Enheten bruker posisjonsteknologi via tjenesten HERE."
616
623
617#: qml/Wizard/Pages/here-terms.qml:81
624#: qml/Wizard/Pages/here-terms.qml:81
618msgid ""
625msgid ""
@@ -620,21 +627,26 @@ msgid ""
620"collects information about nearby cell towers and Wi-Fi hotspots around your "
627"collects information about nearby cell towers and Wi-Fi hotspots around your "
621"current location whenever your position is being found."
628"current location whenever your position is being found."
622msgstr ""
629msgstr ""
630+"Tjenesten HERE samler inn informasjon om mobiltårn og åpne trådløse nettverk "
631+"i nærheten av enheten når du bruker posisjonsbasere tjenester."
623
632
624#: qml/Wizard/Pages/here-terms.qml:93
633#: qml/Wizard/Pages/here-terms.qml:93
625msgid ""
634msgid ""
626"The information collected is used to analyze the service and to improve the "
635"The information collected is used to analyze the service and to improve the "
627"use of service, but not to identify you personally."
636"use of service, but not to identify you personally."
628msgstr ""
637msgstr ""
638+"Informasjonen som samles inn blir brukt til å analysere tjenesten og "
639+"forbedre brukskvaliteten. Den blir ikke brukt til å identifisere deg "
640+"personlig."
629
641
630#: qml/Wizard/Pages/here-terms.qml:106
642#: qml/Wizard/Pages/here-terms.qml:106
631#, qt-format
643#, qt-format
632msgid "By continuing, you agree to the HERE platform %1 and %2."
644msgid "By continuing, you agree to the HERE platform %1 and %2."
633−msgstr ""
645+msgstr "Hvis du fortsetter, samtykker du til %1 og %2 for tjenesten HERE."
634
646
635#: qml/Wizard/Pages/here-terms.qml:107
647#: qml/Wizard/Pages/here-terms.qml:107
636msgid "Service Terms"
648msgid "Service Terms"
637−msgstr ""
649+msgstr "tjenestevilkår"
638
650
639#: qml/Wizard/Pages/passcode-confirm.qml:43
651#: qml/Wizard/Pages/passcode-confirm.qml:43
640#: qml/Wizard/Pages/passcode-desktop.qml:80
652#: qml/Wizard/Pages/passcode-desktop.qml:80
@@ -643,69 +655,69 @@ msgstr "Bekreft kode"
643
655
644#: qml/Wizard/Pages/passcode-confirm.qml:45
656#: qml/Wizard/Pages/passcode-confirm.qml:45
645msgid "Incorrect passcode."
657msgid "Incorrect passcode."
646−msgstr ""
658+msgstr "Feil kode."
647
659
648#: qml/Wizard/Pages/passcode-confirm.qml:45
660#: qml/Wizard/Pages/passcode-confirm.qml:45
649msgctxt "Enter the passcode again"
661msgctxt "Enter the passcode again"
650msgid "Please re-enter."
662msgid "Please re-enter."
651−msgstr ""
663+msgstr "Tast koden på nytt"
652
664
653#: qml/Wizard/Pages/passcode-desktop.qml:30
665#: qml/Wizard/Pages/passcode-desktop.qml:30
654msgid "Lock Screen Passcode"
666msgid "Lock Screen Passcode"
655−msgstr ""
667+msgstr "Låseskjerm-kode"
656
668
657#: qml/Wizard/Pages/passcode-desktop.qml:56
669#: qml/Wizard/Pages/passcode-desktop.qml:56
658msgid "Enter 4 numbers to setup your passcode"
670msgid "Enter 4 numbers to setup your passcode"
659−msgstr ""
671+msgstr "Skriv inn 4 sifre som skal brukes som kode"
660
672
661#: qml/Wizard/Pages/passcode-desktop.qml:65
673#: qml/Wizard/Pages/passcode-desktop.qml:65
662#: qml/Wizard/Pages/passcode-set.qml:54
674#: qml/Wizard/Pages/passcode-set.qml:54
663msgid "Choose passcode"
675msgid "Choose passcode"
664−msgstr ""
676+msgstr "Velg kode"
665
677
666#: qml/Wizard/Pages/passcode-desktop.qml:105
678#: qml/Wizard/Pages/passcode-desktop.qml:105
667msgid "Passcode too short"
679msgid "Passcode too short"
668−msgstr ""
680+msgstr "Koden er for kort"
669
681
670#: qml/Wizard/Pages/passcode-desktop.qml:107
682#: qml/Wizard/Pages/passcode-desktop.qml:107
671msgid "Passcodes match"
683msgid "Passcodes match"
672−msgstr ""
684+msgstr "Kodene stemmer"
673
685
674#: qml/Wizard/Pages/passcode-desktop.qml:109
686#: qml/Wizard/Pages/passcode-desktop.qml:109
675msgid "Passcodes do not match"
687msgid "Passcodes do not match"
676−msgstr ""
688+msgstr "Kodene er ulike"
677
689
678#: qml/Wizard/Pages/passcode-set.qml:62
690#: qml/Wizard/Pages/passcode-set.qml:62
679msgid "Passcode must be 4 characters long"
691msgid "Passcode must be 4 characters long"
680−msgstr ""
692+msgstr "Koden må bestå av 4 sifre"
681
693
682#: qml/Wizard/Pages/password-set.qml:30
694#: qml/Wizard/Pages/password-set.qml:30
683msgid "Lock Screen Password"
695msgid "Lock Screen Password"
684−msgstr ""
696+msgstr "Låseskjerm-passord"
685
697
686#: qml/Wizard/Pages/password-set.qml:61
698#: qml/Wizard/Pages/password-set.qml:61
687msgid "Enter at least 8 characters"
699msgid "Enter at least 8 characters"
688−msgstr ""
700+msgstr "Skriv inn minst 8 tegn"
689
701
690#: qml/Wizard/Pages/password-set.qml:73
702#: qml/Wizard/Pages/password-set.qml:73
691msgid "Choose password"
703msgid "Choose password"
692−msgstr ""
704+msgstr "Velg passord"
693
705
694#: qml/Wizard/Pages/password-set.qml:103
706#: qml/Wizard/Pages/password-set.qml:103
695msgid "Confirm password"
707msgid "Confirm password"
696−msgstr ""
708+msgstr "Bekreft passord"
697
709
698#: qml/Wizard/Pages/sim.qml:27
710#: qml/Wizard/Pages/sim.qml:27
699msgid "No SIM card installed"
711msgid "No SIM card installed"
700−msgstr ""
712+msgstr "Ingen SIM-kort installert"
701
713
702#: qml/Wizard/Pages/sim.qml:54
714#: qml/Wizard/Pages/sim.qml:54
703msgid "SIM card added"
715msgid "SIM card added"
704−msgstr ""
716+msgstr "SIM-kort satt inn"
705
717
706#: qml/Wizard/Pages/sim.qml:55
718#: qml/Wizard/Pages/sim.qml:55
707msgid "You must restart the device to access the mobile network."
719msgid "You must restart the device to access the mobile network."
708−msgstr ""
720+msgstr "Du må starte enheten på nytt for å få tilgang til mobilnett."
709
721
710#: qml/Wizard/Pages/sim.qml:59
722#: qml/Wizard/Pages/sim.qml:59
711msgid "Restart"
723msgid "Restart"
@@ -713,35 +725,35 @@ msgstr "Start på nytt"
713
725
714#: qml/Wizard/Pages/sim.qml:78
726#: qml/Wizard/Pages/sim.qml:78
715msgid "You won’t be able to make calls or use text messaging without a SIM."
727msgid "You won’t be able to make calls or use text messaging without a SIM."
716−msgstr ""
728+msgstr "Du kan ikke ringe eller bruke tekstmeldinger uten et SIM-kort."
717
729
718#: qml/Wizard/Pages/sim.qml:90
730#: qml/Wizard/Pages/sim.qml:90
719msgid "To proceed with no SIM tap Skip."
731msgid "To proceed with no SIM tap Skip."
720−msgstr ""
732+msgstr "Trykk «Hopp over» for å fortsette uten SIM-kort"
721
733
722#: qml/Wizard/PasswordMeter.qml:87
734#: qml/Wizard/PasswordMeter.qml:87
723msgid "Passwords match"
735msgid "Passwords match"
724−msgstr ""
736+msgstr "Passordene stemmer"
725
737
726#: qml/Wizard/PasswordMeter.qml:89
738#: qml/Wizard/PasswordMeter.qml:89
727msgid "Passwords do not match"
739msgid "Passwords do not match"
728−msgstr ""
740+msgstr "Passordene er ulike"
729
741
730#: qml/Wizard/PasswordMeter.qml:93
742#: qml/Wizard/PasswordMeter.qml:93
731msgid "Strong password"
743msgid "Strong password"
732−msgstr ""
744+msgstr "Sterkt passord"
733
745
734#: qml/Wizard/PasswordMeter.qml:95
746#: qml/Wizard/PasswordMeter.qml:95
735msgid "Fair password"
747msgid "Fair password"
736−msgstr ""
748+msgstr "Middels sterkt passord"
737
749
738#: qml/Wizard/PasswordMeter.qml:97
750#: qml/Wizard/PasswordMeter.qml:97
739msgid "Weak password"
751msgid "Weak password"
740−msgstr ""
752+msgstr "Svakt passord"
741
753
742#: qml/Wizard/PasswordMeter.qml:99
754#: qml/Wizard/PasswordMeter.qml:99
743msgid "Very weak password"
755msgid "Very weak password"
744−msgstr ""
756+msgstr "Veldig svakt passord"
745
757
746#~ msgid "Confirm"
758#~ msgid "Confirm"
747#~ msgstr "Bekreft"
759#~ msgstr "Bekreft"
@@ -1051,12 +1063,3 @@ msgstr ""
1051
1063
1052#~ msgid "Tomorrow %H:%M"
1064#~ msgid "Tomorrow %H:%M"
1053#~ msgstr "I morgen %H:%M"
1065#~ msgstr "I morgen %H:%M"
1054−
1055−#~ msgid "Welcome to your Ubuntu device."
1056−#~ msgstr "Velkommen til Ubuntu-enheten din."
1057−
1058−#~ msgid "Please select how you’d like to unlock your device."
1059−#~ msgstr "Velg hvordan du vil låse opp enheten."
1060−
1061−#~ msgid "Your device is now ready to use."
1062−#~ msgstr "Enheten er nå klar til bruk."
po/pl.po+3−11
@@ -8,7 +8,7 @@ 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: 2016-03-23 10:01+0000\n"
10"POT-Creation-Date: 2016-03-23 10:01+0000\n"
11−"PO-Revision-Date: 2016-03-24 22:47+0000\n"
11+"PO-Revision-Date: 2016-03-28 20:45+0000\n"
12"Last-Translator: Krzysztof Tataradziński <Unknown>\n"
12"Last-Translator: Krzysztof Tataradziński <Unknown>\n"
13"Language-Team: Polish <pl@li.org>\n"
13"Language-Team: Polish <pl@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
@@ -16,7 +16,7 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
17"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
18"|| n%100>=20) ? 1 : 2;\n"
18"|| n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2016-03-25 05:55+0000\n"
19+"X-Launchpad-Export-Date: 2016-03-29 05:41+0000\n"
20"X-Generator: Launchpad (build 17967)\n"
20"X-Generator: Launchpad (build 17967)\n"
21
21
22#: plugins/IntegratedLightDM/Greeter.cpp:112
22#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -430,6 +430,7 @@ msgstr "Oddzwoń"
430#: qml/Stages/SideStage.qml:76
430#: qml/Stages/SideStage.qml:76
431msgid "Drag using 3 fingers any application from one window to the other"
431msgid "Drag using 3 fingers any application from one window to the other"
432msgstr ""
432msgstr ""
433+"Przeciągnij 3 palcami jakąkolwiek aplikację z jednego okna do drugiego"
433
434
434#: qml/Tutorial/TutorialBottom.qml:78
435#: qml/Tutorial/TutorialBottom.qml:78
435msgid "Swipe up to add a contact"
436msgid "Swipe up to add a contact"
@@ -1048,12 +1049,3 @@ msgstr ""
1048
1049
1049#~ msgid "Call back"
1050#~ msgid "Call back"
1050#~ msgstr "Oddzwoń"
1051#~ msgstr "Oddzwoń"
1051−
1052−#~ msgid "Welcome to your Ubuntu device."
1053−#~ msgstr "Witaj w swoim urządzeniu Ubuntu."
1054−
1055−#~ msgid "Please select how you’d like to unlock your device."
1056−#~ msgstr "Prosimy wybrać sposób, w jaki chcesz odblokować swoje urządzenie."
1057−
1058−#~ msgid "Your device is now ready to use."
1059−#~ msgstr "Twoje urządzenie jest już gotowe do użytku."
qml/Components/Lockscreen.qml+2−2
@@ -253,10 +253,10 @@ Showable {
253
253
254 Component {
254 Component {
255 id: infoPopupComponent
255 id: infoPopupComponent
256− Dialog {
256+ ShellDialog {
257 id: dialog
257 id: dialog
258 objectName: "infoPopup"
258 objectName: "infoPopup"
259− modal: true
259+ property var dialogLoader // dummy to satisfy ShellDialog's context dependent prop
260
260
261 Button {
261 Button {
262 objectName: "infoPopupOkButton"
262 objectName: "infoPopupOkButton"
qml/Greeter/Greeter.qml+1−1
@@ -61,7 +61,7 @@ Showable {
61
61
62 function forceShow() {
62 function forceShow() {
63 showNow();
63 showNow();
64− loader.item.reset();
64+ d.selectUser(d.currentIndex, true);
65 }
65 }
66
66
67 function notifyAppFocused(appId) {
67 function notifyAppFocused(appId) {
qml/Stages/DesktopStage.qml+3
@@ -36,6 +36,9 @@ AbstractStage {
36 }
36 }
37 }
37 }
38
38
39+ // Used by TutorialRight
40+ property bool spreadShown: spread.state == "altTab"
41+
39 mainApp: ApplicationManager.focusedApplicationId
42 mainApp: ApplicationManager.focusedApplicationId
40 ? ApplicationManager.findApplication(ApplicationManager.focusedApplicationId)
43 ? ApplicationManager.findApplication(ApplicationManager.focusedApplicationId)
41 : null
44 : null
qml/Tutorial/TutorialRight.qml+2−1
@@ -47,11 +47,12 @@ TutorialPage {
47 anchors.right: root.right
47 anchors.right: root.right
48 anchors.rightMargin: units.gu(2)
48 anchors.rightMargin: units.gu(2)
49 anchors.verticalCenter: root.verticalCenter
49 anchors.verticalCenter: root.verticalCenter
50+ rotation: usageScenario === "desktop" ? 180 : 0
50 }
51 }
51
52
52 label {
53 label {
53 text: root.usageScenario === "desktop" ?
54 text: root.usageScenario === "desktop" ?
54− i18n.tr("Hover your mouse on the right edge to view your open apps") :
55+ i18n.tr("Push your mouse against the right edge to view your open apps") :
55 i18n.tr("Short or long swipe from the right edge to view your open apps")
56 i18n.tr("Short or long swipe from the right edge to view your open apps")
56 anchors.right: arrow.left
57 anchors.right: arrow.left
57 anchors.rightMargin: units.gu(2) - (label.width - label.contentWidth)
58 anchors.rightMargin: units.gu(2) - (label.width - label.contentWidth)
tests/plugins/AccountsService/CMakeLists.txt+2−1
@@ -5,7 +5,7 @@ else()
5endif()
5endif()
6macro(make_dbus_class NAME INTERFACE)
6macro(make_dbus_class NAME INTERFACE)
7 if(${CMAKE_CURRENT_SOURCE_DIR}/interfaces.xml IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/${NAME}Adaptor.h)
7 if(${CMAKE_CURRENT_SOURCE_DIR}/interfaces.xml IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/${NAME}Adaptor.h)
8− execute_process(COMMAND ${QDBUSXML2CPP_EXECUTABLE} -c ${NAME}Adaptor -a ${CMAKE_CURRENT_BINARY_DIR}/${NAME}Adaptor ${CMAKE_CURRENT_SOURCE_DIR}/interfaces.xml ${INTERFACE})
8+ execute_process(COMMAND ${QDBUSXML2CPP_EXECUTABLE} -c ${NAME}Adaptor -i types.h -a ${CMAKE_CURRENT_BINARY_DIR}/${NAME}Adaptor ${CMAKE_CURRENT_SOURCE_DIR}/interfaces.xml ${INTERFACE})
9 endif()
9 endif()
10endmacro(make_dbus_class)
10endmacro(make_dbus_class)
11
11
@@ -20,6 +20,7 @@ make_dbus_class(UscInput com.canonical.Unity.Input)
20
20
21include_directories(
21include_directories(
22 ${CMAKE_CURRENT_BINARY_DIR}
22 ${CMAKE_CURRENT_BINARY_DIR}
23+ ${CMAKE_CURRENT_SOURCE_DIR}
23 ${CMAKE_SOURCE_DIR}/plugins/AccountsService
24 ${CMAKE_SOURCE_DIR}/plugins/AccountsService
24 )
25 )
25
26
tests/plugins/AccountsService/PropertiesServer.cpp+36−7
@@ -25,9 +25,7 @@
25#include <QDBusMessage>
25#include <QDBusMessage>
26#include <QDBusMetaType>
26#include <QDBusMetaType>
27
27
28−using StringMap = QMap<QString,QString>;
28+#define IFACE_ACCOUNTS_USER QStringLiteral("org.freedesktop.Accounts.User")
29−using StringMapList = QList<StringMap>;
30−Q_DECLARE_METATYPE(StringMapList)
31
29
32PropertiesServer::PropertiesServer(QObject *parent)
30PropertiesServer::PropertiesServer(QObject *parent)
33 : QObject(parent)
31 : QObject(parent)
@@ -62,6 +60,38 @@ void PropertiesServer::Set(const QString &interface, const QString &property, co
62{
60{
63 QVariant newValue = variant.variant();
61 QVariant newValue = variant.variant();
64
62
63+ if (interface == IFACE_ACCOUNTS_USER) {
64+ sendErrorReply(QDBusError::InvalidArgs, QStringLiteral("Property is not writable"));
65+ return;
66+ }
67+
68+ internalSet(interface, property, newValue);
69+}
70+
71+void PropertiesServer::SetBackgroundFile(const QString &backgroundFile)
72+{
73+ internalSet(IFACE_ACCOUNTS_USER, QStringLiteral("BackgroundFile"), backgroundFile);
74+}
75+
76+void PropertiesServer::SetEmail(const QString &email)
77+{
78+ internalSet(IFACE_ACCOUNTS_USER, QStringLiteral("Email"), email);
79+}
80+
81+void PropertiesServer::SetInputSources(const StringMapList &inputSources)
82+{
83+ internalSet(IFACE_ACCOUNTS_USER, QStringLiteral("InputSources"), QVariant::fromValue(inputSources));
84+}
85+
86+void PropertiesServer::SetRealName(const QString &realName)
87+{
88+ internalSet(IFACE_ACCOUNTS_USER, QStringLiteral("RealName"), realName);
89+}
90+
91+void PropertiesServer::internalSet(const QString &interface, const QString &property, const QVariant &variant)
92+{
93+ QVariant newValue = variant;
94+
65 if (m_properties[interface].contains(property)) {
95 if (m_properties[interface].contains(property)) {
66 QVariant& oldValue = m_properties[interface][property];
96 QVariant& oldValue = m_properties[interface][property];
67 if (oldValue != newValue) {
97 if (oldValue != newValue) {
@@ -69,14 +99,12 @@ void PropertiesServer::Set(const QString &interface, const QString &property, co
69 if (interface == QStringLiteral("com.canonical.unity.AccountsService") &&
99 if (interface == QStringLiteral("com.canonical.unity.AccountsService") &&
70 property == QStringLiteral("LauncherItems")) {
100 property == QStringLiteral("LauncherItems")) {
71 newValue = QVariant::fromValue(qdbus_cast<QList<QVariantMap>>(newValue.value<QDBusArgument>()));
101 newValue = QVariant::fromValue(qdbus_cast<QList<QVariantMap>>(newValue.value<QDBusArgument>()));
72− } else if (interface == "org.freedesktop.Accounts.User" && property == "InputSources") {
73− newValue = QVariant::fromValue(qdbus_cast<StringMapList>(newValue.value<QDBusArgument>()));
74 }
102 }
75
103
76 oldValue = newValue;
104 oldValue = newValue;
77
105
78 // Special case for user properties.
106 // Special case for user properties.
79− if (interface == "org.freedesktop.Accounts.User") {
107+ if (interface == IFACE_ACCOUNTS_USER) {
80 Q_EMIT Changed();
108 Q_EMIT Changed();
81 } else {
109 } else {
82 QVariantMap propertyChanges;
110 QVariantMap propertyChanges;
@@ -108,6 +136,7 @@ void PropertiesServer::Reset()
108 m_properties["com.ubuntu.location.providers.here.AccountsService"]["LicenseAccepted"] = false;
136 m_properties["com.ubuntu.location.providers.here.AccountsService"]["LicenseAccepted"] = false;
109 m_properties["com.ubuntu.location.providers.here.AccountsService"]["LicenseBasePath"] = "";
137 m_properties["com.ubuntu.location.providers.here.AccountsService"]["LicenseBasePath"] = "";
110 m_properties["org.freedesktop.Accounts.User"]["BackgroundFile"] = "";
138 m_properties["org.freedesktop.Accounts.User"]["BackgroundFile"] = "";
111− m_properties["org.freedesktop.Accounts.User"]["RealName"] = "";
139+ m_properties["org.freedesktop.Accounts.User"]["Email"] = "";
112 m_properties["org.freedesktop.Accounts.User"]["InputSources"] = QVariant::fromValue(StringMapList());
140 m_properties["org.freedesktop.Accounts.User"]["InputSources"] = QVariant::fromValue(StringMapList());
141+ m_properties["org.freedesktop.Accounts.User"]["RealName"] = "";
113}
142}
tests/plugins/AccountsService/PropertiesServer.h+7
@@ -24,6 +24,7 @@
24#include <QDBusVariant>
24#include <QDBusVariant>
25#include <QObject>
25#include <QObject>
26#include <QString>
26#include <QString>
27+#include "types.h"
27
28
28class PropertiesServer: public QObject, protected QDBusContext
29class PropertiesServer: public QObject, protected QDBusContext
29{
30{
@@ -36,6 +37,10 @@ public Q_SLOTS:
36 QDBusVariant Get(const QString &interface, const QString &property) const;
37 QDBusVariant Get(const QString &interface, const QString &property) const;
37 QVariantMap GetAll(const QString &interface) const;
38 QVariantMap GetAll(const QString &interface) const;
38 void Set(const QString &interface, const QString &property, const QDBusVariant &variant);
39 void Set(const QString &interface, const QString &property, const QDBusVariant &variant);
40+ void SetBackgroundFile(const QString &backgroundFile);
41+ void SetEmail(const QString &email);
42+ void SetInputSources(const StringMapList &inputSources);
43+ void SetRealName(const QString &realName);
39
44
40 // mock only.
45 // mock only.
41 void Reset();
46 void Reset();
@@ -45,6 +50,8 @@ Q_SIGNALS:
45 void Changed();
50 void Changed();
46
51
47private:
52private:
53+ void internalSet(const QString &interface, const QString &property, const QVariant &variant);
54+
48 QHash<QString, QVariantMap> m_properties;
55 QHash<QString, QVariantMap> m_properties;
49};
56};
50
57
tests/plugins/AccountsService/client.cpp+46−12
@@ -19,16 +19,13 @@
19
19
20#include "AccountsService.h"
20#include "AccountsService.h"
21#include "AccountsServiceDBusAdaptor.h"
21#include "AccountsServiceDBusAdaptor.h"
22+#include "types.h"
22#include <QSignalSpy>
23#include <QSignalSpy>
23#include <QTest>
24#include <QTest>
24#include <QDebug>
25#include <QDebug>
25#include <QDBusReply>
26#include <QDBusReply>
26#include <QDBusMetaType>
27#include <QDBusMetaType>
27
28
28−using StringMap = QMap<QString,QString>;
29−using StringMapList = QList<StringMap>;
30−Q_DECLARE_METATYPE(StringMapList)
31−
32template <class T>
29template <class T>
33QVariant dbusVariant(const T& value) { return QVariant::fromValue(QDBusVariant(value)); }
30QVariant dbusVariant(const T& value) { return QVariant::fromValue(QDBusVariant(value)); }
34
31
@@ -263,10 +260,13 @@ private Q_SLOTS:
263 AccountsService session(this, QTest::currentTestFunction());
260 AccountsService session(this, QTest::currentTestFunction());
264
261
265 QCOMPARE(session.backgroundFile(), QString());
262 QCOMPARE(session.backgroundFile(), QString());
266− ASSERT_DBUS_CALL(m_userInterface->asyncCall("Set",
263+
264+ QDBusInterface accountsIface(m_userInterface->service(),
265+ m_userInterface->path(),
267− "org.freedesktop.Accounts.User",
266+ "org.freedesktop.Accounts.User");
268− "BackgroundFile",
267+ ASSERT_DBUS_CALL(accountsIface.asyncCall("SetBackgroundFile",
269− dbusVariant("/test/BackgroundFile")));
268+ "/test/BackgroundFile"));
269+
270 QTRY_COMPARE(session.backgroundFile(), QString("/test/BackgroundFile"));
270 QTRY_COMPARE(session.backgroundFile(), QString("/test/BackgroundFile"));
271 }
271 }
272
272
@@ -311,6 +311,39 @@ private Q_SLOTS:
311 QCOMPARE(arguments.at(0).toInt(), 0);
311 QCOMPARE(arguments.at(0).toInt(), 0);
312 }
312 }
313
313
314+ void testSetRealName()
315+ {
316+ AccountsService session(this, QTest::currentTestFunction());
317+
318+ // Just confirm that we can't set normal way
319+ auto message = m_userInterface->call("Set",
320+ "org.freedesktop.Accounts.User",
321+ "RealName",
322+ dbusVariant("Stallman"));
323+ QCOMPARE(message.type(), QDBusMessage::ErrorMessage);
324+ QCOMPARE(message.errorName(), QStringLiteral("org.freedesktop.DBus.Error.InvalidArgs"));
325+
326+ message = m_userInterface->call("Get",
327+ "org.freedesktop.Accounts.User",
328+ "RealName");
329+ QCOMPARE(message.type(), QDBusMessage::ReplyMessage);
330+ auto response = message.arguments().first().value<QDBusVariant>().variant().toString();
331+ QCOMPARE(response, QStringLiteral(""));
332+
333+ // Now try it via our AS wrapper and confirm it did get through, unlike above
334+ session.setRealName("Stallman");
335+
336+ QCOMPARE(session.realName(), QStringLiteral("Stallman"));
337+
338+ message = m_userInterface->call("Get",
339+ "org.freedesktop.Accounts.User",
340+ "RealName");
341+ QCOMPARE(message.type(), QDBusMessage::ReplyMessage);
342+ response = message.arguments().first().value<QDBusVariant>().variant().toString();
343+ QCOMPARE(response, QStringLiteral("Stallman"));
344+
345+ }
346+
314 void testAsynchronousChangeForKeymaps()
347 void testAsynchronousChangeForKeymaps()
315 {
348 {
316 AccountsService session(this, QTest::currentTestFunction());
349 AccountsService session(this, QTest::currentTestFunction());
@@ -325,10 +358,11 @@ private Q_SLOTS:
325 map2.insert("xkb", "fr");
358 map2.insert("xkb", "fr");
326 inputSources.append(map2);
359 inputSources.append(map2);
327
360
361+ QDBusInterface accountsIface(m_userInterface->service(),
328− ASSERT_DBUS_CALL(m_userInterface->asyncCall("Set",
362+ m_userInterface->path(),
329− "org.freedesktop.Accounts.User",
363+ "org.freedesktop.Accounts.User");
330− "InputSources",
364+ ASSERT_DBUS_CALL(accountsIface.asyncCall("SetInputSources",
331− QVariant::fromValue(QDBusVariant(QVariant::fromValue(inputSources)))));
365+ QVariant::fromValue(inputSources)));
332 QStringList result = {"cz+qwerty", "fr"};
366 QStringList result = {"cz+qwerty", "fr"};
333 QTRY_COMPARE(session.keymaps(), result);
367 QTRY_COMPARE(session.keymaps(), result);
334 }
368 }
tests/plugins/AccountsService/interfaces.xml+13
@@ -42,6 +42,19 @@
42 <interface name="com.ubuntu.location.providers.here.AccountsService" />
42 <interface name="com.ubuntu.location.providers.here.AccountsService" />
43 <interface name="org.freedesktop.Accounts.User">
43 <interface name="org.freedesktop.Accounts.User">
44 <signal name="Changed" />
44 <signal name="Changed" />
45+ <method name="SetBackgroundFile">
46+ <arg name="backgroundFile" type="s" direction="in" />
47+ </method>
48+ <method name="SetEmail">
49+ <arg name="email" type="s" direction="in" />
50+ </method>
51+ <method name="SetInputSources">
52+ <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="StringMapList"/>
53+ <arg name="inputSources" type="aa{ss}" direction="in" />
54+ </method>
55+ <method name="SetRealName">
56+ <arg name="realName" type="s" direction="in" />
57+ </method>
45 </interface>
58 </interface>
46 <interface name="com.canonical.unity.AccountsService.Private" />
59 <interface name="com.canonical.unity.AccountsService.Private" />
47
60
tests/plugins/AccountsService/types.hnew file+25
@@ -0,0 +1,25 @@
1+/*
2+ * Copyright 2016 Canonical Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it
5+ * under the terms of the GNU General Public License version 3, as published
6+ * by the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but
9+ * WITHOUT ANY WARRANTY; without even the implied warranties of
10+ * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
11+ * PURPOSE. See the GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * version 3 along with this program. If not, see
15+ * <http://www.gnu.org/licenses/>
16+ */
17+
18+#ifndef UNITY_ASMOCKTYPES_H
19+#define UNITY_ASMOCKTYPES_H
20+
21+using StringMap = QMap<QString,QString>;
22+using StringMapList = QList<StringMap>;
23+Q_DECLARE_METATYPE(StringMapList)
24+
25+#endif
tests/plugins/IntegratedLightDM/integrated.cpp+5−8
@@ -66,14 +66,11 @@ private Q_SLOTS:
66 QCOMPARE(m_model->data(index, QLightDM::UsersModel::RealNameRole).toString(),
66 QCOMPARE(m_model->data(index, QLightDM::UsersModel::RealNameRole).toString(),
67 QStringLiteral(""));
67 QStringLiteral(""));
68
68
69− // The real AccountsService doesn't let you set via dbus properties. You
69+ QDBusInterface accountsIface(m_user->service(),
70− // have to call SetRealName instead (so that they can protect the call
70+ m_user->path(),
71− // via policykit). But our test server does let us.
71+ "org.freedesktop.Accounts.User");
72− QVariant wrapped = QVariant::fromValue(QDBusVariant(QStringLiteral("Test User")));
73− QDBusReply<void> reply = m_user->call(QStringLiteral("Set"),
72+ QDBusReply<void> reply = accountsIface.call(QStringLiteral("SetRealName"),
74− QStringLiteral("org.freedesktop.Accounts.User"),
73+ QStringLiteral("Test User"));
75− QStringLiteral("RealName"),
76− wrapped);
77 QVERIFY(reply.isValid());
74 QVERIFY(reply.isValid());
78
75
79 QTRY_COMPARE(m_model->data(index, QLightDM::UsersModel::RealNameRole).toString(),
76 QTRY_COMPARE(m_model->data(index, QLightDM::UsersModel::RealNameRole).toString(),
tests/qmltests/Greeter/tst_Greeter.qml+1
@@ -551,6 +551,7 @@ Item {
551
551
552 LightDM.Greeter.showGreeter();
552 LightDM.Greeter.showGreeter();
553 compare(viewResetSpy.count, 1);
553 compare(viewResetSpy.count, 1);
554+ tryCompare(viewShowPromptSpy, "count", 1);
554 }
555 }
555 }
556 }
556}
557}
tests/qmltests/Greeter/tst_NarrowView.qml+3−1
@@ -27,6 +27,8 @@ Item {
27 width: units.gu(90)
27 width: units.gu(90)
28 height: units.gu(80)
28 height: units.gu(80)
29
29
30+ Component.onCompleted: theme.name = "Ubuntu.Components.Themes.SuruDark" // use the same theme as the real shell
31+
30 Row {
32 Row {
31 anchors.fill: parent
33 anchors.fill: parent
32 Loader {
34 Loader {
@@ -61,7 +63,7 @@ Item {
61
63
62 Rectangle {
64 Rectangle {
63 id: controls
65 id: controls
64− color: "white"
66+ color: theme.palette.normal.background
65 width: units.gu(40)
67 width: units.gu(40)
66 height: parent.height
68 height: parent.height
67
69
tests/qmltests/Tutorial/tst_Tutorial.qml+17−1
@@ -408,7 +408,7 @@ Rectangle {
408 ApplicationManager.startApplication("gallery-app");
408 ApplicationManager.startApplication("gallery-app");
409
409
410 var launcher = findChild(shell, "launcher");
410 var launcher = findChild(shell, "launcher");
411− var tutorialLeft = findChild(shell, "tutorialLeft");
411+ var tutorialLeft = findChild(shell, "tutorialLeftLoader");
412 touchFlick(shell, 0, halfHeight, shell.width, halfHeight);
412 touchFlick(shell, 0, halfHeight, shell.width, halfHeight);
413
413
414 tryCompare(tutorialLeft, "shown", false);
414 tryCompare(tutorialLeft, "shown", false);
@@ -764,6 +764,22 @@ Rectangle {
764 tryCompare(tutorialRightLoader, "shown", true);
764 tryCompare(tutorialRightLoader, "shown", true);
765 }
765 }
766
766
767+ function test_desktopTutorialRightFinish() {
768+ loadShell("desktop");
769+
770+ var tutorialRight = findChild(shell, "tutorialRight");
771+ ApplicationManager.startApplication("dialer-app");
772+ ApplicationManager.startApplication("camera-app");
773+ tryCompare(tutorialRight, "shown", true);
774+
775+ var stage = findChild(shell, "stage");
776+ mouseMove(shell, shell.width, shell.height / 2);
777+ stage.pushRightEdge(units.gu(8));
778+ tryCompare(tutorialRight, "shown", false);
779+
780+ tryCompare(AccountsService, "demoEdges", false);
781+ }
782+
767 function test_oskDoesNotHideTutorial() {
783 function test_oskDoesNotHideTutorial() {
768 var tutorialLeft = findChild(shell, "tutorialLeft");
784 var tutorialLeft = findChild(shell, "tutorialLeft");
769 verify(tutorialLeft.shown);
785 verify(tutorialLeft.shown);
tests/qmltests/tst_Shell.qml+3−1
@@ -1140,7 +1140,9 @@ Rectangle {
1140
1140
1141 showGreeter();
1141 showGreeter();
1142
1142
1143+ var greeter = findChild(shell, "greeter");
1144+ verify(!greeter.locked);
1143− tryCompare(sessionSpy, "count", 1);
1145+ verify(sessionSpy.count > 0);
1144 }
1146 }
1145
1147
1146 function test_fullscreen() {
1148 function test_fullscreen() {