on xenial help sign in
Merged trunk.
commit928655fe901f4649f0f7b0985a5edaec14b6e4f4 authorAllan LeSage <allan.lesage@canonical.com> dateThu 19 Dec 2013, 10:53 (13 years ago) parent3cdb7e67b45307
475 files changed+5416−5993
.bzrignore+1−4 Applications/Application.qml−54 Applications/applications.js−115 CMakeLists.txt+11−73 CODING+2−2 Notifications/Notification.qml−295 data/CMakeLists.txt+7 data/unity8.conf+1 unity8.desktop.in → data/unity8.desktop.in data/unity8.override+1 debian/changelog+225−2 debian/control+2−2 debian/unity8-autopilot.install+1 debian/unity8-private.install+1−1 debian/unity8.install−1 include/CMakeLists.txt+1 paths.h.in → include/paths.h.in+42−3 plugins/CMakeLists.txt+1−1 plugins/ListViewWithPageHeader/CMakeLists.txt → plugins/DashViews/CMakeLists.txt+6−5 plugins/ListViewWithPageHeader/listviewwithpageheader.cpp → plugins/DashViews/listviewwithpageheader.cpp plugins/ListViewWithPageHeader/listviewwithpageheader.h → plugins/DashViews/listviewwithpageheader.h plugins/ListViewWithPageHeader/plugin.cpp → plugins/DashViews/plugin.cpp+4−2 plugins/ListViewWithPageHeader/plugin.h → plugins/DashViews/plugin.h+3−3 plugins/DashViews/qmldir+3 plugins/DashViews/verticaljournal.cpp+609 plugins/DashViews/verticaljournal.h+182 plugins/HudClient/hudclient.cpp+1−16 plugins/LightDM/CMakeLists.txt+3−1 plugins/LightDM/DBusGreeterList.cpp+77 plugins/LightDM/DBusGreeterList.h+61 plugins/LightDM/Greeter.cpp+1 plugins/LightDM/Greeter.h+6−1 plugins/LightDM/UsersModel.h+1−1 plugins/LightDM/plugin.cpp+14−2 plugins/ListViewWithPageHeader/qmldir−3 plugins/Ubuntu/Gestures/CMakeLists.txt+1 plugins/Ubuntu/Gestures/PressedOutsideNotifier.cpp+119 plugins/Ubuntu/Gestures/PressedOutsideNotifier.h+62 plugins/Ubuntu/Gestures/plugin.cpp+2 plugins/Unity/Indicators/CMakeLists.txt−1 plugins/Unity/Indicators/Messaging/qml/MessageMenuItemFactory.qml+85−60 plugins/Unity/Indicators/Messaging/qml/SimpleTextMessage.qml+2−1 plugins/Unity/Indicators/Messaging/qml/SnapDecision.qml+2−2 plugins/Unity/Indicators/indicatorsmanager.cpp+1−1 plugins/Unity/Indicators/indicatorsmodel.cpp+4−3 plugins/Unity/Indicators/plugin.cpp−2 plugins/Unity/Indicators/qml/IndicatorPage.qml+18−4 plugins/Unity/Indicators/qml/MenuItemFactory.qml+138−85 plugins/Unity/Launcher/backend/launcherbackend.cpp+6−6 plugins/Utils/CMakeLists.txt+1 plugins/Utils/plugin.cpp+3 plugins/Unity/Indicators/timeformatter.cpp → plugins/Utils/timeformatter.cpp+30−1 plugins/Unity/Indicators/timeformatter.h → plugins/Utils/timeformatter.h+15−3 po/ar.po+15−93 po/ast.po+16−94 po/az.po+12−90 po/bg.po+12−90 po/ca.po+12−90 po/cs.po+12−90 po/de.po+12−90 po/el.po+12−90 po/en_AU.po+12−90 po/en_GB.po+12−90 po/eo.po+12−90 po/es.po+12−90 po/fa.po+12−90 po/fi.po+12−90 po/fo.po+12−90 po/fr.po+12−90 po/gd.po+12−90 po/gl.po+16−94 po/he.po+12−90 po/hr.po+12−90 po/hu.po+12−90 po/hy.po+12−90 po/id.po+12−90 po/is.po+12−90 po/it.po+12−90 po/ja.po+12−90 po/km.po+12−90 po/kn.po+12−90 po/ko.po+12−90 po/ky.po+12−90 po/lo.po+12−90 po/lv.po+12−90 po/ml.po+12−90 po/my.po+20−98 po/nb.po+12−90 po/nl.po+12−90 po/pl.po+12−90 po/pt_BR.po+12−90 po/ro.po+12−91 po/ru.po+12−90 po/shn.po+12−90 po/si.po+12−90 po/sl.po+16−94 po/sr.po+12−90 po/sv.po+12−90 po/ta.po+12−90 po/te.po+12−90 po/tr.po+17−95 po/ug.po+12−90 po/uk.po+12−90 po/unity8.pot+10−88 po/xh.po+12−90 po/zh_CN.po+12−90 po/zh_TW.po+12−90 Bottombar/Bottombar.qml → qml/Bottombar/Bottombar.qml Bottombar/HudButton.qml → qml/Bottombar/HudButton.qml Bottombar/graphics/hud@20.png → qml/Bottombar/graphics/hud@20.png Bottombar/graphics/hud_invoke_button_active@20.png → qml/Bottombar/graphics/hud_invoke_button_active@20.png qml/CMakeLists.txt+22 Components/AnimationControllerWithSignals.qml → qml/Components/AnimationControllerWithSignals.qml Components/ApplicationManagerWrapper.qml → qml/Components/ApplicationManagerWrapper.qml Components/ApplicationScreenshot.qml → qml/Components/ApplicationScreenshot.qml Components/ApplicationsModelStageFiltered.qml → qml/Components/ApplicationsModelStageFiltered.qml Components/BaseCarouselDelegate.qml → qml/Components/BaseCarouselDelegate.qml Components/Carousel.qml → qml/Components/Carousel.qml+2−3 Components/Circle.qml → qml/Components/Circle.qml Components/DragHandle.qml → qml/Components/DragHandle.qml Components/DraggingArea.qml → qml/Components/DraggingArea.qml Components/EdgeDemo.qml → qml/Components/EdgeDemo.qml+1 Components/EdgeDemoOverlay.qml → qml/Components/EdgeDemoOverlay.qml Components/EdgeDragArea.qml → qml/Components/EdgeDragArea.qml Components/EdgeDragEvaluator.qml → qml/Components/EdgeDragEvaluator.qml Components/FilterGrid.qml → qml/Components/FilterGrid.qml+2−1 Components/LazyImage.qml → qml/Components/LazyImage.qml Components/ListItems/Base.qml → qml/Components/ListItems/Base.qml Components/ListItems/Header.qml → qml/Components/ListItems/Header.qml Components/ListItems/Highlight.qml → qml/Components/ListItems/Highlight.qml Components/ListItems/ThinDivider.qml → qml/Components/ListItems/ThinDivider.qml Components/ListItems/VerticalThinDivider.qml → qml/Components/ListItems/VerticalThinDivider.qml Components/ListItems/graphics/ListItemDividerHorizontal@18.png → qml/Components/ListItems/graphics/ListItemDividerHorizontal@18.png Components/ListItems/graphics/ListItemDividerVertical@18.png → qml/Components/ListItems/graphics/ListItemDividerVertical@18.png Components/OpenEffect.qml → qml/Components/OpenEffect.qml Components/PageHeader.qml → qml/Components/PageHeader.qml Components/PinPadButton.qml → qml/Components/PinPadButton.qml Components/RatingStars.qml → qml/Components/RatingStars.qml Components/ResponsiveFlowView.qml → qml/Components/ResponsiveFlowView.qml Components/ResponsiveGridView.qml → qml/Components/ResponsiveGridView.qml Components/Revealer.qml → qml/Components/Revealer.qml Components/SearchHistoryModel.qml → qml/Components/SearchHistoryModel.qml Components/Showable.qml → qml/Components/Showable.qml Components/Stage.qml → qml/Components/Stage.qml Components/StandardAnimation.qml → qml/Components/StandardAnimation.qml Components/Tile.qml → qml/Components/Tile.qml Components/TileStyle.qml → qml/Components/TileStyle.qml Components/UbuntuShapeForItem.qml → qml/Components/UbuntuShapeForItem.qml Components/VolumeControl.qml → qml/Components/VolumeControl.qml Components/WrongPasswordAnimation.qml → qml/Components/WrongPasswordAnimation.qml Components/carousel.js → qml/Components/carousel.js Components/graphics/PageHeaderBaseDivider@18.png → qml/Components/graphics/PageHeaderBaseDivider@18.png Components/graphics/PageHeaderBaseDivider@18.sci → qml/Components/graphics/PageHeaderBaseDivider@18.sci Components/graphics/close@20.png → qml/Components/graphics/close@20.png Components/graphics/icon_star_off@20.png → qml/Components/graphics/icon_star_off@20.png Components/graphics/icon_star_on@20.png → qml/Components/graphics/icon_star_on@20.png Components/graphics/non-selected@18.png → qml/Components/graphics/non-selected@18.png Components/graphics/non-selected@18.sci → qml/Components/graphics/non-selected@18.sci Dash/Apps/AppPreview.qml → qml/Dash/Apps/AppPreview.qml Dash/Apps/CloseIcon.qml → qml/Dash/Apps/CloseIcon.qml Dash/Apps/DashPluginFilterGrid.qml → qml/Dash/Apps/DashPluginFilterGrid.qml Dash/Apps/FrequentlyUsedAppsModel.qml → qml/Dash/Apps/FrequentlyUsedAppsModel.qml Dash/Apps/RunningApplicationTile.qml → qml/Dash/Apps/RunningApplicationTile.qml Dash/Apps/RunningApplicationsGrid.qml → qml/Dash/Apps/RunningApplicationsGrid.qml+17 Dash/Apps/graphics/close_btn@9.png → qml/Dash/Apps/graphics/close_btn@9.png Dash/Dash.qml → qml/Dash/Dash.qml Dash/DashApps.qml → qml/Dash/DashApps.qml−1 Dash/DashBar.qml → qml/Dash/DashBar.qml qml/Dash/DashCarousel.qml+47 Dash/DashContent.qml → qml/Dash/DashContent.qml+8−2 qml/Dash/DashFilterGrid.qml+65 Dash/DashHome.qml → qml/Dash/DashHome.qml Dash/DashPreview.qml → qml/Dash/DashPreview.qml+1 Dash/DashPreviewPlaceholder.qml → qml/Dash/DashPreviewPlaceholder.qml qml/Dash/DashRenderer.qml+65 Dash/Generic/FlatTileStyle.qml → qml/Dash/Generic/FlatTileStyle.qml Dash/Generic/GenericCarousel.qml → qml/Dash/Generic/GenericCarousel.qml+3−7 Dash/Generic/GenericCarouselLoader.qml → qml/Dash/Generic/GenericCarouselLoader.qml Dash/Generic/GenericFilterGrid.qml → qml/Dash/Generic/GenericFilterGrid.qml+13−19 Dash/Generic/GenericFilterGridPotrait.qml → qml/Dash/Generic/GenericFilterGridPotrait.qml+1−3 Dash/Generic/GenericPreview.qml → qml/Dash/Generic/GenericPreview.qml Dash/Generic/WeatherFilterGrid.qml → qml/Dash/Generic/WeatherFilterGrid.qml Dash/GenericScopeView.qml → qml/Dash/GenericScopeView.qml+39−28 Dash/Movie/MoviePreview.qml → qml/Dash/Movie/MoviePreview.qml Dash/Music/CarouselDelegateMusic.qml → qml/Dash/Music/CarouselDelegateMusic.qml Dash/Music/MusicCarousel.qml → qml/Dash/Music/MusicCarousel.qml+2−2 Dash/Music/MusicCarouselLoader.qml → qml/Dash/Music/MusicCarouselLoader.qml Dash/Music/MusicFilterGrid.qml → qml/Dash/Music/MusicFilterGrid.qml+7−13 qml/Dash/Music/MusicPreview.qml+203 Dash/Music/MusicTileStyle.qml → qml/Dash/Music/MusicTileStyle.qml qml/Dash/Music/graphics/music_progress_bg.png Dash/PreviewDelegateMapper.qml → qml/Dash/PreviewDelegateMapper.qml+1 Dash/Previews/Header.qml → qml/Dash/Previews/Header.qml Dash/Previews/Reviews.qml → qml/Dash/Previews/Reviews.qml Dash/ScopeDelegateMapper.qml → qml/Dash/ScopeDelegateMapper.qml Dash/ScopeListView.qml → qml/Dash/ScopeListView.qml+1−1 Dash/SearchableResultModel.qml → qml/Dash/SearchableResultModel.qml Dash/Video/CarouselDelegateVideo.qml → qml/Dash/Video/CarouselDelegateVideo.qml Dash/Video/VideoCarousel.qml → qml/Dash/Video/VideoCarousel.qml+2−2 Dash/Video/VideoCarouselLoader.qml → qml/Dash/Video/VideoCarouselLoader.qml Dash/Video/VideoFilterGrid.qml → qml/Dash/Video/VideoFilterGrid.qml+8−13 Dash/Video/VideoTileStyle.qml → qml/Dash/Video/VideoTileStyle.qml Dash/Video/graphics/icon_button_amazon@20.png → qml/Dash/Video/graphics/icon_button_amazon@20.png Dash/Video/graphics/icon_button_u1@20.png → qml/Dash/Video/graphics/icon_button_u1@20.png Dash/Video/graphics/movie_icon_holder@27.png → qml/Dash/Video/graphics/movie_icon_holder@27.png Dash/graphics/header_handlearrow2@20.png → qml/Dash/graphics/header_handlearrow2@20.png Dash/graphics/header_handlearrow@20.png → qml/Dash/graphics/header_handlearrow@20.png Dash/graphics/icon_clear@20.png → qml/Dash/graphics/icon_clear@20.png Dash/graphics/icon_listview_clear@20.png → qml/Dash/graphics/icon_listview_clear@20.png Dash/graphics/icon_search_active@20.png → qml/Dash/graphics/icon_search_active@20.png Dash/graphics/icon_search_inactive@20.png → qml/Dash/graphics/icon_search_inactive@20.png Dash/graphics/phone/screenshots/angrybirds@12.png → qml/Dash/graphics/phone/screenshots/angrybirds@12.png Dash/graphics/phone/screenshots/browser@12.png → qml/Dash/graphics/phone/screenshots/browser@12.png Dash/graphics/phone/screenshots/camera@12.png → qml/Dash/graphics/phone/screenshots/camera@12.png Dash/graphics/phone/screenshots/facebook@12.png → qml/Dash/graphics/phone/screenshots/facebook@12.png Dash/graphics/phone/screenshots/gallery@12.png → qml/Dash/graphics/phone/screenshots/gallery@12.png Dash/graphics/phone/screenshots/map@12.png → qml/Dash/graphics/phone/screenshots/map@12.png Dash/graphics/phone/screenshots/music@12.png → qml/Dash/graphics/phone/screenshots/music@12.png Dash/graphics/phone/screenshots/phone@12.png → qml/Dash/graphics/phone/screenshots/phone@12.png Dash/graphics/phone/screenshots/settings@12.png → qml/Dash/graphics/phone/screenshots/settings@12.png Dash/graphics/phone/screenshots/twitter@12.png → qml/Dash/graphics/phone/screenshots/twitter@12.png Dash/graphics/play_button@18.png → qml/Dash/graphics/play_button@18.png Dash/graphics/play_button_active@18.png → qml/Dash/graphics/play_button_active@18.png Dash/graphics/play_button_active_big@20.png → qml/Dash/graphics/play_button_active_big@20.png Dash/graphics/play_button_big@20.png → qml/Dash/graphics/play_button_big@20.png Dash/graphics/tablet/icon_close_preview@20.png → qml/Dash/graphics/tablet/icon_close_preview@20.png Dash/graphics/tooltip_arrow@27.png → qml/Dash/graphics/tooltip_arrow@27.png Greeter/Clock.qml → qml/Greeter/Clock.qml Greeter/Dot.qml → qml/Greeter/Dot.qml Greeter/Gradient.js → qml/Greeter/Gradient.js Greeter/Greeter.qml → qml/Greeter/Greeter.qml+1−1 Greeter/GreeterContent.qml → qml/Greeter/GreeterContent.qml Greeter/Infographics.qml → qml/Greeter/Infographics.qml Greeter/Lockscreen.qml → qml/Greeter/Lockscreen.qml+2−2 Greeter/LoginList.qml → qml/Greeter/LoginList.qml+11 Greeter/ObjectPositioner.qml → qml/Greeter/ObjectPositioner.qml Greeter/PassphraseLockscreen.qml → qml/Greeter/PassphraseLockscreen.qml Greeter/PinLockscreen.qml → qml/Greeter/PinLockscreen.qml Greeter/graphics/dot_empty.png → qml/Greeter/graphics/dot_empty.png Greeter/graphics/dot_filled.png → qml/Greeter/graphics/dot_filled.png Greeter/graphics/dot_pointer.png → qml/Greeter/graphics/dot_pointer.png Greeter/graphics/icon_arrow.png → qml/Greeter/graphics/icon_arrow.png Greeter/graphics/infographic_circle_back.png → qml/Greeter/graphics/infographic_circle_back.png Hud/Hud.qml → qml/Hud/Hud.qml Hud/HudParametrizedActionsPage.qml → qml/Hud/HudParametrizedActionsPage.qml Hud/Result.qml → qml/Hud/Result.qml Hud/ResultList.qml → qml/Hud/ResultList.qml Hud/SearchBar.qml → qml/Hud/SearchBar.qml Hud/ShowingAnimation.qml → qml/Hud/ShowingAnimation.qml Hud/SliderLabel.qml → qml/Hud/SliderLabel.qml+4−2 Hud/SoundAmplitudeDelegate.qml → qml/Hud/SoundAmplitudeDelegate.qml Hud/SoundAmplitudeVisual.qml → qml/Hud/SoundAmplitudeVisual.qml Hud/ToolBar.qml → qml/Hud/ToolBar.qml Hud/ToolBarIcon.qml → qml/Hud/ToolBarIcon.qml Hud/graphics/divider@20.png → qml/Hud/graphics/divider@20.png Hud/graphics/divider@20.sci → qml/Hud/graphics/divider@20.sci Hud/graphics/dropshadow_right@20.png → qml/Hud/graphics/dropshadow_right@20.png Hud/graphics/help@20.png → qml/Hud/graphics/help@20.png Hud/graphics/hud_bg@20.png → qml/Hud/graphics/hud_bg@20.png Hud/graphics/hud_handlearrow@20.png → qml/Hud/graphics/hud_handlearrow@20.png Hud/graphics/hud_handlebar@20.png → qml/Hud/graphics/hud_handlebar@20.png Hud/graphics/icon_arrow@20.png → qml/Hud/graphics/icon_arrow@20.png Hud/graphics/icon_clear@20.png → qml/Hud/graphics/icon_clear@20.png Hud/graphics/icon_search@20.png → qml/Hud/graphics/icon_search@20.png Hud/graphics/microphone@20.png → qml/Hud/graphics/microphone@20.png Hud/graphics/popup_triangle@20.png → qml/Hud/graphics/popup_triangle@20.png Hud/graphics/settings@20.png → qml/Hud/graphics/settings@20.png Hud/graphics/undo@20.png → qml/Hud/graphics/undo@20.png Hud/graphics/view-fullscreen@20.png → qml/Hud/graphics/view-fullscreen@20.png Launcher/FoldingLauncherDelegate.qml → qml/Launcher/FoldingLauncherDelegate.qml Launcher/Launcher.qml → qml/Launcher/Launcher.qml+3−3 Launcher/LauncherDelegate.qml → qml/Launcher/LauncherDelegate.qml Launcher/LauncherPanel.qml → qml/Launcher/LauncherPanel.qml+2−2 Launcher/graphics/focused_app_arrow@30.png → qml/Launcher/graphics/focused_app_arrow@30.png Launcher/graphics/highlight@18.png → qml/Launcher/graphics/highlight@18.png Launcher/graphics/home@18.png → qml/Launcher/graphics/home@18.png Launcher/graphics/launcher_bg@30.png → qml/Launcher/graphics/launcher_bg@30.png Launcher/graphics/launcher_bg@30.sci → qml/Launcher/graphics/launcher_bg@30.sci Launcher/graphics/non-selected@18.png → qml/Launcher/graphics/non-selected@18.png Launcher/graphics/non-selected@18.sci → qml/Launcher/graphics/non-selected@18.sci Launcher/graphics/notification@30.png → qml/Launcher/graphics/notification@30.png Launcher/graphics/notification@30.sci → qml/Launcher/graphics/notification@30.sci Launcher/graphics/progressbar-fill@30.png → qml/Launcher/graphics/progressbar-fill@30.png Launcher/graphics/progressbar-fill@30.sci → qml/Launcher/graphics/progressbar-fill@30.sci Launcher/graphics/progressbar-trough@30.png → qml/Launcher/graphics/progressbar-trough@30.png Launcher/graphics/progressbar-trough@30.sci → qml/Launcher/graphics/progressbar-trough@30.sci Launcher/graphics/quicklist_tooltip@30.png → qml/Launcher/graphics/quicklist_tooltip@30.png Launcher/graphics/selected@18.png → qml/Launcher/graphics/selected@18.png Launcher/graphics/selected@18.sci → qml/Launcher/graphics/selected@18.sci Launcher/graphics/triangle@18.png → qml/Launcher/graphics/triangle@18.png qml/Notifications/Notification.qml+325 Notifications/NotificationMenuItemFactory.qml → qml/Notifications/NotificationMenuItemFactory.qml+9−2 Notifications/Notifications.qml → qml/Notifications/Notifications.qml+3−1 Notifications/ShapedIcon.qml → qml/Notifications/ShapedIcon.qml Panel/IndicatorItem.qml → qml/Panel/IndicatorItem.qml Panel/IndicatorRow.qml → qml/Panel/IndicatorRow.qml Panel/Indicators.qml → qml/Panel/Indicators.qml Panel/Indicators/DefaultIndicatorPage.qml → qml/Panel/Indicators/DefaultIndicatorPage.qml Panel/Indicators/DefaultIndicatorWidget.qml → qml/Panel/Indicators/DefaultIndicatorWidget.qml Panel/Indicators/client/IndicatorsClient.qml → qml/Panel/Indicators/client/IndicatorsClient.qml Panel/Indicators/client/IndicatorsList.qml → qml/Panel/Indicators/client/IndicatorsList.qml Panel/Indicators/client/IndicatorsPage.qml → qml/Panel/Indicators/client/IndicatorsPage.qml Panel/Indicators/client/IndicatorsTree.qml → qml/Panel/Indicators/client/IndicatorsTree.qml Panel/MenuContent.qml → qml/Panel/MenuContent.qml Panel/Panel.qml → qml/Panel/Panel.qml+22 Panel/PanelBackground.qml → qml/Panel/PanelBackground.qml Panel/PanelSeparatorLine.qml → qml/Panel/PanelSeparatorLine.qml Panel/SearchIndicator.qml → qml/Panel/SearchIndicator.qml Panel/graphics/Battery@18.png → qml/Panel/graphics/Battery@18.png Panel/graphics/Bluetooth@18.png → qml/Panel/graphics/Bluetooth@18.png Panel/graphics/Clock@18.png → qml/Panel/graphics/Clock@18.png Panel/graphics/Location@18.png → qml/Panel/graphics/Location@18.png Panel/graphics/Messages@18.png → qml/Panel/graphics/Messages@18.png Panel/graphics/Network@18.png → qml/Panel/graphics/Network@18.png Panel/graphics/Sound@18.png → qml/Panel/graphics/Sound@18.png Panel/graphics/Sync@18.png → qml/Panel/graphics/Sync@18.png Panel/graphics/System@18.png → qml/Panel/graphics/System@18.png Panel/graphics/Time@18.png → qml/Panel/graphics/Time@18.png Panel/graphics/VerticalDivider@18.png → qml/Panel/graphics/VerticalDivider@18.png Panel/graphics/handle@12.png → qml/Panel/graphics/handle@12.png Panel/graphics/handle@12.sci → qml/Panel/graphics/handle@12.sci Panel/graphics/rectangular_dropshadow@30.png → qml/Panel/graphics/rectangular_dropshadow@30.png Panel/graphics/rectangular_dropshadow@30.sci → qml/Panel/graphics/rectangular_dropshadow@30.sci Panel/graphics/search@12.png → qml/Panel/graphics/search@12.png Panel/graphics/time_and_date@18.png → qml/Panel/graphics/time_and_date@18.png Shell.qml → qml/Shell.qml+24−10 SideStage/SideStage.qml → qml/SideStage/SideStage.qml SideStage/SidestageHandle.qml → qml/SideStage/SidestageHandle.qml SideStage/graphics/sidestage_handle@20.png → qml/SideStage/graphics/sidestage_handle@20.png SideStage/graphics/sidestage_handle@20.sci → qml/SideStage/graphics/sidestage_handle@20.sci graphics/12_10_background_wide@12.png → qml/graphics/12_10_background_wide@12.png graphics/applicationIcons/angrybirds@18.png → qml/graphics/applicationIcons/angrybirds@18.png graphics/applicationIcons/browser@18.png → qml/graphics/applicationIcons/browser@18.png graphics/applicationIcons/calendar@18.png → qml/graphics/applicationIcons/calendar@18.png graphics/applicationIcons/camera@18.png → qml/graphics/applicationIcons/camera@18.png graphics/applicationIcons/contacts-app@18.png → qml/graphics/applicationIcons/contacts-app@18.png graphics/applicationIcons/dash@18.png → qml/graphics/applicationIcons/dash@18.png graphics/applicationIcons/evernote@18.png → qml/graphics/applicationIcons/evernote@18.png graphics/applicationIcons/facebook@18.png → qml/graphics/applicationIcons/facebook@18.png graphics/applicationIcons/gallery@18.png → qml/graphics/applicationIcons/gallery@18.png graphics/applicationIcons/gmail@18.png → qml/graphics/applicationIcons/gmail@18.png graphics/applicationIcons/map@18.png → qml/graphics/applicationIcons/map@18.png graphics/applicationIcons/media-player@18.png → qml/graphics/applicationIcons/media-player@18.png graphics/applicationIcons/messages-app@18.png → qml/graphics/applicationIcons/messages-app@18.png graphics/applicationIcons/music@18.png → qml/graphics/applicationIcons/music@18.png graphics/applicationIcons/notepad@18.png → qml/graphics/applicationIcons/notepad@18.png graphics/applicationIcons/phone-app@18.png → qml/graphics/applicationIcons/phone-app@18.png graphics/applicationIcons/pinterest@18.png → qml/graphics/applicationIcons/pinterest@18.png graphics/applicationIcons/ski_safari@18.png → qml/graphics/applicationIcons/ski_safari@18.png graphics/applicationIcons/skype@18.png → qml/graphics/applicationIcons/skype@18.png graphics/applicationIcons/soundcloud@18.png → qml/graphics/applicationIcons/soundcloud@18.png graphics/applicationIcons/system-settings@18.png → qml/graphics/applicationIcons/system-settings@18.png graphics/applicationIcons/twitter@18.png → qml/graphics/applicationIcons/twitter@18.png graphics/applicationIcons/weather@18.png → qml/graphics/applicationIcons/weather@18.png graphics/applicationIcons/wikipedia@18.png → qml/graphics/applicationIcons/wikipedia@18.png graphics/applicationIcons/youtube@18.png → qml/graphics/applicationIcons/youtube@18.png graphics/avatars/amanda@12.png → qml/graphics/avatars/amanda@12.png graphics/avatars/anna_olsson@12.png → qml/graphics/avatars/anna_olsson@12.png graphics/avatars/funky@12.png → qml/graphics/avatars/funky@12.png graphics/clock@18.png → qml/graphics/clock@18.png graphics/phone_background.jpg → qml/graphics/phone_background.jpg graphics/tablet_background.jpg → qml/graphics/tablet_background.jpg run+7−6 run_on_device−1 runtests.sh+1−13 ApplicationArguments.h → src/ApplicationArguments.h src/CMakeLists.txt+27 MouseTouchAdaptor.cpp → src/MouseTouchAdaptor.cpp MouseTouchAdaptor.h → src/MouseTouchAdaptor.h src/Panel/Indicators/client/CMakeLists.txt−4 src/Panel/Indicators/client/indicatorsclient.cpp+3−37 main.cpp → src/main.cpp+9−43 tests/autopilot/.project+17 tests/autopilot/.pydevproject+8 tests/autopilot/unity8/application_lifecycle/tests/test_application_lifecycle.py+7−6 tests/autopilot/unity8/process_helpers.py+17−1 tests/autopilot/unity8/shell/tests/test_lock_screen.py+9−8 tests/autopilot/unity8/shell/tests/test_notifications.py+1−1 tests/autopilot/unity8/shell/tests/test_upstart.py+99 tests/mocks/CMakeLists.txt+1 tests/mocks/LightDM/CMakeLists.txt+3−1 tests/mocks/LightDM/demo/CMakeLists.txt−1 tests/mocks/QtMultimedia/CMakeLists.txt+19 tests/mocks/QtMultimedia/audio.cpp+107 tests/mocks/QtMultimedia/audio.h+78 tests/mocks/QtMultimedia/plugin.cpp+28 tests/mocks/QtMultimedia/plugin.h+34 tests/mocks/QtMultimedia/qmldir+2 tests/mocks/Unity/Application/ApplicationManager.cpp+4−3 tests/mocks/Unity/Application/CMakeLists.txt−1 tests/mocks/Unity/Launcher/CMakeLists.txt−1 tests/mocks/Unity/fake_scope.cpp+3−3 tests/mocks/libusermetrics/CMakeLists.txt+4 tests/mocks/libusermetrics/UserMetrics.cpp+1−1 tests/plugins/AccountsService/CMakeLists.txt+6−1 tests/plugins/CMakeLists.txt+2−1 tests/plugins/ListViewWithPageHeader/CMakeLists.txt → tests/plugins/DashViews/CMakeLists.txt+16−5 tests/plugins/ListViewWithPageHeader/listviewwithpageheadertest.cpp → tests/plugins/DashViews/listviewwithpageheadertest.cpp+1−1 tests/plugins/ListViewWithPageHeader/test.qml → tests/plugins/DashViews/listviewwithpageheadertest.qml+1−1 tests/plugins/ListViewWithPageHeader/listviewwithpageheadertestsection.cpp → tests/plugins/DashViews/listviewwithpageheadertestsection.cpp+1−1 tests/plugins/ListViewWithPageHeader/test_section.qml → tests/plugins/DashViews/listviewwithpageheadertestsection.qml+1−1 tests/plugins/ListViewWithPageHeader/listviewwithpageheadertestsectionexternalmodel.cpp → tests/plugins/DashViews/listviewwithpageheadertestsectionexternalmodel.cpp+1−1 tests/plugins/ListViewWithPageHeader/test_sectionexternalmodel.qml → tests/plugins/DashViews/listviewwithpageheadertestsectionexternalmodel.qml+1−1 tests/plugins/ListViewWithPageHeader/tst_listviewwithpageheaderqml.qml → tests/plugins/DashViews/tst_listviewwithpageheaderqml.qml+1−1 tests/plugins/DashViews/verticaljournaltest.cpp+438 tests/plugins/DashViews/verticaljournaltest.qml+44 tests/plugins/DashViews/verticaljournaltry.cpp+90 tests/plugins/DashViews/verticaljournaltry.qml+100 tests/plugins/LightDM/CMakeLists.txt+24 tests/plugins/LightDM/dbus.cpp+166 tests/plugins/LightDM/greeter.qml+22 tests/plugins/Ubuntu/Gestures/CMakeLists.txt+2 tests/plugins/Ubuntu/Gestures/tst_PressedOutsideNotifier.cpp+150 tests/plugins/Ubuntu/Gestures/tst_PressedOutsideNotifier.qml+62 tests/plugins/Unity/Indicators/CMakeLists.txt−1 tests/plugins/Unity/Indicators/indicatorsmanagertest.cpp+2−1 tests/plugins/Unity/Indicators/indicatorsmodeltest.cpp+2−1 tests/plugins/Unity/Indicators/menucontentactivatortest.cpp−1 tests/plugins/Unity/Indicators/unitymenumodelstacktest.cpp−1 tests/plugins/Utils/CMakeLists.txt+1 tests/plugins/Unity/Indicators/timeformattertest.cpp → tests/plugins/Utils/timeformattertest.cpp+13 tests/qmltests/CMakeLists.txt+4−1 tests/qmltests/Components/CMakeLists.txt+1 tests/qmltests/Components/RevealingRectangle.qml+1−1 tests/qmltests/Components/tst_AnimationControllerWithSignals.qml+1−1 tests/qmltests/Components/tst_Carousel.qml+1−1 tests/qmltests/Components/tst_DragHandle.qml+1−1 tests/qmltests/Components/tst_DragHandle/HorizontalShowable.qml+1−1 tests/qmltests/Components/tst_DragHandle/VerticalShowable.qml+1−1 tests/qmltests/Components/tst_DraggingArea.qml+1−1 tests/qmltests/Components/tst_EdgeDemoOverlay.qml+1−1 tests/qmltests/Components/tst_FilterGrid.qml+1−1 tests/qmltests/Components/tst_LazyImage.qml+1−1 tests/qmltests/Components/tst_LazyImage/ImageControls.qml+1−1 tests/qmltests/Components/tst_OpenEffect.qml+1−1 tests/qmltests/Components/tst_PageHeader.qml+1−1 tests/qmltests/Components/tst_RatingStars.qml+1−1 tests/qmltests/Components/tst_ResponsiveFlowView.qml+1−1 tests/qmltests/Components/tst_ResponsiveGridView.qml+1−1 tests/qmltests/Components/tst_Showable.qml+1−1 tests/qmltests/Components/tst_Stage.qml+1−1 tests/qmltests/Components/tst_Tile.qml+1−1 tests/qmltests/Dash/Apps/tst_AppPreview.qml+1−1 tests/qmltests/Dash/Apps/tst_RunningApplicationsGrid.qml+21−1 tests/qmltests/Dash/Movie/tst_MoviePreview.qml+1−1 tests/qmltests/Dash/Music/tst_MusicPreview.qml+174 tests/qmltests/Dash/qml/FakeScopeView.qml+1−1 tests/qmltests/Dash/tst_Dash.qml+6−6 tests/qmltests/Dash/tst_DashBar.qml+1−1 tests/qmltests/Dash/tst_DashContent.qml+33−6 tests/qmltests/Dash/tst_DashPreview.qml+1−1 tests/qmltests/Dash/tst_FilterGrids.qml+3−3 tests/qmltests/Dash/tst_GenericPreview.qml+1−1 tests/qmltests/Dash/tst_GenericScopeView.qml+98−4 tests/qmltests/Greeter/tst_Clock.qml+1−1 tests/qmltests/Greeter/tst_Infographics.qml+1−1 tests/qmltests/Greeter/tst_Lockscreen.qml+1−1 tests/qmltests/Greeter/tst_Phone.qml+4−4 tests/qmltests/Greeter/tst_Tablet.qml+12−1 tests/qmltests/Hud/tst_Hud.qml+1−1 tests/qmltests/Hud/tst_Result.qml+1−1 tests/qmltests/Launcher/tst_Launcher.qml+7−7 tests/qmltests/Notifications/tst_Notifications.qml+4−5 tests/qmltests/Panel/Indicators/tst_DefaultIndicatorWidget.qml+1−1 tests/qmltests/Panel/tst_IndicatorItem.qml+1−1 tests/qmltests/Panel/tst_IndicatorRow.qml+1−1 tests/qmltests/Panel/tst_Indicators.qml+2−2 tests/qmltests/Panel/tst_MenuContent.qml+1−1 tests/qmltests/Panel/tst_Panel.qml+15−1 tests/qmltests/Panel/tst_SearchIndicator.qml+1−1 tests/qmltests/SideStage/tst_SideStage.qml+1−1 tests/qmltests/tst_Shell.qml+3−3 tests/uqmlscene/CMakeLists.txt+6−1 tests/uqmlscene/main.cpp+1−1 tests/utils/modules/Unity/Test/CMakeLists.txt+4
.bzrignore+1−4
@@ -3,8 +3,5 @@
33# QtCreator project files
44/*.user
55# Eclipse project files
6−/.project
7−/.cproject
8−/.settings
9−/.pydevproject
6+.settings
107message.txt
Applications/Application.qmldeleted−54
@@ -1,54 +0,0 @@
1−/*
2− * Copyright (C) 2013 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−import QtQuick 2.0
18−import "applications.js" as ApplicationsModel
19−import Unity.Application 0.1
20−
21−/* This class is temporary. It is meant to be API compatible with qthybris' Application
22− class.
23− This class can be removed as soon as qthybris' Application is instantiable from QML
24− and its 'desktopFile' property becomes writable.
25− This also requires qthybris to be easily compilable on the desktop.
26−*/
27−QtObject {
28− id: application
29−
30− property string desktopFile
31− property string name
32− property string comment
33− property string icon
34− property string exec
35− property string stage
36− property bool fullscreen
37−
38− onDesktopFileChanged: {
39− var applicationData = ApplicationsModel.__availableApplications[desktopFile];
40− if (applicationData) {
41− application.name = applicationData.name;
42− application.icon = applicationData.icon;
43− application.exec = applicationData.exec;
44− application.stage = applicationData.stage ? applicationData.stage : ApplicationInfo.MainStage;
45− application.fullscreen = applicationData.fullscreen ? applicationData.fullscreen : false;
46− } else {
47− application.name = "";
48− application.icon = "";
49− application.exec = "";
50− application.stage = "";
51− application.fullscreen = false;
52− }
53− }
54−}
Applications/applications.jsdeleted−115
@@ -1,115 +0,0 @@
1−/*
2− * Copyright (C) 2013 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−// mimic qtubuntu's Application.Stage enum
18−var MainStage = 0;
19−var SideStage = 1;
20−
21−var __availableApplications = {
22− '/usr/share/applications/phone-app.desktop': {
23− 'name': i18n.tr("Phone"),
24− 'icon': 'phone-app',
25− 'exec': '/usr/bin/phone-app',
26− 'stage': SideStage
27− },
28− '/usr/share/applications/camera-app.desktop': {
29− 'name': i18n.tr("Camera"),
30− 'icon': 'camera',
31− 'fullscreen': true,
32− 'exec': '/usr/bin/camera-app --fullscreen'
33− },
34− '/usr/share/applications/gallery-app.desktop': {
35− 'name': i18n.tr("Gallery"),
36− 'icon': 'gallery',
37− 'exec': '/usr/bin/gallery-app'
38− },
39− '/usr/share/applications/facebook-webapp.desktop': {
40− 'name': i18n.tr("Facebook"),
41− 'icon': 'facebook',
42− 'exec': '/usr/bin/webbrowser-app --chromeless http://m.facebook.com',
43− 'stage': SideStage
44− },
45− '/usr/share/applications/webbrowser-app.desktop': {
46− 'name': i18n.tr("Browser"),
47− 'icon': 'browser',
48− 'exec': '/usr/bin/webbrowser-app'
49− },
50− '/usr/share/applications/twitter-webapp.desktop': {
51− 'name': i18n.tr("Twitter"),
52− 'icon': 'twitter',
53− 'exec': '/usr/bin/webbrowser-app --chromeless http://www.twitter.com',
54− 'stage': SideStage
55− },
56− '/usr/share/applications/gmail-webapp.desktop': {
57− 'name': i18n.tr("GMail"),
58− 'icon': 'gmail',
59− 'exec': '/usr/bin/webbrowser-app --chromeless http://m.gmail.com'
60− },
61− '/usr/share/applications/ubuntu-weather-app.desktop': {
62− 'name': i18n.tr("Weather"),
63− 'icon': 'weather',
64− 'exec': '/usr/bin/qmlscene /usr/share/ubuntu-weather-app/ubuntu-weather-app.qml',
65− 'stage': SideStage
66− },
67− '/usr/share/applications/notes-app.desktop': {
68− 'name': i18n.tr("Notepad"),
69− 'icon': 'notepad',
70− 'exec': '/usr/bin/qmlscene /usr/share/notes-app/NotesApp.qml',
71− 'stage': SideStage
72− },
73− '/usr/share/applications/calendar-app.desktop': {
74− 'name': i18n.tr("Calendar"),
75− 'icon': 'calendar',
76− 'exec': '/usr/bin/qmlscene /usr/share/calendar-app/calendar.qml',
77− 'stage': SideStage
78− },
79− '/usr/share/applications/mediaplayer-app.desktop': {
80− 'name': i18n.tr("Media Player"),
81− 'icon': 'mediaplayer-app',
82− 'fullscreen': true,
83− 'exec': '/usr/bin/mediaplayer-app'
84− },
85− '/usr/share/applications/evernote.desktop': {
86− 'name': i18n.tr("Evernote"),
87− 'icon': 'evernote',
88− 'exec': ''
89− },
90− '/usr/share/applications/map.desktop': {
91− 'name': i18n.tr("Map"),
92− 'icon': 'map',
93− 'exec': ''
94− },
95− '/usr/share/applications/pinterest.desktop': {
96− 'name': i18n.tr("Pinterest"),
97− 'icon': 'pinterest',
98− 'exec': ''
99− },
100− '/usr/share/applications/soundcloud.desktop': {
101− 'name': i18n.tr("SoundCloud"),
102− 'icon': 'soundcloud',
103− 'exec': ''
104− },
105− '/usr/share/applications/wikipedia.desktop': {
106− 'name': i18n.tr("Wikipedia"),
107− 'icon': 'wikipedia',
108− 'exec': ''
109− },
110− '/usr/share/applications/youtube.desktop': {
111− 'name': i18n.tr("YouTube"),
112− 'icon': 'youtube',
113− 'exec': ''
114− },
115−}
CMakeLists.txt+11−73
@@ -69,17 +69,6 @@ if(SHELL_PLUGINDIR STREQUAL "")
6969 message(FATAL_ERROR "Could not determine plugin import dir.")
7070endif()
7171
72−configure_file(paths.h.in ${CMAKE_CURRENT_BINARY_DIR}/paths.h @ONLY)
73−
74−pkg_check_modules(UNITY-MIR REQUIRED unity-mir)
75−
76−include_directories(
77− ${CMAKE_CURRENT_BINARY_DIR}
78− ${CMAKE_CURRENT_SOURCE_DIR}
79− ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
80− ${UNITY-MIR_INCLUDE_DIRS}
81− )
82−
8372set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
8473
8574set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-permissive -pedantic -Wall -Wextra")
@@ -108,73 +97,22 @@ declare_autopilot_test(shell unity8.shell ${CMAKE_SOURCE_DIR}/tests/autopilot/)
10897
10998set(SHELL_APP unity8)
11099
111−set(shell_app_HDRS
112− )
113−
114−add_executable(${SHELL_APP}
115− ${shellapplication_MOC_SRCS}
116− ApplicationArguments.h
117− main.cpp
118− MouseTouchAdaptor.cpp
119− )
120−
121−qt5_use_modules(${SHELL_APP} Qml Quick Test)
122−pkg_check_modules(XCB REQUIRED xcb)
123−
124−if (NOT "${XCB_INCLUDE_DIRS}" STREQUAL "")
125− set_target_properties(${SHELL_APP} PROPERTIES INCLUDE_DIRECTORIES ${XCB_INCLUDE_DIRS})
126−endif()
127−
128−target_link_libraries(${SHELL_APP}
129− ${Qt5Qml_LIBRARIES}
130− ${Qt5Quick_LIBRARIES}
131− ${XCB_LDFLAGS}
132− ${CMAKE_DL_LIBS}
133− )
134−
135−# install binaries
136−install(TARGETS ${SHELL_APP}
137− RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
138− )
139−
140−# install top level qml and js files
141−file(GLOB QML_JS_FILES *.qml *.js)
142−
143−install(FILES ${QML_JS_FILES}
144− DESTINATION ${SHELL_APP_DIR}
145− )
100+include_directories(
101+ ${CMAKE_SOURCE_DIR}/include
102+ ${CMAKE_BINARY_DIR}/include
103+)
146104
147105# add subdirectories to build
106+add_subdirectory(include)
107+add_subdirectory(src)
108+add_subdirectory(qml)
148109add_subdirectory(tests)
149110add_subdirectory(plugins)
150−add_subdirectory(src)
151111
152−# install subdirectories
153−set(QML_DIRS
154− Applications
155− Bottombar
156− Components
157− Dash
158− graphics
159− Greeter
160− Hud
161− Panel
162− Launcher
163− SideStage
164− Notifications
165− )
166−
167−install(DIRECTORY ${QML_DIRS}
168− DESTINATION ${SHELL_APP_DIR}
169− )
170−
171−# generate desktop file
172−configure_file(${SHELL_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop @ONLY)
173−
174−# install desktop file
175−install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop
176− DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
177− )
112+#
113+# Data files
114+#
115+add_subdirectory(data)
178116
179117#
180118# Translation
CODING+2−2
@@ -1,7 +1,7 @@
11Building Unity 8
22================
33
4−Only Ubuntu 13.10 (saucy) is supported as a developement environment.
4+Only Ubuntu 14.04 (trusty) is supported as a developement environment.
55
66download source
77---------------
@@ -68,7 +68,7 @@ Notes
6868
6969Running Unity 8 on devices
7070==========================
71−- Ubuntu Touch builds are currently only available in 13.10 flavour
71+- Ubuntu Touch builds are currently only available in 14.04 flavour
7272- supported hardware should match one of those listed here
7373 https://wiki.ubuntu.com/Touch/Devices#Running_fine
7474- follow the Ubuntu Touch install instructions for your chosen device
Notifications/Notification.qmldeleted−295
@@ -1,295 +0,0 @@
1−/*
2− * Copyright (C) 2013 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−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−import Unity.Notifications 1.0
20−import QMenuModel 0.1
21−import Utils 0.1
22−
23−UbuntuShape {
24− id: notification
25−
26− property alias iconSource: icon.fileSource
27− property alias secondaryIconSource: secondaryIcon.source
28− property alias summary: summaryLabel.text
29− property alias body: bodyLabel.text
30− property var actions
31− property var notificationId
32− property var type
33− property var hints
34− property var notification
35−
36− objectName: "background"
37− implicitHeight: type != Notification.PlaceHolder ? contentColumn.height + contentColumn.spacing * 2 : 0
38− color: Qt.rgba(0.132, 0.117, 0.109, 0.97)
39− opacity: 0
40− radius: "medium"
41−
42− clip: true
43− visible: type != Notification.PlaceHolder
44−
45− UnityMenuModelPaths {
46− id: paths
47−
48− source: hints["x-canonical-private-menu-model"]
49−
50− busNameHint: "busName"
51− actionsHint: "actions"
52− menuObjectPathHint: "menuPath"
53− }
54−
55− UnityMenuModel {
56− id: unityMenuModel
57−
58− busName: paths.busName
59− actions: paths.actions
60− menuObjectPath: paths.menuObjectPath
61− }
62−
63− Behavior on implicitHeight {
64− id: heightBehavior
65−
66− enabled: false
67− UbuntuNumberAnimation {
68− duration: UbuntuAnimation.SnapDuration
69− }
70− }
71−
72− // delay enabling height behavior until the add transition is complete
73− onOpacityChanged: if (opacity == 1) heightBehavior.enabled = true
74−
75− MouseArea {
76− id: interactiveArea
77−
78− anchors.fill: contentColumn
79− objectName: "interactiveArea"
80− enabled: notification.type == Notification.Interactive
81− onClicked: notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
82− }
83−
84− Column {
85− id: contentColumn
86−
87− anchors {
88− left: parent.left
89− right: parent.right
90− top: parent.top
91− margins: spacing
92− }
93−
94− spacing: units.gu(1)
95−
96− Row {
97− id: topRow
98−
99− spacing: contentColumn.spacing
100− anchors {
101− left: parent.left
102− right: parent.right
103− }
104−
105− ShapedIcon {
106− id: icon
107−
108− objectName: "icon"
109− width: units.gu(6)
110− height: units.gu(6)
111− shaped: notification.hints["x-canonical-non-shaped-icon"] == "true" ? false : true
112− visible: iconSource !== undefined && iconSource != ""
113− }
114−
115− Image {
116− id: secondaryIcon
117−
118− objectName: "secondaryIcon"
119− width: units.gu(2)
120− height: units.gu(2)
121− visible: source !== undefined && source != ""
122− fillMode: Image.PreserveAspectCrop
123− }
124−
125− Column {
126− id: labelColumn
127− width: parent.width - x
128−
129− anchors.verticalCenter: (icon.visible && !bodyLabel.visible) ? icon.verticalCenter : undefined
130−
131− Label {
132− id: summaryLabel
133−
134− objectName: "summaryLabel"
135− anchors {
136− left: parent.left
137− right: parent.right
138− }
139− fontSize: "medium"
140− font.bold: true
141− color: Theme.palette.selected.backgroundText
142− elide: Text.ElideRight
143− }
144−
145− Label {
146− id: bodyLabel
147−
148− objectName: "bodyLabel"
149− anchors {
150− left: parent.left
151− right: parent.right
152− }
153− visible: body != ""
154− fontSize: "small"
155− color: Theme.palette.selected.backgroundText
156− opacity: 0.6
157− wrapMode: Text.WordWrap
158− maximumLineCount: 10
159− elide: Text.ElideRight
160− }
161− }
162− }
163−
164− Column {
165− objectName: "dialogListView"
166− spacing: units.gu(2)
167−
168− visible: count > 0
169−
170− anchors.left: parent.left; anchors.right: parent.right
171−
172− Repeater {
173− model: unityMenuModel
174−
175− NotificationMenuItemFactory {
176− anchors.left: parent.left; anchors.right: parent.right
177−
178− menuModel: unityMenuModel
179− menuData: model
180− menuIndex: index
181− }
182− }
183− }
184−
185− Item {
186− id: buttonRow
187−
188− objectName: "buttonRow"
189− anchors {
190− left: parent.left
191− right: parent.right
192− }
193− visible: notification.type == Notification.SnapDecision && actionRepeater.count > 0
194− height: units.gu(5)
195−
196− property real buttonWidth: (width - contentColumn.spacing) / 2
197− property bool expanded
198−
199− Button {
200− id: leftButton
201−
202− objectName: "button1"
203− width: parent.expanded ? parent.width : parent.buttonWidth
204− anchors {
205− top: parent.top
206− bottom: parent.bottom
207− }
208− text: notification.type == Notification.SnapDecision && actionRepeater.count >= 2 ? actionRepeater.itemAt(1).actionLabel : ""
209− gradient: UbuntuColors.greyGradient
210− onClicked: {
211− if (actionRepeater.count > 2) {
212− buttonRow.expanded = !buttonRow.expanded
213− } else {
214− notification.notification.invokeAction(actionRepeater.itemAt(1).actionId)
215− }
216− }
217−
218− Behavior on width {
219− UbuntuNumberAnimation {
220− duration: UbuntuAnimation.SnapDuration
221− }
222− }
223− }
224−
225− Button {
226− id: rightButton
227−
228− objectName: "button0"
229− anchors {
230− left: leftButton.right
231− leftMargin: contentColumn.spacing
232− right: parent.right
233− }
234− text: notification.type == Notification.SnapDecision && actionRepeater.count >= 1 ? actionRepeater.itemAt(0).actionLabel : ""
235− anchors {
236− top: parent.top
237− bottom: parent.bottom
238− }
239− gradient: notification.hints["x-canonical-private-button-tint"] == "true" ? UbuntuColors.orangeGradient : UbuntuColors.greyGradient
240− visible: width > 0
241− onClicked: notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
242− }
243− }
244−
245− Column {
246− objectName: "buttonColumn"
247− spacing: contentColumn.spacing
248− anchors {
249− left: parent.left
250− right: parent.right
251− }
252−
253− // calculate initial position before Column takes over
254− y: buttonRow.y + buttonRow.height + contentColumn.spacing
255−
256− visible: notification.type == Notification.SnapDecision
257− height: buttonRow.expanded ? implicitHeight : 0
258−
259− Repeater {
260− id: actionRepeater
261−
262− model: notification.actions
263− delegate: Loader {
264− id: loader
265−
266− property string actionId: id
267− property string actionLabel: label
268−
269− anchors {
270− left: parent.left
271− right: parent.right
272− }
273−
274− Component {
275− id: actionButton
276−
277− Button {
278− objectName: "button" + index
279− anchors {
280− left: parent.left
281− right: parent.right
282− }
283−
284− text: loader.actionLabel
285− height: units.gu(5)
286− gradient: UbuntuColors.greyGradient
287− onClicked: notification.notification.invokeAction(loader.actionId)
288− }
289− }
290− sourceComponent: (index == 0 || index == 1) ? undefined : actionButton
291− }
292− }
293− }
294− }
295−}
data/CMakeLists.txtnew file+7
@@ -0,0 +1,7 @@
1+# generate desktop file
2+configure_file(${SHELL_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop @ONLY)
3+
4+# install desktop file
5+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop
6+ DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
7+ )
data/unity8.conf+1
@@ -5,6 +5,7 @@ start on ((xsession SESSION=ubuntu-touch) or (xsession SESSION=ubuntu-touch-surf
55stop on desktop-end
66
77respawn
8+expect stop
89
910pre-start script
1011 if [ -n "$MIR_SOCKET" ]; then
unity8.desktop.in → data/unity8.desktop.inrenamed

The content is the same.

data/unity8.overridenew file+1
@@ -0,0 +1 @@
1+kill timeout 30
debian/changelog+225−2
@@ -1,8 +1,231 @@
1−unity8 (7.84-0ubuntu1) UNRELEASED; urgency=low
1+unity8 (7.84+14.04.20131212-0ubuntu1) trusty; urgency=low
22
3+ [ Michał Sawicz ]
4+ * Add PyDev project files for autopilot tests. Also tweak .bzrignore
5+ to not ignore generic Eclipse project definitions.
6+ * Retry unlocking the greeter three times.
7+ * Reduce code duplication and clean up CMakeLists and includes in
8+ indicator tests.
9+
10+ [ Nick Dedekind ]
11+ * Replaced indicator page dynamic menuSelected binding with Connection
12+ to listview selectedIndex property. (LP: #1243146)
13+ * Indicators close when menu items are activated. (LP: #1238182)
14+ * Fixed up connections for changes to model data. (LP: #1253810)
15+
16+ [ Albert Astals ]
17+ * dashItemSelected -> showDashHome Because we are not using the index
18+ at all in the upper layers.
19+ * Fix filtering colllapsing/expanding again Also the delegate creation
20+ range stuff flows up->down not down->up so rearrange the bindings.
21+
22+ [ Ubuntu daily release ]
23+ * Automatic snapshot from revision 590
24+
25+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 12 Dec 2013 21:41:19 +0000
26+
27+unity8 (7.84+14.04.20131206.1-0ubuntu1) trusty; urgency=low
28+
29+ [ Michal Hruby ]
30+ * Ensure DashContent's ListView's currentItem is set if the model is
31+ not empty.
32+
33+ [ Michał Sawicz ]
34+ * Don't generate build-deps .deb twice and allow overriding
35+ QML2_IMPORT_PATH in ./run.
36+
37+ [ Albert Astals ]
38+ * Remove unused Applications/ folder .
39+ * Implement an 'interface' for Dash Renderers.
40+ * Use deelistmodel's conversion method Instead of a copy of the code .
41+ * Remove icons we don't use .
42+ * Do not start apps or go to dash on demo If you are pulling the
43+ launcher out while in demo mode it doesn't make sense to let you
44+ start applications. Besides it locks you out because it starts the
45+ app and the demo is still not finished so you can't really use any
46+ of the edges to escape Bug #1233696. (LP: #1233696)
47+ * Add a test for the carousel showing the preview when being clicked .
48+ * Fix collapsing of categories not working and the
49+ expansion/collapsing animation +test.
50+
51+ [ Timo Jyrinki ]
52+ * Depend on either Qt 5.2 or libqt5v8-5-private-dev.
53+ * qtdeclarative5-private-dev 5.0.2-6ubuntu5 now depends directly on Qt
54+ V8 private headers. The remaining "qtdeclarative5-private-dev"
55+ dependency is enough now both when compiling against 5.0.2 or 5.2.
56+
57+ [ Pete Woods ]
58+ * Handle optional parameterized action properties. (LP: #1256258)
59+
60+ [ Andrea Cimitan ]
61+ * Implement an 'interface' for Dash Renderers.
62+
63+ [ Michael Zanetti ]
64+ * Added music preview.
65+ * rename some parameters from desktopFile to appId as scopes are now
66+ changed to give us the appId.
67+ * unhardcode launcher's search paths for .desktop files.
68+ * Enable teasing of the phone greeter even though we have a
69+ lockscreen.
70+ * check if variant is valid to avoid asserting in debug mode when the
71+ connection to AccountsService doesn't work for some reason .
72+
73+ [ Michael Terry ]
74+ * Add the DBus greeter API from the desktop greeter into the unity8
75+ greeter.
76+
77+ [ Daniel d'Andrada ]
78+ * Dash: disable close mode when you click outside app thumbnails To
79+ leave the termination mode you can now just mouse/touch press
80+ anywhere outside the running applications' thumbnails The other way,
81+ which still works, is long-pressing a thumbnail once more. (LP:
82+ #1193414)
83+
84+ [ Ubuntu daily release ]
85+ * Automatic snapshot from revision 579
86+
87+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 06 Dec 2013 13:15:57 +0000
88+
89+unity8 (7.84+14.04.20131128.2-0ubuntu1) trusty; urgency=low
90+
91+ [ Michal Hruby ]
392 * Depend on the separate scopes plugin
93+ * Move the BottomBar* DBus communicator to the Utils plugin.
94+
95+ [ Michał Sawicz ]
96+ * Wait for DashHome to be available in tst_Shell. (LP: #1254898)
97+ * Use plugindir from unity-shell-api.pc.
98+ * Expect stop in upstart job and raise in case of surfaceflinger. (LP:
99+ #1239876)
100+
101+ [ Albert Astals ]
102+ * Fix time test in Qt 5.2 Make factors an array instead of a
103+ object/dict Objects/dicts are unordered by definition, it happened
104+ that Qt 5.0 gave them in the orrder we wanted, but with Qt 5.2 is
105+ failing, and we don't even need the "key", so array works as well
106+ :).
107+ * Test that the dash hswipe is disabled while the inner stuff is
108+ moving .
109+ * Skip restMaximizeVisibleAreaMoveUpAndShowHeader, it's causing too
110+ many failed runs And we are confident it's failing because of the
111+ suboptimal scenegraph run in 5.0.x.
112+ * Make Dash::test_show_scope_on_load more robust If we are testing
113+ showScopeOnLoaded make sure we force a scope reload after we set it,
114+ otherwise it may just happen that the scope has already been loaded
115+ and the expectaction that we'll change the list to it is just wrong.
116+ * Dash renderer signals: No need to pass the model up and down Whoever
117+ is listening to the signal has access to the item that emits the
118+ signal and has the model right there accessible if needs it.
119+ * LVWPH: Fix header going bad when setContentHeight ends up moving the
120+ viewport How to reproduce the bug easily without the patch: * In the
121+ Dash Home, search for london * Scroll to the bottom * Start moving
122+ to the apps scope very slowly * At around 3/4 of the move you'll see
123+ the header in the home scope went to a bad position * Go back to the
124+ Dash Home. (LP: #1237942, #1246351)
125+ * Remove unused AppInfo and VideoInfo files .
126+ * Kill unused ApplicationsFilterGrid.qml .
127+ * Unify ScopeView and GenericScopeView .
128+ * Fix header getting lost as per bug 1245824. (LP: #1245824)
129+ * Remove unused Time.js and its test .
130+ * Do not include the QtQml megaheader Include only qqml.h which is
131+ what we need in these files.
132+ * Don't do stuff if our parent context is gone We'll be gone soon too
133+ (and crash probably) so don't do anything. This looks a bit like a
134+ workaround, wait for 5.2 better painting/dispatching loop to see if
135+ this is not needed anymore, we find a better way to do it, or we
136+ decide this is fine.
137+
138+ [ Lars Uebernickel ]
139+ * Allow setting different indicator positions for different profiles.
140+
141+ [ Mirco Müller ]
142+ * Added checkbox for toggling between echo-modes of password-
143+ entryfields in ext. snap-decisions.
144+ * Fixes bug #1200569. (LP: #1200569)
145+
146+ [ Andrea Cimitan ]
147+ * Switch to application scope when a dash swipe is taking place and an
148+ app is on foreground. (LP: #1231996)
149+ * Shifts wallpaper rendering for greeter lockscreen to be inline with
150+ shell. (LP: #1231731)
151+ * Dinamically load the Carousel/Filtergrid with more than 6 items.
152+ (LP: #1226288, #1234105)
153+ * Removes Math.js and its usage. Use SDK ones.
154+
155+ [ Gerry Boland ]
156+ * DragHandle: javascript argument name clashes with local variable.
157+ Yes it works, but is a little unsafe.
158+
159+ [ Nick Dedekind ]
160+ * Added UnityMenuModel submenu row removal awareness in
161+ UnityMenuModelStack.
162+ * Round indicator widget icon/label width up to closest gu for
163+ alignment. (LP: #1236267)
164+ * Indicator re-select by dragging from top when fully opened. (LP:
165+ #1213164)
166+ * Fixed a race condition causing search history popup to show up when
167+ it shouldn't. (LP: #1249369)
168+
169+ [ Christopher Lee ]
170+ * Unity8 tests now make use of the helper functions (added in the pre-
171+ req branch) so that the helper functions are tested as part of daily
172+ business.
173+
174+ [ Daniel d'Andrada ]
175+ * Improve DirectionalDragArea Removed Rejected status, simplifying
176+ state machine. Added compositionTime property. Multi-finger
177+ scenarios are better handled now. Refactored TimeSource in
178+ Ubuntu.Gestures plugin. Added an easy way to debug
179+ DirectionalDragArea by having switchable debug prints. Updated tests
180+ to also simulate the passage of time. Use touch point scene
181+ coordinates for gesture recognition so that moving the.
182+ DirectionalDragArea (as in a hinting DragHandle) won't affect it.
183+ (LP: #1228336)
184+ * Add right-edge drag hinting to Greeter To match with the existing
185+ teasing animation when you tap on the right half of the Greeter.
186+ Also has the side benefit of making the code look a bit nicer.
187+ * Refactor Ubuntu.Gesture tests to share common logic Take the common
188+ part out of tst_DirectionalDragArea and put it into a separate base
189+ class, GestureTest, so that it can be shared with other, future,
190+ tests. In CMakeLists.txt, create a macro out of DirectionalDragArea
191+ build script to be used by future tests with similar requirements
192+ and structure. Also add the "m_" prefix to member variables.
193+ * Remove dead code from Utils plugin They are not being used anywhere.
194+
195+ [ Michael Terry ]
196+ * Make EdgeDemoOverlay test more reliable by testing for what we
197+ really care about, not an indirect indicator of it. (LP: #1248232)
198+ * Explicitly set MIR_SOCKET for other upstart jobs, rather than
199+ relying on the default socket, since that won't work once we move to
200+ a nested Mir.
201+
202+ [ Michael Zanetti ]
203+ * don't add margins to RunningApplicationTile's label. (LP: #1245482)
204+ * allow SIM PIN entry to have a variable pin length (by adding a done-
205+ button). (LP: #1240561)
206+ * fix launcher wording for pinning actions. (LP: #1240891)
207+ * fix preview background positioning don't explicitly take originY
208+ into account as it's already in there implicitly. make sure we don't
209+ split the openeffect in a place where it can be covered by the
210+ header.
211+ * fix album artwork containing / in the name. (LP: #1237829)
212+ * small launcher tweaks fix fakeDragItem's initial position to match
213+ with real item. remove UbuntuShape's border glow. .
214+ * drop all references to LighDM from the Lockscreen This should make
215+ it generic enough to allow reusing it for SIM PIN entry .
216+
217+ [ Omer Akram ]
218+ * make the non working code in the screen unlocker helper work.
219+
220+ [ Nicolas d'Offay ]
221+ * Pushed up the z order of the clock in GreeterContent. (LP: #1233146)
222+ * Search history is now persistent across all scopes and remains in
223+ QML. (LP: #1226221)
224+
225+ [ Ubuntu daily release ]
226+ * Automatic snapshot from revision 556
4227
5− -- Michal Hruby <michal.hruby@canonical.com> Wed, 13 Nov 2013 12:43:39 +0000
228+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 28 Nov 2013 18:09:17 +0000
6229
7230unity8 (7.83+14.04.20131106-0ubuntu1) trusty; urgency=low
8231
debian/control+2−2
@@ -16,7 +16,6 @@ Build-Depends: cmake,
1616 libnih-dev,
1717 libpulse-dev,
1818 libqmenumodel-dev (>= 0.2.7),
19− libqt5v8-5-private-dev,
2019 libunity-api-dev (>= 7.80.4),
2120 libunity-mir-dev,
2221 libunity-scopes-json-def-phone,
@@ -34,6 +33,7 @@ Build-Depends: cmake,
3433 qtbase5-private-dev,
3534 qtdeclarative5-dev,
3635 qtdeclarative5-dev-tools,
36+ qtdeclarative5-qtmultimedia-plugin,
3737 qtdeclarative5-private-dev,
3838 qtdeclarative5-qtquick2-plugin,
3939 qtdeclarative5-test-plugin,
@@ -63,7 +63,7 @@ Package: unity8
6363Architecture: any
6464Provides: indicator-renderer,
6565Depends: gsettings-desktop-schemas,
66− libunity-mir1,
66+ libunity-mir1 (>= 0.2),
6767 qmenumodel-qml (>= 0.2.7),
6868 qtdeclarative5-dee-plugin,
6969 qtdeclarative5-gsettings1.0,
debian/unity8-autopilot.install+1
@@ -1 +1,2 @@
11usr/lib/python*/*/unity*
2+data/unity8.override usr/share/upstart/sessions
debian/unity8-private.install+1−1
@@ -1,7 +1,7 @@
11usr/lib/*/unity8/qml/AccountsService
22usr/lib/*/unity8/qml/HudClient
33usr/lib/*/unity8/qml/LightDM
4−usr/lib/*/unity8/qml/ListViewWithPageHeader
4+usr/lib/*/unity8/qml/DashViews
55usr/lib/*/unity8/qml/Powerd
66usr/lib/*/unity8/qml/SessionBroadcast
77usr/lib/*/unity8/qml/Ubuntu
debian/unity8.install−1
@@ -1,7 +1,6 @@
11usr/bin/unity8
22usr/share/applications/unity8.desktop
33usr/share/locale
4−usr/share/unity8/Applications
54usr/share/unity8/Bottombar
65usr/share/unity8/Components
76usr/share/unity8/Dash
include/CMakeLists.txtnew file+1
@@ -0,0 +1 @@
1+configure_file(paths.h.in ${CMAKE_CURRENT_BINARY_DIR}/paths.h @ONLY)
paths.h.in → include/paths.h.inrenamed+42−3
@@ -23,6 +23,8 @@
2323// Qt
2424#include <QtCore/QCoreApplication>
2525#include <QtCore/QDir>
26+#include <QtGui/QIcon>
27+#include <QtQml/QQmlEngine>
2628#include <QStandardPaths>
2729
2830inline bool isRunningInstalled() {
@@ -39,11 +41,11 @@ inline QString translationDirectory() {
3941 }
4042}
4143
42−inline QString shellAppDirectory() {
44+inline QString qmlDirectory() {
4345 if (isRunningInstalled()) {
4446 return QString("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
4547 } else {
46− return QString("@CMAKE_SOURCE_DIR@/");
48+ return QString("@CMAKE_SOURCE_DIR@/qml/");
4749 }
4850}
4951
@@ -77,7 +79,7 @@ inline QStringList shellDataDirs() {
7779 }
7880 else {
7981 // append so by default we use xdg files.
80− dirs.append(shellAppDirectory());
82+ dirs.append(qmlDirectory());
8183 }
8284 return dirs;
8385}
@@ -86,4 +88,41 @@ inline QString sourceDirectory() {
8688 return QString("@CMAKE_SOURCE_DIR@/");
8789}
8890
91+inline void prependImportPaths(QQmlEngine *engine, const QStringList &paths)
92+{
93+ QStringList importPathList = engine->importPathList();
94+ for (int i = paths.count() -1; i >= 0; i--) {
95+ // don't duplicate
96+ const QString& path = paths[i];
97+ QStringList::iterator iter = qFind(importPathList.begin(), importPathList.end(), path);
98+ if (iter == importPathList.end()) {
99+ engine->addImportPath(path);
100+ }
101+ }
102+}
103+
104+/* When you append and import path to the list of import paths it will be the *last*
105+ place where Qt will search for QML modules.
106+ The usual QQmlEngine::addImportPath() actually prepends the given path.*/
107+inline void appendImportPaths(QQmlEngine *engine, const QStringList &paths)
108+{
109+ QStringList importPathList = engine->importPathList();
110+ Q_FOREACH(const QString& path, paths) {
111+ // don't duplicate
112+ QStringList::iterator iter = qFind(importPathList.begin(), importPathList.end(), path);
113+ if (iter == importPathList.end()) {
114+ importPathList.append(path);
115+ }
116+ }
117+ engine->setImportPathList(importPathList);
118+}
119+
120+inline void resolveIconTheme() {
121+ const char *ubuntuIconTheme = getenv("UBUNTU_ICON_THEME");
122+ if (ubuntuIconTheme == NULL) {
123+ ubuntuIconTheme = "ubuntu-mobile";
124+ }
125+ QIcon::setThemeName(ubuntuIconTheme);
126+}
127+
89128#endif
plugins/CMakeLists.txt+1−1
@@ -1,7 +1,7 @@
11add_subdirectory(AccountsService)
22add_subdirectory(HudClient)
33add_subdirectory(LightDM)
4−add_subdirectory(ListViewWithPageHeader)
4+add_subdirectory(DashViews)
55add_subdirectory(Powerd)
66add_subdirectory(SessionBroadcast)
77add_subdirectory(Ubuntu)
plugins/ListViewWithPageHeader/CMakeLists.txt → plugins/DashViews/CMakeLists.txtrenamed+6−5
@@ -24,19 +24,20 @@ remove_definitions(-DQT_NO_KEYWORDS)
2424set(QMLPLUGIN_SRC
2525 plugin.cpp
2626 listviewwithpageheader.cpp
27+ verticaljournal.cpp
2728 )
2829
29−add_library(ListViewWithPageHeader-qml MODULE
30+add_library(DashViews-qml MODULE
3031 ${QMLPLUGIN_SRC}
3132 )
3233
33−target_link_libraries(ListViewWithPageHeader-qml
34+target_link_libraries(DashViews-qml
3435 ${Qt5Gui_LIBRARIES}
3536 ${Qt5Quick_LIBRARIES}
3637 )
3738
38−qt5_use_modules(ListViewWithPageHeader-qml Qml Quick)
39+qt5_use_modules(DashViews-qml Qml Quick)
3940
4041# export the qmldir qmltypes and plugin files
41−export_qmlfiles(ListViewWithPageHeader ListViewWithPageHeader)
42−export_qmlplugin(ListViewWithPageHeader 0.1 ListViewWithPageHeader TARGETS ListViewWithPageHeader-qml)
42+export_qmlfiles(DashViews DashViews)
43+export_qmlplugin(DashViews 0.1 DashViews TARGETS DashViews-qml)
plugins/ListViewWithPageHeader/listviewwithpageheader.cpp → plugins/DashViews/listviewwithpageheader.cpprenamed

The content is the same.

plugins/ListViewWithPageHeader/listviewwithpageheader.h → plugins/DashViews/listviewwithpageheader.hrenamed

The content is the same.

plugins/ListViewWithPageHeader/plugin.cpp → plugins/DashViews/plugin.cpprenamed+4−2
@@ -18,12 +18,14 @@
1818#include "plugin.h"
1919
2020#include "listviewwithpageheader.h"
21+#include "verticaljournal.h"
2122
2223#include <QAbstractItemModel>
2324
24−void ListViewWithPageHeaderPlugin::registerTypes(const char *uri)
25+void DashViewsPlugin::registerTypes(const char *uri)
2526{
26− Q_ASSERT(uri == QLatin1String("ListViewWithPageHeader"));
27+ Q_ASSERT(uri == QLatin1String("DashViews"));
2728 qmlRegisterType<QAbstractItemModel>();
2829 qmlRegisterType<ListViewWithPageHeader>(uri, 0, 1, "ListViewWithPageHeader");
30+ qmlRegisterType<VerticalJournal>(uri, 0, 1, "VerticalJournal");
2931}
plugins/ListViewWithPageHeader/plugin.h → plugins/DashViews/plugin.hrenamed+3−3
@@ -15,13 +15,13 @@
1515 *
1616 */
1717
18−#ifndef LISTVIEWWITHPAGEHEADER_PLUGIN_H
19−#define LISTVIEWWITHPAGEHEADER_PLUGIN_H
18+#ifndef DASHVIEWS_PLUGIN_H
19+#define DASHVIEWS_PLUGIN_H
2020
2121#include <QtQml/QQmlEngine>
2222#include <QtQml/QQmlExtensionPlugin>
2323
24−class ListViewWithPageHeaderPlugin : public QQmlExtensionPlugin
24+class DashViewsPlugin : public QQmlExtensionPlugin
2525{
2626 Q_OBJECT
2727 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
plugins/DashViews/qmldirnew file+3
@@ -0,0 +1,3 @@
1+module DashViews
2+plugin DashViews-qml
3+typeinfo plugin.qmltypes
plugins/DashViews/verticaljournal.cppnew file+609
@@ -0,0 +1,609 @@
1+/*
2+ * Copyright (C) 2013 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+/*
18+ * The implementation is centered around m_columnVisibleItems
19+ * that holds a vector of lists. There's a list for each of the
20+ * columns the view has. In the list the items of the column are
21+ * ordered as they appear topdown in the view. m_indexColumnMap is
22+ * used when re-building the list up since given a position
23+ * in the middle of the list and the need to create the previous does
24+ * not give us enough information to know in which column we have
25+ * to position the item so that when we reach the item the view is
26+ * correctly layouted at 0 for all the columns
27+ */
28+#include "verticaljournal.h"
29+
30+#include <qqmlengine.h>
31+#pragma GCC diagnostic push
32+#pragma GCC diagnostic ignored "-pedantic"
33+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
34+#include <private/qquickvisualdatamodel_p.h>
35+#else
36+#include <private/qqmldelegatemodel_p.h>
37+#include <qqmlinfo.h>
38+#endif
39+#include <private/qquickitem_p.h>
40+#pragma GCC diagnostic pop
41+
42+static const qreal bufferRatio = 0.5;
43+
44+VerticalJournal::VerticalJournal()
45+ : m_delegateModel(nullptr)
46+ , m_asyncRequestedIndex(-1)
47+ , m_columnWidth(0)
48+ , m_columnSpacing(0)
49+ , m_rowSpacing(0)
50+ , m_delegateCreationBegin(0)
51+ , m_delegateCreationEnd(0)
52+ , m_delegateCreationBeginValid(false)
53+ , m_delegateCreationEndValid(false)
54+ , m_needsRelayout(false)
55+ , m_delegateValidated(false)
56+ , m_implicitHeightDirty(false)
57+{
58+ connect(this, SIGNAL(widthChanged()), this, SLOT(relayout()));
59+ connect(this, SIGNAL(heightChanged()), this, SLOT(onHeightChanged()));
60+}
61+
62+QAbstractItemModel *VerticalJournal::model() const
63+{
64+ return m_delegateModel ? m_delegateModel->model().value<QAbstractItemModel *>() : nullptr;
65+}
66+
67+void VerticalJournal::setModel(QAbstractItemModel *model)
68+{
69+ if (model != this->model()) {
70+ if (!m_delegateModel) {
71+ createDelegateModel();
72+ } else {
73+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
74+ disconnect(m_delegateModel, SIGNAL(modelUpdated(QQuickChangeSet,bool)), this, SLOT(onModelUpdated(QQuickChangeSet,bool)));
75+ }
76+ m_delegateModel->setModel(QVariant::fromValue<QAbstractItemModel *>(model));
77+ connect(m_delegateModel, SIGNAL(modelUpdated(QQuickChangeSet,bool)), this, SLOT(onModelUpdated(QQuickChangeSet,bool)));
78+#else
79+ disconnect(m_delegateModel, SIGNAL(modelUpdated(QQmlChangeSet,bool)), this, SLOT(onModelUpdated(QQmlChangeSet,bool)));
80+ }
81+ m_delegateModel->setModel(QVariant::fromValue<QAbstractItemModel *>(model));
82+ connect(m_delegateModel, SIGNAL(modelUpdated(QQmlChangeSet,bool)), this, SLOT(onModelUpdated(QQmlChangeSet,bool)));
83+#endif
84+
85+ cleanupExistingItems();
86+
87+ Q_EMIT modelChanged();
88+ polish();
89+ }
90+}
91+
92+QQmlComponent *VerticalJournal::delegate() const
93+{
94+ return m_delegateModel ? m_delegateModel->delegate() : nullptr;
95+}
96+
97+void VerticalJournal::setDelegate(QQmlComponent *delegate)
98+{
99+ if (delegate != this->delegate()) {
100+ if (!m_delegateModel) {
101+ createDelegateModel();
102+ }
103+
104+ cleanupExistingItems();
105+
106+ m_delegateModel->setDelegate(delegate);
107+
108+ Q_EMIT delegateChanged();
109+ m_delegateValidated = false;
110+ polish();
111+ }
112+}
113+
114+qreal VerticalJournal::columnWidth() const
115+{
116+ return m_columnWidth;
117+}
118+
119+void VerticalJournal::setColumnWidth(qreal columnWidth)
120+{
121+ if (columnWidth != m_columnWidth) {
122+ m_columnWidth = columnWidth;
123+ Q_EMIT columnWidthChanged();
124+
125+ if (isComponentComplete()) {
126+ Q_FOREACH(const auto &column, m_columnVisibleItems) {
127+ Q_FOREACH(const ViewItem &item, column) {
128+ item.m_item->setWidth(columnWidth);
129+ }
130+ }
131+ relayout();
132+ }
133+ }
134+}
135+
136+qreal VerticalJournal::columnSpacing() const
137+{
138+ return m_columnSpacing;
139+}
140+
141+void VerticalJournal::setColumnSpacing(qreal columnSpacing)
142+{
143+ if (columnSpacing != m_columnSpacing) {
144+ m_columnSpacing = columnSpacing;
145+ Q_EMIT columnSpacingChanged();
146+
147+ if (isComponentComplete()) {
148+ relayout();
149+ }
150+ }
151+}
152+
153+qreal VerticalJournal::rowSpacing() const
154+{
155+ return m_rowSpacing;
156+}
157+
158+void VerticalJournal::setRowSpacing(qreal rowSpacing)
159+{
160+ if (rowSpacing != m_rowSpacing) {
161+ m_rowSpacing = rowSpacing;
162+ Q_EMIT rowSpacingChanged();
163+
164+ if (isComponentComplete()) {
165+ relayout();
166+ }
167+ }
168+}
169+
170+qreal VerticalJournal::delegateCreationBegin() const
171+{
172+ return m_delegateCreationBegin;
173+}
174+
175+void VerticalJournal::setDelegateCreationBegin(qreal begin)
176+{
177+ m_delegateCreationBeginValid = true;
178+ if (m_delegateCreationBegin == begin)
179+ return;
180+ m_delegateCreationBegin = begin;
181+ if (isComponentComplete()) {
182+ polish();
183+ }
184+ emit delegateCreationBeginChanged();
185+}
186+
187+void VerticalJournal::resetDelegateCreationBegin()
188+{
189+ m_delegateCreationBeginValid = false;
190+ if (m_delegateCreationBegin == 0)
191+ return;
192+ m_delegateCreationBegin = 0;
193+ if (isComponentComplete()) {
194+ polish();
195+ }
196+ emit delegateCreationBeginChanged();
197+}
198+
199+qreal VerticalJournal::delegateCreationEnd() const
200+{
201+ return m_delegateCreationEnd;
202+}
203+
204+void VerticalJournal::setDelegateCreationEnd(qreal end)
205+{
206+ m_delegateCreationEndValid = true;
207+ if (m_delegateCreationEnd == end)
208+ return;
209+ m_delegateCreationEnd = end;
210+ if (isComponentComplete()) {
211+ polish();
212+ }
213+ emit delegateCreationEndChanged();
214+}
215+
216+void VerticalJournal::resetDelegateCreationEnd()
217+{
218+ m_delegateCreationEndValid = false;
219+ if (m_delegateCreationEnd == 0)
220+ return;
221+ m_delegateCreationEnd = 0;
222+ if (isComponentComplete()) {
223+ polish();
224+ }
225+ emit delegateCreationEndChanged();
226+}
227+
228+void VerticalJournal::createDelegateModel()
229+{
230+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
231+ m_delegateModel = new QQuickVisualDataModel(qmlContext(this), this);
232+ connect(m_delegateModel, SIGNAL(createdItem(int,QQuickItem*)), this, SLOT(itemCreated(int,QQuickItem*)));
233+#else
234+ m_delegateModel = new QQmlDelegateModel(qmlContext(this), this);
235+ connect(m_delegateModel, SIGNAL(createdItem(int,QObject*)), this, SLOT(itemCreated(int,QObject*)));
236+#endif
237+ if (isComponentComplete())
238+ m_delegateModel->componentComplete();
239+}
240+
241+void VerticalJournal::refill()
242+{
243+ if (!isComponentComplete()) {
244+ return;
245+ }
246+
247+ const bool delegateRangesValid = m_delegateCreationBeginValid && m_delegateCreationEndValid;
248+ const qreal from = delegateRangesValid ? m_delegateCreationBegin : 0;
249+ const qreal to = delegateRangesValid ? m_delegateCreationEnd : from + height();
250+ const qreal buffer = (to - from) * bufferRatio;
251+ const qreal bufferFrom = from - buffer;
252+ const qreal bufferTo = to + buffer;
253+
254+ bool added = addVisibleItems(from, to, false);
255+ bool removed = removeNonVisibleItems(bufferFrom, bufferTo);
256+ added |= addVisibleItems(bufferFrom, bufferTo, true);
257+
258+ if (added || removed) {
259+ m_implicitHeightDirty = true;
260+ }
261+}
262+
263+void VerticalJournal::findBottomModelIndexToAdd(int *modelIndex, qreal *yPos)
264+{
265+ *modelIndex = 0;
266+ *yPos = std::numeric_limits<qreal>::max();
267+
268+ Q_FOREACH(const auto &column, m_columnVisibleItems) {
269+ if (!column.isEmpty()) {
270+ const ViewItem &item = column.last();
271+ *yPos = qMin(*yPos, item.y() + item.height() + m_rowSpacing);
272+ *modelIndex = qMax(*modelIndex, item.m_modelIndex + 1);
273+ } else {
274+ *yPos = 0;
275+ }
276+ }
277+}
278+
279+void VerticalJournal::findTopModelIndexToAdd(int *modelIndex, qreal *yPos)
280+{
281+ *modelIndex = INT_MAX;
282+ *yPos = std::numeric_limits<qreal>::lowest();
283+ int columnToAddTo = -1;
284+
285+ // Find the topmost free column
286+ for (int i = 0; i < m_columnVisibleItems.count(); ++i) {
287+ const auto &column = m_columnVisibleItems[i];
288+ if (!column.isEmpty()) {
289+ const ViewItem &item = column.first();
290+ const auto itemTopPos = item.y() - m_rowSpacing;
291+ if (itemTopPos > *yPos) {
292+ *yPos = itemTopPos;
293+ *modelIndex = item.m_modelIndex - 1;
294+ columnToAddTo = i;
295+ }
296+ }
297+ }
298+
299+ if (*modelIndex > 0) {
300+ Q_ASSERT(m_indexColumnMap.contains(*modelIndex));
301+ while (m_indexColumnMap[*modelIndex] != columnToAddTo) {
302+ // We found out that we have to add to columnToAddTo
303+ // and thought that we had to add *modelIndex, but history tells
304+ // it is not correct, so find up from *modelIndex until we found the index
305+ // that has to end up in columnToAddTo
306+ *modelIndex = *modelIndex - 1;
307+ Q_ASSERT(m_indexColumnMap.contains(*modelIndex));
308+ }
309+ }
310+}
311+
312+bool VerticalJournal::addVisibleItems(qreal fillFrom, qreal fillTo, bool asynchronous)
313+{
314+ if (!delegate())
315+ return false;
316+
317+ if (m_delegateModel->count() == 0)
318+ return false;
319+
320+ int modelIndex;
321+ qreal yPos;
322+ findBottomModelIndexToAdd(&modelIndex, &yPos);
323+ bool changed = false;
324+ while (modelIndex < m_delegateModel->count() && yPos <= fillTo) {
325+ if (!createItem(modelIndex, asynchronous))
326+ break;
327+
328+ changed = true;
329+ findBottomModelIndexToAdd(&modelIndex, &yPos);
330+ }
331+
332+ findTopModelIndexToAdd(&modelIndex, &yPos);
333+ while (modelIndex >= 0 && yPos > fillFrom) {
334+ if (!createItem(modelIndex, asynchronous))
335+ break;
336+
337+ changed = true;
338+ findTopModelIndexToAdd(&modelIndex, &yPos);
339+ }
340+
341+ return changed;
342+}
343+
344+bool VerticalJournal::removeNonVisibleItems(qreal bufferFrom, qreal bufferTo)
345+{
346+ bool changed = false;
347+
348+ for (int i = 0; i < m_columnVisibleItems.count(); ++i) {
349+ QList<ViewItem> &column = m_columnVisibleItems[i];
350+ while (!column.isEmpty() && column.first().y() + column.first().height() < bufferFrom) {
351+ releaseItem(column.takeFirst());
352+ changed = true;
353+ }
354+
355+ while (!column.isEmpty() && column.last().y() > bufferTo) {
356+ releaseItem(column.takeLast());
357+ changed = true;
358+ }
359+ }
360+
361+ return changed;
362+}
363+
364+QQuickItem *VerticalJournal::createItem(int modelIndex, bool asynchronous)
365+{
366+ if (asynchronous && m_asyncRequestedIndex != -1)
367+ return nullptr;
368+
369+ m_asyncRequestedIndex = -1;
370+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
371+ QQuickItem *item = m_delegateModel->item(modelIndex, asynchronous);
372+#else
373+ QObject* object = m_delegateModel->object(modelIndex, asynchronous);
374+ QQuickItem *item = qmlobject_cast<QQuickItem*>(object);
375+#endif
376+ if (!item) {
377+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
378+ m_asyncRequestedIndex = modelIndex;
379+#else
380+ if (object) {
381+ m_delegateModel->release(object);
382+ if (!m_delegateValidated) {
383+ m_delegateValidated = true;
384+ QObject* delegateObj = delegate();
385+ qmlInfo(delegateObj ? delegateObj : this) << "Delegate must be of Item type";
386+ }
387+ } else {
388+ m_asyncRequestedIndex = modelIndex;
389+ }
390+#endif
391+ return nullptr;
392+ } else {
393+ if (item->width() != m_columnWidth) {
394+ qWarning() << "Item" << modelIndex << "width is not the one that the columnWidth mandates, resetting it";
395+ item->setWidth(m_columnWidth);
396+ }
397+ positionItem(modelIndex, item);
398+ return item;
399+ }
400+}
401+
402+void VerticalJournal::positionItem(int modelIndex, QQuickItem *item)
403+{
404+ // Check if we add it to the bottom of existing column items
405+ const QList<ViewItem> &firstColumn = m_columnVisibleItems[0];
406+ qreal columnToAddY = !firstColumn.isEmpty() ? firstColumn.last().y() + firstColumn.last().height() : -m_rowSpacing;
407+ int columnToAddTo = 0;
408+ for (int i = 1; i < m_columnVisibleItems.count(); ++i) {
409+ const QList<ViewItem> &column = m_columnVisibleItems[i];
410+ const qreal iY = !column.isEmpty() ? column.last().y() + column.last().height() : -m_rowSpacing;
411+ if (iY < columnToAddY) {
412+ columnToAddTo = i;
413+ columnToAddY = iY;
414+ }
415+ }
416+
417+ const QList<ViewItem> &columnToAdd = m_columnVisibleItems[columnToAddTo];
418+ if (columnToAdd.isEmpty() || columnToAdd.last().m_modelIndex < modelIndex) {
419+ item->setX(columnToAddTo * (m_columnWidth + m_columnSpacing));
420+ item->setY(columnToAddY + m_rowSpacing);
421+
422+ m_columnVisibleItems[columnToAddTo] << ViewItem(item, modelIndex);
423+ m_indexColumnMap[modelIndex] = columnToAddTo;
424+ } else {
425+ Q_ASSERT(m_indexColumnMap.contains(modelIndex));
426+ columnToAddTo = m_indexColumnMap[modelIndex];
427+ columnToAddY = m_columnVisibleItems[columnToAddTo].first().y();
428+
429+ item->setX(columnToAddTo * (m_columnWidth + m_columnSpacing));
430+ item->setY(columnToAddY - m_rowSpacing - item->height());
431+
432+ m_columnVisibleItems[columnToAddTo].prepend(ViewItem(item, modelIndex));
433+ }
434+}
435+
436+void VerticalJournal::cleanupExistingItems()
437+{
438+ // Cleanup the existing items
439+ for (int i = 0; i < m_columnVisibleItems.count(); ++i) {
440+ QList<ViewItem> &column = m_columnVisibleItems[i];
441+ Q_FOREACH(const ViewItem &item, column)
442+ releaseItem(item);
443+ column.clear();
444+ }
445+ m_indexColumnMap.clear();
446+}
447+
448+void VerticalJournal::releaseItem(const ViewItem &item)
449+{
450+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
451+ QQuickVisualModel::ReleaseFlags flags = m_delegateModel->release(item.m_item);
452+ if (flags & QQuickVisualModel::Destroyed) {
453+#else
454+ QQmlDelegateModel::ReleaseFlags flags = m_delegateModel->release(item.m_item);
455+ if (flags & QQmlDelegateModel::Destroyed) {
456+#endif
457+ item.m_item->setParentItem(nullptr);
458+ }
459+}
460+
461+void VerticalJournal::calculateImplicitHeight()
462+{
463+ m_implicitHeightDirty = false;
464+
465+ int lastModelIndex = -1;
466+ qreal bottomMostY = 0;
467+ Q_FOREACH(const auto &column, m_columnVisibleItems) {
468+ if (!column.isEmpty()) {
469+ const ViewItem &item = column.last();
470+ lastModelIndex = qMax(lastModelIndex, item.m_modelIndex);
471+ bottomMostY = qMax(bottomMostY, item.y() + item.height());
472+ }
473+ }
474+ if (lastModelIndex >= 0) {
475+ const double averageHeight = bottomMostY / (lastModelIndex + 1);
476+ setImplicitHeight(bottomMostY + averageHeight * (model()->rowCount() - lastModelIndex - 1));
477+ } else {
478+ setImplicitHeight(0);
479+ }
480+}
481+
482+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
483+void VerticalJournal::itemCreated(int modelIndex, QQuickItem *item)
484+{
485+#else
486+void VerticalJournal::itemCreated(int modelIndex, QObject *object)
487+{
488+ QQuickItem *item = qmlobject_cast<QQuickItem*>(object);
489+ if (!item) {
490+ qWarning() << "VerticalJournal::itemCreated got a non item for index" << modelIndex;
491+ return;
492+ }
493+#endif
494+ item->setParentItem(this);
495+ if (modelIndex == m_asyncRequestedIndex) {
496+ createItem(modelIndex, false);
497+ m_implicitHeightDirty = true;
498+ polish();
499+ }
500+}
501+
502+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
503+void VerticalJournal::onModelUpdated(const QQuickChangeSet &changeSet, bool reset)
504+#else
505+void VerticalJournal::onModelUpdated(const QQmlChangeSet &changeSet, bool reset)
506+#endif
507+{
508+ if (reset) {
509+ cleanupExistingItems();
510+ } else {
511+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
512+ Q_FOREACH(const QQuickChangeSet::Remove &remove, changeSet.removes()) {
513+#else
514+ Q_FOREACH(const QQmlChangeSet::Remove &remove, changeSet.removes()) {
515+#endif
516+ for (int i = remove.count - 1; i >= 0; --i) {
517+ const int indexToRemove = remove.index + i;
518+ // Since we only support removing from the end, indexToRemove
519+ // must refer to the last item of one of the columns.
520+ bool found = false;
521+ for (int i = 0; !found && i < m_columnVisibleItems.count(); ++i) {
522+ QList<ViewItem> &column = m_columnVisibleItems[i];
523+ if (!column.isEmpty() && column.last().m_modelIndex == indexToRemove) {
524+ releaseItem(column.takeLast());
525+ found = true;
526+ }
527+ }
528+ Q_ASSERT(found);
529+ }
530+ }
531+ }
532+ polish();
533+}
534+
535+
536+void VerticalJournal::relayout()
537+{
538+ m_needsRelayout = true;
539+ polish();
540+}
541+
542+void VerticalJournal::onHeightChanged()
543+{
544+ polish();
545+}
546+
547+void VerticalJournal::updatePolish()
548+{
549+ if (!model())
550+ return;
551+
552+ if (m_needsRelayout) {
553+ m_implicitHeightDirty = true;
554+
555+ QList<ViewItem> allItems;
556+ Q_FOREACH(const auto &column, m_columnVisibleItems)
557+ allItems << column;
558+
559+ qSort(allItems);
560+
561+ const int nColumns = qMax(1., floor((double)(width() + m_columnSpacing) / (m_columnWidth + m_columnSpacing)));
562+ m_columnVisibleItems.resize(nColumns);
563+ m_indexColumnMap.clear();
564+ for (int i = 0; i < nColumns; ++i)
565+ m_columnVisibleItems[i].clear();
566+
567+ // If the first of allItems doesn't contain index 0 we need to drop them
568+ // all since we can't consistently relayout without the first item being there
569+
570+ if (!allItems.isEmpty()) {
571+ if (allItems.first().m_modelIndex == 0) {
572+ Q_FOREACH(const ViewItem &item, allItems)
573+ positionItem(item.m_modelIndex, item.m_item);
574+ } else {
575+ Q_FOREACH(const ViewItem &item, allItems)
576+ releaseItem(item);
577+ }
578+ }
579+
580+ m_needsRelayout = false;
581+ }
582+
583+ refill();
584+
585+ const bool delegateRangesValid = m_delegateCreationBeginValid && m_delegateCreationEndValid;
586+ const qreal from = delegateRangesValid ? m_delegateCreationBegin : 0;
587+ const qreal to = delegateRangesValid ? m_delegateCreationEnd : from + height();
588+ Q_FOREACH(const auto &column, m_columnVisibleItems) {
589+ Q_FOREACH(const ViewItem &item, column) {
590+ QQuickItemPrivate::get(item.m_item)->setCulled(item.y() + item.height() <= from || item.y() >= to);
591+ }
592+ }
593+
594+ if (m_implicitHeightDirty) {
595+ calculateImplicitHeight();
596+ }
597+}
598+
599+void VerticalJournal::componentComplete()
600+{
601+ if (m_delegateModel)
602+ m_delegateModel->componentComplete();
603+
604+ QQuickItem::componentComplete();
605+
606+ m_needsRelayout = true;
607+
608+ polish();
609+}
plugins/DashViews/verticaljournal.hnew file+182
@@ -0,0 +1,182 @@
1+/*
2+ * Copyright (C) 2013 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 VERTICALJOURNAL_H
18+#define VERTICALJOURNAL_H
19+
20+#include <QQuickItem>
21+
22+class QAbstractItemModel;
23+class QQmlComponent;
24+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
25+class QQuickChangeSet;
26+class QQuickVisualDataModel;
27+#else
28+class QQmlChangeSet;
29+class QQmlDelegateModel;
30+#endif
31+
32+ /** A vertical journal is a view that creates delegates
33+ * based on a model and layouts them in columns following
34+ * a top-left most position rule.
35+ *
36+ * The number of columns is calculated using the width of
37+ * the view itself, the columnWidth (i.e. the width of each individual delegate)
38+ * and the columnSpacing between columns.
39+ *
40+ * All delegates are forced to columnWidth if they don't have it.
41+ *
42+ * The first nColumns items are layouted at row 0 from column 0
43+ * to column nColumns-1 in order. After that every new item
44+ * is positioned in the column which provides the free topmost
45+ * position as possible. If more than one column tie in providing
46+ * the topmost free position the leftmost column will be used.
47+ *
48+ * Example:
49+ *
50+ * +-----+ +-----+ +-----+
51+ * | | | 2 | | |
52+ * | | | | | |
53+ * | 1 | +-----+ | 3 |
54+ * | | +-----+ | |
55+ * | | | | +-----+
56+ * +-----+ | 4 | +-----+
57+ * +-----+ | | | 5 |
58+ * | 6 | +-----+ | |
59+ * | | +-----+
60+ * +-----+
61+ *
62+ */
63+ class VerticalJournal : public QQuickItem
64+{
65+ Q_OBJECT
66+
67+ Q_PROPERTY(QAbstractItemModel *model READ model WRITE setModel NOTIFY modelChanged)
68+ Q_PROPERTY(QQmlComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged)
69+ Q_PROPERTY(qreal columnWidth READ columnWidth WRITE setColumnWidth NOTIFY columnWidthChanged)
70+ Q_PROPERTY(qreal columnSpacing READ columnSpacing WRITE setColumnSpacing NOTIFY columnSpacingChanged)
71+ Q_PROPERTY(qreal rowSpacing READ rowSpacing WRITE setRowSpacing NOTIFY rowSpacingChanged)
72+ Q_PROPERTY(qreal delegateCreationBegin READ delegateCreationBegin
73+ WRITE setDelegateCreationBegin
74+ NOTIFY delegateCreationBeginChanged
75+ RESET resetDelegateCreationBegin)
76+ Q_PROPERTY(qreal delegateCreationEnd READ delegateCreationEnd
77+ WRITE setDelegateCreationEnd
78+ NOTIFY delegateCreationEndChanged
79+ RESET resetDelegateCreationEnd)
80+
81+friend class VerticalJournalTest;
82+
83+public:
84+ VerticalJournal();
85+
86+ QAbstractItemModel *model() const;
87+ void setModel(QAbstractItemModel *model);
88+
89+ QQmlComponent *delegate() const;
90+ void setDelegate(QQmlComponent *delegate);
91+
92+ qreal columnWidth() const;
93+ void setColumnWidth(qreal columnWidth);
94+
95+ qreal columnSpacing() const;
96+ void setColumnSpacing(qreal columnSpacing);
97+
98+ qreal rowSpacing() const;
99+ void setRowSpacing(qreal rowSpacing);
100+
101+ qreal delegateCreationBegin() const;
102+ void setDelegateCreationBegin(qreal);
103+ void resetDelegateCreationBegin();
104+
105+ qreal delegateCreationEnd() const;
106+ void setDelegateCreationEnd(qreal);
107+ void resetDelegateCreationEnd();
108+
109+Q_SIGNALS:
110+ void modelChanged();
111+ void delegateChanged();
112+ void columnWidthChanged();
113+ void columnSpacingChanged();
114+ void rowSpacingChanged();
115+ void delegateCreationBeginChanged();
116+ void delegateCreationEndChanged();
117+
118+protected:
119+ void updatePolish();
120+ void componentComplete();
121+
122+private Q_SLOTS:
123+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
124+ void itemCreated(int modelIndex, QQuickItem *item);
125+ void onModelUpdated(const QQuickChangeSet &changeSet, bool reset);
126+#else
127+ void itemCreated(int modelIndex, QObject *object);
128+ void onModelUpdated(const QQmlChangeSet &changeSet, bool reset);
129+#endif
130+ void relayout();
131+ void onHeightChanged();
132+
133+private:
134+ class ViewItem
135+ {
136+ public:
137+ ViewItem(QQuickItem *item, int modelIndex) : m_item(item), m_modelIndex(modelIndex) {}
138+ qreal x() const { return m_item->x(); }
139+ qreal y() const { return m_item->y(); }
140+ qreal height() const { return m_item->height(); }
141+ bool operator<(const ViewItem &v) const { return m_modelIndex < v.m_modelIndex; }
142+
143+ QQuickItem *m_item;
144+ int m_modelIndex;
145+ };
146+
147+ void createDelegateModel();
148+ void refill();
149+ void findBottomModelIndexToAdd(int *modelIndex, qreal *yPos);
150+ void findTopModelIndexToAdd(int *modelIndex, qreal *yPos);
151+ bool addVisibleItems(qreal fillFrom, qreal fillTo, bool asynchronous);
152+ bool removeNonVisibleItems(qreal bufferFrom, qreal bufferTo);
153+ QQuickItem *createItem(int modelIndex, bool asynchronous);
154+ void positionItem(int modelIndex, QQuickItem *item);
155+ void cleanupExistingItems();
156+ void releaseItem(const ViewItem &item);
157+ void calculateImplicitHeight();
158+
159+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
160+ QQuickVisualDataModel *m_delegateModel;
161+#else
162+ QQmlDelegateModel *m_delegateModel;
163+#endif
164+
165+ // Index we are waiting because we requested it asynchronously
166+ int m_asyncRequestedIndex;
167+
168+ QVector<QList<ViewItem>> m_columnVisibleItems;
169+ QHash<int, int> m_indexColumnMap;
170+ int m_columnWidth;
171+ int m_columnSpacing;
172+ int m_rowSpacing;
173+ qreal m_delegateCreationBegin;
174+ qreal m_delegateCreationEnd;
175+ bool m_delegateCreationBeginValid;
176+ bool m_delegateCreationEndValid;
177+ bool m_needsRelayout;
178+ bool m_delegateValidated;
179+ bool m_implicitHeightDirty;
180+};
181+
182+#endif
plugins/HudClient/hudclient.cpp+1−16
@@ -243,28 +243,13 @@ void HudClient::modelReady(bool needDisconnect)
243243 }
244244}
245245
246−static QVariant QVariantFromGVariant(GVariant *value)
247−{
248− // Only handle the cases we care for now
249− switch (g_variant_classify(value)) {
250− case G_VARIANT_CLASS_BOOLEAN:
251− return QVariant((bool) g_variant_get_boolean(value));
252− case G_VARIANT_CLASS_DOUBLE:
253− return QVariant(g_variant_get_double(value));
254− case G_VARIANT_CLASS_STRING:
255− return QVariant(QString::fromUtf8(g_variant_get_string(value, NULL)));
256− default:
257− return QVariant();
258− }
259−}
260−
261246static void addAttribute(QVariantMap &properties, GMenuModel *menuModel, int item, const char *attribute) {
262247 GVariant *v = g_menu_model_get_item_attribute_value(menuModel, item, attribute, NULL);
263248
264249 if (v == NULL)
265250 return;
266251
267− properties.insert(attribute, QVariantFromGVariant(v));
252+ properties.insert(attribute, DeeListModel::VariantForData(v));
268253 g_variant_unref(v);
269254}
270255
plugins/LightDM/CMakeLists.txt+3−1
@@ -10,6 +10,7 @@ pkg_check_modules(LIBUSERMETRICSOUTPUT REQUIRED libusermetricsoutput-1)
1010include_directories(
1111 ${CMAKE_CURRENT_SOURCE_DIR}
1212 ${CMAKE_CURRENT_BINARY_DIR}
13+ ${CMAKE_SOURCE_DIR}/plugins/Utils
1314 ${CMAKE_SOURCE_DIR}/tests/mocks/LightDM
1415 #${LIBLIGHTDM_INCLUDE_DIRS}
1516 ${LIBUSERMETRICSOUTPUT_INCLUDE_DIRS}
@@ -17,6 +18,7 @@ include_directories(
1718
1819set(QMLPLUGIN_SRC
1920 ../Utils/qsortfilterproxymodelqml.cpp # FIXME evaluate a more generic approach for using other plugins
21+ DBusGreeterList.cpp
2022 Greeter.cpp
2123 plugin.cpp
2224 UsersModel.cpp
@@ -33,7 +35,7 @@ target_link_libraries(LightDM-qml
3335 ${LIBUSERMETRICSOUTPUT_LDFLAGS}
3436 )
3537
36−qt5_use_modules(LightDM-qml Gui Qml)
38+qt5_use_modules(LightDM-qml DBus Gui Qml)
3739
3840# export the qmldir qmltypes and plugin files
3941export_qmlfiles(LightDM LightDM)
plugins/LightDM/DBusGreeterList.cppnew file+77
@@ -0,0 +1,77 @@
1+/*
2+ * Copyright (C) 2013 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 "DBusGreeterList.h"
18+#include "Greeter.h"
19+
20+#include <QDBusMessage>
21+#include <QStringList>
22+
23+DBusGreeterList::DBusGreeterList(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(authenticationUserChanged(const QString &)), this, SLOT(authenticationUserChangedHandler(const QString &)));
30+ connect(m_greeter, SIGNAL(promptlessChanged()), this, SLOT(promptlessChangedHandler()));
31+}
32+
33+QString DBusGreeterList::GetActiveEntry() const
34+{
35+ return m_greeter->authenticationUser();
36+}
37+
38+void DBusGreeterList::SetActiveEntry(const QString &entry)
39+{
40+ Q_EMIT m_greeter->requestAuthenticationUser(entry);
41+}
42+
43+bool DBusGreeterList::entryIsLocked() const
44+{
45+ return !m_greeter->promptless();
46+}
47+
48+void DBusGreeterList::authenticationUserChangedHandler(const QString &user)
49+{
50+ notifyPropertyChanged("ActiveEntry", user);
51+ Q_EMIT EntrySelected(user);
52+}
53+
54+void DBusGreeterList::promptlessChangedHandler()
55+{
56+ notifyPropertyChanged("EntryIsLocked", entryIsLocked());
57+ Q_EMIT entryIsLockedChanged();
58+}
59+
60+// Manually emit a PropertiesChanged signal over DBus, because QtDBus
61+// doesn't do it for us on Q_PROPERTIES, oddly enough.
62+void DBusGreeterList::notifyPropertyChanged(const QString& propertyName, const QVariant &value)
63+{
64+ QDBusMessage message;
65+ QVariantMap changedProps;
66+
67+ changedProps.insert(propertyName, value);
68+
69+ message = QDBusMessage::createSignal(m_path,
70+ "org.freedesktop.DBus.Properties",
71+ "PropertiesChanged");
72+ message << "com.canonical.UnityGreeter.List";
73+ message << changedProps;
74+ message << QStringList();
75+
76+ m_connection.send(message);
77+}
plugins/LightDM/DBusGreeterList.hnew file+61
@@ -0,0 +1,61 @@
1+/*
2+ * Copyright (C) 2013 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_DBUSGREETERLIST_H
18+#define UNITY_DBUSGREETERLIST_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 DBusGreeterList : public QObject
30+{
31+ Q_OBJECT
32+ Q_CLASSINFO("D-Bus Interface", "com.canonical.UnityGreeter.List")
33+
34+ Q_PROPERTY(QString ActiveEntry READ GetActiveEntry WRITE SetActiveEntry NOTIFY EntrySelected) // since 14.04
35+ Q_PROPERTY(bool EntryIsLocked READ entryIsLocked NOTIFY entryIsLockedChanged) // since 14.04
36+
37+public:
38+ explicit DBusGreeterList(Greeter *greeter, const QDBusConnection &connection, const QString &path);
39+
40+ Q_SCRIPTABLE void SetActiveEntry(const QString &entry); // since 13.04
41+ Q_SCRIPTABLE QString GetActiveEntry() const; // since 13.10
42+
43+ bool entryIsLocked() const;
44+
45+Q_SIGNALS:
46+ Q_SCRIPTABLE void EntrySelected(const QString &entry); // since 13.10
47+
48+ void entryIsLockedChanged();
49+
50+private Q_SLOTS:
51+ void authenticationUserChangedHandler(const QString &user);
52+ void promptlessChangedHandler();
53+ void notifyPropertyChanged(const QString &propertyName, const QVariant &value);
54+
55+private:
56+ Greeter *m_greeter;
57+ QDBusConnection m_connection;
58+ QString m_path;
59+};
60+
61+#endif
plugins/LightDM/Greeter.cpp+1
@@ -88,6 +88,7 @@ void Greeter::authenticate(const QString &username)
8888 }
8989
9090 d->m_greeter->authenticate(username);
91+ Q_EMIT authenticationUserChanged(username);
9192}
9293
9394void Greeter::respond(const QString &response)
plugins/LightDM/Greeter.h+6−1
@@ -35,7 +35,7 @@ class Greeter : public QObject
3535 Q_OBJECT
3636
3737 Q_PROPERTY(bool authenticated READ isAuthenticated)
38− Q_PROPERTY(QString authenticationUser READ authenticationUser)
38+ Q_PROPERTY(QString authenticationUser READ authenticationUser NOTIFY authenticationUserChanged)
3939 Q_PROPERTY(bool promptless READ promptless NOTIFY promptlessChanged)
4040
4141public:
@@ -54,8 +54,13 @@ Q_SIGNALS:
5454 void showMessage(const QString &text, bool isError);
5555 void showPrompt(const QString &text, bool isSecret);
5656 void authenticationComplete();
57+ void authenticationUserChanged(const QString &user);
5758 void promptlessChanged();
5859
60+ // This signal is emitted by external agents like indicators, and the UI
61+ // should switch to this user if possible.
62+ void requestAuthenticationUser(const QString &user);
63+
5964private:
6065 GreeterPrivate * const d_ptr;
6166
plugins/LightDM/UsersModel.h+1−1
@@ -23,7 +23,7 @@
2323#ifndef UNITY_USERSMODEL_H
2424#define UNITY_USERSMODEL_H
2525
26−#include "plugins/Utils/qsortfilterproxymodelqml.h"
26+#include <qsortfilterproxymodelqml.h>
2727#include <QtCore/QObject>
2828
2929class UsersModel : public QSortFilterProxyModelQML
plugins/LightDM/plugin.cpp+14−2
@@ -18,20 +18,32 @@
1818 */
1919
2020#include "plugin.h"
21+#include "DBusGreeterList.h"
2122#include "Greeter.h"
2223#include "UsersModel.h"
2324#include <libusermetricsoutput/ColorTheme.h>
2425#include <libusermetricsoutput/UserMetrics.h>
2526#include <QLightDM/UsersModel>
2627
27−#include <QtCore/QAbstractItemModel>
28+#include <QAbstractItemModel>
29+#include <QDBusConnection>
2830#include <QtQml/qqml.h>
2931
32+static const char* GREETER_LIST_DBUS_PATH = "/list";
33+static const char* GREETER_DBUS_SERVICE = "com.canonical.UnityGreeter";
34+
3035static QObject *greeter_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
3136{
3237 Q_UNUSED(engine)
3338 Q_UNUSED(scriptEngine)
34− return new Greeter();
39+
40+ Greeter *greeter = new Greeter();
41+ QDBusConnection connection = QDBusConnection::sessionBus();
42+ DBusGreeterList *list = new DBusGreeterList(greeter, connection, GREETER_LIST_DBUS_PATH);
43+ connection.registerObject(GREETER_LIST_DBUS_PATH, list, QDBusConnection::ExportScriptableContents);
44+ connection.registerService(GREETER_DBUS_SERVICE);
45+
46+ return greeter;
3547}
3648
3749static QObject *users_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
plugins/ListViewWithPageHeader/qmldirdeleted−3
@@ -1,3 +0,0 @@
1−module ListViewWithPageHeader
2−plugin ListViewWithPageHeader-qml
3−typeinfo plugin.qmltypes
plugins/Ubuntu/Gestures/CMakeLists.txt+1
@@ -6,6 +6,7 @@ set(UbuntuGestureQml_SOURCES
66 AxisVelocityCalculator.cpp
77 Direction.cpp
88 DirectionalDragArea.cpp
9+ PressedOutsideNotifier.cpp
910 TimeSource.cpp
1011)
1112
plugins/Ubuntu/Gestures/PressedOutsideNotifier.cppnew file+119
@@ -0,0 +1,119 @@
1+/*
2+ * Copyright (C) 2013 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 "PressedOutsideNotifier.h"
18+
19+#include <QMouseEvent>
20+
21+PressedOutsideNotifier::PressedOutsideNotifier(QQuickItem *parent)
22+ : QQuickItem(parent)
23+{
24+ connect(this, &QQuickItem::enabledChanged,
25+ this, &PressedOutsideNotifier::setupOrTearDownEventFiltering);
26+
27+ m_signalEmissionTimer.setSingleShot(true);
28+ m_signalEmissionTimer.setInterval(0); // times out on the next iteration of the event loop
29+ connect(&m_signalEmissionTimer, &QTimer::timeout,
30+ this, &PressedOutsideNotifier::pressedOutside);
31+}
32+
33+bool PressedOutsideNotifier::eventFilter(QObject *watched, QEvent *event)
34+{
35+ Q_UNUSED(watched);
36+ Q_ASSERT(watched == m_filteredWindow);
37+
38+ // We are already going to emit pressedOutside() anyway, thus no need
39+ // for new checks.
40+ // This case takes place when a QTouchEvent comes in and isn't handled by any item,
41+ // causing QQuickWindow to synthesize a QMouseEvent out of it, which would
42+ // be filtered by us as well and count as a second press, which is wrong.
43+ if (m_signalEmissionTimer.isActive()) {
44+ return false;
45+ }
46+
47+ switch (event->type()) {
48+ case QEvent::MouseButtonPress: {
49+ QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
50+ QPointF p = mapFromScene(mouseEvent->windowPos());
51+ if (!contains(p)) {
52+ m_signalEmissionTimer.start();
53+ }
54+ break;
55+ }
56+ case QEvent::TouchBegin:
57+ processFilteredTouchBegin(static_cast<QTouchEvent*>(event));
58+ default:
59+ break;
60+ }
61+
62+ // let the event be handled further
63+ return false;
64+}
65+
66+void PressedOutsideNotifier::itemChange(ItemChange change, const ItemChangeData &value)
67+{
68+ if (change == QQuickItem::ItemSceneChange) {
69+ setupOrTearDownEventFiltering();
70+ }
71+
72+ QQuickItem::itemChange(change, value);
73+}
74+
75+void PressedOutsideNotifier::setupOrTearDownEventFiltering()
76+{
77+ if (isEnabled() && window()) {
78+ setupEventFiltering();
79+ } else if (m_filteredWindow) {
80+ tearDownEventFiltering();
81+ }
82+}
83+
84+void PressedOutsideNotifier::setupEventFiltering()
85+{
86+ QQuickWindow *currentWindow = window();
87+ Q_ASSERT(currentWindow != nullptr);
88+
89+ if (currentWindow == m_filteredWindow)
90+ return;
91+
92+ if (m_filteredWindow) {
93+ m_filteredWindow->removeEventFilter(this);
94+ }
95+
96+ currentWindow->installEventFilter(this);
97+ m_filteredWindow = currentWindow;
98+}
99+
100+void PressedOutsideNotifier::tearDownEventFiltering()
101+{
102+ m_filteredWindow->removeEventFilter(this);
103+ m_filteredWindow.clear();
104+}
105+
106+void PressedOutsideNotifier::processFilteredTouchBegin(QTouchEvent *event)
107+{
108+ const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
109+ for (int i = 0; i < touchPoints.count(); ++i) {
110+ const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
111+ if (touchPoint.state() == Qt::TouchPointPressed) {
112+ QPointF p = mapFromScene(touchPoint.pos());
113+ if (!contains(p)) {
114+ m_signalEmissionTimer.start();
115+ return;
116+ }
117+ }
118+ }
119+}
plugins/Ubuntu/Gestures/PressedOutsideNotifier.hnew file+62
@@ -0,0 +1,62 @@
1+/*
2+ * Copyright (C) 2013 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 PRESSED_OUTSIDE_NOTIFIER_H
18+#define PRESSED_OUTSIDE_NOTIFIER_H
19+
20+#include <QQuickItem>
21+
22+#include <QQuickWindow>
23+#include <QPointer>
24+#include <QTimer>
25+
26+#include "UbuntuGesturesGlobal.h"
27+
28+/*
29+ Notifies when a point, mouse or touch, is pressed outside its area.
30+
31+ Only enable it while needed.
32+ */
33+class UBUNTUGESTURES_EXPORT PressedOutsideNotifier : public QQuickItem {
34+ Q_OBJECT
35+
36+public:
37+ PressedOutsideNotifier(QQuickItem * parent = nullptr);
38+
39+ // From QObject
40+ bool eventFilter(QObject *watched, QEvent *event) override;
41+
42+Q_SIGNALS:
43+ void pressedOutside();
44+
45+protected:
46+ void itemChange(ItemChange change, const ItemChangeData &value) override;
47+
48+private Q_SLOTS:
49+ void setupOrTearDownEventFiltering();
50+
51+private:
52+ void setupEventFiltering();
53+ void tearDownEventFiltering();
54+ void processFilteredTouchBegin(QTouchEvent *event);
55+
56+ QPointer<QQuickWindow> m_filteredWindow;
57+
58+ // Emits pressedOutside() signal on timeout
59+ QTimer m_signalEmissionTimer;
60+};
61+
62+#endif // PRESSED_OUTSIDE_NOTIFIER_H
plugins/Ubuntu/Gestures/plugin.cpp+2
@@ -18,6 +18,7 @@
1818#include "AxisVelocityCalculator.h"
1919#include "Direction.h"
2020#include "DirectionalDragArea.h"
21+#include "PressedOutsideNotifier.h"
2122
2223#include <qqml.h>
2324
@@ -32,4 +33,5 @@ void UbuntuGestureQmlPlugin::registerTypes(const char *uri)
3233 qmlRegisterSingletonType<Direction>(uri, 0, 1, "Direction", directionSingleton);
3334 qmlRegisterType<DirectionalDragArea>(uri, 0, 1, "DirectionalDragArea");
3435 qmlRegisterType<AxisVelocityCalculator>(uri, 0, 1, "AxisVelocityCalculator");
36+ qmlRegisterType<PressedOutsideNotifier>(uri, 0, 1, "PressedOutsideNotifier");
3537}
plugins/Unity/Indicators/CMakeLists.txt−1
@@ -36,7 +36,6 @@ set(IndicatorsQML_SOURCES
3636 unitymenumodelcache.cpp
3737 unitymenumodelstack.cpp
3838 visibleindicatorsmodel.cpp
39− timeformatter.cpp
4039)
4140add_definitions(-DUNITYINDICATORS_LIBRARY)
4241
plugins/Unity/Indicators/Messaging/qml/MessageMenuItemFactory.qml+85−60
@@ -24,124 +24,145 @@ import Unity.Indicators 0.1 as Indicators
2424import QMenuModel 0.1 as QMenuModel
2525
2626Indicators.BaseMenuItem {
27− id: menuItem
28− property var actionsDescription: menu ? menu.ext.xCanonicalMessageActions : undefined
27+ id: messageFactoryItem
28+ property var menuModel: null
29+ property QtObject menuData: null
30+ property int menuIndex: -1
2931
30− implicitHeight: contents.status == Loader.Ready ? contents.item.implicitHeight : 0
32+ property var extendedData: menuData && menuData.ext || undefined
33+ property var actionsDescription: getExtendedProperty(extendedData, "xCanonicalMessageActions", undefined)
3134
32− property var model: null
35+ onMenuModelChanged: {
36+ loadAttributes();
37+ }
38+ onMenuIndexChanged: {
39+ loadAttributes();
40+ }
3341
34− Loader {
35− id: contents
36− anchors.fill: parent
42+ function loadAttributes() {
43+ if (!menuModel || menuIndex == undefined) return;
3744
38− sourceComponent: loadMessage(actionsDescription);
45+ menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-time': 'int64',
46+ 'x-canonical-text': 'string',
47+ 'x-canonical-message-actions': 'variant',
48+ 'icon': 'icon',
49+ 'x-canonical-app-icon': 'icon'});
50+ }
3951
40− // Binding all properties for the item, to make sure that any change in the
41− // property will be propagated to the contents.item at any time
42− Binding {
43− target: contents.item
44− property: "menuSelected"
45− value: menuSelected
46− when: (contents.status == Loader.Ready)
52+ function getExtendedProperty(object, propertyName, defaultValue) {
53+ if (object && object.hasOwnProperty(propertyName)) {
54+ return object[propertyName];
4755 }
56+ return defaultValue;
57+ }
4858
49− Binding {
50− target: contents.item
51− property: "menu"
52− value: menu
53− when: (contents.status == Loader.Ready)
54− }
59+ implicitHeight: contents.status == Loader.Ready ? contents.item.implicitHeight : 0
5560
56− Connections {
57− target: contents.item ? contents.item : null
58− onSelectMenu: selectMenu()
59− onDeselectMenu: deselectMenu()
60− }
61+ Loader {
62+ id: contents
63+ anchors.fill: parent
64+
65+ sourceComponent: loadMessage(actionsDescription);
6166
6267 Component {
6368 id: simpleTextMessage
6469 SimpleTextMessage {
6570 // text
66− title: menu && menu.label ? menu.label : ""
67− time: menu ? menu.ext.xCanonicalTime : 0
68− message: menu && menu.ext.xCanonicalText ? menu.ext.xCanonicalText : ""
71+ title: menuData && menuData.label || ""
72+ time: getExtendedProperty(extendedData, "xCanonicalTime", 0)
73+ message: getExtendedProperty(extendedData, "xCanonicalText", "")
6974 // icons
70− avatar: menu && menu.ext.icon !== undefined ? menu.ext.icon : "qrc:/indicators/artwork/messaging/default_contact.png"
71− appIcon: menu && menu.ext.xCanonicalAppIcon !== undefined ? menu.ext.xCanonicalAppIcon : "qrc:/indicators/artwork/messaging/default_app.svg"
75+ avatar: getExtendedProperty(extendedData, "icon", "qrc:/indicators/artwork/messaging/default_contact.png")
76+ appIcon: getExtendedProperty(extendedData, "xCanonicalAppIcon", "qrc:/indicators/artwork/messaging/default_app.svg")
7277
7378 onActivateApp: {
74− menuItem.model.activate(modelIndex, true);
79+ menuModel.activate(menuIndex, true);
80+ shell.hideIndicatorMenu(UbuntuAnimation.FastDuration);
7581 }
7682 onDismiss: {
77− menuItem.model.activate(modelIndex, false);
83+ menuModel.activate(menuIndex, false);
7884 }
85+
86+ menuSelected: messageFactoryItem.menuSelected
87+ onSelectMenu: messageFactoryItem.selectMenu()
88+ onDeselectMenu: messageFactoryItem.deselectMenu()
7989 }
8090 }
8191 Component {
8292 id: textMessage
8393 TextMessage {
94+ property var replyActionDescription: actionsDescription && actionsDescription.length > 0 ? actionsDescription[0] : undefined
95+
8496 property var replyAction: QMenuModel.UnityMenuAction {
85− model: menuItem.model
86− index: modelIndex
87− name: menu && actionsDescription[0].name ? actionsDescription[0].name : ""
97+ model: menuModel
98+ index: menuIndex
99+ name: getExtendedProperty(replyActionDescription, "name", "")
88100 }
89101
90102 // text
91− title: menu && menu.label ? menu.label : ""
92− time: menu ? menu.ext.xCanonicalTime : 0
93− message: menu && menu.ext.xCanonicalText ? menu.ext.xCanonicalText : ""
94− replyButtonText: actionsDescription && actionsDescription[0].label ? actionsDescription[0].label : "Send"
103+ title: menuData && menuData.label || ""
104+ time: getExtendedProperty(extendedData, "xCanonicalTime", 0)
105+ message: getExtendedProperty(extendedData, "xCanonicalText", "")
106+ replyButtonText: getExtendedProperty(replyActionDescription, "label", "Send")
95107 // icons
96− avatar: menu && menu.ext.icon !== undefined ? menu.ext.icon : "qrc:/indicators/artwork/messaging/default_contact.png"
97− appIcon: menu && menu.ext.xCanonicalAppIcon !== undefined ? menu.ext.xCanonicalAppIcon : "qrc:/indicators/artwork/messaging/default_app.svg"
108+ avatar: getExtendedProperty(extendedData, "icon", "qrc:/indicators/artwork/messaging/default_contact.png")
109+ appIcon: getExtendedProperty(extendedData, "xCanonicalAppIcon", "qrc:/indicators/artwork/messaging/default_app.svg")
98110 // actions
99111 replyEnabled: replyAction.valid && replyAction.enabled
100112
101113 onActivateApp: {
102− menuItem.model.activate(modelIndex, true);
114+ menuModel.activate(menuIndex, true);
115+ shell.hideIndicatorMenu(UbuntuAnimation.FastDuration);
103116 }
104117 onDismiss: {
105− menuItem.model.activate(modelIndex, false);
118+ menuModel.activate(menuIndex, false);
106119 }
107120 onReply: {
108121 replyAction.activate(value);
109122 }
123+
124+ menuSelected: messageFactoryItem.menuSelected
125+ onSelectMenu: messageFactoryItem.selectMenu()
126+ onDeselectMenu: messageFactoryItem.deselectMenu()
110127 }
111128 }
112129 Component {
113130 id: snapDecision
114131 SnapDecision {
132+ property var activateActionDescription: actionsDescription && actionsDescription.length > 0 ? actionsDescription[0] : undefined
133+ property var replyActionDescription: actionsDescription && actionsDescription.length > 1 ? actionsDescription[1] : undefined
134+
115135 property var activateAction: QMenuModel.UnityMenuAction {
116− model: menuItem.model
117− index: modelIndex
118− name: menu && actionsDescription[0].name ? actionsDescription[0].name : ""
136+ model: menuModel
137+ index: menuIndex
138+ name: getExtendedProperty(activateActionDescription, "name", "")
119139 }
120140 property var replyAction: QMenuModel.UnityMenuAction {
121− model: menuItem.model
122− index: modelIndex
123− name: menu && actionsDescription[1].name ? actionsDescription[1].name : ""
141+ model: menuModel
142+ index: menuIndex
143+ name: getExtendedProperty(replyActionDescription, "name", "")
124144 }
125145
126146 // text
127− title: menu && menu.label ? menu.label : ""
128− time: menu ? menu.ext.xCanonicalTime : ""
129− message: menu && menu.ext.xCanonicalText ? menu.ext.xCanonicalText : ""
130− actionButtonText: actionsDescription && actionsDescription[0].label ? actionsDescription[0].label : "Call back"
131− replyButtonText: actionsDescription && actionsDescription[1].label ? actionsDescription[1].label : "Send"
132− replyMessages: actionsDescription && actionsDescription[1]["parameter-hint"] ? actionsDescription[1]["parameter-hint"] : ""
147+ title: menuData && menuData.label || ""
148+ time: getExtendedProperty(extendedData, "xCanonicalTime", 0)
149+ message: getExtendedProperty(extendedData, "xCanonicalText", "")
150+ actionButtonText: getExtendedProperty(activateActionDescription, "label", "Call back")
151+ replyButtonText: getExtendedProperty(replyActionDescription, "label", "Send")
152+ replyMessages: getExtendedProperty(replyActionDescription, "parameter-hint", "")
133153 // icons
134− avatar: menu && menu.ext.icon !== undefined ? menu.ext.icon : "qrc:/indicators/artwork/messaging/default_contact.png"
135− appIcon: menu && menu.ext.xCanonicalAppIcon !== undefined ? menu.ext.xCanonicalAppIcon : "qrc:/indicators/artwork/messaging/default_app.svg"
154+ avatar: getExtendedProperty(extendedData, "icon", "qrc:/indicators/artwork/messaging/default_contact.png")
155+ appIcon: getExtendedProperty(extendedData, "xCanonicalAppIcon", "qrc:/indicators/artwork/messaging/default_app.svg")
136156 // actions
137157 activateEnabled: activateAction.valid && activateAction.enabled
138158 replyEnabled: replyAction.valid && replyAction.enabled
139159
140160 onActivateApp: {
141− menuItem.model.activate(modelIndex, true);
161+ menuModel.activate(menuIndex, true);
162+ shell.hideIndicatorMenu(UbuntuAnimation.FastDuration);
142163 }
143164 onDismiss: {
144− menuItem.model.activate(modelIndex, false);
165+ menuModel.activate(menuIndex, false);
145166 }
146167 onActivate: {
147168 activateAction.activate();
@@ -149,6 +170,10 @@ Indicators.BaseMenuItem {
149170 onReply: {
150171 replyAction.activate(value);
151172 }
173+
174+ menuSelected: messageFactoryItem.menuSelected
175+ onSelectMenu: messageFactoryItem.selectMenu()
176+ onDeselectMenu: messageFactoryItem.deselectMenu()
152177 }
153178 }
154179 }
plugins/Unity/Indicators/Messaging/qml/SimpleTextMessage.qml+2−1
@@ -21,6 +21,7 @@
2121import QtQuick 2.0
2222import Ubuntu.Components 0.1
2323import Unity.Indicators 0.1
24+import Utils 0.1 as Utils
2425
2526HeroMessage {
2627 id: __heroMessage
@@ -50,7 +51,7 @@ HeroMessage {
5051 opacity: 0.0
5152 enabled: false
5253
53− TimeFormatter {
54+ Utils.TimeFormatter {
5455 id: timeFormatter
5556 time: __heroMessage.time
5657 format: "hh:mm - MMM dd"
plugins/Unity/Indicators/Messaging/qml/SnapDecision.qml+2−2
@@ -20,8 +20,8 @@
2020
2121import QtQuick 2.0
2222import Ubuntu.Components 0.1
23−import Unity.Indicators 0.1 as Indicators
2423import Unity.Indicators 0.1
24+import Utils 0.1 as Utils
2525
2626HeroMessage {
2727 id: snapDecision
@@ -59,7 +59,7 @@ HeroMessage {
5959 height: units.gu(4)
6060 opacity: 0.0
6161
62− TimeFormatter {
62+ Utils.TimeFormatter {
6363 id: timeFormatter
6464 time: snapDecision.time
6565 format: "hh:mm - MMM dd"
plugins/Unity/Indicators/indicatorsmanager.cpp+1−1
@@ -24,7 +24,7 @@
2424#include <upstart.h>
2525#include <nih/alloc.h>
2626
27−#include "paths.h"
27+#include <paths.h>
2828
2929const QString profile = "phone";
3030
plugins/Unity/Indicators/indicatorsmodel.cpp+4−3
@@ -21,7 +21,8 @@
2121#include "indicatorsmanager.h"
2222#include "indicator.h"
2323#include "indicators.h"
24−#include "paths.h"
24+
25+#include <paths.h>
2526
2627#include <QQmlContext>
2728#include <QQmlEngine>
@@ -248,9 +249,9 @@ QVariant IndicatorsModel::data(const QModelIndex &index, int role) const
248249 }
249250 break;
250251 case IndicatorsModelRole::WidgetSource:
251− return shellAppDirectory()+"/Panel/Indicators/DefaultIndicatorWidget.qml";
252+ return qmlDirectory()+"/Panel/Indicators/DefaultIndicatorWidget.qml";
252253 case IndicatorsModelRole::PageSource:
253− return shellAppDirectory()+"/Panel/Indicators/DefaultIndicatorPage.qml";
254+ return qmlDirectory()+"/Panel/Indicators/DefaultIndicatorPage.qml";
254255 default:
255256 break;
256257 }
plugins/Unity/Indicators/plugin.cpp−2
@@ -33,7 +33,6 @@
3333#include "unitymenumodelcache.h"
3434#include "unitymenumodelstack.h"
3535#include "visibleindicatorsmodel.h"
36−#include "timeformatter.h"
3736
3837static QObject* menuModelCacheSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
3938 Q_UNUSED(engine);
@@ -52,7 +51,6 @@ void Indicators2Plugin::registerTypes(const char *uri)
5251 qmlRegisterType<RootActionState>(uri, 0, 1, "RootActionState");
5352 qmlRegisterType<ModelPrinter>(uri, 0, 1, "ModelPrinter");
5453 qmlRegisterType<VisibleIndicatorsModel>(uri, 0, 1, "VisibleIndicatorsModel");
55− qmlRegisterType<TimeFormatter>(uri, 0, 1, "TimeFormatter");
5654
5755 qmlRegisterSingletonType<UnityMenuModelCache>(uri, 0, 1, "UnityMenuModelCache", menuModelCacheSingleton);
5856
plugins/Unity/Indicators/qml/IndicatorPage.qml+18−4
@@ -140,12 +140,15 @@ IndicatorBase {
140140
141141 onLoaded: {
142142 if (item.hasOwnProperty("menuSelected")) {
143− item.menuSelected = Qt.binding(function() { return mainMenu.selectedIndex == index; });
143+ item.menuSelected = mainMenu.selectedIndex == index;
144144 item.selectMenu.connect(function() { mainMenu.selectedIndex = index; });
145145 item.deselectMenu.connect(function() { mainMenu.selectedIndex = -1; });
146146 }
147− if (item.hasOwnProperty("menu")) {
148− item.menu = Qt.binding(function() { return model; });
147+ if (item.hasOwnProperty("menuData")) {
148+ item.menuData = Qt.binding(function() { return model; });
149+ }
150+ if (item.hasOwnProperty("menuIndex")) {
151+ item.menuIndex = Qt.binding(function() { return modelIndex; });
149152 }
150153 }
151154
@@ -154,13 +157,24 @@ IndicatorBase {
154157 property: "objectName"
155158 value: model.action
156159 }
160+
161+ // TODO: Fixes lp#1243146
162+ // This is a workaround for a Qt bug. https://bugreports.qt-project.org/browse/QTBUG-34351
163+ Connections {
164+ target: mainMenu
165+ onSelectedIndexChanged: {
166+ if (loader.item && loader.item.hasOwnProperty("menuSelected")) {
167+ loader.item.menuSelected = mainMenu.selectedIndex == index;
168+ }
169+ }
170+ }
157171 }
158172 }
159173 }
160174
161175 MenuItemFactory {
162176 id: factory
163− model: mainMenu.model
177+ menuModel: mainMenu.model ? mainMenu.model : null
164178 }
165179
166180 Components.Label {
plugins/Unity/Indicators/qml/MenuItemFactory.qml+138−85
@@ -22,11 +22,12 @@ import Unity.Indicators 0.1 as Indicators
2222import Unity.Indicators.Network 0.1 as ICNetwork
2323import Unity.Indicators.Messaging 0.1 as ICMessaging
2424import QMenuModel 0.1 as QMenuModel
25+import Ubuntu.Components 0.1
2526
2627Item {
2728 id: menuFactory
2829
29− property var model: null
30+ property var menuModel: null
3031
3132 property var _map: {
3233 "unity.widgets.systemsettings.tablet.volumecontrol" : sliderMenu,
@@ -49,38 +50,55 @@ Item {
4950 "unity.widgets.systemsettings.tablet.accesspoint" : accessPoint,
5051 }
5152
53+ function getExtendedProperty(object, propertyName, defaultValue) {
54+ if (object && object.hasOwnProperty(propertyName)) {
55+ return object[propertyName];
56+ }
57+ return defaultValue;
58+ }
59+
5260 Component { id: divMenu; Indicators.DivMenuItem {} }
5361
5462 Component {
5563 id: sliderMenu;
5664 Indicators.SliderMenuItem {
57− property QtObject menu: null
65+ property QtObject menuData: null
66+ property var menuModel: menuFactory.menuModel
67+ property int menuIndex: -1
68+ property var extendedData: menuData && menuData.ext || undefined
5869
59− text: menu && menu.label ? menu.label : ""
60− icon: menu && menu.icon ? menu.icon : ""
61− minIcon: menu && menu.ext.minIcon ? menu.ext.minIcon : ""
62− maxIcon: menu && menu.ext.maxIcon ? menu.ext.maxIcon : ""
70+ text: menuData && menuData.label || ""
71+ iconSource: menuData && menuData.icon || ""
72+ minIcon: getExtendedProperty(extendedData, "minIcon", "")
73+ maxIcon: getExtendedProperty(extendedData, "maxIcon", "")
6374
64− minimumValue: menu.ext.minValue ? menu.ext.minValue : 0.0
75+ minimumValue: getExtendedProperty(extendedData, "minValue", 0.0)
6576 maximumValue: {
66− var maximum = menu.ext.maxValue ? menu.ext.maxValue : 1.0
77+ var maximum = getExtendedProperty(extendedData, "maxValue", 1.0);
6778 if (maximum <= minimumValue) {
6879 return minimumValue + 1;
6980 }
7081 return maximum;
7182 }
72− value: menu ? menu.actionState : 0.0
73− enabled: menu ? menu.sensitive : false
83+ value: menuData && menuData.actionState || 0.0
84+ enabled: menuData && menuData.sensitive || false
7485
75− Component.onCompleted: {
76− model.loadExtendedAttributes(modelIndex, {'min-value': 'double',
77− 'max-value': 'double',
78− 'min-icon': 'icon',
79− 'max-icon': 'icon'});
86+ onMenuModelChanged: {
87+ loadAttributes();
88+ }
89+ onMenuIndexChanged: {
90+ loadAttributes();
8091 }
81−
8292 onChangeState: {
83− model.changeState(modelIndex, value);
93+ menuModel.changeState(menuIndex, value);
94+ }
95+
96+ function loadAttributes() {
97+ if (!menuModel || menuIndex == undefined) return;
98+ menuModel.loadExtendedAttributes(menuIndex, {'min-value': 'double',
99+ 'max-value': 'double',
100+ 'min-icon': 'icon',
101+ 'max-icon': 'icon'});
84102 }
85103 }
86104 }
@@ -88,50 +106,57 @@ Item {
88106 Component {
89107 id: buttonMenu;
90108 Indicators.ButtonMenuItem {
91− property QtObject menu: null
109+ property QtObject menuData: null
110+ property var menuModel: menuFactory.menuModel
111+ property int menuIndex: -1
92112
93− text: menu && menu.label ? menu.label : ""
94− enabled: menu ? menu.sensitive : false
113+ text: menuData && menuData.label || ""
114+ enabled: menuData && menuData.sensitive || false
95115
96116 onActivate: {
97− model.activate(modelIndex);
117+ menuModel.activate(menuIndex);
118+ shell.hideIndicatorMenu(UbuntuAnimation.FastDuration);
98119 }
99120 }
100121 }
101122 Component {
102123 id: sectionMenu;
103124 Indicators.SectionMenuItem {
104− property QtObject menu: null
125+ property QtObject menuData: null
126+ property var menuIndex: undefined
105127
106− text: menu && menu.label ? menu.label : ""
128+ text: menuData && menuData.label || ""
107129 }
108130 }
109131
110132 Component {
111133 id: progressMenu;
112134 Indicators.ProgressMenuItem {
113− property QtObject menu: null
135+ property QtObject menuData: null
136+ property int menuIndex: -1
114137
115− text: menu && menu.label ? menu.label : ""
116− icon: menu ? menu.icon : ""
117− value : menu ? menu.actionState : 0.0
118− enabled: menu ? menu.sensitive : false
138+ text: menuData && menuData.label || ""
139+ iconSource: menuData && menuData.icon || ""
140+ value : menuData && menuData.actionState || 0.0
141+ enabled: menuData && menuData.sensitive || false
119142 }
120143 }
121144
122145 Component {
123146 id: standardMenu;
124147 Indicators.StandardMenuItem {
125− property QtObject menu: null
148+ property QtObject menuData: null
149+ property int menuIndex: -1
126150
127− text: menu && menu.label ? menu.label : ""
128− icon: menu && menu.icon ? menu.icon : ""
129− checkable: menu ? (menu.isCheck || menu.isRadio) : false
130− checked: checkable ? menu.isToggled : false
131− enabled: menu ? menu.sensitive : false
151+ text: menuData && menuData.label || ""
152+ iconSource: menuData && menuData.icon || ""
153+ enabled: menuData && menuData.sensitive || false
154+ checkable: menuData ? (menuData.isCheck || menuData.isRadio) : false
155+ checked: checkable ? menuData.isToggled : false
132156
133157 onActivate: {
134− model.activate(modelIndex);
158+ menuModel.activate(menuIndex);
159+ shell.hideIndicatorMenu(UbuntuAnimation.BriskDuration);
135160 }
136161 }
137162 }
@@ -139,15 +164,17 @@ Item {
139164 Component {
140165 id: switchMenu;
141166 Indicators.SwitchMenuItem {
142− property QtObject menu: null
167+ property QtObject menuData: null
168+ property int menuIndex: -1
143169
144− text: menu && menu.label ? menu.label : ""
145− icon: menu && menu.icon ? menu.icon : ""
146− checked: menu ? menu.isToggled : false
147− enabled: menu ? menu.sensitive : false
170+ text: menuData && menuData.label || ""
171+ iconSource: menuData && menuData.icon || ""
172+ enabled: menuData && menuData.sensitive || false
173+ checked: menuData ? menuData.isToggled : false
148174
149175 onActivate: {
150− model.activate(modelIndex);
176+ menuModel.activate(menuIndex);
177+ shell.hideIndicatorMenu(UbuntuAnimation.BriskDuration);
151178 }
152179 }
153180 }
@@ -155,13 +182,24 @@ Item {
155182 Component {
156183 id: wifiSection;
157184 Indicators.SectionMenuItem {
158− property QtObject menu: null
185+ property QtObject menuData: null
186+ property var menuModel: menuFactory.menuModel
187+ property int menuIndex: -1
188+ property var extendedData: menuData && menuData.ext || undefined
189+
190+ text: menuData && menuData.label || ""
191+ busy: getExtendedProperty(extendedData, "xCanonicalBusyAction", false)
159192
160− text: menu && menu.label ? menu.label : ""
161− busy: menu ? menu.ext.xCanonicalBusyAction : false
193+ onMenuModelChanged: {
194+ loadAttributes();
195+ }
196+ onMenuIndexChanged: {
197+ loadAttributes();
198+ }
162199
163− Component.onCompleted: {
164− model.loadExtendedAttributes(modelIndex, {'x-canonical-busy-action': 'bool'});
200+ function loadAttributes() {
201+ if (!menuModel || menuIndex == undefined) return;
202+ menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-busy-action': 'bool'})
165203 }
166204 }
167205 }
@@ -169,27 +207,40 @@ Item {
169207 Component {
170208 id: accessPoint;
171209 ICNetwork.AccessPoint {
172− property QtObject menu: null
210+ property QtObject menuData: null
211+ property var menuModel: menuFactory.menuModel
212+ property int menuIndex: -1
213+ property var extendedData: menuData && menuData.ext || undefined
214+
173215 property var strengthAction: QMenuModel.UnityMenuAction {
174− model: menuFactory.model ? menuFactory.model : null
175− index: modelIndex
176− name: menu ? menu.ext.xCanonicalWifiApStrengthAction : ""
216+ model: menuModel
217+ index: menuIndex
218+ name: getExtendedProperty(extendedData, "xCanonicalWifiApStrengthAction", "")
177219 }
178220
179− text: menu && menu.label ? menu.label : ""
180− secure: menu ? menu.ext.xCanonicalWifiApIsSecure : false
181− adHoc: menu ? menu.ext.xCanonicalWifiApIsAdhoc : false
182− checked: menu ? menu.isToggled : false
221+ text: menuData && menuData.label || ""
222+ enabled: menuData && menuData.sensitive || false
223+ secure: getExtendedProperty(extendedData, "xCanonicalWifiApIsSecure", false)
224+ adHoc: getExtendedProperty(extendedData, "xCanonicalWifiApIsAdhoc", false)
225+ checked: menuData ? menuData.isToggled : false
183226 signalStrength: strengthAction.valid ? strengthAction.state : 0
184− enabled: menu ? menu.sensitive : false
185227
186− Component.onCompleted: {
187− model.loadExtendedAttributes(modelIndex, {'x-canonical-wifi-ap-is-adhoc': 'bool',
188− 'x-canonical-wifi-ap-is-secure': 'bool',
189− 'x-canonical-wifi-ap-strength-action': 'string'});
228+ onMenuModelChanged: {
229+ loadAttributes();
230+ }
231+ onMenuIndexChanged: {
232+ loadAttributes();
190233 }
191234 onActivate: {
192− model.activate(modelIndex);
235+ menuModel.activate(menuIndex);
236+ shell.hideIndicatorMenu(UbuntuAnimation.BriskDuration);
237+ }
238+
239+ function loadAttributes() {
240+ if (!menuModel || menuIndex == undefined) return;
241+ menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-wifi-ap-is-adhoc': 'bool',
242+ 'x-canonical-wifi-ap-is-secure': 'bool',
243+ 'x-canonical-wifi-ap-strength-action': 'string'});
193244 }
194245 }
195246 }
@@ -197,37 +248,40 @@ Item {
197248 Component {
198249 id: messageItem
199250 ICMessaging.MessageMenuItemFactory {
200−
201− property QtObject menu: null
202− model: menuFactory.model ? menuFactory.model : null
203−
204− Component.onCompleted: {
205− model.loadExtendedAttributes(modelIndex, {'x-canonical-time': 'int64',
206− 'x-canonical-text': 'string',
207− 'x-canonical-message-actions': 'variant',
208− 'icon': 'icon',
209− 'x-canonical-app-icon': 'icon'});
210− }
251+ menuModel: menuFactory.menuModel
211252 }
212253 }
213254
214255 Component {
215256 id: groupedMessage
216257 ICMessaging.GroupedMessage {
217− property QtObject menu: null
218−
219− title: menu && menu.label ? menu.label : ""
220− count: menu && menu.actionState[0] ? menu.actionState[0] : "0"
221− appIcon: menu && menu.ext.icon !== undefined ? menu.ext.icon : "qrc:/indicators/artwork/messaging/default_app.svg"
222−
223− Component.onCompleted: {
224− model.loadExtendedAttributes(modelIndex, {'icon': 'icon'});
258+ property QtObject menuData: null
259+ property var menuModel: menuFactory.menuModel
260+ property int menuIndex: -1
261+ property var extendedData: menuData && menuData.ext || undefined
262+
263+ title: menuData && menuData.label || ""
264+ appIcon: getExtendedProperty(extendedData, "icon", "qrc:/indicators/artwork/messaging/default_app.svg")
265+ count: menuData && menuData.actionState.length > 0 ? menuData.actionState[0] : "0"
266+ enabled: menuData && menuData.sensitive || false
267+
268+ onMenuModelChanged: {
269+ loadAttributes();
270+ }
271+ onMenuIndexChanged: {
272+ loadAttributes();
225273 }
226274 onActivateApp: {
227− model.activate(modelIndex, true);
275+ menuModel.activate(menuIndex, true);
276+ shell.hideIndicatorMenu(UbuntuAnimation.FastDuration);
228277 }
229278 onDismiss: {
230− model.activate(modelIndex, false);
279+ menuModel.activate(menuIndex, false);
280+ }
281+
282+ function loadAttributes() {
283+ if (!menuModel || menuIndex == undefined) return;
284+ menuModel.loadExtendedAttributes(modelIndex, {'icon': 'icon'});
231285 }
232286 }
233287 }
@@ -238,10 +292,9 @@ Item {
238292 if (component !== undefined) {
239293 return component;
240294 }
241− } else {
242− if (modelData.isSeparator) {
243− return divMenu;
244− }
295+ }
296+ if (modelData.isSeparator) {
297+ return divMenu;
245298 }
246299 return standardMenu;
247300 }
plugins/Unity/Launcher/backend/launcherbackend.cpp+6−6
@@ -26,6 +26,7 @@
2626#include <QFileInfo>
2727#include <QGSettings>
2828#include <QDebug>
29+#include <QStandardPaths>
2930
3031class LauncherBackendItem
3132{
@@ -182,8 +183,10 @@ void LauncherBackend::syncFromAccounts()
182183
183184 if (m_accounts && !m_user.isEmpty()) {
184185 QVariant variant = m_accounts->getUserProperty(m_user, "com.canonical.unity.AccountsService", "launcher-items");
185− apps = qdbus_cast<QList<QVariantMap>>(variant.value<QDBusArgument>());
186− defaults = isDefaultsItem(apps);
186+ if (variant.isValid() && variant.canConvert<QDBusArgument>()) {
187+ apps = qdbus_cast<QList<QVariantMap>>(variant.value<QDBusArgument>());
188+ defaults = isDefaultsItem(apps);
189+ }
187190 }
188191
189192 if (m_accounts && defaults) { // Checking accounts as it'll be null when !useStorage
@@ -232,10 +235,7 @@ QString LauncherBackend::findDesktopFile(const QString &appId) const
232235 int dashPos = -1;
233236 QString helper = appId;
234237
235− QStringList searchDirs;
236− searchDirs << QDir::homePath() + "/.local/share/applications";
237− searchDirs << "/usr/share/applications";
238−
238+ QStringList searchDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
239239#ifdef LAUNCHER_TESTING
240240 searchDirs << "";
241241#endif
plugins/Utils/CMakeLists.txt+1
@@ -16,6 +16,7 @@ set(QMLPLUGIN_SRC
1616 mediaartcache.cpp
1717 qlimitproxymodelqml.cpp
1818 qsortfilterproxymodelqml.cpp
19+ timeformatter.cpp
1920 unitymenumodelpaths.cpp
2021 plugin.cpp
2122 )
plugins/Utils/plugin.cpp+3
@@ -30,6 +30,7 @@
3030#include "bottombarvisibilitycommunicatorshell.h"
3131#include "qlimitproxymodelqml.h"
3232#include "qsortfilterproxymodelqml.h"
33+#include "timeformatter.h"
3334#include "unitymenumodelpaths.h"
3435
3536static const char* BOTTOM_BAR_VISIBILITY_COMMUNICATOR_DBUS_PATH = "/BottomBarVisibilityCommunicator";
@@ -42,6 +43,8 @@ void UtilsPlugin::registerTypes(const char *uri)
4243 qmlRegisterType<QLimitProxyModelQML>(uri, 0, 1, "LimitProxyModel");
4344 qmlRegisterType<QSortFilterProxyModelQML>(uri, 0, 1, "SortFilterProxyModel");
4445 qmlRegisterType<UnityMenuModelPaths>(uri, 0, 1, "UnityMenuModelPaths");
46+ qmlRegisterType<TimeFormatter>(uri, 0, 1, "TimeFormatter");
47+ qmlRegisterType<GDateTimeFormatter>(uri, 0, 1, "GDateTimeFormatter");
4548 qmlRegisterUncreatableType<BottomBarVisibilityCommunicatorShell>(uri, 0, 1, "BottomBarVisibilityCommunicatorShell", "Can't create BottomBarVisibilityCommunicatorShell");
4649}
4750
plugins/Unity/Indicators/timeformatter.cpp → plugins/Utils/timeformatter.cpprenamed+30−1
@@ -167,6 +167,35 @@ void TimeFormatter::setTime(qint64 time)
167167
168168void TimeFormatter::update()
169169{
170− priv->timeString = QDateTime::fromMSecsSinceEpoch(priv->time / 1000).toString(priv->format);
170+ priv->timeString = formatTime();
171171 Q_EMIT timeStringChanged(priv->timeString);
172172}
173+
174+QString TimeFormatter::formatTime() const
175+{
176+ return QDateTime::fromMSecsSinceEpoch(time() / 1000).toString(format());
177+}
178+
179+GDateTimeFormatter::GDateTimeFormatter(QObject* parent)
180+: TimeFormatter(parent)
181+{
182+}
183+
184+QString GDateTimeFormatter::formatTime() const
185+{
186+ gchar* time_string;
187+ GDateTime* datetime;
188+ QByteArray formatBytes = format().toUtf8();
189+
190+ datetime = g_date_time_new_from_unix_local(time());
191+ if (!datetime) {
192+ return "";
193+ }
194+
195+ time_string = g_date_time_format(datetime, formatBytes.constData());
196+ QString formattedTime(QString::fromUtf8(time_string));
197+
198+ g_free(time_string);
199+ g_date_time_unref(datetime);
200+ return formattedTime;
201+}
plugins/Unity/Indicators/timeformatter.h → plugins/Utils/timeformatter.hrenamed+15−3
@@ -19,10 +19,10 @@
1919#ifndef TIME_FORMATTER_H
2020#define TIME_FORMATTER_H
2121
22−#include "unityindicatorsglobal.h"
2322#include <QObject>
2423
25−class UNITYINDICATORS_EXPORT TimeFormatter : public QObject
24+// TODO - bug #1260728
25+class TimeFormatter : public QObject
2626{
2727 Q_OBJECT
2828 Q_PROPERTY(QString format READ format WRITE setFormat NOTIFY formatChanged)
@@ -31,7 +31,7 @@ class UNITYINDICATORS_EXPORT TimeFormatter : public QObject
3131
3232public:
3333 TimeFormatter(QObject *parent = 0);
34− ~TimeFormatter();
34+ virtual ~TimeFormatter();
3535
3636 QString format() const;
3737 QString timeString() const;
@@ -47,8 +47,20 @@ Q_SIGNALS:
4747 void timeStringChanged(const QString &timeString);
4848 void timeChanged(qint64 time);
4949
50+protected:
51+ virtual QString formatTime() const;
52+
5053private:
5154 struct TimeFormatterPrivate *priv;
5255};
5356
57+class GDateTimeFormatter : public TimeFormatter
58+{
59+public:
60+ GDateTimeFormatter(QObject *parent = 0);
61+
62+protected:
63+ virtual QString formatTime() const;
64+};
65+
5466#endif
po/ar.po+15−93
@@ -7,8 +7,8 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
11−"PO-Revision-Date: 2013-11-15 12:29+0000\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-12-05 06:55+0000\n"
1212"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
1313"Language-Team: Arabic <ar@li.org>\n"
1414"MIME-Version: 1.0\n"
@@ -16,76 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
1818"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "الهاتف"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "الكاميرا"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "المعرض"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "فيسبوك"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "المتصفح"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "تويتر"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "جي ميل"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "الطقس"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "المذكرة"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "التقويم"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "مشغّل الوسائط"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr "Evernote"
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "الخريطة"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr "Pinterest"
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr "SoundCloud"
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "ويكيبيديا"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "يوتيوب"
19+"X-Launchpad-Export-Date: 2013-12-06 06:30+0000\n"
20+"X-Generator: Launchpad (build 16863)\n"
8921
9022#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
@@ -136,20 +68,22 @@ msgstr ""
13668"لقد أتقنت الآن إيماءات الحواف ويمكنك البدء باستخدام الهاتف<br><br>انقر في أي "
13769"مكان للبدء"
13870
139−#: Components/PageHeader.qml:345
71+#: Components/PageHeader.qml:364
14072msgid "Recent searches"
14173msgstr "عمليات البحث الأخيرة"
14274
143−#. TRANSLATORS: Number of persons who rated this app
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "قيّم ذلك"
78+
14479#. TRANSLATORS: Number of persons who rated this app/video/whatever
145−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
80+#: Dash/Previews/Header.qml:93
14681#, qt-format
14782msgid "(%1)"
14883msgstr "(%1)"
14984
150−#. TRANSLATORS: Number of persons who wrote reviews for this app
15185#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
86+#: Dash/Previews/Header.qml:105
15387#, qt-format
15488msgid "%1 review"
15589msgid_plural "%1 reviews"
@@ -160,10 +94,6 @@ msgstr[3] "%1 تعليقات"
16094msgstr[4] "%1 تعليقا"
16195msgstr[5] "%1 تعليق"
16296
163−#: Dash/Apps/AppPreview.qml:135
164−msgid "Rate this"
165−msgstr "قيّم ذلك"
166−
16797#: Dash/Previews/Reviews.qml:74
16898msgid "Add a review"
16999msgstr "أضف تعليق"
@@ -180,7 +110,7 @@ msgstr "أرسل"
180110msgid "Comments:"
181111msgstr "التعليقات:"
182112
183−#: Greeter/Lockscreen.qml:146
113+#: Greeter/Lockscreen.qml:149
184114msgid "Emergency Call"
185115msgstr "مكالمة طوارئ"
186116
@@ -224,21 +154,13 @@ msgstr "ابحث"
224154#: plugins/Unity/Launcher/launcheritem.cpp:43
225155#: plugins/Unity/Launcher/launcheritem.cpp:73
226156msgid "Lock to Launcher"
227−msgstr ""
157+msgstr "ثبّت في الشريط"
228158
229159#: plugins/Unity/Launcher/launcheritem.cpp:73
230160msgid "Unlock from Launcher"
231−msgstr ""
232−
233−#: plugins/Unity/scope.cpp:408
234−msgid "Sorry, there is nothing that matches your search."
235−msgstr "عذراً، لا يوجد ما يطابق بحثك."
236−
237−#: plugins/Unity/showallfilteroption.cpp:41
238−msgid "All"
239−msgstr "الكل"
161+msgstr "فُك التثبيت من الشريط"
240162
241−#: Shell.qml:441
163+#: Shell.qml:439
242164#, qt-format
243165msgid "Please enter %1"
244166msgstr "من فضلك أدخِل %1"
po/ast.po+16−94
@@ -7,84 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
11−"PO-Revision-Date: 2013-10-03 14:02+0000\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-12-11 20:45+0000\n"
1212"Last-Translator: ivarela <ivarela@ubuntu.com>\n"
1313"Language-Team: Asturian <ast@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Teléfonu"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Cámara"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galería"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Navegador"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Meteoroloxía"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Bloc de notes"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendariu"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Reproductor multimedia"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Map"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-12-12 06:02+0000\n"
19+"X-Generator: Launchpad (build 16869)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -136,30 +68,28 @@ msgstr ""
13668"Agora domines los xestos de berbesos y pues usar el teléfonu<br><br>Toca la "
13769"pantalla pa entamar"
13870
139−#: Components/PageHeader.qml:345
71+#: Components/PageHeader.qml:364
14072msgid "Recent searches"
14173msgstr "Busques recientes"
14274
143−#. TRANSLATORS: Number of persons who rated this app
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "Valorar esto"
78+
14479#. TRANSLATORS: Number of persons who rated this app/video/whatever
145−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
80+#: Dash/Previews/Header.qml:93
14681#, qt-format
14782msgid "(%1)"
14883msgstr "(%1)"
14984
150−#. TRANSLATORS: Number of persons who wrote reviews for this app
15185#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
86+#: Dash/Previews/Header.qml:105
15387#, qt-format
15488msgid "%1 review"
15589msgid_plural "%1 reviews"
15690msgstr[0] "%1 reseña"
15791msgstr[1] "%1 reseñes"
15892
159−#: Dash/Apps/AppPreview.qml:135
160−msgid "Rate this"
161−msgstr "Valorar esto"
162−
16393#: Dash/Previews/Reviews.qml:74
16494msgid "Add a review"
16595msgstr "Amestar una reseña"
@@ -176,7 +106,7 @@ msgstr "Unviar"
176106msgid "Comments:"
177107msgstr "Comentarios:"
178108
179−#: Greeter/Lockscreen.qml:146
109+#: Greeter/Lockscreen.qml:149
180110msgid "Emergency Call"
181111msgstr "Llamada d'emerxencia"
182112
@@ -211,7 +141,7 @@ msgstr "Falando…"
211141
212142#: Notifications/NotificationMenuItemFactory.qml:89
213143msgid "Show password"
214−msgstr ""
144+msgstr "Amosar contraseña"
215145
216146#: Panel/SearchIndicator.qml:27
217147msgid "Search"
@@ -220,21 +150,13 @@ msgstr "Guetar"
220150#: plugins/Unity/Launcher/launcheritem.cpp:43
221151#: plugins/Unity/Launcher/launcheritem.cpp:73
222152msgid "Lock to Launcher"
223−msgstr ""
153+msgstr "Caltener nel Llanzador"
224154
225155#: plugins/Unity/Launcher/launcheritem.cpp:73
226156msgid "Unlock from Launcher"
227−msgstr ""
228−
229−#: plugins/Unity/scope.cpp:408
230−msgid "Sorry, there is nothing that matches your search."
231−msgstr "Sentímoslo, nun hai res que concase cola gueta"
232−
233−#: plugins/Unity/showallfilteroption.cpp:41
234−msgid "All"
235−msgstr "Too"
157+msgstr "Nun caltener nel llanzador"
236158
237−#: Shell.qml:441
159+#: Shell.qml:439
238160#, qt-format
239161msgid "Please enter %1"
240162msgstr "Introduz %1"
po/az.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-26 23:48+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Azerbaijani <az@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Son axtarışlar"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Bağışlayın, amma axtarışınıza heç bir nəticə uyğun gəlmir."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/bg.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-27 00:06+0000\n"
1212"Last-Translator: Miroslav E. Hadzhiev (Хаджиев) "
1313"<miroslav.hadzhiev@gmail.com>\n"
@@ -16,76 +16,8 @@ msgstr ""
1616"Content-Type: text/plain; charset=UTF-8\n"
1717"Content-Transfer-Encoding: 8bit\n"
1818"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "Телефон"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "Камера"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "Колекция"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "Фейсбук"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "Браузър"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "Туитър"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "Е-поща от Гугъл"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "Метеоусловия"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "Бележник"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "Календар"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "Мултимедиен плеър"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr ""
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "Карта"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr ""
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr ""
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "Уикипедия"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "YouTube"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
8921
9022#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
@@ -133,30 +65,28 @@ msgid ""
13365"phone<br><br>Tap anywhere to start"
13466msgstr ""
13567
136−#: Components/PageHeader.qml:345
68+#: Components/PageHeader.qml:364
13769msgid "Recent searches"
13870msgstr "Скорошни търсения"
13971
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr ""
75+
14176#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
14378#, qt-format
14479msgid "(%1)"
14580msgstr ""
14681
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
14882#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
15084#, qt-format
15185msgid "%1 review"
15286msgid_plural "%1 reviews"
15387msgstr[0] ""
15488msgstr[1] ""
15589
156−#: Dash/Apps/AppPreview.qml:135
157−msgid "Rate this"
158−msgstr ""
159−
16090#: Dash/Previews/Reviews.qml:74
16191msgid "Add a review"
16292msgstr ""
@@ -173,7 +103,7 @@ msgstr ""
173103msgid "Comments:"
174104msgstr ""
175105
176−#: Greeter/Lockscreen.qml:146
106+#: Greeter/Lockscreen.qml:149
177107msgid "Emergency Call"
178108msgstr ""
179109
@@ -223,15 +153,7 @@ msgstr ""
223153msgid "Unlock from Launcher"
224154msgstr ""
225155
226−#: plugins/Unity/scope.cpp:408
227−msgid "Sorry, there is nothing that matches your search."
228−msgstr "Съжаляваме, няма нищо, което да отговаря на вашето търсене."
229−
230−#: plugins/Unity/showallfilteroption.cpp:41
231−msgid "All"
232−msgstr ""
233−
234−#: Shell.qml:441
156+#: Shell.qml:439
235157#, qt-format
236158msgid "Please enter %1"
237159msgstr ""
po/ca.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-09-28 07:38+0000\n"
1212"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
1313"Language-Team: Catalan <ca@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telèfon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Càmera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galeria"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Navegador"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "El temps"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Bloc de notes"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendari"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Reproductor multimèdia"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mapa"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Viquipèdia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -138,30 +70,28 @@ msgid ""
13870"phone<br><br>Tap anywhere to start"
13971msgstr ""
14072
141−#: Components/PageHeader.qml:345
73+#: Components/PageHeader.qml:364
14274msgid "Recent searches"
14375msgstr "Cerques recents"
14476
145−#. TRANSLATORS: Number of persons who rated this app
77+#: Dash/Apps/AppPreview.qml:135
78+msgid "Rate this"
79+msgstr ""
80+
14681#. TRANSLATORS: Number of persons who rated this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
82+#: Dash/Previews/Header.qml:93
14883#, qt-format
14984msgid "(%1)"
15085msgstr "(%1)"
15186
152−#. TRANSLATORS: Number of persons who wrote reviews for this app
15387#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
154−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
88+#: Dash/Previews/Header.qml:105
15589#, qt-format
15690msgid "%1 review"
15791msgid_plural "%1 reviews"
15892msgstr[0] "%1 ressenya"
15993msgstr[1] "%1 ressenyes"
16094
161−#: Dash/Apps/AppPreview.qml:135
162−msgid "Rate this"
163−msgstr ""
164−
16595#: Dash/Previews/Reviews.qml:74
16696msgid "Add a review"
16797msgstr "Afegiu una ressenya"
@@ -178,7 +108,7 @@ msgstr "Envia"
178108msgid "Comments:"
179109msgstr "Comentaris:"
180110
181−#: Greeter/Lockscreen.qml:146
111+#: Greeter/Lockscreen.qml:149
182112msgid "Emergency Call"
183113msgstr "Trucada d'emergència"
184114
@@ -228,15 +158,7 @@ msgstr ""
228158msgid "Unlock from Launcher"
229159msgstr ""
230160
231−#: plugins/Unity/scope.cpp:408
232−msgid "Sorry, there is nothing that matches your search."
233−msgstr "No hi ha res que coincideixi amb la cerca"
234−
235−#: plugins/Unity/showallfilteroption.cpp:41
236−msgid "All"
237−msgstr ""
238−
239−#: Shell.qml:441
161+#: Shell.qml:439
240162#, qt-format
241163msgid "Please enter %1"
242164msgstr "Introduïu %1"
po/cs.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-08 08:09+0000\n"
1212"Last-Translator: Tadeáš Pařík <tadeas.parik@gmail.com>\n"
1313"Language-Team: Czech <cs@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Fotoaparát"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galerie"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Prohlížeč"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Počasí"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Poznámkový blok"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalendář"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Přehrávač multimédií"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mapa"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "Hudební Cloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedie"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,20 +64,22 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Poslední vyhledávání"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr "Ohodnoťte to"
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr "(%1)"
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
@@ -153,10 +87,6 @@ msgstr[0] "%1 recenze"
15387msgstr[1] "%1 recenze"
15488msgstr[2] "%1 recenzí"
15589
156−#: Dash/Apps/AppPreview.qml:135
157−msgid "Rate this"
158−msgstr "Ohodnoťte to"
159−
16090#: Dash/Previews/Reviews.qml:74
16191msgid "Add a review"
16292msgstr "Přidat recenzi"
@@ -173,7 +103,7 @@ msgstr "Odeslat"
173103msgid "Comments:"
174104msgstr "Komentáře:"
175105
176−#: Greeter/Lockscreen.qml:146
106+#: Greeter/Lockscreen.qml:149
177107msgid "Emergency Call"
178108msgstr "Tísňové volání"
179109
@@ -223,15 +153,7 @@ msgstr ""
223153msgid "Unlock from Launcher"
224154msgstr ""
225155
226−#: plugins/Unity/scope.cpp:408
227−msgid "Sorry, there is nothing that matches your search."
228−msgstr "Je nám líto, ale nic neodpovídá zadání"
229−
230−#: plugins/Unity/showallfilteroption.cpp:41
231−msgid "All"
232−msgstr "Vše"
233−
234−#: Shell.qml:441
156+#: Shell.qml:439
235157#, qt-format
236158msgid "Please enter %1"
237159msgstr "Zadejte prosím %1"
po/de.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-18 12:26+0000\n"
1212"Last-Translator: Phillip Sz <Unknown>\n"
1313"Language-Team: German <de@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Kamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galerie"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Browser"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Wetter"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notizen"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalender"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Medienwiedergabe"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Karte"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -136,30 +68,28 @@ msgstr ""
13668"Sie haben nun die Einführung abgeschlossen und können Ihr Gerät nun "
13769"verwenden<br><br>Antippen um zu starten"
13870
139−#: Components/PageHeader.qml:345
71+#: Components/PageHeader.qml:364
14072msgid "Recent searches"
14173msgstr "Letzte Suchbegriffe"
14274
143−#. TRANSLATORS: Number of persons who rated this app
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "Bewerten"
78+
14479#. TRANSLATORS: Number of persons who rated this app/video/whatever
145−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
80+#: Dash/Previews/Header.qml:93
14681#, qt-format
14782msgid "(%1)"
14883msgstr "(%1)"
14984
150−#. TRANSLATORS: Number of persons who wrote reviews for this app
15185#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
86+#: Dash/Previews/Header.qml:105
15387#, qt-format
15488msgid "%1 review"
15589msgid_plural "%1 reviews"
15690msgstr[0] "%1 Bewertung"
15791msgstr[1] "%1 Bewertungen"
15892
159−#: Dash/Apps/AppPreview.qml:135
160−msgid "Rate this"
161−msgstr "Bewerten"
162−
16393#: Dash/Previews/Reviews.qml:74
16494msgid "Add a review"
16595msgstr "Bewertung hinzufügen"
@@ -176,7 +106,7 @@ msgstr "Senden"
176106msgid "Comments:"
177107msgstr "Kommentare:"
178108
179−#: Greeter/Lockscreen.qml:146
109+#: Greeter/Lockscreen.qml:149
180110msgid "Emergency Call"
181111msgstr "Notruf"
182112
@@ -226,15 +156,7 @@ msgstr ""
226156msgid "Unlock from Launcher"
227157msgstr ""
228158
229−#: plugins/Unity/scope.cpp:408
230−msgid "Sorry, there is nothing that matches your search."
231−msgstr "Entschuldigung, es wurden keine Treffer erzielt."
232−
233−#: plugins/Unity/showallfilteroption.cpp:41
234−msgid "All"
235−msgstr "Alle"
236−
237−#: Shell.qml:441
159+#: Shell.qml:439
238160#, qt-format
239161msgid "Please enter %1"
240162msgstr "Bitte geben Sie %1 ein"
po/el.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-27 00:53+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Greek <el@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Πρόσφατες αναζητήσεις"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Λυπούμαστε, δεν υπάρχει τίποτα που να ταιριάζει στην αναζήτησή σας."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/en_AU.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-09-28 07:46+0000\n"
1212"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
1313"Language-Team: English (Australia) <en_AU@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Phone"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Camera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Gallery"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Browser"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Weather"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notepad"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendar"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Media Player"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Map"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Recent searches"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr "Rate this"
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr "(%1)"
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] "%1 review"
15387msgstr[1] "%1 reviews"
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr "Rate this"
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr "Add a review"
@@ -172,7 +102,7 @@ msgstr "Send"
172102msgid "Comments:"
173103msgstr "Comments:"
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr "Emergency Call"
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Sorry, there is nothing that matches your search."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr "Please enter %1"
po/en_GB.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-27 08:53+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Phone"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Camera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Gallery"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Browser"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Weather"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notepad"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendar"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Media Player"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Map"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Recent searches"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Sorry, there is nothing that matches your search."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr "Please enter %1"
po/eo.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-26 22:35+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Esperanto <eo@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/es.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-11-20 08:46+0000\n"
1212"Last-Translator: Adolfo Jayme Barrientos <fitoschido@gmail.com>\n"
1313"Language-Team: Spanish <es@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-21 06:43+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Teléfono"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Cámara"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galería"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Navegador"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Meteorología"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Bloc de notas"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendario"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Reproductor multimedia"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mapa"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -136,30 +68,28 @@ msgstr ""
13668"Ahora domina los gestos de bordes y puede usar el teléfono<br><br>Toque la "
13769"pantalla para comenzar"
13870
139−#: Components/PageHeader.qml:345
71+#: Components/PageHeader.qml:364
14072msgid "Recent searches"
14173msgstr "Búsquedas recientes"
14274
143−#. TRANSLATORS: Number of persons who rated this app
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "Valorar esto"
78+
14479#. TRANSLATORS: Number of persons who rated this app/video/whatever
145−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
80+#: Dash/Previews/Header.qml:93
14681#, qt-format
14782msgid "(%1)"
14883msgstr "(%1)"
14984
150−#. TRANSLATORS: Number of persons who wrote reviews for this app
15185#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
86+#: Dash/Previews/Header.qml:105
15387#, qt-format
15488msgid "%1 review"
15589msgid_plural "%1 reviews"
15690msgstr[0] "%1 reseña"
15791msgstr[1] "%1 reseñas"
15892
159−#: Dash/Apps/AppPreview.qml:135
160−msgid "Rate this"
161−msgstr "Valorar esto"
162−
16393#: Dash/Previews/Reviews.qml:74
16494msgid "Add a review"
16595msgstr "Añadir una reseña"
@@ -176,7 +106,7 @@ msgstr "Enviar"
176106msgid "Comments:"
177107msgstr "Comentarios:"
178108
179−#: Greeter/Lockscreen.qml:146
109+#: Greeter/Lockscreen.qml:149
180110msgid "Emergency Call"
181111msgstr "Llamada de emergencia"
182112
@@ -226,15 +156,7 @@ msgstr "Mantener en el lanzador"
226156msgid "Unlock from Launcher"
227157msgstr "No mantener en el lanzador"
228158
229−#: plugins/Unity/scope.cpp:408
230−msgid "Sorry, there is nothing that matches your search."
231−msgstr "No hay nada que coincida con su búsqueda."
232−
233−#: plugins/Unity/showallfilteroption.cpp:41
234−msgid "All"
235−msgstr "Todo"
236−
237−#: Shell.qml:441
159+#: Shell.qml:439
238160#, qt-format
239161msgid "Please enter %1"
240162msgstr "Introduzca %1"
po/fa.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-31 19:02+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Persian <fa@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/fi.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-11-20 08:09+0000\n"
1212"Last-Translator: Jiri Grönroos <Unknown>\n"
1313"Language-Team: Finnish <fi@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-21 06:43+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Puhelin"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Kamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galleria"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Selain"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Sää"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Muistio"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalenteri"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Mediasoitin"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Kartta"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -134,30 +66,28 @@ msgstr ""
13466"Hallitset nyt reunaeleet, joten voit aloittaa puhelimen "
13567"käytön<br><br>Napauta missä tahansa aloittaaksesi"
13668
137−#: Components/PageHeader.qml:345
69+#: Components/PageHeader.qml:364
13870msgid "Recent searches"
13971msgstr "Viimeisimmät haut"
14072
141−#. TRANSLATORS: Number of persons who rated this app
73+#: Dash/Apps/AppPreview.qml:135
74+msgid "Rate this"
75+msgstr "Arvioi tämä"
76+
14277#. TRANSLATORS: Number of persons who rated this app/video/whatever
143−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
78+#: Dash/Previews/Header.qml:93
14479#, qt-format
14580msgid "(%1)"
14681msgstr "(%1)"
14782
148−#. TRANSLATORS: Number of persons who wrote reviews for this app
14983#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
84+#: Dash/Previews/Header.qml:105
15185#, qt-format
15286msgid "%1 review"
15387msgid_plural "%1 reviews"
15488msgstr[0] "%1 arvostelu"
15589msgstr[1] "%1 arvostelua"
15690
157−#: Dash/Apps/AppPreview.qml:135
158−msgid "Rate this"
159−msgstr "Arvioi tämä"
160−
16191#: Dash/Previews/Reviews.qml:74
16292msgid "Add a review"
16393msgstr "Lisää arvostelu"
@@ -174,7 +104,7 @@ msgstr "Lähetä"
174104msgid "Comments:"
175105msgstr "Kommentit:"
176106
177−#: Greeter/Lockscreen.qml:146
107+#: Greeter/Lockscreen.qml:149
178108msgid "Emergency Call"
179109msgstr "Hätäpuhelu"
180110
@@ -224,15 +154,7 @@ msgstr "Kiinnitä käynnistimeen"
224154msgid "Unlock from Launcher"
225155msgstr "Poista käynnistimestä"
226156
227−#: plugins/Unity/scope.cpp:408
228−msgid "Sorry, there is nothing that matches your search."
229−msgstr "Hakuun täsmääviä tuloksia ei löydy."
230−
231−#: plugins/Unity/showallfilteroption.cpp:41
232−msgid "All"
233−msgstr "Kaikki"
234−
235−#: Shell.qml:441
157+#: Shell.qml:439
236158#, qt-format
237159msgid "Please enter %1"
238160msgstr "Kirjoita %1"
po/fo.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-01 15:13+0000\n"
1212"Last-Translator: Jógvan Olsen <jeggy@jebster.net>\n"
1313"Language-Team: Faroese <fo@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Fartelefon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Myndatól"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Myndasavn"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Kagi"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Veðrið"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Skriviblokkur"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalendari"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Tíanverri er tað einki sum hóskar til tína leiting."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/fr.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-27 03:21+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: French <fr@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/gd.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-09-30 10:34+0000\n"
1212"Last-Translator: Akerbeltz <fios@akerbeltz.org>\n"
1313"Language-Team: Gaelic; Scottish <gd@li.org>\n"
@@ -16,76 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
1818"(n > 2 && n < 20) ? 2 : 3;\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "Fòn"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "Camara"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "Gailearaidh"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "Facebook"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "Brabhsair"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "Twitter"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "GMail"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "An aimsir"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "Pada nan nòtaichean"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "Am mìosachan"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "Cluicheadair mheadhanan"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr "Evernote"
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "Mapa"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr "Pinterest"
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr "SoundCloud"
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "An Uicipeid"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "YouTube"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
8921
9022#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
@@ -139,20 +71,22 @@ msgid ""
13971"phone<br><br>Tap anywhere to start"
14072msgstr ""
14173
142−#: Components/PageHeader.qml:345
74+#: Components/PageHeader.qml:364
14375msgid "Recent searches"
14476msgstr "Na lorg thu o chionn goirid"
14577
146−#. TRANSLATORS: Number of persons who rated this app
78+#: Dash/Apps/AppPreview.qml:135
79+msgid "Rate this"
80+msgstr "Rangaich seo"
81+
14782#. TRANSLATORS: Number of persons who rated this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
83+#: Dash/Previews/Header.qml:93
14984#, qt-format
15085msgid "(%1)"
15186msgstr "(%1)"
15287
153−#. TRANSLATORS: Number of persons who wrote reviews for this app
15488#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
155−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
89+#: Dash/Previews/Header.qml:105
15690#, qt-format
15791msgid "%1 review"
15892msgid_plural "%1 reviews"
@@ -161,10 +95,6 @@ msgstr[1] "%1 lèirmheas"
16195msgstr[2] "%1 lèirmheasan"
16296msgstr[3] "%1 lèirmheas"
16397
164−#: Dash/Apps/AppPreview.qml:135
165−msgid "Rate this"
166−msgstr "Rangaich seo"
167−
16898#: Dash/Previews/Reviews.qml:74
16999msgid "Add a review"
170100msgstr "Cuir lèirmheas ris"
@@ -181,7 +111,7 @@ msgstr "Cuir"
181111msgid "Comments:"
182112msgstr "Beachdan"
183113
184−#: Greeter/Lockscreen.qml:146
114+#: Greeter/Lockscreen.qml:149
185115msgid "Emergency Call"
186116msgstr "Gairm èiginn"
187117
@@ -231,15 +161,7 @@ msgstr ""
231161msgid "Unlock from Launcher"
232162msgstr ""
233163
234−#: plugins/Unity/scope.cpp:408
235−msgid "Sorry, there is nothing that matches your search."
236−msgstr "Tha sinn duilich ach chan eil dad a' freagairt ris na lorg thu."
237−
238−#: plugins/Unity/showallfilteroption.cpp:41
239−msgid "All"
240−msgstr ""
241−
242−#: Shell.qml:441
164+#: Shell.qml:439
243165#, qt-format
244166msgid "Please enter %1"
245167msgstr "Cuir a-steach %1"
po/gl.po+16−94
@@ -7,84 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
11−"PO-Revision-Date: 2013-10-03 18:49+0000\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-12-06 17:15+0000\n"
1212"Last-Translator: Marcos Lans <Unknown>\n"
1313"Language-Team: Galician <gl@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Teléfono"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Cámara"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galería"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Navegador"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "O tempo"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Bloc de notas"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendario"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Reprodutor multimedia"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mapa"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-12-07 06:35+0000\n"
19+"X-Generator: Launchpad (build 16869)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -134,30 +66,28 @@ msgstr ""
13466"Xa domina os xestos desde os bordos e pode comezar a usar o "
13567"móbil<br><br>Toque en calquera sitio para comezar"
13668
137−#: Components/PageHeader.qml:345
69+#: Components/PageHeader.qml:364
13870msgid "Recent searches"
13971msgstr "Buscas recentes"
14072
141−#. TRANSLATORS: Number of persons who rated this app
73+#: Dash/Apps/AppPreview.qml:135
74+msgid "Rate this"
75+msgstr "Valore isto"
76+
14277#. TRANSLATORS: Number of persons who rated this app/video/whatever
143−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
78+#: Dash/Previews/Header.qml:93
14479#, qt-format
14580msgid "(%1)"
14681msgstr "(%1)"
14782
148−#. TRANSLATORS: Number of persons who wrote reviews for this app
14983#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
84+#: Dash/Previews/Header.qml:105
15185#, qt-format
15286msgid "%1 review"
15387msgid_plural "%1 reviews"
15488msgstr[0] "%1 opinión"
15589msgstr[1] "%1 opinións"
15690
157−#: Dash/Apps/AppPreview.qml:135
158−msgid "Rate this"
159−msgstr "Valore isto"
160−
16191#: Dash/Previews/Reviews.qml:74
16292msgid "Add a review"
16393msgstr "Engadir unha opinión"
@@ -174,7 +104,7 @@ msgstr "Enviar"
174104msgid "Comments:"
175105msgstr "Comentarios:"
176106
177−#: Greeter/Lockscreen.qml:146
107+#: Greeter/Lockscreen.qml:149
178108msgid "Emergency Call"
179109msgstr "Chamada de emerxencia"
180110
@@ -209,7 +139,7 @@ msgstr "Falando…"
209139
210140#: Notifications/NotificationMenuItemFactory.qml:89
211141msgid "Show password"
212−msgstr ""
142+msgstr "Mostrar contrasinal"
213143
214144#: Panel/SearchIndicator.qml:27
215145msgid "Search"
@@ -218,21 +148,13 @@ msgstr "Buscar"
218148#: plugins/Unity/Launcher/launcheritem.cpp:43
219149#: plugins/Unity/Launcher/launcheritem.cpp:73
220150msgid "Lock to Launcher"
221−msgstr ""
151+msgstr "Manter no Iniciador"
222152
223153#: plugins/Unity/Launcher/launcheritem.cpp:73
224154msgid "Unlock from Launcher"
225−msgstr ""
226−
227−#: plugins/Unity/scope.cpp:408
228−msgid "Sorry, there is nothing that matches your search."
229−msgstr "Sentímolo, non hai nada que coincida con esta busca."
230−
231−#: plugins/Unity/showallfilteroption.cpp:41
232−msgid "All"
233−msgstr "Todo"
155+msgstr "Non manter no Iniciador"
234156
235−#: Shell.qml:441
157+#: Shell.qml:439
236158#, qt-format
237159msgid "Please enter %1"
238160msgstr "Introduza %1"
po/he.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-11-20 08:30+0000\n"
1212"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
1313"Language-Team: Hebrew <he@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-21 06:43+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "טלפון"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "מצלמה"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "גלריה"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "דפדפן"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "מזג אוויר"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "פנקס רשימות"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "לוח שנה"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "נגן מדיה"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "מפה"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "ויקיפדיה"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -134,30 +66,28 @@ msgstr ""
13466"עתה מכשסיימת את ההשתלמות לשימוש במחוות קצה יש לך את הכלים להשתמש "
13567"בטלפון<br><br>ניתן לגעת במקום כלשהו במסך כדי להתחיל"
13668
137−#: Components/PageHeader.qml:345
69+#: Components/PageHeader.qml:364
13870msgid "Recent searches"
13971msgstr "חיפושים אחרונים"
14072
141−#. TRANSLATORS: Number of persons who rated this app
73+#: Dash/Apps/AppPreview.qml:135
74+msgid "Rate this"
75+msgstr "דירוג היישום"
76+
14277#. TRANSLATORS: Number of persons who rated this app/video/whatever
143−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
78+#: Dash/Previews/Header.qml:93
14479#, qt-format
14580msgid "(%1)"
14681msgstr "(%1)"
14782
148−#. TRANSLATORS: Number of persons who wrote reviews for this app
14983#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
84+#: Dash/Previews/Header.qml:105
15185#, qt-format
15286msgid "%1 review"
15387msgid_plural "%1 reviews"
15488msgstr[0] "סקירה %1"
15589msgstr[1] "%1 סקירות"
15690
157−#: Dash/Apps/AppPreview.qml:135
158−msgid "Rate this"
159−msgstr "דירוג היישום"
160−
16191#: Dash/Previews/Reviews.qml:74
16292msgid "Add a review"
16393msgstr "הוספת סקירה"
@@ -174,7 +104,7 @@ msgstr "שליחה"
174104msgid "Comments:"
175105msgstr "הערות:"
176106
177−#: Greeter/Lockscreen.qml:146
107+#: Greeter/Lockscreen.qml:149
178108msgid "Emergency Call"
179109msgstr "שיחת חירום"
180110
@@ -224,15 +154,7 @@ msgstr "נעילה למשגר"
224154msgid "Unlock from Launcher"
225155msgstr "הפרדה מהמשגר"
226156
227−#: plugins/Unity/scope.cpp:408
228−msgid "Sorry, there is nothing that matches your search."
229−msgstr "שום דבר אינו תואם לחיפוש שלך, עמך הסליחה."
230−
231−#: plugins/Unity/showallfilteroption.cpp:41
232−msgid "All"
233−msgstr "הכול"
234−
235−#: Shell.qml:441
157+#: Shell.qml:439
236158#, qt-format
237159msgid "Please enter %1"
238160msgstr "נא להזין %1"
po/hr.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-27 04:14+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Croatian <hr@li.org>\n"
@@ -16,76 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr ""
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr ""
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr ""
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr ""
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr ""
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr ""
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr ""
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr ""
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr ""
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr ""
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr ""
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr ""
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr ""
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr ""
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr ""
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr ""
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr ""
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
8921
9022#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
@@ -133,30 +65,28 @@ msgid ""
13365"phone<br><br>Tap anywhere to start"
13466msgstr ""
13567
136−#: Components/PageHeader.qml:345
68+#: Components/PageHeader.qml:364
13769msgid "Recent searches"
13870msgstr "Nedavne pretrage"
13971
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr ""
75+
14176#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
14378#, qt-format
14479msgid "(%1)"
14580msgstr ""
14681
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
14882#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
15084#, qt-format
15185msgid "%1 review"
15286msgid_plural "%1 reviews"
15387msgstr[0] ""
15488msgstr[1] ""
15589
156−#: Dash/Apps/AppPreview.qml:135
157−msgid "Rate this"
158−msgstr ""
159−
16090#: Dash/Previews/Reviews.qml:74
16191msgid "Add a review"
16292msgstr ""
@@ -173,7 +103,7 @@ msgstr ""
173103msgid "Comments:"
174104msgstr ""
175105
176−#: Greeter/Lockscreen.qml:146
106+#: Greeter/Lockscreen.qml:149
177107msgid "Emergency Call"
178108msgstr ""
179109
@@ -223,15 +153,7 @@ msgstr ""
223153msgid "Unlock from Launcher"
224154msgstr ""
225155
226−#: plugins/Unity/scope.cpp:408
227−msgid "Sorry, there is nothing that matches your search."
228−msgstr "Nažalost, ne postoji ništa što odgovara vašoj pretrazi."
229−
230−#: plugins/Unity/showallfilteroption.cpp:41
231−msgid "All"
232−msgstr ""
233−
234−#: Shell.qml:441
156+#: Shell.qml:439
235157#, qt-format
236158msgid "Please enter %1"
237159msgstr ""
po/hu.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-27 04:28+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Hungarian <hu@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Legutóbbi keresések"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Elnézést, nincs találat a keresésre."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/hy.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-27 04:43+0000\n"
1212"Last-Translator: iAbaS <sosabazyan@yandex.ru>\n"
1313"Language-Team: Armenian <hy@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Վերջին որոնումներ"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Կներերք, բայց Ձեր հարցումով ոչինչ չկար"
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/id.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-26 22:35+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Indonesian <id@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/is.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-09-18 16:22+0000\n"
1212"Last-Translator: Andri Thorlacius <Unknown>\n"
1313"Language-Team: Icelandic <is@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Sími"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Myndavél"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Myndasafn"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Vafri"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Veður"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Skrifblokk"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Dagatal"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Margmiðlunarspilari"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Kort"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -133,30 +65,28 @@ msgid ""
13365"phone<br><br>Tap anywhere to start"
13466msgstr ""
13567
136−#: Components/PageHeader.qml:345
68+#: Components/PageHeader.qml:364
13769msgid "Recent searches"
13870msgstr "Nýlegar leitir"
13971
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr "Gefa þessu einkunn"
75+
14176#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
14378#, qt-format
14479msgid "(%1)"
14580msgstr "(%1)"
14681
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
14882#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
15084#, qt-format
15185msgid "%1 review"
15286msgid_plural "%1 reviews"
15387msgstr[0] "%1 ummæli"
15488msgstr[1] "%1 ummæli"
15589
156−#: Dash/Apps/AppPreview.qml:135
157−msgid "Rate this"
158−msgstr "Gefa þessu einkunn"
159−
16090#: Dash/Previews/Reviews.qml:74
16191msgid "Add a review"
16292msgstr "Gefa umsögn"
@@ -173,7 +103,7 @@ msgstr "Senda"
173103msgid "Comments:"
174104msgstr "Athugasemdir:"
175105
176−#: Greeter/Lockscreen.qml:146
106+#: Greeter/Lockscreen.qml:149
177107msgid "Emergency Call"
178108msgstr "Neyðarsímtal"
179109
@@ -223,15 +153,7 @@ msgstr ""
223153msgid "Unlock from Launcher"
224154msgstr ""
225155
226−#: plugins/Unity/scope.cpp:408
227−msgid "Sorry, there is nothing that matches your search."
228−msgstr "Því miður, það var ekkert sem passaði við leitarorðið þitt."
229−
230−#: plugins/Unity/showallfilteroption.cpp:41
231−msgid "All"
232−msgstr ""
233−
234−#: Shell.qml:441
156+#: Shell.qml:439
235157#, qt-format
236158msgid "Please enter %1"
237159msgstr ""
po/it.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-07 09:34+0000\n"
1212"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
1313"Language-Team: Italian <it@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefono"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Fotocamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galleria"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Browser"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Meteo"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Blocco note"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendario"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Riproduttore multimediale"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mappa"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -139,30 +71,28 @@ msgstr ""
13971"I gesti sui bordi sono stati configurati ed è possibile iniziare a usare il "
14072"telefono<br><br>Toccare in un punto qualunque per iniziare"
14173
142−#: Components/PageHeader.qml:345
74+#: Components/PageHeader.qml:364
14375msgid "Recent searches"
14476msgstr "Ricerche recenti"
14577
146−#. TRANSLATORS: Number of persons who rated this app
78+#: Dash/Apps/AppPreview.qml:135
79+msgid "Rate this"
80+msgstr "Valuta"
81+
14782#. TRANSLATORS: Number of persons who rated this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
83+#: Dash/Previews/Header.qml:93
14984#, qt-format
15085msgid "(%1)"
15186msgstr "(%1)"
15287
153−#. TRANSLATORS: Number of persons who wrote reviews for this app
15488#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
155−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
89+#: Dash/Previews/Header.qml:105
15690#, qt-format
15791msgid "%1 review"
15892msgid_plural "%1 reviews"
15993msgstr[0] "%1 recensione"
16094msgstr[1] "%1 recensioni"
16195
162−#: Dash/Apps/AppPreview.qml:135
163−msgid "Rate this"
164−msgstr "Valuta"
165−
16696#: Dash/Previews/Reviews.qml:74
16797msgid "Add a review"
16898msgstr "Aggiungi una recensione"
@@ -179,7 +109,7 @@ msgstr "Invia"
179109msgid "Comments:"
180110msgstr "Commenti:"
181111
182−#: Greeter/Lockscreen.qml:146
112+#: Greeter/Lockscreen.qml:149
183113msgid "Emergency Call"
184114msgstr "Chiamata di emergenza"
185115
@@ -229,15 +159,7 @@ msgstr ""
229159msgid "Unlock from Launcher"
230160msgstr ""
231161
232−#: plugins/Unity/scope.cpp:408
233−msgid "Sorry, there is nothing that matches your search."
234−msgstr "Nessun risultato corrispondente alla ricerca."
235−
236−#: plugins/Unity/showallfilteroption.cpp:41
237−msgid "All"
238−msgstr "Tutto"
239−
240−#: Shell.qml:441
162+#: Shell.qml:439
241163#, qt-format
242164msgid "Please enter %1"
243165msgstr "Inserire %1"
po/ja.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-26 22:36+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Japanese <ja@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/km.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-11-20 07:34+0000\n"
1212"Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n"
1313"Language-Team: Khmer <km@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-21 06:43+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "ទូរស័ព្ទ"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "ម៉ាស៊ីន​ថ​ត"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "វិចិត្រសាល"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "កម្មវិធី​រុករក"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "អាកាសធាតុ"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notepad"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "ប្រតិទិន"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "កម្មវិធី​ចាក់​មេឌៀ"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "ផែនទី"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "វីគីភីឌៀ"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -137,29 +69,27 @@ msgstr ""
13769"និង​អាច​ចាប់ផ្ដើម​ប្រើ​ទូរស័ព្ទ​បាន<br><br>ប៉ះ​កន្លែង​ណា​មួយ​ "
13870"ដើម្បី​ចាប់ផ្ដើម"
13971
140−#: Components/PageHeader.qml:345
72+#: Components/PageHeader.qml:364
14173msgid "Recent searches"
14274msgstr "ការ​ស្វែងរក​ថ្មី"
14375
144−#. TRANSLATORS: Number of persons who rated this app
76+#: Dash/Apps/AppPreview.qml:135
77+msgid "Rate this"
78+msgstr "វាយតម្លៃ​វា"
79+
14580#. TRANSLATORS: Number of persons who rated this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
81+#: Dash/Previews/Header.qml:93
14782#, qt-format
14883msgid "(%1)"
14984msgstr "(%1)"
15085
151−#. TRANSLATORS: Number of persons who wrote reviews for this app
15286#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
153−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
87+#: Dash/Previews/Header.qml:105
15488#, qt-format
15589msgid "%1 review"
15690msgid_plural "%1 reviews"
15791msgstr[0] "ពិនិត្យ​មើល %1"
15892
159−#: Dash/Apps/AppPreview.qml:135
160−msgid "Rate this"
161−msgstr "វាយតម្លៃ​វា"
162−
16393#: Dash/Previews/Reviews.qml:74
16494msgid "Add a review"
16595msgstr "បន្ថែម​ការ​ពិនិត្យ"
@@ -176,7 +106,7 @@ msgstr "ផ្ញើ"
176106msgid "Comments:"
177107msgstr "មតិយោបល់៖"
178108
179−#: Greeter/Lockscreen.qml:146
109+#: Greeter/Lockscreen.qml:149
180110msgid "Emergency Call"
181111msgstr "ការ​ហៅ​ពេល​អាសន្ន"
182112
@@ -226,15 +156,7 @@ msgstr "ចាក់​សោ​​ទៅ​កម្មវិធី​ចាប
226156msgid "Unlock from Launcher"
227157msgstr "ដោះសោ​ពី​កម្មវិធី​ចាប់ផ្ដើម"
228158
229−#: plugins/Unity/scope.cpp:408
230−msgid "Sorry, there is nothing that matches your search."
231−msgstr "សូម​ទោស មិនមាន​ពាក្យ​ដែល​អ្នក​ស្វែងរក​ទេ​។"
232−
233−#: plugins/Unity/showallfilteroption.cpp:41
234−msgid "All"
235−msgstr "ទាំង​អស់"
236−
237−#: Shell.qml:441
159+#: Shell.qml:439
238160#, qt-format
239161msgid "Please enter %1"
240162msgstr "សូម​បញ្ចូល %1"
po/kn.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-27 05:43+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Kannada <kn@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "ಇತ್ತೀಚಿನ ಹುಡುಕಾಟಗಳು"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "ಕ್ಷಮಿಸಿ ನಿಮ್ಮ ಶೋಧನೆಗೆ ಸರಿಯಾದ ಹೊಂದಾಣಿಕೆಗಳು ದೊರಕುತ್ತಿಲ್ಲ"
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/ko.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-10 07:04+0000\n"
1212"Last-Translator: Kim Boram <boramism@gmail.com>\n"
1313"Language-Team: Korean <ko@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "전화"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "카메라"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "갤러리"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "페이스북"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "브라우저"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "트위터"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "지메일"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "날씨"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "메모장"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "달력"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "미디어 재생기"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "에버노트"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "지도"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "핀터레스트"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "사운드클라우드"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "위키백과"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "유튜브"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "최근 검색"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/ky.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-27 06:17+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Kirghiz <ky@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Соңку издөөлөр"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Тилекке каршы, сиздин издөөңүзгө эч нерсе дал келген жок."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/lo.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-02 10:00+0000\n"
1212"Last-Translator: Anousak <anousak@gmail.com>\n"
1313"Language-Team: Lao <lo@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "ໂທລະສັບ"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "ກ້ອງ"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Gallery"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "ບາວເຊິ"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "ສະພາບອາກາດ"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Noetpad"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "ປະຕິທິນ"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "ເເຜນທີ່"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "ິYouTube"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr "(%1)"
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr "ສົ່ງ"
172102msgid "Comments:"
173103msgstr "ຄໍ່ເຫັນ"
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr "ທັງໝົດ"
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr "ກະລູນາປ້ອນ %1"
po/lv.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-09-28 16:29+0000\n"
1212"Last-Translator: Jānis-Marks Gailis <jeanmarc.gailis@gmail.com>\n"
1313"Language-Team: Latvian <lv@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Tālrunis"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Fotokamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galerija"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Pārlūkprogramma"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Laikapstākļi"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Bloknots"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalendārs"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Mēdiju Atskaņotājs"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Karte"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Vikipēdija"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Nesen veiktās meklēšanas"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Diemžēl nekas neatbilst jūsu meklētajam."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/ml.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-11-23 11:44+0000\n"
1212"Last-Translator: STyM Alfazz <Unknown>\n"
1313"Language-Team: Malayalam <ml@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-24 05:50+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "ഫോണ്‍"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "ക്യാമറ"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "ഗ്യാലറി"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "ഫേസ്ബുക്ക്"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "ബ്രൗസര്‍"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "ട്വിറ്റര്‍"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "ജിമെയില്‍"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "കാലാവസ്ഥ"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "നോട്പാഡ്"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "കലണ്ടര്‍"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "മീഡിയ പ്ലെയര്‍"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "എവര്‍നോട്ട്"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "ഭുപടം"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "പിന്‍ട്രസ്റ്റ്"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "സൗണ്ട്ക്ലൗഡ്"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "വിക്കിപീഡിയ"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "യുട്യൂബ്"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -136,30 +68,28 @@ msgstr ""
13668"നിങ്ങളിപ്പോള്‍ സ്വൈപുകളും മറ്റും പഠിച്ചിരിക്കുന്നു<br><br>തുടങ്ങാന്‍ "
13769"എവിടെയെങ്കിലും ടാപ് ചെയ്യുക"
13870
139−#: Components/PageHeader.qml:345
71+#: Components/PageHeader.qml:364
14072msgid "Recent searches"
14173msgstr "സമീപകാല തിരയലുകള്‍"
14274
143−#. TRANSLATORS: Number of persons who rated this app
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "ഇത് അവലോകനം ചെയ്യുക"
78+
14479#. TRANSLATORS: Number of persons who rated this app/video/whatever
145−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
80+#: Dash/Previews/Header.qml:93
14681#, qt-format
14782msgid "(%1)"
14883msgstr "(%1)"
14984
150−#. TRANSLATORS: Number of persons who wrote reviews for this app
15185#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
86+#: Dash/Previews/Header.qml:105
15387#, qt-format
15488msgid "%1 review"
15589msgid_plural "%1 reviews"
15690msgstr[0] "%1 അവലോകനം"
15791msgstr[1] "%1 അവലോകനങ്ങള്‍"
15892
159−#: Dash/Apps/AppPreview.qml:135
160−msgid "Rate this"
161−msgstr "ഇത് അവലോകനം ചെയ്യുക"
162−
16393#: Dash/Previews/Reviews.qml:74
16494msgid "Add a review"
16595msgstr "ഒരു അവലോകനം ചേര്‍ക്കുക"
@@ -176,7 +106,7 @@ msgstr "അയയ്‌ക്കുക"
176106msgid "Comments:"
177107msgstr "അഭിപ്രായങ്ങള്‍:"
178108
179−#: Greeter/Lockscreen.qml:146
109+#: Greeter/Lockscreen.qml:149
180110msgid "Emergency Call"
181111msgstr "അടിയന്തിര വിളി"
182112
@@ -226,15 +156,7 @@ msgstr "വിക്ഷേപികയില്‍ സ്ഥിരപ്പെ
226156msgid "Unlock from Launcher"
227157msgstr "വിക്ഷേപികാ സ്ഥിരപ്പെടുത്തല്‍ ഒഴിവാക്കുക"
228158
229−#: plugins/Unity/scope.cpp:408
230−msgid "Sorry, there is nothing that matches your search."
231−msgstr "ക്ഷമിക്കണം, താങ്കളുടെ തിരച്ചിലുമായി ഒത്തുപോകുന്ന ഒന്നും തന്നെയില്ല"
232−
233−#: plugins/Unity/showallfilteroption.cpp:41
234−msgid "All"
235−msgstr "എല്ലാം"
236−
237−#: Shell.qml:441
159+#: Shell.qml:439
238160#, qt-format
239161msgid "Please enter %1"
240162msgstr "ദയവായി %1 നല്‍കുക"
po/my.po+20−98
@@ -7,84 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
11−"PO-Revision-Date: 2013-10-09 11:35+0000\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-12-12 11:12+0000\n"
1212"Last-Translator: Pyae Sone <Unknown>\n"
1313"Language-Team: Burmese <my@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "ဖုန်း"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "ကင်မရာ"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "ဓာတ်ပုံသိမ်းထားသည့်နေရာ"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Browser"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "ဂျီမေးလ်"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "ရာသီဥတု"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notepad"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "ပြက္ခဒိန်"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "မီဒီယာဖွင့်စက်"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "မြေပုံ"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "ဝီကီပီဒီးယား"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-12-13 06:46+0000\n"
19+"X-Generator: Launchpad (build 16869)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "မကြာသေးခင်က ရှာဖွေခြင်း"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr "ဒီဟာကိုအမှတ်ပေးမည်"
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr "(%1)"
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr "ဒီဟာကိုအမှတ်ပေးမည်"
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,18 +102,18 @@ msgstr "ပို့မည်"
172102msgid "Comments:"
173103msgstr "မှတ်ချက်များ-"
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177−msgstr ""
107+msgstr "အရေးပေါ်ခေါ်မည်"
178108
179109#: Greeter/PassphraseLockscreen.qml:59
180110#, qt-format
181111msgid "Hello %1"
182−msgstr ""
112+msgstr "ဟဲလို %1"
183113
184114#: Greeter/PassphraseLockscreen.qml:59
185115msgid "Hello"
186−msgstr ""
116+msgstr "ဟဲလို"
187117
188118#: Hud/HudParametrizedActionsPage.qml:132
189119msgid "Confirm"
@@ -207,7 +137,7 @@ msgstr "ပြောနေသည်"
207137
208138#: Notifications/NotificationMenuItemFactory.qml:89
209139msgid "Show password"
210−msgstr ""
140+msgstr "စကားဝှက်ကိုပြ"
211141
212142#: Panel/SearchIndicator.qml:27
213143msgid "Search"
@@ -216,21 +146,13 @@ msgstr "ရှာဖွေ"
216146#: plugins/Unity/Launcher/launcheritem.cpp:43
217147#: plugins/Unity/Launcher/launcheritem.cpp:73
218148msgid "Lock to Launcher"
219−msgstr ""
149+msgstr "Launcher တွင်ထားမည်"
220150
221151#: plugins/Unity/Launcher/launcheritem.cpp:73
222152msgid "Unlock from Launcher"
223−msgstr ""
153+msgstr "Launcher မှဖြုတ်မည်"
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "ဆောရီး၊ သင်၏ရှာဖွေမူနှင့်တူညီတာဘာမှမရှိပါ။"
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236−msgstr ""
158+msgstr "%1ကိုရိုက်ထည့်ပါ"
po/nb.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-27 07:02+0000\n"
1212"Last-Translator: Joakim Langvand <jlangvand@gmail.com>\n"
1313"Language-Team: Norwegian Bokmal <nb@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Kamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Vær"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notisblokk"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalender"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Siste søk"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Søket ga ingen treff."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/nl.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-27 07:19+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Dutch <nl@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Recente zoekopdrachten"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "Er is helaas niets dat met uw zoekopdracht overeenkomt."
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/pl.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-13 13:44+0000\n"
1212"Last-Translator: GTriderXC <gtriderxc@yahoo.com>\n"
1313"Language-Team: Polish <pl@li.org>\n"
@@ -16,76 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
1818"|| n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "Telefon"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "Aparat"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "Galeria"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "Facebook"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "Internet"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "Twitter"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "GMail"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "Pogoda"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "Notatki"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "Kalendarz"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "Odtwarzacz multimediów"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr "Evernote"
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "Mapa"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr "Pinterest"
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr "SoundCloud"
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "Wikipedia"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "YouTube"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
8921
9022#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
@@ -137,20 +69,22 @@ msgstr ""
13769"Polecenia aktywatorów krawędzi ekranu zostały opanowane<br><br>Dotknij "
13870"gdziekolwiek aby kontynuować"
13971
140−#: Components/PageHeader.qml:345
72+#: Components/PageHeader.qml:364
14173msgid "Recent searches"
14274msgstr "Ostatnie wyszukiwania"
14375
144−#. TRANSLATORS: Number of persons who rated this app
76+#: Dash/Apps/AppPreview.qml:135
77+msgid "Rate this"
78+msgstr "Oceń to"
79+
14580#. TRANSLATORS: Number of persons who rated this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
81+#: Dash/Previews/Header.qml:93
14782#, qt-format
14883msgid "(%1)"
14984msgstr "(%1)"
15085
151−#. TRANSLATORS: Number of persons who wrote reviews for this app
15286#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
153−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
87+#: Dash/Previews/Header.qml:105
15488#, qt-format
15589msgid "%1 review"
15690msgid_plural "%1 reviews"
@@ -158,10 +92,6 @@ msgstr[0] "%1 opinia"
15892msgstr[1] "%1 opinie"
15993msgstr[2] "%1 opinii"
16094
161−#: Dash/Apps/AppPreview.qml:135
162−msgid "Rate this"
163−msgstr "Oceń to"
164−
16595#: Dash/Previews/Reviews.qml:74
16696msgid "Add a review"
16797msgstr "Dodaj recenzję"
@@ -178,7 +108,7 @@ msgstr "Wyślij"
178108msgid "Comments:"
179109msgstr "Komentarze:"
180110
181−#: Greeter/Lockscreen.qml:146
111+#: Greeter/Lockscreen.qml:149
182112msgid "Emergency Call"
183113msgstr "Telefon ratunkowy"
184114
@@ -228,15 +158,7 @@ msgstr ""
228158msgid "Unlock from Launcher"
229159msgstr ""
230160
231−#: plugins/Unity/scope.cpp:408
232−msgid "Sorry, there is nothing that matches your search."
233−msgstr "Nie znaleziono pasujących wyników."
234−
235−#: plugins/Unity/showallfilteroption.cpp:41
236−msgid "All"
237−msgstr "Wszystko"
238−
239−#: Shell.qml:441
161+#: Shell.qml:439
240162#, qt-format
241163msgid "Please enter %1"
242164msgstr "Wprowadź %1"
po/pt_BR.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-01 13:05+0000\n"
1212"Last-Translator: Rafael Neri <Unknown>\n"
1313"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefone"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Câmera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galeria"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Navegador"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Clima"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Bloco de notas"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendário"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Media Player"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mapa"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipédia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -134,30 +66,28 @@ msgid ""
13466"phone<br><br>Tap anywhere to start"
13567msgstr ""
13668
137−#: Components/PageHeader.qml:345
69+#: Components/PageHeader.qml:364
13870msgid "Recent searches"
13971msgstr "Pesquisas recentes"
14072
141−#. TRANSLATORS: Number of persons who rated this app
73+#: Dash/Apps/AppPreview.qml:135
74+msgid "Rate this"
75+msgstr "Avaliar isto"
76+
14277#. TRANSLATORS: Number of persons who rated this app/video/whatever
143−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
78+#: Dash/Previews/Header.qml:93
14479#, qt-format
14580msgid "(%1)"
14681msgstr "(%1)"
14782
148−#. TRANSLATORS: Number of persons who wrote reviews for this app
14983#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
84+#: Dash/Previews/Header.qml:105
15185#, qt-format
15286msgid "%1 review"
15387msgid_plural "%1 reviews"
15488msgstr[0] "%1 análise"
15589msgstr[1] "%1 análises"
15690
157−#: Dash/Apps/AppPreview.qml:135
158−msgid "Rate this"
159−msgstr "Avaliar isto"
160−
16191#: Dash/Previews/Reviews.qml:74
16292msgid "Add a review"
16393msgstr "Adicionar uma análise"
@@ -174,7 +104,7 @@ msgstr "Enviar"
174104msgid "Comments:"
175105msgstr "Comentários:"
176106
177−#: Greeter/Lockscreen.qml:146
107+#: Greeter/Lockscreen.qml:149
178108msgid "Emergency Call"
179109msgstr "Chamada de emergência"
180110
@@ -224,15 +154,7 @@ msgstr ""
224154msgid "Unlock from Launcher"
225155msgstr ""
226156
227−#: plugins/Unity/scope.cpp:408
228−msgid "Sorry, there is nothing that matches your search."
229−msgstr "Desculpe, não há nada que corresponda à sua pesquisa."
230−
231−#: plugins/Unity/showallfilteroption.cpp:41
232−msgid "All"
233−msgstr ""
234−
235−#: Shell.qml:441
157+#: Shell.qml:439
236158#, qt-format
237159msgid "Please enter %1"
238160msgstr "Por favor, digite %1"
po/ro.po+12−91
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-27 07:53+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Romanian <ro@li.org>\n"
@@ -16,76 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
1818"== 0) && (n != 0))) ? 2: 1));\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr ""
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr ""
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr ""
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr ""
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr ""
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr ""
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr ""
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr ""
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr ""
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr ""
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr ""
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr ""
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr ""
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr ""
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr ""
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr ""
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr ""
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
8921
9022#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
@@ -133,30 +65,28 @@ msgid ""
13365"phone<br><br>Tap anywhere to start"
13466msgstr ""
13567
136−#: Components/PageHeader.qml:345
68+#: Components/PageHeader.qml:364
13769msgid "Recent searches"
13870msgstr "Căutări recente"
13971
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr ""
75+
14176#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
14378#, qt-format
14479msgid "(%1)"
14580msgstr ""
14681
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
14882#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
15084#, qt-format
15185msgid "%1 review"
15286msgid_plural "%1 reviews"
15387msgstr[0] ""
15488msgstr[1] ""
15589
156−#: Dash/Apps/AppPreview.qml:135
157−msgid "Rate this"
158−msgstr ""
159−
16090#: Dash/Previews/Reviews.qml:74
16191msgid "Add a review"
16292msgstr ""
@@ -173,7 +103,7 @@ msgstr ""
173103msgid "Comments:"
174104msgstr ""
175105
176−#: Greeter/Lockscreen.qml:146
106+#: Greeter/Lockscreen.qml:149
177107msgid "Emergency Call"
178108msgstr ""
179109
@@ -223,16 +153,7 @@ msgstr ""
223153msgid "Unlock from Launcher"
224154msgstr ""
225155
226−#: plugins/Unity/scope.cpp:408
227−msgid "Sorry, there is nothing that matches your search."
228−msgstr ""
229−"Ne pare rău, nu este nimic care se potrivește căutării dumneavoastră."
230−
231−#: plugins/Unity/showallfilteroption.cpp:41
232−msgid "All"
233−msgstr ""
234−
235−#: Shell.qml:441
156+#: Shell.qml:439
236157#, qt-format
237158msgid "Please enter %1"
238159msgstr ""
po/ru.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-01 05:55+0000\n"
1212"Last-Translator: Zonov Roman <Unknown>\n"
1313"Language-Team: Russian <ru@li.org>\n"
@@ -16,76 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "Телефон"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "Камера"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "Галерея"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "Facebook"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "Обозреватель"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "Twitter"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "GMail"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "Погода"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "Блокнот"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "Календарь"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "Медиапроигрыватель"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr "Evernote"
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "Карты"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr "Pinterest"
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr "SoundCloud"
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "Википедия"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "YouTube"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
8921
9022#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
@@ -138,29 +70,27 @@ msgid ""
13870"phone<br><br>Tap anywhere to start"
13971msgstr ""
14072
141−#: Components/PageHeader.qml:345
73+#: Components/PageHeader.qml:364
14274msgid "Recent searches"
14375msgstr "Последние поисковые запросы"
14476
145−#. TRANSLATORS: Number of persons who rated this app
77+#: Dash/Apps/AppPreview.qml:135
78+msgid "Rate this"
79+msgstr "Оцените это"
80+
14681#. TRANSLATORS: Number of persons who rated this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
82+#: Dash/Previews/Header.qml:93
14883#, qt-format
14984msgid "(%1)"
15085msgstr "(%1)"
15186
152−#. TRANSLATORS: Number of persons who wrote reviews for this app
15387#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
154−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
88+#: Dash/Previews/Header.qml:105
15589#, qt-format
15690msgid "%1 review"
15791msgid_plural "%1 reviews"
15892msgstr[0] "%1 отзыв"
15993
160−#: Dash/Apps/AppPreview.qml:135
161−msgid "Rate this"
162−msgstr "Оцените это"
163−
16494#: Dash/Previews/Reviews.qml:74
16595msgid "Add a review"
16696msgstr "Добавьте отзыв"
@@ -177,7 +107,7 @@ msgstr "Отправить"
177107msgid "Comments:"
178108msgstr "Комментарии:"
179109
180−#: Greeter/Lockscreen.qml:146
110+#: Greeter/Lockscreen.qml:149
181111msgid "Emergency Call"
182112msgstr "Экстренный вызов"
183113
@@ -227,15 +157,7 @@ msgstr ""
227157msgid "Unlock from Launcher"
228158msgstr ""
229159
230−#: plugins/Unity/scope.cpp:408
231−msgid "Sorry, there is nothing that matches your search."
232−msgstr "Извините, поиск не дал результатов."
233−
234−#: plugins/Unity/showallfilteroption.cpp:41
235−msgid "All"
236−msgstr ""
237−
238−#: Shell.qml:441
160+#: Shell.qml:439
239161#, qt-format
240162msgid "Please enter %1"
241163msgstr "Пожалуйста, введите %1"
po/shn.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-07 11:46+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Shan <shn@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=(n == 1) ? 0 : 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/si.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-26 22:36+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Sinhalese <si@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/sl.po+16−94
@@ -7,8 +7,8 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
11−"PO-Revision-Date: 2013-10-02 10:55+0000\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-11-30 08:20+0000\n"
1212"Last-Translator: Damir Jerovšek <Unknown>\n"
1313"Language-Team: Slovenian <sl@li.org>\n"
1414"MIME-Version: 1.0\n"
@@ -16,76 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
1818"n%100==4 ? 3 : 0);\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "Telefon"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "Fotoaparat"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "Galerija"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "Facebook"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "Brskalnik"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "Twitter"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "GMail"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "Vreme"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "Beležnica"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "Koledar"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "Predvajalnik predstavnosti"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr "Evernote"
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "Zemljevid"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr "Pinterest"
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr "SoundCloud"
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "Wikipedija"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "YouTube"
19+"X-Launchpad-Export-Date: 2013-12-01 05:47+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
8921
9022#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
@@ -137,20 +69,22 @@ msgstr ""
13769"Sedaj ste osvojili poteze robov ter lahko začnete uporabljati "
13870"telefon<br><br>Tapnite kjerkoli na začetek"
13971
140−#: Components/PageHeader.qml:345
72+#: Components/PageHeader.qml:364
14173msgid "Recent searches"
14274msgstr "Nedavna iskanja"
14375
144−#. TRANSLATORS: Number of persons who rated this app
76+#: Dash/Apps/AppPreview.qml:135
77+msgid "Rate this"
78+msgstr "Ocenite"
79+
14580#. TRANSLATORS: Number of persons who rated this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
81+#: Dash/Previews/Header.qml:93
14782#, qt-format
14883msgid "(%1)"
14984msgstr "(%1)"
15085
151−#. TRANSLATORS: Number of persons who wrote reviews for this app
15286#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
153−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
87+#: Dash/Previews/Header.qml:105
15488#, qt-format
15589msgid "%1 review"
15690msgid_plural "%1 reviews"
@@ -159,10 +93,6 @@ msgstr[1] "%1 ocena"
15993msgstr[2] "%1 oceni"
16094msgstr[3] "%1 ocene"
16195
162−#: Dash/Apps/AppPreview.qml:135
163−msgid "Rate this"
164−msgstr "Ocenite"
165−
16696#: Dash/Previews/Reviews.qml:74
16797msgid "Add a review"
16898msgstr "Dodaj oceno"
@@ -179,7 +109,7 @@ msgstr "Pošlji"
179109msgid "Comments:"
180110msgstr "Opombe:"
181111
182−#: Greeter/Lockscreen.qml:146
112+#: Greeter/Lockscreen.qml:149
183113msgid "Emergency Call"
184114msgstr "Klic v sili"
185115
@@ -214,7 +144,7 @@ msgstr "Govorjenje ..."
214144
215145#: Notifications/NotificationMenuItemFactory.qml:89
216146msgid "Show password"
217−msgstr ""
147+msgstr "Pokaži geslo"
218148
219149#: Panel/SearchIndicator.qml:27
220150msgid "Search"
@@ -223,21 +153,13 @@ msgstr "Iskanje"
223153#: plugins/Unity/Launcher/launcheritem.cpp:43
224154#: plugins/Unity/Launcher/launcheritem.cpp:73
225155msgid "Lock to Launcher"
226−msgstr ""
156+msgstr "Zakleni na zaganjalnik"
227157
228158#: plugins/Unity/Launcher/launcheritem.cpp:73
229159msgid "Unlock from Launcher"
230−msgstr ""
231−
232−#: plugins/Unity/scope.cpp:408
233−msgid "Sorry, there is nothing that matches your search."
234−msgstr "Nič se ne ujema z vašim iskalnim nizom."
235−
236−#: plugins/Unity/showallfilteroption.cpp:41
237−msgid "All"
238−msgstr "Vse"
160+msgstr "Odkleni z zaganjalnika"
239161
240−#: Shell.qml:441
162+#: Shell.qml:439
241163#, qt-format
242164msgid "Please enter %1"
243165msgstr "Vnesite %1"
po/sr.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-27 09:19+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Serbian <sr@li.org>\n"
@@ -16,76 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr ""
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr ""
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr ""
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr ""
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr ""
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr ""
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr ""
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr ""
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr ""
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr ""
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr ""
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr ""
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr ""
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr ""
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr ""
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr ""
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr ""
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
8921
9022#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
@@ -133,30 +65,28 @@ msgid ""
13365"phone<br><br>Tap anywhere to start"
13466msgstr ""
13567
136−#: Components/PageHeader.qml:345
68+#: Components/PageHeader.qml:364
13769msgid "Recent searches"
13870msgstr "Скорашње претраге"
13971
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr ""
75+
14176#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
14378#, qt-format
14479msgid "(%1)"
14580msgstr ""
14681
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
14882#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
15084#, qt-format
15185msgid "%1 review"
15286msgid_plural "%1 reviews"
15387msgstr[0] ""
15488msgstr[1] ""
15589
156−#: Dash/Apps/AppPreview.qml:135
157−msgid "Rate this"
158−msgstr ""
159−
16090#: Dash/Previews/Reviews.qml:74
16191msgid "Add a review"
16292msgstr ""
@@ -173,7 +103,7 @@ msgstr ""
173103msgid "Comments:"
174104msgstr ""
175105
176−#: Greeter/Lockscreen.qml:146
106+#: Greeter/Lockscreen.qml:149
177107msgid "Emergency Call"
178108msgstr ""
179109
@@ -223,15 +153,7 @@ msgstr ""
223153msgid "Unlock from Launcher"
224154msgstr ""
225155
226−#: plugins/Unity/scope.cpp:408
227−msgid "Sorry, there is nothing that matches your search."
228−msgstr "Нажалост, претрага није наишла на икакво подударање."
229−
230−#: plugins/Unity/showallfilteroption.cpp:41
231−msgid "All"
232−msgstr ""
233−
234−#: Shell.qml:441
156+#: Shell.qml:439
235157#, qt-format
236158msgid "Please enter %1"
237159msgstr ""
po/sv.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-26 22:36+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Swedish <sv@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/ta.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-24 11:36+0000\n"
1212"Last-Translator: Thangamani Arun - தங்கமணி அருண் <thangam.arunx@gmail.com>\n"
1313"Language-Team: Ubuntu Tamil Team/Free Tamil Computing/Thamizha\n"
@@ -15,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020"Language: ta\n"
2121
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "தொலைபேசி"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "புகைப்பட கருவி"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "படத்தொகுப்பு"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "முகநுல்"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "உலாவி"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "ட்விட்டர்"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "ஜிமெயில்"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "வானிலை"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "குறிப்புபலகை"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "நாள்காட்டி"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "ஊடக இயக்கி"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr "எப்போதும்குறிப்பெடு"
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "வரைபடம்"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr "விசைத்தட்டு"
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr "ஒலி கிளவுட்"
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "விக்கிப்பீடியா"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "யூட்யுப்"
89−
9022#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
9224msgstr "அறிமுகத்தை தவிர்"
@@ -138,30 +70,28 @@ msgstr ""
13870"பயன்படுத்த தொடங்கவும் <br> <br>தட்டுவதன் மூலம் எங்க வேண்டுமானாலும் "
13971"தொடங்கலாம்."
14072
141−#: Components/PageHeader.qml:345
73+#: Components/PageHeader.qml:364
14274msgid "Recent searches"
14375msgstr "கடையாக தேடப்பட்டவைகள்"
14476
145−#. TRANSLATORS: Number of persons who rated this app
77+#: Dash/Apps/AppPreview.qml:135
78+msgid "Rate this"
79+msgstr "இதை மதிப்பிடு"
80+
14681#. TRANSLATORS: Number of persons who rated this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
82+#: Dash/Previews/Header.qml:93
14883#, qt-format
14984msgid "(%1)"
15085msgstr "(%1)"
15186
152−#. TRANSLATORS: Number of persons who wrote reviews for this app
15387#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
154−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
88+#: Dash/Previews/Header.qml:105
15589#, qt-format
15690msgid "%1 review"
15791msgid_plural "%1 reviews"
15892msgstr[0] "%1 பரிசீலனை"
15993msgstr[1] "%1 பரிசீலனைகள்"
16094
161−#: Dash/Apps/AppPreview.qml:135
162−msgid "Rate this"
163−msgstr "இதை மதிப்பிடு"
164−
16595#: Dash/Previews/Reviews.qml:74
16696msgid "Add a review"
16797msgstr "ஒரு பரிசீலனையை சேர்"
@@ -178,7 +108,7 @@ msgstr "அனுப்பு"
178108msgid "Comments:"
179109msgstr "கருத்துகள்:"
180110
181−#: Greeter/Lockscreen.qml:146
111+#: Greeter/Lockscreen.qml:149
182112msgid "Emergency Call"
183113msgstr "அவசர அழைப்பு"
184114
@@ -228,15 +158,7 @@ msgstr ""
228158msgid "Unlock from Launcher"
229159msgstr ""
230160
231−#: plugins/Unity/scope.cpp:408
232−msgid "Sorry, there is nothing that matches your search."
233−msgstr "மன்னிக்கவும், உங்களுடைய தேடலுக்கு தகுந்த பொருத்தம் கிடைக்கவில்லை."
234−
235−#: plugins/Unity/showallfilteroption.cpp:41
236−msgid "All"
237−msgstr "அனைத்தும்"
238−
239−#: Shell.qml:441
161+#: Shell.qml:439
240162#, qt-format
241163msgid "Please enter %1"
242164msgstr "தயவுச்செய்து %1 உள்ளிடு"
po/te.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-27 09:57+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Telugu <te@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/tr.po+17−95
@@ -7,84 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
11−"PO-Revision-Date: 2013-10-01 13:21+0000\n"
12−"Last-Translator: Volkan Gezer <Unknown>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-12-12 16:06+0000\n"
12+"Last-Translator: Arda Ünlü <aarda.uunlu@gmail.com>\n"
1313"Language-Team: Turkish <tr@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Kamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galeri"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Tarayıcı"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Hava Durumu"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Not Defteri"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Takvim"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Ortam Oynatıcı"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Harita"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Vikipedi"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-12-13 06:46+0000\n"
19+"X-Generator: Launchpad (build 16869)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -133,30 +65,28 @@ msgid ""
13365"phone<br><br>Tap anywhere to start"
13466msgstr ""
13567
136−#: Components/PageHeader.qml:345
68+#: Components/PageHeader.qml:364
13769msgid "Recent searches"
13870msgstr "Son Arananlar"
13971
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr "Oyla"
75+
14176#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
14378#, qt-format
14479msgid "(%1)"
14580msgstr "(%1)"
14681
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
14882#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
15084#, qt-format
15185msgid "%1 review"
15286msgid_plural "%1 reviews"
15387msgstr[0] "%1 inceleme"
15488msgstr[1] "%1 inceleme"
15589
156−#: Dash/Apps/AppPreview.qml:135
157−msgid "Rate this"
158−msgstr "Oyla"
159−
16090#: Dash/Previews/Reviews.qml:74
16191msgid "Add a review"
16292msgstr "Bir inceleme ekle"
@@ -173,7 +103,7 @@ msgstr "Gönder"
173103msgid "Comments:"
174104msgstr "Yorumlar:"
175105
176−#: Greeter/Lockscreen.qml:146
106+#: Greeter/Lockscreen.qml:149
177107msgid "Emergency Call"
178108msgstr "Acil Arama"
179109
@@ -208,7 +138,7 @@ msgstr "Konuşuyor..."
208138
209139#: Notifications/NotificationMenuItemFactory.qml:89
210140msgid "Show password"
211−msgstr ""
141+msgstr "Parolayı göster"
212142
213143#: Panel/SearchIndicator.qml:27
214144msgid "Search"
@@ -217,21 +147,13 @@ msgstr "Ara"
217147#: plugins/Unity/Launcher/launcheritem.cpp:43
218148#: plugins/Unity/Launcher/launcheritem.cpp:73
219149msgid "Lock to Launcher"
220−msgstr ""
150+msgstr "Başlatıcıya Sabitle"
221151
222152#: plugins/Unity/Launcher/launcheritem.cpp:73
223153msgid "Unlock from Launcher"
224−msgstr ""
225−
226−#: plugins/Unity/scope.cpp:408
227−msgid "Sorry, there is nothing that matches your search."
228−msgstr "Üzgünüz, aramanızla eşleşen hiçbir şey yok."
229−
230−#: plugins/Unity/showallfilteroption.cpp:41
231−msgid "All"
232−msgstr ""
154+msgstr "Başlatıcıdan Ayır"
233155
234−#: Shell.qml:441
156+#: Shell.qml:439
235157#, qt-format
236158msgid "Please enter %1"
237159msgstr "Lütfen %1 girin"
po/ug.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-09 22:38+0000\n"
1212"Last-Translator: Gheyret T.Kenji <Unknown>\n"
1313"Language-Team: Uyghur <ug@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "تېلېفون"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "كامېرا"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "فېيىسبۇك(Facebook)"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "توركۆرگۈ"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "تىۋىتتېر(Twitter)"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "ھاۋا رايى"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "خاتىرە دەپتەر(Notepad)"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "يىلنامە"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "ۋاسىتە قويغۇ"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "خەرىتە"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "ۋىكىپېدىيە"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,29 +64,27 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "يېقىنقى ئىزدەشلەر"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr "(%1)"
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] "%1 باھا"
15387
154−#: Dash/Apps/AppPreview.qml:135
155−msgid "Rate this"
156−msgstr ""
157−
15888#: Dash/Previews/Reviews.qml:74
15989msgid "Add a review"
16090msgstr ""
@@ -171,7 +101,7 @@ msgstr "ئەۋەت"
171101msgid "Comments:"
172102msgstr "ئىنكاس:"
173103
174−#: Greeter/Lockscreen.qml:146
104+#: Greeter/Lockscreen.qml:149
175105msgid "Emergency Call"
176106msgstr ""
177107
@@ -221,15 +151,7 @@ msgstr ""
221151msgid "Unlock from Launcher"
222152msgstr ""
223153
224−#: plugins/Unity/scope.cpp:408
225−msgid "Sorry, there is nothing that matches your search."
226−msgstr "كەچۈرۈڭ، ئىزدىگىنىڭىزگە ماس نەتىجە تېپىلمىدى."
227−
228−#: plugins/Unity/showallfilteroption.cpp:41
229−msgid "All"
230−msgstr "ھەممىسى"
231−
232−#: Shell.qml:441
154+#: Shell.qml:439
233155#, qt-format
234156msgid "Please enter %1"
235157msgstr "%1 نى كىرگۈزۈڭ"
po/uk.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-11-23 12:37+0000\n"
1212"Last-Translator: Ignat Kizenko <Unknown>\n"
1313"Language-Team: Ukrainian <uk@li.org>\n"
@@ -16,76 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-11-24 05:50+0000\n"
20−"X-Generator: Launchpad (build 16831)\n"
21−
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "Телефон"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "Фотоапарат"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "Галерея"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "Facebook"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "Навігатор"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "Twitter"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "GMail"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "Погода"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "Блокнот"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "Календар"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "Програвач"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr "Evernote"
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "Карта"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr "Pinterest"
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr "SoundCloud"
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "Вікіпедія"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "YouTube"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
8921
9022#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
@@ -138,20 +70,22 @@ msgstr ""
13870"Тепер жести налаштовано, ви можете почати користуватися "
13971"телефоном.<br><br>Натисніть у довільному місці екрана."
14072
141−#: Components/PageHeader.qml:345
73+#: Components/PageHeader.qml:364
14274msgid "Recent searches"
14375msgstr "Нещодавні пошуки"
14476
145−#. TRANSLATORS: Number of persons who rated this app
77+#: Dash/Apps/AppPreview.qml:135
78+msgid "Rate this"
79+msgstr "Оцінити"
80+
14681#. TRANSLATORS: Number of persons who rated this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
82+#: Dash/Previews/Header.qml:93
14883#, qt-format
14984msgid "(%1)"
15085msgstr "(%1)"
15186
152−#. TRANSLATORS: Number of persons who wrote reviews for this app
15387#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
154−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
88+#: Dash/Previews/Header.qml:105
15589#, qt-format
15690msgid "%1 review"
15791msgid_plural "%1 reviews"
@@ -159,10 +93,6 @@ msgstr[0] "%1 рецензія"
15993msgstr[1] "%1 рецензії"
16094msgstr[2] "%1 рецензій"
16195
162−#: Dash/Apps/AppPreview.qml:135
163−msgid "Rate this"
164−msgstr "Оцінити"
165−
16696#: Dash/Previews/Reviews.qml:74
16797msgid "Add a review"
16898msgstr "Додати рецензію"
@@ -179,7 +109,7 @@ msgstr "Надіслати"
179109msgid "Comments:"
180110msgstr "Коментарі:"
181111
182−#: Greeter/Lockscreen.qml:146
112+#: Greeter/Lockscreen.qml:149
183113msgid "Emergency Call"
184114msgstr "Терміновий виклик"
185115
@@ -229,15 +159,7 @@ msgstr "Зафіксувати на панелі запуску"
229159msgid "Unlock from Launcher"
230160msgstr "Від’єднати від панелі запуску"
231161
232−#: plugins/Unity/scope.cpp:408
233−msgid "Sorry, there is nothing that matches your search."
234−msgstr "Вибачте, для вказаних вами ключових слів нічого не знайдено."
235−
236−#: plugins/Unity/showallfilteroption.cpp:41
237−msgid "All"
238−msgstr "Усе"
239−
240−#: Shell.qml:441
162+#: Shell.qml:439
241163#, qt-format
242164msgid "Please enter %1"
243165msgstr "Будь ласка, введіть %1"
po/unity8.pot+10−88
@@ -8,7 +8,7 @@ msgid ""
88msgstr ""
99"Project-Id-Version: unity8\n"
1010"Report-Msgid-Bugs-To: \n"
11−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
11+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1212"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,74 +18,6 @@ msgstr ""
1818"Content-Transfer-Encoding: 8bit\n"
1919"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/xh.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-09-28 13:20+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Xhosa <xh@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr ""
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/zh_CN.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-09 13:51+0000\n"
1212"Last-Translator: Aron Xu <Unknown>\n"
1313"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "电话"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "相机"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "相册"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "浏览器"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "天气"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "记事本"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "日历"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "媒体播放器"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "印象笔记"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "地图"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "维基百科"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "近期搜索"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "对不起,没有找到您想要的结果。"
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
po/zh_TW.po+12−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-11-12 16:10+0100\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-06-27 10:24+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
@@ -15,76 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-11-19 05:59+0000\n"
19−"X-Generator: Launchpad (build 16831)\n"
20−
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
8820
8921#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:345
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "最近搜尋"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:135
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:146
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -222,15 +152,7 @@ msgstr ""
222152msgid "Unlock from Launcher"
223153msgstr ""
224154
225−#: plugins/Unity/scope.cpp:408
226−msgid "Sorry, there is nothing that matches your search."
227−msgstr "很抱歉,找不到符合您想搜尋的結果。"
228−
229−#: plugins/Unity/showallfilteroption.cpp:41
230−msgid "All"
231−msgstr ""
232−
233−#: Shell.qml:441
155+#: Shell.qml:439
234156#, qt-format
235157msgid "Please enter %1"
236158msgstr ""
Bottombar/Bottombar.qml → qml/Bottombar/Bottombar.qmlrenamed

The content is the same.

Bottombar/HudButton.qml → qml/Bottombar/HudButton.qmlrenamed

The content is the same.

Bottombar/graphics/hud@20.png → qml/Bottombar/graphics/hud@20.pngrenamed

Binary file not shown.

Bottombar/graphics/hud_invoke_button_active@20.png → qml/Bottombar/graphics/hud_invoke_button_active@20.pngrenamed

Binary file not shown.

qml/CMakeLists.txtnew file+22
@@ -0,0 +1,22 @@
1+file(GLOB QML_JS_FILES *.qml *.js)
2+
3+install(FILES ${QML_JS_FILES}
4+ DESTINATION ${SHELL_APP_DIR}
5+ )
6+
7+set(QML_DIRS
8+ Bottombar
9+ Components
10+ Dash
11+ graphics
12+ Greeter
13+ Hud
14+ Panel
15+ Launcher
16+ SideStage
17+ Notifications
18+ )
19+
20+install(DIRECTORY ${QML_DIRS}
21+ DESTINATION ${SHELL_APP_DIR}
22+ )
Components/AnimationControllerWithSignals.qml → qml/Components/AnimationControllerWithSignals.qmlrenamed

The content is the same.

Components/ApplicationManagerWrapper.qml → qml/Components/ApplicationManagerWrapper.qmlrenamed

The content is the same.

Components/ApplicationScreenshot.qml → qml/Components/ApplicationScreenshot.qmlrenamed

The content is the same.

Components/ApplicationsModelStageFiltered.qml → qml/Components/ApplicationsModelStageFiltered.qmlrenamed

The content is the same.

Components/BaseCarouselDelegate.qml → qml/Components/BaseCarouselDelegate.qmlrenamed

The content is the same.

Components/Carousel.qml → qml/Components/Carousel.qmlrenamed+2−3
@@ -63,6 +63,7 @@ Item {
6363 signal pressAndHold(int index, real itemY)
6464
6565 implicitHeight: listView.tileHeight * selectedItemScaleFactor
66+ opacity: listView.highlightIndex === -1 ? 1 : 0.6
6667
6768 /* Basic idea behind the carousel effect is to move the items of the delegates (compacting /stuffing them).
6869 One drawback is, that more delegates have to be drawn than usually. As some items are moved from the
@@ -75,11 +76,11 @@ Item {
7576 ListView {
7677 id: listView
7778
79+ property int highlightIndex: -1
7880 property real minimumTileWidth: 0
7981 property real newContentX: disabledNewContentX
8082 property real pathItemCount: referenceWidth / referenceTileWidth
8183 property real tileAspectRatio: 1
82− property int highlightIndex: -1
8384
8485 /* The positioning and scaling of the items in the carousel is based on the variable
8586 'continuousIndex', a continuous real variable between [0, 'carousel.model.count'],
@@ -293,7 +294,6 @@ Item {
293294 scale: itemScale * explicitScaleFactor
294295 sourceComponent: itemComponent
295296 z: cachedTiles - Math.abs(index - listView.selectedIndex)
296− opacity: highlightIndex == -1 ? 1 : (highlightIndex == index ? 0.6 : 0.2)
297297
298298 transform: Translate {
299299 x: xTransform
@@ -333,7 +333,6 @@ Item {
333333 onPressAndHold: {
334334 listView.itemPressAndHold(index, item)
335335 }
336−
337336 }
338337 }
339338 }
Components/Circle.qml → qml/Components/Circle.qmlrenamed

The content is the same.

Components/DragHandle.qml → qml/Components/DragHandle.qmlrenamed

The content is the same.

Components/DraggingArea.qml → qml/Components/DraggingArea.qmlrenamed

The content is the same.

Components/EdgeDemo.qml → qml/Components/EdgeDemo.qmlrenamed+1
@@ -31,6 +31,7 @@ Item {
3131 property bool dashEnabled: true
3232 property bool panelEnabled: true
3333 property bool panelContentEnabled: true
34+ property bool running: !launcherEnabled || !dashEnabled || !panelEnabled || !panelContentEnabled
3435
3536 property bool paused: false
3637
Components/EdgeDemoOverlay.qml → qml/Components/EdgeDemoOverlay.qmlrenamed

The content is the same.

Components/EdgeDragArea.qml → qml/Components/EdgeDragArea.qmlrenamed

The content is the same.

Components/EdgeDragEvaluator.qml → qml/Components/EdgeDragEvaluator.qmlrenamed

The content is the same.

Components/FilterGrid.qml → qml/Components/FilterGrid.qmlrenamed+2−1
@@ -41,11 +41,12 @@ Item {
4141
4242 /* Maximum number of rows to be show when filter=true. */
4343 property int collapsedRowCount: 2
44+ property int uncollapsedRowCount: Math.ceil(model.count / columns)
4445 readonly property int collapsedHeight: {
4546 return iconTileGrid.contentHeightForRows(Math.min(collapsedRowCount, Math.ceil(model.count / columns)))
4647 }
4748 readonly property int uncollapsedHeight: {
48− return iconTileGrid.contentHeightForRows(Math.ceil(model.count / columns))
49+ return iconTileGrid.contentHeightForRows(uncollapsedRowCount)
4950 }
5051
5152 property alias minimumHorizontalSpacing: iconTileGrid.minimumHorizontalSpacing
Components/LazyImage.qml → qml/Components/LazyImage.qmlrenamed

The content is the same.

Components/ListItems/Base.qml → qml/Components/ListItems/Base.qmlrenamed

The content is the same.

Components/ListItems/Header.qml → qml/Components/ListItems/Header.qmlrenamed

The content is the same.

Components/ListItems/Highlight.qml → qml/Components/ListItems/Highlight.qmlrenamed

The content is the same.

Components/ListItems/ThinDivider.qml → qml/Components/ListItems/ThinDivider.qmlrenamed

The content is the same.

Components/ListItems/VerticalThinDivider.qml → qml/Components/ListItems/VerticalThinDivider.qmlrenamed

The content is the same.

Components/ListItems/graphics/ListItemDividerHorizontal@18.png → qml/Components/ListItems/graphics/ListItemDividerHorizontal@18.pngrenamed

Binary file not shown.

Components/ListItems/graphics/ListItemDividerVertical@18.png → qml/Components/ListItems/graphics/ListItemDividerVertical@18.pngrenamed

Binary file not shown.

Components/OpenEffect.qml → qml/Components/OpenEffect.qmlrenamed

The content is the same.

Components/PageHeader.qml → qml/Components/PageHeader.qmlrenamed

The content is the same.

Components/PinPadButton.qml → qml/Components/PinPadButton.qmlrenamed

The content is the same.

Components/RatingStars.qml → qml/Components/RatingStars.qmlrenamed

The content is the same.

Components/ResponsiveFlowView.qml → qml/Components/ResponsiveFlowView.qmlrenamed

The content is the same.

Components/ResponsiveGridView.qml → qml/Components/ResponsiveGridView.qmlrenamed

The content is the same.

Components/Revealer.qml → qml/Components/Revealer.qmlrenamed

The content is the same.

Components/SearchHistoryModel.qml → qml/Components/SearchHistoryModel.qmlrenamed

The content is the same.

Components/Showable.qml → qml/Components/Showable.qmlrenamed

The content is the same.

Components/Stage.qml → qml/Components/Stage.qmlrenamed

The content is the same.

Components/StandardAnimation.qml → qml/Components/StandardAnimation.qmlrenamed

The content is the same.

Components/Tile.qml → qml/Components/Tile.qmlrenamed

The content is the same.

Components/TileStyle.qml → qml/Components/TileStyle.qmlrenamed

The content is the same.

Components/UbuntuShapeForItem.qml → qml/Components/UbuntuShapeForItem.qmlrenamed

The content is the same.

Components/VolumeControl.qml → qml/Components/VolumeControl.qmlrenamed

The content is the same.

Components/WrongPasswordAnimation.qml → qml/Components/WrongPasswordAnimation.qmlrenamed

The content is the same.

Components/carousel.js → qml/Components/carousel.jsrenamed

The content is the same.

Components/graphics/PageHeaderBaseDivider@18.png → qml/Components/graphics/PageHeaderBaseDivider@18.pngrenamed

Binary file not shown.

Components/graphics/PageHeaderBaseDivider@18.sci → qml/Components/graphics/PageHeaderBaseDivider@18.scirenamed

The content is the same.

Components/graphics/close@20.png → qml/Components/graphics/close@20.pngrenamed

Binary file not shown.

Components/graphics/icon_star_off@20.png → qml/Components/graphics/icon_star_off@20.pngrenamed

Binary file not shown.

Components/graphics/icon_star_on@20.png → qml/Components/graphics/icon_star_on@20.pngrenamed

Binary file not shown.

Components/graphics/non-selected@18.png → qml/Components/graphics/non-selected@18.pngrenamed

Binary file not shown.

Components/graphics/non-selected@18.sci → qml/Components/graphics/non-selected@18.scirenamed

The content is the same.

Dash/Apps/AppPreview.qml → qml/Dash/Apps/AppPreview.qmlrenamed

The content is the same.

Dash/Apps/CloseIcon.qml → qml/Dash/Apps/CloseIcon.qmlrenamed

The content is the same.

Dash/Apps/DashPluginFilterGrid.qml → qml/Dash/Apps/DashPluginFilterGrid.qmlrenamed

The content is the same.

Dash/Apps/FrequentlyUsedAppsModel.qml → qml/Dash/Apps/FrequentlyUsedAppsModel.qmlrenamed

The content is the same.

Dash/Apps/RunningApplicationTile.qml → qml/Dash/Apps/RunningApplicationTile.qmlrenamed

The content is the same.

Dash/Apps/RunningApplicationsGrid.qml → qml/Dash/Apps/RunningApplicationsGrid.qmlrenamed+17
@@ -17,6 +17,8 @@
1717import QtQuick 2.0
1818import "../../Components"
1919
20+import Ubuntu.Gestures 0.1
21+
2022ResponsiveFlowView {
2123 id: root
2224 clip: true
@@ -100,4 +102,19 @@ ResponsiveFlowView {
100102 move: Transition {
101103 NumberAnimation { properties: "x,y"; duration: 400; easing.type: Easing.OutCubic }
102104 }
105+
106+ MouseArea {
107+ anchors.fill: parent
108+ z: -1 // behind all RunningApplicationTiles
109+ enabled: root.terminationModeEnabled
110+ onPressed: { root.terminationModeEnabled = false; }
111+ }
112+
113+ PressedOutsideNotifier {
114+ anchors.fill: parent
115+ enabled: root.terminationModeEnabled
116+ onPressedOutside: {
117+ root.terminationModeEnabled = false;
118+ }
119+ }
103120}
Dash/Apps/graphics/close_btn@9.png → qml/Dash/Apps/graphics/close_btn@9.pngrenamed

Binary file not shown.

Dash/Dash.qml → qml/Dash/Dash.qmlrenamed

The content is the same.

Dash/DashApps.qml → qml/Dash/DashApps.qmlrenamed−1
@@ -19,7 +19,6 @@ import Ubuntu.Components 0.1
1919import Utils 0.1
2020import "../Components"
2121import "../Components/ListItems"
22−import "../Applications"
2322import "Apps"
2423
2524GenericScopeView {
Dash/DashBar.qml → qml/Dash/DashBar.qmlrenamed

The content is the same.

qml/Dash/DashCarousel.qmlnew file+47
@@ -0,0 +1,47 @@
1+/*
2+ * Copyright (C) 2013 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+import QtQuick 2.0
18+import Ubuntu.Components 0.1
19+import "../Components"
20+
21+DashRenderer {
22+ id: dashCarousel
23+
24+ property alias cacheBuffer: carousel.cacheBuffer
25+ property alias itemComponent: carousel.itemComponent
26+ property alias minimumTileWidth: carousel.minimumTileWidth
27+ property alias selectedItemScaleFactor: carousel.selectedItemScaleFactor
28+ property alias tileAspectRatio: carousel.tileAspectRatio
29+
30+ currentItem: carousel.currentItem
31+ height: carousel.implicitHeight + units.gu(6)
32+ verticalSpacing: units.gu(3)
33+
34+ Carousel {
35+ id: carousel
36+ anchors.fill: parent
37+ tileAspectRatio: 198 / 288
38+ minimumTileWidth: units.gu(13)
39+ selectedItemScaleFactor: 1.14
40+ cacheBuffer: 1404 // 18px * 13gu * 6
41+ model: dashCarousel.model
42+ highlightIndex: dashCarousel.highlightIndex
43+
44+ onClicked: dashCarousel.clicked(index, itemY)
45+ onPressAndHold: dashCarousel.pressAndHold(index, itemY)
46+ }
47+}
Dash/DashContent.qml → qml/Dash/DashContent.qmlrenamed+8−2
@@ -105,8 +105,14 @@ Item {
105105
106106 // If the number of items is less than the current index, then need to reset to another item.
107107 onCountChanged: {
108− if (currentIndex >= count)
109− dashContent.setCurrentScopeAtIndex(count-1, true, true)
108+ if (count > 0) {
109+ if (currentIndex >= count) {
110+ dashContent.setCurrentScopeAtIndex(count-1, true, true)
111+ } else if (currentIndex < 0) {
112+ // setting currentIndex directly, cause we don't want to loose set_current_index
113+ dashContent.currentIndex = 0
114+ }
115+ }
110116 }
111117
112118 delegate:
qml/Dash/DashFilterGrid.qmlnew file+65
@@ -0,0 +1,65 @@
1+/*
2+ * Copyright (C) 2013 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+import QtQuick 2.0
18+import "../Components"
19+import ".."
20+
21+DashRenderer {
22+ id: dashFilterGrid
23+
24+ property alias cellWidth: filterGrid.cellWidth
25+ property alias cellHeight: filterGrid.cellHeight
26+ property alias delegate: filterGrid.delegate
27+ property alias delegateWidth: filterGrid.delegateWidth
28+ property alias delegateHeight: filterGrid.delegateHeight
29+ property alias maximumNumberOfColumns: filterGrid.maximumNumberOfColumns
30+ property alias minimumHorizontalSpacing: filterGrid.minimumHorizontalSpacing
31+
32+ collapsedHeight: filterGrid.collapsedHeight
33+ collapsedRowCount: filterGrid.collapsedRowCount
34+ columns: filterGrid.columns
35+ rows: filter ? filterGrid.collapsedRowCount : filterGrid.uncollapsedRowCount
36+ currentItem: filterGrid.currentItem
37+ expandable: filterGrid.expandable
38+ height: filterGrid.height
39+ margins: filterGrid.margins
40+ uncollapsedHeight: filterGrid.uncollapsedHeight
41+ verticalSpacing: filterGrid.verticalSpacing
42+
43+ function startFilterAnimation(filter) {
44+ filterGrid.startFilterAnimation(filter)
45+ }
46+
47+ FilterGrid {
48+ id: filterGrid
49+ width: dashFilterGrid.width
50+ minimumHorizontalSpacing: units.gu(0.5)
51+ delegateWidth: units.gu(11)
52+ delegateHeight: units.gu(9.5)
53+ verticalSpacing: units.gu(2)
54+ model: dashFilterGrid.model
55+ filter: dashFilterGrid.filter
56+ highlightIndex: dashFilterGrid.highlightIndex
57+ delegateCreationBegin: dashFilterGrid.delegateCreationBegin
58+ delegateCreationEnd: dashFilterGrid.delegateCreationEnd
59+
60+ onFilterChanged: {
61+ dashFilterGrid.filter = filter
62+ filter = Qt.binding(function() { return dashFilterGrid.filter })
63+ }
64+ }
65+}
Dash/DashHome.qml → qml/Dash/DashHome.qmlrenamed

The content is the same.

Dash/DashPreview.qml → qml/Dash/DashPreview.qmlrenamed+1
@@ -25,6 +25,7 @@ Item {
2525 property alias showProcessingAction: waitingForActionMouseArea.enabled
2626
2727 property real previewWidthRatio: 0.5
28+ property bool isCurrent: false
2829
2930 property Component previewImages
3031 property Component header
Dash/DashPreviewPlaceholder.qml → qml/Dash/DashPreviewPlaceholder.qmlrenamed

The content is the same.

qml/Dash/DashRenderer.qmlnew file+65
@@ -0,0 +1,65 @@
1+/*
2+ * Copyright (C) 2013 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+import QtQuick 2.0
18+
19+Item {
20+ // Can the item be expanded?
21+ property bool expandable: false
22+
23+ // In case it can be expanded, should we filter it
24+ property bool filter: true
25+
26+ property int collapsedRowCount: 1
27+
28+ property int collapsedHeight: height
29+
30+ property int columns: 1
31+
32+ property int rows: 1
33+
34+ // Index of the highlighted item
35+ property int highlightIndex: -1
36+
37+ property int margins: 0
38+
39+ property int uncollapsedHeight: height
40+
41+ property var delegateCreationBegin: undefined
42+
43+ property var delegateCreationEnd: undefined
44+
45+ property real verticalSpacing: 0
46+
47+ // The current item of the renderer
48+ property var currentItem
49+
50+ // The model to renderer
51+ property var model
52+
53+ /// Emitted when the user clicked on an item
54+ /// @param index is the index of the clicked item
55+ /// @param itemY is y of the clicked delegate
56+ signal clicked(int index, real itemY)
57+
58+ /// Emitted when the user pressed and held on an item
59+ /// @param index is the index of the held item
60+ /// @param itemY is y of the held delegate
61+ signal pressAndHold(int index, real itemY)
62+
63+ function startFilterAnimation(filter) {
64+ }
65+}
Dash/Generic/FlatTileStyle.qml → qml/Dash/Generic/FlatTileStyle.qmlrenamed

The content is the same.

Dash/Generic/GenericCarousel.qml → qml/Dash/Generic/GenericCarousel.qmlrenamed+3−7
@@ -17,22 +17,18 @@
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
1919import "../../Components"
20+import ".."
2021
21−Carousel {
22+DashCarousel {
2223 id: genericCarousel
23−
24− tileAspectRatio: 198 / 288
25− minimumTileWidth: units.gu(13)
2624 itemComponent: carouselDelegateGeneric
27− selectedItemScaleFactor: 1.14
28− cacheBuffer: 1404 // 18px * 13gu * 6
29− height: implicitHeight + units.gu(6)
3025
3126 Component {
3227 id: carouselDelegateGeneric
3328
3429 BaseCarouselDelegate {
3530 id: item
31+ objectName: "carouselDelegate"
3632
3733 UbuntuShape {
3834 anchors.fill: parent
Dash/Generic/GenericCarouselLoader.qml → qml/Dash/Generic/GenericCarouselLoader.qmlrenamed

The content is the same.

Dash/Generic/GenericFilterGrid.qml → qml/Dash/Generic/GenericFilterGrid.qmlrenamed+13−19
@@ -15,38 +15,32 @@
1515 */
1616
1717import QtQuick 2.0
18+import Ubuntu.Components 0.1
1819import "../../Components"
20+import ".."
1921
20−FilterGrid {
21− id: filtergrid
22+DashFilterGrid {
23+ id: genericFilterGrid
24+
25+ property int iconWidth: units.gu(8)
26+ property int iconHeight: units.gu(7.5)
2227
2328 minimumHorizontalSpacing: units.gu(0.5)
2429 delegateWidth: units.gu(11)
2530 delegateHeight: units.gu(9.5)
2631 verticalSpacing: units.gu(2)
2732
28− property int iconWidth: units.gu(8)
29− property int iconHeight: units.gu(7.5)
30−
31− signal clicked(int index, real itemY)
32− signal pressAndHold(int index, real itemY)
33−
3433 delegate: Tile {
3534 id: tile
3635 objectName: "delegate" + index
37− width: filtergrid.cellWidth
38− height: filtergrid.cellHeight
36+ width: genericFilterGrid.cellWidth
37+ height: genericFilterGrid.cellHeight
3938 text: model.title
40− imageWidth: filtergrid.iconWidth
41− imageHeight: filtergrid.iconHeight
39+ imageWidth: genericFilterGrid.iconWidth
40+ imageHeight: genericFilterGrid.iconHeight
4241 source: model.icon
4342
44− onClicked: {
45− filtergrid.clicked(index, tile.y)
46− }
47−
48− onPressAndHold: {
49− filtergrid.pressAndHold(index, tile.y)
50− }
43+ onClicked: genericFilterGrid.clicked(index, tile.y)
44+ onPressAndHold: genericFilterGrid.pressAndHold(index, tile.y)
5145 }
5246}
Dash/Generic/GenericFilterGridPotrait.qml → qml/Dash/Generic/GenericFilterGridPotrait.qmlrenamed+1−3
@@ -15,16 +15,14 @@
1515 */
1616
1717import QtQuick 2.0
18+import Ubuntu.Components 0.1
1819import "../../Components"
1920
2021GenericFilterGrid {
21− id: filtergrid
22−
2322 minimumHorizontalSpacing: units.gu(0.5)
2423 delegateWidth: units.gu(11)
2524 delegateHeight: units.gu(18)
2625 verticalSpacing: units.gu(2)
27−
2826 iconWidth: (width / columns) * 0.8
2927 iconHeight: iconWidth * 16 / 11
3028}
Dash/Generic/GenericPreview.qml → qml/Dash/Generic/GenericPreview.qmlrenamed

The content is the same.

Dash/Generic/WeatherFilterGrid.qml → qml/Dash/Generic/WeatherFilterGrid.qmlrenamed

The content is the same.

Dash/GenericScopeView.qml → qml/Dash/GenericScopeView.qmlrenamed+39−28
@@ -46,8 +46,8 @@ FocusScope {
4646 }
4747 }
4848
49− function activateApp(desktopFilePath) {
50− shell.activateApplication(desktopFilePath);
49+ function activateApp(appId) {
50+ shell.activateApplication(appId);
5151 }
5252
5353 Binding {
@@ -126,6 +126,7 @@ FocusScope {
126126
127127 delegate: ListItems.Base {
128128 id: baseItem
129+ objectName: "dashCategory" + category
129130 highlightWhenPressed: false
130131
131132 readonly property bool expandable: rendererLoader.item ? rendererLoader.item.expandable : false
@@ -140,7 +141,7 @@ FocusScope {
140141 right: parent.right
141142 }
142143
143− source: getRenderer(model.renderer, model.contentType, model.rendererHint)
144+ source: getRenderer(model.renderer, model.contentType, model.rendererHint, results)
144145
145146 onLoaded: {
146147 if (item.enableHeightBehavior !== undefined && item.enableHeightBehaviorOnNextCreation !== undefined) {
@@ -191,8 +192,8 @@ FocusScope {
191192 } else {
192193 previewListView.open = true
193194
194− scopeView.scope.preview( item.uri, item.icon, item.category, 0, item.mimetype, item.title,
195− item.comment, item.dndUri, item.metadata)
195+ scopeView.scope.preview(item.uri, item.icon, item.category, 0, item.mimetype, item.title,
196+ item.comment, item.dndUri, item.metadata)
196197 }
197198 }
198199 onPressAndHold: {
@@ -205,7 +206,7 @@ FocusScope {
205206 previewListView.open = true
206207
207208 var item = target.model.get(index)
208− scopeView.scope.preview( item.uri, item.icon, item.category, 0, item.mimetype, item.title,
209+ scopeView.scope.preview(item.uri, item.icon, item.category, 0, item.mimetype, item.title,
209210 item.comment, item.dndUri, item.metadata)
210211 }
211212 }
@@ -271,6 +272,7 @@ FocusScope {
271272
272273 sectionProperty: "name"
273274 sectionDelegate: ListItems.Header {
275+ objectName: "dashSectionHeader" + delegate.category
274276 property var delegate: categoryView.item(delegateIndex)
275277 width: categoryView.width
276278 text: section
@@ -303,16 +305,21 @@ FocusScope {
303305 }
304306 }
305307
306− function getRenderer(rendererId, contentType, rendererHint) {
308+ function getRenderer(rendererId, contentType, rendererHint, results) {
307309 if (rendererId == "default") {
308310 rendererId = getDefaultRendererId(contentType);
309311 }
312+ if (rendererId == "carousel") {
313+ // Selectively disable carousel, 6 is fixed for now, should change on the form factor
314+ if (results.count <= 6)
315+ rendererId = "grid"
316+ }
310317 switch (rendererId) {
311318 case "carousel": {
312319 switch (contentType) {
313− case "music": return "Music/MusicCarouselLoader.qml";
314− case "video": return "Video/VideoCarouselLoader.qml";
315− default: return "Generic/GenericCarouselLoader.qml";
320+ case "music": return "Music/MusicCarousel.qml";
321+ case "video": return "Video/VideoCarousel.qml";
322+ default: return "Generic/GenericCarousel.qml";
316323 }
317324 }
318325 case "grid": {
@@ -442,27 +449,30 @@ FocusScope {
442449 scopeView.scope.preview(item.uri, item.icon, item.category, 0, item.mimetype, item.title, item.comment, item.dndUri, item.metadata)
443450 }
444451
445− var itemY = categoryView.contentItem.mapFromItem(categoryDelegate.currentItem).y;
452+ // Adjust contentY in case we need to change to it to show the next row
453+ if (categoryDelegate.rows > 1) {
454+ var itemY = categoryView.contentItem.mapFromItem(categoryDelegate.currentItem).y;
446455
447− // Find new contentY and effect.postionPx
448− var newContentY = itemY - effect.positionPx - categoryDelegate.verticalSpacing;
456+ // Find new contentY and effect.postionPx
457+ var newContentY = itemY - effect.positionPx - categoryDelegate.verticalSpacing;
449458
450− // Make sure the item is not covered by a header. Move the effect split down if necessary
451− var headerHeight = pageHeader.height + categoryView.stickyHeaderHeight;
452− var effectAdjust = Math.max(effect.positionPx, headerHeight);
459+ // Make sure the item is not covered by a header. Move the effect split down if necessary
460+ var headerHeight = pageHeader.height + categoryView.stickyHeaderHeight;
461+ var effectAdjust = Math.max(effect.positionPx, headerHeight);
453462
454− // Make sure we don't overscroll the listview. If yes, adjust effect position
455− if (newContentY < 0) {
456− effectAdjust += newContentY;
457− newContentY = 0;
458− }
459− if (newContentY > Math.max(0, categoryView.contentHeight - categoryView.height)) {
460− effectAdjust += -(categoryView.contentHeight - categoryView.height) + newContentY
461− newContentY = categoryView.contentHeight - categoryView.height;
462− }
463+ // Make sure we don't overscroll the listview. If yes, adjust effect position
464+ if (newContentY < 0) {
465+ effectAdjust += newContentY;
466+ newContentY = 0;
467+ }
468+ if (newContentY > Math.max(0, categoryView.contentHeight - categoryView.height)) {
469+ effectAdjust += -(categoryView.contentHeight - categoryView.height) + newContentY
470+ newContentY = categoryView.contentHeight - categoryView.height;
471+ }
463472
464− effect.positionPx = effectAdjust;
465− categoryView.contentY = newContentY;
473+ effect.positionPx = effectAdjust;
474+ categoryView.contentY = newContentY;
475+ }
466476 }
467477
468478 property bool open: false
@@ -527,6 +537,7 @@ FocusScope {
527537 onLoaded: {
528538 if (previewListView.onScreen && previewData !== undefined) {
529539 item.previewData = Qt.binding(function() { return previewData })
540+ item.isCurrent = Qt.binding(function() { return ListView.isCurrentItem })
530541 }
531542 }
532543
@@ -539,7 +550,7 @@ FocusScope {
539550 }
540551
541552 function closePreviewSpinner() {
542− if(item) {
553+ if (item) {
543554 item.showProcessingAction = false;
544555 }
545556 }
Dash/Movie/MoviePreview.qml → qml/Dash/Movie/MoviePreview.qmlrenamed

The content is the same.

Dash/Music/CarouselDelegateMusic.qml → qml/Dash/Music/CarouselDelegateMusic.qmlrenamed

The content is the same.

Dash/Music/MusicCarousel.qml → qml/Dash/Music/MusicCarousel.qmlrenamed+2−2
@@ -16,15 +16,15 @@
1616
1717import QtQuick 2.0
1818import "../../Components"
19+import ".."
1920
20−Carousel {
21+DashCarousel {
2122 id: musicCarousel
2223 tileAspectRatio: 1
2324 minimumTileWidth: units.gu(13)
2425 itemComponent: carouselDelegateMusic
2526 selectedItemScaleFactor: 1.2
2627 cacheBuffer: 1404 // 18px * 13gu * 6
27− height: implicitHeight + units.gu(6)
2828
2929 Component {
3030 id: carouselDelegateMusic
Dash/Music/MusicCarouselLoader.qml → qml/Dash/Music/MusicCarouselLoader.qmlrenamed

The content is the same.

Dash/Music/MusicFilterGrid.qml → qml/Dash/Music/MusicFilterGrid.qmlrenamed+7−13
@@ -19,22 +19,21 @@ import "../../Components"
1919import "../Generic"
2020
2121GenericFilterGrid {
22− id: filtergrid
22+ id: musicFilterGrid
2323
2424 delegateWidth: units.gu(11)
2525 delegateHeight: units.gu(16)
26−
2726 iconWidth: units.gu(11)
2827 iconHeight: units.gu(11)
2928
3029 delegate: Tile {
3130 id: tile
3231 objectName: "delegate" + index
33− width: filtergrid.cellWidth
34− height: filtergrid.cellHeight
32+ width: musicFilterGrid.cellWidth
33+ height: musicFilterGrid.cellHeight
3534 text: model.comment
36− imageWidth: filtergrid.iconWidth
37− imageHeight: filtergrid.iconHeight
35+ imageWidth: musicFilterGrid.iconWidth
36+ imageHeight: musicFilterGrid.iconHeight
3837 source: model.icon
3938 maximumLineCount: 2
4039 horizontalAlignment: Text.AlignLeft
@@ -43,12 +42,7 @@ GenericFilterGrid {
4342 artist: model.title
4443 }
4544
46− onClicked: {
47− filtergrid.clicked(index, tile.y)
48− }
49−
50− onPressAndHold: {
51− filtergrid.pressAndHold(index, tile.y)
52− }
45+ onClicked: musicFilterGrid.clicked(index, tile.y)
46+ onPressAndHold: musicFilterGrid.pressAndHold(index, tile.y)
5347 }
5448}
qml/Dash/Music/MusicPreview.qmlnew file+203
@@ -0,0 +1,203 @@
1+/*
2+ * Copyright (C) 2013 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+import QtQuick 2.0
18+import QtMultimedia 5.0
19+import Ubuntu.Components 0.1
20+import Ubuntu.Components.ListItems 0.1
21+import ".."
22+import "../Generic"
23+import "../../Components"
24+import "../Previews"
25+
26+GenericPreview {
27+ id: root
28+
29+ previewImages: previewImageComponent
30+ header: headerComponent
31+ description: descriptionComponent
32+
33+ Component {
34+ id: previewImageComponent
35+ LazyImage {
36+ height: units.gu(22)
37+ scaleTo: "height"
38+ source: previewData ? previewData.image : ""
39+ initialHeight: height
40+ initialWidth: height
41+ }
42+ }
43+
44+ Component {
45+ id: headerComponent
46+ Header {
47+ title: previewData.title
48+ subtitle: previewData.subtitle
49+ }
50+ }
51+
52+ Component {
53+ id: descriptionComponent
54+
55+ Item {
56+ height: childrenRect.height
57+ Audio {
58+ id: audioPlayer
59+ objectName: "audioPlayer"
60+ property real progress: audioPlayer.position / audioPlayer.duration
61+
62+ property Item playingItem
63+
64+ Component.onDestruction: {
65+ audioPlayer.stop();
66+ }
67+
68+ onErrorStringChanged: console.warn("Audio player error:", errorString)
69+
70+ }
71+
72+ Connections {
73+ target: root
74+ onIsCurrentChanged: {
75+ if (!root.isCurrent) {
76+ audioPlayer.stop();
77+ }
78+ }
79+ }
80+
81+ Column {
82+ anchors { left: parent.left; right: parent.right }
83+ visible: trackRepeater.count > 0
84+
85+ ThinDivider {
86+ objectName: "topDivider"
87+ anchors { left: parent.left; right: parent.right }
88+ }
89+
90+ Repeater {
91+ id: trackRepeater
92+ objectName: "trackRepeater"
93+
94+ model: previewData.tracks
95+
96+ delegate: Item {
97+ id: trackItem
98+ objectName: "trackItem" + index
99+ anchors { left: parent.left; right: parent.right }
100+ height: units.gu(5)
101+ property bool isPlayingItem: audioPlayer.playingItem == trackItem
102+
103+ function play() {
104+ audioPlayer.stop();
105+ // Make sure we change the source, even if two items point to the same uri location
106+ audioPlayer.source = "";
107+ audioPlayer.source = model.uri;
108+ audioPlayer.playingItem = trackItem;
109+ audioPlayer.play();
110+ }
111+
112+ Row {
113+ id: trackRow
114+ width: parent.width
115+ spacing: units.gu(1)
116+ property int column1Width: units.gu(3)
117+ property int column2Width: width - (2 * spacing) - column1Width - column3Width
118+ property int column3Width: units.gu(4)
119+ anchors.verticalCenter: parent.verticalCenter
120+
121+ Button {
122+ objectName: "playButton"
123+ width: trackRow.column1Width
124+ height: width
125+ iconSource: audioPlayer.playbackState == Audio.PlayingState && trackItem.isPlayingItem ? "image://theme/media-playback-pause" : "image://theme/media-playback-start"
126+
127+ // Can't be "transparent" or "#00xxxxxx" as the button optimizes away the surrounding shape
128+ // FIXME when this is resolved: https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1251685
129+ color: "#01000000"
130+
131+ onClicked: {
132+ if (trackItem.isPlayingItem) {
133+ if (audioPlayer.playbackState == Audio.PlayingState) {
134+ audioPlayer.pause();
135+ } else if (audioPlayer.playbackState == Audio.PausedState){
136+ audioPlayer.play();
137+ }
138+ } else {
139+ trackItem.play();
140+ }
141+ }
142+ }
143+
144+ Label {
145+ objectName: "trackTitleLabel"
146+ fontSize: "small"
147+ opacity: 0.9
148+ color: "white"
149+ horizontalAlignment: Text.AlignLeft
150+ anchors.verticalCenter: parent.verticalCenter
151+ width: parent.column2Width
152+ text: title
153+ style: Text.Raised
154+ styleColor: "black"
155+ elide: Text.ElideRight
156+
157+ UbuntuShape {
158+ id: progressBarFill
159+ objectName: "progressBarFill"
160+ color: UbuntuColors.orange
161+ anchors.left: progressBarImage.left
162+ anchors.right: progressBarImage.right
163+ anchors.verticalCenter: progressBarImage.verticalCenter
164+ height: units.dp(2)
165+ anchors.margins: units.dp(2)
166+ anchors.rightMargin: maxWidth - (maxWidth * audioPlayer.progress) + units.dp(2)
167+ visible: progressBarImage.visible
168+ property int maxWidth: progressBarImage.width - units.dp(4)
169+ }
170+
171+ Image {
172+ id: progressBarImage
173+ anchors { left: parent.left; top: parent.bottom; right: parent.right }
174+ height: units.dp(6)
175+ visible: audioPlayer.playbackState != Audio.StoppedState && trackItem.isPlayingItem && model.length.length > 0
176+ source: "graphics/music_progress_bg.png"
177+ }
178+ }
179+
180+ Label {
181+ id: valueLabel
182+ objectName: "timeLabel"
183+ fontSize: "small"
184+ opacity: 0.9
185+ color: "white"
186+ anchors.verticalCenter: parent.verticalCenter
187+ horizontalAlignment: Text.AlignRight
188+ width: parent.column3Width
189+ text: length
190+ style: Text.Raised
191+ styleColor: "black"
192+ }
193+ }
194+
195+ ThinDivider {
196+ anchors { left: parent.left; bottom: parent.bottom; right: parent.right }
197+ }
198+ }
199+ }
200+ }
201+ }
202+ }
203+}
Dash/Music/MusicTileStyle.qml → qml/Dash/Music/MusicTileStyle.qmlrenamed

The content is the same.

qml/Dash/Music/graphics/music_progress_bg.pngnew file

Binary file not shown.

Dash/PreviewDelegateMapper.qml → qml/Dash/PreviewDelegateMapper.qmlrenamed+1
@@ -23,6 +23,7 @@ QtObject {
2323 property var previewDelegateMapping: {"preview-generic": genericPreview,
2424 "preview-application": appPreview,
2525 "preview-movie": "Movie/MoviePreview.qml",
26+ "preview-music": "Music/MusicPreview.qml",
2627 }
2728 }
2829
Dash/Previews/Header.qml → qml/Dash/Previews/Header.qmlrenamed

The content is the same.

Dash/Previews/Reviews.qml → qml/Dash/Previews/Reviews.qmlrenamed

The content is the same.

Dash/ScopeDelegateMapper.qml → qml/Dash/ScopeDelegateMapper.qmlrenamed

The content is the same.

Dash/ScopeListView.qml → qml/Dash/ScopeListView.qmlrenamed+1−1
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.0
18−import ListViewWithPageHeader 0.1
18+import DashViews 0.1
1919
2020ListViewWithPageHeader {
2121 maximumFlickVelocity: height * 10
Dash/SearchableResultModel.qml → qml/Dash/SearchableResultModel.qmlrenamed

The content is the same.

Dash/Video/CarouselDelegateVideo.qml → qml/Dash/Video/CarouselDelegateVideo.qmlrenamed

The content is the same.

Dash/Video/VideoCarousel.qml → qml/Dash/Video/VideoCarousel.qmlrenamed+2−2
@@ -16,15 +16,15 @@
1616
1717import QtQuick 2.0
1818import "../../Components"
19+import ".."
1920
20−Carousel {
21+DashCarousel {
2122 id: videosCarousel
2223 tileAspectRatio: 198 / 288
2324 minimumTileWidth: units.gu(13)
2425 itemComponent: carouselDelegateVideo
2526 selectedItemScaleFactor: 1.14
2627 cacheBuffer: 1404 // 18px * 13gu * 6
27− height: implicitHeight + units.gu(6)
2828
2929 Component {
3030 id: carouselDelegateVideo
Dash/Video/VideoCarouselLoader.qml → qml/Dash/Video/VideoCarouselLoader.qmlrenamed

The content is the same.

Dash/Video/VideoFilterGrid.qml → qml/Dash/Video/VideoFilterGrid.qmlrenamed+8−13
@@ -15,38 +15,33 @@
1515 */
1616
1717import QtQuick 2.0
18+import Ubuntu.Components 0.1
1819import "../../Components"
1920import "../Generic"
2021
2122GenericFilterGrid {
22− id: filtergrid
23+ id: videoFilterGrid
2324
2425 delegateWidth: units.gu(11)
2526 delegateHeight: units.gu(15)
26−
2727 iconWidth: units.gu(11)
2828 iconHeight: units.gu(11)
2929
3030 delegate: Tile {
3131 id: tile
3232 objectName: "delegate" + index
33− width: filtergrid.cellWidth
34− height: filtergrid.cellHeight
33+ width: videoFilterGrid.cellWidth
34+ height: videoFilterGrid.cellHeight
3535 text: model.title
36− imageWidth: filtergrid.iconWidth
37− imageHeight: filtergrid.iconHeight
36+ imageWidth: videoFilterGrid.iconWidth
37+ imageHeight: videoFilterGrid.iconHeight
3838 source: model.icon
3939 maximumLineCount: 2
4040 horizontalAlignment: Text.AlignLeft
4141
4242 style: VideoTileStyle {}
4343
44− onClicked: {
45− filtergrid.clicked(index, tile.y)
46− }
47−
48− onPressAndHold: {
49− filtergrid.pressAndHold(index, tile.y)
50− }
44+ onClicked: videoFilterGrid.clicked(index, tile.y)
45+ onPressAndHold: videoFilterGrid.pressAndHold(index, tile.y)
5146 }
5247}
Dash/Video/VideoTileStyle.qml → qml/Dash/Video/VideoTileStyle.qmlrenamed

The content is the same.

Dash/Video/graphics/icon_button_amazon@20.png → qml/Dash/Video/graphics/icon_button_amazon@20.pngrenamed

Binary file not shown.

Dash/Video/graphics/icon_button_u1@20.png → qml/Dash/Video/graphics/icon_button_u1@20.pngrenamed

Binary file not shown.

Dash/Video/graphics/movie_icon_holder@27.png → qml/Dash/Video/graphics/movie_icon_holder@27.pngrenamed

Binary file not shown.

Dash/graphics/header_handlearrow2@20.png → qml/Dash/graphics/header_handlearrow2@20.pngrenamed

Binary file not shown.

Dash/graphics/header_handlearrow@20.png → qml/Dash/graphics/header_handlearrow@20.pngrenamed

Binary file not shown.

Dash/graphics/icon_clear@20.png → qml/Dash/graphics/icon_clear@20.pngrenamed

Binary file not shown.

Dash/graphics/icon_listview_clear@20.png → qml/Dash/graphics/icon_listview_clear@20.pngrenamed

Binary file not shown.

Dash/graphics/icon_search_active@20.png → qml/Dash/graphics/icon_search_active@20.pngrenamed

Binary file not shown.

Dash/graphics/icon_search_inactive@20.png → qml/Dash/graphics/icon_search_inactive@20.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/angrybirds@12.png → qml/Dash/graphics/phone/screenshots/angrybirds@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/browser@12.png → qml/Dash/graphics/phone/screenshots/browser@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/camera@12.png → qml/Dash/graphics/phone/screenshots/camera@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/facebook@12.png → qml/Dash/graphics/phone/screenshots/facebook@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/gallery@12.png → qml/Dash/graphics/phone/screenshots/gallery@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/map@12.png → qml/Dash/graphics/phone/screenshots/map@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/music@12.png → qml/Dash/graphics/phone/screenshots/music@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/phone@12.png → qml/Dash/graphics/phone/screenshots/phone@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/settings@12.png → qml/Dash/graphics/phone/screenshots/settings@12.pngrenamed

Binary file not shown.

Dash/graphics/phone/screenshots/twitter@12.png → qml/Dash/graphics/phone/screenshots/twitter@12.pngrenamed

Binary file not shown.

Dash/graphics/play_button@18.png → qml/Dash/graphics/play_button@18.pngrenamed

Binary file not shown.

Dash/graphics/play_button_active@18.png → qml/Dash/graphics/play_button_active@18.pngrenamed

Binary file not shown.

Dash/graphics/play_button_active_big@20.png → qml/Dash/graphics/play_button_active_big@20.pngrenamed

Binary file not shown.

Dash/graphics/play_button_big@20.png → qml/Dash/graphics/play_button_big@20.pngrenamed

Binary file not shown.

Dash/graphics/tablet/icon_close_preview@20.png → qml/Dash/graphics/tablet/icon_close_preview@20.pngrenamed

Binary file not shown.

Dash/graphics/tooltip_arrow@27.png → qml/Dash/graphics/tooltip_arrow@27.pngrenamed

Binary file not shown.

Greeter/Clock.qml → qml/Greeter/Clock.qmlrenamed

The content is the same.

Greeter/Dot.qml → qml/Greeter/Dot.qmlrenamed

The content is the same.

Greeter/Gradient.js → qml/Greeter/Gradient.jsrenamed

The content is the same.

Greeter/Greeter.qml → qml/Greeter/Greeter.qmlrenamed+1−1
@@ -51,7 +51,7 @@ Showable {
5151 signal unlocked(int uid)
5252
5353 onRightTeaserPressedChanged: {
54− if (rightTeaserPressed && !locked && x == 0) {
54+ if (rightTeaserPressed && (!locked || narrowMode) && x == 0) {
5555 teasingTimer.start();
5656 }
5757 }
Greeter/GreeterContent.qml → qml/Greeter/GreeterContent.qmlrenamed

The content is the same.

Greeter/Infographics.qml → qml/Greeter/Infographics.qmlrenamed

The content is the same.

Greeter/Lockscreen.qml → qml/Greeter/Lockscreen.qmlrenamed+2−2
@@ -30,9 +30,9 @@ Showable {
3030 // In case the Lockscreen can show a greeter message, this is the username
3131 property string username: ""
3232
33− // As the numeric PIN pad doesn't have a OK button by design, we need to auto-confirm on a certain length.
33+ // Set this to a value greater 0 to enable auto-confirm behavior for the lockscreen.
3434 // This is ignored by the alphaNumeric lockscreen as that one is confirmed with pressing enter on the OSK.
35− property int pinLength: 4
35+ property int pinLength: -1
3636
3737 property url background: ""
3838
Greeter/LoginList.qml → qml/Greeter/LoginList.qmlrenamed+11
@@ -289,5 +289,16 @@ Item {
289289 }
290290 passwordInput.text = "";
291291 }
292+
293+ onRequestAuthenticationUser: {
294+ // Find index for requested user, if it exists
295+ for (var i = 0; i < userList.model.count; i++) {
296+ if (user == userList.model.data(i, LightDM.UserRoles.NameRole)) {
297+ moveTimer.start();
298+ userList.currentIndex = i;
299+ return;
300+ }
301+ }
302+ }
292303 }
293304}
Greeter/ObjectPositioner.qml → qml/Greeter/ObjectPositioner.qmlrenamed

The content is the same.

Greeter/PassphraseLockscreen.qml → qml/Greeter/PassphraseLockscreen.qmlrenamed

The content is the same.

Greeter/PinLockscreen.qml → qml/Greeter/PinLockscreen.qmlrenamed

The content is the same.

Greeter/graphics/dot_empty.png → qml/Greeter/graphics/dot_empty.pngrenamed

Binary file not shown.

Greeter/graphics/dot_filled.png → qml/Greeter/graphics/dot_filled.pngrenamed

Binary file not shown.

Greeter/graphics/dot_pointer.png → qml/Greeter/graphics/dot_pointer.pngrenamed

Binary file not shown.

Greeter/graphics/icon_arrow.png → qml/Greeter/graphics/icon_arrow.pngrenamed

Binary file not shown.

Greeter/graphics/infographic_circle_back.png → qml/Greeter/graphics/infographic_circle_back.pngrenamed

Binary file not shown.

Hud/Hud.qml → qml/Hud/Hud.qmlrenamed

The content is the same.

Hud/HudParametrizedActionsPage.qml → qml/Hud/HudParametrizedActionsPage.qmlrenamed

The content is the same.

Hud/Result.qml → qml/Hud/Result.qmlrenamed

The content is the same.

Hud/ResultList.qml → qml/Hud/ResultList.qmlrenamed

The content is the same.

Hud/SearchBar.qml → qml/Hud/SearchBar.qmlrenamed

The content is the same.

Hud/ShowingAnimation.qml → qml/Hud/ShowingAnimation.qmlrenamed

The content is the same.

Hud/SliderLabel.qml → qml/Hud/SliderLabel.qmlrenamed+4−2
@@ -36,10 +36,12 @@ Item {
3636 label.text = sliderData["label"]
3737 slider.minimumValue = sliderData["min"]
3838 slider.maximumValue = sliderData["max"]
39− slider.live = sliderData["live"]
39+ if("live" in sliderData)
40+ slider.live = sliderData["live"]
4041 // SDK Slider does not support step yet
4142// slider.step = sliderData["step"]
42− slider.value = sliderData["value"]
43+ if("value" in sliderData)
44+ slider.value = sliderData["value"]
4345 action = sliderData["action"]
4446 }
4547
Hud/SoundAmplitudeDelegate.qml → qml/Hud/SoundAmplitudeDelegate.qmlrenamed

The content is the same.

Hud/SoundAmplitudeVisual.qml → qml/Hud/SoundAmplitudeVisual.qmlrenamed

The content is the same.

Hud/ToolBar.qml → qml/Hud/ToolBar.qmlrenamed

The content is the same.

Hud/ToolBarIcon.qml → qml/Hud/ToolBarIcon.qmlrenamed

The content is the same.

Hud/graphics/divider@20.png → qml/Hud/graphics/divider@20.pngrenamed

Binary file not shown.

Hud/graphics/divider@20.sci → qml/Hud/graphics/divider@20.scirenamed

The content is the same.

Hud/graphics/dropshadow_right@20.png → qml/Hud/graphics/dropshadow_right@20.pngrenamed

Binary file not shown.

Hud/graphics/help@20.png → qml/Hud/graphics/help@20.pngrenamed

Binary file not shown.

Hud/graphics/hud_bg@20.png → qml/Hud/graphics/hud_bg@20.pngrenamed

Binary file not shown.

Hud/graphics/hud_handlearrow@20.png → qml/Hud/graphics/hud_handlearrow@20.pngrenamed

Binary file not shown.

Hud/graphics/hud_handlebar@20.png → qml/Hud/graphics/hud_handlebar@20.pngrenamed

Binary file not shown.

Hud/graphics/icon_arrow@20.png → qml/Hud/graphics/icon_arrow@20.pngrenamed

Binary file not shown.

Hud/graphics/icon_clear@20.png → qml/Hud/graphics/icon_clear@20.pngrenamed

Binary file not shown.

Hud/graphics/icon_search@20.png → qml/Hud/graphics/icon_search@20.pngrenamed

Binary file not shown.

Hud/graphics/microphone@20.png → qml/Hud/graphics/microphone@20.pngrenamed

Binary file not shown.

Hud/graphics/popup_triangle@20.png → qml/Hud/graphics/popup_triangle@20.pngrenamed

Binary file not shown.

Hud/graphics/settings@20.png → qml/Hud/graphics/settings@20.pngrenamed

Binary file not shown.

Hud/graphics/undo@20.png → qml/Hud/graphics/undo@20.pngrenamed

Binary file not shown.

Hud/graphics/view-fullscreen@20.png → qml/Hud/graphics/view-fullscreen@20.pngrenamed

Binary file not shown.

Launcher/FoldingLauncherDelegate.qml → qml/Launcher/FoldingLauncherDelegate.qmlrenamed

The content is the same.

Launcher/Launcher.qml → qml/Launcher/Launcher.qmlrenamed+3−3
@@ -41,7 +41,7 @@ Item {
4141 signal dash()
4242
4343 // emitted when the dash icon in the launcher has been tapped
44− signal dashItemSelected()
44+ signal showDashHome()
4545
4646 onStateChanged: {
4747 if (state == "") {
@@ -161,9 +161,9 @@ Item {
161161 root.state = ""
162162 launcherApplicationSelected(appId)
163163 }
164− onDashItemSelected: {
164+ onShowDashHome: {
165165 root.state = ""
166− root.dashItemSelected(index)
166+ root.showDashHome();
167167 }
168168
169169 onPreventHidingChanged: {
Launcher/LauncherDelegate.qml → qml/Launcher/LauncherDelegate.qmlrenamed

The content is the same.

Launcher/LauncherPanel.qml → qml/Launcher/LauncherPanel.qmlrenamed+2−2
@@ -36,7 +36,7 @@ Item {
3636 property int highlightIndex: -1
3737
3838 signal applicationSelected(string appId)
39− signal dashItemSelected(int index)
39+ signal showDashHome()
4040
4141 BorderImage {
4242 id: background
@@ -57,7 +57,7 @@ Item {
5757 id: dashItem
5858 width: parent.width
5959 height: units.gu(7)
60− onClicked: root.dashItemSelected(0)
60+ onClicked: root.showDashHome()
6161 z: 1
6262 Image {
6363 objectName: "dashItem"
Launcher/graphics/focused_app_arrow@30.png → qml/Launcher/graphics/focused_app_arrow@30.pngrenamed

Binary file not shown.

Launcher/graphics/highlight@18.png → qml/Launcher/graphics/highlight@18.pngrenamed

Binary file not shown.

Launcher/graphics/home@18.png → qml/Launcher/graphics/home@18.pngrenamed

Binary file not shown.

Launcher/graphics/launcher_bg@30.png → qml/Launcher/graphics/launcher_bg@30.pngrenamed

Binary file not shown.

Launcher/graphics/launcher_bg@30.sci → qml/Launcher/graphics/launcher_bg@30.scirenamed

The content is the same.

Launcher/graphics/non-selected@18.png → qml/Launcher/graphics/non-selected@18.pngrenamed

Binary file not shown.

Launcher/graphics/non-selected@18.sci → qml/Launcher/graphics/non-selected@18.scirenamed

The content is the same.

Launcher/graphics/notification@30.png → qml/Launcher/graphics/notification@30.pngrenamed

Binary file not shown.

Launcher/graphics/notification@30.sci → qml/Launcher/graphics/notification@30.scirenamed

The content is the same.

Launcher/graphics/progressbar-fill@30.png → qml/Launcher/graphics/progressbar-fill@30.pngrenamed

Binary file not shown.

Launcher/graphics/progressbar-fill@30.sci → qml/Launcher/graphics/progressbar-fill@30.scirenamed

The content is the same.

Launcher/graphics/progressbar-trough@30.png → qml/Launcher/graphics/progressbar-trough@30.pngrenamed

Binary file not shown.

Launcher/graphics/progressbar-trough@30.sci → qml/Launcher/graphics/progressbar-trough@30.scirenamed

The content is the same.

Launcher/graphics/quicklist_tooltip@30.png → qml/Launcher/graphics/quicklist_tooltip@30.pngrenamed

Binary file not shown.

Launcher/graphics/selected@18.png → qml/Launcher/graphics/selected@18.pngrenamed

Binary file not shown.

Launcher/graphics/selected@18.sci → qml/Launcher/graphics/selected@18.scirenamed

The content is the same.

Launcher/graphics/triangle@18.png → qml/Launcher/graphics/triangle@18.pngrenamed

Binary file not shown.

qml/Notifications/Notification.qmlnew file+325
@@ -0,0 +1,325 @@
1+/*
2+ * Copyright (C) 2013 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+import QtQuick 2.0
18+import Ubuntu.Components 0.1
19+import Unity.Notifications 1.0
20+import QMenuModel 0.1
21+import Utils 0.1
22+
23+Item {
24+ id: notification
25+
26+ property alias iconSource: icon.fileSource
27+ property alias secondaryIconSource: secondaryIcon.source
28+ property alias summary: summaryLabel.text
29+ property alias body: bodyLabel.text
30+ property var actions
31+ property var notificationId
32+ property var type
33+ property var hints
34+ property var notification
35+ property color color
36+ property bool fullscreen
37+
38+ fullscreen: false
39+ objectName: "background"
40+ implicitHeight: type != Notification.PlaceHolder ? (fullscreen ? notificationList.fullHeight : contentColumn.height + contentColumn.spacing * 4) : 0
41+
42+ color: Qt.rgba(0.132, 0.117, 0.109, 0.97)
43+ opacity: 0
44+
45+ clip: fullscreen ? false : true
46+ visible: type != Notification.PlaceHolder
47+
48+ UbuntuShape {
49+ id: shapedBack
50+
51+ visible: !fullscreen
52+ anchors.fill: parent
53+ anchors.margins: notificationList.margin
54+ color: parent.color
55+ opacity: parent.opacity
56+ radius: "medium"
57+ }
58+
59+ Rectangle {
60+ id: nonShapedBack
61+
62+ visible: fullscreen
63+ anchors.fill: parent
64+ color: parent.color
65+ opacity: parent.opacity
66+ }
67+
68+ Item {
69+ id: contents
70+ anchors.fill: fullscreen ? nonShapedBack : shapedBack
71+
72+ UnityMenuModelPaths {
73+ id: paths
74+
75+ source: hints["x-canonical-private-menu-model"]
76+
77+ busNameHint: "busName"
78+ actionsHint: "actions"
79+ menuObjectPathHint: "menuPath"
80+ }
81+
82+ UnityMenuModel {
83+ id: unityMenuModel
84+
85+ busName: paths.busName
86+ actions: paths.actions
87+ menuObjectPath: paths.menuObjectPath
88+ }
89+
90+ Behavior on implicitHeight {
91+ id: heightBehavior
92+
93+ enabled: false
94+ UbuntuNumberAnimation {
95+ duration: UbuntuAnimation.SnapDuration
96+ }
97+ }
98+
99+ // delay enabling height behavior until the add transition is complete
100+ onOpacityChanged: if (opacity == 1) heightBehavior.enabled = true
101+
102+ MouseArea {
103+ id: interactiveArea
104+
105+ anchors.fill: contentColumn
106+ objectName: "interactiveArea"
107+ enabled: notification.type == Notification.Interactive
108+ onClicked: notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
109+ }
110+
111+ Column {
112+ id: contentColumn
113+
114+ anchors {
115+ left: parent.left
116+ right: parent.right
117+ top: parent.top
118+ margins: fullscreen ? 0 : spacing
119+ }
120+
121+ spacing: units.gu(1)
122+
123+ Row {
124+ id: topRow
125+
126+ spacing: contentColumn.spacing
127+ anchors {
128+ left: parent.left
129+ right: parent.right
130+ }
131+
132+ ShapedIcon {
133+ id: icon
134+
135+ objectName: "icon"
136+ width: units.gu(6)
137+ height: units.gu(6)
138+ shaped: notification.hints["x-canonical-non-shaped-icon"] == "true" ? false : true
139+ visible: iconSource !== undefined && iconSource != ""
140+ }
141+
142+ Image {
143+ id: secondaryIcon
144+
145+ objectName: "secondaryIcon"
146+ width: units.gu(2)
147+ height: units.gu(2)
148+ visible: source !== undefined && source != ""
149+ fillMode: Image.PreserveAspectCrop
150+ }
151+
152+ Column {
153+ id: labelColumn
154+ width: parent.width - x
155+
156+ anchors.verticalCenter: (icon.visible && !bodyLabel.visible) ? icon.verticalCenter : undefined
157+
158+ Label {
159+ id: summaryLabel
160+
161+ objectName: "summaryLabel"
162+ anchors {
163+ left: parent.left
164+ right: parent.right
165+ }
166+ fontSize: "medium"
167+ font.bold: true
168+ color: Theme.palette.selected.backgroundText
169+ elide: Text.ElideRight
170+ }
171+
172+ Label {
173+ id: bodyLabel
174+
175+ objectName: "bodyLabel"
176+ anchors {
177+ left: parent.left
178+ right: parent.right
179+ }
180+ visible: body != ""
181+ fontSize: "small"
182+ color: Theme.palette.selected.backgroundText
183+ opacity: 0.6
184+ wrapMode: Text.WordWrap
185+ maximumLineCount: 10
186+ elide: Text.ElideRight
187+ }
188+ }
189+ }
190+
191+ Column {
192+ objectName: "dialogListView"
193+ spacing: units.gu(2)
194+
195+ visible: count > 0
196+
197+ anchors.left: parent.left; anchors.right: parent.right
198+ anchors.top: fullscreen ? parent.top : undefined
199+ anchors.bottom: fullscreen ? parent.bottom : undefined
200+
201+ Repeater {
202+ model: unityMenuModel
203+
204+ NotificationMenuItemFactory {
205+ anchors.left: parent.left; anchors.right: parent.right
206+
207+ menuModel: unityMenuModel
208+ menuData: model
209+ menuIndex: index
210+ }
211+ }
212+ }
213+
214+ Item {
215+ id: buttonRow
216+
217+ objectName: "buttonRow"
218+ anchors {
219+ left: parent.left
220+ right: parent.right
221+ }
222+ visible: notification.type == Notification.SnapDecision && actionRepeater.count > 0
223+ height: units.gu(5)
224+
225+ property real buttonWidth: (width - contentColumn.spacing) / 2
226+ property bool expanded
227+
228+ Button {
229+ id: leftButton
230+
231+ objectName: "button1"
232+ width: parent.expanded ? parent.width : parent.buttonWidth
233+ anchors {
234+ top: parent.top
235+ bottom: parent.bottom
236+ }
237+ text: notification.type == Notification.SnapDecision && actionRepeater.count >= 2 ? actionRepeater.itemAt(1).actionLabel : ""
238+ gradient: UbuntuColors.greyGradient
239+ onClicked: {
240+ if (actionRepeater.count > 2) {
241+ buttonRow.expanded = !buttonRow.expanded
242+ } else {
243+ notification.notification.invokeAction(actionRepeater.itemAt(1).actionId)
244+ }
245+ }
246+
247+ Behavior on width {
248+ UbuntuNumberAnimation {
249+ duration: UbuntuAnimation.SnapDuration
250+ }
251+ }
252+ }
253+
254+ Button {
255+ id: rightButton
256+
257+ objectName: "button0"
258+ anchors {
259+ left: leftButton.right
260+ leftMargin: contentColumn.spacing
261+ right: parent.right
262+ }
263+ text: notification.type == Notification.SnapDecision && actionRepeater.count >= 1 ? actionRepeater.itemAt(0).actionLabel : ""
264+ anchors {
265+ top: parent.top
266+ bottom: parent.bottom
267+ }
268+ gradient: notification.hints["x-canonical-private-button-tint"] == "true" ? UbuntuColors.orangeGradient : UbuntuColors.greyGradient
269+ visible: width > 0
270+ onClicked: notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
271+ }
272+ }
273+
274+ Column {
275+ objectName: "buttonColumn"
276+ spacing: contentColumn.spacing
277+ anchors {
278+ left: parent.left
279+ right: parent.right
280+ }
281+
282+ // calculate initial position before Column takes over
283+ y: buttonRow.y + buttonRow.height + contentColumn.spacing
284+
285+ visible: notification.type == Notification.SnapDecision && buttonRow.expanded
286+ height: buttonRow.expanded ? implicitHeight : 0
287+
288+ Repeater {
289+ id: actionRepeater
290+
291+ model: notification.actions
292+ delegate: Loader {
293+ id: loader
294+
295+ property string actionId: id
296+ property string actionLabel: label
297+
298+ anchors {
299+ left: parent.left
300+ right: parent.right
301+ }
302+
303+ Component {
304+ id: actionButton
305+
306+ Button {
307+ objectName: "button" + index
308+ anchors {
309+ left: parent.left
310+ right: parent.right
311+ }
312+
313+ text: loader.actionLabel
314+ height: units.gu(5)
315+ gradient: UbuntuColors.greyGradient
316+ onClicked: notification.notification.invokeAction(loader.actionId)
317+ }
318+ }
319+ sourceComponent: (index == 0 || index == 1) ? undefined : actionButton
320+ }
321+ }
322+ }
323+ }
324+ }
325+}
Notifications/NotificationMenuItemFactory.qml → qml/Notifications/NotificationMenuItemFactory.qmlrenamed+9−2
@@ -28,7 +28,6 @@ Loader {
2828 property QtObject menuModel: null
2929 property QtObject menuData: null
3030 property int menuIndex
31− property var notification
3231
3332 property var _map: {
3433 "com.canonical.snapdecision.textfield": textfield,
@@ -44,6 +43,10 @@ Loader {
4443 }
4544 }
4645
46+ Component.onCompleted: {
47+ notification.fullscreen = menuData.type == "com.canonical.snapdecision.pinlock"
48+ }
49+
4750 Component {
4851 id: textfield
4952
@@ -94,8 +97,12 @@ Loader {
9497
9598 Component {
9699 id: pinLock
97− PinLockscreen {
100+
101+ Lockscreen {
98102 anchors.left: parent.left; anchors.right: parent.right
103+ height: notificationList.fullHeight
104+ placeholderText: i18n.tr("Please enter SIM PIN")
105+ background: shell.background
99106
100107 onEntered: {
101108 menuModel.changeState(menuIndex, passphrase);
Notifications/Notifications.qml → qml/Notifications/Notifications.qmlrenamed+3−1
@@ -24,7 +24,9 @@ ListView {
2424 objectName: "notificationList"
2525 interactive: false
2626
27− spacing: units.gu(.5)
27+ property real margin
28+ property real fullHeight
29+
2830 delegate: Notification {
2931 objectName: "notification" + index
3032 anchors {
Notifications/ShapedIcon.qml → qml/Notifications/ShapedIcon.qmlrenamed

The content is the same.

Panel/IndicatorItem.qml → qml/Panel/IndicatorItem.qmlrenamed

The content is the same.

Panel/IndicatorRow.qml → qml/Panel/IndicatorRow.qmlrenamed

The content is the same.

Panel/Indicators.qml → qml/Panel/Indicators.qmlrenamed

The content is the same.

Panel/Indicators/DefaultIndicatorPage.qml → qml/Panel/Indicators/DefaultIndicatorPage.qmlrenamed

The content is the same.

Panel/Indicators/DefaultIndicatorWidget.qml → qml/Panel/Indicators/DefaultIndicatorWidget.qmlrenamed

The content is the same.

Panel/Indicators/client/IndicatorsClient.qml → qml/Panel/Indicators/client/IndicatorsClient.qmlrenamed

The content is the same.

Panel/Indicators/client/IndicatorsList.qml → qml/Panel/Indicators/client/IndicatorsList.qmlrenamed

The content is the same.

Panel/Indicators/client/IndicatorsPage.qml → qml/Panel/Indicators/client/IndicatorsPage.qmlrenamed

The content is the same.

Panel/Indicators/client/IndicatorsTree.qml → qml/Panel/Indicators/client/IndicatorsTree.qmlrenamed

The content is the same.

Panel/MenuContent.qml → qml/Panel/MenuContent.qmlrenamed

The content is the same.

Panel/Panel.qml → qml/Panel/Panel.qmlrenamed+22
@@ -31,6 +31,28 @@ Item {
3131
3232 signal searchClicked
3333
34+ function hideIndicatorMenu(delay) {
35+ if (delay !== undefined) {
36+ hideTimer.interval = delay;
37+ hideTimer.start();
38+ } else {
39+ indicatorsMenu.hide();
40+ }
41+ }
42+
43+ Timer {
44+ id: hideTimer
45+ running: false
46+ onTriggered: {
47+ indicatorsMenu.hide();
48+ }
49+ }
50+
51+ Connections {
52+ target: indicatorsMenu
53+ onShown: hideTimer.stop()
54+ }
55+
3456 PanelBackground {
3557 id: panelBackground
3658 anchors {
Panel/PanelBackground.qml → qml/Panel/PanelBackground.qmlrenamed

The content is the same.

Panel/PanelSeparatorLine.qml → qml/Panel/PanelSeparatorLine.qmlrenamed

The content is the same.

Panel/SearchIndicator.qml → qml/Panel/SearchIndicator.qmlrenamed

The content is the same.

Panel/graphics/Battery@18.png → qml/Panel/graphics/Battery@18.pngrenamed

Binary file not shown.

Panel/graphics/Bluetooth@18.png → qml/Panel/graphics/Bluetooth@18.pngrenamed

Binary file not shown.

Panel/graphics/Clock@18.png → qml/Panel/graphics/Clock@18.pngrenamed

Binary file not shown.

Panel/graphics/Location@18.png → qml/Panel/graphics/Location@18.pngrenamed

Binary file not shown.

Panel/graphics/Messages@18.png → qml/Panel/graphics/Messages@18.pngrenamed

Binary file not shown.

Panel/graphics/Network@18.png → qml/Panel/graphics/Network@18.pngrenamed

Binary file not shown.

Panel/graphics/Sound@18.png → qml/Panel/graphics/Sound@18.pngrenamed

Binary file not shown.

Panel/graphics/Sync@18.png → qml/Panel/graphics/Sync@18.pngrenamed

Binary file not shown.

Panel/graphics/System@18.png → qml/Panel/graphics/System@18.pngrenamed

Binary file not shown.

Panel/graphics/Time@18.png → qml/Panel/graphics/Time@18.pngrenamed

Binary file not shown.

Panel/graphics/VerticalDivider@18.png → qml/Panel/graphics/VerticalDivider@18.pngrenamed

Binary file not shown.

Panel/graphics/handle@12.png → qml/Panel/graphics/handle@12.pngrenamed

Binary file not shown.

Panel/graphics/handle@12.sci → qml/Panel/graphics/handle@12.scirenamed

The content is the same.

Panel/graphics/rectangular_dropshadow@30.png → qml/Panel/graphics/rectangular_dropshadow@30.pngrenamed

Binary file not shown.

Panel/graphics/rectangular_dropshadow@30.sci → qml/Panel/graphics/rectangular_dropshadow@30.scirenamed

The content is the same.

Panel/graphics/search@12.png → qml/Panel/graphics/search@12.pngrenamed

Binary file not shown.

Panel/graphics/time_and_date@18.png → qml/Panel/graphics/time_and_date@18.pngrenamed

Binary file not shown.

Shell.qml → qml/Shell.qmlrenamed+24−10
@@ -44,7 +44,7 @@ FocusScope {
4444 height: tablet ? units.gu(100) : applicationArguments.hasGeometry() ? applicationArguments.height() : units.gu(71)
4545
4646 property real edgeSize: units.gu(2)
47− property url defaultBackground: shell.width >= units.gu(60) ? "graphics/tablet_background.jpg" : "graphics/phone_background.jpg"
47+ property url defaultBackground: Qt.resolvedUrl(shell.width >= units.gu(60) ? "graphics/tablet_background.jpg" : "graphics/phone_background.jpg")
4848 property url background
4949 readonly property real panelHeight: panel.panelHeight
5050
@@ -96,21 +96,21 @@ FocusScope {
9696 }
9797 }
9898
99− function activateApplication(desktopFile, argument) {
99+ function activateApplication(appId, argument) {
100100 if (applicationManager) {
101101 // For newly started applications, as it takes them time to draw their first frame
102102 // we add a delay before we hide the animation screenshots to compensate.
103− var addDelay = !applicationManager.getApplicationFromDesktopFile(desktopFile);
103+ var addDelay = !applicationManager.getApplicationFromDesktopFile(appId);
104104
105105 var application;
106− application = applicationManager.activateApplication(desktopFile, argument);
106+ application = applicationManager.activateApplication(appId, argument);
107107 if (application == null) {
108108 return;
109109 }
110110 if (application.stage == ApplicationInfo.MainStage || !sideStage.enabled) {
111− mainStage.activateApplication(desktopFile, addDelay);
111+ mainStage.activateApplication(appId, addDelay);
112112 } else {
113− sideStage.activateApplication(desktopFile, addDelay);
113+ sideStage.activateApplication(appId, addDelay);
114114 }
115115 stages.show();
116116 }
@@ -413,6 +413,7 @@ FocusScope {
413413 width: parent.width
414414 height: parent.height - panel.panelHeight
415415 background: shell.background
416+ pinLength: 4
416417
417418 onEntered: LightDM.Greeter.respond(passphrase);
418419 onCancel: greeter.show()
@@ -576,6 +577,10 @@ FocusScope {
576577 stages.hide()
577578 }
578579
580+ function hideIndicatorMenu(delay) {
581+ panel.hideIndicatorMenu(delay);
582+ }
583+
579584 Item {
580585 id: overlay
581586
@@ -667,7 +672,12 @@ FocusScope {
667672 dragAreaWidth: shell.edgeSize
668673 available: (!greeter.shown || greeter.narrowMode) && edgeDemo.launcherEnabled
669674
670− onDashItemSelected: showHome()
675+ onShowDashHome: {
676+ if (edgeDemo.running)
677+ return;
678+
679+ showHome()
680+ }
671681 onDash: {
672682 if (stages.shown) {
673683 stages.hide();
@@ -676,6 +686,9 @@ FocusScope {
676686 }
677687 onDashSwipeChanged: if (dashSwipe && stages.shown) dash.setCurrentScope("applications.scope", false, true)
678688 onLauncherApplicationSelected:{
689+ if (edgeDemo.running)
690+ return;
691+
679692 greeter.hide()
680693 shell.activateApplication(appId)
681694 }
@@ -692,13 +705,14 @@ FocusScope {
692705 id: notifications
693706
694707 model: NotificationBackend.Model
708+ margin: units.gu(1)
709+ fullHeight: parent.height - panel.panelHeight
710+
695711 anchors {
696712 top: parent.top
697713 right: parent.right
698714 bottom: parent.bottom
699− leftMargin: units.gu(1)
700− rightMargin: units.gu(1)
701− topMargin: panel.panelHeight + units.gu(1)
715+ topMargin: panel.panelHeight
702716 }
703717 states: [
704718 State {
SideStage/SideStage.qml → qml/SideStage/SideStage.qmlrenamed

The content is the same.

SideStage/SidestageHandle.qml → qml/SideStage/SidestageHandle.qmlrenamed

The content is the same.

SideStage/graphics/sidestage_handle@20.png → qml/SideStage/graphics/sidestage_handle@20.pngrenamed

Binary file not shown.

SideStage/graphics/sidestage_handle@20.sci → qml/SideStage/graphics/sidestage_handle@20.scirenamed

The content is the same.

graphics/12_10_background_wide@12.png → qml/graphics/12_10_background_wide@12.pngrenamed

Binary file not shown.

graphics/applicationIcons/angrybirds@18.png → qml/graphics/applicationIcons/angrybirds@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/browser@18.png → qml/graphics/applicationIcons/browser@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/calendar@18.png → qml/graphics/applicationIcons/calendar@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/camera@18.png → qml/graphics/applicationIcons/camera@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/contacts-app@18.png → qml/graphics/applicationIcons/contacts-app@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/dash@18.png → qml/graphics/applicationIcons/dash@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/evernote@18.png → qml/graphics/applicationIcons/evernote@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/facebook@18.png → qml/graphics/applicationIcons/facebook@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/gallery@18.png → qml/graphics/applicationIcons/gallery@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/gmail@18.png → qml/graphics/applicationIcons/gmail@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/map@18.png → qml/graphics/applicationIcons/map@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/media-player@18.png → qml/graphics/applicationIcons/media-player@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/messages-app@18.png → qml/graphics/applicationIcons/messages-app@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/music@18.png → qml/graphics/applicationIcons/music@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/notepad@18.png → qml/graphics/applicationIcons/notepad@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/phone-app@18.png → qml/graphics/applicationIcons/phone-app@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/pinterest@18.png → qml/graphics/applicationIcons/pinterest@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/ski_safari@18.png → qml/graphics/applicationIcons/ski_safari@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/skype@18.png → qml/graphics/applicationIcons/skype@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/soundcloud@18.png → qml/graphics/applicationIcons/soundcloud@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/system-settings@18.png → qml/graphics/applicationIcons/system-settings@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/twitter@18.png → qml/graphics/applicationIcons/twitter@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/weather@18.png → qml/graphics/applicationIcons/weather@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/wikipedia@18.png → qml/graphics/applicationIcons/wikipedia@18.pngrenamed

Binary file not shown.

graphics/applicationIcons/youtube@18.png → qml/graphics/applicationIcons/youtube@18.pngrenamed

Binary file not shown.

graphics/avatars/amanda@12.png → qml/graphics/avatars/amanda@12.pngrenamed

Binary file not shown.

graphics/avatars/anna_olsson@12.png → qml/graphics/avatars/anna_olsson@12.pngrenamed

Binary file not shown.

graphics/avatars/funky@12.png → qml/graphics/avatars/funky@12.pngrenamed

Binary file not shown.

graphics/clock@18.png → qml/graphics/clock@18.pngrenamed

Binary file not shown.

graphics/phone_background.jpg → qml/graphics/phone_background.jpgrenamed

Binary file not shown.

graphics/tablet_background.jpg → qml/graphics/tablet_background.jpgrenamed

Binary file not shown.

run+7−6
@@ -1,6 +1,9 @@
11#!/bin/sh
22
3−QML_PHONE_SHELL_PATH=./builddir/unity8
3+. /etc/environment
4+export QML2_IMPORT_PATH
5+
6+QML_PHONE_SHELL_PATH=./builddir/src/unity8
47GDB=false
58FAKE=false
69PINLOCK=false
@@ -40,19 +43,17 @@ do
4043done
4144
4245if $FAKE; then
43− export QML2_IMPORT_PATH=$PWD/builddir/tests/mocks:$PWD/builddir/plugins:$PWD/builddir/modules
46+ export QML2_IMPORT_PATH=$QML2_IMPORT_PATH:$PWD/builddir/tests/mocks:$PWD/builddir/plugins:$PWD/builddir/modules
4447 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/builddir/tests/mocks/libusermetrics:$PWD/builddir/tests/mocks/LightDM/single
45−else
46− export QML2_IMPORT_PATH=`pkg-config --variable=plugindir unity-shell-api`
4748fi
4849
4950if $PINLOCK; then
50− export QML2_IMPORT_PATH=$PWD/builddir/tests/mocks:$PWD/builddir/plugins:$PWD/builddir/modules
51+ export QML2_IMPORT_PATH=$QML2_IMPORT_PATH:$PWD/builddir/tests/mocks:$PWD/builddir/plugins:$PWD/builddir/modules
5152 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/builddir/tests/mocks/libusermetrics:$PWD/builddir/tests/mocks/LightDM/single-pin
5253fi
5354
5455if $KEYLOCK; then
55− export QML2_IMPORT_PATH=$PWD/builddir/tests/mocks:$PWD/builddir/plugins:$PWD/builddir/modules
56+ export QML2_IMPORT_PATH=$QML2_IMPORT_PATH:$PWD/builddir/tests/mocks:$PWD/builddir/plugins:$PWD/builddir/modules
5657 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/builddir/tests/mocks/libusermetrics:$PWD/builddir/tests/mocks/LightDM/single-passphrase
5758fi
5859
run_on_device−1
@@ -88,7 +88,6 @@ sync_code() {
8888}
8989
9090build() {
91− exec_with_ssh "[ $CODE_DIR/debian/control -nt unity8-build-deps*deb ] && $SUDO mk-build-deps --tool=\\\"apt-get -y --no-install-recommends\\\" --build-dep --install $CODE_DIR/debian/control"
9291 exec_with_ssh PATH=/usr/lib/ccache:$PATH "cd $CODE_DIR/ && PATH=/usr/lib/ccache:$PATH ./build"
9392}
9493
runtests.sh+1−13
@@ -26,19 +26,7 @@
2626# floating point operations and xml writing is natively supported.
2727
2828
29−if test -e Shell.qml; then
30− echo In-source build detected.
31− SRCDIR=`pwd`
32−elif test -e ../Shell.qml; then
33− echo Out-of-source build detected. Found source dir at ..
34− SRCDIR=`pwd`/..
35−else
36− echo Out-of-source build detected. Source dir not found at ..
37− echo Only in-source builds or out-of-source builds with source dir at .. are supported.
38− exit 1
39−fi
40−
41−cd $SRCDIR
29+SRCDIR=`dirname "$(readlink -f "$0")"`
4230
4331file_list=""
4432
ApplicationArguments.h → src/ApplicationArguments.hrenamed

The content is the same.

src/CMakeLists.txt+27
@@ -1 +1,28 @@
1+pkg_check_modules(UNITY-MIR REQUIRED unity-mir)
2+
3+include_directories(
4+ ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
5+ ${UNITY-MIR_INCLUDE_DIRS}
6+)
7+
8+add_executable(${SHELL_APP}
9+ ApplicationArguments.h
10+ main.cpp
11+ MouseTouchAdaptor.cpp
12+ )
13+
14+qt5_use_modules(${SHELL_APP} Gui Qml Quick Test)
15+pkg_check_modules(XCB REQUIRED xcb)
16+
17+if (NOT "${XCB_INCLUDE_DIRS}" STREQUAL "")
18+ set_target_properties(${SHELL_APP} PROPERTIES INCLUDE_DIRECTORIES ${XCB_INCLUDE_DIRS})
19+
20+ target_link_libraries(${SHELL_APP} ${XCB_LDFLAGS})
21+endif()
22+
23+# install binaries
24+install(TARGETS ${SHELL_APP}
25+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
26+ )
27+
128add_subdirectory(Panel)
MouseTouchAdaptor.cpp → src/MouseTouchAdaptor.cpprenamed

The content is the same.

MouseTouchAdaptor.h → src/MouseTouchAdaptor.hrenamed

The content is the same.

src/Panel/Indicators/client/CMakeLists.txt−4
@@ -14,10 +14,6 @@ add_executable(${INDICATORS_CLIENT_APP}
1414 ${INDICATORS_CLIENT_HEADERS}
1515)
1616
17−include_directories(
18− ${CMAKE_BINARY_DIR}
19−)
20−
2117qt5_use_modules(${INDICATORS_CLIENT_APP} Core Widgets Quick)
2218set_target_properties(${INDICATORS_CLIENT_APP} PROPERTIES COMPILE_FLAGS -fPIC)
2319
src/Panel/Indicators/client/indicatorsclient.cpp+3−37
@@ -19,48 +19,14 @@
1919 */
2020
2121#include "indicatorsclient.h"
22−#include "paths.h"
22+
23+#include <paths.h>
2324
2425#include <QQuickView>
2526#include <QQmlContext>
2627#include <QQmlEngine>
2728#include <QDebug>
2829
29−namespace {
30−
31−void prependImportPaths(QQmlEngine *engine, const QStringList &paths)
32−{
33− QStringList importPathList = engine->importPathList();
34− for (int i = paths.count()-1; i >= 0; i--) {
35− importPathList.prepend(paths[i]);
36− }
37− engine->setImportPathList(importPathList);
38−}
39−
40−/* When you append and import path to the list of import paths it will be the *last*
41− place where Qt will search for QML modules.
42− The usual QQmlEngine::addImportPath() actually prepends the given path.*/
43−void appendImportPaths(QQmlEngine *engine, const QStringList &paths)
44−{
45− QStringList importPathList = engine->importPathList();
46− Q_FOREACH(const QString& path, paths) {
47− // don't duplicate
48− QStringList::iterator iter = qFind(importPathList.begin(), importPathList.end(), path);
49− if (iter == importPathList.end()) {
50− importPathList.append(path);
51− }
52− }
53− engine->setImportPathList(importPathList);
54−}
55−
56−void resolveIconTheme() {
57− QString ubuntuIconTheme = getenv("UBUNTU_ICON_THEME");
58− if (ubuntuIconTheme.isEmpty()) {
59− QIcon::setThemeName("ubuntu-mobile");
60− }
61−}
62−} // namespace
63−
6430IndicatorsClient::IndicatorsClient(int &argc, char **argv)
6531 : QObject(0),
6632 m_view(0)
@@ -71,7 +37,7 @@ IndicatorsClient::IndicatorsClient(int &argc, char **argv)
7137 QStringList args = m_application->arguments();
7238
7339 m_view = new QQuickView;
74− m_view->engine()->setBaseUrl(QUrl::fromLocalFile(::shellAppDirectory()+"Panel/Indicators/client/"));
40+ m_view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()+"Panel/Indicators/client/"));
7541 prependImportPaths(m_view->engine(), ::overrideImportPaths());
7642 appendImportPaths(m_view->engine(), ::fallbackImportPaths());
7743
main.cpp → src/main.cpprenamed+9−43
@@ -19,7 +19,6 @@
1919
2020// Qt
2121#include <QtQuick/QQuickView>
22−#include <QtGui/QIcon>
2322#include <QtGui/QGuiApplication>
2423#include <QtQml/QQmlEngine>
2524#include <QtQml/QQmlContext>
@@ -28,53 +27,15 @@
2827#include <QDebug>
2928#include <libintl.h>
3029#include <dlfcn.h>
30+#include <csignal>
3131
3232// local
33−#include "paths.h"
33+#include <paths.h>
3434#include "MouseTouchAdaptor.h"
3535#include "ApplicationArguments.h"
3636
3737#include <unity-mir/qmirserver.h>
3838
39−namespace {
40−
41−void prependImportPaths(QQmlEngine *engine, const QStringList &paths)
42−{
43− QStringList importPathList = engine->importPathList();
44− for (int i = paths.count() -1; i >= 0; i--) {
45− // don't duplicate
46− const QString& path = paths[i];
47− QStringList::iterator iter = qFind(importPathList.begin(), importPathList.end(), path);
48− if (iter == importPathList.end()) {
49− engine->addImportPath(path);
50− }
51− }
52−}
53−
54−/* When you append and import path to the list of import paths it will be the *last*
55− place where Qt will search for QML modules.
56− The usual QQmlEngine::addImportPath() actually prepends the given path.*/
57−void appendImportPaths(QQmlEngine *engine, const QStringList &paths)
58−{
59− QStringList importPathList = engine->importPathList();
60− Q_FOREACH(const QString& path, paths) {
61− // don't duplicate
62− QStringList::iterator iter = qFind(importPathList.begin(), importPathList.end(), path);
63− if (iter == importPathList.end()) {
64− importPathList.append(path);
65− }
66− }
67− engine->setImportPathList(importPathList);
68−}
69−
70−void resolveIconTheme() {
71− const char *ubuntuIconTheme = getenv("UBUNTU_ICON_THEME");
72− if (ubuntuIconTheme == NULL) {
73− ubuntuIconTheme = "ubuntu-mobile";
74− }
75− QIcon::setThemeName(ubuntuIconTheme);
76−}
77−} // namespace {
7839
7940int startShell(int argc, const char** argv, void* server)
8041{
@@ -125,7 +86,7 @@ int startShell(int argc, const char** argv, void* server)
12586 QQuickView* view = new QQuickView();
12687 view->setResizeMode(QQuickView::SizeRootObjectToView);
12788 view->setTitle("Qml Phone Shell");
128− view->engine()->setBaseUrl(QUrl::fromLocalFile(::shellAppDirectory()));
89+ view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
12990 view->rootContext()->setContextProperty("applicationArguments", &qmlArgs);
13091 if (args.contains(QLatin1String("-frameless"))) {
13192 view->setFlags(Qt::FramelessWindowHint);
@@ -148,7 +109,7 @@ int startShell(int argc, const char** argv, void* server)
148109 nativeInterface->setProperty("ubuntuSessionType", 1);
149110 view->setProperty("role", 2); // INDICATOR_ACTOR_ROLE
150111
151− QUrl source("Shell.qml");
112+ QUrl source(::qmlDirectory()+"Shell.qml");
152113 prependImportPaths(view->engine(), ::overrideImportPaths());
153114 appendImportPaths(view->engine(), ::fallbackImportPaths());
154115
@@ -218,6 +179,11 @@ int main(int argc, const char *argv[])
218179
219180 return runWithClient(mirServer, startShell);
220181 } else {
182+ if (qgetenv("UPSTART_JOB") == "unity8") {
183+ // Emit SIGSTOP as expected by upstart, under Mir it's unity-mir that will raise it.
184+ // see http://upstart.ubuntu.com/cookbook/#expect-stop
185+ raise(SIGSTOP);
186+ }
221187 return startShell(argc, argv, nullptr);
222188 }
223189}
tests/autopilot/.projectnew file+17
@@ -0,0 +1,17 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<projectDescription>
3+ <name>Unity8 Autopilot</name>
4+ <comment></comment>
5+ <projects>
6+ </projects>
7+ <buildSpec>
8+ <buildCommand>
9+ <name>org.python.pydev.PyDevBuilder</name>
10+ <arguments>
11+ </arguments>
12+ </buildCommand>
13+ </buildSpec>
14+ <natures>
15+ <nature>org.python.pydev.pythonNature</nature>
16+ </natures>
17+</projectDescription>
tests/autopilot/.pydevprojectnew file+8
@@ -0,0 +1,8 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<?eclipse-pydev version="1.0"?><pydev_project>
3+<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
4+<path>/Unity8 Autopilot</path>
5+</pydev_pathproperty>
6+<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
7+<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
8+</pydev_project>
tests/autopilot/unity8/application_lifecycle/tests/test_application_lifecycle.py+7−6
@@ -21,6 +21,7 @@
2121
2222from __future__ import absolute_import
2323
24+from unity8.process_helpers import unlock_unity
2425from unity8.shell import disable_qml_mocking
2526from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
2627
@@ -78,8 +79,8 @@ class ApplicationLifecycleTests(UnityTestCase):
7879 @disable_qml_mocking
7980 def test_can_launch_application(self):
8081 """Must be able to launch an application."""
81− self.launch_unity()
82− self.main_window.get_greeter().swipe()
82+ unity_proxy = self.launch_unity()
83+ unlock_unity(unity_proxy)
8384
8485 app = self._launch_app("messaging-app")
8586
@@ -92,8 +93,8 @@ class ApplicationLifecycleTests(UnityTestCase):
9293 @disable_qml_mocking
9394 def test_can_launch_multiple_applications(self):
9495 """A second application launched must be focused."""
95− self.launch_unity()
96− self.main_window.get_greeter().swipe()
96+ unity_proxy = self.launch_unity()
97+ unlock_unity(unity_proxy)
9798
9899 self._launch_app("messaging-app")
99100 self.assertThat(
@@ -113,8 +114,8 @@ class ApplicationLifecycleTests(UnityTestCase):
113114 brought back to the focused state.
114115
115116 """
116− self.launch_unity()
117− self.main_window.get_greeter().swipe()
117+ unity_proxy = self.launch_unity()
118+ unlock_unity(unity_proxy)
118119
119120 self._launch_app("messaging-app")
120121 self.assertThat(
tests/autopilot/unity8/process_helpers.py+17−1
@@ -69,7 +69,23 @@ def unlock_unity(unity_proxy_obj=None):
6969 greeter = main_window.get_greeter()
7070 if greeter.created == False:
7171 raise RuntimeWarning("Greeter appears to be already unlocked.")
72− greeter.swipe()
72+
73+ # Because of potential input jerkiness under heavy load,
74+ # retry unlocking the greeter two times.
75+ # https://bugs.launchpad.net/ubuntu/+bug/1260113
76+
77+ retries = 3
78+ while retries > 0:
79+ try:
80+ greeter.swipe()
81+ except AssertionError:
82+ retries -= 1
83+ if retries == 0:
84+ raise
85+ logger.info("Failed to unlock greeter, trying again...")
86+ else:
87+ logger.info("Greeter unlocked, continuing.")
88+ break
7389
7490
7591def restart_unity_with_testability(*args):
tests/autopilot/unity8/shell/tests/test_lock_screen.py+9−8
@@ -20,6 +20,7 @@
2020
2121from __future__ import absolute_import
2222
23+from unity8.process_helpers import unlock_unity
2324from unity8.shell import with_lightdm_mock
2425from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
2526
@@ -40,11 +41,11 @@ class TestLockscreen(UnityTestCase):
4041 @with_lightdm_mock("single-pin")
4142 def test_can_unlock_pin_screen(self):
4243 """Must be able to unlock the PIN entry lock screen."""
43− self.launch_unity()
44+ unity_proxy = self.launch_unity()
4445 greeter = self.main_window.get_greeter()
4546
4647 if greeter.narrowMode:
47− greeter.swipe()
48+ unlock_unity(unity_proxy)
4849 lockscreen = self._wait_for_lockscreen()
4950 self._enter_pincode("1234")
5051 self.assertThat(lockscreen.shown, Eventually(Equals(False)))
@@ -55,11 +56,11 @@ class TestLockscreen(UnityTestCase):
5556 @with_lightdm_mock("single-passphrase")
5657 def test_can_unlock_passphrase_screen(self):
5758 """Must be able to unlock the passphrase entry screen."""
58− self.launch_unity()
59+ unity_proxy = self.launch_unity()
5960 greeter = self.main_window.get_greeter()
6061
6162 if greeter.narrowMode:
62− greeter.swipe()
63+ unlock_unity(unity_proxy)
6364 lockscreen = self._wait_for_lockscreen()
6465 self._enter_pin_passphrase("password")
6566 self.assertThat(lockscreen.shown, Eventually(Equals(False)))
@@ -70,11 +71,11 @@ class TestLockscreen(UnityTestCase):
7071 @with_lightdm_mock("single-pin")
7172 def test_pin_screen_wrong_code(self):
7273 """Entering the wrong pin code must not dismiss the lock screen."""
73− self.launch_unity()
74+ unity_proxy = self.launch_unity()
7475 greeter = self.main_window.get_greeter()
7576
7677 if greeter.narrowMode:
77− greeter.swipe()
78+ unlock_unity(unity_proxy)
7879 lockscreen = self._wait_for_lockscreen()
7980 self._enter_pincode("4321")
8081 pinentryField = self.main_window.get_pinentryField()
@@ -89,11 +90,11 @@ class TestLockscreen(UnityTestCase):
8990 @with_lightdm_mock("single-passphrase")
9091 def test_passphrase_screen_wrong_password(self):
9192 """Entering the wrong password must not dismiss the lock screen."""
92− self.launch_unity()
93+ unity_proxy = self.launch_unity()
9394 greeter = self.main_window.get_greeter()
9495
9596 if greeter.narrowMode:
96− greeter.swipe()
97+ unlock_unity(unity_proxy)
9798 lockscreen = self._wait_for_lockscreen()
9899 self._enter_pin_passphrase("foobar")
99100 pinentryField = self.main_window.get_pinentryField()
tests/autopilot/unity8/shell/tests/test_notifications.py+1−1
@@ -65,7 +65,7 @@ class NotificationsBase(UnityTestCase):
6565 def _get_notifications_list(self):
6666 main_view = self.main_window.get_qml_view()
6767 return main_view.select_single(
68− "QQuickListView",
68+ "Notifications",
6969 objectName='notificationList'
7070 )
7171
tests/autopilot/unity8/shell/tests/test_upstart.pynew file+99
@@ -0,0 +1,99 @@
1+# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2+#
3+# Unity Autopilot Test Suite
4+# Copyright (C) 2013 Canonical
5+#
6+# This program is free software: you can redistribute it and/or modify
7+# it under the terms of the GNU General Public License as published by
8+# the Free Software Foundation, either version 3 of the License, or
9+# (at your option) any later version.
10+#
11+# This program is distributed in the hope that it will be useful,
12+# but WITHOUT ANY WARRANTY; without even the implied warranty of
13+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+# GNU General Public License for more details.
15+#
16+# You should have received a copy of the GNU General Public License
17+# along with this program. If not, see <http://www.gnu.org/licenses/>.
18+#
19+
20+"""Tests for upstart integration."""
21+
22+import os
23+import signal
24+import subprocess
25+import time
26+
27+from testtools.matchers._basic import Equals
28+from autopilot.matchers import Eventually
29+from autopilot.introspection import get_proxy_object_for_existing_process
30+
31+from unity8 import get_binary_path
32+from unity8.shell.emulators import UnityEmulatorBase
33+from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
34+
35+import logging
36+
37+logger = logging.getLogger(__name__)
38+
39+
40+class UpstartIntegrationTests(UnityTestCase):
41+
42+ scenarios = _get_device_emulation_scenarios()
43+
44+ def _get_status(self):
45+ pid, status = os.waitpid(self.process.pid, os.WUNTRACED | os.WCONTINUED | os.WNOHANG)
46+ logger.debug("Got status: {0}; stopped: {1}; continued: {2}"\
47+ .format(status, os.WIFSTOPPED(status), os.WIFCONTINUED(status)))
48+ return status
49+
50+ def _launch_unity(self):
51+ self.patch_environment("QT_LOAD_TESTABILITY", "1")
52+ self.process = subprocess.Popen([get_binary_path()] + self.unity_geometry_args)
53+ def ensure_stopped():
54+ self.process.terminate()
55+ for i in xrange(10):
56+ try:
57+ self._get_status()
58+ except OSError:
59+ break
60+ else:
61+ time.sleep(1)
62+ try:
63+ self._get_status()
64+ except OSError:
65+ pass
66+ else:
67+ self.process.kill()
68+
69+ self.process.wait()
70+
71+ self.addCleanup(ensure_stopped)
72+
73+ def _set_proxy(self):
74+ super(UpstartIntegrationTests, self)._set_proxy(get_proxy_object_for_existing_process(
75+ pid=self.process.pid,
76+ emulator_base=UnityEmulatorBase,
77+ ))
78+
79+ def test_no_sigstop(self):
80+ self.patch_environment("UPSTART_JOB", "foo")
81+ self._launch_unity()
82+ self._set_proxy()
83+
84+ logger.debug("Unity started, waiting for it to be ready.")
85+ self.assertUnityReady()
86+ logger.debug("Unity loaded and ready.")
87+
88+ def test_expect_sigstop(self):
89+ self.patch_environment("UPSTART_JOB", "unity8")
90+ self._launch_unity()
91+ self.assertThat(lambda: os.WIFSTOPPED(self._get_status()), Eventually(Equals(True)), "Unity8 should raise SIGSTOP when ready")
92+
93+ self.process.send_signal(signal.SIGCONT)
94+ self.assertThat(lambda: os.WIFCONTINUED(self._get_status()), Eventually(Equals(True)), "Unity8 should have resumed")
95+
96+ logger.debug("Unity started, waiting for it to be ready.")
97+ self._set_proxy()
98+ self.assertUnityReady()
99+ logger.debug("Unity loaded and ready.")
tests/mocks/CMakeLists.txt+1
@@ -7,6 +7,7 @@ add_subdirectory(Powerd)
77add_subdirectory(QMenuModel)
88add_subdirectory(Ubuntu)
99add_subdirectory(Unity)
10+add_subdirectory(QtMultimedia)
1011
1112install(
1213 DIRECTORY data
tests/mocks/LightDM/CMakeLists.txt+3−1
@@ -13,10 +13,12 @@ add_subdirectory(single-passphrase)
1313include_directories(
1414 ${CMAKE_CURRENT_SOURCE_DIR}
1515 ${CMAKE_CURRENT_BINARY_DIR}
16+ ${CMAKE_SOURCE_DIR}/plugins/Utils
1617 ${CMAKE_SOURCE_DIR}/tests/mocks/libusermetrics
1718)
1819
1920set(QMLPLUGIN_SRC
21+ ${CMAKE_SOURCE_DIR}/plugins/LightDM/DBusGreeterList.cpp
2022 ${CMAKE_SOURCE_DIR}/plugins/LightDM/Greeter.cpp
2123 ${CMAKE_SOURCE_DIR}/plugins/LightDM/plugin.cpp
2224 ${CMAKE_SOURCE_DIR}/plugins/LightDM/UsersModel.cpp
@@ -39,7 +41,7 @@ target_link_libraries(MockLightDM-qml
3941 -lusermetricsoutput
4042 )
4143
42−qt5_use_modules(MockLightDM-qml Gui Qml)
44+qt5_use_modules(MockLightDM-qml DBus Gui Qml)
4345
4446# copy qmldir file into build directory for shadow builds
4547file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
tests/mocks/LightDM/demo/CMakeLists.txt−1
@@ -1,4 +1,3 @@
1−include(FindPkgConfig)
21pkg_check_modules(LIBUSERMETRICSOUTPUT REQUIRED libusermetricsoutput-1)
32
43set(LibLightDM_SOURCES
tests/mocks/QtMultimedia/CMakeLists.txtnew file+19
@@ -0,0 +1,19 @@
1+add_library(QtMultimedia-qml MODULE
2+ plugin.cpp
3+ audio.cpp
4+ )
5+
6+qt5_use_modules(QtMultimedia-qml Qml)
7+
8+# copy qmldir file into build directory for shadow builds
9+file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
10+ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
11+ )
12+
13+install(TARGETS QtMultimedia-qml
14+ DESTINATION ${SHELL_INSTALL_QML}/mocks/QtMultimedia
15+ )
16+
17+install(FILES qmldir
18+ DESTINATION ${SHELL_INSTALL_QML}/mocks/QtMultimedia
19+ )
tests/mocks/QtMultimedia/audio.cppnew file+107
@@ -0,0 +1,107 @@
1+/*
2+ * Copyright (C) 2013 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+ * Author: Michael Zanetti <michael.zanetti@canonical.com>
17+ */
18+
19+#include "audio.h"
20+
21+Audio::Audio(QObject* parent):
22+ QObject(parent),
23+ m_playbackState(StoppedState)
24+{
25+ qsrand(time(NULL));
26+ m_timer.setInterval(1000);
27+ connect(&m_timer, SIGNAL(timeout()), SLOT(timerEvent()));
28+}
29+
30+QUrl Audio::source() const
31+{
32+ return m_source;
33+}
34+
35+void Audio::setSource(const QUrl &source)
36+{
37+ if (m_source != source) {
38+ m_source = source;
39+ Q_EMIT sourceChanged(source);
40+
41+ m_position = 0;
42+ Q_EMIT positionChanged(m_position);
43+
44+ m_duration = (qrand() % 20000) + 10000;
45+ Q_EMIT durationChanged(m_duration);
46+ }
47+}
48+
49+Audio::PlaybackState Audio::playbackState() const
50+{
51+ return m_playbackState;
52+}
53+
54+int Audio::position() const
55+{
56+ return m_position;
57+}
58+
59+int Audio::duration() const
60+{
61+ return m_duration;
62+}
63+
64+QString Audio::errorString() const
65+{
66+ return QString();
67+}
68+
69+void Audio::pause()
70+{
71+ if (m_playbackState == PlayingState) {
72+ m_playbackState = PausedState;
73+ Q_EMIT playbackStateChanged(m_playbackState);
74+ m_timer.stop();
75+ }
76+}
77+
78+void Audio::play()
79+{
80+ if (m_playbackState != PlayingState && m_source.isValid()) {
81+ m_playbackState = PlayingState;
82+ Q_EMIT playbackStateChanged(m_playbackState);
83+
84+ m_timer.start();
85+ }
86+}
87+
88+void Audio::stop()
89+{
90+ if (m_playbackState != StoppedState) {
91+ m_playbackState = StoppedState;
92+ Q_EMIT playbackStateChanged(m_playbackState);
93+ m_timer.stop();
94+ m_position = 0;
95+ Q_EMIT positionChanged(m_position);
96+ }
97+}
98+
99+void Audio::timerEvent()
100+{
101+ if (m_position + 1000 < m_duration) {
102+ m_position += 1000;
103+ Q_EMIT positionChanged(m_position);
104+ } else {
105+ stop();
106+ }
107+}
tests/mocks/QtMultimedia/audio.hnew file+78
@@ -0,0 +1,78 @@
1+/*
2+ * Copyright (C) 2012,2013 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+ * Authors: Michael Zanetti <michael.zanetti@canonical.com>
17+ */
18+
19+#ifndef MOCK_AUDIO_H
20+#define MOCK_AUDIO_H
21+
22+#include <QObject>
23+#include <QUrl>
24+#include <QTimer>
25+
26+class Audio: public QObject
27+{
28+ Q_OBJECT
29+ Q_ENUMS(PlaybackState)
30+ Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
31+ Q_PROPERTY(PlaybackState playbackState READ playbackState NOTIFY playbackStateChanged)
32+ Q_PROPERTY(int position READ position NOTIFY positionChanged)
33+ Q_PROPERTY(int duration READ duration NOTIFY durationChanged)
34+ Q_PROPERTY(QString errorString READ errorString NOTIFY errorStringChanged)
35+public:
36+ enum PlaybackState {
37+ PlayingState,
38+ PausedState,
39+ StoppedState
40+ };
41+
42+ explicit Audio(QObject *parent = 0);
43+
44+ QUrl source() const;
45+ void setSource(const QUrl &source);
46+
47+ PlaybackState playbackState() const;
48+
49+ int position() const;
50+
51+ int duration() const;
52+
53+ QString errorString() const;
54+
55+public Q_SLOTS:
56+ void pause();
57+ void play();
58+ void stop();
59+
60+Q_SIGNALS:
61+ void sourceChanged(const QUrl &source);
62+ void playbackStateChanged(PlaybackState playbackState);
63+ void positionChanged(int position);
64+ void durationChanged(int duration);
65+ void errorStringChanged(const QString &errorString);
66+
67+private Q_SLOTS:
68+ void timerEvent();
69+
70+private:
71+ QUrl m_source;
72+ PlaybackState m_playbackState;
73+ QTimer m_timer;
74+ int m_position;
75+ int m_duration;
76+};
77+
78+#endif
tests/mocks/QtMultimedia/plugin.cppnew file+28
@@ -0,0 +1,28 @@
1+/*
2+ * Copyright (C) 2012,2013 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+ * Authors: Michael Zanetti <michael.zanetti@canonical.com>
17+ */
18+
19+#include "plugin.h"
20+#include "audio.h"
21+
22+#include <QtQml/qqml.h>
23+
24+void MockQtMultimediaPlugin::registerTypes(const char *uri)
25+{
26+ Q_ASSERT(uri == QLatin1String("QtMultimedia"));
27+ qmlRegisterType<Audio>(uri, 5, 0, "Audio");
28+}
tests/mocks/QtMultimedia/plugin.hnew file+34
@@ -0,0 +1,34 @@
1+/*
2+ * Copyright (C) 2012,2013 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+ * Authors: Michael Zanetti <michael.zanetti@canonical.com>
17+ */
18+
19+#ifndef MOCK_QTMULTIMEDIA_PLUGIN_H
20+#define MOCK_QTMULTIMEDIA_PLUGIN_H
21+
22+#include <QtQml/QQmlEngine>
23+#include <QtQml/QQmlExtensionPlugin>
24+
25+class MockQtMultimediaPlugin : public QQmlExtensionPlugin
26+{
27+ Q_OBJECT
28+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
29+
30+public:
31+ void registerTypes(const char *uri);
32+};
33+
34+#endif
tests/mocks/QtMultimedia/qmldirnew file+2
@@ -0,0 +1,2 @@
1+module QtMultimedia
2+plugin QtMultimedia-qml
tests/mocks/Unity/Application/ApplicationManager.cpp+4−3
@@ -16,7 +16,8 @@
1616
1717#include "ApplicationManager.h"
1818#include "ApplicationInfo.h"
19−#include "paths.h"
19+
20+#include <paths.h>
2021
2122#include <QDir>
2223#include <QGuiApplication>
@@ -273,7 +274,7 @@ void ApplicationManager::generateQmlStrings(ApplicationInfo *application)
273274 " smooth: true\n"
274275 " fillMode: Image.PreserveAspectCrop\n"
275276 "}").arg(topMargin)
276− .arg(shellAppDirectory())
277+ .arg(qmlDirectory())
277278 .arg(application->icon().toString());
278279 application->setWindowQml(windowQml);
279280
@@ -284,7 +285,7 @@ void ApplicationManager::generateQmlStrings(ApplicationInfo *application)
284285 " source: \"file://%1/Dash/graphics/phone/screenshots/%2.png\"\n"
285286 " smooth: true\n"
286287 " fillMode: Image.PreserveAspectCrop\n"
287− "}").arg(shellAppDirectory())
288+ "}").arg(qmlDirectory())
288289 .arg(application->icon().toString());
289290 application->setImageQml(imageQml);
290291}
tests/mocks/Unity/Application/CMakeLists.txt−1
@@ -1,4 +1,3 @@
1−include(FindPkgConfig)
21pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application)
32
43set(FakeUnityApplicationQml_SOURCES
tests/mocks/Unity/Launcher/CMakeLists.txt−1
@@ -1,4 +1,3 @@
1−include(FindPkgConfig)
21pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=3)
32
43add_definitions(-DTOP_SRCDIR="${CMAKE_SOURCE_DIR}")
tests/mocks/Unity/fake_scope.cpp+3−3
@@ -16,7 +16,7 @@
1616
1717#include "fake_scope.h"
1818#include "fake_preview.h"
19−#include "paths.h"
19+#include <paths.h>
2020
2121#include <dee.h>
2222
@@ -204,7 +204,7 @@ DeeModel* create_categories_model(unsigned category_count) {
204204 std::to_string(i).c_str(),
205205 ("Category "+std::to_string(i)).c_str(),
206206 "gtk-apply",
207− "grid",
207+ i % 2 == 0 ? "grid" : "carousel",
208208 hints);
209209 }
210210 return category_model;
@@ -236,7 +236,7 @@ DeeModel* create_results_model(unsigned category_count, unsigned result_count) {
236236
237237 dee_model_append(results_model,
238238 ("uri://result."+std::to_string(i)).c_str(),
239− (shellAppDirectory() + "graphics/applicationIcons/dash.png").toLatin1().data(),
239+ (qmlDirectory() + "graphics/applicationIcons/dash.png").toLatin1().data(),
240240 category,
241241 0,
242242 "application/x-desktop",
tests/mocks/libusermetrics/CMakeLists.txt+4
@@ -8,6 +8,10 @@ add_library(MockUserMetrics SHARED ${mock_SOURCES})
88
99qt5_use_modules(MockUserMetrics Gui)
1010
11+include_directories(
12+ ${CMAKE_SOURCE_DIR}/plugins/Utils
13+)
14+
1115set_target_properties(MockUserMetrics PROPERTIES
1216 OUTPUT_NAME usermetricsoutput
1317 VERSION 1)
tests/mocks/libusermetrics/UserMetrics.cpp+1−1
@@ -17,7 +17,7 @@
1717 */
1818
1919#include "UserMetrics.h"
20−#include "plugins/Utils/qvariantlistmodel.h"
20+#include <qvariantlistmodel.h>
2121
2222#include <QtCore/QDir>
2323#include <QtCore/QString>
tests/plugins/AccountsService/CMakeLists.txt+6−1
@@ -1,6 +1,11 @@
1+if(DEFINED ENV{DEB_BUILD_MULTIARCH})
2+ set(QDBUSXML2CPP_EXECUTABLE "/usr/lib/$ENV{DEB_BUILD_MULTIARCH}/qt5/bin/qdbusxml2cpp")
3+else()
4+ FIND_PROGRAM(QDBUSXML2CPP_EXECUTABLE qdbusxml2cpp)
5+endif()
16macro(make_dbus_class NAME INTERFACE)
27 if(${CMAKE_CURRENT_SOURCE_DIR}/interfaces.xml IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/${NAME}Adaptor.h)
3− execute_process(COMMAND qdbusxml2cpp -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 -a ${CMAKE_CURRENT_BINARY_DIR}/${NAME}Adaptor ${CMAKE_CURRENT_SOURCE_DIR}/interfaces.xml ${INTERFACE})
49 endif()
510endmacro(make_dbus_class)
611
tests/plugins/CMakeLists.txt+2−1
@@ -1,5 +1,6 @@
11add_subdirectory(AccountsService)
2−add_subdirectory(ListViewWithPageHeader)
2+add_subdirectory(LightDM)
3+add_subdirectory(DashViews)
34add_subdirectory(Ubuntu)
45add_subdirectory(Unity)
56add_subdirectory(Utils)
tests/plugins/ListViewWithPageHeader/CMakeLists.txt → tests/plugins/DashViews/CMakeLists.txtrenamed+16−5
@@ -16,30 +16,40 @@ include_directories(
1616 ${Qt5Quick_INCLUDE_DIRS}
1717 ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
1818 ${Qt5V8_PRIVATE_INCLUDE_DIR}
19− ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/ListViewWithPageHeader
19+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews
2020 ${CMAKE_CURRENT_BINARY_DIR}
2121 )
2222
2323remove_definitions(-DQT_NO_KEYWORDS)
2424
25−add_definitions(-DLISTVIEWWITHPAGEHEADER_FOLDER="${CMAKE_CURRENT_SOURCE_DIR}")
25+add_definitions(-DDASHVIEWSTEST_FOLDER="${CMAKE_CURRENT_SOURCE_DIR}")
2626add_definitions(-DBUILT_PLUGINS_DIR="${CMAKE_BINARY_DIR}/plugins")
2727
28−add_executable(listviewwithpageheadertestExec listviewwithpageheadertest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/ListViewWithPageHeader/listviewwithpageheader.cpp)
28+add_executable(listviewwithpageheadertestExec listviewwithpageheadertest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/listviewwithpageheader.cpp)
2929qt5_use_modules(listviewwithpageheadertestExec Test Core Qml)
3030target_link_libraries(listviewwithpageheadertestExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
3131add_custom_target(testlistviewwithpageheader ${CMAKE_CURRENT_BINARY_DIR}/listviewwithpageheadertestExec -o ${CMAKE_BINARY_DIR}/testlistviewwithpageheader.xml,xunitxml -o -,txt)
3232
33−add_executable(listviewwithpageheadertestsectionExec listviewwithpageheadertestsection.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/ListViewWithPageHeader/listviewwithpageheader.cpp)
33+add_executable(listviewwithpageheadertestsectionExec listviewwithpageheadertestsection.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/listviewwithpageheader.cpp)
3434qt5_use_modules(listviewwithpageheadertestsectionExec Test Core Qml)
3535target_link_libraries(listviewwithpageheadertestsectionExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
3636add_custom_target(testlistviewwithpageheadersection ${CMAKE_CURRENT_BINARY_DIR}/listviewwithpageheadertestsectionExec -o ${CMAKE_BINARY_DIR}/testlistviewwithpageheadersection.xml,xunitxml -o -,txt)
3737
38−add_executable(listviewwithpageheadertestsectionexternalmodelExec listviewwithpageheadertestsectionexternalmodel.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/ListViewWithPageHeader/listviewwithpageheader.cpp)
38+add_executable(listviewwithpageheadertestsectionexternalmodelExec listviewwithpageheadertestsectionexternalmodel.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/listviewwithpageheader.cpp)
3939qt5_use_modules(listviewwithpageheadertestsectionexternalmodelExec Test Core Qml)
4040target_link_libraries(listviewwithpageheadertestsectionexternalmodelExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
4141add_custom_target(testlistviewwithpageheadersectionexternalmodel ${CMAKE_CURRENT_BINARY_DIR}/listviewwithpageheadertestsectionexternalmodelExec -o ${CMAKE_BINARY_DIR}/testlistviewwithpageheadersectionexternalmodel.xml,xunitxml -o -,txt)
4242
43+add_executable(verticaljournaltestExec verticaljournaltest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/verticaljournal.cpp)
44+qt5_use_modules(verticaljournaltestExec Test Core Qml)
45+target_link_libraries(verticaljournaltestExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
46+add_custom_target(testVerticalJournal ${CMAKE_CURRENT_BINARY_DIR}/verticaljournaltestExec -o ${CMAKE_BINARY_DIR}/testVerticalJournal.xml,xunitxml -o -,txt)
47+
48+add_executable(verticaljournaltryExec verticaljournaltry.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/verticaljournal.cpp)
49+qt5_use_modules(verticaljournaltryExec Test Core Qml)
50+target_link_libraries(verticaljournaltryExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
51+add_custom_target(tryVerticalJournal ${CMAKE_CURRENT_BINARY_DIR}/verticaljournaltryExec -o ${CMAKE_BINARY_DIR}/testVerticalJournal.xml,xunitxml -o -,txt)
52+
4353set(qmltest_DEFAULT_NO_ADD_TEST TRUE)
4454add_qml_test(. listviewwithpageheaderqml IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins)
4555
@@ -47,3 +57,4 @@ add_dependencies(qmluitests testlistviewwithpageheader)
4757add_dependencies(qmluitests testlistviewwithpageheadersection)
4858add_dependencies(qmluitests testlistviewwithpageheadersectionexternalmodel)
4959add_dependencies(qmluitests testlistviewwithpageheaderqml)
60+add_dependencies(qmluitests testVerticalJournal)
tests/plugins/ListViewWithPageHeader/listviewwithpageheadertest.cpp → tests/plugins/DashViews/listviewwithpageheadertest.cpprenamed+1−1
@@ -118,7 +118,7 @@ private Q_SLOTS:
118118 {
119119 view = new QQuickView();
120120 view->engine()->addImportPath(BUILT_PLUGINS_DIR);
121− view->setSource(QUrl::fromLocalFile(LISTVIEWWITHPAGEHEADER_FOLDER "/test.qml"));
121+ view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/listviewwithpageheadertest.qml"));
122122 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
123123#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
124124 model = view->rootObject()->findChild<QQuickListModel*>();
tests/plugins/ListViewWithPageHeader/test.qml → tests/plugins/DashViews/listviewwithpageheadertest.qmlrenamed+1−1
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.0
18−import ListViewWithPageHeader 0.1
18+import DashViews 0.1
1919
2020Rectangle {
2121 width: 300
tests/plugins/ListViewWithPageHeader/listviewwithpageheadertestsection.cpp → tests/plugins/DashViews/listviewwithpageheadertestsection.cpprenamed+1−1
@@ -133,7 +133,7 @@ private Q_SLOTS:
133133 {
134134 view = new QQuickView();
135135 view->engine()->addImportPath(BUILT_PLUGINS_DIR);
136− view->setSource(QUrl::fromLocalFile(LISTVIEWWITHPAGEHEADER_FOLDER "/test_section.qml"));
136+ view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/listviewwithpageheadertestsection.qml"));
137137 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
138138#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
139139 model = view->rootObject()->findChild<QQuickListModel*>();
tests/plugins/ListViewWithPageHeader/test_section.qml → tests/plugins/DashViews/listviewwithpageheadertestsection.qmlrenamed+1−1
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.0
18−import ListViewWithPageHeader 0.1
18+import DashViews 0.1
1919
2020Rectangle {
2121 width: 300
tests/plugins/ListViewWithPageHeader/listviewwithpageheadertestsectionexternalmodel.cpp → tests/plugins/DashViews/listviewwithpageheadertestsectionexternalmodel.cpprenamed+1−1
@@ -173,7 +173,7 @@ private Q_SLOTS:
173173 {
174174 view = new QQuickView();
175175 view->engine()->addImportPath(BUILT_PLUGINS_DIR);
176− view->setSource(QUrl::fromLocalFile(LISTVIEWWITHPAGEHEADER_FOLDER "/test_sectionexternalmodel.qml"));
176+ view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/listviewwithpageheadertestsectionexternalmodel.qml"));
177177 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
178178 QVERIFY(lvwph);
179179 view->show();
tests/plugins/ListViewWithPageHeader/test_sectionexternalmodel.qml → tests/plugins/DashViews/listviewwithpageheadertestsectionexternalmodel.qmlrenamed+1−1
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.0
18−import ListViewWithPageHeader 0.1
18+import DashViews 0.1
1919
2020Rectangle {
2121 width: 300
tests/plugins/ListViewWithPageHeader/tst_listviewwithpageheaderqml.qml → tests/plugins/DashViews/tst_listviewwithpageheaderqml.qmlrenamed+1−1
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import QtTest 1.0
19−import ListViewWithPageHeader 0.1
19+import DashViews 0.1
2020
2121Rectangle {
2222 width: 300
tests/plugins/DashViews/verticaljournaltest.cppnew file+438
@@ -0,0 +1,438 @@
1+/*
2+ * Copyright (C) 2013 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 <QQuickView>
18+#include <QtTestGui>
19+#include <QDebug>
20+#include <QGuiApplication>
21+#include <QQuickView>
22+#include <QtQml/qqml.h>
23+#include <QStringListModel>
24+#include <QQmlContext>
25+#include <QQmlEngine>
26+#pragma GCC diagnostic push
27+#pragma GCC diagnostic ignored "-pedantic"
28+#include <private/qquickitem_p.h>
29+#pragma GCC diagnostic pop
30+
31+#include "verticaljournal.h"
32+
33+class QHeightModel : public QAbstractListModel {
34+public:
35+ QHash<int, QByteArray> roleNames() const
36+ {
37+ QHash<int, QByteArray> roles;
38+ roles.insert(Qt::DisplayRole, "modelHeight");
39+ return roles;
40+ }
41+
42+ int rowCount(const QModelIndex & /*parent*/) const
43+ {
44+ return m_list.count();
45+ }
46+
47+ QVariant data(const QModelIndex &index, int /*role*/) const
48+ {
49+ return m_list[index.row()];
50+ }
51+
52+ QStringList stringList() const
53+ {
54+ return m_list;
55+ }
56+
57+ void setStringList(const QStringList &list)
58+ {
59+ beginResetModel();
60+ m_list = list;
61+ endResetModel();
62+ }
63+
64+ void addString(const QString& string)
65+ {
66+ beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
67+ m_list << string;
68+ endInsertRows();
69+ }
70+
71+ void removeLast()
72+ {
73+ beginRemoveRows(QModelIndex(), m_list.count() - 1, m_list.count() - 1);
74+ m_list.takeLast();
75+ endRemoveRows();
76+ }
77+
78+private:
79+ QStringList m_list;
80+};
81+
82+class VerticalJournalTest : public QObject
83+{
84+ Q_OBJECT
85+
86+private:
87+ void verifyItem(const VerticalJournal::ViewItem &item, int modelIndex, qreal x, qreal y, bool visible)
88+ {
89+ QTRY_COMPARE(item.m_modelIndex, modelIndex);
90+ QTRY_COMPARE(item.x(), x);
91+ QTRY_COMPARE(item.y(), y);
92+ QTRY_COMPARE(item.height(), model->stringList()[modelIndex].toDouble());
93+ QTRY_COMPARE(QQuickItemPrivate::get(item.m_item)->culled, !visible);
94+ }
95+
96+ void checkInitialPositions()
97+ {
98+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
99+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 5);
100+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 7);
101+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 6);
102+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
103+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
104+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
105+ verifyItem(vj->m_columnVisibleItems[1][1], 3, 160, 60, true);
106+ verifyItem(vj->m_columnVisibleItems[1][2], 4, 160, 80, true);
107+ verifyItem(vj->m_columnVisibleItems[0][1], 5, 0, 110, true);
108+ verifyItem(vj->m_columnVisibleItems[1][3], 6, 160, 130, true);
109+ verifyItem(vj->m_columnVisibleItems[2][1], 7, 320, 135, true);
110+ verifyItem(vj->m_columnVisibleItems[0][2], 8, 0, 190, true);
111+ verifyItem(vj->m_columnVisibleItems[2][2], 9, 320, 255, true);
112+ verifyItem(vj->m_columnVisibleItems[2][3], 10, 320, 285, true);
113+ verifyItem(vj->m_columnVisibleItems[2][4], 11, 320, 315, true);
114+ verifyItem(vj->m_columnVisibleItems[1][4], 12, 160, 340, true);
115+ verifyItem(vj->m_columnVisibleItems[0][3], 13, 0, 360, true);
116+ verifyItem(vj->m_columnVisibleItems[2][5], 14, 320, 390, true);
117+ verifyItem(vj->m_columnVisibleItems[1][5], 15, 160, 430, false);
118+ verifyItem(vj->m_columnVisibleItems[0][4], 16, 0, 570, false);
119+ verifyItem(vj->m_columnVisibleItems[1][6], 17, 160, 570, false);
120+ QCOMPARE(vj->implicitHeight(), 970. + 2. * 970. / 18.);
121+ }
122+
123+private Q_SLOTS:
124+ void init()
125+ {
126+ view = new QQuickView();
127+ view->setResizeMode(QQuickView::SizeRootObjectToView);
128+ view->engine()->addImportPath(BUILT_PLUGINS_DIR);
129+
130+ model = new QHeightModel();
131+ QStringList heightList;
132+ heightList << "100" << "50" << "125" << "10" << "40" << "70" << "200" << "110" << "160" << "20" << "20" << "65" << "80" << "200" << "300" << "130" << "400" << "300" << "500" << "10";
133+ model->setStringList(heightList);
134+
135+ view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/verticaljournaltest.qml"));
136+
137+ view->show();
138+ view->resize(470, 400);
139+ QTest::qWaitForWindowExposed(view);
140+
141+ vj = dynamic_cast<VerticalJournal*>(view->rootObject()->findChild<QObject*>("vj"));
142+ vj->setModel(model);
143+
144+ checkInitialPositions();
145+ }
146+
147+ void cleanup()
148+ {
149+ delete view;
150+ delete model;
151+ }
152+
153+ void testWidthResize()
154+ {
155+ view->resize(629, 400);
156+ QTRY_COMPARE(vj->width(), 629.);
157+
158+ // This is exactly the same block as above as nothing changed, just white space on the right
159+ checkInitialPositions();
160+
161+ view->resize(630, 400);
162+
163+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 4);
164+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 4);
165+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 7);
166+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 4);
167+ QTRY_COMPARE(vj->m_columnVisibleItems[3].count(), 5);
168+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
169+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
170+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
171+ verifyItem(vj->m_columnVisibleItems[3][0], 3, 480, 0, true);
172+ verifyItem(vj->m_columnVisibleItems[3][1], 4, 480, 20, true);
173+ verifyItem(vj->m_columnVisibleItems[1][1], 5, 160, 60, true);
174+ verifyItem(vj->m_columnVisibleItems[3][2], 6, 480, 70, true);
175+ verifyItem(vj->m_columnVisibleItems[0][1], 7, 0, 110, true);
176+ verifyItem(vj->m_columnVisibleItems[2][1], 8, 320, 135, true);
177+ verifyItem(vj->m_columnVisibleItems[1][2], 9, 160, 140, true);
178+ verifyItem(vj->m_columnVisibleItems[1][3], 10, 160, 170, true);
179+ verifyItem(vj->m_columnVisibleItems[1][4], 11, 160, 200, true);
180+ verifyItem(vj->m_columnVisibleItems[0][2], 12, 0, 230, true);
181+ verifyItem(vj->m_columnVisibleItems[1][5], 13, 160, 275, true);
182+ verifyItem(vj->m_columnVisibleItems[3][3], 14, 480, 280, true);
183+ verifyItem(vj->m_columnVisibleItems[2][2], 15, 320, 305, true);
184+ verifyItem(vj->m_columnVisibleItems[0][3], 16, 0, 320, true);
185+ verifyItem(vj->m_columnVisibleItems[2][3], 17, 320, 445, false);
186+ verifyItem(vj->m_columnVisibleItems[1][6], 18, 160, 485, false);
187+ verifyItem(vj->m_columnVisibleItems[3][4], 19, 480, 590, false);
188+ QTRY_COMPARE(vj->implicitHeight(), 985.);
189+
190+ view->resize(470, 400);
191+
192+ // This is exactly the same block as the first again
193+ checkInitialPositions();
194+ }
195+
196+ void testColumnSpacing()
197+ {
198+ vj->setColumnSpacing(11);
199+
200+ QTRY_COMPARE(vj->m_needsRelayout, false);
201+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 2);
202+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 7);
203+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 7);
204+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
205+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 161, 0, true);
206+ verifyItem(vj->m_columnVisibleItems[1][1], 2, 161, 60, true);
207+ verifyItem(vj->m_columnVisibleItems[0][1], 3, 0, 110, true);
208+ verifyItem(vj->m_columnVisibleItems[0][2], 4, 0, 130, true);
209+ verifyItem(vj->m_columnVisibleItems[0][3], 5, 0, 180, true);
210+ verifyItem(vj->m_columnVisibleItems[1][2], 6, 161, 195, true);
211+ verifyItem(vj->m_columnVisibleItems[0][4], 7, 0, 260, true);
212+ verifyItem(vj->m_columnVisibleItems[0][5], 8, 0, 380, true);
213+ verifyItem(vj->m_columnVisibleItems[1][3], 9, 161, 405, false);
214+ verifyItem(vj->m_columnVisibleItems[1][4], 10, 161, 435, false);
215+ verifyItem(vj->m_columnVisibleItems[1][5], 11, 161, 465, false);
216+ verifyItem(vj->m_columnVisibleItems[1][6], 12, 161, 540, false);
217+ verifyItem(vj->m_columnVisibleItems[0][6], 13, 0, 550, false);
218+ QCOMPARE(vj->implicitHeight(), 750. + 6. * 750. / 14.);
219+
220+ vj->setColumnSpacing(10);
221+ QTRY_COMPARE(vj->m_needsRelayout, false);
222+
223+ // This is exactly the same block as the first again
224+ checkInitialPositions();
225+ }
226+
227+ void testRowSpacing()
228+ {
229+ vj->setRowSpacing(11);
230+
231+ QTRY_COMPARE(vj->m_needsRelayout, false);
232+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
233+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 5);
234+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 7);
235+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 6);
236+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
237+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
238+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
239+ verifyItem(vj->m_columnVisibleItems[1][1], 3, 160, 61, true);
240+ verifyItem(vj->m_columnVisibleItems[1][2], 4, 160, 82, true);
241+ verifyItem(vj->m_columnVisibleItems[0][1], 5, 0, 111, true);
242+ verifyItem(vj->m_columnVisibleItems[1][3], 6, 160, 133, true);
243+ verifyItem(vj->m_columnVisibleItems[2][1], 7, 320, 136, true);
244+ verifyItem(vj->m_columnVisibleItems[0][2], 8, 0, 192, true);
245+ verifyItem(vj->m_columnVisibleItems[2][2], 9, 320, 257, true);
246+ verifyItem(vj->m_columnVisibleItems[2][3], 10, 320, 288, true);
247+ verifyItem(vj->m_columnVisibleItems[2][4], 11, 320, 319, true);
248+ verifyItem(vj->m_columnVisibleItems[1][4], 12, 160, 344, true);
249+ verifyItem(vj->m_columnVisibleItems[0][3], 13, 0, 363, true);
250+ verifyItem(vj->m_columnVisibleItems[2][5], 14, 320, 395, true);
251+ verifyItem(vj->m_columnVisibleItems[1][5], 15, 160, 435, false);
252+ verifyItem(vj->m_columnVisibleItems[0][4], 16, 0, 574, false);
253+ verifyItem(vj->m_columnVisibleItems[1][6], 17, 160, 576, false);
254+ QCOMPARE(vj->implicitHeight(), 974. + 2. * 974. / 18.);
255+
256+ vj->setRowSpacing(10);
257+ QTRY_COMPARE(vj->m_needsRelayout, false);
258+
259+ // This is exactly the same block as the first again
260+ checkInitialPositions();
261+ }
262+
263+ void testDelegateCreationRanges()
264+ {
265+ vj->setDelegateCreationBegin(200);
266+ vj->setDelegateCreationEnd(view->height());
267+
268+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
269+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 4);
270+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 4);
271+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 6);
272+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, false);
273+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, false);
274+ verifyItem(vj->m_columnVisibleItems[1][0], 4, 160, 80, false);
275+ verifyItem(vj->m_columnVisibleItems[0][1], 5, 0, 110, false);
276+ verifyItem(vj->m_columnVisibleItems[1][1], 6, 160, 130, true);
277+ verifyItem(vj->m_columnVisibleItems[2][1], 7, 320, 135, true);
278+ verifyItem(vj->m_columnVisibleItems[0][2], 8, 0, 190, true);
279+ verifyItem(vj->m_columnVisibleItems[2][2], 9, 320, 255, true);
280+ verifyItem(vj->m_columnVisibleItems[2][3], 10, 320, 285, true);
281+ verifyItem(vj->m_columnVisibleItems[2][4], 11, 320, 315, true);
282+ verifyItem(vj->m_columnVisibleItems[1][2], 12, 160, 340, true);
283+ verifyItem(vj->m_columnVisibleItems[0][3], 13, 0, 360, true);
284+ verifyItem(vj->m_columnVisibleItems[2][5], 14, 320, 390, true);
285+ verifyItem(vj->m_columnVisibleItems[1][3], 15, 160, 430, false);
286+ QCOMPARE(vj->implicitHeight(), 690. + 4. * 690. / 16.);
287+
288+ vj->resetDelegateCreationBegin();
289+ vj->resetDelegateCreationEnd();
290+
291+ // This is exactly the same block as the first again
292+ checkInitialPositions();
293+ }
294+
295+
296+ void testColumnWidthChange()
297+ {
298+ vj->setColumnWidth(200);
299+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 2);
300+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 7);
301+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 7);
302+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
303+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 210, 0, true);
304+ verifyItem(vj->m_columnVisibleItems[1][1], 2, 210, 60, true);
305+ verifyItem(vj->m_columnVisibleItems[0][1], 3, 0, 110, true);
306+ verifyItem(vj->m_columnVisibleItems[0][2], 4, 0, 130, true);
307+ verifyItem(vj->m_columnVisibleItems[0][3], 5, 0, 180, true);
308+ verifyItem(vj->m_columnVisibleItems[1][2], 6, 210, 195, true);
309+ verifyItem(vj->m_columnVisibleItems[0][4], 7, 0, 260, true);
310+ verifyItem(vj->m_columnVisibleItems[0][5], 8, 0, 380, true);
311+ verifyItem(vj->m_columnVisibleItems[1][3], 9, 210, 405, false);
312+ verifyItem(vj->m_columnVisibleItems[1][4], 10, 210, 435, false);
313+ verifyItem(vj->m_columnVisibleItems[1][5], 11, 210, 465, false);
314+ verifyItem(vj->m_columnVisibleItems[1][6], 12, 210, 540, false);
315+ verifyItem(vj->m_columnVisibleItems[0][6], 13, 0, 550, false);
316+ QCOMPARE(vj->implicitHeight(), 750. + 6. * 750. / 14.);
317+
318+ vj->setColumnWidth(150);
319+
320+ // This is exactly the same block as the first again
321+ checkInitialPositions();
322+ }
323+
324+ void testChangeModel()
325+ {
326+ QHeightModel *model2 = new QHeightModel();
327+ QStringList list2;
328+ list2 << "100" << "50" << "25" << "25" << "50" << "50";
329+ model2->setStringList(list2);
330+ vj->setModel(model2);
331+ delete model;
332+ model = model2;
333+
334+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
335+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 1);
336+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 2);
337+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 3);
338+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
339+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
340+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
341+ verifyItem(vj->m_columnVisibleItems[2][1], 3, 320, 35, true);
342+ verifyItem(vj->m_columnVisibleItems[1][1], 4, 160, 60, true);
343+ verifyItem(vj->m_columnVisibleItems[2][2], 5, 320, 70, true);
344+ }
345+
346+ void testModelReset()
347+ {
348+ QStringList heightList;
349+ heightList << "100" << "50" << "50" << "30";
350+ model->setStringList(heightList);
351+
352+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
353+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 1);
354+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 2);
355+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 1);
356+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
357+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
358+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
359+ verifyItem(vj->m_columnVisibleItems[1][1], 3, 160, 60, true);
360+ }
361+
362+ void testModelAppendRemoveLast()
363+ {
364+ QHeightModel *model2 = new QHeightModel();
365+ QStringList list2;
366+ list2 << "100" << "50" << "25" << "25" << "50" << "50";
367+ model2->setStringList(list2);
368+ vj->setModel(model2);
369+ delete model;
370+ model = model2;
371+
372+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
373+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 1);
374+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 2);
375+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 3);
376+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
377+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
378+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
379+ verifyItem(vj->m_columnVisibleItems[2][1], 3, 320, 35, true);
380+ verifyItem(vj->m_columnVisibleItems[1][1], 4, 160, 60, true);
381+ verifyItem(vj->m_columnVisibleItems[2][2], 5, 320, 70, true);
382+
383+ model2->addString("75");
384+
385+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
386+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 2);
387+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 2);
388+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 3);
389+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
390+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
391+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
392+ verifyItem(vj->m_columnVisibleItems[2][1], 3, 320, 35, true);
393+ verifyItem(vj->m_columnVisibleItems[1][1], 4, 160, 60, true);
394+ verifyItem(vj->m_columnVisibleItems[2][2], 5, 320, 70, true);
395+ verifyItem(vj->m_columnVisibleItems[0][1], 6, 0, 110, true);
396+
397+ model2->addString("50");
398+ model2->addString("50");
399+
400+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
401+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 2);
402+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 3);
403+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 4);
404+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
405+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
406+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
407+ verifyItem(vj->m_columnVisibleItems[2][1], 3, 320, 35, true);
408+ verifyItem(vj->m_columnVisibleItems[1][1], 4, 160, 60, true);
409+ verifyItem(vj->m_columnVisibleItems[2][2], 5, 320, 70, true);
410+ verifyItem(vj->m_columnVisibleItems[0][1], 6, 0, 110, true);
411+ verifyItem(vj->m_columnVisibleItems[1][2], 7, 160, 120, true);
412+ verifyItem(vj->m_columnVisibleItems[2][3], 8, 320, 130, true);
413+
414+ model2->removeLast();
415+
416+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
417+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 2);
418+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 3);
419+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 3);
420+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
421+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
422+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
423+ verifyItem(vj->m_columnVisibleItems[2][1], 3, 320, 35, true);
424+ verifyItem(vj->m_columnVisibleItems[1][1], 4, 160, 60, true);
425+ verifyItem(vj->m_columnVisibleItems[2][2], 5, 320, 70, true);
426+ verifyItem(vj->m_columnVisibleItems[0][1], 6, 0, 110, true);
427+ verifyItem(vj->m_columnVisibleItems[1][2], 7, 160, 120, true);
428+ }
429+
430+private:
431+ QQuickView *view;
432+ VerticalJournal *vj;
433+ QHeightModel *model;
434+};
435+
436+QTEST_MAIN(VerticalJournalTest)
437+
438+#include "verticaljournaltest.moc"
tests/plugins/DashViews/verticaljournaltest.qmlnew file+44
@@ -0,0 +1,44 @@
1+/*
2+ * Copyright (C) 2013 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+import QtQuick 2.1
18+import DashViews 0.1
19+
20+Item {
21+
22+ VerticalJournal {
23+ id: vj
24+ objectName: "vj"
25+ anchors.fill: parent
26+ columnWidth: 150
27+ columnSpacing: 10
28+ rowSpacing: 10
29+
30+ delegate: Rectangle {
31+ property real randomValue: Math.random()
32+ width: 150
33+ color: randomValue < 0.3 ? "green" : randomValue < 0.6 ? "blue" : "red";
34+ height: modelHeight
35+ border.width: 3
36+
37+ Text {
38+ text: index + "\ny: " + parent.y + "\nheight: " + parent.height
39+ x: 10
40+ y: 10
41+ }
42+ }
43+ }
44+}
tests/plugins/DashViews/verticaljournaltry.cppnew file+90
@@ -0,0 +1,90 @@
1+/*
2+ * Copyright (C) 2013 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 <QQuickView>
18+#include <QDebug>
19+#include <QGuiApplication>
20+#include <QQuickView>
21+#include <QtQml/qqml.h>
22+#include <QStringListModel>
23+#include <QQmlContext>
24+#include <QQmlEngine>
25+#include <QGuiApplication>
26+
27+#include "verticaljournal.h"
28+
29+class QHeightModel : public QStringListModel {
30+ Q_OBJECT
31+public:
32+ QHash<int, QByteArray> roleNames() const
33+ {
34+ QHash<int, QByteArray> roles;
35+ roles.insert(Qt::DisplayRole, "modelHeight");
36+ return roles;
37+ }
38+
39+public slots:
40+ void add(int height)
41+ {
42+ if (height <= 0) {
43+ height = 50 + 50. * qrand() / RAND_MAX ;
44+ }
45+ QStringList sl = stringList();
46+ sl << QString::number(height);
47+ setStringList(sl);
48+ }
49+
50+ void remove()
51+ {
52+ QStringList sl = stringList();
53+ if (!sl.isEmpty()) {
54+ sl.removeLast();
55+ setStringList(sl);
56+ }
57+ }
58+};
59+
60+int main(int argc, char *argv[])
61+{
62+ QGuiApplication a(argc, argv);
63+
64+ QQuickView *view = new QQuickView();
65+ view->setResizeMode(QQuickView::SizeRootObjectToView);
66+ view->engine()->addImportPath(BUILT_PLUGINS_DIR);
67+
68+ QHeightModel model;
69+ QStringList heightList;
70+ heightList << "100" << "50" << "125";
71+ model.setStringList(heightList);
72+
73+ QStringListModel listModel;
74+ listModel.setStringList(QStringList() << QString());
75+
76+ view->rootContext()->setContextProperty("listModel", &listModel);
77+ view->rootContext()->setContextProperty("vjModel", &model);
78+
79+ view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/verticaljournaltry.qml"));
80+
81+ view->show();
82+ view->resize(530, 400);
83+
84+ QObject::connect(view->rootObject(), SIGNAL(add(int)), &model, SLOT(add(int)));
85+ QObject::connect(view->rootObject(), SIGNAL(remove()), &model, SLOT(remove()));
86+
87+ return a.exec();
88+}
89+
90+#include "verticaljournaltry.moc"
tests/plugins/DashViews/verticaljournaltry.qmlnew file+100
@@ -0,0 +1,100 @@
1+/*
2+ * Copyright (C) 2013 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+import QtQuick 2.1
18+import DashViews 0.1
19+
20+Item {
21+ id: root
22+ signal add(int height)
23+ signal remove()
24+
25+ ListViewWithPageHeader {
26+ id: lvwph
27+ model: listModel
28+ height: parent.height
29+ width: parent.width - controls.width
30+
31+ delegate: VerticalJournal {
32+ id: vj
33+ model: vjModel
34+ columnWidth: 100
35+ columnSpacing: 10
36+ rowSpacing: 10
37+ width: parent.width
38+ height: implicitHeight > 100 ? implicitHeight : 100
39+ delegateCreationBegin: lvwph.contentY
40+ delegateCreationEnd: lvwph.contentY + lvwph.height
41+
42+ delegate: Rectangle {
43+ width: 100
44+ color: "red";
45+ height: modelHeight
46+ border.width: 3
47+
48+ Text {
49+ text: index + "\ny: " + parent.y + "\nheight: " + parent.height
50+ x: 10
51+ y: 10
52+ }
53+ }
54+ }
55+ }
56+
57+ Rectangle {
58+ id: controls
59+ height: parent.height
60+ width: 100
61+ anchors.right: parent.right
62+ color: "gray"
63+ opacity: 0.4
64+
65+ Rectangle {
66+ id: addButton
67+ height: 50
68+ width: parent.width
69+ color: "blue"
70+ Text {
71+ text: "Add"
72+ anchors.centerIn: parent
73+ }
74+ MouseArea {
75+ anchors.fill: parent
76+ onClicked: root.add(addField.text)
77+ }
78+ }
79+ TextInput {
80+ id: addField
81+ anchors.top: addButton.bottom
82+ height: 30
83+ width: parent.width
84+ }
85+ Rectangle {
86+ anchors.top: addField.bottom
87+ height: 50
88+ width: parent.width
89+ color: "red"
90+ Text {
91+ text: "Remove"
92+ anchors.centerIn: parent
93+ }
94+ MouseArea {
95+ anchors.fill: parent
96+ onClicked: root.remove()
97+ }
98+ }
99+ }
100+}
tests/plugins/LightDM/CMakeLists.txtnew file+24
@@ -0,0 +1,24 @@
1+add_executable(test-lightdm-dbus
2+ dbus.cpp
3+ ${CMAKE_SOURCE_DIR}/plugins/LightDM/Greeter.cpp
4+ )
5+qt5_use_modules(test-lightdm-dbus Core DBus Quick Test)
6+
7+include_directories(
8+ ${CMAKE_CURRENT_BINARY_DIR}
9+ ${CMAKE_SOURCE_DIR}/plugins/LightDM
10+ ${CMAKE_SOURCE_DIR}/tests/mocks/LightDM
11+ ${LIBLIGHTDM_INCLUDE_DIRS}
12+ )
13+
14+target_link_libraries(test-lightdm-dbus
15+ -L${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full
16+ -llightdm-qt5-2
17+ )
18+
19+add_definitions(-DCURRENT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
20+
21+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_dependencies(testLightDMDBus test-lightdm-dbus)
23+
24+add_dependencies(qmluitests testLightDMDBus)
tests/plugins/LightDM/dbus.cppnew file+166
@@ -0,0 +1,166 @@
1+/*
2+ * Copyright (C) 2013 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 "Greeter.h"
18+
19+#include <QDBusInterface>
20+#include <QDBusReply>
21+#include <QSignalSpy>
22+#include <QQuickItem>
23+#include <QQuickView>
24+#include <QtTestGui>
25+
26+class GreeterDBusTest : public QObject
27+{
28+ Q_OBJECT
29+
30+Q_SIGNALS:
31+ void PropertiesChangedRelay(const QString &interface, const QVariantMap &changed, const QStringList &invalidated);
32+
33+private Q_SLOTS:
34+
35+ void initTestCase()
36+ {
37+ // Qt doesn't like us connecting to PropertiesChanged using normal
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
40+ // to watch.
41+ QDBusConnection::sessionBus().connect(
42+ "com.canonical.UnityGreeter",
43+ "/list",
44+ "org.freedesktop.DBus.Properties",
45+ "PropertiesChanged",
46+ this,
47+ SIGNAL(PropertiesChangedRelay(const QString&, const QVariantMap&, const QStringList&)));
48+ }
49+
50+ void init()
51+ {
52+ view = new QQuickView();
53+ view->setSource(QUrl::fromLocalFile(CURRENT_SOURCE_DIR "/greeter.qml"));
54+ greeter = dynamic_cast<Greeter*>(view->rootObject()->property("greeter").value<QObject*>());
55+ QVERIFY(greeter);
56+ QVERIFY(greeter->authenticationUser() == "");
57+ view->show();
58+ QTest::qWaitForWindowExposed(view);
59+
60+ dbusList = new QDBusInterface("com.canonical.UnityGreeter",
61+ "/list",
62+ "com.canonical.UnityGreeter.List",
63+ QDBusConnection::sessionBus(), view);
64+ QVERIFY(dbusList->isValid());
65+ }
66+
67+ void cleanup()
68+ {
69+ delete view;
70+ }
71+
72+ void testGetActiveEntry()
73+ {
74+ greeter->authenticate("has-password");
75+
76+ QDBusReply<QString> reply = dbusList->call("GetActiveEntry");
77+ QVERIFY(reply.isValid());
78+ QVERIFY(reply.value() == "has-password");
79+ }
80+
81+ void testSetActiveEntry()
82+ {
83+ QSignalSpy spy(greeter, SIGNAL(requestAuthenticationUser(QString)));
84+ QDBusReply<void> reply = dbusList->call("SetActiveEntry", "has-password");
85+ QVERIFY(reply.isValid());
86+ spy.wait();
87+
88+ QCOMPARE(spy.count(), 1);
89+ QList<QVariant> arguments = spy.takeFirst();
90+ QVERIFY(arguments.at(0).toString() == "has-password");
91+ }
92+
93+ void testEntrySelectedSignal()
94+ {
95+ QSignalSpy spy(dbusList, SIGNAL(EntrySelected(QString)));
96+ greeter->authenticate("has-password");
97+ spy.wait();
98+
99+ QCOMPARE(spy.count(), 1);
100+ QList<QVariant> arguments = spy.takeFirst();
101+ QVERIFY(arguments.at(0).toString() == "has-password");
102+ }
103+
104+ void testActiveEntryGet()
105+ {
106+ greeter->authenticate("has-password");
107+ QVERIFY(dbusList->property("ActiveEntry").toString() == "has-password");
108+ }
109+
110+ void testActiveEntrySet()
111+ {
112+ QSignalSpy spy(greeter, SIGNAL(requestAuthenticationUser(QString)));
113+ QVERIFY(dbusList->setProperty("ActiveEntry", "has-password"));
114+ spy.wait();
115+
116+ QCOMPARE(spy.count(), 1);
117+ QList<QVariant> arguments = spy.takeFirst();
118+ QVERIFY(arguments.at(0).toString() == "has-password");
119+ }
120+
121+ void testActiveEntryChanged()
122+ {
123+ QSignalSpy spy(this, SIGNAL(PropertiesChangedRelay(QString, QVariantMap, QStringList)));
124+ greeter->authenticate("has-password");
125+ spy.wait();
126+
127+ QCOMPARE(spy.count(), 1);
128+ QList<QVariant> arguments = spy.takeFirst();
129+ QVERIFY(arguments.at(0).toString() == "com.canonical.UnityGreeter.List");
130+ QVERIFY(arguments.at(1).toMap().contains("ActiveEntry"));
131+ QVERIFY(arguments.at(1).toMap()["ActiveEntry"] == "has-password");
132+ }
133+
134+ void testEntryIsLockedGet()
135+ {
136+ QVERIFY(dbusList->property("EntryIsLocked").toBool());
137+
138+ greeter->authenticate("no-password");
139+ QVERIFY(!dbusList->property("EntryIsLocked").toBool());
140+
141+ greeter->authenticate("has-password");
142+ QVERIFY(dbusList->property("EntryIsLocked").toBool());
143+ }
144+
145+ void testEntryIsLockedChanged()
146+ {
147+ QSignalSpy spy(this, SIGNAL(PropertiesChangedRelay(QString, QVariantMap, QStringList)));
148+ greeter->authenticate("no-password");
149+ spy.wait();
150+
151+ QCOMPARE(spy.count(), 2); // once for locked, once for user; first will be locked mode
152+ QList<QVariant> arguments = spy.takeFirst();
153+ QVERIFY(arguments.at(0).toString() == "com.canonical.UnityGreeter.List");
154+ QVERIFY(arguments.at(1).toMap().contains("EntryIsLocked"));
155+ QVERIFY(arguments.at(1).toMap()["EntryIsLocked"] == false);
156+ }
157+
158+private:
159+ QQuickView *view;
160+ Greeter *greeter;
161+ QDBusInterface *dbusList;
162+};
163+
164+QTEST_MAIN(GreeterDBusTest)
165+
166+#include "dbus.moc"
tests/plugins/LightDM/greeter.qmlnew file+22
@@ -0,0 +1,22 @@
1+/*
2+ * Copyright 2013 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+import QtQuick 2.0
18+import LightDM 0.1 as LightDM
19+
20+Item {
21+ property var greeter: LightDM.Greeter
22+}
tests/plugins/Ubuntu/Gestures/CMakeLists.txt+2
@@ -3,6 +3,7 @@ include(QmlTest)
33include_directories(
44 ${CMAKE_SOURCE_DIR}/plugins/Ubuntu/Gestures
55 ${CMAKE_CURRENT_BINARY_DIR}
6+ ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
67 )
78
89file(GLOB qmlFiles *.qml)
@@ -45,5 +46,6 @@ macro(add_gesture_test CLASSNAME)
4546endmacro(add_gesture_test)
4647
4748add_gesture_ui_test(DirectionalDragArea)
49+add_gesture_ui_test(PressedOutsideNotifier)
4850add_gesture_test(Damper)
4951add_gesture_test(AxisVelocityCalculator)
tests/plugins/Ubuntu/Gestures/tst_PressedOutsideNotifier.cppnew file+150
@@ -0,0 +1,150 @@
1+/*
2+ * Copyright (C) 2013 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 "GestureTest.h"
18+
19+#include <PressedOutsideNotifier.h>
20+
21+#include <QQuickItem>
22+#include <QQuickView>
23+#include <QtTest>
24+
25+class tst_PressedOutsideNotifier: public GestureTest
26+{
27+ Q_OBJECT
28+public:
29+ tst_PressedOutsideNotifier();
30+private Q_SLOTS:
31+ void init(); // called right before each and every test function is executed
32+
33+ void touchOutsideAreaTriggersSignal();
34+ void touchInsideAreaHasNoEffect();
35+ void mousePressOutsideAreaTriggersSignal();
36+ void mousePresssInsideAreaHasNoEffect();
37+ void nothingHappensWhileDisabled();
38+
39+private:
40+ QQuickItem *m_blueRect;
41+ PressedOutsideNotifier *m_notifier;
42+};
43+
44+tst_PressedOutsideNotifier::tst_PressedOutsideNotifier()
45+ : GestureTest(QStringLiteral("tst_PressedOutsideNotifier.qml"))
46+{
47+}
48+
49+void tst_PressedOutsideNotifier::init()
50+{
51+ GestureTest::init();
52+
53+ m_blueRect = m_view->rootObject()->findChild<QQuickItem*>("blueRect");
54+ Q_ASSERT(m_blueRect != nullptr);
55+
56+ m_notifier =
57+ m_view->rootObject()->findChild<PressedOutsideNotifier*>("pressedOutsideNotifier");
58+ Q_ASSERT(m_notifier != nullptr);
59+}
60+
61+void tst_PressedOutsideNotifier::touchOutsideAreaTriggersSignal()
62+{
63+ // half-way towards the top-left corner of the blueRect.
64+ // Therefore, still outside it.
65+ QPoint touch0 = QPoint(m_blueRect->x() * 0.5, m_blueRect->y() * 0.5);
66+
67+ QSignalSpy pressedOutsideSpy(m_notifier, SIGNAL(pressedOutside()));
68+
69+ QTest::touchEvent(m_view, m_device)
70+ .press(0, touch0);
71+
72+ qApp->processEvents();
73+
74+ QCOMPARE(pressedOutsideSpy.count(), 1);
75+
76+ QTest::touchEvent(m_view, m_device)
77+ .release(0, touch0);
78+}
79+
80+void tst_PressedOutsideNotifier::touchInsideAreaHasNoEffect()
81+{
82+ QPoint touch0 = QPoint(m_blueRect->x() + m_blueRect->width()*0.5,
83+ m_blueRect->y() + m_blueRect->height()*0.5);
84+
85+ QSignalSpy pressedOutsideSpy(m_notifier, SIGNAL(pressedOutside()));
86+
87+ QTest::touchEvent(m_view, m_device)
88+ .press(0, touch0);
89+
90+ qApp->processEvents();
91+
92+ QCOMPARE(pressedOutsideSpy.count(), 0);
93+
94+ QTest::touchEvent(m_view, m_device)
95+ .release(0, touch0);
96+}
97+
98+void tst_PressedOutsideNotifier::mousePressOutsideAreaTriggersSignal()
99+{
100+ QPoint mousePos= QPoint(m_blueRect->x() * 0.5, m_blueRect->y() * 0.5);
101+
102+ QSignalSpy pressedOutsideSpy(m_notifier, SIGNAL(pressedOutside()));
103+
104+ QTest::mousePress(m_view, Qt::LeftButton, 0 /*modifiers*/, mousePos);
105+
106+ qApp->processEvents();
107+
108+ QCOMPARE(pressedOutsideSpy.count(), 1);
109+
110+ QTest::mouseRelease(m_view, Qt::LeftButton, 0 /*modifiers*/, mousePos);
111+}
112+
113+void tst_PressedOutsideNotifier::mousePresssInsideAreaHasNoEffect()
114+{
115+ QPoint mousePos = QPoint(m_blueRect->x() + m_blueRect->width()*0.5,
116+ m_blueRect->y() + m_blueRect->height()*0.5);
117+
118+ QSignalSpy pressedOutsideSpy(m_notifier, SIGNAL(pressedOutside()));
119+
120+ QTest::mousePress(m_view, Qt::LeftButton, 0 /*modifiers*/, mousePos);
121+
122+ qApp->processEvents();
123+
124+ QCOMPARE(pressedOutsideSpy.count(), 0);
125+
126+ QTest::mouseRelease(m_view, Qt::LeftButton, 0 /*modifiers*/, mousePos);
127+}
128+
129+void tst_PressedOutsideNotifier::nothingHappensWhileDisabled()
130+{
131+ QPoint touch0 = QPoint(m_blueRect->x() * 0.5, m_blueRect->y() * 0.5);
132+
133+ QSignalSpy pressedOutsideSpy(m_notifier, SIGNAL(pressedOutside()));
134+
135+ m_notifier->setEnabled(false);
136+
137+ QTest::touchEvent(m_view, m_device)
138+ .press(0, touch0);
139+
140+ qApp->processEvents();
141+
142+ QCOMPARE(pressedOutsideSpy.count(), 0);
143+
144+ QTest::touchEvent(m_view, m_device)
145+ .release(0, touch0);
146+}
147+
148+QTEST_MAIN(tst_PressedOutsideNotifier)
149+
150+#include "tst_PressedOutsideNotifier.moc"
tests/plugins/Ubuntu/Gestures/tst_PressedOutsideNotifier.qmlnew file+62
@@ -0,0 +1,62 @@
1+/*
2+ * Copyright (C) 2013 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+import QtQuick 2.0
18+import Ubuntu.Components 0.1
19+import Ubuntu.Gestures 0.1
20+
21+/*
22+ NB: If you change positions or sizes here make sure
23+ tst_PressedOutsideNotifier.cpp is updated accordingly
24+ */
25+
26+Rectangle {
27+ width: units.gu(60)
28+ height: units.gu(60)
29+ color: "white"
30+
31+ Rectangle {
32+ id: blueRect
33+ objectName: "blueRect"
34+ color: "blue"
35+ x: units.gu(20)
36+ y: units.gu(20)
37+ width: units.gu(20)
38+ height: units.gu(20)
39+
40+ Timer {
41+ id: resetColorTimer
42+ interval: 300
43+ repeat: false
44+ onTriggered: {
45+ blueRect.color = "blue";
46+ }
47+ }
48+
49+ function blinkRed() {
50+ blueRect.color = "red";
51+ resetColorTimer.start();
52+ }
53+
54+ PressedOutsideNotifier {
55+ objectName: "pressedOutsideNotifier"
56+ anchors.fill: parent
57+ onPressedOutside: {
58+ blueRect.blinkRed();
59+ }
60+ }
61+ }
62+}
tests/plugins/Unity/Indicators/CMakeLists.txt−1
@@ -40,4 +40,3 @@ indicator_test(indicatorsmodeltest ADDITIONAL_LIBS IndicatorsQml)
4040indicator_test(menucontentactivatortest ADDITIONAL_CPPS ${INDICATORS_DIR}/menucontentactivator.cpp)
4141indicator_test(unitymenumodelstacktest ADDITIONAL_CPPS ${TEST_DIR}/mocks/QMenuModel/unitymenumodel.cpp ${INDICATORS_DIR}/unitymenumodelstack.cpp)
4242indicator_test(rootactionstatetest ADDITIONAL_LIBS IndicatorsQml)
43−indicator_test(timeformattertest ADDITIONAL_LIBS IndicatorsQml)
tests/plugins/Unity/Indicators/indicatorsmanagertest.cpp+2−1
@@ -18,7 +18,8 @@
1818 */
1919
2020#include "indicatorsmanager.h"
21−#include "paths.h"
21+
22+#include <paths.h>
2223
2324#include <QtTest>
2425#include <QDebug>
tests/plugins/Unity/Indicators/indicatorsmodeltest.cpp+2−1
@@ -19,7 +19,8 @@
1919
2020#include "indicatorsmodel.h"
2121#include "indicators.h"
22−#include "paths.h"
22+
23+#include <paths.h>
2324
2425#include <QtTest>
2526#include <QDebug>
tests/plugins/Unity/Indicators/menucontentactivatortest.cpp−1
@@ -18,7 +18,6 @@
1818 */
1919
2020#include "menucontentactivator.h"
21−#include "paths.h"
2221
2322#include <QtTest>
2423#include <QDebug>
tests/plugins/Unity/Indicators/unitymenumodelstacktest.cpp−1
@@ -18,7 +18,6 @@
1818 */
1919
2020#include "indicatorsmanager.h"
21−#include "paths.h"
2221#include "unitymenumodelstack.h"
2322
2423#include <QtTest>
tests/plugins/Utils/CMakeLists.txt+1
@@ -24,4 +24,5 @@ endmacro(run_tests)
2424run_tests(
2525 qlimitproxymodeltest
2626 qsortfilterproxymodeltest
27+ timeformattertest
2728 )
tests/plugins/Unity/Indicators/timeformattertest.cpp → tests/plugins/Utils/timeformattertest.cpprenamed+13
@@ -48,6 +48,19 @@ private Q_SLOTS:
4848
4949 QCOMPARE(formatter.timeString(), time.toString(format));
5050 }
51+
52+ void testFormatStrF()
53+ {
54+ const QString format = "%d-%m-%Y %I:%M%p";
55+
56+ QDateTime time = QDateTime::currentDateTime();
57+
58+ GDateTimeFormatter formatter;
59+ formatter.setTime(time.toMSecsSinceEpoch() / 1000); // strftime in seconds since epoc
60+ formatter.setFormat(format);
61+
62+ QCOMPARE(formatter.timeString(), time.toString("dd-MM-yyyy hh:mmAP"));
63+ }
5164};
5265
5366QTEST_GUILESS_MAIN(TimeFormatterTest)
tests/qmltests/CMakeLists.txt+4−1
@@ -46,9 +46,12 @@ add_qml_test(Dash GenericPreview)
4646add_qml_test(Dash GenericScopeView IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
4747add_qml_test(Dash FilterGrids IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins ${CMAKE_CURRENT_SOURCE_DIR}/plugins
4848 ${CMAKE_BINARY_DIR}/tests/mocks)
49−add_qml_test(Dash/Apps RunningApplicationsGrid IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
49+add_qml_test(Dash/Apps RunningApplicationsGrid IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS}
50+ ${CMAKE_BINARY_DIR}/tests/mocks
51+ ${CMAKE_BINARY_DIR}/plugins)
5052add_qml_test(Dash/Apps AppPreview IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
5153add_qml_test(Dash/Movie MoviePreview IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
54+add_qml_test(Dash/Music MusicPreview IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
5255add_qml_test(Greeter Lockscreen IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
5356 PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
5457add_qml_test(Greeter Tablet IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
tests/qmltests/Components/CMakeLists.txt+1
@@ -3,6 +3,7 @@
33include_directories(
44 ${CMAKE_SOURCE_DIR}/plugins/Ubuntu/Gestures
55 ${CMAKE_CURRENT_BINARY_DIR}
6+ ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
67 )
78
89set(testCommand
tests/qmltests/Components/RevealingRectangle.qml+1−1
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
19−import "../../../Components"
19+import "../../../qml/Components"
2020
2121Item {
2222 id: revealingRectangle
tests/qmltests/Components/tst_AnimationControllerWithSignals.qml+1−1
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import QtTest 1.0
19−import "../../../Components"
19+import "../../../qml/Components"
2020
2121TestCase {
2222 id: testCase
tests/qmltests/Components/tst_Carousel.qml+1−1
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import QtTest 1.0
19−import "../../../Components/carousel.js" as Carousel
19+import "../../../qml/Components/carousel.js" as Carousel
2020
2121TestCase {
2222 id: root
tests/qmltests/Components/tst_DragHandle.qml+1−1
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.0
18−import "../../../Components"
18+import "../../../qml/Components"
1919import "tst_DragHandle"
2020import Ubuntu.Components 0.1
2121import Ubuntu.Gestures 0.1
tests/qmltests/Components/tst_DragHandle/HorizontalShowable.qml+1−1
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.0
18−import "../../../../Components"
18+import "../../../../qml/Components"
1919import Ubuntu.Components 0.1
2020import Ubuntu.Gestures 0.1
2121
tests/qmltests/Components/tst_DragHandle/VerticalShowable.qml+1−1
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.0
18−import "../../../../Components"
18+import "../../../../qml/Components"
1919import Ubuntu.Components 0.1
2020import Ubuntu.Gestures 0.1
2121
tests/qmltests/Components/tst_DraggingArea.qml+1−1
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import QtTest 1.0
19−import "../../../Components"
19+import "../../../qml/Components"
2020
2121/*
2222 There will be a green rectangle in the center of the
tests/qmltests/Components/tst_EdgeDemoOverlay.qml+1−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import Unity.Test 0.1 as UT
20−import "../../../Components"
20+import "../../../qml/Components"
2121
2222Item {
2323 id: root
tests/qmltests/Components/tst_FilterGrid.qml+1−1
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import QtTest 1.0
19−import "../../../Components"
19+import "../../../qml/Components"
2020import Ubuntu.Components.ListItems 0.1 as ListItem
2121import Ubuntu.Components 0.1
2222import Unity.Test 0.1 as UT
tests/qmltests/Components/tst_LazyImage.qml+1−1
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import QtTest 1.0
19−import "../../../Components"
19+import "../../../qml/Components"
2020import Ubuntu.Components 0.1
2121import Unity.Test 0.1 as UT
2222import "tst_LazyImage"
tests/qmltests/Components/tst_LazyImage/ImageControls.qml+1−1
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
19−import "../../../../Components"
19+import "../../../../qml/Components"
2020
2121Row {
2222 property LazyImage image
tests/qmltests/Components/tst_OpenEffect.qml+1−1
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import QtTest 1.0
19−import "../../../Components"
19+import "../../../qml/Components"
2020
2121TestCase {
2222 name: "OpenEffectTest"
tests/qmltests/Components/tst_PageHeader.qml+1−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../Components"
20+import "../../../qml/Components"
2121import Ubuntu.Components 0.1
2222import Unity 0.1
2323import Unity.Test 0.1 as UT
tests/qmltests/Components/tst_RatingStars.qml+1−1
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import QtTest 1.0
19−import "../../../Components"
19+import "../../../qml/Components"
2020
2121TestCase {
2222 name: "RatingStars"
tests/qmltests/Components/tst_ResponsiveFlowView.qml+1−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../Components"
20+import "../../../qml/Components"
2121import Ubuntu.Components.ListItems 0.1 as ListItem
2222import Ubuntu.Components 0.1
2323import Unity.Test 0.1 as UT
tests/qmltests/Components/tst_ResponsiveGridView.qml+1−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../Components"
20+import "../../../qml/Components"
2121import Ubuntu.Components.ListItems 0.1 as ListItem
2222import Ubuntu.Components 0.1
2323import Unity.Test 0.1 as UT
tests/qmltests/Components/tst_Showable.qml+1−1
@@ -19,7 +19,7 @@ import QtTest 1.0
1919import Ubuntu.Components 0.1
2020import Unity.Test 0.1 as UT
2121import ".."
22−import "../../../Components"
22+import "../../../qml/Components"
2323
2424/*
2525 There will be 3 stacked rectangles, red, green & blue. Initially they
tests/qmltests/Components/tst_Stage.qml+1−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../Components"
20+import "../../../qml/Components"
2121import Unity.Application 0.1
2222import Ubuntu.Components 0.1
2323import Unity.Test 0.1 as UT
tests/qmltests/Components/tst_Tile.qml+1−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../Components"
20+import "../../../qml/Components"
2121import Ubuntu.Components 0.1
2222import Unity.Test 0.1 as UT
2323
tests/qmltests/Dash/Apps/tst_AppPreview.qml+1−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import Ubuntu.Components 0.1
20−import "../../../../Dash/Apps"
20+import "../../../../qml/Dash/Apps"
2121import Unity.Test 0.1 as UT
2222
2323Item {
tests/qmltests/Dash/Apps/tst_RunningApplicationsGrid.qml+21−1
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import QtTest 1.0
19−import "../../../../Dash/Apps"
19+import "../../../../qml/Dash/Apps"
2020import Unity.Test 0.1 as UT
2121
2222Item {
@@ -239,5 +239,25 @@ Item {
239239 return findChild(runningApplicationsGrid, "runningAppTile Calendar")
240240 != undefined
241241 }
242+
243+ // While in termination mode, if you click outside any of the tiles, the
244+ // termination mode is disabled (i.e. we switch back to activation mode).
245+ function test_clickOutsideTilesDisablesTerminationMode() {
246+ runningApplicationsGrid.terminationModeEnabled = true
247+
248+ var calendarTile = findChild(runningApplicationsGrid, "runningAppTile Calendar")
249+ verify(calendarTile != undefined)
250+
251+ verify(runningApplicationsGrid.terminationModeEnabled);
252+
253+ // Click on the bottom right corner of the grid, where there's no
254+ // RunningApplicationTile lying around
255+ mouseClick(runningApplicationsGrid,
256+ runningApplicationsGrid.width - 1, runningApplicationsGrid.height - 1);
257+
258+ wait(0) // spin event loop to ensure that any pending signal emission went through
259+
260+ verify(!runningApplicationsGrid.terminationModeEnabled);
261+ }
242262 }
243263}
tests/qmltests/Dash/Movie/tst_MoviePreview.qml+1−1
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import QtTest 1.0
19−import "../../../../Dash/Movie"
19+import "../../../../qml/Dash/Movie"
2020import Unity.Test 0.1 as UT
2121
2222Item {
tests/qmltests/Dash/Music/tst_MusicPreview.qmlnew file+174
@@ -0,0 +1,174 @@
1+/*
2+ * Copyright 2013 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+import QtQuick 2.0
18+import QtTest 1.0
19+import "../../../../qml/Dash/Music"
20+import Unity.Test 0.1 as UT
21+import QtMultimedia 5.0
22+
23+Rectangle {
24+ id: root
25+ width: units.gu(60)
26+ height: units.gu(80)
27+ color: "lightgrey"
28+
29+ MusicPreview {
30+ id: musicPreview
31+ anchors.fill: parent
32+ isCurrent: true
33+
34+ previewData: QtObject {
35+ property string rendererName: "preview-music"
36+ property string title: "Music Preview"
37+ property string subtitle: "Subtitle"
38+ property string description: "This is the description"
39+ property string image: "../../tests/qmltests/Components/tst_LazyImage/square.png"
40+ property var actions: [
41+ { id: 123, displayName: "Play"},
42+ { id: 456, displayName: "Show in folder"}
43+ ]
44+ property var tracks: tracksModel2
45+ }
46+ }
47+
48+ ListModel {
49+ id: tracksModel0
50+ }
51+ ListModel {
52+ id: tracksModel1
53+ ListElement { uri: "../../tests/qmltests/Dash/Music/data/testsound1.ogg"; trackNo: 1; title: "Some track name"; length: "0:30"}
54+ }
55+ ListModel {
56+ id: tracksModel2
57+ ListElement { uri: "../../tests/qmltests/Dash/Music/data/testsound1.ogg"; trackNo: 1; title: "Some track name"; length: "0:30"}
58+ ListElement { uri: "../../tests/qmltests/Dash/Music/data/testsound1.ogg"; trackNo: 2; title: "Some track name"; length: "0:30"}
59+ ListElement { uri: "../../tests/qmltests/Dash/Music/data/testsound2.ogg"; trackNo: 3; title: "Some other track name"; length: "1:23"}
60+ ListElement { uri: "../../tests/qmltests/Dash/Music/data/testsound3.ogg"; trackNo: 4; title: "And another one"; length: "123:45"}
61+ }
62+
63+ UT.UnityTestCase {
64+ name: "MusicPreviewTest"
65+ when: windowShown
66+
67+ function init() {
68+ waitForRendering(musicPreview);
69+ }
70+
71+ function test_tracks_data() {
72+ return [
73+ {tag: "0 tracks", tracksModel: tracksModel0, dividerVisible: false},
74+ {tag: "1 track", tracksModel: tracksModel1, dividerVisible: true},
75+ {tag: "4 track", tracksModel: tracksModel2, dividerVisible: true}
76+ ];
77+ }
78+
79+ function test_tracks(data) {
80+ musicPreview.previewData.tracks = data.tracksModel;
81+ waitForRendering(musicPreview);
82+
83+ var trackRepeater = findChild(musicPreview, "trackRepeater");
84+ compare(trackRepeater.count, data.tracksModel.count)
85+
86+ var topDivider = findChild(musicPreview, "topDivider");
87+ compare(topDivider.visible, data.dividerVisible);
88+
89+ for (var i = 0; i < data.tracksModel.count; ++i) {
90+ var trackItem = findChild(musicPreview, "trackItem" + i);
91+ var titleLabel = findChild(trackItem, "trackTitleLabel");
92+ compare(titleLabel.text, data.tracksModel.get(i).title)
93+ var timeLabel = findChild(trackItem, "timeLabel");
94+ compare(timeLabel.text, data.tracksModel.get(i).length)
95+ }
96+ }
97+
98+ function checkPlayerUri(index) {
99+ var modelFilename = musicPreview.previewData.tracks.get(index).uri.replace(/^.*[\\\/]/, '');
100+ var playerFilename = findInvisibleChild(musicPreview, "audioPlayer").source.toString().replace(/^.*[\\\/]/, '');
101+
102+ compare(modelFilename, playerFilename, "Player source is not set correctly.");
103+ }
104+
105+ function test_playback() {
106+ musicPreview.previewData.tracks = tracksModel2;
107+ waitForRendering(musicPreview);
108+
109+ var track0Item = findChild(musicPreview, "trackItem0");
110+ var track1Item = findChild(musicPreview, "trackItem1");
111+ var track2Item = findChild(musicPreview, "trackItem2");
112+
113+ var track0ProgressBar = findChild(track0Item, "progressBarFill");
114+ var track1ProgressBar = findChild(track1Item, "progressBarFill");
115+ var track2ProgressBar = findChild(track2Item, "progressBarFill");
116+
117+ var track0PlayButton = findChild(track0Item, "playButton");
118+ var track1PlayButton = findChild(track1Item, "playButton");
119+ var track2PlayButton = findChild(track2Item, "playButton");
120+
121+ var audioPlayer = findInvisibleChild(musicPreview, "audioPlayer");
122+
123+ // All progress bars must be hidden in the beginning
124+ compare(track0ProgressBar.visible, false);
125+ compare(track1ProgressBar.visible, false);
126+ compare(track2ProgressBar.visible, false);
127+
128+ // Playing track 0 should make progress bar 0 visible
129+ mouseClick(track0PlayButton, track0PlayButton.width / 2, track0PlayButton.height / 2);
130+
131+ tryCompare(audioPlayer, "playbackState", Audio.PlayingState);
132+ checkPlayerUri(0);
133+
134+ tryCompare(track0ProgressBar, "visible", true);
135+ tryCompare(track1ProgressBar, "visible", false);
136+ tryCompare(track2ProgressBar, "visible", false);
137+
138+ // Clicking the button again should pause it. The progress bar should stay visible
139+ mouseClick(track0PlayButton, track0PlayButton.width / 2, track0PlayButton.height / 2);
140+ tryCompare(audioPlayer, "playbackState", Audio.PausedState);
141+ checkPlayerUri(0);
142+ tryCompare(track0ProgressBar, "visible", true);
143+
144+ // Continue playback
145+ mouseClick(track0PlayButton, track0PlayButton.width / 2, track0PlayButton.height / 2);
146+ tryCompare(audioPlayer, "playbackState", Audio.PlayingState);
147+ checkPlayerUri(0);
148+
149+ // Playing track 1 should make progress bar 1 visible and hide progress bar 0 again
150+ mouseClick(track1PlayButton, track1PlayButton.width / 2, track1PlayButton.height / 2);
151+
152+ tryCompare(audioPlayer, "playbackState", Audio.PlayingState);
153+ checkPlayerUri(1);
154+
155+ tryCompare(track0ProgressBar, "visible", false);
156+ tryCompare(track1ProgressBar, "visible", true);
157+ tryCompare(track2ProgressBar, "visible", false);
158+
159+ // Playing track 2 should make progress bar 1 visible and hide progress bar 0 again
160+ mouseClick(track2PlayButton, track2PlayButton.width / 2, track2PlayButton.height / 2);
161+
162+ tryCompare(audioPlayer, "playbackState", Audio.PlayingState);
163+ checkPlayerUri(2);
164+
165+ tryCompare(track0ProgressBar, "visible", false);
166+ tryCompare(track1ProgressBar, "visible", false);
167+ tryCompare(track2ProgressBar, "visible", true);
168+
169+ // Switching away from this preview should make all players shut up!
170+ musicPreview.isCurrent = false
171+ tryCompare(audioPlayer, "playbackState", Audio.StoppedState);
172+ }
173+ }
174+}
tests/qmltests/Dash/qml/FakeScopeView.qml+1−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import Unity 0.1
1919
20−import "../../../../Dash"
20+import "../../../../qml/Dash"
2121
2222GenericScopeView {
2323 id: fakeScopeView
tests/qmltests/Dash/tst_Dash.qml+6−6
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import QtTest 1.0
19−import "../../../Dash"
19+import "../../../qml/Dash"
2020import Ubuntu.Components 0.1
2121import Unity.Test 0.1 as UT
2222
@@ -36,12 +36,12 @@ Item {
3636 ScopeDelegateMapper {
3737 id: scopeDelegateMapper
3838 scopeDelegateMapping: {
39− "MockScope1": "../tests/qmltests/Dash/qml/fake_scopeView1.qml",
40− "MockScope2": "../tests/qmltests/Dash/qml/fake_scopeView2.qml",
41− "home.scope": "../tests/qmltests/Dash/qml/fake_scopeView3.qml",
42− "applications.scope": "../tests/qmltests/Dash/qml/fake_scopeView4.qml"
39+ "MockScope1": Qt.resolvedUrl("qml/fake_scopeView1.qml"),
40+ "MockScope2": Qt.resolvedUrl("qml/fake_scopeView2.qml"),
41+ "home.scope": Qt.resolvedUrl("qml/fake_scopeView3.qml"),
42+ "applications.scope": Qt.resolvedUrl("qml/fake_scopeView4.qml")
4343 }
44− genericScope: "../tests/qmltests/Dash/qml/fake_generic_scopeView.qml"
44+ genericScope: Qt.resolvedUrl("qml/fake_generic_scopeView.qml")
4545 }
4646
4747 UT.UnityTestCase {
tests/qmltests/Dash/tst_DashBar.qml+1−1
@@ -18,7 +18,7 @@ import QtQuick 2.0
1818import QtTest 1.0
1919import Unity 0.1
2020import ".."
21−import "../../../Dash"
21+import "../../../qml/Dash"
2222import Ubuntu.Components 0.1
2323import Unity.Test 0.1 as UT
2424
tests/qmltests/Dash/tst_DashContent.qml+33−6
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import QtTest 1.0
19−import "../../../Dash"
19+import "../../../qml/Dash"
2020import Ubuntu.Components 0.1
2121import Unity 0.1
2222import Unity.Test 0.1 as UT
@@ -64,12 +64,12 @@ Item {
6464 ScopeDelegateMapper {
6565 id: scopeDelegateMapper
6666 scopeDelegateMapping: {
67− "MockScope1": "../tests/qmltests/Dash/qml/fake_scopeView1.qml",
68− "MockScope2": "../tests/qmltests/Dash/qml/fake_scopeView2.qml",
69− "home.scope": "../tests/qmltests/Dash/qml/fake_scopeView3.qml",
70− "applications.scope": "../tests/qmltests/Dash/qml/fake_scopeView4.qml"
67+ "MockScope1": Qt.resolvedUrl("qml/fake_scopeView1.qml"),
68+ "MockScope2": Qt.resolvedUrl("qml/fake_scopeView2.qml"),
69+ "home.scope": Qt.resolvedUrl("qml/fake_scopeView3.qml"),
70+ "applications.scope": Qt.resolvedUrl("qml/fake_scopeView4.qml")
7171 }
72− genericScope: "../tests/qmltests/Dash/qml/fake_generic_scopeView.qml"
72+ genericScope: Qt.resolvedUrl("qml/fake_generic_scopeView.qml")
7373 }
7474
7575 function clear_scope_status() {
@@ -127,6 +127,33 @@ Item {
127127 scopesModel.clear();
128128 // wait for dash to empty scopes.
129129 tryCompare(dashContentList, "count", 0);
130+ // this is the default state for empty model
131+ dashContentList.currentIndex = -1;
132+ }
133+
134+ function test_current_index() {
135+ var dashContentList = findChild(dashContent, "dashContentList");
136+ verify(dashContentList != undefined)
137+
138+ compare(dashContentList.count, 0, "DashContent should have 0 items when it starts");
139+ compare(dashContentList.currentIndex, -1, "DashContent's currentIndex should be -1 while there have been no items in the model");
140+
141+ tryCompare(scopeLoadedSpy, "count", 5);
142+
143+ verify(dashContentList.currentIndex >= 0);
144+ }
145+
146+ function test_current_index_after_reset() {
147+ var dashContentList = findChild(dashContent, "dashContentList");
148+ verify(dashContentList != undefined)
149+
150+ compare(dashContentList.count, 0, "DashContent should have 0 items when it starts");
151+ // pretend we're running after a model reset
152+ dashContentList.currentIndex = 27;
153+
154+ tryCompare(scopeLoadedSpy, "count", 5);
155+
156+ verify(dashContentList.currentIndex >= 0 && dashContentList.currentIndex < 5);
130157 }
131158
132159 function test_movement_started_signal() {
tests/qmltests/Dash/tst_DashPreview.qml+1−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../Dash"
20+import "../../../qml/Dash"
2121import Ubuntu.Components 0.1
2222import Unity.Test 0.1 as UT
2323
tests/qmltests/Dash/tst_FilterGrids.qml+3−3
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import QtTest 1.0
19−import "../../../Dash/Video"
19+import "../../../qml/Dash/Video"
2020import Ubuntu.Components.ListItems 0.1 as ListItem
2121import Ubuntu.Components 0.1
2222import Unity.Test 0.1 as UT
@@ -46,7 +46,7 @@ Rectangle {
4646 Button {
4747 anchors {left: parent.left; right: parent.right; margins: units.gu(1) }
4848 text: testCase.test_clicked_signal_data()[index].tag
49− onClicked: gridLoader.source = "../../../Dash/" + testCase.test_clicked_signal_data()[index].component
49+ onClicked: gridLoader.source = "../../../qml/Dash/" + testCase.test_clicked_signal_data()[index].component
5050 }
5151 }
5252 }
@@ -114,7 +114,7 @@ Rectangle {
114114
115115 function test_clicked_signal(data) {
116116 gridLoader.source = "";
117− gridLoader.source = "../../../Dash/" + data.component;
117+ gridLoader.source = "../../../qml/Dash/" + data.component;
118118
119119 // Wait until the FilterGrid is loaded by the loader
120120 tryCompare(gridLoader, "status", Loader.Ready);
tests/qmltests/Dash/tst_GenericPreview.qml+1−1
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import QtTest 1.0
19−import "../../../Dash/Generic"
19+import "../../../qml/Dash/Generic"
2020import Unity.Test 0.1 as UT
2121
2222Item {
tests/qmltests/Dash/tst_GenericScopeView.qml+98−4
@@ -18,7 +18,8 @@ import QtQuick 2.0
1818import QtTest 1.0
1919import Unity 0.1
2020import ".."
21−import "../../../Dash"
21+import "../../../qml/Dash"
22+import "../../../qml/Components"
2223import Ubuntu.Components 0.1
2324import Unity.Test 0.1 as UT
2425
@@ -43,6 +44,7 @@ Item {
4344 GenericScopeView {
4445 id: genericScopeView
4546 anchors.fill: parent
47+ searchHistory: SearchHistoryModel {}
4648
4749 UT.UnityTestCase {
4850 name: "GenericScopeView"
@@ -77,14 +79,14 @@ Item {
7779 var categoryListView = findChild(genericScopeView, "categoryListView");
7880 categoryListView.positionAtBeginning();
7981
80− var tile = findChild(genericScopeView, "delegate0");
82+ var tile = findChild(findChild(genericScopeView, "0"), "delegate0");
8183 mouseClick(tile, tile.width / 2, tile.height / 2);
8284 var openEffect = findChild(genericScopeView, "openEffect");
8385 tryCompare(openEffect, "gap", 1);
8486 }
8587
8688 function checkArrowPosition(index) {
87− var tile = findChild(genericScopeView, "delegate" + index);
89+ var tile = findChild(findChild(genericScopeView, "0"), "delegate" + index);
8890 var tileCenter = tile.x + tile.width/2;
8991 var pointerArrow = findChild(genericScopeView, "pointerArrow");
9092 var pointerArrowCenter = pointerArrow.x + pointerArrow.width/2;
@@ -139,7 +141,7 @@ Item {
139141 categoryListView.flick(0, -units.gu(80));
140142 tryCompare(categoryListView.flicking, false);
141143
142− var tile = findChild(genericScopeView, "delegate0");
144+ var tile = findChild(findChild(genericScopeView, "0"), "delegate0");
143145 mouseClick(tile, tile.width / 2, tile.height - 1);
144146 var openEffect = findChild(genericScopeView, "openEffect");
145147 tryCompare(openEffect, "gap", 1);
@@ -186,8 +188,18 @@ Item {
186188 true);
187189 tryCompare(nextPreviewItem, "progress", 1);
188190 waitForRendering(nextPreviewItem);
191+ tryCompareFunction(function() {return nextPreviewItem.item !== null}, true);
189192
190193 checkArrowPosition(i);
194+
195+ // Make sure only the new one has isCurrent set to true
196+ compare(nextPreviewItem.item.isCurrent, true);
197+
198+ if (currentPreviewItem.item !== undefined && currentPreviewItem.item !== null) {
199+ compare(currentPreviewItem.item.isCurrent, false);
200+ }
201+
202+ currentPreviewItem = nextPreviewItem;
191203 }
192204 closePreview();
193205 }
@@ -212,6 +224,88 @@ Item {
212224 genericScopeView.scope = scopes.get(0)
213225 tryCompare(genericScopeView.scope, "searchQuery", "")
214226 }
227+
228+ function test_filter_expand_collapse() {
229+ // wait for the item to be there
230+ tryCompareFunction(function() { return findChild(genericScopeView, "dashSectionHeader0") != undefined; }, true);
231+
232+ var header = findChild(genericScopeView, "dashSectionHeader0")
233+ var category = findChild(genericScopeView, "dashCategory0")
234+
235+ waitForRendering(header);
236+ verify(category.expandable);
237+ verify(category.filtered);
238+
239+ var initialHeight = category.height;
240+ var middleHeight;
241+ mouseClick(header, header.width / 2, header.height / 2);
242+ tryCompareFunction(function() { middleHeight = category.height; return category.height > initialHeight; }, true);
243+ tryCompare(category, "filtered", false);
244+ verify(category.height > middleHeight);
245+
246+ mouseClick(header, header.width / 2, header.height / 2);
247+ verify(category.expandable);
248+ tryCompare(category, "filtered", true);
249+ }
250+
251+ function test_showPreviewCarousel() {
252+ tryCompareFunction(function() { return findChild(genericScopeView, "carouselDelegate") != undefined; }, true);
253+ var tile = findChild(genericScopeView, "carouselDelegate");
254+ mouseClick(tile, tile.width / 2, tile.height / 2);
255+ var openEffect = findChild(genericScopeView, "openEffect");
256+ tryCompare(openEffect, "gap", 1);
257+
258+ // check for it opening successfully
259+ var previewListView = findChild(genericScopeView, "previewListView");
260+ var currentPreviewItem = findChild(genericScopeView, "previewLoader0");
261+ tryCompareFunction(function() {
262+ var parts = currentPreviewItem.source.toString().split("/");
263+ var name = parts[parts.length - 1];
264+ return name == "DashPreviewPlaceholder.qml";
265+ },
266+ true);
267+ tryCompareFunction(function() {
268+ var parts = currentPreviewItem.source.toString().split("/");
269+ var name = parts[parts.length - 1];
270+ return name == "GenericPreview.qml";
271+ },
272+ true);
273+ tryCompare(currentPreviewItem, "progress", 1);
274+ tryCompare(previewListView, "open", true);
275+
276+ closePreview();
277+ tryCompare(previewListView, "open", false);
278+ }
279+
280+ function test_filter_expand_expand() {
281+ // wait for the item to be there
282+ tryCompareFunction(function() { return findChild(genericScopeView, "dashSectionHeader2") != undefined; }, true);
283+
284+ var categoryListView = findChild(genericScopeView, "categoryListView");
285+ categoryListView.contentY = categoryListView.height;
286+
287+ var header2 = findChild(genericScopeView, "dashSectionHeader2")
288+ var category2 = findChild(genericScopeView, "dashCategory2")
289+ var category2FilterGrid = category2.children[0].children[0].children[0];
290+ verify(UT.Util.isInstanceOf(category2FilterGrid, "FilterGrid"));
291+
292+ waitForRendering(header2);
293+ verify(category2.expandable);
294+ verify(category2.filtered);
295+
296+ mouseClick(header2, header2.width / 2, header2.height / 2);
297+ tryCompare(category2, "filtered", false);
298+ tryCompare(category2FilterGrid, "filter", false);
299+
300+ categoryListView.positionAtBeginning();
301+
302+ var header0 = findChild(genericScopeView, "dashSectionHeader0")
303+ var category0 = findChild(genericScopeView, "dashCategory0")
304+ mouseClick(header0, header0.width / 2, header0.height / 2);
305+ tryCompare(category0, "filtered", false);
306+ tryCompare(category2, "filtered", true);
307+ tryCompare(category2FilterGrid, "filter", true);
308+ }
215309 }
216310 }
217311}
tests/qmltests/Greeter/tst_Clock.qml+1−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../Greeter"
20+import "../../../qml/Greeter"
2121import Ubuntu.Components 0.1
2222import QMenuModel 0.1
2323import Unity.Test 0.1 as UT
tests/qmltests/Greeter/tst_Infographics.qml+1−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../Greeter"
20+import "../../../qml/Greeter"
2121import Ubuntu.Components 0.1
2222import Unity.Test 0.1 as UT
2323import LightDM 0.1 as LightDM
tests/qmltests/Greeter/tst_Lockscreen.qml+1−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../Greeter"
20+import "../../../qml/Greeter"
2121import Ubuntu.Components 0.1
2222import LightDM 0.1 as LightDM
2323import Unity.Test 0.1 as UT
tests/qmltests/Greeter/tst_Phone.qml+4−4
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../Greeter"
20+import "../../../qml/Greeter"
2121import AccountsService 0.1
2222import LightDM 0.1 as LightDM
2323import Ubuntu.Components 0.1
@@ -33,7 +33,7 @@ Item {
3333 height: parent.height
3434 x: 0; y: 0
3535
36− defaultBackground: "../../../graphics/phone_background.jpg"
36+ defaultBackground: Qt.resolvedUrl("../../../qml/graphics/phone_background.jpg")
3737
3838 property int minX: 0
3939
@@ -103,7 +103,7 @@ Item {
103103 mouseClick(greeter, greeter.width - units.gu(5), greeter.height - units.gu(1));
104104 greeter.minX = 0; // This is needed because the transition actually makes x jump once before animating
105105
106− if (!data.locked && !data.moved) {
106+ if (!data.moved) {
107107 // Check if it has been moved over by 2 GUs. Give it a 2 pixel grace area
108108 // because animation duration and teaseTimer are the same duration and
109109 // might cause slight offsets
@@ -135,7 +135,7 @@ Item {
135135
136136 function test_background_data() {
137137 return [
138− {tag: "set", accounts: "../tests/data/unity/backgrounds/blue.png", expected: "blue.png"},
138+ {tag: "set", accounts: Qt.resolvedUrl("../../data/unity/backgrounds/blue.png"), expected: "blue.png"},
139139 {tag: "unset", accounts: "", expected: "background.jpg"},
140140 {tag: "invalid", accounts: "invalid", expected: "background.jpg"},
141141 ]
tests/qmltests/Greeter/tst_Tablet.qml+12−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../Greeter"
20+import "../../../qml/Greeter"
2121import Ubuntu.Components 0.1
2222import LightDM 0.1 as LightDM
2323import Unity.Test 0.1 as UT
@@ -324,5 +324,16 @@ Item {
324324 tryCompare(greeter, "rightTeaserPressed", false)
325325 }
326326
327+ function test_dbus_set_active_entry() {
328+ select_user("no-password") // to guarantee a selected signal
329+ selectionSpy.clear()
330+ LightDM.Greeter.requestAuthenticationUser("has-password")
331+
332+ selectionSpy.wait()
333+ tryCompare(selectionSpy, "count", 1)
334+
335+ var userlist = findChild(greeter, "userList")
336+ compare(greeter.model.data(userlist.currentIndex, LightDM.UserRoles.NameRole), "has-password")
337+ }
327338 }
328339}
tests/qmltests/Hud/tst_Hud.qml+1−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../Hud"
20+import "../../../qml/Hud"
2121import HudClient 0.1
2222import Unity.Test 0.1 as UT
2323
tests/qmltests/Hud/tst_Result.qml+1−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../Hud"
20+import "../../../qml/Hud"
2121import Unity.Test 0.1 as UT
2222
2323Rectangle {
tests/qmltests/Launcher/tst_Launcher.qml+7−7
@@ -18,7 +18,7 @@ import QtQuick 2.0
1818import QtTest 1.0
1919import Unity.Test 0.1 as UT
2020import ".."
21−import "../../../Launcher"
21+import "../../../qml/Launcher"
2222import Unity.Launcher 0.1
2323
2424/* Nothing is shown at first. If you drag from left edge you will bring up the
@@ -41,9 +41,9 @@ Item {
4141 lastSelectedApplication = appId
4242 }
4343
44− property int dashItemSelected_count: 0
45− onDashItemSelected: {
46− dashItemSelected_count++;
44+ property int showDashHome_count: 0
45+ onShowDashHome: {
46+ showDashHome_count++;
4747 }
4848
4949 property int maxPanelX: 0
@@ -138,9 +138,9 @@ Item {
138138 }
139139
140140 /* If I click on the dash icon on the launcher
141− Launcher::dashItemSelected signal should be emitted */
141+ Launcher::showDashHome signal should be emitted */
142142 function test_clickingOnDashIconCausesSignalEmission() {
143− launcher.dashItemSelected_count = 0
143+ launcher.showDashHome_count = 0
144144
145145 revealer.dragLauncherIntoView()
146146
@@ -149,7 +149,7 @@ Item {
149149
150150 mouseClick(dashIcon, dashIcon.width/2, dashIcon.height/2)
151151
152− tryCompare(launcher, "dashItemSelected_count", 1)
152+ tryCompare(launcher, "showDashHome_count", 1)
153153
154154 // Tapping on the dash icon also dismisses the launcher
155155 revealer.waitUntilLauncherDisappears()
tests/qmltests/Notifications/tst_Notifications.qml+4−5
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../Notifications"
20+import "../../../qml/Notifications"
2121import Ubuntu.Components 0.1
2222import Unity.Test 0.1
2323import Unity.Notifications 1.0
@@ -140,8 +140,10 @@ Row {
140140 Notifications {
141141 id: notifications
142142
143+ margin: units.gu(1)
144+ fullHeight: parent.height
145+
143146 anchors.fill: parent
144− anchors.margins: units.gu(1)
145147 model: mockModel
146148 }
147149 }
@@ -401,9 +403,6 @@ Row {
401403 actionSpy.wait()
402404 compare(actionSpy.signalArguments[0][0], data.actions[0]["id"], "got wrong id for interactive action")
403405 compare(clickThroughSpy.count, 0, "click on interactive notification fell through")
404− } else {
405− mouseClick(notification, notification.width / 2, notification.height / 2)
406− clickThroughSpy.wait()
407406 }
408407
409408 compare(secondaryIcon.visible, data.secondaryIconVisible, "secondary-icon visibility is incorrect")
tests/qmltests/Panel/Indicators/tst_DefaultIndicatorWidget.qml+1−1
@@ -18,7 +18,7 @@ import QtQuick 2.0
1818import QtTest 1.0
1919import Unity.Test 0.1 as UT
2020import QMenuModel 0.1
21−import "../../../../Panel/Indicators"
21+import "../../../../qml/Panel/Indicators"
2222
2323Item {
2424 id: testView
tests/qmltests/Panel/tst_IndicatorItem.qml+1−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../Panel"
20+import "../../../qml/Panel"
2121import Ubuntu.Components 0.1
2222import Unity.Test 0.1 as UT
2323
tests/qmltests/Panel/tst_IndicatorRow.qml+1−1
@@ -18,7 +18,7 @@ import QtQuick 2.0
1818import QtTest 1.0
1919import Unity.Test 0.1 as UT
2020import ".."
21−import "../../../Panel"
21+import "../../../qml/Panel"
2222import Unity.Indicators 0.1 as Indicators
2323
2424/*
tests/qmltests/Panel/tst_Indicators.qml+2−2
@@ -18,8 +18,8 @@ import QtQuick 2.0
1818import QtTest 1.0
1919import Unity.Test 0.1 as UT
2020import ".."
21−import "../../../Panel"
22−import "../../../Components"
21+import "../../../qml/Panel"
22+import "../../../qml/Components"
2323
2424/*
2525 This tests the Indicators component by using a fake model to stage data in the indicators
tests/qmltests/Panel/tst_MenuContent.qml+1−1
@@ -18,7 +18,7 @@ import QtQuick 2.0
1818import QtTest 1.0
1919import Unity.Test 0.1 as UT
2020import ".."
21−import "../../../Panel"
21+import "../../../qml/Panel"
2222import Unity.Indicators 0.1 as Indicators
2323
2424Item {
tests/qmltests/Panel/tst_Panel.qml+15−1
@@ -18,7 +18,7 @@ import QtQuick 2.0
1818import QtTest 1.0
1919import Unity.Test 0.1 as UT
2020import ".."
21−import "../../../Panel"
21+import "../../../qml/Panel"
2222
2323/*
2424 This tests the Panel component using a fake model to stage data in the indicators
@@ -264,5 +264,19 @@ Item {
264264
265265 compare(indicatorRow.currentItem, indicatorItemFirst, "First indicator should still be the current item");
266266 }
267+
268+ function test_hideIndicatorMenu_data() {
269+ return [ {tag: "no-delay", delay: undefined },
270+ {tag: "delayed", delay: 200 }
271+ ];
272+ }
273+
274+ function test_hideIndicatorMenu(data) {
275+ panel.indicators.show();
276+ compare(panel.indicators.shown, true);
277+
278+ panel.hideIndicatorMenu(data.delay);
279+ tryCompare(panel.indicators, "shown", false);
280+ }
267281 }
268282}
tests/qmltests/Panel/tst_SearchIndicator.qml+1−1
@@ -17,7 +17,7 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../Panel"
20+import "../../../qml/Panel"
2121import Ubuntu.Components 0.1
2222import Unity.Test 0.1 as UT
2323
tests/qmltests/SideStage/tst_SideStage.qml+1−1
@@ -18,7 +18,7 @@ import QtQuick 2.0
1818import QtTest 1.0
1919import Unity.Test 0.1 as UT
2020import ".."
21−import "../../../SideStage"
21+import "../../../qml/SideStage"
2222import Ubuntu.Components 0.1
2323
2424UT.UnityTestCase {
tests/qmltests/tst_Shell.qml+3−3
@@ -24,7 +24,7 @@ import Unity.Application 0.1
2424import Unity.Test 0.1 as UT
2525import Powerd 0.1
2626
27−import "../.."
27+import "../../qml"
2828
2929Item {
3030 width: shell.width
@@ -469,8 +469,8 @@ Item {
469469
470470 function test_background_data() {
471471 return [
472− {tag: "red", url: "tests/data/unity/backgrounds/red.png", expectedUrl: "tests/data/unity/backgrounds/red.png"},
473− {tag: "blue", url: "tests/data/unity/backgrounds/blue.png", expectedUrl: "tests/data/unity/backgrounds/blue.png"},
472+ {tag: "red", url: Qt.resolvedUrl("../data/unity/backgrounds/red.png"), expectedUrl: "tests/data/unity/backgrounds/red.png"},
473+ {tag: "blue", url: Qt.resolvedUrl("../data/unity/backgrounds/blue.png"), expectedUrl: "tests/data/unity/backgrounds/blue.png"},
474474 {tag: "invalid", url: "invalid", expectedUrl: shell.defaultBackground},
475475 {tag: "empty", url: "", expectedUrl: shell.defaultBackground}
476476 ]
tests/uqmlscene/CMakeLists.txt+6−1
@@ -1,12 +1,17 @@
11add_executable(uqmlscene
22 ${shellapplication_MOC_SRCS}
33 main.cpp
4− ../../MouseTouchAdaptor.cpp
4+ ${CMAKE_SOURCE_DIR}/src/MouseTouchAdaptor.cpp
55 )
66
77qt5_use_modules(uqmlscene Qml Quick Test)
88pkg_check_modules(XCB REQUIRED xcb)
99
10+include_directories(
11+ ${CMAKE_SOURCE_DIR}/src
12+ ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
13+)
14+
1015if (NOT "${XCB_INCLUDE_DIRS}" STREQUAL "")
1116 set_target_properties(uqmlscene PROPERTIES INCLUDE_DIRECTORIES ${XCB_INCLUDE_DIRS})
1217endif()
tests/uqmlscene/main.cpp+1−1
@@ -63,7 +63,7 @@
6363#include <QtCore/QTranslator>
6464#include <QtCore/QLibraryInfo>
6565
66−#include "../../MouseTouchAdaptor.h"
66+#include <MouseTouchAdaptor.h>
6767
6868#ifdef QML_RUNTIME_TESTING
6969class RenderStatistics
tests/utils/modules/Unity/Test/CMakeLists.txt+4
@@ -1,5 +1,9 @@
11add_definitions(-DQT_NO_KEYWORDS)
22
3+include_directories(
4+ ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
5+)
6+
37set(UnityTestQML_SOURCES
48 testutil.cpp
59 plugin.cpp