on xenial help sign in
1843 files changed+240703−42257
since splitsnapshots
unifiedsplit
.bazaar/Makefile−6 .bazaar/plugins/makecheck_unity_phablet.py−34 .bzr-builddeb/default.conf−2 .bzrignore−9 .crossbuilder/post_deploy+1 .gitignore+7 .project+17 .pydevproject+10 .settings/Autopilot List.launch+14 .settings/Autopilot Run.launch+14 Applications/Application.qml−54 Applications/applications.js−115 Bottombar/Bottombar.qml−147 Bottombar/HudButton.qml−63 Bottombar/graphics/hud@20.png Bottombar/graphics/hud_invoke_button_active@20.png CMakeLists.txt+115−75 CODING+148−53 COPYING.LGPL+514 Components/AnimationControllerWithSignals.qml−64 Components/ApplicationManagerWrapper.qml−130 Components/ApplicationScreenshot.qml−61 Components/Carousel.qml−284 Components/CrossFadeImage.qml−149 Components/FilterGrid.qml−137 Components/ListItems/Base.qml−127 Components/ListItems/Header.qml−73 Components/ListItems/Highlight.qml−46 Components/ListItems/graphics/ListItemDividerHorizontal@18.png Components/ListItems/graphics/ListItemDividerVertical@18.png Components/ListViewWithPageHeader.qml−189 Components/OpenEffect.qml−130 Components/PageHeader.qml−347 Components/RatingStars.qml−41 Components/ResponsiveFlowView.qml−81 Components/ResponsiveGridView.qml−76 Components/Revealer.qml−242 Components/Stage.qml−542 Components/Tile.qml−93 Components/Time.js−49 Components/UbuntuShapeForItem.qml−89 Components/VolumeControl.qml−58 Components/graphics/PageHeaderBaseDivider@18.png Components/graphics/PageHeaderBaseDivider@18.sci−5 Components/graphics/icon_star_off@20.png Components/graphics/icon_star_on@20.png Components/graphics/non-selected@18.png Dash/Apps/ApplicationsFilterGrid.qml−56 Dash/Apps/AppsAvailableForDownloadModel.qml−26 Dash/Apps/CloseIcon.qml−62 Dash/Apps/FrequentlyUsedAppsModel.qml−26 Dash/Apps/RunningApplicationTile.qml−138 Dash/Apps/RunningApplicationsGrid.qml−83 Dash/Apps/graphics/close_btn@9.png Dash/Dash.qml−93 Dash/DashApps.qml−183 Dash/DashBar.qml−134 Dash/DashContent.qml−144 Dash/DashHome.qml−200 Dash/DashMusic.qml−104 Dash/DashPeople.qml−235 Dash/DashPreview.qml−218 Dash/DashVideos.qml−210 Dash/GenericLensView.qml−95 Dash/LensDelegateMapper.qml−35 Dash/LensView.qml−48 Dash/Music/AlbumTile.qml−116 Dash/Music/MusicFilterGrid.qml−48 Dash/People/CarouselDelegatePeople.qml−166 Dash/People/Data.qml−71 Dash/People/Delegate.qml−167 Dash/People/PeopleCarousel.qml−43 Dash/People/PeopleFilterGrid.qml−74 Dash/People/PeoplePreview.qml−124 Dash/People/Preview/Address.qml−74 Dash/People/Preview/Generic.qml−80 Dash/People/Preview/Phone.qml−108 Dash/People/Preview/Status.qml−97 Dash/People/graphics/bottomshape@18.png Dash/People/graphics/bottomshape@18.sci−5 Dash/People/graphics/icon_facebook@18.png Dash/People/graphics/icon_offline@18.png Dash/People/graphics/icon_online@18.png Dash/People/graphics/icon_twitter@18.png Dash/People/graphics/icon_unknown@18.png Dash/People/graphics/icon_write_text@18.png Dash/People/graphics/star_favourite@18.png Dash/People/graphics/star_not_favourite@18.png Dash/Video/VideoInfo.qml−84 Dash/Video/VideoPreview.qml−178 Dash/Video/VideosFilterGrid.qml−51 Dash/Video/graphics/icon_button_amazon@20.png Dash/Video/graphics/icon_button_u1@20.png Dash/graphics/icon_clear@20.png Dash/graphics/icon_listview_clear@20.png Dash/graphics/icon_search_active@20.png Dash/graphics/icon_search_inactive@20.png Dash/graphics/lensIcons/Applications@18.png Dash/graphics/lensIcons/Home@18.png Dash/graphics/lensIcons/Music@18.png Dash/graphics/lensIcons/People@18.png Dash/graphics/lensIcons/Videos@18.png Dash/graphics/phone/home.png Dash/graphics/phone/music.png Dash/graphics/phone/screenshots/angrybirds@12.png Dash/graphics/phone/screenshots/browser@12.png Dash/graphics/phone/screenshots/camera@12.png Dash/graphics/phone/screenshots/facebook@12.png Dash/graphics/phone/screenshots/gallery@12.png Dash/graphics/phone/screenshots/map@12.png Dash/graphics/phone/screenshots/music@12.png Dash/graphics/phone/screenshots/phone@12.png Dash/graphics/phone/screenshots/settings@12.png Dash/graphics/phone/screenshots/twitter@12.png Dash/graphics/phone/videos.png Dash/graphics/play_button@18.png Dash/graphics/play_button_active@18.png Dash/graphics/play_button_active_big@20.png Dash/graphics/play_button_big@20.png Dash/graphics/tablet/apps.png Dash/graphics/tablet/home.png Dash/graphics/tablet/icon_close_preview@20.png Dash/graphics/tablet/music.png Dash/graphics/tablet/people.png Dash/graphics/tablet/videos.png Greeter/Clock.qml−66 Greeter/Greeter.qml−94 Greeter/GreeterContent.qml−133 Greeter/Lockscreen.qml−149 Greeter/LoginList.qml−301 Greeter/PassphraseLockscreen.qml−87 Greeter/PinLockscreen.qml−111 Greeter/PinPadButton.qml−59 Greeter/graphics/dot_empty.png Greeter/graphics/dot_filled.png Greeter/graphics/dot_pointer.png Greeter/graphics/icon_arrow.png Greeter/graphics/infographic_circle.png Hud/Hud.qml−496 Hud/HudParametrizedActionsPage.qml−172 Hud/Result.qml−84 Hud/ResultList.qml−106 Hud/SearchBar.qml−107 Hud/ShowingAnimation.qml−54 Hud/SliderLabel.qml−74 Hud/SoundAmplitudeDelegate.qml−52 Hud/SoundAmplitudeVisual.qml−146 Hud/graphics/divider@20.png Hud/graphics/divider@20.sci−5 Hud/graphics/dropshadow_right@20.png Hud/graphics/help@20.png Hud/graphics/hud_bg@20.png Hud/graphics/hud_handlearrow@20.png Hud/graphics/hud_handlebar@20.png Hud/graphics/icon_arrow@20.png Hud/graphics/icon_clear@20.png Hud/graphics/icon_search@20.png Hud/graphics/microphone@20.png Hud/graphics/popup_triangle@20.png Hud/graphics/settings@20.png Hud/graphics/undo@20.png Hud/graphics/view-fullscreen@20.png Jenkinsfile+2 LGPL_EXCEPTION.txt+22 Launcher/Launcher.qml−254 Launcher/LauncherDelegate.qml−127 Launcher/LauncherPanel.qml−120 Launcher/ShortcutsContainer.qml−39 Launcher/graphics/highlight@18.png Launcher/graphics/launcher_bg@18.png Launcher/graphics/launcher_bg@18.sci−5 Launcher/graphics/non-selected@18.png Launcher/graphics/non-selected@18.sci−5 Launcher/graphics/selected@18.png Launcher/graphics/selected@18.sci−5 Launcher/graphics/triangle@18.png MouseTouchAdaptor.cpp−136 Notifications/Notification.qml−153 Notifications/Notifications.qml−77 Panel/CMakeLists.txt−1 Panel/IndicatorItem.qml−57 Panel/IndicatorRow.qml−106 Panel/Indicators.qml−325 Panel/Indicators/CMakeLists.txt−2 Panel/Indicators/DatetimeIndicatorPage.qml−97 Panel/Indicators/DatetimeIndicatorWidget.qml−65 Panel/Indicators/DefaultIndicatorWidget.qml−80 Panel/Indicators/NetworkIndicatorPage.qml−80 Panel/Indicators/NetworkIndicatorWidget.qml−115 Panel/Indicators/client/IndicatorsPage.qml−49 Panel/Indicators/client/indicatorsclient.cpp−72 Panel/Indicators/servicefiles/CMakeLists.txt−17 Panel/Indicators/servicefiles/com.canonical.indicator.battery−9 Panel/Indicators/servicefiles/com.canonical.indicator.messages−9 Panel/Indicators/servicefiles/com.canonical.indicator.time−9 Panel/Indicators/servicefiles/com.canonical.settings.network−9 Panel/Indicators/servicefiles/com.canonical.settings.sound−9 Panel/IndicatorsDataModel.qml−68 Panel/MenuContent.qml−194 Panel/Menus/Overview.qml−70 Panel/Menus/Overview/FlightModeWidget.qml−60 Panel/Menus/Overview/OverviewGrid.qml−136 Panel/Menus/Overview/VolumeWidget.qml−88 Panel/Menus/Overview/graphics/plane_icon@18.png Panel/Menus/Overview/graphics/sound_off_icon@18.png Panel/Menus/Overview/graphics/sound_on_icon@18.png Panel/Panel.qml−204 Panel/SearchIndicator.qml−83 Panel/graphics/Battery@18.png Panel/graphics/Bluetooth@18.png Panel/graphics/Clock@18.png Panel/graphics/Location@18.png Panel/graphics/Messages@18.png Panel/graphics/Network@18.png Panel/graphics/Sound@18.png Panel/graphics/Sync@18.png Panel/graphics/System@18.png Panel/graphics/Time@18.png Panel/graphics/VerticalDivider@18.png Panel/graphics/handle@12.png Panel/graphics/handle@12.sci−5 Panel/graphics/rectangular_dropshadow@30.png Panel/graphics/search@12.png Panel/graphics/time_and_date@18.png README.md+31 Shell.qml−601 SideStage/SideStage.qml−68 SideStage/graphics/sidestage_handle@20.png build−68 build.sh+82 build_unity−168 clickable.yaml+153 cmake/modules/QmlTest.cmake+470−64 cmake/modules/autopilot.cmake+13−4 data/51-unity8-greeter.conf+2 data/CMakeLists.txt+27 data/com.canonical.Unity.gschema.xml+255 data/com.canonical.Unity8.gschema.xml+75 data/devices.conf+30 data/indicators-client.desktop.in+9 data/test.sensors+12 data/unity-mock-indicator-service.conf+7 data/unity8-filewatcher.conf+13 data/unity8-greeter-init.conf+12 data/unity8-greeter-logrotate.conf+14 data/unity8-greeter-wrapper+109 data/unity8-greeter.desktop.in+7 data/unity8-greeter.pkla+44 data/unity8.conf+99 unity8.desktop.in → data/unity8.desktop.in+1−2 debian/bileto_pre_release_hook+5 debian/changelog+7404−15 debian/control+258−91 debian/copyright+34−3 debian/indicators-client.install+1 debian/rules+45−3 debian/shlibs.local+1 debian/source/format−1 debian/tests/autopilot.sh+13 debian/tests/control+11 debian/tests/qmluitests.sh+11 debian/unity8-autopilot.install+2−1 debian/unity8-common.install+5 debian/unity8-common.udev+2 debian/unity8-doc.install+2 debian/unity8-fake-env.install−1 debian/unity8-greeter.install+5 debian/unity8-private.install+18 debian/unity8-schemas.install+1 debian/unity8-tests.install+9 debian/unity8-tests.lintian-overrides+1 debian/unity8.install+19−22 debian/unity8.maintscript+1 doc/CMakeLists.txt+40 doc/Doxyfile.in+2317 doc/devices.conf+45 graphics/12_10_background_wide@12.png graphics/applicationIcons/angrybirds@18.png graphics/applicationIcons/browser@18.png graphics/applicationIcons/calendar@18.png graphics/applicationIcons/camera@18.png graphics/applicationIcons/dash@18.png graphics/applicationIcons/evernote@18.png graphics/applicationIcons/facebook@18.png graphics/applicationIcons/gallery@18.png graphics/applicationIcons/gmail@18.png graphics/applicationIcons/map@18.png graphics/applicationIcons/media-player@18.png graphics/applicationIcons/music@18.png graphics/applicationIcons/notepad@18.png graphics/applicationIcons/phone-app@18.png graphics/applicationIcons/pinterest@18.png graphics/applicationIcons/ski_safari@18.png graphics/applicationIcons/skype@18.png graphics/applicationIcons/soundcloud@18.png graphics/applicationIcons/twitter@18.png graphics/applicationIcons/weather@18.png graphics/applicationIcons/wikipedia@18.png graphics/applicationIcons/youtube@18.png graphics/avatars/amanda@12.png graphics/avatars/anna_olsson@12.png graphics/avatars/funky@12.png graphics/phone_background.jpg graphics/tablet_background.jpg include/CMakeLists.txt+1 include/paths.h.in+175 main.cpp−149 modules/Unity/CMakeLists.txt−1 modules/Unity/Indicators/CMakeLists.txt−54 modules/Unity/Indicators/Network/CMakeLists.txt−37 modules/Unity/Indicators/Network/networkagent.cpp−146 modules/Unity/Indicators/Network/networkagent.h−65 modules/Unity/Indicators/Network/secret-agent.c−382 modules/Unity/Indicators/Network/secret-agent.h−102 modules/Unity/Indicators/flatmenuproxymodel.cpp−332 modules/Unity/Indicators/flatmenuproxymodel.h−97 modules/Unity/Indicators/indicatorsmodel.cpp−326 modules/Unity/Indicators/plugin.cpp−41 modules/Unity/Indicators/qml/BasicMenu.qml−51 modules/Unity/Indicators/qml/ButtonMenu.qml−44 modules/Unity/Indicators/qml/CMakeLists.txt−24 modules/Unity/Indicators/qml/DBusActionState.qml−104 modules/Unity/Indicators/qml/IndicatorBase.qml−60 modules/Unity/Indicators/qml/IndicatorPage.qml−191 modules/Unity/Indicators/qml/IndicatorWidget.qml−77 modules/Unity/Indicators/qml/Menu.qml−44 modules/Unity/Indicators/qml/MenuFactory.qml−106 modules/Unity/Indicators/qml/ProgressMenu.qml−62 modules/Unity/Indicators/qml/RemoveBackground.qml−59 modules/Unity/Indicators/qml/SectionMenu.qml−58 modules/Unity/Indicators/qml/SliderMenu.qml−66 modules/Unity/Indicators/qml/TextMenu.qml−81 modules/Unity/Indicators/qml/messaging/ActionTextField.qml−60 modules/Unity/Indicators/qml/messaging/CMakeLists.txt−22 modules/Unity/Indicators/qml/messaging/GroupedMessage.qml−90 modules/Unity/Indicators/qml/messaging/HeroMessage.qml−115 modules/Unity/Indicators/qml/messaging/HeroMessageHeader.qml−147 modules/Unity/Indicators/qml/messaging/MessageItem.qml−92 modules/Unity/Indicators/qml/messaging/QuickReply.qml−152 modules/Unity/Indicators/qml/messaging/SimpleTextMessage.qml−91 modules/Unity/Indicators/qml/messaging/SnapDecision.qml−135 modules/Unity/Indicators/qml/messaging/qmldir−13 modules/Unity/Indicators/qml/messaging/utils.js−27 modules/Unity/Indicators/qml/network/AccessPoint.qml−69 modules/Unity/Indicators/qml/network/CMakeLists.txt−21 modules/Unity/Indicators/qml/network/PasswordPage.qml−80 modules/Unity/Indicators/qml/network/qmldir−7 modules/Unity/Indicators/qml/qmldir−21 modules/Unity/Indicators/resources/artwork/messaging/default_app.svg−42 modules/Unity/Indicators/resources/artwork/messaging/default_contact.png modules/Unity/Indicators/resources/artwork/messaging/message_sms01_54px.png modules/Unity/Indicators/resources/indicators.qrc−7 paths.h.in−82 plugins/AccountsService/AccountsService.cpp+443 plugins/AccountsService/AccountsService.h+156 plugins/AccountsService/AccountsServiceDBusAdaptor.cpp+152 plugins/AccountsService/AccountsServiceDBusAdaptor.h+58 plugins/AccountsService/CMakeLists.txt+28 plugins/AccountsService/com.canonical.unity.AccountsService.xml+61 plugins/AccountsService/plugin.cpp+38 plugins/AccountsService/plugin.h+34 plugins/AccountsService/qmldir+3 plugins/CMakeLists.txt+26−3 plugins/Cursor/3rd_party/CMakeLists.txt+1 plugins/Cursor/3rd_party/xcursor/CMakeLists.txt+15 plugins/Cursor/3rd_party/xcursor/xcursor.c+968 plugins/Cursor/3rd_party/xcursor/xcursor.h+65 plugins/Cursor/CMakeLists.txt+32 plugins/Cursor/Cursor.qml+62 plugins/Cursor/CursorImageInfo.cpp+115 plugins/Cursor/CursorImageInfo.h+82 plugins/Cursor/CursorImageProvider.cpp+337 plugins/Cursor/CursorImageProvider.h+103 plugins/Cursor/MousePointer.cpp+235 plugins/Cursor/MousePointer.h+92 plugins/Cursor/plugin.cpp+41 plugins/Cursor/plugin.h+33 plugins/Cursor/qmldir+3 plugins/GlobalShortcut/CMakeLists.txt+10 plugins/GlobalShortcut/globalshortcut.cpp+91 plugins/GlobalShortcut/globalshortcut.h+81 plugins/GlobalShortcut/globalshortcutregistry.cpp+125 plugins/GlobalShortcut/globalshortcutregistry.h+70 tests/qmltests/modules/Unity/Indicators/plugin.cpp → plugins/GlobalShortcut/plugin.cpp+7−10 plugins/GlobalShortcut/plugin.h+32 plugins/GlobalShortcut/qmldir+2 plugins/Greeter/CMakeLists.txt+6 plugins/Greeter/Unity/CMakeLists.txt+1 plugins/Greeter/Unity/Launcher/CMakeLists.txt+35 plugins/Greeter/Unity/Launcher/launcheritem.cpp+218 plugins/Greeter/Unity/Launcher/launcheritem.h+84 plugins/Greeter/Unity/Launcher/launchermodelas.cpp+303 plugins/Greeter/Unity/Launcher/launchermodelas.h+77 plugins/Greeter/Unity/Launcher/plugin.cpp+46 modules/Unity/Indicators/plugin.h → plugins/Greeter/Unity/Launcher/plugin.h+8−8 plugins/Greeter/Unity/Launcher/qmldir+3 plugins/Greeter/Unity/Launcher/quicklistentry.cpp+56 plugins/Greeter/Unity/Launcher/quicklistentry.h+43 plugins/Greeter/Unity/Launcher/quicklistmodel.cpp+72 plugins/Greeter/Unity/Launcher/quicklistmodel.h+55 plugins/HudClient/CMakeLists.txt−49 plugins/HudClient/hudclient.cpp−309 plugins/HudClient/hudclient.h−71 plugins/HudClient/hudtoolbarmodel.cpp−98 plugins/HudClient/hudtoolbarmodel.h−44 plugins/HudClient/qmldir−1 plugins/HudClient/volumepeakdetector.cpp−223 plugins/HudClient/volumepeakdetector.h−78 plugins/LightDM/CMakeLists.txt+14−31 plugins/LightDM/DBusGreeter.cpp+50 plugins/LightDM/DBusGreeter.h+52 plugins/LightDM/DBusGreeterList.cpp+56 plugins/LightDM/DBusGreeterList.h+57 plugins/LightDM/FullLightDM/CMakeLists.txt+32 plugins/LightDM/FullLightDM/qmldir+3 plugins/LightDM/Greeter.cpp+185−39 plugins/LightDM/Greeter.h+37−15 plugins/LightDM/GreeterPrivate.h+45 plugins/LightDM/IntegratedLightDM/CMakeLists.txt+33 tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget1.qml → plugins/LightDM/IntegratedLightDM/QLightDM/Greeter+2−8 tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget3.qml → plugins/LightDM/IntegratedLightDM/QLightDM/SessionsModel+2−8 plugins/LightDM/IntegratedLightDM/QLightDM/UsersModel+17 plugins/LightDM/IntegratedLightDM/liblightdm/CMakeLists.txt+54 tests/mocks/LightDM/Greeter.cpp → plugins/LightDM/IntegratedLightDM/liblightdm/Greeter.cpp+29−14 tests/mocks/LightDM/Greeter.h → plugins/LightDM/IntegratedLightDM/liblightdm/Greeter.h+9−6 plugins/LightDM/IntegratedLightDM/liblightdm/GreeterPrivate.cpp+309 tests/mocks/LightDM/GreeterPrivate.h → plugins/LightDM/IntegratedLightDM/liblightdm/GreeterPrivate.h+4−2 plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModel.cpp+87 plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModel.h+72 plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModelPrivate.cpp+36 plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModelPrivate.h+54 tests/mocks/LightDM/UsersModel.cpp → plugins/LightDM/IntegratedLightDM/liblightdm/UsersModel.cpp+14−21 tests/mocks/LightDM/UsersModel.h → plugins/LightDM/IntegratedLightDM/liblightdm/UsersModel.h+10−6 plugins/LightDM/IntegratedLightDM/liblightdm/UsersModelPrivate.cpp+94 plugins/LightDM/IntegratedLightDM/liblightdm/UsersModelPrivate.h+72 plugins/LightDM/IntegratedLightDM/qmldir+3 plugins/LightDM/PromptsModel.cpp+97 plugins/LightDM/PromptsModel.h+70 plugins/LightDM/SessionsModel.cpp+135 plugins/LightDM/SessionsModel.h+66 plugins/LightDM/UsersModel.cpp+183−15 plugins/LightDM/UsersModel.h+8−10 plugins/LightDM/plugin.cpp+52−13 plugins/LightDM/plugin.h+4−6 plugins/LightDM/qmldir+3−2 plugins/Lights/CMakeLists.txt+23 plugins/Lights/HfdLights.cpp+62 plugins/Lights/HfdLights.h+42 plugins/Lights/LegacyLights.cpp+91 plugins/Lights/LegacyLights.h+45 plugins/Lights/Lights.cpp+101 plugins/Lights/Lights.h+71 plugins/Lights/android-hardware.h+19 plugins/Lights/plugin.cpp+54 plugins/Unity/plugin.h → plugins/Lights/plugin.h+6−7 plugins/Lights/qmldir+3 plugins/Powerd/CMakeLists.txt+17 plugins/Powerd/Powerd.cpp+90 plugins/Powerd/Powerd.h+70 plugins/Powerd/plugin.cpp+36 plugins/Powerd/plugin.h+35 plugins/Powerd/qmldir+3 plugins/ScreenshotDirectory/CMakeLists.txt+9 plugins/ScreenshotDirectory/ScreenGrabber.qmltypes+17 plugins/ScreenshotDirectory/ScreenshotDirectory.cpp+64 plugins/ScreenshotDirectory/ScreenshotDirectory.h+39 tests/mocks/LightDM/single/UsersModelPrivate.cpp → plugins/ScreenshotDirectory/plugin.cpp+7−14 modules/Unity/Indicators/Network/plugin.h → plugins/ScreenshotDirectory/plugin.h+7−8 plugins/ScreenshotDirectory/qmldir+2 plugins/SessionBroadcast/CMakeLists.txt+14 plugins/SessionBroadcast/SessionBroadcast.cpp+71 plugins/SessionBroadcast/SessionBroadcast.h+51 plugins/SessionBroadcast/plugin.cpp+35 plugins/SessionBroadcast/plugin.h+33 plugins/SessionBroadcast/qmldir+3 plugins/UInput/CMakeLists.txt+7 plugins/UInput/plugin.cpp+26 plugins/UInput/plugin.h+32 plugins/UInput/qmldir+3 plugins/UInput/uinput.cpp+182 plugins/UInput/uinput.h+61 plugins/Ubuntu/CMakeLists.txt+1 plugins/Ubuntu/DownloadDaemonListener/CMakeLists.txt+20 plugins/Ubuntu/DownloadDaemonListener/DownloadTracker.cpp+85 plugins/Ubuntu/DownloadDaemonListener/DownloadTracker.h+70 plugins/Ubuntu/DownloadDaemonListener/interface/downloadtrackeradaptor.cpp+25 plugins/Ubuntu/DownloadDaemonListener/interface/downloadtrackeradaptor.h+192 plugins/Ubuntu/DownloadDaemonListener/interface/metatypes.h+25 plugins/Ubuntu/DownloadDaemonListener/plugin.cpp+39 plugins/Ubuntu/DownloadDaemonListener/plugin.h+37 plugins/Ubuntu/DownloadDaemonListener/qmldir+3 plugins/Ubuntu/Gestures/AxisVelocityCalculator.cpp+27−21 plugins/Ubuntu/Gestures/AxisVelocityCalculator.h+24−20 plugins/Ubuntu/Gestures/CMakeLists.txt+29−20 plugins/Ubuntu/Gestures/Damper.h−85 plugins/Ubuntu/Gestures/Direction.cpp+15−3 plugins/Ubuntu/Gestures/Direction.h+9−5 plugins/Ubuntu/Gestures/DirectionalDragArea.cpp−410 plugins/Ubuntu/Gestures/DirectionalDragArea.h−233 plugins/Ubuntu/Gestures/MouseEventGenerator.cpp+64 plugins/Ubuntu/Gestures/MouseEventGenerator.h+48 plugins/Ubuntu/Gestures/PressedOutsideNotifier.cpp+119 plugins/Ubuntu/Gestures/PressedOutsideNotifier.h+62 plugins/Ubuntu/Gestures/TouchDispatcher.cpp+398 plugins/Ubuntu/Gestures/TouchDispatcher.h+96 plugins/Ubuntu/Gestures/TouchGate.cpp+290 plugins/Ubuntu/Gestures/TouchGate.h+125 plugins/Ubuntu/Gestures/TouchGestureArea.cpp+879 plugins/Ubuntu/Gestures/TouchGestureArea.h+229 Notifications/timings.js → plugins/Ubuntu/Gestures/UbuntuGesturesQmlGlobal.h+6−6 plugins/Ubuntu/Gestures/plugin.cpp+11−4 plugins/Ubuntu/Gestures/plugin.h+2−2 plugins/Ubuntu/Gestures/qmldir+2−1 plugins/Unity/ApplicationMenu/CMakeLists.txt+19 plugins/Unity/ApplicationMenu/applicationmenuregistry.cpp+141 plugins/Unity/ApplicationMenu/applicationmenuregistry.h+83 plugins/Unity/ApplicationMenu/com.ubuntu.MenuRegistrar.xml+83 plugins/Unity/ApplicationMenu/dbusapplicationmenuregistry.cpp+44 plugins/Unity/ApplicationMenu/dbusapplicationmenuregistry.h+34 plugins/Unity/ApplicationMenu/plugin.cpp+42 plugins/Unity/ApplicationMenu/plugin.h+32 plugins/Unity/ApplicationMenu/qmldir+3 plugins/Unity/CMakeLists.txt+7−50 plugins/Unity/Connectivity/CMakeLists.txt+10 plugins/Unity/Connectivity/Connectivity.cpp+33 plugins/Unity/Connectivity/Connectivity.h+34 plugins/Unity/Connectivity/plugin.cpp+34 plugins/Unity/Connectivity/plugin.h+31 plugins/Unity/Connectivity/qmldir+3 plugins/Unity/Indicators/CMakeLists.txt+50 modules/Unity/Indicators/qml/messaging/ActionButton.qml → plugins/Unity/Indicators/Messaging/qml/ActionButton.qml+14−4 plugins/Unity/Indicators/actionrootstate.cpp+97 plugins/Unity/Indicators/actionrootstate.h+55 modules/Unity/Indicators/indicator.cpp → plugins/Unity/Indicators/indicator.cpp+39−20 modules/Unity/Indicators/indicator.h → plugins/Unity/Indicators/indicator.h+12−6 modules/Unity/Indicators/indicators.h → plugins/Unity/Indicators/indicators.h+43−8 modules/Unity/Indicators/indicatorsmanager.cpp → plugins/Unity/Indicators/indicatorsmanager.cpp+85−47 modules/Unity/Indicators/indicatorsmanager.h → plugins/Unity/Indicators/indicatorsmanager.h+22−16 plugins/Unity/Indicators/indicatorsmodel.cpp+301 modules/Unity/Indicators/indicatorsmodel.h → plugins/Unity/Indicators/indicatorsmodel.h+25−28 plugins/Unity/Indicators/menucontentactivator.cpp+344 plugins/Unity/Indicators/menucontentactivator.h+117 plugins/Unity/Indicators/modelactionrootstate.cpp+204 plugins/Unity/Indicators/modelactionrootstate.h+72 plugins/Unity/Indicators/modelprinter.cpp+152 plugins/Unity/Indicators/modelprinter.h+56 plugins/Unity/Indicators/plugin.cpp+67 Panel/Indicators/SoundIndicatorWidget.qml → plugins/Unity/Indicators/plugin.h+13−5 plugins/Unity/Indicators/qmldir+3 plugins/Unity/Indicators/rootstateparser.cpp+231 plugins/Unity/Indicators/rootstateparser.h+74 plugins/Unity/Indicators/sharedunitymenumodel.cpp+96 plugins/Unity/Indicators/sharedunitymenumodel.h+66 plugins/Ubuntu/Gestures/UbuntuGesturesGlobal.h → plugins/Unity/Indicators/unityindicatorsglobal.h+3−3 plugins/Unity/Indicators/unitymenumodelcache.cpp+65 plugins/Unity/Indicators/unitymenumodelcache.h+50 plugins/Unity/Indicators/unitymenumodelstack.cpp+160 plugins/Unity/Indicators/unitymenumodelstack.h+68 plugins/Unity/InputInfo/CMakeLists.txt+38 plugins/Unity/InputInfo/linux/qinputdeviceinfo_linux.cpp+296 plugins/Unity/InputInfo/linux/qinputdeviceinfo_linux_p.h+96 plugins/Unity/InputInfo/plugin.cpp+32 Panel/Indicators/MessagingIndicatorWidget.qml → plugins/Unity/InputInfo/plugin.h+14−9 plugins/Unity/InputInfo/qdeclarativeinputdevicemodel.cpp+196 plugins/Unity/InputInfo/qdeclarativeinputdevicemodel_p.h+102 plugins/Unity/InputInfo/qinputinfo.cpp+270 plugins/Unity/InputInfo/qinputinfo.h+142 plugins/Unity/InputInfo/qmldir+3 plugins/Unity/Launcher/CMakeLists.txt+54 plugins/Unity/Launcher/appdrawermodel.cpp+192 plugins/Unity/Launcher/appdrawermodel.h+64 plugins/Unity/Launcher/asadapter.cpp+67 plugins/Unity/Launcher/asadapter.h+46 plugins/Unity/Launcher/dbusinterface.cpp+226 plugins/Unity/Launcher/dbusinterface.h+49 plugins/Unity/Launcher/gsettings.cpp+80 plugins/Unity/Launcher/gsettings.h+47 plugins/Unity/Launcher/launcheritem.cpp+274 plugins/Unity/Launcher/launcheritem.h+92 plugins/Unity/Launcher/launchermodel.cpp+645 plugins/Unity/Launcher/launchermodel.h+92 plugins/Unity/Launcher/plugin.cpp+50 plugins/Unity/Launcher/plugin.h+34 plugins/Unity/Launcher/qmldir+3 plugins/Unity/Launcher/quicklistentry.cpp+85 plugins/Unity/Launcher/quicklistentry.h+56 plugins/Unity/Launcher/quicklistmodel.cpp+95 plugins/Unity/Launcher/quicklistmodel.h+61 plugins/Unity/Launcher/ualwrapper.cpp+74 plugins/Unity/Launcher/ualwrapper.h+36 plugins/Unity/Launcher/xdgwatcher.cpp+129 plugins/Unity/Launcher/xdgwatcher.h+46 plugins/Unity/Platform/CMakeLists.txt+11 plugins/Unity/Platform/platform.cpp+66 plugins/Unity/Platform/platform.h+64 plugins/Unity/Platform/plugin.cpp+27 plugins/Unity/Platform/plugin.h+32 plugins/Unity/Platform/qmldir+2 plugins/Unity/Session/CMakeLists.txt+29 plugins/Unity/Session/dbusunitysessionservice.cpp+647 plugins/Unity/Session/dbusunitysessionservice.h+377 plugins/Unity/Session/orientationlock.cpp+74 plugins/Unity/Session/orientationlock.h+60 plugins/Unity/Session/plugin.cpp+48 plugins/Unity/Session/plugin.h+34 plugins/Unity/Session/qmldir+3 plugins/Unity/bottombarvisibilitycommunicatorshell.h−53 plugins/Unity/categories.cpp−182 plugins/Unity/categories.h−91 plugins/Unity/launchermodel.cpp−153 plugins/Unity/launchermodel.h−86 plugins/Unity/lens.cpp−338 plugins/Unity/lens.h−149 plugins/Unity/lenses.cpp−182 plugins/Unity/lenses.h−90 plugins/Unity/peoplepreviewdata.cpp−438 plugins/Unity/peoplepreviewdata.h−251 plugins/Unity/plugin.cpp−69 plugins/Unity/qmldir−2 plugins/Utils/CMakeLists.txt+36−17 plugins/Utils/EdgeBarrierSettings.qml+66 plugins/Utils/ElapsedTimer.h+51 plugins/Utils/Style.js+37 plugins/Utils/Timer.cpp+62 plugins/Utils/Timer.h+78 plugins/Utils/URLDispatcher.cpp+80 plugins/Utils/URLDispatcher.h+47 plugins/Utils/WindowInputMonitor.cpp+126 plugins/Utils/WindowInputMonitor.h+97 plugins/Utils/activefocuslogger.cpp+61 tests/plugins/Ubuntu/Gestures/tst_Damper.cpp → plugins/Utils/activefocuslogger.h+15−18 plugins/Utils/appdrawerproxymodel.cpp+189 plugins/Utils/appdrawerproxymodel.h+87 plugins/Utils/applicationpaths.h−40 plugins/Utils/applicationsfiltermodel.cpp+101 plugins/Utils/applicationsfiltermodel.h+69 plugins/Utils/constants.cpp+32 plugins/Utils/constants.h+43 plugins/Utils/deviceconfigparser.cpp+176 plugins/Utils/deviceconfigparser.h+66 plugins/Utils/easingcurve.cpp+73 plugins/Utils/easingcurve.h+69 plugins/Utils/expressionfiltermodel.cpp+49 plugins/Utils/expressionfiltermodel.h+42 plugins/Utils/globalfunctions.cpp+58 plugins/Utils/globalfunctions.h+44 plugins/Utils/inputeventgenerator.cpp+34 plugins/Utils/inputeventgenerator.h+40 plugins/Utils/inputwatcher.cpp+118 plugins/Utils/inputwatcher.h+58 plugins/Utils/plugin.cpp+64−11 plugins/Utils/plugin.h+1−1 plugins/Utils/qlimitproxymodelqml.cpp+110−24 plugins/Utils/qlimitproxymodelqml.h+4−2 plugins/Utils/qmldir+3 plugins/Utils/quicklistproxymodel.cpp+72 plugins/Utils/quicklistproxymodel.h+52 plugins/Utils/qvariantlistmodel.h+6−6 plugins/Utils/tabfocusfence.cpp+72 plugins/Utils/tabfocusfence.h+38 plugins/Utils/timezoneFormatter.cpp+45 plugins/Utils/timezoneFormatter.h+33 plugins/Utils/unitymenumodelpaths.cpp+182 plugins/Utils/unitymenumodelpaths.h+82 plugins/Utils/unitysortfilterproxymodelqml.cpp+167 plugins/Utils/unitysortfilterproxymodelqml.h+68 plugins/Utils/windowinputfilter.cpp+70 plugins/Utils/windowinputfilter.h+58 plugins/Utils/windowstatestorage.cpp+383 plugins/Utils/windowstatestorage.h+74 plugins/WindowManager/AvailableDesktopArea.cpp+50 plugins/WindowManager/AvailableDesktopArea.h+38 plugins/WindowManager/CMakeLists.txt+26 plugins/WindowManager/InputMethodManager.cpp+56 plugins/WindowManager/InputMethodManager.h+55 plugins/WindowManager/TopLevelWindowModel.cpp+782 plugins/WindowManager/TopLevelWindowModel.h+308 plugins/WindowManager/Window.cpp+277 plugins/WindowManager/Window.h+176 Components/Circle.qml → plugins/WindowManager/WindowManagerGlobal.h+7−6 plugins/WindowManager/WindowManagerPlugin.cpp+44 plugins/WindowManager/WindowManagerPlugin.h+32 plugins/WindowManager/WindowMargins.cpp+74 plugins/WindowManager/WindowMargins.h+59 plugins/WindowManager/qmldir+2 plugins/Wizard/50-com.canonical.unity.wizard.pkla+6 plugins/Wizard/CMakeLists.txt+23 plugins/Wizard/Changelog.cpp+58 plugins/Wizard/Changelog.h+52 plugins/Wizard/LocalePlugin.cpp+291 plugins/Wizard/LocalePlugin.h+58 plugins/Wizard/PageList.cpp+127 plugins/Wizard/PageList.h+53 plugins/Wizard/Status.cpp+143 plugins/Wizard/Status.h+60 plugins/Wizard/System.cpp+182 plugins/Wizard/System.h+75 plugins/Wizard/Unity/Application/CMakeLists.txt+3 tests/mocks/Ubuntu/Application/InputFilterArea.qml → plugins/Wizard/Unity/Application/OSKController.qml−1 plugins/Wizard/Unity/Application/qmldir+2 plugins/Wizard/Unity/CMakeLists.txt+1 plugins/Wizard/Utils/CMakeLists.txt+27 plugins/Wizard/Utils/plugin.cpp+41 tests/qmltests/plugins/Unity/fake_unity_plugin.h → plugins/Wizard/Utils/plugin.h+5−6 plugins/Wizard/Utils/qmldir+2 plugins/Utils/qsortfilterproxymodelqml.cpp → plugins/Wizard/Utils/qsortfilterproxymodelqml.cpp+45−1 plugins/Utils/qsortfilterproxymodelqml.h → plugins/Wizard/Utils/qsortfilterproxymodelqml.h+5 plugins/Wizard/keyboardLayoutsModel.cpp+163 plugins/Wizard/keyboardLayoutsModel.h+66 plugins/Wizard/main.cpp+93 plugins/Wizard/plugin.cpp+38 plugins/Wizard/plugin.h+31 plugins/Wizard/qmldir+2 plugins/Wizard/timezonemodel.cpp+244 plugins/Wizard/timezonemodel.h+80 plugins/Wizard/ubuntu-system-settings-wizard-cleanup.conf+20 plugins/Wizard/ubuntu-system-settings-wizard-set-lang.conf+30 plugins/Wizard/ubuntu-system-settings-wizard.conf+75 po/aa.po+880 po/am.po+1406 po/ar.po+1193−165 po/ast.po+1408 po/az.po+861−127 po/be.po+1253 po/bg.po+882 po/bn.po+1062 po/br.po+1348 po/bs.po+1146 po/ca.po+1379−157 po/ca@valencia.po+1125 po/ce.po+816 po/ckb.po+870 po/co.po+1061 po/cs.po+1332 po/cy.po+1165 po/da.po+1216 po/de.po+1385−167 po/el.po+1255−156 po/en_AU.po+1364−155 po/en_GB.po+1336−166 po/en_US.po+814 po/eo.po+805−115 po/es.po+1376−169 po/et.po+816 po/eu.po+1246 po/fa.po+1453 po/fi.po+1371−168 po/fo.po+802−126 po/fr.po+1394−156 po/ga.po+1109 po/gd.po+1461 po/gl.po+1364−163 po/gu.po+814 po/gv.po+918 po/he.po+1022−166 po/hi.po+850 po/hr.po+1310−162 po/hu.po+1365−163 po/hy.po+857−140 po/ia.po+1409 po/id.po+889−115 po/is.po+999 po/it.po+1376−161 po/ja.po+893−115 po/kk.po+841 po/km.po+1071 po/kn.po+725−127 po/ko.po+1176−165 po/ku.po+978 po/ky.po+725−127 po/lo.po+834 po/lt.po+1034 po/lv.po+1096−129 po/ml.po+871 po/mr.po+864 po/ms.po+1376 po/my.po+797−126 po/nb.po+1355−164 po/ne.po+834 po/nl.po+1366−163 po/nn.po+816 po/oc.po+1276 po/or.po+816 po/pa.po+1153 po/pl.po+1361−164 po/pt.po+1435 po/pt_BR.po+1154−156 po/ro.po+1145−127 po/ru.po+1364−160 po/sc.po+904 po/shn.po+816 po/si.po+766−115 po/sk.po+1352 po/sl.po+1302−133 po/sq.po+1048 po/sr.po+1329−150 po/sv.po+1363−166 po/sw.po+1087 po/ta.po+872 po/te.po+751−116 po/th.po+817 po/tr.po+1348−154 po/ug.po+1171−140 po/uk.po+1368−168 po/unity8.pot+692−111 po/update-unity-pot+32−5 po/ur.po+819 po/uz.po+816 po/vi.po+816 po/wo.po+1232 po/xh.po+816 po/zh_CN.po+1315−169 po/zh_HK.po+897 po/zh_TW.po+1261−168 qml/ApplicationMenus/ApplicationMenuItemFactory.qml+135 qml/ApplicationMenus/ApplicationMenusLimits.qml+24 qml/ApplicationMenus/MenuBar.qml+513 qml/ApplicationMenus/MenuItem.qml+146 qml/ApplicationMenus/MenuNavigator.qml+101 qml/ApplicationMenus/MenuPopup.qml+510 qml/ApplicationMenus/RegisteredApplicationMenuModel.qml+56 qml/ApplicationMenus/qmldir+1 qml/CMakeLists.txt+23 qml/Components/Background.qml+87 qml/Components/BlurLayer.qml+39 qml/Components/BrightnessControl.qml+54 qml/Components/Dialogs.qml+328 qml/Components/DragHandle.qml+227 Components/DraggingArea.qml → qml/Components/DraggingArea.qml+7−4 qml/Components/EdgeBarrier.qml+114 qml/Components/EdgeBarrierController.qml+74 qml/Components/EdgeDragEvaluator.qml+97 qml/Components/FadingLabel.qml+42 qml/Components/Flickable.qml+24 qml/Components/FloatingFlickable.qml+63 Components/ListItems/VerticalThinDivider.qml → qml/Components/GridView.qml+8−10 qml/Components/Handle.qml+44 qml/Components/InputMethod.qml+58 qml/Components/ItemGrabber.qml+86 qml/Components/ItemSnapshot.qml+45 qml/Components/KeyboardShortcutsOverlay.qml+336 qml/Components/KeymapSwitcher.qml+102 qml/Components/LazyImage.qml+202 qml/Components/ListView.qml+24 qml/Components/ListViewOSKScroller.qml+53 qml/Components/Lockscreen.qml+256 qml/Components/MediaServices/MediaServices.qml+386 qml/Components/MediaServices/MediaServicesControls.qml+192 qml/Components/MediaServices/MediaServicesHeader.qml+71 qml/Components/MediaServices/VideoPlayer.qml+155 qml/Components/MediaServices/VideoPlayerControls.qml+158 qml/Components/ModeSwitchWarningDialog.qml+101 qml/Components/NotificationAudio.qml+60 qml/Components/Orientations.qml+57 qml/Components/PanelState/PanelState.qml+36 qml/Components/PanelState/qmldir+1 qml/Components/PassphraseLockscreen.qml+150 qml/Components/PhysicalKeysMapper.qml+163 qml/Components/PinLockscreen.qml+258 qml/Components/PinPadButton.qml+78 qml/Components/Rating.qml+49 qml/Components/RatingStyle.qml+50 qml/Components/ScrollCalculator.qml+100 Components/SearchHistoryModel.qml → qml/Components/SearchHistoryModel/SearchHistoryModel.qml+2−1 qml/Components/SearchHistoryModel/qmldir+1 qml/Components/SharingPicker.qml+102 qml/Components/ShellDialog.qml+68 Components/Showable.qml → qml/Components/Showable.qml+47−19 Components/StandardAnimation.qml → qml/Components/StandardAnimation.qml+1−1 qml/Components/VirtualTouchPad.qml+406 qml/Components/VolumeControl.qml+63 qml/Components/Wallpaper.qml+96 qml/Components/WallpaperResolver.qml+60 qml/Components/WindowControlButtons.qml+121 Components/WrongPasswordAnimation.qml → qml/Components/WrongPasswordAnimation.qml+4−4 qml/Components/ZoomableImage.qml+157 Components/carousel.js → qml/Components/carousel.js qml/Components/flickableUtils.js+28 qml/Components/graphics/close@20.png qml/Components/graphics/icon_star_empty@20.png qml/Components/graphics/icon_star_full@20.png qml/Components/graphics/icon_star_half@20.png qml/Components/graphics/icon_star_off@20.png qml/Components/graphics/icon_star_on@20.png qml/Components/graphics/non-selected@18.png Components/graphics/non-selected@18.sci → qml/Components/graphics/non-selected@18.sci qml/Components/graphics/window-close.svg+164 qml/Components/graphics/window-maximize.svg+164 qml/Components/graphics/window-minimize.svg+164 qml/Components/graphics/window-window.svg+41 qml/DeviceConfiguration.qml+161 qml/DisabledScreenNotice.qml+81 qml/Greeter/ButtonPrompt.qml+51 qml/Greeter/Circle.qml+57 qml/Greeter/Clock.qml+91 qml/Greeter/CoverPage.qml+271 qml/Greeter/DelayedLockscreen.qml+86 Greeter/Dot.qml → qml/Greeter/Dot.qml+1−1 qml/Greeter/FullLightDMImpl.qml+31 Greeter/Gradient.js → qml/Greeter/Gradient.js+7−3 qml/Greeter/Greeter.qml+632 qml/Greeter/GreeterPrompt.qml+127 qml/Greeter/GreeterView.qml+534 Greeter/Infographics.qml → qml/Greeter/Infographics.qml+118−138 Dash/Music/MusicCarousel.qml → qml/Greeter/IntegratedLightDMImpl.qml+12−16 qml/Greeter/LightDMService.qml+54 qml/Greeter/LoginAreaContainer.qml+38 qml/Greeter/LoginList.qml+292 Greeter/ObjectPositioner.qml → qml/Greeter/ObjectPositioner.qml+2−2 qml/Greeter/PinPrompt.qml+184 qml/Greeter/PromptList.qml+151 qml/Greeter/SessionIcon.qml+47 qml/Greeter/SessionsList.qml+205 qml/Greeter/ShimGreeter.qml+47 qml/Greeter/TextPrompt.qml+198 qml/Greeter/graphics/dot_empty.png qml/Greeter/graphics/dot_filled.png qml/Greeter/graphics/dot_pointer.png qml/Greeter/graphics/icon_arrow.png qml/Greeter/graphics/session_icons/gnome_badge.png qml/Greeter/graphics/session_icons/kde_badge.png qml/Greeter/graphics/session_icons/recovery_console_badge.png qml/Greeter/graphics/session_icons/ubuntu_badge.png qml/Greeter/graphics/session_icons/unknown_badge.png qml/Greeter/qmldir+1 qml/Launcher/BackgroundBlur.qml+81 qml/Launcher/Drawer.qml+413 qml/Launcher/DrawerGridView.qml+85 qml/Launcher/FoldingLauncherDelegate.qml+144 qml/Launcher/Launcher.qml+661 qml/Launcher/LauncherDelegate.qml+327 qml/Launcher/LauncherPanel.qml+961 qml/Launcher/PullToRefreshScopeStyle.qml+83 qml/Launcher/Tooltip.qml+72 qml/Launcher/graphics/divider-line.png qml/Launcher/graphics/focused_app_arrow@30.png qml/Launcher/graphics/home.svg+243 qml/Launcher/graphics/quicklist_tooltip@30.png qml/Notifications/Notification.qml+600 qml/Notifications/NotificationButton.qml+73 qml/Notifications/NotificationMenuItemFactory.qml+230 qml/Notifications/Notifications.qml+115 qml/Notifications/OptionToggle.qml+125 Dash/Video/CarouselDelegateVideo.qml → qml/Notifications/ShapedIcon.qml+20−19 qml/Notifications/SwipeToAct.qml+275 qml/OrientedShell.qml+336 qml/Panel/ActiveCallHint.qml+211 tests/mocks/LightDM/single/InfographicModelPrivate.cpp → qml/Panel/FakePanelMenu.qml+8−10 qml/Panel/Indicators/IndicatorBase.qml+47 Panel/Indicators/DefaultIndicatorPage.qml → qml/Panel/Indicators/IndicatorDelegate.qml+4−4 qml/Panel/Indicators/IndicatorItem.qml+310 qml/Panel/Indicators/IndicatorMenuItemFactory.qml+1113 qml/Panel/Indicators/IndicatorsLight.qml+234 qml/Panel/Indicators/MessageMenuItemFactory.qml+244 qml/Panel/Indicators/client/IndicatorRepresentation.qml+121 Panel/Indicators/client/IndicatorsClient.qml → qml/Panel/Indicators/client/IndicatorsClient.qml+21−13 Panel/Indicators/client/IndicatorsList.qml → qml/Panel/Indicators/client/IndicatorsList.qml+24−18 modules/Unity/Indicators/qml/network/WifiSection.qml → qml/Panel/Indicators/client/IndicatorsTree.qml+20−6 qml/Panel/MenuContent.qml+83 qml/Panel/Panel.qml+522 qml/Panel/PanelBar.qml+330 qml/Panel/PanelItemRow.qml+270 qml/Panel/PanelMenu.qml+414 qml/Panel/PanelMenuPage.qml+226 qml/Panel/PanelVelocityCalculator.qml+54 qml/Panel/graphics/rectangular_dropshadow@30.png Panel/graphics/rectangular_dropshadow@30.sci → qml/Panel/graphics/rectangular_dropshadow@30.sci qml/Rotation/HalfLoopRotationAnimation.qml+47 qml/Rotation/ImmediateRotationAction.qml+34 qml/Rotation/NinetyRotationAnimation.qml+88 qml/Rotation/RotationStates.qml+289 qml/Rotation/UpdateShellTransformations.qml+42 qml/Shell.qml+951 qml/Stage/ApplicationWindow.qml+416 qml/Stage/ChildWindow.qml+203 qml/Stage/ChildWindowRepeater.qml+39 qml/Stage/ChildWindowTree.qml+138 qml/Stage/DecoratedWindow.qml+319 qml/Stage/FakeMaximizeDelegate.qml+233 qml/Stage/MainViewStyle.qml+87 qml/Stage/MoveHandler.qml+201 qml/Stage/OrientationChangeAnimation.qml+265 qml/Stage/PromptSurfaceAnimations.qml+80 Dash/Music/CarouselDelegateMusic.qml → qml/Stage/ResizeGrip.qml+25−21 qml/Stage/SideStage.qml+121 qml/Stage/Splash.qml+150 qml/Stage/Spread/BezierCurve.qml+45 qml/Stage/Spread/KeySpline.js+66 qml/Stage/Spread/MathUtils.js+95 qml/Stage/Spread/OpacityMask.qml+82 qml/Stage/Spread/Spread.qml+173 qml/Stage/Spread/SpreadDelegateInputArea.qml+189 qml/Stage/Spread/SpreadMaths.qml+78 qml/Stage/Spread/StagedRightEdgeMaths.qml+174 qml/Stage/Spread/WindowedRightEdgeMaths.qml+96 qml/Stage/Spread/cubic-bezier.js+39 qml/Stage/Stage.qml+2241 qml/Stage/StageMaths.qml+93 qml/Stage/StagedFullscreenPolicy.qml+50 qml/Stage/SurfaceContainer.qml+108 qml/Stage/TabletSideStageTouchGesture.qml+157 qml/Stage/WindowControlsOverlay.qml+254 qml/Stage/WindowDecoration.qml+163 qml/Stage/WindowInfoItem.qml+69 qml/Stage/WindowResizeArea.qml+300 qml/Stage/WindowStateSaver.qml+64 qml/Stage/WindowedFullscreenPolicy.qml+31 qml/Stage/graphics/PageHeaderBaseDividerBottom@18.png qml/Stage/graphics/PageHeaderBaseDividerLight@18.png qml/Stage/graphics/PageHeaderBaseDividerLight@18.sci+5 qml/Stage/graphics/arrows-centre.png qml/Stage/graphics/arrows.png qml/Stage/graphics/sidestage_drag.svg+207 qml/Stage/graphics/sidestage_handle@20.png SideStage/graphics/sidestage_handle@20.sci → qml/Stage/graphics/sidestage_handle@20.sci qml/Stage/graphics/sidestage_open.svg+181 qml/Stage/graphics/window-close.svg+64 qml/Tutorial/InactivityTimer.qml+78 qml/Tutorial/Tutorial.qml+105 qml/Tutorial/TutorialContent.qml+225 qml/Tutorial/TutorialLeft.qml+54 qml/Tutorial/TutorialLeftLong.qml+56 qml/Tutorial/TutorialPage.qml+121 qml/Tutorial/TutorialRight.qml+61 qml/Tutorial/TutorialTop.qml+60 qml/Tutorial/graphics/arrow.svg+19 qml/Tutorial/graphics/background1.png qml/Tutorial/graphics/background2.png qml/Wizard/CheckableSetting.qml+92 qml/Wizard/Components/InputMethod.qml+113 qml/Wizard/Page.qml+340 qml/Wizard/Pages.qml+269 qml/Wizard/Pages/10-welcome-update.qml+137 qml/Wizard/Pages/10-welcome.qml+197 qml/Wizard/Pages/11-changelog.qml+95 qml/Wizard/Pages/20-keyboard.qml+161 qml/Wizard/Pages/30-wifi.qml+219 qml/Wizard/Pages/50-timezone.qml+278 qml/Wizard/Pages/60-account.qml+76 qml/Wizard/Pages/70-passwd-type.qml+168 qml/Wizard/Pages/78-firmware-update.qml.disabled+246 qml/Wizard/Pages/79-system-update.qml+148 qml/Wizard/Pages/80-finished.qml+137 qml/Wizard/Pages/data/Desktop_header_bkg.png qml/Wizard/Pages/data/Desktop_splash_screen_bkg.png qml/Wizard/Pages/data/Phone_header_bkg.png qml/Wizard/Pages/data/Phone_splash_screen_bkg.png qml/Wizard/Pages/data/Tick@30.png qml/Wizard/Pages/data/timezonemap/map.png qml/Wizard/Pages/data/timezonemap/pin.png qml/Wizard/Pages/data/timezonemap/timezone_-1.png qml/Wizard/Pages/data/timezonemap/timezone_-10.png qml/Wizard/Pages/data/timezonemap/timezone_-11.png qml/Wizard/Pages/data/timezonemap/timezone_-2.png qml/Wizard/Pages/data/timezonemap/timezone_-3.5.png qml/Wizard/Pages/data/timezonemap/timezone_-3.png qml/Wizard/Pages/data/timezonemap/timezone_-4.5.png qml/Wizard/Pages/data/timezonemap/timezone_-4.png qml/Wizard/Pages/data/timezonemap/timezone_-5.png qml/Wizard/Pages/data/timezonemap/timezone_-6.png qml/Wizard/Pages/data/timezonemap/timezone_-7.png qml/Wizard/Pages/data/timezonemap/timezone_-8.png qml/Wizard/Pages/data/timezonemap/timezone_-9.5.png qml/Wizard/Pages/data/timezonemap/timezone_-9.png qml/Wizard/Pages/data/timezonemap/timezone_0.png qml/Wizard/Pages/data/timezonemap/timezone_1.png qml/Wizard/Pages/data/timezonemap/timezone_10.5.png qml/Wizard/Pages/data/timezonemap/timezone_10.png qml/Wizard/Pages/data/timezonemap/timezone_11.png qml/Wizard/Pages/data/timezonemap/timezone_12.75.png qml/Wizard/Pages/data/timezonemap/timezone_12.png qml/Wizard/Pages/data/timezonemap/timezone_13.png qml/Wizard/Pages/data/timezonemap/timezone_2.png qml/Wizard/Pages/data/timezonemap/timezone_3.5.png qml/Wizard/Pages/data/timezonemap/timezone_3.png qml/Wizard/Pages/data/timezonemap/timezone_4.5.png qml/Wizard/Pages/data/timezonemap/timezone_4.png qml/Wizard/Pages/data/timezonemap/timezone_5.5.png qml/Wizard/Pages/data/timezonemap/timezone_5.75.png qml/Wizard/Pages/data/timezonemap/timezone_5.png qml/Wizard/Pages/data/timezonemap/timezone_6.5.png qml/Wizard/Pages/data/timezonemap/timezone_6.png qml/Wizard/Pages/data/timezonemap/timezone_7.png qml/Wizard/Pages/data/timezonemap/timezone_8.5.png qml/Wizard/Pages/data/timezonemap/timezone_8.png qml/Wizard/Pages/data/timezonemap/timezone_9.5.png qml/Wizard/Pages/data/timezonemap/timezone_9.png qml/Wizard/Pages/passcode-confirm.qml+69 qml/Wizard/Pages/passcode-desktop.qml+159 qml/Wizard/Pages/passcode-set.qml+78 qml/Wizard/Pages/password-set.qml+158 qml/Wizard/Pages/sim.qml+108 qml/Wizard/PasswordMeter.qml+108 qml/Wizard/StackButton.qml+42 qml/Wizard/Wizard.qml+58 qml/Wizard/WizardItemSelector.qml+129 qml/Wizard/WizardTextField.qml+25 qml/graphics/dropshadow2gu@30.png qml/graphics/dropshadow2gu@30.sci+5 qml/graphics/dropshadow_left@20.png qml/graphics/dropshadow_right@20.png run−73 run_on_device−146 runtests.sh+5−14 src/ApplicationArguments.cpp+22 src/ApplicationArguments.h+58 src/CMakeLists.txt+64 src/CachingNetworkManagerFactory.cpp+54 src/CachingNetworkManagerFactory.h+47 src/DebuggingController.cpp+92 src/DebuggingController.h+57 src/MouseTouchAdaptor.cpp+419 MouseTouchAdaptor.h → src/MouseTouchAdaptor.h+32−12 src/SecondaryWindow.cpp+40 src/SecondaryWindow.h+30 src/ShellApplication.cpp+231 src/ShellApplication.h+61 src/ShellView.cpp+85 src/ShellView.h+34 src/UnityCommandLineParser.cpp+130 src/UnityCommandLineParser.h+60 src/UnixSignalHandler.cpp+139 src/UnixSignalHandler.h+54 src/libunity8-private/CMakeLists.txt+27 src/libunity8-private/abstractdbusservicemonitor.cpp+100 src/libunity8-private/abstractdbusservicemonitor.h+70 src/libunity8-private/unitydbusobject.cpp+86 src/libunity8-private/unitydbusobject.h+46 src/libunity8-private/unitydbusvirtualobject.cpp+83 src/libunity8-private/unitydbusvirtualobject.h+47 src/main.cpp+67 Dash/Video/VideosCarousel.qml → src/qmldebuggerutils.h+14−15 tests/CMakeLists.txt+149−10 tests/autopilot/indicators_client/__init__.py−8 tests/autopilot/indicators_client/emulators/__init__.py−31 tests/autopilot/indicators_client/emulators/common.py−14 tests/autopilot/indicators_client/emulators/main_window.py−29 tests/autopilot/indicators_client/tests/__init__.py−69 tests/autopilot/indicators_client/tests/test_power.py−96 tests/autopilot/setup.py+32 tests/autopilot/unity8/__init__.py+146−5 tests/autopilot/unity8/application_lifecycle/__init__.py+20 tests/autopilot/unity8/application_lifecycle/tests/__init__.py+49 tests/autopilot/unity8/application_lifecycle/tests/test_application_lifecycle.py+141 tests/autopilot/unity8/application_lifecycle/tests/test_url_dispatcher.py+51 tests/autopilot/unity8/emulators/__init__.py−6 tests/autopilot/unity8/emulators/main_window.py−61 tests/autopilot/unity8/fixture_setup.py+329 tests/autopilot/unity8/greeter/__init__.py+97 tests/autopilot/unity8/greeter/tests/__init__.py+28 tests/autopilot/unity8/greeter/tests/test_args.py+49 tests/autopilot/unity8/indicators/__init__.py+203 tests/autopilot/unity8/indicators/tests/__init__.py+42 tests/autopilot/unity8/indicators/tests/test_action_latency.py+237 tests/autopilot/unity8/indicators/tests/test_display_indicator.py+52 tests/autopilot/unity8/indicators/tests/test_indicators.py+88 tests/autopilot/unity8/launcher.py+66 tests/autopilot/unity8/process_helpers.py+191 tests/autopilot/unity8/sensors.py+93 tests/autopilot/unity8/shell/__init__.py+265 tests/autopilot/unity8/shell/create_interactive_notification.py+101 tests/autopilot/unity8/shell/emulators.py+50 tests/autopilot/unity8/shell/fixture_setup.py+65 tests/autopilot/unity8/shell/tests/__init__.py+374 tests/autopilot/unity8/shell/tests/test_helpers.py+44 tests/autopilot/unity8/shell/tests/test_lock_screen.py+150 tests/autopilot/unity8/shell/tests/test_notifications.py+725 tests/autopilot/unity8/shell/tests/test_rotation.py+113 tests/autopilot/unity8/shell/tests/test_system_integration.py+48 tests/autopilot/unity8/shell/tests/test_upstart.py+137 tests/autopilot/unity8/tests/__init__.py−79 tests/autopilot/unity8/tests/helpers.py−160 tests/autopilot/unity8/tests/testbigscreen.py−25 tests/autopilot/unity8/tests/testhud.py−145 tests/autopilot/unity8/tests/testlockscreen.py−118 tests/copyright/CMakeLists.txt+1−1 tests/copyright/check_copyright.sh+35−4 tests/data/unity/backgrounds/20x30.png tests/data/unity/backgrounds/black.png tests/data/unity/backgrounds/blue.png tests/data/unity/backgrounds/red.png tests/data/unity/indicators/com.canonical.indicator.fake1+5−4 tests/data/unity/indicators/com.canonical.indicator.fake2+5−4 tests/data/unity/indicators/com.canonical.indicator.fake3+5−4 tests/data/unity/indicators/com.canonical.indicator.fake4+5−4 tests/graphics/applicationIcons/browser@18.png tests/graphics/applicationIcons/calendar@18.png tests/graphics/applicationIcons/camera@18.png tests/graphics/applicationIcons/contacts-app@18.png tests/graphics/applicationIcons/dash@18.png tests/graphics/applicationIcons/dialer-app@18.png tests/graphics/applicationIcons/evernote@18.png tests/graphics/applicationIcons/facebook@18.png tests/graphics/applicationIcons/gallery@18.png tests/graphics/applicationIcons/gmail@18.png tests/graphics/applicationIcons/libreoffice@18.png tests/graphics/applicationIcons/map@18.png tests/graphics/applicationIcons/messages-app@18.png tests/graphics/applicationIcons/notepad@18.png tests/graphics/applicationIcons/pinterest@18.png tests/graphics/applicationIcons/soundcloud@18.png tests/graphics/applicationIcons/system-settings@18.png tests/graphics/applicationIcons/twitter@18.png tests/graphics/applicationIcons/weather@18.png tests/graphics/applicationIcons/wikipedia@18.png tests/graphics/applicationIcons/youtube@18.png tests/graphics/avatars/amanda@12.png tests/graphics/avatars/anna_olsson@12.png tests/graphics/avatars/funky@12.png graphics/clock@18.png → tests/graphics/clock@18.png tests/graphics/screenshots/gallery@12.png tests/imports/CMakeLists.txt+5 tests/imports/check_imports.py+183 tests/mocks/AccountsService/AccountsService.cpp+214 tests/mocks/AccountsService/AccountsService.h+148 tests/mocks/AccountsService/CMakeLists.txt+24 tests/mocks/AccountsService/plugin.cpp+37 tests/mocks/AccountsService/plugin.h+35 tests/mocks/AccountsService/qmldir+3 tests/mocks/Biometryd/CMakeLists.txt+14 tests/mocks/Biometryd/MockBiometryd.cpp+43 tests/mocks/Biometryd/MockBiometryd.h+50 tests/mocks/Biometryd/MockDevice.cpp+29 tests/mocks/Biometryd/MockDevice.h+40 tests/mocks/Biometryd/MockIdentifier.cpp+28 tests/mocks/Biometryd/MockIdentifier.h+36 Dash/People/Preview/Base.qml → tests/mocks/Biometryd/MockObserver.cpp+5−5 tests/mocks/Biometryd/MockObserver.h+37 tests/mocks/Biometryd/MockOperation.cpp+56 tests/mocks/Biometryd/MockOperation.h+47 tests/mocks/Biometryd/plugin.cpp+41 tests/mocks/Biometryd/plugin.h+31 tests/mocks/Biometryd/qmldir+3 tests/mocks/CMakeLists.txt+52−1 tests/mocks/Cursor/CMakeLists.txt+1 tests/mocks/Cursor/Cursor.qml+34 tests/mocks/Cursor/qmldir+2 tests/mocks/GSettings.1.0/CMakeLists.txt+19 tests/mocks/GSettings.1.0/fake_gsettings.cpp+417 tests/mocks/GSettings.1.0/fake_gsettings.h+180 plugins/Unity/categoryfilter.cpp → tests/mocks/GSettings.1.0/plugin.cpp+10−22 plugins/HudClient/plugin.h → tests/mocks/GSettings.1.0/plugin.h+5−5 tests/mocks/GSettings.1.0/qmldir+3 tests/mocks/LightDM/CMakeLists.txt−52 tests/mocks/LightDM/InfographicModel.cpp−416 tests/mocks/LightDM/InfographicModelPrivate.h−99 tests/mocks/LightDM/QLightDM/Greeter−1 tests/mocks/LightDM/QLightDM/InfographicModel−1 tests/mocks/LightDM/QLightDM/UsersModel−1 tests/mocks/LightDM/demo/CMakeLists.txt−13 tests/mocks/LightDM/demo/InfographicModelPrivate.cpp−98 tests/mocks/LightDM/full/CMakeLists.txt−20 tests/mocks/LightDM/full/InfographicModelPrivate.cpp−182 tests/mocks/LightDM/full/UsersModelPrivate.cpp−52 tests/mocks/LightDM/single-passphrase/CMakeLists.txt−21 tests/mocks/LightDM/single-passphrase/GreeterPrivate.cpp−53 tests/mocks/LightDM/single-passphrase/InfographicModelPrivate.cpp−61 tests/mocks/LightDM/single-pin/CMakeLists.txt−21 tests/mocks/LightDM/single-pin/GreeterPrivate.cpp−53 tests/mocks/LightDM/single-pin/InfographicModelPrivate.cpp−61 tests/mocks/LightDM/single/CMakeLists.txt−20 tests/mocks/LightDMController/CMakeLists.txt+14 tests/mocks/LightDMController/plugin.cpp+35 tests/qmltests/plugins/HudClient/fake_hud_plugin.h → tests/mocks/LightDMController/plugin.h+6−8 tests/mocks/LightDMController/qmldir+2 tests/mocks/Lights/CMakeLists.txt+8 tests/mocks/Lights/Lights.cpp+84 tests/mocks/Lights/Lights.h+66 plugins/LightDM/InfographicModel.h → tests/mocks/Lights/plugin.cpp+14−8 tests/mocks/Lights/plugin.h+32 tests/mocks/Lights/qmldir+3 tests/mocks/MeeGo/CMakeLists.txt+1 tests/mocks/MeeGo/QOfono/CMakeLists.txt+11 tests/mocks/MeeGo/QOfono/MockOfonoSimManager.qml+53 tests/mocks/MeeGo/QOfono/MockQOfono.cpp+90 tests/mocks/MeeGo/QOfono/MockQOfono.h+61 tests/mocks/MeeGo/QOfono/MockQOfonoManager.cpp+66 tests/mocks/MeeGo/QOfono/MockQOfonoManager.h+49 tests/mocks/MeeGo/QOfono/plugin.cpp+35 tests/mocks/MeeGo/QOfono/plugin.h+31 tests/mocks/MeeGo/QOfono/qmldir+3 tests/mocks/Powerd/CMakeLists.txt+10 tests/mocks/LightDM/single-passphrase/UsersModelPrivate.cpp → tests/mocks/Powerd/Powerd.cpp+13−8 tests/mocks/Powerd/Powerd.h+58 tests/mocks/Powerd/plugin.cpp+35 tests/mocks/Powerd/plugin.h+34 tests/mocks/Powerd/qmldir+3 tests/mocks/QMenuModel/CMakeLists.txt+25 tests/mocks/QMenuModel/QDBusActionGroup.qml+52 tests/mocks/LightDM/demo/UsersModelPrivate.cpp → tests/mocks/QMenuModel/UnityMenuAction.qml+10−13 tests/mocks/QMenuModel/actiondata.h+54 Panel/PanelBackground.qml → tests/mocks/QMenuModel/actionstateparser.cpp+3−5 tests/mocks/QMenuModel/actionstateparser.h+35 modules/Unity/Indicators/qml/messaging/TextMessage.qml → tests/mocks/QMenuModel/dbus-enums.h+31−12 tests/mocks/QMenuModel/plugin.cpp+43 tests/mocks/QMenuModel/plugin.h+34 tests/mocks/QMenuModel/qmldir+6 tests/mocks/QMenuModel/unitymenumodel.cpp+310 tests/mocks/QMenuModel/unitymenumodel.h+115 tests/mocks/QtMultimedia/CMakeLists.txt+15 tests/mocks/QtMultimedia/VideoSurface.qml+111 tests/mocks/QtMultimedia/declarativeplaylist.cpp+73 tests/mocks/QtMultimedia/declarativeplaylist.h+54 tests/mocks/QtMultimedia/mediaplayer.cpp+319 tests/mocks/QtMultimedia/mediaplayer.h+224 tests/mocks/QtMultimedia/plugin.cpp+35 tests/mocks/QtMultimedia/plugin.h+34 tests/mocks/QtMultimedia/qmldir+3 tests/mocks/QtMultimedia/videooutput.cpp+127 tests/mocks/QtMultimedia/videooutput.h+52 tests/mocks/SessionBroadcast/CMakeLists.txt+8 plugins/Unity/bottombarvisibilitycommunicatorshell.cpp → tests/mocks/SessionBroadcast/SessionBroadcast.cpp+10−11 tests/mocks/SessionBroadcast/SessionBroadcast.h+39 plugins/HudClient/plugin.cpp → tests/mocks/SessionBroadcast/plugin.cpp+10−15 tests/mocks/SessionBroadcast/plugin.h+32 tests/mocks/SessionBroadcast/qmldir+2 tests/mocks/UInput/CMakeLists.txt+7 tests/mocks/UInput/mockuinput.cpp+73 tests/mocks/UInput/mockuinput.h+63 tests/mocks/UInput/plugin.cpp+26 tests/mocks/UInput/plugin.h+32 tests/mocks/UInput/qmldir+2 tests/mocks/Ubuntu/Application/ApplicationImage.cpp−123 tests/mocks/Ubuntu/Application/ApplicationImage.h−79 tests/mocks/Ubuntu/Application/ApplicationInfo.cpp−91 tests/mocks/Ubuntu/Application/ApplicationInfo.h−103 tests/mocks/Ubuntu/Application/ApplicationManager.cpp−449 tests/mocks/Ubuntu/Application/ApplicationManager.h−123 tests/mocks/Ubuntu/Application/CMakeLists.txt−35 tests/mocks/Ubuntu/Application/plugin.cpp−38 tests/mocks/Ubuntu/Application/qmldir−3 tests/mocks/Ubuntu/CMakeLists.txt+6−1 tests/mocks/Ubuntu/Connectivity/CMakeLists.txt+10 tests/mocks/Ubuntu/Connectivity/networking-status.cpp+70 tests/mocks/Ubuntu/Connectivity/networking-status.h+74 tests/mocks/Ubuntu/Connectivity/plugin.cpp+47 tests/mocks/Ubuntu/Connectivity/plugin.h+35 tests/mocks/Ubuntu/Connectivity/qmldir+2 tests/mocks/Ubuntu/DownloadDaemonListener/CMakeLists.txt+10 tests/mocks/Ubuntu/DownloadDaemonListener/MockDownloadTracker.cpp+74 tests/mocks/Ubuntu/DownloadDaemonListener/MockDownloadTracker.h+67 Components/Math.js → tests/mocks/Ubuntu/DownloadDaemonListener/plugin.cpp+9−8 tests/mocks/Ubuntu/Application/plugin.h → tests/mocks/Ubuntu/DownloadDaemonListener/plugin.h+2−2 tests/mocks/Ubuntu/DownloadDaemonListener/qmldir+3 tests/mocks/Ubuntu/SystemSettings/CMakeLists.txt+5 tests/mocks/Ubuntu/SystemSettings/Diagnostics/CMakeLists.txt+1 tests/mocks/Ubuntu/SystemSettings/Diagnostics/MockDiagnostics.qml+24 tests/mocks/Ubuntu/SystemSettings/Diagnostics/qmldir+2 tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/CMakeLists.txt+1 tests/qmltests/plugins/Dee/DeeVariantText.qml → tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/MockKeyboardPlugin.qml+3−4 tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/MockLanguagePlugin.qml+24 tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/qmldir+3 tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/CMakeLists.txt+10 plugins/Utils/ubuntuwindow.cpp → tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/MockSecurityPrivacy.cpp+10−11 tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/MockSecurityPrivacy.h+50 modules/Unity/Indicators/Network/plugin.cpp → tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/plugin.cpp+6−11 tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/plugin.h+31 tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/qmldir+2 tests/mocks/Ubuntu/SystemSettings/TimeDate/CMakeLists.txt+1 Components/ListItems/ThinDivider.qml → tests/mocks/Ubuntu/SystemSettings/TimeDate/MockTimeDate.qml+18−12 tests/mocks/Ubuntu/SystemSettings/TimeDate/qmldir+2 tests/mocks/Ubuntu/SystemSettings/Update/CMakeLists.txt+1 tests/mocks/Ubuntu/SystemSettings/Update/MockSystemImage.qml+30 tests/mocks/Ubuntu/SystemSettings/Update/qmldir+2 tests/mocks/Ubuntu/Telephony/CMakeLists.txt+14 tests/mocks/Ubuntu/Telephony/ContactWatcherData.cpp+43 plugins/Utils/ubuntuwindow.h → tests/mocks/Ubuntu/Telephony/ContactWatcherData.h+18−14 tests/mocks/Ubuntu/Telephony/MockCallEntry.cpp+91 tests/mocks/Ubuntu/Telephony/MockCallEntry.h+65 tests/mocks/Ubuntu/Telephony/MockCallManager.cpp+80 tests/mocks/Ubuntu/Telephony/MockCallManager.h+60 tests/mocks/Ubuntu/Telephony/MockContactWatcher.cpp+50 tests/mocks/Ubuntu/Telephony/MockContactWatcher.h+49 tests/mocks/Ubuntu/Telephony/MockTelepathyHelper.cpp+62 tests/mocks/Ubuntu/Telephony/MockTelepathyHelper.h+58 tests/mocks/Ubuntu/Telephony/plugin.cpp+52 tests/mocks/Ubuntu/Telephony/plugin.h+37 tests/mocks/Ubuntu/Telephony/qmldir+2 tests/mocks/Ubuntu/Thumbnailer/CMakeLists.txt+1 tests/mocks/Ubuntu/Thumbnailer/qmldir+4 tests/mocks/Ubuntu/Web/CMakeLists.txt+1 tests/qmltests/Dash/qml/fake_lensView2.qml → tests/mocks/Ubuntu/Web/WebView.qml+7−6 tests/mocks/Ubuntu/Web/qmldir+4 tests/mocks/Unity/Application/ApplicationInfo.cpp+420 tests/mocks/Unity/Application/ApplicationInfo.h+158 tests/mocks/Ubuntu/Application/ApplicationListModel.cpp → tests/mocks/Unity/Application/ApplicationListModel.cpp tests/mocks/Ubuntu/Application/ApplicationListModel.h → tests/mocks/Unity/Application/ApplicationListModel.h tests/mocks/Unity/Application/ApplicationManager.cpp+569 tests/mocks/Unity/Application/ApplicationManager.h+117 tests/mocks/Unity/Application/CMakeLists.txt+35 tests/mocks/Unity/Application/MirMock.cpp+62 tests/mocks/Unity/Application/MirMock.h+43 tests/mocks/Unity/Application/MirSurface.cpp+559 tests/mocks/Unity/Application/MirSurface.h+237 tests/mocks/Unity/Application/MirSurfaceItem.cpp+415 tests/mocks/Unity/Application/MirSurfaceItem.h+138 tests/mocks/Unity/Application/MirSurfaceListModel.cpp+136 tests/mocks/Unity/Application/MirSurfaceListModel.h+54 tests/mocks/Unity/Application/ObjectListModel.h+108 tests/mocks/Unity/Application/SurfaceManager.cpp+281 tests/mocks/Unity/Application/SurfaceManager.h+116 tests/mocks/Unity/Application/VirtualKeyboard.cpp+58 tests/mocks/Unity/Application/VirtualKeyboard.h+37 tests/mocks/Unity/Application/plugin.cpp+68 tests/mocks/Unity/Application/plugin.h+31 tests/mocks/Unity/Application/qmldir+3 tests/mocks/Unity/Application/resources/Kate.qml+49 tests/mocks/Unity/Application/resources/KateDialog.qml+48 tests/plugins/Ubuntu/Gestures/edgeDragExample.qml → tests/mocks/Unity/Application/resources/KateMenu.qml+17−16 tests/mocks/Unity/Application/resources/MirSurfaceItem.qml+126 tests/mocks/Unity/Application/resources/VirtualKeyboard.qml+41 tests/mocks/Unity/Application/resources/screenshots/browser@12.png tests/mocks/Unity/Application/resources/screenshots/camera@12.png tests/mocks/Unity/Application/resources/screenshots/dialer@12.png tests/mocks/Unity/Application/resources/screenshots/facebook@12.png tests/mocks/Unity/Application/resources/screenshots/gallery@12.png tests/mocks/Unity/Application/resources/screenshots/gmail-webapp.svg+343 tests/mocks/Unity/Application/resources/screenshots/libreoffice@12.png tests/mocks/Unity/Application/resources/screenshots/map@12.png tests/mocks/Unity/Application/resources/screenshots/music@12.png tests/mocks/Unity/Application/resources/screenshots/twitter@12.png tests/mocks/Unity/Application/resources/screenshots/ubuntu-weather-app.svg+201 tests/mocks/Unity/Application/resources/screenshots/unity8-dash@12.png tests/mocks/Unity/Application/resources/screenshots/vkb_portrait.png tests/mocks/Unity/Application/resources/surfaces.qrc+23 tests/mocks/Unity/Application/resources/vkb_portrait.png tests/mocks/Unity/ApplicationMenu/CMakeLists.txt+18 tests/mocks/Unity/ApplicationMenu/mockapplicationmenuregistry.cpp+47 tests/mocks/Unity/ApplicationMenu/mockapplicationmenuregistry.h+41 tests/mocks/Unity/ApplicationMenu/plugin.cpp+42 tests/mocks/Unity/ApplicationMenu/plugin.h+32 tests/mocks/Unity/ApplicationMenu/qmldir+3 tests/mocks/Unity/CMakeLists.txt+9 tests/mocks/Unity/Connectivity/CMakeLists.txt+10 tests/qmltests/Dash/qml/fake_lensView1.qml → tests/mocks/Unity/Connectivity/MockConnectivity.cpp+9−6 tests/mocks/Unity/Connectivity/MockConnectivity.h+36 tests/mocks/Unity/Connectivity/plugin.cpp+34 tests/mocks/Unity/Connectivity/plugin.h+31 tests/mocks/Unity/Connectivity/qmldir+3 tests/mocks/Unity/Indicators/ActionRootState.qml+46 tests/mocks/Unity/Indicators/CMakeLists.txt+39 tests/mocks/Unity/Indicators/IndicatorsModel.qml+261 tests/mocks/Unity/Indicators/ModelActionRootState.qml+81 tests/mocks/Unity/Indicators/fakeindicatorsmodel.cpp+157 tests/mocks/Unity/Indicators/fakeindicatorsmodel.h+70 tests/mocks/Unity/Indicators/fakeindicatorsmodeldata.js+1328 tests/mocks/Unity/Indicators/fakeplugin.cpp+64 tests/qmltests/modules/Unity/Indicators/plugin.h → tests/mocks/Unity/Indicators/fakeplugin.h+1−1 tests/mocks/Unity/Indicators/fakeunitymenumodelcache.cpp+59 tests/mocks/Unity/Indicators/fakeunitymenumodelcache.h+45 tests/mocks/Unity/Indicators/qmldir+7 tests/mocks/Unity/InputInfo/CMakeLists.txt+31 modules/Unity/Indicators/qml/SwitchMenu.qml → tests/mocks/Unity/InputInfo/mockcontroller.cpp+14−19 tests/mocks/Unity/InputInfo/mockcontroller.h+34 tests/mocks/Unity/InputInfo/plugin.cpp+46 tests/mocks/Unity/InputInfo/plugin.h+30 tests/mocks/Unity/InputInfo/qinputdeviceinfo_mock.cpp+56 tests/mocks/Unity/InputInfo/qinputdeviceinfo_mock_p.h+58 tests/mocks/Unity/InputInfo/qmldir+2 tests/mocks/Unity/Launcher/CMakeLists.txt+24 tests/mocks/Unity/Launcher/MockAppDrawerModel.cpp+98 tests/mocks/Unity/Launcher/MockAppDrawerModel.h+43 tests/mocks/Unity/Launcher/MockLauncherItem.cpp+228 tests/mocks/Unity/Launcher/MockLauncherItem.h+91 tests/mocks/Unity/Launcher/MockLauncherModel.cpp+301 tests/mocks/Unity/Launcher/MockLauncherModel.h+72 tests/mocks/Unity/Launcher/MockQuickListModel.cpp+52 tests/mocks/Unity/Launcher/MockQuickListModel.h+40 tests/mocks/Unity/Launcher/plugin.cpp+52 tests/mocks/Unity/Launcher/plugin.h+35 tests/mocks/Unity/Launcher/qmldir+3 tests/mocks/Unity/Notifications/CMakeLists.txt+16 tests/mocks/Unity/Notifications/MockActionModel.cpp+74 tests/mocks/Unity/Notifications/MockActionModel.h+53 tests/mocks/Unity/Notifications/MockNotification.cpp+198 tests/mocks/Unity/Notifications/MockNotification.h+101 tests/mocks/Unity/Notifications/MockNotificationModel.cpp+169 tests/mocks/Unity/Notifications/MockNotificationModel.h+70 Panel/Indicators/MessagingIndicatorPage.qml → tests/mocks/Unity/Notifications/plugin.cpp+13−15 tests/mocks/Unity/Notifications/plugin.h+34 tests/mocks/Unity/Notifications/qmldir+4 tests/mocks/Unity/Platform/CMakeLists.txt+1 tests/qmltests/Dash/qml/fake_generic_lensView.qml → tests/mocks/Unity/Platform/MockPlatform.qml+7−6 tests/mocks/Unity/Platform/qmldir+2 tests/mocks/Unity/Screens/CMakeLists.txt+14 tests/mocks/Unity/Screens/plugin.cpp+29 tests/mocks/Unity/Screens/plugin.h+25 tests/mocks/Unity/Screens/qmldir+2 tests/mocks/Unity/Screens/screens.cpp+71 tests/mocks/Unity/Screens/screens.h+82 tests/mocks/Utils/CMakeLists.txt+61 tests/mocks/Utils/EdgeBarrierSettings.qml+22 tests/mocks/Utils/Style.js+37 Hud/ToolBarIcon.qml → tests/mocks/Utils/URLDispatcher.cpp+17−13 tests/mocks/Utils/URLDispatcher.h+47 SideStage/SidestageHandle.qml → tests/mocks/Utils/WindowInputMonitor.qml+6−5 modules/Unity/Indicators/qml/HLine.qml → tests/mocks/Utils/constants.cpp+10−13 tests/mocks/Utils/constants.h+43 tests/mocks/Utils/plugin.cpp+93 tests/mocks/Utils/plugin.h+32 tests/mocks/Utils/qmldir+6 tests/mocks/Utils/windowstatestorage.cpp+100 tests/mocks/Utils/windowstatestorage.h+77 tests/mocks/Wizard/CMakeLists.txt+20 tests/mocks/Wizard/MockSystem.cpp+64 tests/mocks/Wizard/MockSystem.h+61 tests/mocks/Wizard/mockplugin.cpp+38 tests/mocks/Wizard/mockplugin.h+32 tests/mocks/Wizard/qmldir+3 tests/mocks/data/applications/webbrowser-app.desktop tests/mocks/data/unity/indicators/com.canonical.indicator.mock+10 tests/mocks/indicator-service/CMakeLists.txt+19 tests/mocks/indicator-service/mock-indicator-service.c+325 tests/mocks/liblightdm/CMakeLists.txt+18 tests/mocks/LightDM/full/GreeterPrivate.cpp → tests/mocks/liblightdm/GreeterPrivate.cpp+44−10 tests/mocks/liblightdm/GreeterPrivate.h+54 tests/mocks/liblightdm/MockController.cpp+192 tests/mocks/liblightdm/MockController.h+106 tests/mocks/liblightdm/MockGreeter.cpp+316 tests/mocks/liblightdm/MockGreeter.h+102 tests/mocks/liblightdm/MockSessionsModel.cpp+118 tests/mocks/liblightdm/MockSessionsModel.h+64 tests/mocks/liblightdm/MockUsersModel.cpp+220 tests/mocks/liblightdm/MockUsersModel.h+61 tests/mocks/liblightdm/SessionsModelPrivate.cpp+83 tests/mocks/liblightdm/SessionsModelPrivate.h+63 tests/mocks/liblightdm/UsersModelPrivate.cpp+124 tests/mocks/LightDM/UsersModelPrivate.h → tests/mocks/liblightdm/UsersModelPrivate.h+8−3 tests/mocks/liblightdm/demo/CMakeLists.txt+21 tests/mocks/LightDM/demo/GreeterPrivate.cpp → tests/mocks/liblightdm/demo/GreeterPrivate.cpp+6−2 tests/mocks/LightDM/single-pin/UsersModelPrivate.cpp → tests/mocks/liblightdm/demo/UsersModelPrivate.cpp+11−3 tests/mocks/LightDM/qmldir → tests/mocks/liblightdm/qmldir+1 tests/mocks/libusermetrics/CMakeLists.txt+22 tests/mocks/libusermetrics/ColorTheme.cpp+132 tests/mocks/libusermetrics/ColorTheme.h+69 tests/mocks/libusermetrics/UserMetrics.cpp+499 tests/mocks/LightDM/InfographicModel.h → tests/mocks/libusermetrics/UserMetrics.h+24−60 tests/modules/CMakeLists.txt−1 tests/modules/Unity/CMakeLists.txt−1 tests/modules/Unity/Indicators/CMakeLists.txt−27 tests/modules/Unity/Indicators/indicatorsmodeltest.cpp−101 tests/plugins/AccountsService/AccountsServer.cpp+57 tests/plugins/AccountsService/AccountsServer.h+44 tests/plugins/AccountsService/CMakeLists.txt+67 tests/plugins/AccountsService/PropertiesServer.cpp+142 tests/plugins/AccountsService/PropertiesServer.h+58 tests/plugins/AccountsService/UscServer.cpp+28 tests/plugins/AccountsService/UscServer.h+39 tests/plugins/AccountsService/client.cpp+355 tests/plugins/AccountsService/interfaces.xml+70 tests/plugins/AccountsService/server.cpp+57 tests/plugins/AccountsService/types.h+25 tests/plugins/CMakeLists.txt+10−1 tests/plugins/Cursor/CMakeLists.txt+8 tests/plugins/Cursor/TextEntry.qml+34 tests/plugins/Cursor/tst_Cursor.qml+151 tests/plugins/GlobalShortcut/CMakeLists.txt+19 tests/plugins/GlobalShortcut/GlobalShortcutTest.cpp+78 tests/plugins/GlobalShortcut/shortcut.qml+39 modules/CMakeLists.txt → tests/plugins/Greeter/CMakeLists.txt tests/plugins/Greeter/Unity/CMakeLists.txt+1 tests/plugins/Greeter/Unity/Launcher/CMakeLists.txt+42 tests/plugins/Greeter/Unity/Launcher/launchermodelastest.cpp+240 tests/plugins/LightDM/CMakeLists.txt+1 tests/plugins/LightDM/IntegratedLightDM/CMakeLists.txt+157 tests/plugins/LightDM/IntegratedLightDM/dbus.cpp+223 Components/BaseCarouselDelegate.qml → tests/plugins/LightDM/IntegratedLightDM/greeter.qml+4−5 tests/plugins/LightDM/IntegratedLightDM/integrated.cpp+88 tests/plugins/LightDM/IntegratedLightDM/pam.cpp+54 tests/plugins/LightDM/IntegratedLightDM/promptsmodel.cpp+175 tests/plugins/LightDM/IntegratedLightDM/sessionsmodel.cpp+134 tests/plugins/LightDM/IntegratedLightDM/usersmodel.cpp+168 tests/plugins/SessionBroadcast/BroadcastServer.cpp+33 tests/plugins/SessionBroadcast/BroadcastServer.h+40 tests/plugins/SessionBroadcast/CMakeLists.txt+51 tests/plugins/SessionBroadcast/interfaces.xml+18 tests/plugins/SessionBroadcast/server.cpp+37 tests/plugins/SessionBroadcast/sessionbroadcasttest.cpp+111 tests/plugins/Ubuntu/Gestures/CMakeLists.txt+52−37 tests/plugins/Ubuntu/Gestures/DownwardsLauncher.qml−87 tests/plugins/Ubuntu/Gestures/GestureTest.cpp+193 tests/plugins/Ubuntu/Gestures/GestureTest.h+102 tests/plugins/Ubuntu/Gestures/LeftwardsLauncher.qml−90 tests/plugins/Ubuntu/Gestures/RightwardsLauncher.qml−87 tests/plugins/Ubuntu/Gestures/TestItem.cpp+30 tests/plugins/Ubuntu/Gestures/TestItem.h+33 tests/plugins/Ubuntu/Gestures/UpwardsLauncher.qml−90 tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget2.qml → tests/plugins/Ubuntu/Gestures/empty.qml+5−6 tests/plugins/Ubuntu/Gestures/touchGateExample.qml+27 tests/plugins/Ubuntu/Gestures/tst_AxisVelocityCalculator.cpp+41−29 tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cpp−463 tests/plugins/Ubuntu/Gestures/tst_FloatingFlickable.cpp+131 tests/plugins/Ubuntu/Gestures/tst_FloatingFlickable.qml+81 tests/plugins/Ubuntu/Gestures/tst_PressedOutsideNotifier.cpp+150 tests/plugins/Ubuntu/Gestures/tst_PressedOutsideNotifier.qml+62 tests/plugins/Ubuntu/Gestures/tst_TouchDispatcher.cpp+148 tests/plugins/Ubuntu/Gestures/tst_TouchGate.cpp+392 tests/plugins/Ubuntu/Gestures/tst_TouchGestureArea.cpp+300 tests/plugins/Ubuntu/Gestures/tst_TouchGestureArea.qml+90 tests/plugins/Unity/CMakeLists.txt+4 tests/plugins/Unity/Indicators/CMakeLists.txt+46 tests/modules/Unity/Indicators/indicatorsmanagertest.cpp → tests/plugins/Unity/Indicators/IndicatorsManagerTest.cpp+56−11 tests/plugins/Unity/Indicators/IndicatorsModelTest.cpp+141 tests/plugins/Unity/Indicators/MenuContentActivatorTest.cpp+303 tests/plugins/Unity/Indicators/RootActionStateTest.cpp+95 tests/plugins/Unity/Indicators/SharedUnityMenuModelTest.cpp+102 tests/plugins/Unity/Indicators/UnityMenuModelStackTest.cpp+201 tests/plugins/Unity/Launcher/CMakeLists.txt+105 tests/plugins/Unity/Launcher/appdrawermodeltest.cpp+68 tests/plugins/Unity/Launcher/applications/abs-icon.desktop+4 tests/plugins/Unity/Launcher/applications/click-icon.desktop+5 tests/plugins/Unity/Launcher/applications/click-icon.svg tests/plugins/Unity/Launcher/applications/no-name.desktop+3 tests/plugins/Unity/Launcher/applications/rel-icon.desktop+4 tests/plugins/Unity/Launcher/applications/rel-icon.svg tests/plugins/Unity/Launcher/gsettings.cpp+45 tests/plugins/Unity/Launcher/gsettings.h+47 tests/plugins/Unity/Launcher/launchermodeltest.cpp+836 tests/plugins/Unity/Launcher/ualwrapper.cpp+58 tests/plugins/Unity/Launcher/ualwrapper.h+55 tests/mocks/LightDM/single/GreeterPrivate.cpp → tests/plugins/Unity/Launcher/xdgwatcher.cpp+17−20 plugins/Unity/categoryfilter.h → tests/plugins/Unity/Launcher/xdgwatcher.h+15−24 tests/plugins/Unity/Platform/CMakeLists.txt+30 tests/plugins/Unity/Platform/platformtest.cpp+142 tests/plugins/Unity/Session/CMakeLists.txt+72 tests/plugins/Unity/Session/LightDMServer.cpp+29 tests/plugins/Unity/Session/LightDMServer.h+38 tests/plugins/Unity/Session/LogindServer.cpp+43 tests/plugins/Unity/Session/LogindServer.h+48 tests/plugins/Unity/Session/interfaces.xml+29 tests/plugins/Unity/Session/preload.c+43 tests/plugins/Unity/Session/server.cpp+50 tests/plugins/Unity/Session/sessionbackendtest.cpp+289 tests/plugins/Utils/CMakeLists.txt+34−19 tests/plugins/Utils/DeviceConfigParserTest.cpp+76 tests/plugins/Utils/modeltest.cpp → tests/plugins/Utils/ModelTest.cpp+25−42 tests/plugins/Utils/modeltest.h → tests/plugins/Utils/ModelTest.h tests/plugins/Utils/qlimitproxymodeltest.cpp → tests/plugins/Utils/QLimitProxyModelTest.cpp+176−36 tests/plugins/Utils/URLDispatcherTest.cpp+78 tests/plugins/Utils/qsortfilterproxymodeltest.cpp → tests/plugins/Utils/UnitySortFilterProxyModelTest.cpp+25−25 tests/plugins/Utils/WindowInputMonitorTest.cpp+461 tests/plugins/Utils/WindowStateStorageTest.cpp+121 tests/plugins/Utils/tst_UtilsStyle.qml+47 tests/plugins/WindowManager/CMakeLists.txt+36 tests/plugins/WindowManager/UnityApplicationMocks.h+211 tests/plugins/WindowManager/tst_TopLevelWindowModel.cpp+193 tests/plugins/Wizard/CMakeLists.txt+24 tests/plugins/Wizard/tst_pagelist.cpp+183 tests/plugins/Wizard/tst_system.cpp+124 tests/qmltests/ApplicationMenuDataLoader.qml+99 tests/qmltests/ApplicationMenus/tst_MenuBar.qml+437 tests/qmltests/ApplicationMenus/tst_MenuPopup.qml+361 tests/qmltests/CMakeLists.txt+72−72 tests/qmltests/Components/CMakeLists.txt+51 tests/qmltests/Components/RevealingRectangle.qml−78 tests/qmltests/Components/tst_AnimationControllerWithSignals.qml−142 tests/qmltests/Components/tst_Background.qml+91 tests/qmltests/Components/tst_Carousel.qml−194 tests/qmltests/Components/tst_CrossFadeImage.qml−125 tests/qmltests/Components/tst_Dialogs.qml+112 tests/qmltests/Components/tst_DragHandle.cpp+504 tests/qmltests/Components/tst_DragHandle.qml+222 tests/qmltests/Components/tst_DragHandle/BidirectionalShowable.qml+69 tests/qmltests/Components/tst_DragHandle/BottomEdgeShowable.qml+108 tests/qmltests/Components/tst_DragHandle/LeftEdgeShowable.qml+100 tests/qmltests/Components/tst_DragHandle/RightEdgeShowable.qml+108 tests/qmltests/Components/tst_DragHandle/SimpleButton.qml+15−14 tests/qmltests/Components/tst_DragHandle/TopEdgeShowable.qml+100 tests/qmltests/Components/tst_DraggingArea.qml+8−8 tests/qmltests/Components/tst_EdgeDragEvaluator.cpp+166 tests/qmltests/Components/tst_EdgeDragEvaluator.qml+9−7 tests/qmltests/Components/tst_FilterGrid.qml−186 tests/qmltests/Components/tst_LazyImage.qml+210 tests/qmltests/Components/tst_LazyImage/ImageControls.qml+67 tests/qmltests/Components/tst_LazyImage/portrait.png tests/qmltests/Components/tst_LazyImage/square.png tests/qmltests/Components/tst_LazyImage/wide.png tests/qmltests/Components/tst_ListViewWithPageHeader.qml−351 tests/qmltests/Components/tst_Lockscreen.qml+474 tests/qmltests/Components/tst_MathLocal.qml−91 tests/qmltests/Components/tst_MediaServices.qml+231 tests/qmltests/Components/tst_ModeSwitchWarningDialog.qml+75 tests/qmltests/Components/tst_OpenEffect.qml−71 tests/qmltests/Components/tst_PageHeader.qml−186 tests/qmltests/Components/tst_PhysicalKeysMapper.qml+174 tests/qmltests/Components/tst_Rating.qml+86 tests/qmltests/Components/tst_RatingStars.qml−62 tests/qmltests/Components/tst_ResponsiveFlowView.qml−192 tests/qmltests/Components/tst_ResponsiveGridView.qml−193 tests/qmltests/Components/tst_Revealer.qml−262 tests/qmltests/Components/tst_SharingPicker.qml+73 tests/qmltests/Components/tst_Showable.qml+43−3 tests/qmltests/Components/tst_Stage.qml−278 tests/qmltests/Components/tst_Stage/FakeApplicationScreenshot.qml−53 tests/qmltests/Components/tst_Tile.qml−71 tests/qmltests/Components/tst_TimeLocal.qml−117 tests/qmltests/Components/tst_VirtualTouchPad.qml+197 tests/qmltests/Components/tst_Wallpaper.qml+118 tests/qmltests/Components/tst_WallpaperResolver.qml+161 tests/qmltests/Components/tst_ZoomableImage.qml+204 tests/qmltests/Dash/Apps/tst_RunningApplicationsGrid.qml−204 tests/qmltests/Dash/People/tst_PeopleFilterGrid.qml−154 tests/qmltests/Dash/qml/FakeLensView.qml−120 tests/qmltests/Dash/qml/fake_lensView3.qml−24 tests/qmltests/Dash/qml/fake_lensView4.qml−24 tests/qmltests/Dash/tst_Dash.qml−133 tests/qmltests/Dash/tst_DashBar.qml−111 tests/qmltests/Dash/tst_DashContent.qml−206 tests/qmltests/Dash/tst_DashPreview.qml−176 tests/qmltests/Dash/tst_FilterGrids.qml−145 tests/qmltests/Dash/tst_GenericLensView.qml−54 tests/qmltests/Dash/tst_LensView.qml−52 tests/qmltests/Dash/tst_PeoplePreview.qml−254 tests/qmltests/EdgeBarrierControls.qml+97 tests/qmltests/Greeter/TestView.qml+101 tests/qmltests/Greeter/tst_Clock.qml+60−43 tests/qmltests/Greeter/tst_Greeter.qml+683 tests/qmltests/Greeter/tst_GreeterView.qml+1366 tests/qmltests/Greeter/tst_Infographics.qml+83−18 tests/qmltests/Greeter/tst_Lockscreen.qml−205 tests/qmltests/Greeter/tst_Phone.qml−67 tests/qmltests/Greeter/tst_Tablet.qml−328 tests/qmltests/Hud/tst_Hud.qml−239 tests/qmltests/Hud/tst_Result.qml−98 tests/qmltests/Launcher/tst_Drawer.qml+520 tests/qmltests/Launcher/tst_Launcher.qml+1578−52 tests/qmltests/Notifications/Notification.qml+13−7 tests/qmltests/Notifications/tst_Notifications.qml+811−271 tests/qmltests/Notifications/tst_OptionToggle.qml+290 tests/qmltests/Notifications/tst_SwipeToAct.qml+326 tests/qmltests/Notifications/tst_VisualSnapDecisionsQueue.qml+232 tests/qmltests/Panel/Indicators/tst_IndicatorItem.qml+205 tests/qmltests/Panel/Indicators/tst_IndicatorMenuItemFactory.qml+828 tests/qmltests/Panel/Indicators/tst_IndicatorsLight.qml+292 tests/qmltests/Panel/Indicators/tst_MessageMenuItemFactory.qml+171 tests/qmltests/Panel/Menus/tst_IndicatorMenuWindow.qml−68 tests/qmltests/Panel/PanelTest.qml+70 tests/qmltests/Panel/PanelUI.qml+286 tests/qmltests/Panel/tst_ActiveCallHint.qml+198 tests/qmltests/Panel/tst_IndicatorItem.qml−67 tests/qmltests/Panel/tst_IndicatorRow.qml−259 tests/qmltests/Panel/tst_Indicators.qml−212 tests/qmltests/Panel/tst_MenuContent.qml+56−188 tests/qmltests/Panel/tst_Overview.qml−142 tests/qmltests/Panel/tst_Panel.qml+606−172 tests/qmltests/Panel/tst_PanelBar.qml+240 tests/qmltests/Panel/tst_PanelItemRow.qml+318 tests/qmltests/Panel/tst_PanelMenu.qml+364 tests/qmltests/Panel/tst_PanelMenuPage.qml+200 tests/qmltests/Panel/tst_PanelSmallScreen.qml+133 tests/qmltests/Panel/tst_SearchIndicator.qml−64 tests/qmltests/SideStage/tst_SideStage.qml−52 tests/qmltests/Stage/ApplicationCheckBox.qml+189 tests/qmltests/Stage/SizeHintField.qml+14−14 tests/qmltests/Stage/SurfaceManagerControls.qml+32 tests/qmltests/Stage/SurfaceManagerField.qml+40 tests/qmltests/Stage/tst_ApplicationWindow.qml+513 tests/qmltests/Stage/tst_DecoratedWindow.qml+267 tests/qmltests/Stage/tst_DesktopStage.qml+1085 tests/qmltests/Stage/tst_PhoneStage.qml+624 tests/qmltests/Stage/tst_QMLTopLevelWindowModel.qml+191 tests/qmltests/Stage/tst_Splash.qml+131 tests/qmltests/Stage/tst_SurfaceContainer.qml+258 tests/qmltests/Stage/tst_TabletStage.qml+764 tests/qmltests/Stage/tst_WindowDecoration.qml+244 tests/qmltests/Stage/tst_WindowResizeArea.qml+465 tests/qmltests/Tutorial/tst_Tutorial.qml+813 tests/qmltests/UnityLogo.png tests/qmltests/Wizard/licenses/en_US.html+1 tests/qmltests/Wizard/licenses/fr_CA.html+1 tests/qmltests/Wizard/licenses/fr_FR.html+1 tests/qmltests/Wizard/tst_Wizard.qml+487 tests/qmltests/modules/Unity/Indicators/CMakeLists.txt−53 tests/qmltests/modules/Unity/Indicators/IndicatorsModel.qml−76 tests/qmltests/modules/Unity/Indicators/indicators_fake.qrc−14 tests/qmltests/modules/Unity/Indicators/qml/FakeMenuPage.qml−37 tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page1.qml−44 tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page2.qml−44 tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page3.qml−44 tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page4.qml−44 tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page5.qml−44 tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget4.qml−23 tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget5.qml−23 tests/qmltests/modules/Unity/Indicators/qmldir−5 tests/qmltests/plugins/CMakeLists.txt−2 tests/qmltests/plugins/Dee/qmldir−3 tests/qmltests/plugins/HudClient/CMakeLists.txt−46 tests/qmltests/plugins/HudClient/fake_hud_plugin.cpp−39 tests/qmltests/plugins/HudClient/fake_libhud_client.cpp−240 tests/qmltests/plugins/HudClient/libhud_client_stub.cpp−93 tests/qmltests/plugins/HudClient/libhud_client_stub.h−64 tests/qmltests/plugins/HudClient/qmldir−1 tests/qmltests/plugins/Unity/CMakeLists.txt−44 tests/qmltests/plugins/Unity/fake_launchermodel.cpp−150 tests/qmltests/plugins/Unity/fake_launchermodel.h−86 tests/qmltests/plugins/Unity/fake_lens.cpp−167 tests/qmltests/plugins/Unity/fake_lens.h−63 tests/qmltests/plugins/Unity/fake_lenses.cpp−146 tests/qmltests/plugins/Unity/fake_lenses.h−79 tests/qmltests/plugins/Unity/fake_unity_plugin.cpp−46 tests/qmltests/plugins/Unity/qmldir−2 tests/qmltests/tst_DeviceConfiguration.qml+49 tests/qmltests/tst_DisabledScreenNotice.qml+133 tests/qmltests/tst_OrientedShell.qml+1705 tests/qmltests/tst_Shell.qml+3382 tests/qmltests/tst_ShellWithPin.qml+549 tests/qmltests/utils/Unity/Test/MockObjectForInstanceOfTest.qml+1−1 tests/qmltests/utils/Unity/Test/MockObjectForInstanceOfTestChild.qml+1−1 tests/qmltests/utils/Unity/Test/tst_UnityTest.qml+36−8 tests/scripts/README+9 tests/scripts/alert-launcher-icon.sh+19 tests/scripts/get-progress.sh+19 tests/scripts/list-launcher-icons.sh+19 tests/scripts/set-count-visible.sh+19 tests/scripts/set-count.sh+19 tests/scripts/set-progress.sh+19 tests/uqmlscene/CMakeLists.txt+37 tests/uqmlscene/README+3 tests/uqmlscene/main.cpp+568 tests/utils/modules/Unity/Test/CMakeLists.txt+26−10 tests/utils/modules/Unity/Test/MouseTouchEmulationCheckbox.qml+23−17 tests/utils/modules/Unity/Test/StageTestCase.qml+64 tests/utils/modules/Unity/Test/TouchEventSequenceWrapper.cpp+23−2 tests/utils/modules/Unity/Test/TouchEventSequenceWrapper.h+8−3 tests/utils/modules/Unity/Test/UnityTestCase.qml+494−121 tests/utils/modules/Unity/Test/plugin.cpp+25−2 tests/utils/modules/Unity/Test/plugin.h+1−1 tests/utils/modules/Unity/Test/qmldir+4 tests/utils/modules/Unity/Test/testutil.cpp+49−6 tests/utils/modules/Unity/Test/testutil.h+4−2 tests/whitespace/CMakeLists.txt+1−1 tests/whitespace/check_whitespace.py+22−12 tools/CMakeLists.txt+4 tools/indicatorsclient/CMakeLists.txt+1−7 tools/indicatorsclient/indicatorsclient.cpp+83 tools/indicatorsclient/indicatorsclient.h−2 tools/indicatorsclient/main.cpp tools/menutool/CMakeLists.txt+5 tools/menutool/README+11 tools/menutool/menutool.cpp+62 tools/menutool/menutool.qml+118 tools/unlock-device+51 unity8.qmlproject−24
.bazaar/Makefiledeleted−6
@@ -1,6 +0,0 @@
1−install:
2− mkdir -p ~/.bazaar/plugins
3− cp plugins/* ~/.bazaar/plugins
4−
5−uninstall:
6− rm ~/.bazaar/plugins/makecheck_unity_phablet.py*
.bazaar/plugins/makecheck_unity_phablet.pydeleted−34
@@ -1,34 +0,0 @@
1−#!/usr/bin/python
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 Lesser 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 Lesser General Public License for more details.
12−#
13−# You should have received a copy of the GNU Lesser General Public License
14−# along with this program. If not, see <http://www.gnu.org/licenses/>.
15−
16−import os, subprocess
17−from bzrlib import branch, errors
18−from bzrlib.urlutils import dirname, local_path_from_url
19−
20−def execute_makecheck(local_branch, master_branch, old_revision_number, old_revision_id, future_revision_number, future_revision_id, tree_delta, future_tree):
21− if not master_branch.basis_tree().has_filename("Shell.qml"):
22− return
23−
24− os.chdir(local_path_from_url(master_branch.base))
25−
26− print "Executing 'make check'.."
27− if (subprocess.call("make check", shell=True) != 0):
28− raise errors.BzrError("Unit tests failed, fix them before committing!")
29−
30− print "Executing 'make qmluitests'.."
31− if (subprocess.call("make qmluitests", shell=True) != 0):
32− raise errors.BzrError("QML UI tests failed, fix them before committing!")
33−
34−branch.Branch.hooks.install_named_hook('pre_commit', execute_makecheck, 'make check pre-commit')
.bzr-builddeb/default.confdeleted−2
@@ -1,2 +0,0 @@
1−[BUILDDEB]
2−split = True
.bzrignoredeleted−9
@@ -1,9 +0,0 @@
1−# default build dir
2−/builddir
3−# QtCreator project files
4−/*.user
5−# Eclipse project files
6−/.project
7−/.cproject
8−/.settings
9−/.pydevproject
.crossbuilder/post_deploynew file+1
@@ -0,0 +1 @@
1+restart unity8
.gitignore+7
@@ -2,8 +2,15 @@
22/builddir
33# QtCreator project files
44/*.user
5+*.qmlc
6+*.jsc
57# Eclipse project files
68/.project
79/.cproject
810/.settings
911/.pydevproject
12+# KDevelop project Files
13+/.kdev4/
14+/build/
15+/*.kdev4
16+.clickable/
.projectnew file+17
@@ -0,0 +1,17 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<projectDescription>
3+ <name>Unity8</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>
.pydevprojectnew file+10
@@ -0,0 +1,10 @@
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/tests/autopilot</path>
5+<path>/Unity8/.bazaar</path>
6+<path>/Unity8/tests/whitespace</path>
7+</pydev_pathproperty>
8+<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
9+<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
10+</pydev_project>
.settings/Autopilot List.launchnew file+14
@@ -0,0 +1,14 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<launchConfiguration type="org.python.pydev.debug.regularLaunchConfigurationType">
3+<stringAttribute key="bad_container_name" value="/Unity8/.pyd"/>
4+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"/>
5+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"/>
6+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
7+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
8+</listAttribute>
9+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="/usr/bin/autopilot"/>
10+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_OTHER_WORKING_DIRECTORY" value=""/>
11+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="list unity8"/>
12+<stringAttribute key="org.python.pydev.debug.ATTR_INTERPRETER" value="__default"/>
13+<stringAttribute key="org.python.pydev.debug.ATTR_PROJECT" value="Unity8"/>
14+</launchConfiguration>
.settings/Autopilot Run.launchnew file+14
@@ -0,0 +1,14 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<launchConfiguration type="org.python.pydev.debug.regularLaunchConfigurationType">
3+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"/>
4+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"/>
5+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
6+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
7+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
8+</listAttribute>
9+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="/usr/bin/autopilot"/>
10+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_OTHER_WORKING_DIRECTORY" value=""/>
11+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="run ${string_prompt:the test suite to run:unity8}"/>
12+<stringAttribute key="org.python.pydev.debug.ATTR_INTERPRETER" value="__default"/>
13+<stringAttribute key="org.python.pydev.debug.ATTR_PROJECT" value="Unity8"/>
14+</launchConfiguration>
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 Ubuntu.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/ubuntu-calendar-app.desktop': {
74− 'name': i18n.tr("Calendar"),
75− 'icon': 'calendar',
76− 'exec': '/usr/bin/qmlscene /usr/share/ubuntu-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−}
Bottombar/Bottombar.qmldeleted−147
@@ -1,147 +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 "../Components"
19−import "../Components/Math.js" as MathLocal
20−import Unity 0.1
21−
22−Item {
23− id: bottombar
24− width: shell.width
25− height: shell.height
26−
27− property variant theHud
28− property bool enabled: false
29− readonly property real bottomEdgeButtonCenterDistance: units.gu(34)
30− readonly property real bottomEdgeShowButtonDistance: units.gu(2)
31−
32− property bool __applicationInFocus: false
33−
34− state: "hidden"
35−
36− HudButton {
37− id: hudButton
38−
39− x: MathLocal.clamp(hudButtonRevealer.pressedX - width / 2, 0, bottombar.width - width)
40− y: bottombar.height - bottomEdgeButtonCenterDistance - height / 2 - bottomMargin
41− Behavior on bottomMargin {
42− NumberAnimation{duration: hudButton.opacity < 0.01 ? 200 : 70; easing.type: Easing.OutQuart}
43− }
44− mouse: {
45− if (hudButtonRevealer.draggingArea.pressed) {
46− var mapped = mapFromItem(hudButtonRevealer.draggingArea, hudButtonRevealer.draggingArea.mouseX, hudButtonRevealer.draggingArea.mouseY)
47− return Qt.point(mapped.x, mapped.y)
48− } else {
49− return mouse
50− }
51− }
52−
53− Behavior on opacity {
54− NumberAnimation{ duration: 200; easing.type: Easing.OutCubic}
55− }
56− }
57−
58− Connections {
59− target: theHud
60− onShownChanged: bottomBarVisibilityCommunicatorShell.forceHidden = theHud.shown
61− }
62−
63− function updateApplicationInFocus() {
64− if (shell.applicationManager.mainStageFocusedApplication || shell.applicationManager.sideStageFocusedApplication) {
65− __applicationInFocus = true
66− } else {
67− __applicationInFocus = false
68− }
69− }
70−
71− Connections {
72− target: shell.applicationManager
73− ignoreUnknownSignals: true
74− onMainStageFocusedApplicationChanged: updateApplicationInFocus()
75− onSideStageFocusedApplicationChanged: updateApplicationInFocus()
76− }
77−
78− Showable {
79− id: hudButtonShowable
80−
81− opacity: 1.0
82− width: parent.width
83− height: bottomEdgeShowButtonDistance
84− shown: false
85− showAnimation: StandardAnimation { property: "y"; duration: 350; to: hudButtonRevealer.openedValue; easing.type: Easing.OutCubic }
86− hideAnimation: StandardAnimation { property: "y"; duration: 350; to: hudButtonRevealer.closedValue; easing.type: Easing.OutCubic }
87− onYChanged: {
88− if (y == hudButtonRevealer.openedValue)
89− bottombar.state = "shown"
90− }
91−
92− // eater
93− MouseArea {
94− anchors.fill: parent
95− }
96− }
97−
98− Revealer {
99− id: hudButtonRevealer
100−
101− property double pressedX
102−
103− enabled: !theHud.shown && bottombar.enabled && __applicationInFocus
104− direction: Qt.RightToLeft
105− openedValue: bottombar.height - height
106− closedValue: bottombar.height
107− target: hudButtonShowable
108− width: hudButtonShowable.width
109− height: hudButtonShowable.height
110− anchors.bottom: bottombar.bottom
111− onOpenPressed: {
112− pressedX = mouseX
113− }
114−
115− onOpenReleased: {
116− if (hudButton.opacity != 0 && hudButton.mouseOver) {
117− hudButtonShowable.hide()
118− theHud.show()
119− } else {
120− hudButtonShowable.hide()
121− }
122− }
123− }
124−
125− Connections {
126− target: hudButtonShowable.hideAnimation
127− onRunningChanged: {
128− if (hudButtonShowable.hideAnimation.running) {
129− bottombar.state = "hidden"
130− }
131− }
132− }
133−
134− states: [
135− State {
136− name: "hidden"
137− PropertyChanges { target: hudButton; opacity: 0}
138− PropertyChanges { target: hudButton; bottomMargin: units.gu(-1)}
139− },
140− State {
141− name: "shown"
142− PropertyChanges { target: hudButton; opacity: 1}
143− PropertyChanges { target: hudButton; bottomMargin: units.gu(0)}
144− }
145− ]
146−
147−}
Bottombar/HudButton.qmldeleted−63
@@ -1,63 +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−
20−Item {
21− id: item
22−
23− property int bottomMargin: units.gu(2)
24− property bool mouseOver: contains(mouse)
25−
26− property point mouse: Qt.point(-1,-1)
27−
28− readonly property real scaleOnMouseOver: 1.2
29−
30− width: hudButton.width * scaleOnMouseOver
31− height: hudButton.height * scaleOnMouseOver
32−
33− Item {
34− id: hudButton
35− property alias actionButton: actionButton
36−
37− anchors.centerIn: parent
38− height: units.gu(12)
39− width: height
40− opacity: item.mouseOver ? 1 : 0.7
41− scale: item.mouseOver ? scaleOnMouseOver : 1
42− Behavior on opacity {NumberAnimation{duration: 200; easing.type: Easing.OutQuart}}
43− Behavior on scale {NumberAnimation{duration: 200; easing.type: Easing.OutQuart}}
44−
45− UbuntuShape {
46− id: actionButton
47− anchors.fill: parent
48−
49− borderSource: ""
50− image: Image {
51− source: "graphics/hud_invoke_button_active.png"
52− }
53− }
54−
55− Image {
56− width: units.gu(4)
57− height: width
58− source: "graphics/hud.png"
59− anchors.centerIn: parent
60− fillMode: Image.PreserveAspectFit
61− }
62− }
63−}
Bottombar/graphics/hud@20.pngdeleted

Binary file not shown.

Bottombar/graphics/hud_invoke_button_active@20.pngdeleted

Binary file not shown.

CMakeLists.txt+115−75
@@ -13,8 +13,9 @@ endif()
1313
1414set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
1515
16−# Instruct CMake to run moc automatically when needed.
16+# Instruct CMake to run moc and rcc automatically when needed.
1717set(CMAKE_AUTOMOC ON)
18+set(CMAKE_AUTORCC ON)
1819
1920# enable QML debugging
2021string(TOLOWER "${CMAKE_BUILD_TYPE}" cmake_build_type_lower) # Build types should always be lowercase but sometimes they are not.
@@ -39,6 +40,19 @@ if(cmake_build_type_lower MATCHES coverage)
3940 ENABLE_COVERAGE_REPORT(TARGETS ${SHELL_APP} FILTER /usr/include ${CMAKE_SOURCE_DIR}/tests/* ${CMAKE_BINARY_DIR}/*)
4041endif()
4142
43+find_package (ECM 1.7.0 QUIET NO_MODULE)
44+if (ECM_FOUND)
45+ # Provides us with -DECM_ENABLE_SANITIZERS='X'
46+ # Where X can be address, thread, memory, leak, undefined
47+ include("${ECM_MODULE_DIR}/ECMEnableSanitizers.cmake")
48+endif()
49+
50+if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
51+ if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.0.0")
52+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-override" )
53+ endif()
54+endif()
55+
4256# Make sure we have all the needed symbols
4357set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,defs")
4458set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,defs")
@@ -48,26 +62,65 @@ add_custom_target(cppcheck COMMAND cppcheck --enable=all -q --error-exitcode=2
4862 ${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/tests)
4963
5064include(FindPkgConfig)
51−find_package(Qt5Qml)
52−find_package(Qt5Quick)
53−find_package(Qt5Gui)
54−find_package(Qt5DBus)
65+find_package(Qt5Core 5.6 REQUIRED)
66+find_package(Qt5Qml 5.6 REQUIRED)
67+find_package(Qt5Quick 5.6 REQUIRED)
68+find_package(Qt5Gui 5.6 REQUIRED)
69+find_package(Qt5DBus 5.6 REQUIRED)
70+find_package(Qt5Concurrent 5.6 REQUIRED)
71+find_package(Qt5Sql 5.6 REQUIRED)
72+find_package(Qt5Test 5.6 REQUIRED)
73+find_package(Qt5Svg 5.6 REQUIRED)
74+find_package(Qt5Network 5.6 REQUIRED)
75+find_package(Qt5Xml 5.6 REQUIRED)
76+
77+pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=27)
78+pkg_check_modules(GEONAMES REQUIRED geonames>=0.2)
79+pkg_check_modules(GIO REQUIRED gio-2.0>=2.32)
80+pkg_check_modules(GLIB REQUIRED glib-2.0>=2.32)
81+pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=13)
82+pkg_check_modules(QMENUMODEL REQUIRED qmenumodel)
83+pkg_check_modules(GD3 REQUIRED gnome-desktop-3.0)
84+pkg_check_modules(UAL REQUIRED ubuntu-app-launch-2)
85+pkg_check_modules(UBUNTUGESTURES REQUIRED UbuntuGestures)
86+pkg_check_modules(QTDBUSTEST REQUIRED
87+ libqtdbustest-1
88+ libqtdbusmock-1
89+ )
90+
91+### Check UbuntuGestures private headers. No pkg-config (.pc) file is provided for them
92+find_path(UBUNTUGESTUREPRIV
93+ NAMES UbuntuGestures/private/damper_p.h UbuntuGestures/private/ucswipearea_p.h UbuntuGestures/private/ucswipearea_p_p.h
94+ PATHS ${UBUNTUGESTURES_INCLUDEDIR}/UbuntuGestures/${UBUNTUGESTURES_VERSION}
95+ NO_DEFAULT_PATH)
96+if (${UBUNTUGESTUREPRIV} STREQUAL UBUNTUGESTUREPRIV-NOTFOUND)
97+ message(FATAL_ERROR "UbuntuGestures private headers not found.")
98+endif()
99+# end of UbuntuGesture private headers check
55100
56101# Standard install paths
57102include(GNUInstallDirs)
58103
59104set(SHELL_APP_DIR ${CMAKE_INSTALL_DATADIR}/unity8)
105+set(SHELL_PRIVATE_LIBDIR ${CMAKE_INSTALL_LIBDIR}/unity8)
60106
61−configure_file(paths.h.in ${CMAKE_CURRENT_BINARY_DIR}/paths.h @ONLY)
107+execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=plugin_private_module_dir SystemSettings OUTPUT_VARIABLE USS_PRIVATE_PLUGINDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
108+if(USS_PRIVATE_PLUGINDIR STREQUAL "")
109+ message(FATAL_ERROR "Could not determine USS private plugin installation dir.")
110+endif()
62111
63−include_directories(
64− ${CMAKE_CURRENT_BINARY_DIR}
65− ${CMAKE_CURRENT_SOURCE_DIR}
66− ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
67− )
112+execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=plugindir_suffix unity-shell-api OUTPUT_VARIABLE SHELL_INSTALL_QML OUTPUT_STRIP_TRAILING_WHITESPACE)
113+if(SHELL_INSTALL_QML STREQUAL "")
114+ message(FATAL_ERROR "Could not determine plugin installation dir.")
115+endif()
68116
69117set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
70118
119+execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=plugindir unity-shell-api OUTPUT_VARIABLE SHELL_PLUGINDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
120+if(SHELL_PLUGINDIR STREQUAL "")
121+ message(FATAL_ERROR "Could not determine plugin import dir.")
122+endif()
123+
71124set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-permissive -pedantic -Wall -Wextra")
72125
73126if ("${CMAKE_BUILD_TYPE}" STREQUAL "release" OR "${CMAKE_BUILD_TYPE}" STREQUAL "relwithdebinfo")
@@ -84,85 +137,72 @@ endif()
84137# "signals" and "slots"
85138add_definitions(-DQT_NO_KEYWORDS)
86139
87−# Tests
88−include(CTest)
89−enable_testing()
140+# Save a few container detach and conversions
141+add_definitions(-DQT_STRICT_ITERATORS)
142+
143+# Use the fast string builder
144+add_definitions(-DQT_USE_QSTRINGBUILDER)
90145
91146# Autopilot tests
92147include(autopilot)
93−declare_autopilot_test(unity8 ${CMAKE_SOURCE_DIR}/tests/autopilot/)
94−
95−add_subdirectory(tests)
148+declare_autopilot_test(shell unity8.shell ${CMAKE_SOURCE_DIR}/tests/autopilot/)
96149
97150set(SHELL_APP unity8)
151+set(INDICATORS_CLIENT_APP indicators-client)
152+set(GREETER_APP unity8-greeter)
153+set(MOCK_INDICATOR_SERVICE_APP unity-mock-indicator-service)
98154
99−set(shell_app_HDRS
100− )
101−
102−add_executable(${SHELL_APP}
103− ${shellapplication_MOC_SRCS}
104− main.cpp
105− MouseTouchAdaptor.cpp
106− )
107−
108−qt5_use_modules(${SHELL_APP} Qml Quick Test)
109−pkg_check_modules(XCB REQUIRED xcb)
110−
111−if (NOT "${XCB_INCLUDE_DIRS}" STREQUAL "")
112− set_target_properties(${SHELL_APP} PROPERTIES INCLUDE_DIRECTORIES ${XCB_INCLUDE_DIRS})
155+include_directories(
156+ ${CMAKE_SOURCE_DIR}/include
157+ ${CMAKE_BINARY_DIR}/include
158+ ${APPLICATION_API_INCLUDE_DIRS}
159+)
160+
161+# Quiet logger
162+set(QUIET_LOGGER OFF CACHE BOOL "Disable test output on stdout.")
163+if(NOT QUIET_LOGGER)
164+ set(STDOUT_LOGGER "-o" "-,txt")
113165endif()
114166
115−target_link_libraries(${SHELL_APP}
116− ${Qt5Qml_LIBRARIES}
117− ${Qt5Quick_LIBRARIES}
118− ${XCB_LDFLAGS}
119− )
120−
121−# install binaries
122−install(TARGETS ${SHELL_APP}
123− RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
124− )
125−
126−# install top level qml and js files
127−file(GLOB QML_JS_FILES *.qml *.js)
128−
129−install(FILES ${QML_JS_FILES}
130− DESTINATION ${SHELL_APP_DIR}
131− )
167+execute_process(COMMAND dpkg-architecture -qDEB_HOST_ARCH OUTPUT_VARIABLE ARCH)
168+if (NOT ARCH MATCHES "arm*")
169+ set(ENABLE_TOUCH_EMULATION true)
170+ add_definitions(-DUNITY8_ENABLE_TOUCH_EMULATION)
171+ pkg_check_modules(MOUSETOUCHADAPTOR_LIBS REQUIRED x11 xcb xi)
172+else()
173+ set(ENABLE_TOUCH_EMULATION false)
174+ message(STATUS "Touch emulation support disabled.")
175+endif()
132176
133177# add subdirectories to build
134−add_subdirectory(modules)
135−add_subdirectory(plugins)
136−add_subdirectory(Panel)
137−
138−# install subdirectories
139−set(QML_DIRS
140− Applications
141− Bottombar
142− Components
143− Dash
144− graphics
145− Greeter
146− Hud
147− Panel
148− Launcher
149− SideStage
150− Notifications
151− )
178+add_subdirectory(include)
179+add_subdirectory(src)
180+add_subdirectory(tools)
181+add_subdirectory(qml)
152182
153−install(DIRECTORY ${QML_DIRS}
154− DESTINATION ${SHELL_APP_DIR}
155− )
183+# Tests
184+set(NO_TESTS OFF CACHE BOOL "Disable tests.")
185+if (NOT NO_TESTS)
186+ include(CTest)
187+ enable_testing()
188+ add_subdirectory(tests)
189+else()
190+ message(STATUS "Tests disabled")
191+endif()
156192
157−# generate desktop file
158−configure_file(${SHELL_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop @ONLY)
193+add_subdirectory(plugins)
159194
160−# install desktop file
161−install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop
162− DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
163− )
195+#
196+# Data files
197+#
198+add_subdirectory(data)
164199
165200#
166201# Translation
167202#
168203add_subdirectory(po)
204+
205+#
206+# Documentation
207+#
208+add_subdirectory(doc)
CODING+148−53
@@ -1,33 +1,34 @@
11Building Unity 8
22================
33
4+Only Ubuntu 14.04 (trusty) is supported as a developement environment.
5+
46download source
57---------------
6−- the build requires some additional dependencies, so create the parent folder to not pollute your setup
7− $ mkdir ~/unity
8+- create a parent folder to not pollute your setup. so that you can have different unity
9+ branches there (trunk, WIP etc)
10+
11+ $ mkdir ~/unity8
812
913- fetch Unity 8 source
1014 $ sudo apt-get install bzr
11− $ bzr branch lp:unity/8.0 ~/unity/unity8
12− $ cd ~/unity/unity8
15+ $ bzr branch lp:unity8 ~/unity8/trunk
16+ $ cd ~/unity8/trunk
1317
14−build dependencies
15−------------------
16−If its your first time, download & build deps
17−$ ./build -s
18− this will:
19− - add ppa:phablet-team/desktop-deps, ppa:canonical-qt5-edgers/qt5-proper, ppa:ubuntu-sdk-team
20− - build and install lp:libunity/phablet, lp:unity/phablet-mods, lp:hud/phablet locally
21− - install build dependencies
18+install dependencies and build Unity 8
19+--------------------
20+
21+$ cd ~/unity8/trunk
22+$ ./build.sh
2223
23−build Unity 8
24−-------------
25−$ ./build
24+ If its your first time, this will install the required dependencies to build and
25+ build it.
2626
27−subsequent updates of the dependencies
28−--------------------------------------
29−$ ./build_unity -u
30−$ ./build_unity
27+ You might want to also install unity-scope-home and unity-scope-click which
28+ are technically "recommends", not strict dependencies
29+
30+You may also rebuild with the -c for clean, which just deletes the build
31+directory.
3132
3233
3334Running Unity 8 on your desktop
@@ -35,52 +36,45 @@ Running Unity 8 on your desktop
3536
3637run the Unity 8 shell
3738---------------------
38−$ cd ~/unity/unity8
39−$ ./run
39+$ cd ~/unity8/trunk
40+$ cd builddir
41+
42+Each component of unity8 can be ran independently for development and testing
43+For example:
44+$ make tryShell
45+$ make tryLauncher
46+$ make tryLockscreen
47+
48+Check out the tests/qmltests/ directory for a list of things that can be ran.
4049
4150Notes
4251-----
4352- to navigate, utilize the mouse left button as you would your finger
53+- a three point drag (for side stage operations) can be performed by using
54+ the Shift+Control+Alt (all together) keyboard modifiers while using the mouse.
4455- to get the translations work, currently you have to do make install to
4556 put the *.mo files into correct structure. We'll look for a better solution
4657 later.
4758 $ cd builddir; make install
59+- if you wish to populate contacts
60+ $ sudo apt-get install gir1.2-ebook-1.2
61+ $ manage-address-book.py create
62+ this will:
63+ - Create an EDS address book
64+ - Populate the address book with sample data
65+
4866
4967Running Unity 8 on devices
5068==========================
51−- Ubuntu Touch builds are currently only available in 13.10 flavour
52−- supported hardware should match one those listed here https://wiki.ubuntu.com/Touch/Devices#Running_fine
53−- follow the Ubuntu Touch install instructions for your chosen device https://wiki.ubuntu.com/Touch/Install
54−- make sure your device is connected to a WiFi network
55−- also make sure you have your SSH key in ~/.ssh/id_rsa.pub (or install one on the device yourself)
56−
57−$ cd ~/unity/unity8
58−$ ./run_on_device -s
59− this will:
60− - install your public SSH key on the device
61− - add ppa:canonical-qt5-edgers/qt5-proper and ppa:phablet-team
62− - install the needed dependencies
6369
64−$ ./run_on_device
65− this will:
66− - rsync the code to the device
67− - build on the device
68− - replace the running shell
69−
70−Notes
71−-----
72−- using adb over TCP has some advantages, Google will be of help here
73− - TL;DR: `adb tcpip 5555; adb connect $your_device_ip`
74− - you can persist the above via `adb shell setprop persist.adb.tcp.port 5555`
75− - it's unsafe - anyone can connect to your device
76− - with TCP the Nexus 10 doesn't drop the adb connection when locking the screen
77−- exporting ANDROID_SERIAL=$your_device_serial or ANDROID_SERIAL=$your_device_ip:5555
78− will make adb not complain about multiple devices
79−- you can export TARGET_IP=$your_device_ip TARGET_SSH_PORT=22 for run_on_device
80− to not use adb forwarding - useful if you use multiple devices
81−- using Ninja (package ninja-build - run_on_device -s installs this now) will improve
82− build times (especially in the nothing-to-build case)
70+Running unity8 on a device should be done using crossbuilder.
71+Go to
72+* https://launchpad.net/crossbuilder and
73+* https://wiki.ubuntu.com/Touch/Crossbuilder
74+for more details on crossbuilder.
8375
76+unity8 will automatically restart on the phone once deployment
77+has finished due to post-build-steps set up in this repository.
8478
8579Coding guidelines
8680=================
@@ -90,4 +84,105 @@ https://launchpad.net/canonical-client-development-guidelines
9084
9185Development Environment
9286=======================
93−QtCreator (available via the Software Center) is the best IDE to hack on Unity 8.
87+QtCreator (available via the Software Center) is the best IDE to hack on
88+Unity 8.
89+
90+If using VIM, make sure you install some syntax highlighting for QML, like
91+https://github.com/peterhoeg/vim-qml
92+
93+Running tests
94+=============
95+
96+Tests are run from the build directory (which will be ./builddir if you used
97+the ./build.sh script).
98+
99+To run the tests that do not require any graphical capability and therefore
100+are pretty fast run:
101+
102+$ make test
103+
104+or, alternatively:
105+
106+$ ctest
107+
108+To run all graphical tests, which can take a couple of minutes:
109+
110+$ make uitests
111+
112+To run the tests for a single component/class:
113+
114+$ make testComponentName
115+
116+So, for the DragHandle component that would be:
117+
118+$ make testDragHandle
119+
120+To run the tests for a single component/class under gdb (so you can catch SEGFAULTS)
121+
122+$ make gdbtestComponentName
123+
124+To run a single test function of a single component/class:
125+
126+$ make testComponentName FUNCTION="TestCaseName::functionName"
127+
128+To run a test application that allow you to manually test or to simply try out
129+a given component:
130+
131+$ make tryComponentName
132+
133+So to try out, for instance, the DragHandle component, you would do:
134+
135+$ make tryDragHandle
136+
137+NB: Manual test or interation doesn't make sense for all components or classes,
138+particularly the non-graphical ones. In such cases no "tryFoo" make target is
139+provided.
140+
141+Running autopilot tests
142+=======================
143+
144+Autopilot tests are run from the build directory (which will be ./builddir if you used
145+the ./build.sh script).
146+
147+$ make autopilot
148+
149+If you want you can also run tests individually, for that you need to install first,
150+otherwise the tests will run on the system-installed version
151+
152+$ make install
153+
154+To see the list of existing autopilot tests you can do
155+
156+$ PYTHONPATH=../tests/autopilot autopilot3 list unity8
157+
158+And then run a single test with
159+
160+$ PYTHONPATH=../tests/autopilot autopilot3 run unity8.some.very.long.test.name
161+
162+or run them all with
163+
164+$ PYTHONPATH=../tests/autopilot autopilot3 run unity8
165+
166+Debugging techniques
167+====================
168+
169+Unity8 heavily uses Qt and with that Qt debugging techniques mostly apply in the
170+same fashion. There are, however, some additional unity8-specific notes:
171+
172+* Enable/disable Qt scenegraph visualizer on the fly:
173+
174+ $ qdbus com.canonical.Unity8.Debugging /com/canonical/Unity8/Debugging SetSceneGraphVisualizer <mode>
175+
176+ This is equivalent to exporting QSG_VISUALIZE=<mode> before running unity8, except it does it on the
177+ fly.
178+
179+* Toggle slow animations on the fly:
180+
181+ $ qdbus com.canonical.Unity8.Debugging /com/canonical/Unity8/Debugging SetSlowAnimations <true|false>
182+
183+* Change logging filter rules on the fly:
184+
185+ $ qdbus com.canonical.Unity8.Debugging /com/canonical/Unity8/Debugging SetLoggingFilterRules <filter>
186+
187+ This is equivalent to exporting QT_LOGGING_RULES or defining them in QT_LOGGING_CONF, except it does
188+ it on the fly.
COPYING.LGPLnew file+514
@@ -0,0 +1,514 @@
1+ GNU LESSER GENERAL PUBLIC LICENSE
2+
3+ The Qt Toolkit is Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
4+ Contact: http://www.qt-project.org/legal
5+
6+ You may use, distribute and copy the Qt GUI Toolkit under the terms of
7+ GNU Lesser General Public License version 2.1, which is displayed below.
8+
9+-------------------------------------------------------------------------
10+
11+ GNU LESSER GENERAL PUBLIC LICENSE
12+ Version 2.1, February 1999
13+
14+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
15+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16+ Everyone is permitted to copy and distribute verbatim copies
17+ of this license document, but changing it is not allowed.
18+
19+[This is the first released version of the Lesser GPL. It also counts
20+ as the successor of the GNU Library Public License, version 2, hence
21+ the version number 2.1.]
22+
23+ Preamble
24+
25+ The licenses for most software are designed to take away your
26+freedom to share and change it. By contrast, the GNU General Public
27+Licenses are intended to guarantee your freedom to share and change
28+free software--to make sure the software is free for all its users.
29+
30+ This license, the Lesser General Public License, applies to some
31+specially designated software packages--typically libraries--of the
32+Free Software Foundation and other authors who decide to use it. You
33+can use it too, but we suggest you first think carefully about whether
34+this license or the ordinary General Public License is the better
35+strategy to use in any particular case, based on the explanations below.
36+
37+ When we speak of free software, we are referring to freedom of use,
38+not price. Our General Public Licenses are designed to make sure that
39+you have the freedom to distribute copies of free software (and charge
40+for this service if you wish); that you receive source code or can get
41+it if you want it; that you can change the software and use pieces of
42+it in new free programs; and that you are informed that you can do
43+these things.
44+
45+ To protect your rights, we need to make restrictions that forbid
46+distributors to deny you these rights or to ask you to surrender these
47+rights. These restrictions translate to certain responsibilities for
48+you if you distribute copies of the library or if you modify it.
49+
50+ For example, if you distribute copies of the library, whether gratis
51+or for a fee, you must give the recipients all the rights that we gave
52+you. You must make sure that they, too, receive or can get the source
53+code. If you link other code with the library, you must provide
54+complete object files to the recipients, so that they can relink them
55+with the library after making changes to the library and recompiling
56+it. And you must show them these terms so they know their rights.
57+
58+ We protect your rights with a two-step method: (1) we copyright the
59+library, and (2) we offer you this license, which gives you legal
60+permission to copy, distribute and/or modify the library.
61+
62+ To protect each distributor, we want to make it very clear that
63+there is no warranty for the free library. Also, if the library is
64+modified by someone else and passed on, the recipients should know
65+that what they have is not the original version, so that the original
66+author's reputation will not be affected by problems that might be
67+introduced by others.
68+
69+ Finally, software patents pose a constant threat to the existence of
70+any free program. We wish to make sure that a company cannot
71+effectively restrict the users of a free program by obtaining a
72+restrictive license from a patent holder. Therefore, we insist that
73+any patent license obtained for a version of the library must be
74+consistent with the full freedom of use specified in this license.
75+
76+ Most GNU software, including some libraries, is covered by the
77+ordinary GNU General Public License. This license, the GNU Lesser
78+General Public License, applies to certain designated libraries, and
79+is quite different from the ordinary General Public License. We use
80+this license for certain libraries in order to permit linking those
81+libraries into non-free programs.
82+
83+ When a program is linked with a library, whether statically or using
84+a shared library, the combination of the two is legally speaking a
85+combined work, a derivative of the original library. The ordinary
86+General Public License therefore permits such linking only if the
87+entire combination fits its criteria of freedom. The Lesser General
88+Public License permits more lax criteria for linking other code with
89+the library.
90+
91+ We call this license the "Lesser" General Public License because it
92+does Less to protect the user's freedom than the ordinary General
93+Public License. It also provides other free software developers Less
94+of an advantage over competing non-free programs. These disadvantages
95+are the reason we use the ordinary General Public License for many
96+libraries. However, the Lesser license provides advantages in certain
97+special circumstances.
98+
99+ For example, on rare occasions, there may be a special need to
100+encourage the widest possible use of a certain library, so that it becomes
101+a de-facto standard. To achieve this, non-free programs must be
102+allowed to use the library. A more frequent case is that a free
103+library does the same job as widely used non-free libraries. In this
104+case, there is little to gain by limiting the free library to free
105+software only, so we use the Lesser General Public License.
106+
107+ In other cases, permission to use a particular library in non-free
108+programs enables a greater number of people to use a large body of
109+free software. For example, permission to use the GNU C Library in
110+non-free programs enables many more people to use the whole GNU
111+operating system, as well as its variant, the GNU/Linux operating
112+system.
113+
114+ Although the Lesser General Public License is Less protective of the
115+users' freedom, it does ensure that the user of a program that is
116+linked with the Library has the freedom and the wherewithal to run
117+that program using a modified version of the Library.
118+
119+ The precise terms and conditions for copying, distribution and
120+modification follow. Pay close attention to the difference between a
121+"work based on the library" and a "work that uses the library". The
122+former contains code derived from the library, whereas the latter must
123+be combined with the library in order to run.
124+
125+ GNU LESSER GENERAL PUBLIC LICENSE
126+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
127+
128+ 0. This License Agreement applies to any software library or other
129+program which contains a notice placed by the copyright holder or
130+other authorized party saying it may be distributed under the terms of
131+this Lesser General Public License (also called "this License").
132+Each licensee is addressed as "you".
133+
134+ A "library" means a collection of software functions and/or data
135+prepared so as to be conveniently linked with application programs
136+(which use some of those functions and data) to form executables.
137+
138+ The "Library", below, refers to any such software library or work
139+which has been distributed under these terms. A "work based on the
140+Library" means either the Library or any derivative work under
141+copyright law: that is to say, a work containing the Library or a
142+portion of it, either verbatim or with modifications and/or translated
143+straightforwardly into another language. (Hereinafter, translation is
144+included without limitation in the term "modification".)
145+
146+ "Source code" for a work means the preferred form of the work for
147+making modifications to it. For a library, complete source code means
148+all the source code for all modules it contains, plus any associated
149+interface definition files, plus the scripts used to control compilation
150+and installation of the library.
151+
152+ Activities other than copying, distribution and modification are not
153+covered by this License; they are outside its scope. The act of
154+running a program using the Library is not restricted, and output from
155+such a program is covered only if its contents constitute a work based
156+on the Library (independent of the use of the Library in a tool for
157+writing it). Whether that is true depends on what the Library does
158+and what the program that uses the Library does.
159+
160+ 1. You may copy and distribute verbatim copies of the Library's
161+complete source code as you receive it, in any medium, provided that
162+you conspicuously and appropriately publish on each copy an
163+appropriate copyright notice and disclaimer of warranty; keep intact
164+all the notices that refer to this License and to the absence of any
165+warranty; and distribute a copy of this License along with the
166+Library.
167+
168+ You may charge a fee for the physical act of transferring a copy,
169+and you may at your option offer warranty protection in exchange for a
170+fee.
171+
172+ 2. You may modify your copy or copies of the Library or any portion
173+of it, thus forming a work based on the Library, and copy and
174+distribute such modifications or work under the terms of Section 1
175+above, provided that you also meet all of these conditions:
176+
177+ a) The modified work must itself be a software library.
178+
179+ b) You must cause the files modified to carry prominent notices
180+ stating that you changed the files and the date of any change.
181+
182+ c) You must cause the whole of the work to be licensed at no
183+ charge to all third parties under the terms of this License.
184+
185+ d) If a facility in the modified Library refers to a function or a
186+ table of data to be supplied by an application program that uses
187+ the facility, other than as an argument passed when the facility
188+ is invoked, then you must make a good faith effort to ensure that,
189+ in the event an application does not supply such function or
190+ table, the facility still operates, and performs whatever part of
191+ its purpose remains meaningful.
192+
193+ (For example, a function in a library to compute square roots has
194+ a purpose that is entirely well-defined independent of the
195+ application. Therefore, Subsection 2d requires that any
196+ application-supplied function or table used by this function must
197+ be optional: if the application does not supply it, the square
198+ root function must still compute square roots.)
199+
200+These requirements apply to the modified work as a whole. If
201+identifiable sections of that work are not derived from the Library,
202+and can be reasonably considered independent and separate works in
203+themselves, then this License, and its terms, do not apply to those
204+sections when you distribute them as separate works. But when you
205+distribute the same sections as part of a whole which is a work based
206+on the Library, the distribution of the whole must be on the terms of
207+this License, whose permissions for other licensees extend to the
208+entire whole, and thus to each and every part regardless of who wrote
209+it.
210+
211+Thus, it is not the intent of this section to claim rights or contest
212+your rights to work written entirely by you; rather, the intent is to
213+exercise the right to control the distribution of derivative or
214+collective works based on the Library.
215+
216+In addition, mere aggregation of another work not based on the Library
217+with the Library (or with a work based on the Library) on a volume of
218+a storage or distribution medium does not bring the other work under
219+the scope of this License.
220+
221+ 3. You may opt to apply the terms of the ordinary GNU General Public
222+License instead of this License to a given copy of the Library. To do
223+this, you must alter all the notices that refer to this License, so
224+that they refer to the ordinary GNU General Public License, version 2,
225+instead of to this License. (If a newer version than version 2 of the
226+ordinary GNU General Public License has appeared, then you can specify
227+that version instead if you wish.) Do not make any other change in
228+these notices.
229+
230+ Once this change is made in a given copy, it is irreversible for
231+that copy, so the ordinary GNU General Public License applies to all
232+subsequent copies and derivative works made from that copy.
233+
234+ This option is useful when you wish to copy part of the code of
235+the Library into a program that is not a library.
236+
237+ 4. You may copy and distribute the Library (or a portion or
238+derivative of it, under Section 2) in object code or executable form
239+under the terms of Sections 1 and 2 above provided that you accompany
240+it with the complete corresponding machine-readable source code, which
241+must be distributed under the terms of Sections 1 and 2 above on a
242+medium customarily used for software interchange.
243+
244+ If distribution of object code is made by offering access to copy
245+from a designated place, then offering equivalent access to copy the
246+source code from the same place satisfies the requirement to
247+distribute the source code, even though third parties are not
248+compelled to copy the source along with the object code.
249+
250+ 5. A program that contains no derivative of any portion of the
251+Library, but is designed to work with the Library by being compiled or
252+linked with it, is called a "work that uses the Library". Such a
253+work, in isolation, is not a derivative work of the Library, and
254+therefore falls outside the scope of this License.
255+
256+ However, linking a "work that uses the Library" with the Library
257+creates an executable that is a derivative of the Library (because it
258+contains portions of the Library), rather than a "work that uses the
259+library". The executable is therefore covered by this License.
260+Section 6 states terms for distribution of such executables.
261+
262+ When a "work that uses the Library" uses material from a header file
263+that is part of the Library, the object code for the work may be a
264+derivative work of the Library even though the source code is not.
265+Whether this is true is especially significant if the work can be
266+linked without the Library, or if the work is itself a library. The
267+threshold for this to be true is not precisely defined by law.
268+
269+ If such an object file uses only numerical parameters, data
270+structure layouts and accessors, and small macros and small inline
271+functions (ten lines or less in length), then the use of the object
272+file is unrestricted, regardless of whether it is legally a derivative
273+work. (Executables containing this object code plus portions of the
274+Library will still fall under Section 6.)
275+
276+ Otherwise, if the work is a derivative of the Library, you may
277+distribute the object code for the work under the terms of Section 6.
278+Any executables containing that work also fall under Section 6,
279+whether or not they are linked directly with the Library itself.
280+
281+ 6. As an exception to the Sections above, you may also combine or
282+link a "work that uses the Library" with the Library to produce a
283+work containing portions of the Library, and distribute that work
284+under terms of your choice, provided that the terms permit
285+modification of the work for the customer's own use and reverse
286+engineering for debugging such modifications.
287+
288+ You must give prominent notice with each copy of the work that the
289+Library is used in it and that the Library and its use are covered by
290+this License. You must supply a copy of this License. If the work
291+during execution displays copyright notices, you must include the
292+copyright notice for the Library among them, as well as a reference
293+directing the user to the copy of this License. Also, you must do one
294+of these things:
295+
296+ a) Accompany the work with the complete corresponding
297+ machine-readable source code for the Library including whatever
298+ changes were used in the work (which must be distributed under
299+ Sections 1 and 2 above); and, if the work is an executable linked
300+ with the Library, with the complete machine-readable "work that
301+ uses the Library", as object code and/or source code, so that the
302+ user can modify the Library and then relink to produce a modified
303+ executable containing the modified Library. (It is understood
304+ that the user who changes the contents of definitions files in the
305+ Library will not necessarily be able to recompile the application
306+ to use the modified definitions.)
307+
308+ b) Use a suitable shared library mechanism for linking with the
309+ Library. A suitable mechanism is one that (1) uses at run time a
310+ copy of the library already present on the user's computer system,
311+ rather than copying library functions into the executable, and (2)
312+ will operate properly with a modified version of the library, if
313+ the user installs one, as long as the modified version is
314+ interface-compatible with the version that the work was made with.
315+
316+ c) Accompany the work with a written offer, valid for at
317+ least three years, to give the same user the materials
318+ specified in Subsection 6a, above, for a charge no more
319+ than the cost of performing this distribution.
320+
321+ d) If distribution of the work is made by offering access to copy
322+ from a designated place, offer equivalent access to copy the above
323+ specified materials from the same place.
324+
325+ e) Verify that the user has already received a copy of these
326+ materials or that you have already sent this user a copy.
327+
328+ For an executable, the required form of the "work that uses the
329+Library" must include any data and utility programs needed for
330+reproducing the executable from it. However, as a special exception,
331+the materials to be distributed need not include anything that is
332+normally distributed (in either source or binary form) with the major
333+components (compiler, kernel, and so on) of the operating system on
334+which the executable runs, unless that component itself accompanies
335+the executable.
336+
337+ It may happen that this requirement contradicts the license
338+restrictions of other proprietary libraries that do not normally
339+accompany the operating system. Such a contradiction means you cannot
340+use both them and the Library together in an executable that you
341+distribute.
342+
343+ 7. You may place library facilities that are a work based on the
344+Library side-by-side in a single library together with other library
345+facilities not covered by this License, and distribute such a combined
346+library, provided that the separate distribution of the work based on
347+the Library and of the other library facilities is otherwise
348+permitted, and provided that you do these two things:
349+
350+ a) Accompany the combined library with a copy of the same work
351+ based on the Library, uncombined with any other library
352+ facilities. This must be distributed under the terms of the
353+ Sections above.
354+
355+ b) Give prominent notice with the combined library of the fact
356+ that part of it is a work based on the Library, and explaining
357+ where to find the accompanying uncombined form of the same work.
358+
359+ 8. You may not copy, modify, sublicense, link with, or distribute
360+the Library except as expressly provided under this License. Any
361+attempt otherwise to copy, modify, sublicense, link with, or
362+distribute the Library is void, and will automatically terminate your
363+rights under this License. However, parties who have received copies,
364+or rights, from you under this License will not have their licenses
365+terminated so long as such parties remain in full compliance.
366+
367+ 9. You are not required to accept this License, since you have not
368+signed it. However, nothing else grants you permission to modify or
369+distribute the Library or its derivative works. These actions are
370+prohibited by law if you do not accept this License. Therefore, by
371+modifying or distributing the Library (or any work based on the
372+Library), you indicate your acceptance of this License to do so, and
373+all its terms and conditions for copying, distributing or modifying
374+the Library or works based on it.
375+
376+ 10. Each time you redistribute the Library (or any work based on the
377+Library), the recipient automatically receives a license from the
378+original licensor to copy, distribute, link with or modify the Library
379+subject to these terms and conditions. You may not impose any further
380+restrictions on the recipients' exercise of the rights granted herein.
381+You are not responsible for enforcing compliance by third parties with
382+this License.
383+
384+ 11. If, as a consequence of a court judgment or allegation of patent
385+infringement or for any other reason (not limited to patent issues),
386+conditions are imposed on you (whether by court order, agreement or
387+otherwise) that contradict the conditions of this License, they do not
388+excuse you from the conditions of this License. If you cannot
389+distribute so as to satisfy simultaneously your obligations under this
390+License and any other pertinent obligations, then as a consequence you
391+may not distribute the Library at all. For example, if a patent
392+license would not permit royalty-free redistribution of the Library by
393+all those who receive copies directly or indirectly through you, then
394+the only way you could satisfy both it and this License would be to
395+refrain entirely from distribution of the Library.
396+
397+If any portion of this section is held invalid or unenforceable under any
398+particular circumstance, the balance of the section is intended to apply,
399+and the section as a whole is intended to apply in other circumstances.
400+
401+It is not the purpose of this section to induce you to infringe any
402+patents or other property right claims or to contest validity of any
403+such claims; this section has the sole purpose of protecting the
404+integrity of the free software distribution system which is
405+implemented by public license practices. Many people have made
406+generous contributions to the wide range of software distributed
407+through that system in reliance on consistent application of that
408+system; it is up to the author/donor to decide if he or she is willing
409+to distribute software through any other system and a licensee cannot
410+impose that choice.
411+
412+This section is intended to make thoroughly clear what is believed to
413+be a consequence of the rest of this License.
414+
415+ 12. If the distribution and/or use of the Library is restricted in
416+certain countries either by patents or by copyrighted interfaces, the
417+original copyright holder who places the Library under this License may add
418+an explicit geographical distribution limitation excluding those countries,
419+so that distribution is permitted only in or among countries not thus
420+excluded. In such case, this License incorporates the limitation as if
421+written in the body of this License.
422+
423+ 13. The Free Software Foundation may publish revised and/or new
424+versions of the Lesser General Public License from time to time.
425+Such new versions will be similar in spirit to the present version,
426+but may differ in detail to address new problems or concerns.
427+
428+Each version is given a distinguishing version number. If the Library
429+specifies a version number of this License which applies to it and
430+"any later version", you have the option of following the terms and
431+conditions either of that version or of any later version published by
432+the Free Software Foundation. If the Library does not specify a
433+license version number, you may choose any version ever published by
434+the Free Software Foundation.
435+
436+ 14. If you wish to incorporate parts of the Library into other free
437+programs whose distribution conditions are incompatible with these,
438+write to the author to ask for permission. For software which is
439+copyrighted by the Free Software Foundation, write to the Free
440+Software Foundation; we sometimes make exceptions for this. Our
441+decision will be guided by the two goals of preserving the free status
442+of all derivatives of our free software and of promoting the sharing
443+and reuse of software generally.
444+
445+ NO WARRANTY
446+
447+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
448+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
449+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
450+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
451+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
452+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
453+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
454+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
455+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
456+
457+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
458+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
459+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
460+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
461+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
462+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
463+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
464+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
465+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
466+DAMAGES.
467+
468+ END OF TERMS AND CONDITIONS
469+
470+ How to Apply These Terms to Your New Libraries
471+
472+ If you develop a new library, and you want it to be of the greatest
473+possible use to the public, we recommend making it free software that
474+everyone can redistribute and change. You can do so by permitting
475+redistribution under these terms (or, alternatively, under the terms of the
476+ordinary General Public License).
477+
478+ To apply these terms, attach the following notices to the library. It is
479+safest to attach them to the start of each source file to most effectively
480+convey the exclusion of warranty; and each file should have at least the
481+"copyright" line and a pointer to where the full notice is found.
482+
483+ <one line to give the library's name and a brief idea of what it does.>
484+ Copyright (C) <year> <name of author>
485+
486+ This library is free software; you can redistribute it and/or
487+ modify it under the terms of the GNU Lesser General Public
488+ License as published by the Free Software Foundation; either
489+ version 2.1 of the License, or (at your option) any later version.
490+
491+ This library is distributed in the hope that it will be useful,
492+ but WITHOUT ANY WARRANTY; without even the implied warranty of
493+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
494+ Lesser General Public License for more details.
495+
496+ You should have received a copy of the GNU Lesser General Public
497+ License along with this library; if not, write to the Free Software
498+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
499+
500+Also add information on how to contact you by electronic and paper mail.
501+
502+You should also get your employer (if you work as a programmer) or your
503+school, if any, to sign a "copyright disclaimer" for the library, if
504+necessary. Here is a sample; alter the names:
505+
506+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
507+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
508+
509+ <signature of Ty Coon>, 1 April 1990
510+ Ty Coon, President of Vice
511+
512+That's all there is to it!
513+
514+
Components/AnimationControllerWithSignals.qmldeleted−64
@@ -1,64 +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−
19−AnimationController {
20− signal animationCompletedAtBeginning()
21− signal animationCompletedAtEnd()
22− readonly property bool completed: progress == 1.0 || progress == 0.0
23− property bool completing: false
24−
25− function __completeAtBeginning() {
26− completing = false;
27− animationCompletedAtBeginning();
28− }
29−
30− function __completeAtEnd() {
31− completing = false;
32− animationCompletedAtEnd();
33− }
34−
35− function completeToBeginningWithSignal() {
36− if (progress == 0.0) {
37− __completeAtBeginning()
38− } else {
39− completing = true;
40− completeToBeginning();
41− }
42− }
43−
44− function completeToEndWithSignal() {
45− if (progress == 1.0) {
46− __completeAtEnd()
47− } else {
48− completing = true;
49− completeToEnd();
50− }
51− }
52−
53− onProgressChanged: {
54− if (!completing) {
55− return;
56− }
57−
58− if (progress == 0.0) {
59− __completeAtBeginning()
60− } else if (progress == 1.0) {
61− __completeAtEnd()
62− }
63− }
64−}
Components/ApplicationManagerWrapper.qmldeleted−130
@@ -1,130 +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.Application 0.1
19−
20−Item {
21− id: applicationManager
22−
23− property var mainStageApplications: ApplicationManager.mainStageApplications
24− property var sideStageApplications: ApplicationManager.sideStageApplications
25− property var mainStageFocusedApplication: ApplicationManager.mainStageFocusedApplication
26− property var sideStageFocusedApplication: ApplicationManager.sideStageFocusedApplication
27− property bool sideStageEnabled: true
28− signal focusRequested(string desktopFile)
29− property bool keyboardVisible: ApplicationManager.keyboardVisible
30− property int keyboardHeight: ApplicationManager.keyboardHeight
31−
32− Component.onCompleted: {
33− // Start the watcher so that the ApplicationManager applications model can be populated.
34− ApplicationManager.startWatcher();
35− }
36−
37− function activateApplication(desktopFile, argument) {
38− var application;
39− application = getApplicationFromDesktopFile(desktopFile, ApplicationInfo.MainStage);
40− if (application == null) {
41− application = getApplicationFromDesktopFile(desktopFile, ApplicationInfo.SideStage);
42− }
43− if (application != null) {
44− return application;
45− }
46−
47− var execFlags = sideStageEnabled ? ApplicationManager.NoFlag : ApplicationManager.ForceMainStage;
48−
49− if (argument) {
50− return ApplicationManager.startProcess(desktopFile, execFlags, [argument]);
51− } else {
52− return ApplicationManager.startProcess(desktopFile, execFlags);
53− }
54− }
55−
56− function stopProcess(application) {
57− ApplicationManager.stopProcess(application)
58− }
59−
60− function focusApplication(application) {
61− if (application == null || application == undefined) {
62− return;
63− }
64−
65− ApplicationManager.focusApplication(application.handle);
66− }
67−
68− function unfocusCurrentApplication() {
69− ApplicationManager.unfocusCurrentApplication(ApplicationInfo.MainStage);
70− }
71−
72− function moveRunningApplicationStackPosition(from, to, stage) {
73− var applications;
74− if (stage == ApplicationInfo.SideStage) {
75− applications = ApplicationManager.sideStageApplications;
76− } else {
77− applications = ApplicationManager.mainStageApplications;
78− }
79− // FIXME: applications.move(0, 0) crashes
80− if (from !== to && from >= 0 && to >= 0) applications.move(from, to);
81− }
82−
83− function getApplicationFromDesktopFile(desktopFile, stage) {
84− var foundSideStageApp, foundMainStageApp;
85−
86− foundMainStageApp = __find(desktopFile, ApplicationManager.mainStageApplications)
87− if (stage == ApplicationInfo.MainStage) {
88− return foundMainStageApp;
89− }
90− foundSideStageApp = __find(desktopFile, ApplicationManager.sideStageApplications)
91− if (stage == ApplicationInfo.SideStage) {
92− return foundSideStageApp;
93− }
94−
95− // if stage not specified, return whichever app running on either stage
96− return (foundMainStageApp) ? foundMainStageApp : foundSideStageApp;
97−
98−
99− function __find(desktopFile, applications) {
100− for (var i = 0; i < applications.count; i++ ) {
101− var application = applications.get(i);
102− if (application.desktopFile == desktopFile) {
103− return application;
104− }
105− }
106− return null;
107− }
108− }
109−
110− Connections {
111− target: ApplicationManager
112− onFocusRequested: {
113− // FIXME: hardcoded mapping from ApplicationManager.FavoriteApplications
114− // enum to desktop files
115− var desktopFile
116− if (favoriteApplication == ApplicationManager.CameraApplication) {
117− desktopFile = "/usr/share/applications/camera-app.desktop"
118− } else if (favoriteApplication == ApplicationManager.GalleryApplication) {
119− desktopFile = "/usr/share/applications/gallery-app.desktop"
120− } else if (favoriteApplication == ApplicationManager.ShareApplication) {
121− desktopFile = "/usr/share/applications/share-app.desktop"
122− } else if (favoriteApplication == ApplicationManager.BrowserApplication) {
123− desktopFile = "/usr/share/applications/webbrowser-app.desktop"
124− } else if (favoriteApplication == 4) { // ApplicationManager.PhoneApplication
125− desktopFile = "/usr/share/applications/phone-app.desktop"
126− }
127− applicationManager.focusRequested(desktopFile);
128− }
129− }
130−}
Components/ApplicationScreenshot.qmldeleted−61
@@ -1,61 +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 Ubuntu.Application 0.1
20−
21−Item {
22− id: applicationScreenshot
23−
24− property var application: null
25− property bool withBackground: false
26− property bool ready: applicationImage.ready || withBackground
27−
28− function setApplication(application) {
29− applicationScreenshot.application = application
30− }
31−
32− function clearApplication() {
33− applicationScreenshot.withBackground = false;
34− applicationScreenshot.application = null
35− applicationScreenshot.scheduleUpdate();
36− }
37−
38− function scheduleUpdate() {
39− applicationImage.scheduleUpdate()
40− }
41−
42− function updateFromCache() {
43− applicationImage.updateFromCache()
44− }
45−
46− Rectangle {
47− id: background
48− anchors.fill: parent
49− color: "white"
50− visible: applicationScreenshot.withBackground
51− }
52−
53− ApplicationImage {
54− id: applicationImage
55− objectName: "screenshot image"
56− width: applicationScreenshot.application ? parent.width : 0
57− height: applicationScreenshot.application ? parent.height : 0
58− visible: applicationScreenshot.application != null && ready
59− source: applicationScreenshot.application
60− }
61−}
Components/Carousel.qmldeleted−284
@@ -1,284 +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 "carousel.js" as CarouselJS
20−
21−/*! The Carousel component presents the items of a model in a carousel view. It's similar to a
22− cover flow. But it stops at it's boundaries (therefore no PathView is used).
23− */
24−Item {
25− id: carousel
26−
27− /// The component to be used as delegate. This component has to be derived from BaseCarouselDelegate
28− property Component itemComponent
29− /// Model for the Carousel, which has to be a model usable by a ListView
30− property alias model: listView.model
31− /// A minimal width of a tile can be set here. Per default a best fit will be calculated
32− property alias minimumTileWidth: listView.minimumTileWidth
33− /// Sets the number of tiles that are visible
34− property alias pathItemCount: listView.pathItemCount
35− /// Aspect ratio of the tiles width/height
36− property alias tileAspectRatio: listView.tileAspectRatio
37− /// Used to cache some delegates for performance reasons. See the ListView documentation for details
38− property alias cacheBuffer: listView.cacheBuffer
39− /// Width of the "draw buffer" in pixel. The drawBuffer is an additional area at start/end where
40− /// items drawn, even if it is not in the visible area.
41− /// cacheBuffer controls only the to retain delegates outside the visible area (and is used on top of the drawBuffer)
42− /// see https://bugreports.qt-project.org/browse/QTBUG-29173
43− property int drawBuffer: width / pathItemCount // an "ok" value - but values used from the listView cause loops
44− /// The selected item can be shown in a different size controlled by selectedItemScaleFactor
45− property real selectedItemScaleFactor: 1.1
46−
47− /// Emitted when the user clicked on an item
48− /// @param index is the index of the clicked item
49− /// @param delegateItem is the clicked component/delegate itself
50− /// @param itemY is y of the clicked delegate
51− signal clicked(int index, var delegateItem, real itemY)
52−
53− implicitHeight: listView.tileHeight * selectedItemScaleFactor
54−
55− /* Basic idea behind the carousel effect is to move the items of the delegates (compacting /stuffing them).
56− One drawback is, that more delegates have to be drawn than usually. As some items are moved from the
57− invisible to the visible area. Setting the cacheBuffer does not fix this.
58− See https://bugreports.qt-project.org/browse/QTBUG-29173
59− Therefore the ListView has negative left and right anchors margins, and in addition a header
60− and footer item to compensate that.
61−
62− The scaling of the items is controlled by the variable continuousIndex, described below. */
63− ListView {
64− id: listView
65−
66− property real minimumTileWidth: 0
67− property real newContentX: -1
68− property real pathItemCount: referenceWidth / referenceTileWidth
69− property real tileAspectRatio: 1
70−
71− /* The positioning and scaling of the items in the carousel is based on the variable
72− 'continuousIndex', a continuous real variable between [0, 'carousel.model.count'],
73− roughly representing the index of the item that is prioritised over the others.
74− 'continuousIndex' is not linear, but is weighted depending on if it is close
75− to the beginning of the content (beginning phase), in the middle (middle phase)
76− or at the end (end phase).
77− Each tile is scaled and transformed in proportion to the difference between
78− its own index and continuousIndex.
79− To efficiently calculate continuousIndex, we have these values:
80− - 'gapToMiddlePhase' gap in pixels between beginning and middle phase
81− - 'gapToEndPhase' gap in pixels between middle and end phase
82− - 'kGapEnd' constant used to calculate 'continuousIndex' in end phase
83− - 'kMiddleIndex' constant used to calculate 'continuousIndex' in middle phase
84− - 'kXBeginningEnd' constant used to calculate 'continuousIndex' in beginning and end phase
85− - 'realContentWidth' the width of all the delegates only (without header/footer)
86− - 'realContentX' the 'contentX' of the listview ignoring the 'drawBuffer'
87− - 'realWidth' the 'width' of the listview, as it is used as component. */
88−
89− readonly property real gapToMiddlePhase: Math.min(realWidth / 2 - tileWidth / 2, (realContentWidth - realWidth) / 2)
90− readonly property real gapToEndPhase: realContentWidth - realWidth - gapToMiddlePhase
91− readonly property real kGapEnd: kMiddleIndex * (1 - gapToEndPhase / gapToMiddlePhase)
92− readonly property real kMiddleIndex: (realWidth / 2) / tileWidth - 0.5
93− readonly property real kXBeginningEnd: 1 / tileWidth + kMiddleIndex / gapToMiddlePhase
94− readonly property real maximumItemTranslation: (listView.tileWidth * 3) / listView.scaleFactor
95− readonly property real realContentWidth: contentWidth - 2 * carousel.drawBuffer
96− readonly property real realContentX: contentX + carousel.drawBuffer
97− readonly property real realPathItemCount: Math.min(realWidth / tileWidth, pathItemCount)
98− readonly property real realWidth: carousel.width
99− readonly property real referenceGapToMiddlePhase: realWidth / 2 - tileWidth / 2
100− readonly property real referencePathItemCount: referenceWidth / referenceTileWidth
101− readonly property real referenceWidth: 848
102− readonly property real referenceTileWidth: 175
103− readonly property real scaleFactor: tileWidth / referenceTileWidth
104− readonly property real tileWidth: Math.max(realWidth / pathItemCount, minimumTileWidth)
105− readonly property real tileHeight: tileWidth / tileAspectRatio
106− readonly property real translationXViewFactor: 0.2 * (referenceGapToMiddlePhase / gapToMiddlePhase)
107− readonly property real verticalMargin: (parent.height - tileHeight) / 2
108− readonly property real visibleTilesScaleFactor: realPathItemCount / referencePathItemCount
109−
110− anchors {
111− fill: parent
112− topMargin: verticalMargin
113− bottomMargin: verticalMargin
114− // extending the "drawing area"
115− leftMargin: -carousel.drawBuffer
116− rightMargin: -carousel.drawBuffer
117− }
118−
119− /* The header and footer help to "extend" the area, the listview draws items.
120− This together with anchors.leftMargin and anchors.rightMargin. */
121− header: Item {
122− width: carousel.drawBuffer
123− height: listView.tileHeight
124− }
125− footer: Item {
126− width: carousel.drawBuffer
127− height: listView.tileHeight
128− }
129−
130− boundsBehavior: Flickable.StopAtBounds
131− cacheBuffer: carousel.cacheBuffer
132− flickDeceleration: Math.max(1500 * Math.pow(realWidth / referenceWidth, 1.5), 1500) // 1500 is platform default
133− maximumFlickVelocity: Math.max(2500 * Math.pow(realWidth / referenceWidth, 1.5), 2500) // 2500 is platform default
134− orientation: ListView.Horizontal
135−
136− function itemClicked(index, delegateItem) {
137− var x = CarouselJS.getXFromContinuousIndex(index,
138− realWidth,
139− realContentWidth,
140− tileWidth,
141− gapToMiddlePhase,
142− gapToEndPhase,
143− carousel.drawBuffer)
144−
145− if (Math.abs(x - contentX) < 1) {
146− /* We're clicking the selected item and
147− we're in the neighbourhood of radius 1 pixel from it.
148− Let's emit the clicked signal. */
149− carousel.clicked(index, delegateItem, delegateItem.y)
150− return
151− }
152−
153− stepAnimation.stop()
154− newContentXAnimation.stop()
155−
156− newContentX = x
157− newContentXAnimation.start()
158− }
159−
160− onMovementStarted: {
161− stepAnimation.stop()
162− newContentXAnimation.stop()
163− newContentX = -1
164− }
165− onMovementEnded: {
166− if (realContentX > 0 && realContentX < realContentWidth - realWidth)
167− stepAnimation.start()
168− }
169−
170− SmoothedAnimation {
171− id: stepAnimation
172−
173− target: listView
174− property: "contentX"
175− to: CarouselJS.getXFromContinuousIndex(listView.selectedIndex,
176− listView.realWidth,
177− listView.realContentWidth,
178− listView.tileWidth,
179− listView.gapToMiddlePhase,
180− listView.gapToEndPhase,
181− carousel.drawBuffer)
182− duration: 450
183− velocity: 200
184− easing.type: Easing.InOutQuad
185− }
186−
187− SequentialAnimation {
188− id: newContentXAnimation
189−
190− NumberAnimation {
191− target: listView
192− property: "contentX"
193− from: listView.contentX
194− to: listView.newContentX
195− duration: 300
196− easing.type: Easing.InOutQuad
197− }
198− ScriptAction {
199− script: listView.newContentX = -1
200− }
201− }
202−
203− readonly property int selectedIndex: Math.round(continuousIndex)
204− readonly property real continuousIndex: CarouselJS.getContinuousIndex(listView.realContentX,
205− listView.tileWidth,
206− listView.gapToMiddlePhase,
207− listView.gapToEndPhase,
208− listView.kGapEnd,
209− listView.kMiddleIndex,
210− listView.kXBeginningEnd)
211−
212− property real viewTranslation: CarouselJS.getViewTranslation(listView.realContentX,
213− listView.tileWidth,
214− listView.gapToMiddlePhase,
215− listView.gapToEndPhase,
216− listView.translationXViewFactor)
217−
218− delegate: Loader {
219− property bool explicitlyScaled: explicitScaleFactor == carousel.selectedItemScaleFactor
220− property real explicitScaleFactor: explicitScale ? carousel.selectedItemScaleFactor : 1.0
221− readonly property bool explicitScale: (!listView.moving ||
222− listView.realContentX <= 0 ||
223− listView.realContentX >= listView.realContentWidth - listView.realWidth) &&
224− listView.newContentX < 0 &&
225− index === listView.selectedIndex
226− readonly property real cachedTiles: listView.realPathItemCount + carousel.drawBuffer / listView.tileWidth
227− readonly property real distance: listView.continuousIndex - index
228− readonly property real itemTranslationScale: CarouselJS.getItemScale(0.5,
229− (index + 0.5), // good approximation of scale while changing selected item
230− listView.count,
231− listView.visibleTilesScaleFactor)
232− readonly property real itemScale: CarouselJS.getItemScale(distance,
233− listView.continuousIndex,
234− listView.count,
235− listView.visibleTilesScaleFactor)
236− readonly property real translationX: CarouselJS.getItemTranslation(index,
237− listView.selectedIndex,
238− distance,
239− itemScale,
240− itemTranslationScale,
241− listView.maximumItemTranslation)
242−
243− width: listView.tileWidth
244− height: listView.tileHeight
245− scale: itemScale * explicitScaleFactor
246− sourceComponent: itemComponent
247− z: cachedTiles - Math.abs(index - listView.selectedIndex)
248−
249− transform: Translate {
250− x: listView.viewTranslation + translationX * listView.scaleFactor
251− }
252−
253− Behavior on explicitScaleFactor {
254− SequentialAnimation {
255− ScriptAction {
256− script: if (!explicitScale)
257− explicitlyScaled = false
258− }
259− NumberAnimation {
260− duration: explicitScaleFactor === 1.0 ? 250 : 150
261− easing.type: Easing.InOutQuad
262− }
263− ScriptAction {
264− script: if (explicitScale)
265− explicitlyScaled = true
266− }
267− }
268− }
269−
270− onLoaded: {
271− item.explicitlyScaled = Qt.binding(function() { return explicitlyScaled; })
272− item.model = Qt.binding(function() { return model; })
273− }
274−
275− MouseArea {
276− id: mouseArea
277−
278− anchors.fill: parent
279−
280− onClicked: listView.itemClicked(index, item)
281− }
282− }
283− }
284−}
Components/CrossFadeImage.qmldeleted−149
@@ -1,149 +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−
19−Item {
20− property url source
21−
22− /*
23− * true: fade out old image in parallel with fading in the new one.
24− * false: fade in new image above old one.
25− *
26− * The reason why this is required is that crossfading has the isse that in
27− * the middle of the animation, both images are only 50% opaque which make
28− * any background shine through. Not wanted for background images etc, but
29− * wanted for overlays.
30− */
31− property bool crossFade: true
32−
33− /*
34− * true: the very first source url should be faded in already.
35− * false: the very first source url should just be shown without animation.
36− */
37− property bool fadeInFirst: true
38−
39− readonly property size sourceSize: __currentImage.sourceSize
40− readonly property var status: __currentImage ? __currentImage.status : Image.Null
41− readonly property bool running: crossFadeImages.running || nextImageFadeIn.running
42−
43− property Image __currentImage: image1
44− property Image __nextImage: image2
45−
46− function swapImages() {
47− __currentImage.z = 0
48− __nextImage.z = 1
49− if (crossFade) {
50− crossFadeImages.start();
51− } else {
52− nextImageFadeIn.start();
53− }
54−
55− var tmpImage = __currentImage
56− __currentImage = __nextImage
57− __nextImage = tmpImage
58− }
59−
60− onSourceChanged: {
61− // On creation, the souce handler is called before image pointers are set.
62− if (__currentImage === null) {
63− __currentImage = image1;
64− __nextImage = image2;
65− }
66−
67− crossFadeImages.stop();
68− nextImageFadeIn.stop();
69−
70− // Don't fade in initial picture, only fade changes
71− if (__currentImage.source == "" && !fadeInFirst) {
72− __currentImage.source = source;
73− } else {
74− nextImageFadeIn.stop();
75− __nextImage.opacity = 0.0;
76− __nextImage.source = source;
77−
78− // If case the image is still in QML's cache, status will be "Ready" immediately
79− if (__nextImage.status == Image.Ready || __nextImage.source == "") {
80− swapImages();
81− }
82− }
83− }
84−
85− Connections {
86− target: __nextImage
87− onStatusChanged: {
88− if (__nextImage.status == Image.Ready) {
89− swapImages();
90− }
91− }
92− }
93−
94− Image {
95− id: image1
96− anchors.fill: parent
97− cache: false
98− asynchronous: true
99− z: 1
100− }
101−
102− Image {
103− id: image2
104− anchors.fill: parent
105− cache: false
106− asynchronous: true
107− z: 0
108− }
109−
110− NumberAnimation {
111− id: nextImageFadeIn
112− target: __nextImage
113− property: "opacity"
114− duration: 400
115− to: 1.0
116− easing.type: Easing.InOutQuad
117−
118− onRunningChanged: {
119− if (!running) {
120− __nextImage.source = "";
121− }
122− }
123− }
124−
125− ParallelAnimation {
126− id: crossFadeImages
127− NumberAnimation {
128− target: __nextImage
129− property: "opacity"
130− duration: 400
131− to: 1.0
132− easing.type: Easing.InOutQuad
133− }
134−
135− NumberAnimation {
136− target: __currentImage
137− property: "opacity"
138− duration: 400
139− to: 0
140− easing.type: Easing.InOutQuad
141− }
142−
143− onRunningChanged: {
144− if (!running) {
145− __nextImage.source = "";
146− }
147− }
148− }
149−}
Components/FilterGrid.qmldeleted−137
@@ -1,137 +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 Utils 0.1
20−import "../Components"
21−
22−/*
23− A ResponsiveGridView that can optionally have the number of rows being displayed
24− reduced to collapsedRowCount, in which case a button saying "View all (123)"
25− will be shown at the bottom. If clicked, FilterGrid will them expand vertically
26− to display all rows.
27− */
28−Item {
29− id: root
30−
31− /* If true, the number of elements displayed will be limited by collapsedRowCount.
32− If false, all elements will be displayed, effectively looking the same as a regular
33− ResponsiveGridView. */
34− property bool filter: true
35−
36− /* Whether, when collapsed, a button should be displayed enabling the user to expand
37− the grid to its full size. */
38− property bool expandable: true
39−
40− property var model: null
41−
42− /* Maximum number of rows to be show when filter=true. */
43− property int collapsedRowCount: 2
44−
45− property alias minimumHorizontalSpacing: iconTileGrid.minimumHorizontalSpacing
46− property alias maximumNumberOfColumns: iconTileGrid.maximumNumberOfColumns
47− property alias columns: iconTileGrid.columns
48− property alias delegateWidth: iconTileGrid.delegateWidth
49− property alias delegateHeight: iconTileGrid.delegateHeight
50− property alias verticalSpacing: iconTileGrid.verticalSpacing
51− property alias delegate: iconTileGrid.delegate
52− property alias cellWidth: iconTileGrid.cellWidth
53− property alias cellHeight: iconTileGrid.cellHeight
54− readonly property alias flicking: iconTileGrid.flicking
55− readonly property alias moving: iconTileGrid.moving
56− readonly property alias pressDelay: iconTileGrid.pressDelay
57−
58− height: childrenRect.height
59−
60− ResponsiveGridView {
61− id: iconTileGrid
62−
63− anchors { left: parent.left; right: parent.right }
64− height: totalContentHeight
65− interactive: false
66−
67− minimumHorizontalSpacing: units.gu(0.5)
68− maximumNumberOfColumns: 6
69− delegateWidth: units.gu(11)
70− delegateHeight: units.gu(9.5)
71− verticalSpacing: units.gu(2)
72−
73− model: LimitProxyModel {
74− model: root.model
75− limit: (filter) ? collapsedRowCount * iconTileGrid.columns : -1
76− }
77−
78− }
79−
80− Item {
81− anchors {
82− left: parent.left
83− right: parent.right
84− top: iconTileGrid.bottom
85− }
86− visible: (expandable && filter && model.count > collapsedRowCount * iconTileGrid.columns)
87− height: (visible) ? childrenRect.height + units.gu(2) : 0
88−
89− AbstractButton {
90− id: button
91− objectName: "filterToggleButton"
92−
93− anchors {
94− top: parent.top
95− horizontalCenter: parent.horizontalCenter
96− }
97− width: units.gu(22)
98− height: units.gu(4)
99−
100− UbuntuShape {
101− anchors.fill: parent
102− color: "#33ffffff"
103− radius: "small"
104− }
105−
106− UbuntuShape {
107− id: borderPressed
108−
109− anchors.fill: parent
110− radius: "small"
111− borderSource: ItemStyle.style.borderPressed
112− opacity: button.pressed ? 1.0 : 0.0
113− Behavior on opacity { NumberAnimation { duration: 200; easing.type: Easing.OutQuint } }
114− }
115−
116− Label {
117− anchors {
118− verticalCenter: parent.verticalCenter
119− left: parent.left
120− right: parent.right
121− leftMargin: units.gu(1)
122− rightMargin: units.gu(1)
123− }
124− text: (filter) ? "+ View all (" + model.count + ")" : "- Show fewer"
125− fontSize: "small"
126− color: "#f3f3e7"
127− opacity: 0.6
128− style: Text.Raised
129− styleColor: "black"
130− elide: Text.ElideMiddle
131− horizontalAlignment: Text.AlignHCenter
132− }
133−
134− onClicked: filter = !filter
135− }
136− }
137−}
Components/ListItems/Base.qmldeleted−127
@@ -1,127 +0,0 @@
1−/*
2− * Copyright (C) 2012 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−
20−AbstractButton {
21− id: emptyListItem
22− width: parent ? parent.width : units.gu(31)
23− height: body.height + bottomDividerLine.height
24−
25− /*!
26− \preliminary
27− Specifies whether the list item is selected.
28− */
29− property bool selected: false
30−
31− /*!
32− \preliminary
33− Highlight the list item when it is pressed.
34− This is used to disable the highlighting of the full list item
35− when custom highlighting needs to be implemented (for example in
36− ListItem.Standard which can have a split).
37− */
38− property bool highlightWhenPressed: true
39−
40− /*!
41− \preliminary
42− Set to show or hide the thin bottom divider line (drawn by the \l ThinDivider component).
43− This line is shown by default except in cases where this item is the delegate of a ListView.
44− */
45− property bool showDivider: __showDivider()
46−
47− /*!
48− \internal
49− Method to automatically determine if the bottom divider line should be drawn.
50− This always returns true, unless item is a delegate in a ListView. If in a ListView
51− it will return false only when:
52− + if this is the final item in the list, and ListView.footer is set (again as thin
53− divider line won't look well with footer below it)
54− */
55− function __showDivider() {
56− // if we're not in ListView, always show a thin dividing line at the bottom
57− if (ListView.view !== null) {
58−
59− // if we're last item in ListView don't show divider
60− if (index === ListView.view.model.count - 1) return false;
61− }
62− return true;
63− }
64−
65− property bool __clippingRequired: ListView.view !== null
66− && ListView.view.section.labelPositioning & ViewSection.CurrentLabelAtStart
67−
68− property real __yPositionRelativeToListView: ListView.view ? y - ListView.view.contentY : y
69−
70− property real __heightToClip: {
71− // Check this is in position where clipping is needed
72− if (__clippingRequired && __yPositionRelativeToListView <= __sectionDelegateHeight
73− && __yPositionRelativeToListView > -height) {
74− return Math.min(__sectionDelegateHeight - __yPositionRelativeToListView, height);
75− } else {
76− return 0;
77− }
78− }
79−
80− property int __sectionDelegateHeight: {
81− if (__clippingRequired && ListView.view.hasOwnProperty("__sectionDelegateHeight")) {
82− return ListView.view.__sectionDelegateHeight;
83− } else {
84− return 0;
85− }
86− }
87−
88− /*!
89− \internal
90− Reparent so that the visuals of the children does not
91− occlude the bottom divider line.
92− */
93− default property alias children: body.children
94−
95− Item {
96− id: clippingContainer
97− height: parent.height - __heightToClip
98− anchors { left: parent.left; right: parent.right; bottom: parent.bottom }
99− clip: __heightToClip > 0
100−
101− Item {
102− id: body
103− anchors {
104− left: parent.left
105− right: parent.right
106− bottom: bottomDividerLine.top
107− }
108− height: childrenRect.height
109− }
110−
111− ThinDivider {
112− id: bottomDividerLine
113− anchors.bottom: parent.bottom
114− visible: showDivider
115− }
116−
117− Highlight {
118− anchors {
119− top: parent.top
120− left: parent.left
121− right: parent.right
122− bottom: bottomDividerLine.top
123− }
124− pressed: (emptyListItem.selected || (emptyListItem.highlightWhenPressed && emptyListItem.pressed)) ? "pressed" : ""
125− }
126− }
127−}
Components/ListItems/Header.qmldeleted−73
@@ -1,73 +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−
20−Item {
21− /*!
22− \preliminary
23− The text that is shown as the header text.
24− \qmlproperty string text
25− */
26− property alias text: label.text
27−
28− /* When this header is used in a ListViewWithPageHeader with CurrentLabelAtStart mode, to stop
29− the list's delegates contents being visible through this header, they clip themselves
30− depending on their position. However to allow delegates underlap the bottom X pixels of this
31− header (so delegate appears through ThinDivider say) we set an offset property here. */
32− readonly property int bottomBorderAllowedOverlap: bottomBorder.allowedBottomOverlap
33−
34− height: units.gu(4.5)
35−
36− Item {
37− anchors {
38− left: parent.left
39− right: parent.right
40− top: parent.top
41− bottom: bottomBorder.top
42− }
43−
44− Label {
45− id: label
46− anchors {
47− left: parent.left
48− leftMargin: units.gu(2)
49− right: parent.right
50− rightMargin: units.gu(0.5)
51− verticalCenter: parent.verticalCenter
52− }
53−
54− color: "#f3f3e7" //at 60%
55− opacity: 0.6
56− font.family: "Ubuntu"
57− fontSize: "medium"
58− elide: Text.ElideRight
59− textFormat: Text.PlainText
60− style: Text.Raised
61− styleColor: "black"
62− }
63− }
64−
65− ThinDivider {
66− id: bottomBorder
67− anchors {
68− left: parent.left
69− right: parent.right
70− bottom: parent.bottom
71− }
72− }
73−}
Components/ListItems/Highlight.qmldeleted−46
@@ -1,46 +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−
19−Rectangle {
20− id: highlight
21−
22− property bool pressed: false
23− property real pressedOpacity: 0.3
24−
25− color: "black"
26− opacity: 0
27− state: pressed ? "pressed" : ""
28− states: [
29− State {
30− name: "pressed"
31− PropertyChanges { target: highlight; opacity: pressedOpacity}
32− }
33− ]
34− transitions: [
35− Transition {
36− from: ""
37− to: "pressed"
38− NumberAnimation { target: highlight; property: "opacity"; duration: 50}
39− },
40− Transition {
41− from: "pressed"
42− to: ""
43− NumberAnimation { target: highlight; property: "opacity"; duration: 100}
44− }
45− ]
46−}
Components/ListItems/graphics/ListItemDividerHorizontal@18.pngdeleted

Binary file not shown.

Components/ListItems/graphics/ListItemDividerVertical@18.pngdeleted

Binary file not shown.

Components/ListViewWithPageHeader.qmldeleted−189
@@ -1,189 +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 "Math.js" as MathLocal
19−
20−Item {
21− id: root
22− property Item pageHeader: null
23− property Component sectionDelegate: null
24− property string sectionProperty: ""
25− property alias model: listView.model
26− property alias delegate: listView.delegate
27− property ListView view: listView
28− property alias moving: flicker.moving
29− property alias atYEnd: flicker.atYEnd
30− property bool clipListView: true
31−
32− readonly property real __headerHeight: (pageHeader) ? pageHeader.implicitHeight : 0
33− property real __headerVisibleHeight: __headerHeight
34− readonly property real __overshootHeight: (flicker.contentY < 0) ? -flicker.contentY : 0
35−
36−
37− // TODO move to AnimationController
38− ParallelAnimation {
39− id: headerAnimation
40− property real targetContentY
41− NumberAnimation {
42− target: root
43− property: "__headerVisibleHeight"
44− to: root.__headerHeight
45− duration: 200
46− easing.type: Easing.OutQuad
47− }
48− NumberAnimation {
49− target: listView
50− property: "contentY"
51− to: headerAnimation.targetContentY
52− duration: 200
53− easing.type: Easing.OutQuad
54− }
55− }
56−
57− function positionAtBeginning() {
58− __headerVisibleHeight = __headerHeight
59− flicker.contentY = 0
60− }
61−
62− function showHeader() {
63− headerAnimation.targetContentY = listView.contentY + (__headerHeight - __headerVisibleHeight)
64− headerAnimation.start()
65− }
66−
67− function flick(xVelocity, yVelocity) {
68− flicker.flick(xVelocity, yVelocity);
69− }
70−
71− onPageHeaderChanged: {
72− pageHeader.parent = pageHeaderContainer;
73− pageHeader.anchors.fill = pageHeaderContainer;
74− }
75−
76− Item {
77− id: pageHeaderClipper
78− parent: flicker // parent to Flickable so mouse click events passed through to the header component
79− anchors {
80− top: parent.top
81− left: parent.left
82− right: parent.right
83− }
84− height: __headerVisibleHeight + __overshootHeight
85−
86− Item {
87− id: pageHeaderContainer
88− anchors {
89− left: parent.left
90− right: parent.right
91− bottom: parent.bottom
92− }
93− height: __headerHeight + __overshootHeight
94− }
95− }
96−
97− ListView {
98− id: listView
99− parent: flicker // parent to Flickable so mouse click events passed through to List delegates
100− anchors {
101− left: parent.left
102− right: parent.right
103− top: parent.top
104− topMargin: __headerVisibleHeight
105− }
106− height: root.height
107−
108− // FIXME scrolling workaround, see below
109− cacheBuffer: height*10
110−
111− section.property: sectionProperty
112− section.criteria: ViewSection.FullString
113− section.labelPositioning: ViewSection.InlineLabels | ViewSection.CurrentLabelAtStart
114− section.delegate: sectionDelegate
115−
116− interactive: false
117− clip: root.clipListView
118−
119− property int __sectionDelegateHeight: __getHeight(section.delegate)
120− function __getHeight(component) {
121− // want height (minus allowed overlap) of the section delegate as is needed for clipping
122− if (component === null) return 0;
123− var object = component.createObject(); //FIXME: throws 'section' not defined error
124− var value = object.height - object.bottomBorderAllowedOverlap;
125− object.destroy();
126− return value;
127− }
128−
129− property real previousOriginY: 0
130− onOriginYChanged: {
131− var deltaOriginY = originY - previousOriginY;
132− previousOriginY = originY;
133− /* When originY changes, it causes the top of the flicker and the top of the list to fall
134− out of sync - and thus the contentY positioning will be broken. To correct for this we
135− manually change the flickable's contentY here */
136− flicker.contentY -= deltaOriginY;
137− }
138−
139− /* For case when list content greater than container height and list scrolled down so header
140− hidden. If content shrinks to be smaller than the container height, we want the header to
141− re-appear */
142− property real __previousContentHeight: 0
143− onContentHeightChanged: {
144− var deltaContentHeight = contentHeight - __previousContentHeight;
145− __previousContentHeight = contentHeight;
146− if (contentHeight < height && deltaContentHeight < 0 && __headerVisibleHeight < height - contentHeight) {
147− __headerVisibleHeight = Math.min(height - contentHeight, __headerHeight);
148− }
149− }
150− }
151−
152− Flickable {
153− id: flicker
154− anchors.fill: parent
155− contentHeight: listView.contentHeight + __headerHeight
156− maximumFlickVelocity: height * 10
157− flickDeceleration: height * 2
158− onContentYChanged: {
159− var deltaContentY = contentY - __previousContentY;
160− __previousContentY = contentY;
161−
162− // first decide if movement will prompt the page header to change height
163− if ((deltaContentY < 0 && __headerVisibleHeight >= 0) ||
164− (deltaContentY > 0 && __headerVisibleHeight <= __headerHeight)) {
165−
166− // calculate header height - but prevent bounce from changing it
167− if (contentY > 0 && contentY < contentHeight - height) {
168− __headerVisibleHeight = MathLocal.clamp(__headerVisibleHeight - deltaContentY, 0, __headerHeight);
169− }
170− }
171−
172− // now we move list position, taking into account page header height
173−
174− // BUG: With section headers enabled, the values of originY and contentY appear not
175− // correct at the exact point originY changes. originY changes when the ListView
176− // deletes/creates hidden delegates which are above the visible delegates.
177− // As a result of this bug, you experience jittering scrolling when rapidly moving
178− // around in large lists. See https://bugreports.qt-project.org/browse/QTBUG-27997
179− // A workaround is to use a large enough cacheBuffer to prevent deletions/creations
180− // so effectively originY is always zero.
181− var newContentY = flicker.contentY + listView.originY - __headerHeight + __headerVisibleHeight
182− if (newContentY < listView.contentHeight) {
183− listView.contentY = newContentY;
184− }
185− }
186−
187− property real __previousContentY: 0
188− }
189−}
Components/OpenEffect.qmldeleted−130
@@ -1,130 +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−
19−Item {
20− id: effect
21− property bool enabled: topGapPx != positionPx || bottomGapPx != positionPx
22− property Item sourceItem
23− property ShaderEffectSource source: ShaderEffectSource {
24− sourceItem: effect.enabled ? effect.sourceItem : null
25− hideSource: effect.enabled
26− live: effect.enabled
27− sourceRect: {
28− if (effect.enabled) {
29− Qt.rect(0, -effect.topOverflow, sourceItem.width, sourceItem.height + effect.topOverflow + effect.bottomOverflow)
30− } else {
31− Qt.rect(0, 0, 0, 0)
32− }
33− }
34− }
35−
36− /*!
37− \qmlproperty real positionPx
38− The y coordinate of where to perform the split.
39−
40− \qmlproperty real topGapPx
41− Gap's top edge.
42−
43− \qmlproperty real bottomGapPx
44− Gap's bottom edge.
45−
46− \qmlproperty real topOverflow
47− How much of the sourceItem should be sourced above its bounds.
48−
49− \qmlproperty real bottomOverflow
50− How much of the sourceItem should be sourced below its bounds.
51− */
52−
53− property real positionPx: 0
54− property real topGapPx: 0
55− property real bottomGapPx: height
56− property real topOverflow: 0.0
57− property real bottomOverflow: 0.0
58− property real topOpacity: 1.0
59− property real bottomOpacity: 1.0
60−
61− property real __roundedPositionPx: Math.round(positionPx)
62−
63− ShaderEffect {
64− id: top
65− visible: effect.enabled
66− opacity: topOpacity
67− property ShaderEffectSource source: effect.source
68− property real positionPx: __roundedPositionPx
69− property real factor: effect.height / height
70−
71− clip: true
72−
73− anchors {
74− top: parent.top
75− left: parent.left
76− right: parent.right
77− topMargin: -topOverflow - positionPx + topGapPx
78− }
79− height: topOverflow + positionPx
80−
81− vertexShader: "
82− uniform highp mat4 qt_Matrix;
83− attribute highp vec4 qt_Vertex;
84− attribute highp vec2 qt_MultiTexCoord0;
85− varying highp vec2 qt_TexCoord0;
86− uniform highp float factor;
87−
88− void main() {
89− highp vec4 pos = qt_Vertex;
90− pos.y *= factor;
91− gl_Position = qt_Matrix * pos;
92− qt_TexCoord0 = qt_MultiTexCoord0;
93− }
94− "
95− }
96−
97− ShaderEffect {
98− id: bottom
99− visible: effect.enabled
100− opacity: bottomOpacity
101− property ShaderEffectSource source: effect.source
102− property real offset: effect.topOverflow + __roundedPositionPx
103− property real factor: effect.height / height
104−
105− clip: true
106−
107− anchors {
108− left: parent.left
109− right: parent.right
110− }
111− y: topOverflow + bottomGapPx
112− height: sourceItem.height - positionPx + bottomOverflow
113−
114− vertexShader: "
115− uniform highp mat4 qt_Matrix;
116− attribute highp vec4 qt_Vertex;
117− attribute highp vec2 qt_MultiTexCoord0;
118− varying highp vec2 qt_TexCoord0;
119− uniform highp float factor;
120− uniform highp float offset;
121−
122− void main() {
123− highp vec4 pos = qt_Vertex;
124− pos.y = (pos.y * factor) - offset;
125− gl_Position = qt_Matrix * pos;
126− qt_TexCoord0 = qt_MultiTexCoord0;
127− }
128− "
129− }
130−}
Components/PageHeader.qmldeleted−347
@@ -1,347 +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 Ubuntu.Components.Popups 0.1
20−import Ubuntu.Components.ListItems 0.1 as ListItem
21−
22−Item {
23− /*!
24− \preliminary
25− The text that is shown inside the Page Header
26− \qmlproperty string text
27− */
28− property alias text: label.text
29−
30− property bool searchEntryEnabled: false
31− property alias searchQuery: searchField.text
32− property ListModel searchHistory: SearchHistoryModel {}
33−
34− height: units.gu(8.5)
35− implicitHeight: units.gu(8.5)
36−
37− function triggerSearch() {
38− if (searchEntryEnabled) searchField.forceActiveFocus()
39− }
40−
41− function resetSearch() {
42− if (!searchHistory) return;
43−
44− searchHistory.addQuery(searchField.text);
45− searchField.text = "";
46− searchField.focus = false;
47− }
48−
49− Connections {
50− target: greeter
51− onShownChanged: if (shown) resetSearch()
52− }
53−
54− Flickable {
55− id: header
56− anchors {
57− left: parent.left
58− right: parent.right
59− top: parent.top
60− }
61− height: units.gu(6.5)
62−
63− interactive: false
64− contentHeight: headerContainer.height
65− clip: true
66−
67− contentY: searchField.activeFocus || searchField.text != "" ? searchContainer.y : headerContainer.y
68−
69− Behavior on contentY { NumberAnimation { duration: 200; easing.type: Easing.OutQuad } }
70−
71− // FIXME this could potentially be simplified to avoid all the containers
72− Item {
73− id: headerContainer
74−
75− width: parent.width
76− height: childrenRect.height
77−
78− Item {
79− id: textContainer
80−
81− width: header.width
82− height: header.height
83−
84− Label {
85− id: label
86− anchors {
87− left: parent.left
88− leftMargin: units.gu(2)
89− right: parent.right
90− verticalCenter: parent.verticalCenter
91− }
92−
93− color: "#f3f3e7"
94− opacity: 0.8
95− font.family: "Ubuntu"
96− font.weight: Font.Light
97− fontSize: "x-large"
98− elide: Text.ElideRight
99− style: Text.Raised
100− styleColor: "black"
101− }
102− }
103−
104− Item {
105− id: searchContainer
106− objectName: "searchContainer"
107−
108− visible: searchEntryEnabled
109−
110− property bool narrowMode: parent.width < label.contentWidth + units.gu(50)
111−
112− property bool active: searchField.text != "" || searchField.activeFocus
113− property var popover: null
114−
115− anchors.right: textContainer.right
116− height: header.height
117−
118− state:
119− if (active && narrowMode) "narrowActive"
120− else if (!active && narrowMode) "narrowInactive"
121− else if (active && !narrowMode) "active"
122− else if (!active && !narrowMode) "inactive"
123−
124− function openPopover() {
125− if (searchHistory.count > 0) {
126− searchContainer.popover = PopupUtils.open(popoverComponent, searchField,
127− {
128− "pointerTarget": pointerPositioner,
129− "contentWidth": searchField.width,
130− "edgeMargins": units.gu(1)
131− }
132− )
133− }
134− }
135−
136− function closePopover() {
137− if (searchContainer.popover) PopupUtils.close(searchContainer.popover)
138− }
139−
140− onActiveFocusChanged: if (!activeFocus) { searchHistory.addQuery(searchField.text) }
141−
142− TextField {
143− id: searchField
144−
145− anchors.fill: parent
146− anchors.margins: units.gu(1)
147−
148− hasClearButton: false
149−
150− primaryItem: Button {
151− enabled: searchField.text != ""
152− ItemStyle.class: "transparent-button"
153− onClicked: {
154− if (searchField.text != "") {
155− searchHistory.addQuery(searchField.text)
156− searchField.text = ""
157− }
158− }
159− height: parent.height
160− width: height
161−
162− Image {
163− id: primaryImage
164− anchors {
165− verticalCenter: parent.verticalCenter
166− left: parent.left
167− leftMargin: units.gu(0.5)
168− }
169− width: units.gu(3)
170− height: units.gu(3)
171− }
172−
173− Item {
174− id: pointerPositioner
175− anchors.left: parent.right
176− anchors.leftMargin: units.gu(0.5)
177− anchors.top: parent.bottom
178− }
179− }
180−
181− onTextChanged: {
182− if (text != "") searchContainer.closePopover()
183− else if (text == "" && activeFocus) searchContainer.openPopover()
184− }
185−
186− onActiveFocusChanged: {
187− if (!activeFocus) searchContainer.closePopover()
188− }
189− }
190−
191− states: [
192− State {
193− name: "wide"
194− AnchorChanges { target: textContainer; anchors.top: headerContainer.top }
195− AnchorChanges { target: searchContainer; anchors.left: undefined; anchors.top: textContainer.top }
196− },
197− State {
198− name: "narrow"
199− PropertyChanges { target: searchField; highlighted: true }
200− AnchorChanges { target: textContainer; anchors.top: searchContainer.bottom }
201− AnchorChanges { target: searchContainer; anchors.left: headerContainer.left; anchors.top: headerContainer.top }
202− },
203− State {
204− name: "active"
205− extend: "wide"
206− PropertyChanges { target: searchContainer; width: units.gu(40) }
207− PropertyChanges { target: primaryImage; source: searchField.text ? "../Dash/graphics/icon_clear.png" : "../Dash/graphics/icon_search_active.png" }
208− PropertyChanges { target: searchField; highlighted: true }
209− },
210− State {
211− name: "inactive"
212− extend: "wide"
213− PropertyChanges { target: searchContainer; width: units.gu(25) }
214− PropertyChanges { target: primaryImage; source: "../Dash/graphics/icon_search_inactive.png" }
215− PropertyChanges { target: searchField; highlighted: false }
216− },
217− State {
218− name: "narrowActive"
219− extend: "narrow"
220− PropertyChanges { target: header; contentY: 0 }
221− PropertyChanges { target: primaryImage; source: searchField.text ? "../Dash/graphics/icon_clear.png" : "../Dash/graphics/icon_search_active.png" }
222− },
223− State {
224− name: "narrowInactive"
225− extend: "narrow"
226− PropertyChanges { target: header; contentY: header.height }
227− PropertyChanges { target: primaryImage; source: searchField.text ? "../Dash/graphics/icon_clear.png" : "../Dash/graphics/icon_search_active.png" }
228− }
229− ]
230−
231− transitions: [
232− Transition {
233− to: "active"
234− SequentialAnimation {
235− ParallelAnimation {
236− NumberAnimation { targets: [searchContainer, searchField]; property: "width"; duration: 200; easing.type: Easing.InOutQuad }
237− PropertyAction { target: primaryImage; property: "source" }
238− AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
239− }
240− ScriptAction { script: searchContainer.openPopover() }
241− }
242− },
243− Transition {
244− to: "inactive"
245− ScriptAction { script: searchContainer.closePopover() }
246− NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.InOutQuad }
247− AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
248− },
249− Transition {
250− to: "narrowActive"
251− SequentialAnimation {
252− ParallelAnimation {
253− NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.OutQuad }
254− AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
255− }
256− ScriptAction { script: searchContainer.openPopover() }
257− }
258− },
259− Transition {
260− to: "narrowInactive"
261− ScriptAction { script: searchContainer.closePopover() }
262− NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.OutQuad }
263− AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
264− }
265− ]
266−
267− Component {
268− id: popoverComponent
269− Popover {
270− id: popover
271−
272− // FIXME: this should go into the first item below, but enable: false
273− // prevents mouse events propagation
274− Button {
275− ItemStyle.class: "transparent-button"
276− anchors {
277− top: parent.top
278− right: parent.right
279− }
280− height: units.gu(6)
281− width: height
282−
283− onClicked: searchContainer.closePopover()
284−
285− Image {
286− anchors.centerIn: parent
287− width: units.gu(2)
288− height: units.gu(2)
289− source: "../Dash/graphics/icon_listview_clear.png"
290− }
291− }
292−
293− Column {
294− anchors {
295− top: parent.top
296− left: parent.left
297− right: parent.right
298− }
299−
300− ListItem.Standard { enabled: false; text: i18n.tr("Recent searches") }
301−
302− Repeater {
303− id: recentSearches
304− model: searchHistory
305−
306− delegate: ListItem.Standard {
307− showDivider: index < recentSearches.count - 1
308− text: query
309− onClicked: {
310− searchHistory.addQuery(text)
311− searchField.text = text
312− }
313− }
314− }
315− }
316− }
317− }
318−
319− InverseMouseArea {
320− enabled: searchField.activeFocus
321−
322− anchors {
323− top: parent.top
324− left: parent.left
325− right: parent.right
326− }
327−
328− height: searchContainer.popover ? parent.height + searchContainer.popover.contentHeight + units.gu(2) : parent.height
329−
330− onPressed: searchField.focus = false
331− }
332− }
333− }
334− }
335−
336− BorderImage {
337− id: bottomBorder
338− anchors {
339− top: header.bottom
340− left: parent.left
341− right: parent.right
342− bottom: parent.bottom
343− }
344−
345− source: "graphics/PageHeaderBaseDivider.sci"
346− }
347−}
Components/RatingStars.qmldeleted−41
@@ -1,41 +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−
19−Row {
20− id: root
21− property int rating
22− property int maximumRating: 5
23− property int starCount: 5
24− height: childrenRect.height
25− width: childrenRect.width
26−
27− readonly property int effectiveRating: Math.max(0, Math.min(root.starCount * root.rating / root.maximumRating, root.maximumRating))
28−
29− Repeater {
30− model: root.effectiveRating
31− Image {
32− source: "graphics/icon_star_on.png"
33− }
34− }
35− Repeater {
36− model: root.starCount - root.effectiveRating
37− Image {
38− source: "graphics/icon_star_off.png"
39− }
40− }
41−}
Components/ResponsiveFlowView.qmldeleted−81
@@ -1,81 +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−
20−Item {
21− id: root
22−
23− property int minimumHorizontalSpacing: units.gu(0.5)
24− // property int minimumNumberOfColumns: 2 // FIXME: not implemented
25− property int maximumNumberOfColumns: 6
26− readonly property int columns: flow.columns
27− property alias verticalSpacing: flow.verticalSpacing
28− property alias horizontalSpacing: flow.horizontalSpacing
29− property int referenceDelegateWidth
30− property alias firstModel: repeater1.model
31− property alias secondModel: repeater2.model
32− property alias delegate: repeater1.delegate
33− readonly property int cellWidth: referenceDelegateWidth + horizontalSpacing
34− readonly property int cellHeight: referenceDelegateWidth + verticalSpacing
35− property alias move: flow.move
36−
37− height: flow.height + flow.anchors.topMargin
38−
39− Flow {
40− id: flow
41− anchors {
42− left: parent.left
43− right: parent.right
44− top: parent.top
45− leftMargin: margin/2
46− rightMargin: margin/2
47− topMargin: verticalSpacing
48− }
49−
50− function pixelToGU(value) {
51− return Math.floor(value / units.gu(1));
52− }
53−
54− function spacingForColumns(columns) {
55− // spacing between columns as an integer number of GU, the remainder goes in the margins
56− var spacingGU = pixelToGU(allocatableVerticalSpace / columns);
57− return units.gu(spacingGU);
58− }
59−
60− function columnsForSpacing(space) {
61− // minimum margin is half of the spacing
62− return Math.floor((parent.width - space/2) / (referenceDelegateWidth + space));
63− }
64−
65− property real allocatableVerticalSpace: parent.width - columns * referenceDelegateWidth
66− property int columns: Math.min(columnsForSpacing(minimumHorizontalSpacing), maximumNumberOfColumns)
67− property real horizontalSpacing: spacingForColumns(columns)
68− property real verticalSpacing: horizontalSpacing
69− property int margin: allocatableVerticalSpace - columns * horizontalSpacing
70−
71− Repeater {
72− id: repeater1
73− model: (root.model) ? root.model[0] : null
74− }
75− Repeater {
76− id: repeater2
77− model: (root.model) ? root.model[1] : null
78− delegate: repeater1.delegate
79− }
80− }
81−}
Components/ResponsiveGridView.qmldeleted−76
@@ -1,76 +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−
20−/*
21− Essentially a GridView where you can specify the maximum number of columns it can have.
22− */
23−Item {
24− property int minimumHorizontalSpacing: units.gu(0.5)
25− // property int minimumNumberOfColumns: 2 // FIXME: not implemented
26− property int maximumNumberOfColumns: 6
27− readonly property int columns: gridView.columns
28− property alias verticalSpacing: gridView.verticalSpacing
29− property int delegateWidth
30− property int delegateHeight
31− property alias model: gridView.model
32− property alias delegate: gridView.delegate
33− readonly property int cellWidth: gridView.cellWidth
34− readonly property int cellHeight: gridView.cellHeight
35− readonly property int totalContentHeight: Math.ceil(gridView.model.count / columns) * cellHeight + verticalSpacing
36− property alias interactive: gridView.interactive
37− readonly property alias flicking: gridView.flicking
38− readonly property alias moving: gridView.moving
39− readonly property alias pressDelay: gridView.pressDelay
40−
41− GridView {
42− id: gridView
43− objectName: "responsiveGridViewGrid"
44− anchors {
45− fill: parent
46− leftMargin: margin/2
47− rightMargin: margin/2
48− topMargin: verticalSpacing
49− }
50− clip: parent.height != totalContentHeight
51−
52− function pixelToGU(value) {
53− return Math.floor(value / units.gu(1));
54− }
55−
56− function spacingForColumns(columns) {
57− // spacing between columns as an integer number of GU, the remainder goes in the margins
58− var spacingGU = pixelToGU(allocatableHorizontalSpace / columns);
59− return units.gu(spacingGU);
60− }
61−
62− function columnsForSpacing(spacing) {
63− // minimum margin is half of the spacing
64− return Math.floor((parent.width - spacing/2) / (delegateWidth + spacing));
65− }
66−
67− property real allocatableHorizontalSpace: parent.width - columns * delegateWidth
68− property int columns: Math.min(columnsForSpacing(minimumHorizontalSpacing), maximumNumberOfColumns)
69− property real horizontalSpacing: spacingForColumns(columns)
70− property real verticalSpacing: horizontalSpacing
71− property int margin: allocatableHorizontalSpace - columns * horizontalSpacing
72−
73− cellWidth: delegateWidth + horizontalSpacing
74− cellHeight: delegateHeight + verticalSpacing
75− }
76−}
Components/Revealer.qmldeleted−242
@@ -1,242 +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 "Math.js" as MathLocal
20−
21−Item {
22− id: revealer
23−
24− property Showable target
25− property var hintingAnimation: hintingAnimation
26− property string boundProperty: orientation == Qt.Vertical ? "y" : "x"
27− property int orientation: Qt.Vertical
28− property int direction: Qt.LeftToRight
29− property real openedValue: orientation == Qt.Vertical ? y : x
30− property real closedValue: orientation == Qt.Vertical ? y + (direction == Qt.LeftToRight ? -height : height) : x + (direction == Qt.LeftToRight ? -width : width)
31− property real hintDisplacement: 0
32− property real handleSize: units.gu(2)
33− property real dragVelocity: draggingArea.dragVelocity != 0 ? Math.abs(draggingArea.dragVelocity) : -1
34− property real dragVelocityThreshold: units.gu(5)
35− property bool dragging: false
36− property bool pressed: draggingArea.pressed
37− property int lateralPosition: draggingArea.lateralPosition
38− property real dragPosition
39− property bool openOnPress: true
40−
41− signal openPressed(int mouseX, int mouseY)
42− signal openReleased(int mouseX, int mouseY)
43− signal closePressed
44− signal openClicked
45− signal closeClicked
46−
47− dragPosition: {
48− var value
49− if (orientation == Qt.Vertical) {
50− value = draggingArea.dragValue + draggingArea.y
51− if (direction == Qt.RightToLeft) {
52− value += draggingArea.height - height
53− }
54− } else {
55− value = draggingArea.dragValue + draggingArea.x
56− if (direction == Qt.RightToLeft) {
57− value += draggingArea.width - width
58− }
59− }
60− if (__opened) {
61− if (direction == Qt.LeftToRight) {
62− value += handleSize
63− } else {
64− value -= handleSize
65− }
66− } else if (dragging) {
67− if (direction == Qt.LeftToRight) {
68− value += hintDisplacement
69− } else {
70− value -= hintDisplacement
71− }
72− }
73−
74− return value
75− }
76− property var draggingArea: leftDraggingArea.enabled ? leftDraggingArea : rightDraggingArea
77−
78− property real __hintValue: closedValue + (direction == Qt.LeftToRight ? hintDisplacement : -hintDisplacement)
79−
80− function dragToValue(dragPosition) {
81− return dragPosition + closedValue
82− }
83−
84− property bool __opened: target.shown
85− enabled: target.available
86−
87− // Can be replaced with a fake implementation during tests
88− // property var __getCurrentTimeMs: function () { return new Date().getTime() }
89− property var __dateTime: new function() {
90− this.getCurrentTimeMs = function() {return new Date().getTime()}
91− }
92−
93− Component.onCompleted: target[boundProperty] = __opened ? openedValue : closedValue
94− onOpenedValueChanged: if (__opened && !dragging) target[boundProperty] = openedValue
95− onClosedValueChanged: if (!__opened && !dragging) target[boundProperty] = closedValue
96−
97− function __computeValue(dragPosition) {
98− return MathLocal.clamp(dragToValue(dragPosition), __hintValue, openedValue)
99− }
100−
101− function __open() {
102− hintingAnimation.stop()
103− target.show()
104− }
105−
106− function __close() {
107− hintingAnimation.stop()
108− target.hide()
109− }
110−
111− function __hint() {
112− target.showAnimation.stop()
113− target.hideAnimation.stop()
114− hintingAnimation.restart()
115− }
116−
117− function __settle() {
118− hintingAnimation.stop()
119− if (__opened) target.show()
120− else target.hide()
121− }
122−
123− function __startDragging() {
124− hintingAnimation.stop()
125− dragging = true
126− }
127−
128− function __endDragging(dragVelocity) {
129− dragging = false
130− if (revealer.direction == Qt.RightToLeft) {
131− dragVelocity = -dragVelocity
132− }
133− if (Math.abs(dragVelocity) >= dragVelocityThreshold) {
134− if (dragVelocity > 0) __open()
135− else __close()
136− } else {
137− __settle()
138− }
139− }
140−
141− Binding {
142− id: dragBinding
143−
144− target: revealer.target
145− property: revealer.boundProperty
146− value: __computeValue(dragPosition)
147− when: dragging
148− }
149−
150− SmoothedAnimation {
151− id: hintingAnimation
152−
153− target: revealer.target
154− property: revealer.boundProperty
155− duration: 150
156− to: revealer.__hintValue
157− }
158−
159− DraggingArea {
160− id: leftDraggingArea
161−
162− property bool isOpeningArea: revealer.direction == Qt.LeftToRight
163−
164− height: orientation == Qt.Vertical ? handleSize : parent.height
165− width: orientation == Qt.Horizontal ? handleSize : parent.width
166− orientation: revealer.orientation
167− enabled: isOpeningArea ? !revealer.__opened : revealer.__opened
168−
169− __dateTime: revealer.__dateTime
170−
171− onPressed: {
172− if (isOpeningArea) {
173− if (revealer.openOnPress) {
174− revealer.openPressed(mouseX, mouseY)
175− __hint()
176− }
177− } else {
178− revealer.closePressed()
179− }
180− }
181− onReleased: {
182− if (isOpeningArea && revealer.openOnPress) {
183− revealer.openReleased(mouseX, mouseY)
184− __settle()
185− }
186− }
187− onDragStart: __startDragging()
188− onDragEnd: __endDragging(dragVelocity)
189− onClicked: {
190− if (clickValidated) {
191− if (isOpeningArea) {
192− if (revealer.openOnPress) revealer.openClicked()
193− } else {
194− revealer.closeClicked()
195− }
196− }
197− }
198− }
199−
200− DraggingArea {
201− id: rightDraggingArea
202−
203− property bool isOpeningArea: revealer.direction == Qt.RightToLeft
204−
205− x: orientation == Qt.Vertical ? 0 : parent.width - width
206− y: orientation == Qt.Vertical ? parent.height - height : 0
207− height: orientation == Qt.Vertical ? handleSize : parent.height
208− width: orientation == Qt.Horizontal ? handleSize : parent.width
209− orientation: revealer.orientation
210− enabled: isOpeningArea ? !revealer.__opened : revealer.__opened
211−
212− __dateTime: revealer.__dateTime
213−
214− onPressed: {
215− if (isOpeningArea) {
216− if (revealer.openOnPress) {
217− revealer.openPressed(mouseX, mouseY)
218− __hint()
219− }
220− } else {
221− revealer.closePressed()
222− }
223− }
224− onReleased: {
225− if (isOpeningArea && revealer.openOnPress) {
226− revealer.openReleased(mouseX, mouseY)
227− __settle()
228− }
229− }
230− onDragStart: __startDragging()
231− onDragEnd: __endDragging(dragVelocity)
232− onClicked: {
233− if (clickValidated) {
234− if (isOpeningArea) {
235− if (revealer.openOnPress) revealer.openClicked()
236− } else {
237− revealer.closeClicked()
238− }
239− }
240− }
241− }
242−}
Components/Stage.qmldeleted−542
@@ -1,542 +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.Application 0.1
19−import Ubuntu.Components 0.1
20−import Ubuntu.Gestures 0.1
21−
22−/*
23− Responsible for application switching.
24−
25− Drag from the right edge to switch to the next application.
26− While being dragged, this component will show an animation for the user to
27− visualize that he's changing the stacking of applications (next/new app comes from
28− right edge and current/old app fades out).
29− */
30−Showable {
31− id: stage
32−
33− width: units.gu(40)
34− height: units.gu(71)
35−
36− property int type: ApplicationInfo.MainStage
37− property var applicationManager
38− readonly property var applications:
39− type == ApplicationInfo.MainStage ? applicationManager.mainStageApplications
40− : applicationManager.sideStageApplications
41− property bool fullyShown: false
42− readonly property var focusedApplication:
43− type == ApplicationInfo.MainStage ? applicationManager.mainStageFocusedApplication
44− : applicationManager.sideStageFocusedApplication
45− property bool shouldUseScreenshots: true
46−
47− /* Will be true whenever application screenshots are being shown.
48− i.e. during application window transitions */
49− readonly property bool usingScreenshots: {
50− if (newApplicationScreenshot.application != null && oldApplicationScreenshot.application != null) {
51− return newApplicationScreenshot.ready && oldApplicationScreenshot.ready;
52− } else {
53− return newApplicationScreenshot.ready || oldApplicationScreenshot.ready;
54− }
55− }
56−
57− property bool rightEdgeEnabled: true
58− property bool switchingFromFullscreenToFullscreen: false
59−
60− property alias rightEdgeDraggingAreaWidth: rightEdgeDraggingArea.width
61−
62− // Y coordinate for non-fullscreen applications
63− property int normalApplicationY: 0
64−
65− function activateApplication(desktopFile, addDelay) {
66− var application = applicationManager.getApplicationFromDesktopFile(desktopFile, stage.type);
67− if (application != null && application == stage.focusedApplication) {
68− stage.show();
69− return;
70− }
71−
72− showStartingApplicationAnimation.prepare(application);
73− if (!stage.fullyShown) {
74− // if launching this app reveals the stage, make new application screenshot visible
75− newApplicationScreenshot.visible = true;
76− stage.show();
77− } else {
78− showStartingApplicationAnimation.start();
79− }
80−
81− if (addDelay) {
82− stage.__startingApplicationDesktopFile = desktopFile;
83− }
84− }
85−
86− /* Keep a reference to the focused application so that we can safely
87− unfocus it when the stage is not fully shown and refocus it when the stage
88− is fully shown again.
89− */
90− property var focusedApplicationWhenUsingScreenshots
91− onShouldUseScreenshotsChanged: {
92− if (showStartingApplicationAnimation.running || switchToApplicationAnimation.running) {
93− return;
94− }
95−
96− if (shouldUseScreenshots) {
97− stage.__focusApplicationUsingScreenshots(stage.focusedApplication);
98− } else {
99− stage.__focusActualApplication(stage.focusedApplicationWhenUsingScreenshots);
100− }
101− }
102−
103−
104− property Item newApplicationScreenshot: ApplicationScreenshot {
105− parent: stage
106− width: stage.width
107− height: stage.height - y
108− }
109− property Item oldApplicationScreenshot: ApplicationScreenshot {
110− parent: stage
111− width: stage.width
112− height: stage.height - y
113− }
114−
115− function __getApplicationIndex(application) {
116− if (!application)
117− return -1
118− for (var i = 0; i < stage.applications.count; i++ ) {
119− if (stage.applications.get(i).desktopFile == application.desktopFile) {
120− return i
121− }
122− }
123− return -1
124− }
125−
126−
127− property string __startingApplicationDesktopFile
128−
129− Timer {
130− id: delayedHideScreenshots
131− interval: 500 // on Galaxy Nexus, Telephony app is slowest application to draw a frame so needs this delay
132− onTriggered: {
133− __hideScreenshots();
134− }
135− }
136−
137− function __hideScreenshots() {
138− newApplicationScreenshot.clearApplication();
139− oldApplicationScreenshot.clearApplication();
140− newApplicationScreenshot.visible = false;
141− oldApplicationScreenshot.visible = false;
142− }
143−
144− function __focusApplication(application) {
145− if (!application) return
146− if (shouldUseScreenshots) {
147− stage.__focusApplicationUsingScreenshots(application);
148− } else {
149− stage.__focusActualApplication(application);
150− }
151− }
152−
153−
154− function __focusActualApplication(application) {
155− if (application == null) {
156− return;
157− }
158−
159− if (stage.focusedApplication == application) {
160− /* FIXME: this case is reached when showing the sidestage, we
161− need to refocus the side stage app in order to show it.
162− FIXME: this case is reached when doing a right edge swipe
163− while in the dash to bring back the stage.
164− FIXME: this case is reached when showStartingApplicationAnimation
165− finishes after the newly started application has been focused
166− automatically by the ApplicationManager.
167− */
168− if (stage.type == ApplicationInfo.SideStage) {
169− applicationManager.focusApplication(application);
170− }
171− if (!delayedHideScreenshots.running) {
172− stage.__hideScreenshots();
173− }
174− } else {
175− /* FIXME: calling ApplicationManager::focusApplication does not focus
176− the application immediately nor show the application's surface
177− immediately. Delay hiding the screenshots until it has done so.
178− */
179− delayedHideScreenshots.stop();
180− applicationManager.focusApplication(application);
181− }
182− stage.focusedApplicationWhenUsingScreenshots = null;
183− }
184−
185− function __focusApplicationUsingScreenshots(application) {
186− delayedHideScreenshots.stop();
187− if (application == null) {
188− return;
189− }
190−
191− if (newApplicationScreenshot.application != null) {
192− stage.focusedApplicationWhenUsingScreenshots = application;
193− return;
194− }
195−
196− newApplicationScreenshot.setApplication(application);
197− newApplicationScreenshot.scheduleUpdate();
198− newApplicationScreenshot.opacity = 1.0;
199− newApplicationScreenshot.x = 0.0;
200− newApplicationScreenshot.y = __getApplicationY(application);
201− newApplicationScreenshot.scale = 1.0;
202− newApplicationScreenshot.visible = true;
203− stage.focusedApplicationWhenUsingScreenshots = application;
204− stage.switchingFromFullscreenToFullscreen = false;
205− }
206−
207− function __getApplicationY(application) {
208− return Qt.binding( function(){
209− return (application && application.fullscreen
210− && application.stage !== ApplicationInfo.SideStage)
211− ? 0 : normalApplicationY;
212− } )
213− }
214−
215− /* FIXME: should hide the screenshots when the focused application's surface
216− is visible. There is no API in QtUbuntu to support that yet.
217− */
218− Connections {
219− target: stage
220− onFocusedApplicationChanged: {
221− if (stage.focusedApplication != null) {
222− /* Move application to the beginning of the list of running applications */
223− var index = stage.__getApplicationIndex(stage.focusedApplication);
224− applicationManager.moveRunningApplicationStackPosition(index, 0, stage.type);
225−
226− var startingApplication = applicationManager.getApplicationFromDesktopFile(
227− stage.__startingApplicationDesktopFile, stage.type);
228−
229− if (stage.focusedApplication == startingApplication) {
230− stage.__startingApplicationDesktopFile = "";
231−
232− /* Screenshots might still be in use at this point and their
233− use can be stopped before delayedHideScreenshots is complete.
234− Prepare for that case by setting appropriately
235− stage.focusedApplicationWhenUsingScreenshots.
236− */
237− stage.focusedApplicationWhenUsingScreenshots = stage.focusedApplication;
238−
239− /* FIXME: should hide the screenshots when the focused application's window
240− is visible. There is no API in qtubuntu to support that yet. Therefore
241− we delay their hiding to avoid a state where neither the screenshot nor
242− the application's window is visible.
243− */
244− delayedHideScreenshots.start();
245− } else {
246− stage.__hideScreenshots();
247− }
248− }
249− }
250− }
251−
252−
253− SequentialAnimation {
254− id: showStartingApplicationAnimation
255−
256− function prepare(newApplication) {
257− var oldApplication = stage.focusedApplication;
258− newApplicationScreenshot.setApplication(newApplication);
259− newApplicationScreenshot.updateFromCache();
260− oldApplicationScreenshot.setApplication(oldApplication);
261− oldApplicationScreenshot.scheduleUpdate();
262− newApplicationScreenshot.withBackground = true; // FIXME: should be withBackground = newApplication.state == Application.Starting
263− newApplicationScreenshot.y = __getApplicationY(newApplication);
264− oldApplicationScreenshot.y = __getApplicationY(oldApplication);
265− stage.focusedApplicationWhenUsingScreenshots = newApplication;
266− stage.switchingFromFullscreenToFullscreen = false;
267− }
268−
269− PropertyAction {target: newApplicationScreenshot; property: "visible"; value: false}
270− PropertyAction {target: oldApplicationScreenshot; property: "visible"; value: false}
271− PropertyAction {target: newApplicationScreenshot; property: "z"; value: 0}
272− PropertyAction {target: oldApplicationScreenshot; property: "z"; value: 1}
273− PropertyAction {target: newApplicationScreenshot; property: "scale"; value: 0.8}
274− PropertyAction {target: oldApplicationScreenshot; property: "scale"; value: 1.0}
275− PropertyAction {target: newApplicationScreenshot; property: "opacity"; value: 0.0}
276− PropertyAction {target: oldApplicationScreenshot; property: "opacity"; value: 1.0}
277− PropertyAction {target: newApplicationScreenshot; property: "x"; value: 0.0}
278− PropertyAction {target: oldApplicationScreenshot; property: "x"; value: 0.0}
279−
280− ParallelAnimation {
281− PropertyAction {target: newApplicationScreenshot; property: "visible"; value: true}
282− NumberAnimation {
283− target: newApplicationScreenshot
284− property: "scale"
285− duration: 500
286− easing.type: Easing.OutQuad
287− to: 1.0
288− }
289− NumberAnimation {
290− target: newApplicationScreenshot
291− property: "opacity"
292− duration: 500
293− easing.type: Easing.OutQuad
294− to: 1.0
295− }
296−
297− PropertyAction {target: oldApplicationScreenshot; property: "visible"; value: true}
298−
299− NumberAnimation {
300− target: oldApplicationScreenshot
301− property: "x"
302− duration: 400
303− easing.type: Easing.OutQuad
304− to: stage.width
305− }
306− }
307−
308− ScriptAction {
309− script: {
310− if (!stage.focusedApplicationWhenUsingScreenshots) {
311− // FIXME: only here to support case where application does
312− // not exist yet but is about to
313− return;
314− }
315−
316− stage.__focusApplication(stage.focusedApplicationWhenUsingScreenshots);
317− }
318− }
319− }
320−
321−
322− SequentialAnimation {
323− id: switchToApplicationAnimation
324−
325− function prepare(newApplication) {
326− var oldApplication = stage.focusedApplication;
327− newApplicationScreenshot.setApplication(newApplication);
328− newApplicationScreenshot.updateFromCache();
329− oldApplicationScreenshot.setApplication(oldApplication);
330− oldApplicationScreenshot.scheduleUpdate();
331− newApplicationScreenshot.withBackground = false;
332− newApplicationScreenshot.y = __getApplicationY(newApplication);
333− oldApplicationScreenshot.y = __getApplicationY(oldApplication);
334− stage.focusedApplicationWhenUsingScreenshots = newApplication;
335− stage.switchingFromFullscreenToFullscreen = newApplication && newApplication.fullscreen;
336− }
337−
338− PropertyAction {target: newApplicationScreenshot; property: "visible"; value: false}
339− PropertyAction {target: oldApplicationScreenshot; property: "visible"; value: false}
340− PropertyAction {target: newApplicationScreenshot; property: "z"; value: 1}
341− PropertyAction {target: oldApplicationScreenshot; property: "z"; value: 0}
342− PropertyAction {target: newApplicationScreenshot; property: "scale"; value: 1.0}
343− PropertyAction {target: oldApplicationScreenshot; property: "scale"; value: 1.0}
344− PropertyAction {target: newApplicationScreenshot; property: "opacity"; value: 1.0}
345− PropertyAction {target: oldApplicationScreenshot; property: "opacity"; value: 1.0}
346− PropertyAction {target: newApplicationScreenshot; property: "x"; value: stage.width}
347− PropertyAction {target: oldApplicationScreenshot; property: "x"; value: 0.0}
348− PropertyAction {target: newApplicationScreenshot; property: "visible"; value: true}
349− PropertyAction {target: oldApplicationScreenshot; property: "visible"; value: true}
350−
351− ParallelAnimation {
352− NumberAnimation {
353− target: oldApplicationScreenshot
354− property: "scale"
355− duration: 500
356− easing.type: Easing.OutQuad
357− to: 0.8
358− }
359− NumberAnimation {
360− target: oldApplicationScreenshot
361− property: "opacity"
362− duration: 500
363− easing.type: Easing.OutQuad
364− to: 0.0
365− }
366−
367− NumberAnimation {
368− target: newApplicationScreenshot
369− property: "x"
370− duration: 500
371− easing.type: Easing.OutQuad
372− to: 0
373− }
374− }
375−
376− ScriptAction {
377− script: {
378− // move previously focused application to the end of the list of running applications
379− var oldApplication = oldApplicationScreenshot.application;
380− if (oldApplication != null) {
381− var oldApplicationIndex = stage.__getApplicationIndex(oldApplicationScreenshot.application);
382− applicationManager.moveRunningApplicationStackPosition(
383− oldApplicationIndex, stage.applications.count - 1, stage.type);
384− }
385−
386− stage.__focusApplication(stage.focusedApplicationWhenUsingScreenshots);
387− }
388− }
389− }
390−
391−
392− function __dragValueToProgress(dragValue, startValue, applicationsCount) {
393− if (applicationsCount == 0) {
394− return 0;
395− } else if (applicationsCount == 1) {
396− // prevent the current app from moving more than 1/4 of the screen
397− var elasticValue = __elastic(dragValue, startValue/4);
398− return elasticValue / startValue;
399− } else {
400− return dragValue / startValue;
401− }
402− }
403−
404− function __elastic(x, limit) {
405− return limit * ( 1 - Math.pow( ( limit - 1 ) / limit, x ) )
406− }
407−
408− property real __startValue: stage.width
409−
410− AnimationControllerWithSignals {
411− id: switchToApplicationAnimationController
412−
413− onAnimationCompletedAtBeginning: {
414− animation = null;
415− stage.__focusApplication(oldApplicationScreenshot.application);
416− }
417− }
418−
419− AxisVelocityCalculator {
420− id: dragVelocityCalculator
421− trackedPosition: rightEdgeDraggingArea.distance
422− }
423−
424− DirectionalDragArea {
425− id: rightEdgeDraggingArea
426−
427− enabled: {
428− if (status == DirectionalDragArea.WaitingForTouch) {
429− return switchToApplicationAnimationController.completed
430− && stage.applications.count > 0 && stage.rightEdgeEnabled
431− && !delayedHideScreenshots.running
432− } else {
433− return true
434− }
435− }
436− width: units.gu(2)
437− anchors.top: parent.top
438− anchors.bottom: parent.bottom
439− anchors.right: parent.right
440−
441− direction: Direction.Leftwards
442− maxDeviation: units.gu(1)
443− wideningAngle: 20
444− distanceThreshold: units.gu(3)
445− minSpeed: units.gu(5)
446−
447− onDistanceChanged: {
448− if (status !== DirectionalDragArea.Recognized)
449− return
450−
451− var targetProgress = __dragValueToProgress(-distance, __startValue,
452− stage.applications.count)
453− var delta = targetProgress - switchToApplicationAnimationController.progress
454−
455− // When the gesture finally gets recognized, the finger will likely be
456− // reasonably far from the edge. If we made the progress immediately
457− // follow the finger position it would be visually unpleasant as there
458− // would be a jump to meet the finger's current position.
459− //
460− // The trick is not to go all the way (1.0) as it would cause the
461− // aforementioned jump.
462− switchToApplicationAnimationController.progress += 0.4 * delta
463− }
464−
465− property bool gotRejected: false
466−
467− onStatusChanged: {
468− if (status == DirectionalDragArea.Undecided) {
469− gotRejected = false
470− onUndecided();
471− } else if (status == DirectionalDragArea.Rejected) {
472− switchToApplicationAnimationController.completeToBeginningWithSignal();
473− gotRejected = true;
474− } else if (status == DirectionalDragArea.WaitingForTouch) {
475− if (!gotRejected)
476− onGestureEnded()
477− }
478− }
479−
480− function onUndecided() {
481− dragVelocityCalculator.reset()
482−
483− var nextApplication = null;
484− if (stage.applications.count > 1) {
485− nextApplication = stage.applications.get(1);
486− }
487− switchToApplicationAnimationController.progress = 0
488− switchToApplicationAnimation.prepare(nextApplication);
489− switchToApplicationAnimationController.animation = switchToApplicationAnimation;
490−
491− }
492−
493− function onGestureEnded() {
494− if (stage.applications.count > 1 && dragVelocityCalculator.calculate() < 0) {
495− switchToApplicationAnimationController.completeToEndWithSignal();
496− } else {
497− switchToApplicationAnimationController.completeToBeginningWithSignal();
498− }
499− }
500− }
501−
502−
503− // FIXME: very bad hack to detect when an application was closed or crashed
504− property var __previouslyFocusedApplication
505− Connections {
506− target: stage
507− onFocusedApplicationChanged: {
508− if (stage.focusedApplication == null
509− && __getApplicationIndex(stage.__previouslyFocusedApplication) == -1) {
510− stage.__onFocusedApplicationClosed();
511− }
512− stage.__previouslyFocusedApplication = stage.focusedApplication;
513− }
514− }
515−
516− function __onFocusedApplicationClosed() {
517− if (!stage.shown) {
518− return;
519− }
520−
521− if (stage.applications.count > 0) {
522− // Do not change the focused application from within onFocusedApplicationChanged.
523− // This causes binding loop warnings besides being a bad practice in general
524− // (setting a property from within its "changed" signal handling)
525− // Hence the timer.
526− focusTopmostAppTimer.start();
527− } else {
528− stage.hide();
529− }
530− }
531−
532− Timer {
533− id: focusTopmostAppTimer
534− interval: 1; repeat: false
535− onTriggered: {
536− if (stage.applications.count > 0) {
537− stage.__focusApplication(stage.applications.get(0));
538− }
539− }
540− }
541−
542−}
Components/Tile.qmldeleted−93
@@ -1,93 +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−
20−AbstractButton {
21− id: root
22− property alias source: image.source
23− property alias fillMode: image.fillMode
24− property alias horizontalAlignment: image.horizontalAlignment
25− property alias verticalAlignment: image.verticalAlignment
26− property alias text: label.text
27− property int imageWidth
28− property int imageHeight
29−
30− UbuntuShape {
31− id: icon
32− anchors {
33− top: parent.top
34− horizontalCenter: parent.horizontalCenter
35− }
36− radius: "medium"
37− width: imageWidth
38− height: imageHeight
39− image: Image {
40− id: image
41− objectName: "image"
42− sourceSize { width: icon.width; height: icon.height }
43− asynchronous: true
44− cache: false
45− }
46− }
47−
48− UbuntuShape {
49− id: borderPressed
50− objectName: "borderPressed"
51−
52− anchors.fill: icon
53− radius: "medium"
54− borderSource: ItemStyle.style.borderPressed
55− opacity: root.pressed ? 1.0 : 0.0
56− Behavior on opacity { NumberAnimation { duration: 200; easing.type: Easing.OutQuint } }
57− }
58−
59− Item {
60− anchors {
61− left: parent.left
62− right: parent.right
63− top: icon.bottom
64− }
65− height: units.gu(2)
66−
67− Label {
68− id: label
69− objectName: "label"
70− anchors {
71− baseline: parent.bottom
72− left: parent.left
73− right: parent.right
74− leftMargin: units.gu(1)
75− rightMargin: units.gu(1)
76− }
77−
78− color: "#f3f3e7"
79− opacity: 0.9
80− style: Text.Raised
81− styleColor: "black"
82− fontSize: "small"
83− elide: Text.ElideMiddle
84− horizontalAlignment: Text.AlignHCenter
85− }
86− }
87−
88− GridView.onRemove: SequentialAnimation {
89− PropertyAction { target: root; property: "GridView.delayRemove"; value: true }
90− NumberAnimation { target: root; property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.InOutQuad }
91− PropertyAction { target: root; property: "GridView.delayRemove"; value: false }
92− }
93−}
Components/Time.jsdeleted−49
@@ -1,49 +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−.pragma library
18−
19−var factors = {
20− "second": [ 1000, "a second ago", "in a second", "%1 seconds ago", "in %1 seconds" ],
21− "minute": [ 60, "a minute ago", "in a minute", "%1 minutes ago", "in %1 minutes" ],
22− "hour": [ 60, "an hour ago", "in an hour", "%1 hours ago", "in %1 hours" ],
23− "day": [ 24, "yesterday", "tomorrow", "%1 days ago", "in %1 days" ],
24− "week": [ 7, "a week ago", "in a week", "about %1 weeks ago", "in about %1 weeks" ],
25− "month": [ 4.35, "a month ago", "in a month", "%1 months ago", "in %1 months" ], // == 365.25 days / 12 months / 7 days
26− "year": [ 12, "a year ago", "in a year", "%1 years ago", "in %1 years" ]
27−}
28−
29−function readableFromNow(date, now) {
30− var then = new Date(date);
31− if (isNaN(then)) return "";
32− if (now === undefined) {
33− now = new Date();
34− } else if (isNaN(now)) throw "now is NaN";
35− var diff = Math.abs(now - then);
36− if (diff < 1000) return "just now";
37−
38− var future = now < then;
39− var humanDiff;
40− for (var k in factors) {
41− diff /= factors[k][0];
42− if (Math.floor(diff) == 1) {
43− humanDiff = factors[k][future ? 2 : 1];
44− } else if (Math.floor(diff) > 1) {
45− humanDiff = factors[k][future ? 4 : 3].arg(Math.round(diff));
46− } else break;
47− }
48− return humanDiff;
49−}
Components/UbuntuShapeForItem.qmldeleted−89
@@ -1,89 +0,0 @@
1−/*
2− * Copyright (C) 2012 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 as Theming
19−
20−/* FIXME: This component is duplicating the UbuntuShape from the SDK, but shapes more
21− * general (Item-based) components. This ability should be incorporated into the SDK's
22− * UbuntuShape so this file can be removed.
23− * Bug: https://bugs.launchpad.net/tavastia/+bug/1089595
24− */
25−
26−Item {
27− id: shape
28−
29− Theming.ItemStyle.class: "UbuntuShape-radius-" + radius
30−
31− property string radius: "small"
32− property url maskSource: Theming.ComponentUtils.style(shape, "maskSource", "")
33− property url borderSource: Theming.ComponentUtils.style(shape, "borderIdle", "")
34− property Item image
35−
36− implicitWidth: units.gu(8)
37− implicitHeight: units.gu(8)
38−
39− onWidthChanged: __updateImageDimensions()
40− onHeightChanged: __updateImageDimensions()
41− onImageChanged: __updateImageDimensions()
42−
43− function __updateImageDimensions() {
44− if (!image) return;
45− image.width = shape.width;
46− image.height = shape.height;
47− image.visible = false;
48− }
49−
50− ShaderEffect {
51− anchors.fill: parent
52− visible: shape.image
53−
54− property ShaderEffectSource mask: ShaderEffectSource {
55− sourceItem: BorderImage {
56− width: shape.width
57− height: shape.height
58− source: shape.maskSource
59− visible: false
60− }
61− }
62−
63− property ShaderEffectSource image: ShaderEffectSource {
64− sourceItem: shape.image
65− }
66−
67− fragmentShader:
68− "
69− varying highp vec2 qt_TexCoord0;
70− uniform lowp float qt_Opacity;
71− uniform sampler2D mask;
72− uniform sampler2D image;
73−
74− void main(void)
75− {
76− lowp vec4 maskColor = texture2D(mask, qt_TexCoord0.st);
77− lowp vec4 imageColor = texture2D(image, qt_TexCoord0.st);
78− gl_FragColor = imageColor * maskColor.a * qt_Opacity;
79− }
80− "
81− }
82−
83− BorderImage {
84− id: border
85−
86− anchors.fill: parent
87− source: shape.borderSource
88− }
89−}
Components/VolumeControl.qmldeleted−58
@@ -1,58 +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 QMenuModel 0.1
19−
20−Item {
21− id: root
22− objectName: "volumeControl"
23− visible: false
24− property int volume
25−
26− QDBusActionGroup {
27− id: actionGroup
28− busType: 1
29− busName: "com.canonical.settings.sound"
30− objectPath: "/com/canonical/settings/sound"
31−
32− property variant actionObject: action("volume")
33− property variant serverVolume: actionObject.valid ? actionObject.state: 0
34− }
35−
36− Binding {
37− target: root
38− property: "volume"
39− value: actionGroup.serverVolume * 100
40− }
41−
42− onVolumeChanged: {
43− if (actionGroup.serverVolume != volume) {
44− var targetVolume = Math.min(1, Math.max(0, volume / 100));
45− actionGroup.actionObject.updateState(targetVolume);
46− }
47− }
48−
49− function volumeUp() {
50− actionGroup.actionObject.updateState(Math.min(1, volume/100 + 0.10));
51− }
52−
53− function volumeDown() {
54− actionGroup.actionObject.updateState(Math.max(0, volume/100 - 0.10));
55− }
56−
57− Component.onCompleted: actionGroup.start()
58−}
Components/graphics/PageHeaderBaseDivider@18.pngdeleted

Binary file not shown.

Components/graphics/PageHeaderBaseDivider@18.scideleted−5
@@ -1,5 +0,0 @@
1−border.top: 4
2−border.bottom: 4
3−border.left: 0
4−border.right: 0
5−source: PageHeaderBaseDivider@18.png
Components/graphics/icon_star_off@20.pngdeleted

Binary file not shown.

Components/graphics/icon_star_on@20.pngdeleted

Binary file not shown.

Components/graphics/non-selected@18.pngdeleted

Binary file not shown.

Dash/Apps/ApplicationsFilterGrid.qmldeleted−56
@@ -1,56 +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 "../../Components"
19−import "../../Applications"
20−
21−FilterGrid {
22− id: filterGrid
23−
24− filter: true
25− expandable: false
26− minimumHorizontalSpacing: units.gu(0.5)
27− maximumNumberOfColumns: 6
28− delegateWidth: units.gu(11)
29− delegateHeight: units.gu(9.5)
30− verticalSpacing: units.gu(2)
31−
32− signal clicked(int index, variant data)
33−
34− delegate: Tile {
35− objectName: "delegate" + index
36− Application {
37− id: application
38− desktopFile: model.column_6 ? stripProtocol(model.column_6) : model.desktopFile // FIXME: this is temporary
39−
40− function stripProtocol(uri) {
41− var chunks = uri.split('file://')
42− return chunks[chunks.length-1]
43− }
44− }
45−
46− property string icon: model.column_1 ? model.column_1 : "../../graphics/applicationIcons/" + application.icon + ".png" // FIXME: this is temporary
47−
48− width: filterGrid.cellWidth
49− height: filterGrid.cellHeight
50− text: model.column_4 ? model.column_4 : application.name // FIXME: this is temporary
51− imageWidth: units.gu(8)
52− imageHeight: units.gu(7.5)
53− source: icon.indexOf("/") == -1 ? "image://gicon/" + icon : icon
54− onClicked: filterGrid.clicked(index, application.desktopFile);
55− }
56−}
Dash/Apps/AppsAvailableForDownloadModel.qmldeleted−26
@@ -1,26 +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−
19−ListModel {
20− ListElement { desktopFile: "/usr/share/applications/evernote.desktop"; }
21− ListElement { desktopFile: "/usr/share/applications/map.desktop"; }
22− ListElement { desktopFile: "/usr/share/applications/pinterest.desktop"; }
23− ListElement { desktopFile: "/usr/share/applications/soundcloud.desktop"; }
24− ListElement { desktopFile: "/usr/share/applications/wikipedia.desktop"; }
25− ListElement { desktopFile: "/usr/share/applications/youtube.desktop"; }
26−}
Dash/Apps/CloseIcon.qmldeleted−62
@@ -1,62 +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−
19−Item {
20− id: root
21−
22− Image {
23− id: closeIcon
24− anchors.centerIn: parent
25− source: "graphics/close_btn.png"
26−
27− state: (root.enabled) ? "shown" : "hidden"
28−
29− states: [
30− State {
31− name: "shown"
32− PropertyChanges {
33− target: closeIcon
34− height: root.height
35− width: root.width
36− }
37− },
38− State {
39− name: "hidden"
40− PropertyChanges {
41− target: closeIcon
42− height: 0
43− width: 0
44− }
45− }
46−
47− ]
48− transitions: [
49− Transition {
50− to: "shown"
51− NumberAnimation {
52− properties: "width, height"; duration: 300
53− easing { type: Easing.OutBack; overshoot: 5 }
54− }
55− },
56− Transition {
57− to: "hidden"
58− NumberAnimation { properties: "width, height"; duration: 250; }
59− }
60− ]
61− }
62−}
Dash/Apps/FrequentlyUsedAppsModel.qmldeleted−26
@@ -1,26 +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−
19−ListModel {
20− ListElement { desktopFile: "/usr/share/applications/camera-app.desktop"; }
21− ListElement { desktopFile: "/usr/share/applications/phone-app.desktop"; }
22− ListElement { desktopFile: "/usr/share/applications/gallery-app.desktop"; }
23− ListElement { desktopFile: "/usr/share/applications/facebook-webapp.desktop"; }
24− ListElement { desktopFile: "/usr/share/applications/webbrowser-app.desktop"; }
25− ListElement { desktopFile: "/usr/share/applications/gmail-webapp.desktop"; }
26−}
Dash/Apps/RunningApplicationTile.qmldeleted−138
@@ -1,138 +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 Ubuntu.Application 0.1
20−import "../../Components/"
21−import "../../Components/ListItems"
22−
23−AbstractButton {
24− id: root
25− property var application
26− property bool __sideStageEnabled: shell.applicationManager.sideStageEnabled
27−
28− signal requestedApplicationActivation(var application)
29− signal requestedApplicationTermination(var application)
30− signal requestedActivationMode()
31− signal requestedTerminationMode()
32−
33− // Was: childrenRect.height
34− // To avoid "binding loop" warning
35− height: shapedApplicationImage.height + labelContainer.height
36−
37− width: shapedApplicationImage.width
38−
39− property bool terminationModeEnabled: false
40−
41− onClicked: {
42− if (terminationModeEnabled)
43− requestedApplicationTermination(application)
44− else
45− requestedApplicationActivation(application)
46− }
47−
48− onPressAndHold: {
49− if (terminationModeEnabled) {
50− requestedActivationMode()
51− } else {
52− requestedTerminationMode()
53− }
54− }
55−
56− function updateScreenshotFromCache() {
57− applicationImage.updateFromCache();
58− }
59−
60− // FIXME: should use UbuntuShape from SDK
61− UbuntuShapeForItem {
62− id: shapedApplicationImage
63− anchors {
64− top: parent.top
65− horizontalCenter: parent.horizontalCenter
66− }
67−
68− // FIXME: width and height should be defined according to the
69− // application window's aspect ratio.
70− width: (application.stage === ApplicationInfo.MainStage && __sideStageEnabled) ?
71− units.gu(22) : units.gu(11)
72− height: (__sideStageEnabled) ? units.gu(22) : units.gu(19)
73− radius: "medium"
74− image: applicationImage
75− }
76−
77− ApplicationImage {
78− id: applicationImage
79− source: application
80− width: shapedApplicationImage.width
81− height: shapedApplicationImage.height
82− fillMode: ApplicationImage.PreserveAspectCrop
83− }
84−
85− UbuntuShape {
86− id: borderPressed
87−
88− anchors.fill: shapedApplicationImage
89− radius: "medium"
90− borderSource: ItemStyle.style.borderPressed
91− opacity: root.pressed ? 1.0 : 0.0
92− Behavior on opacity { NumberAnimation { duration: 200; easing.type: Easing.OutQuint } }
93− }
94−
95− // FIXME: label code duplicated with Tile
96− Item {
97− id: labelContainer
98− anchors {
99− left: parent.left
100− right: parent.right
101− top: shapedApplicationImage.bottom
102− }
103− height: units.gu(2)
104−
105− Label {
106− id: label
107− anchors {
108− baseline: parent.bottom
109− left: parent.left
110− right: parent.right
111− leftMargin: units.gu(1)
112− rightMargin: units.gu(1)
113− }
114− text: (application) ? application.name : ""
115−
116− color: "#f3f3e7"
117− opacity: 0.9
118− style: Text.Raised
119− styleColor: "black"
120− fontSize: "small"
121− elide: Text.ElideMiddle
122− horizontalAlignment: Text.AlignHCenter
123− }
124− }
125−
126− CloseIcon {
127− anchors {
128− right: shapedApplicationImage.right
129− rightMargin: -units.gu(1)
130− top: parent.top
131− topMargin: -units.gu(1)
132− }
133− height: units.gu(6)
134− width: units.gu(6)
135− id: closeIcon
136− enabled: root.terminationModeEnabled
137− }
138−}
Dash/Apps/RunningApplicationsGrid.qmldeleted−83
@@ -1,83 +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 "../../Components"
19−
20−ResponsiveFlowView {
21− id: root
22−
23− signal updateScreenshots
24−
25− Connections {
26− target: shell
27− onDashShownChanged: if (shell.dashShown && shell.stageScreenshotsReady) updateScreenshots();
28− onStageScreenshotsReadyChanged: if (shell.dashShown && shell.stageScreenshotsReady) updateScreenshots();
29− }
30−
31− Behavior on height { NumberAnimation { duration: 200; easing.type: Easing.InOutQuad } }
32−
33− property bool canEnableTerminationMode: true
34−
35− onCanEnableTerminationModeChanged: {
36− if (!canEnableTerminationMode)
37− terminationModeEnabled = false
38− }
39−
40− // when false, it means it's on activation mode
41− property bool terminationModeEnabled: false
42−
43− maximumNumberOfColumns: 10
44− minimumHorizontalSpacing: units.gu(2)
45− referenceDelegateWidth: units.gu(11)
46− verticalSpacing: units.gu(2)
47−
48− delegate: Item {
49− width: runningAppTile.width + root.horizontalSpacing
50− height: runningAppTile.height + root.verticalSpacing
51−
52− RunningApplicationTile {
53− id: runningAppTile
54− objectName: "runningAppTile " + model.application.name
55− anchors {
56− top: parent.top
57− horizontalCenter: parent.horizontalCenter
58− }
59− application: model.application
60− onRequestedActivationMode: { root.terminationModeEnabled = false }
61− onRequestedTerminationMode: {
62− if (canEnableTerminationMode)
63− root.terminationModeEnabled = true
64− }
65− onRequestedApplicationTermination: {
66− shell.applicationManager.stopProcess(application)
67− }
68− onRequestedApplicationActivation: {
69− shell.activateApplication(application.desktopFile)
70− }
71−
72− terminationModeEnabled: root.terminationModeEnabled
73−
74− Component.onCompleted: {
75− root.updateScreenshots.connect(updateScreenshotFromCache);
76− }
77− }
78− }
79−
80− move: Transition {
81− NumberAnimation { properties: "x,y"; duration: 400; easing.type: Easing.OutCubic }
82− }
83−}
Dash/Apps/graphics/close_btn@9.pngdeleted

Binary file not shown.

Dash/Dash.qmldeleted−93
@@ -1,93 +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 0.1
20−import Utils 0.1
21−import "../Components"
22−
23−Showable {
24− id: dash
25−
26− property alias contentProgress: dashContent.contentProgress
27− property string showLensOnLoaded: "home.lens"
28− property real contentScale: 1.0
29−
30− width: units.gu(40)
31− height: units.gu(71)
32−
33− function setCurrentLens(lensId, animate, reset) {
34− var lensIndex = filteredLenses.findFirst(Lenses.RoleId, lensId)
35−
36− if (lensIndex == -1) {
37− console.warn("No match for lens with id: %1".arg(lensId))
38− return
39− }
40−
41− if (lensIndex == dashContent.currentIndex && !reset) {
42− // the lens is already the current one
43− return
44− }
45−
46− dashContent.setCurrentLensAtIndex(lensIndex, animate, reset)
47− }
48−
49− SortFilterProxyModel {
50− id: filteredLenses
51− model: Lenses {
52− id: lenses
53− }
54− dynamicSortFilter: true
55−
56− filterRole: Lenses.RoleVisible
57− filterRegExp: RegExp("^true$")
58− }
59−
60− DashContent {
61− id: dashContent
62− objectName: "dashContent"
63− anchors.fill: parent
64− model: filteredLenses
65− lenses: lenses
66− onMovementStarted: dashbar.startNavigation()
67− onMovementEnded: dashbar.stopNavigation()
68− onContentFlickStarted: dashbar.finishNavigation()
69− onContentEndReached: dashbar.finishNavigation()
70− onPreviewShown: dashbar.finishNavigation()
71− onLensLoaded: {
72− if (lensId == dash.showLensOnLoaded) {
73− dash.setCurrentLens(lensId, false, false)
74− dash.showLensOnLoaded = ""
75− }
76− }
77− scale: dash.contentScale
78− clip: scale != 1.0
79− }
80−
81− DashBar {
82− id: dashbar
83− objectName: "dashbar"
84− anchors.bottom: parent.bottom
85− anchors.left: parent.left
86− anchors.right: parent.right
87− model: filteredLenses
88− currentIndex: dashContent.currentIndex
89− onItemSelected: dashContent.setCurrentLensAtIndex(index, true, false)
90− opacity: dash.contentScale == 1.0 ? 1.0 : 0.0
91− Behavior on opacity { NumberAnimation { easing.type: Easing.OutQuad; duration: 150 } }
92− }
93−}
Dash/DashApps.qmldeleted−183
@@ -1,183 +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 Utils 0.1
20−import "../Components"
21−import "../Components/ListItems"
22−import "Apps"
23−
24−LensView {
25− id: lensView
26−
27− // FIXME: a way to aggregate these models would be ideal
28− property var mainStageApplicationsModel: shell.applicationManager.mainStageApplications
29− property var sideStageApplicationModel: shell.applicationManager.sideStageApplications
30−
31− onMovementStarted: categoryView.showHeader()
32− onPositionedAtBeginning: {
33− if (isCurrent) {
34− categoryView.positionAtBeginning()
35− }
36− }
37−
38− onIsCurrentChanged: {
39− pageHeader.resetSearch();
40− }
41−
42− Binding {
43− target: lensView.lens
44− property: "searchQuery"
45− value: pageHeader.searchQuery
46− }
47−
48− Connections {
49− target: panel
50− onSearchClicked: if (isCurrent) {
51− pageHeader.triggerSearch()
52− categoryView.showHeader()
53− }
54− }
55−
56− ListModel {
57− id: categoryListModel
58− // specifies app categories, type of delegate and model used in each category
59− ListElement { category: "Running apps"; component: "RunningApplicationsGrid"; modelName: "RunningApplicationsModel" }
60− ListElement { category: "Frequently used"; component: "ApplicationsFilterGrid"; modelName: "FrequentlyUsedAppsModel" }
61− ListElement { category: "Installed"; component: "ApplicationsFilterGrid"; modelName: "InstalledApplicationsModel" }
62− ListElement { category: "Available for download"; component: "ApplicationsFilterGrid"; modelName: "AppsAvailableForDownloadModel" }
63− function getCategory(category1) {
64− if (category1 === "Running apps") {
65− return i18n.tr("Running apps");
66− }
67− if (category1 === "Frequently used") {
68− return i18n.tr("Frequently used");
69− }
70− if (category1 === "Installed") {
71− return i18n.tr("Installed");
72− }
73− if (category1 === "Available for download") {
74− return i18n.tr("Available for download");
75− }
76− return ""
77− }
78− }
79−
80− FrequentlyUsedAppsModel { id: frequentlyUsedAppsModel }
81− AppsAvailableForDownloadModel { id: appsAvailableForDownloadModel }
82−
83− // FIXME this should not be needed, the backend should handle all that itself
84− SortFilterProxyModel {
85− id: installedFilter
86− dynamicSortFilter: true
87− filterRole: 2 // this is the category id for each result
88− filterRegExp: /^3$/ // only proxy items that are category 3 - Installed
89− model: dashContent.lenses.get("applications.lens").results
90− }
91−
92− property var categoryModels: {
93− "FrequentlyUsedAppsModel": frequentlyUsedAppsModel,
94− "InstalledApplicationsModel": installedFilter,
95− "AppsAvailableForDownloadModel": appsAvailableForDownloadModel,
96− }
97−
98− /* Workaround for bug: https://bugreports.qt-project.org/browse/QTBUG-28403
99− When using Loader to load external QML file in the list deelgate, the ListView has
100− a bug where it can position the delegate content to overlap the section header
101− of the ListView - a workaround is to use sourceComponent of Loader instead */
102− Component { id: runningApplicationsGrid; RunningApplicationsGrid {} }
103− Component {
104− id: applicationsFilterGrid;
105− ApplicationsFilterGrid {
106− onClicked: shell.activateApplication(data)
107− }
108− }
109−
110− property var componentModels: {
111− "RunningApplicationsGrid": runningApplicationsGrid,
112− "ApplicationsFilterGrid": applicationsFilterGrid,
113− }
114−
115− ListViewWithPageHeader {
116− id: categoryView
117− anchors.fill: parent
118− model: SortFilterProxyModel {
119− model: categoryListModel
120− filterRole: 0 // 0 == modelName
121− // FIXME: need to use invertMatch here, otherwise the filter won't update correctly
122− // if filterRegExp is set before invertMatch. Bug in SortFilterProxyModel?
123− filterRegExp: invertMatch ? ((mainStageApplicationsModel.count === 0
124− && sideStageApplicationModel.count === 0) ? RegExp("RunningApplicationsModel") : RegExp("")) :
125− RegExp("InstalledApplicationsModel")
126− invertMatch: pageHeader.searchQuery.length == 0
127− }
128−
129− onAtYEndChanged: if (atYEnd) endReached()
130− onMovingChanged: if (moving && atYEnd) endReached()
131−
132− delegate: Base {
133− id: container
134− highlightWhenPressed: false
135−
136− Loader {
137− anchors {
138− top: parent.top
139− left: parent.left
140− right: parent.right
141− }
142− sourceComponent: componentModels[component]
143− onLoaded: {
144− if (modelName == "RunningApplicationsModel") {
145− item.firstModel = mainStageApplicationsModel
146− item.secondModel = sideStageApplicationModel
147− item.canEnableTerminationMode =
148− Qt.binding(function() { return isCurrent; })
149− } else {
150− item.model = categoryModels[modelName]
151− }
152− }
153− asynchronous: true
154− }
155−
156− ListView.onRemove: SequentialAnimation {
157− PropertyAction {
158− target: container; property: "ListView.delayRemove"; value: true
159− }
160− NumberAnimation {
161− target: container; property: "height"; to: 0;
162− duration: 250; easing.type: Easing.InOutQuad
163− }
164− PropertyAction {
165− target: container; property: "ListView.delayRemove"; value: false
166− }
167− }
168− }
169−
170− sectionProperty: "category"
171− sectionDelegate: Header {
172− width: categoryView.width
173− text: categoryListModel.getCategory(section)
174− }
175− pageHeader: PageHeader {
176− id: pageHeader
177− width: categoryView.width
178− text: i18n.tr("Apps")
179− searchEntryEnabled: true
180− searchHistory: lensView.searchHistory
181− }
182− }
183−}
Dash/DashBar.qmldeleted−134
@@ -1,134 +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 0.1
20−
21−Item {
22− id: dashBar
23−
24− property var model
25− property alias currentIndex: row.currentIndex
26−
27− property int lineHeight: units.dp(2)
28− property int itemSize: units.gu(7)
29− property int iconSize: units.gu(2.5)
30−
31− signal itemSelected(int index)
32−
33− width: units.gu(40)
34− height: units.gu(6)
35−
36− function startNavigation() {
37− timeout.stop()
38− panel.opened = true
39− }
40−
41− function stopNavigation() {
42− timeout.restart()
43− }
44−
45− function finishNavigation() {
46− panel.opened = false
47− }
48−
49− Timer {
50− id: timeout
51− interval: 1500
52− running: false
53− repeat: false
54− onTriggered: finishNavigation()
55− }
56−
57− Panel {
58− id: panel
59− objectName: "panel"
60− anchors.fill: parent
61−
62− locked: true // TODO: remove this when lp bug #1179569 will be fixed
63−
64− Rectangle {
65− color: "black"
66− anchors.fill: parent
67−
68− ListView {
69− id: row
70− objectName: "row"
71− model: dashBar.model
72− orientation: ListView.Horizontal
73− width: Math.min(Math.max(dashBar.width/2, units.gu(40)), count * itemSize)
74− height: parent.height
75− anchors.horizontalCenter: parent.horizontalCenter
76− onMovingChanged: if (moving) { timeout.stop() } else { timeout.restart() }
77− interactive: visibleArea.widthRatio < 1 && panel.opened
78− highlightFollowsCurrentItem: false
79−
80− onCurrentItemChanged: {
81− highlightLine.width = currentItem.width
82− highlightLine.x = x + currentItem.x
83− }
84−
85− delegate:
86− Item {
87− signal clicked()
88−
89− width: itemSize
90− height: dashBar.height
91− anchors.top: parent.top
92−
93− onClicked: {
94− dashBar.itemSelected(index)
95− timeout.restart()
96− }
97−
98− Image {
99− anchors.centerIn: parent
100− /* FIXME: should be 'source: lens.iconHint' but the
101− lenses do not contain the right icons yet
102− */
103− source: "graphics/lensIcons/%1.png".arg(lens.name)
104− height: iconSize
105− width: iconSize
106− // opacity: index == currentIndex ? 1 : 1 // same opacity for now
107− smooth: true
108− }
109− }
110− }
111− }
112− }
113−
114− Rectangle {
115− anchors {
116− left: parent.left
117− right: parent.right
118− bottom: parent.bottom
119− }
120− height: dashBar.lineHeight
121− color: "black"
122−
123− Rectangle {
124− id: highlightLine
125− color: "#dd4814"
126− height: parent.height
127− anchors.bottom: parent.bottom
128− z: 1
129−
130− Behavior on x {NumberAnimation { duration: 150; easing.type: Easing.OutCubic}}
131− Behavior on width {NumberAnimation { duration: 150; easing.type: Easing.OutCubic}}
132− }
133− }
134−}
Dash/DashContent.qmldeleted−144
@@ -1,144 +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 0.1
20−
21−Item {
22− id: dashContent
23− width: units.gu(40)
24− height: units.gu(71)
25−
26− property var model: null
27− property var lenses: null
28− property real contentProgress: Math.max(0, Math.min(dashContentList.contentX / (dashContentList.contentWidth - dashContentList.width), units.dp(1)))
29− property alias currentIndex: dashContentList.currentIndex
30−
31− property LensDelegateMapper lensMapper : LensDelegateMapper {}
32−
33− signal movementStarted()
34− signal movementEnded()
35− signal contentFlickStarted()
36− signal contentEndReached()
37− signal previewShown()
38− signal lensLoaded(string lensId)
39− signal positionedAtBeginning()
40−
41− // If we set the current lens index before the lenses have been added,
42− // then we need to wait until the loaded signals gets emitted from the lenses
43− property var set_current_index: undefined
44− Connections {
45− target: lenses
46− onLoadedChanged: {
47− if (lenses.loaded && set_current_index != undefined) {
48− setCurrentLensAtIndex(set_current_index[0], set_current_index[1], set_current_index[2]);
49− set_current_index = undefined;
50− }
51− }
52− }
53−
54− function setCurrentLensAtIndex(index, animate, reset) {
55− var storedMoveDuration = dashContentList.highlightMoveDuration
56− var storedMoveSpeed = dashContentList.highlightMoveVelocity
57− if (!animate) {
58− dashContentList.highlightMoveVelocity = units.gu(4167)
59− dashContentList.highlightMoveDuration = 0
60− }
61−
62− // if the lenses haven't loaded yet, then wait until they are.
63− if (!lenses.loaded) {
64− set_current_index = [ index, animate, reset ]
65− return;
66− }
67− set_current_index = undefined;
68−
69− if (dashContentList.count > index)
70− {
71− dashContentList.currentIndex = index
72−
73− if (reset) {
74− dashContent.positionedAtBeginning()
75− }
76− }
77−
78− if (!animate) {
79− dashContentList.highlightMoveDuration = storedMoveDuration
80− dashContentList.highlightMoveVelocity = storedMoveSpeed
81− }
82− }
83−
84− ListView {
85− id: dashContentList
86− objectName: "dashContentList"
87−
88− interactive: dashContent.lenses.loaded
89−
90− anchors.fill: parent
91− model: dashContent.model
92− orientation: ListView.Horizontal
93− boundsBehavior: Flickable.DragAndOvershootBounds
94− flickDeceleration: units.gu(625)
95− maximumFlickVelocity: width * 5
96− snapMode: ListView.SnapOneItem
97− highlightMoveDuration: 250
98− highlightRangeMode: ListView.StrictlyEnforceRange
99− /* FIXME: workaround rendering issue due to use of ShaderEffectSource in
100− UbuntuShape. While switching from the home lens to the People lens the
101− rendering would block midway.
102− */
103− cacheBuffer: 2147483647
104− onMovementStarted: dashContent.movementStarted()
105− onMovementEnded: dashContent.movementEnded()
106−
107− // If the number of items is less than the current index, then need to reset to another item.
108− onCountChanged: {
109− if (currentIndex >= count)
110− dashContent.setCurrentLensAtIndex(count-1, true, true)
111− }
112−
113− delegate:
114− Loader {
115− width: ListView.view.width
116− height: ListView.view.height
117− asynchronous: true
118− source: lensMapper.map(lens.id)
119− onLoaded: {
120− item.lens = Qt.binding(function() { return lens })
121− item.isCurrent = Qt.binding(function() { return ListView.isCurrentItem })
122− item.searchHistory = Qt.binding(function() { return shell.searchHistory })
123− dashContentList.movementStarted.connect(item.movementStarted)
124− dashContent.positionedAtBeginning.connect(item.positionedAtBeginning)
125− dashContent.lensLoaded(item.lens.id)
126− }
127− Connections {
128− target: item
129− ignoreUnknownSignals: true
130− onEndReached: contentEndReached()
131− onPreviewShownChanged: {
132− if (item.previewShown) {
133− previewShown()
134− dashContentList.interactive = false
135− } else {
136− dashContentList.interactive = true
137− }
138− }
139− }
140−
141− Component.onDestruction: active = false
142− }
143− }
144−}
Dash/DashHome.qmldeleted−200
@@ -1,200 +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 Utils 0.1
20−import "../Components"
21−import "../Components/ListItems"
22−import "../Applications"
23−import "Apps"
24−import "Video"
25−import "Music"
26−import "People"
27−
28−LensView {
29− id: root
30−
31− onMovementStarted: listView.showHeader()
32−
33− ListModel {
34− id: categoryListModel
35− // specifies page's content categories, type of delegate and model used in each category
36− ListElement { category: "Frequent Apps"; component: "AppsGrid"; modelName: "AppsModel" }
37− ListElement { category: "Favourite People"; component: "PeopleCarousel"; modelName: "FavouriteModel" }
38− ListElement { category: "People Recently in Touch"; component: "PeopleGrid"; modelName: "RecentModel" }
39− ListElement { category: "Recent Music"; component: "MusicGrid"; modelName: "MusicModel" }
40− ListElement { category: "Videos Popular Online"; component: "VideosGrid"; modelName: "VideosModel" }
41− function getCategory(category1) {
42− if (category1 === "Frequent Apps") {
43− return i18n.tr("Frequent Apps");
44− }
45− if (category1 === "Favourite People") {
46− return i18n.tr("Favourite People");
47− }
48− if (category1 === "People Recently in Touch") {
49− return i18n.tr("People Recently in Touch");
50− }
51− if (category1 === "Recent Music") {
52− return i18n.tr("Recent Music");
53− }
54− if (category1 === "Videos Popular Online") {
55− return i18n.tr("Videos Popular Online");
56− }
57− return ""
58− }
59− }
60−
61− FrequentlyUsedAppsModel { id: appsModel }
62−
63− // FIXME this should be handled by the backends by populating the global search model
64− SortFilterProxyModel {
65− id: favouritesFilter
66− dynamicSortFilter: true
67− filterRole: 2
68− filterRegExp: /^0$/
69− }
70−
71− SortFilterProxyModel {
72− id: recentFilter
73− dynamicSortFilter: true
74− filterRole: 2
75− filterRegExp: /^2$/
76− }
77−
78− SortFilterProxyModel {
79− id: musicFilter
80− dynamicSortFilter: true
81− filterRole: 2
82− filterRegExp: /^1$/
83− }
84−
85− SortFilterProxyModel {
86− id: videosFilter
87− dynamicSortFilter: true
88− filterRole: 2
89− filterRegExp: /^3$/
90− }
91−
92− Component.onCompleted: {
93− var lens = dashContent.lenses.get("people.lens")
94− if (lens) {
95− favouritesFilter.model = dashContent.lenses.get("people.lens").results
96− recentFilter.model = dashContent.lenses.get("people.lens").results
97− }
98− lens = dashContent.lenses.get("mockmusic.lens")
99− if (lens) {
100− musicFilter.model = dashContent.lenses.get("mockmusic.lens").results
101− }
102− lens = dashContent.lenses.get("mockvideos.lens")
103− if (lens) {
104− videosFilter.model = dashContent.lenses.get("mockvideos.lens").results
105− }
106− }
107−
108− Connections {
109− target: dashContent
110− onLensLoaded: switch (lensId) {
111− case "people.lens":
112− favouritesFilter.model = dashContent.lenses.get("people.lens").results
113− recentFilter.model = dashContent.lenses.get("people.lens").results
114− break;
115− case "mockmusic.lens":
116− musicFilter.model = dashContent.lenses.get("mockmusic.lens").results
117− break;
118− case "mockvideos.lens":
119− videosFilter.model = dashContent.lenses.get("mockvideos.lens").results
120− break;
121− }
122− }
123−
124− property var categoryModels: {"AppsModel": appsModel,
125− "FavouriteModel": favouritesFilter,
126− "RecentModel": recentFilter,
127− "MusicModel": musicFilter,
128− "VideosModel": videosFilter,
129− }
130−
131− /* Workaround for bug: https://bugreports.qt-project.org/browse/QTBUG-28403
132− When using Loader to load external QML file in the list deelgate, the ListView has
133− a bug where it can position the delegate content to overlap the section header
134− of the ListView - a workaround is to use sourceComponent of Loader instead */
135− Component {
136− id: applicationsFilterGrid
137− ApplicationsFilterGrid {
138− objectName: "dashHomeApplicationsGrid"
139− onClicked: shell.activateApplication(data);
140− }
141− }
142−
143− Component { id: peopleCarousel; PeopleCarousel {} }
144− Component { id: peopleGrid; PeopleFilterGrid {} }
145− Component { id: musicGrid; MusicFilterGrid {} }
146− Component { id: videosGrid; VideosFilterGrid {} }
147− property var componentModels: {
148− "AppsGrid": applicationsFilterGrid,
149− "PeopleCarousel": peopleCarousel,
150− "PeopleGrid": peopleGrid,
151− "MusicGrid": musicGrid,
152− "VideosGrid": videosGrid,
153− }
154−
155− ListViewWithPageHeader {
156− id: listView
157− anchors.fill: parent
158− model: categoryListModel
159−
160− onAtYEndChanged: if (atYEnd) endReached()
161− onMovingChanged: if (moving && atYEnd) endReached()
162−
163− delegate: Base {
164− id: container
165− highlightWhenPressed: false
166− width: listView.width
167−
168− Loader {
169− anchors { top: parent.top; left: parent.left; right: parent.right }
170− sourceComponent: componentModels[component]
171− onLoaded: {
172− item.model = categoryModels[modelName]
173−
174− //FIXME: workaround for lack of previews for videos in Home lens.
175− //Need to connect to the clicked() signal here and act upon it here instead.
176− if (component === "VideosGrid") {
177− function playVideo(index, data) {
178− if (data.fileUri) {
179− shell.activateApplication('/usr/share/applications/mediaplayer-app.desktop', "/usr/share/demo-assets/videos/" + data.fileUri);
180− }
181− }
182−
183− item.clicked.connect(playVideo);
184− }
185− }
186− asynchronous: true
187− }
188− }
189−
190− sectionProperty: "category"
191− sectionDelegate: Header {
192− width: listView.width
193− text: listView.model.getCategory(section)
194− }
195− pageHeader: PageHeader {
196− width: listView.width
197− text: i18n.tr("Home")
198− }
199− }
200−}
Dash/DashMusic.qmldeleted−104
@@ -1,104 +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 "../Components"
20−import "../Components/ListItems" as ListItems
21−import "Music"
22−
23−LensView {
24− id: lensView
25−
26− property var categoryNames: [
27− i18n.tr("Featured"),
28− i18n.tr("Recent"),
29− i18n.tr("New Releases"),
30− i18n.tr("Top Charting")
31− ]
32−
33− onIsCurrentChanged: {
34− pageHeader.resetSearch();
35− }
36−
37− onMovementStarted: categoryView.showHeader()
38−
39− Binding {
40− target: lensView.lens
41− property: "searchQuery"
42− value: pageHeader.searchQuery
43− }
44−
45− Connections {
46− target: panel
47− onSearchClicked: if (isCurrent) {
48− pageHeader.triggerSearch()
49− categoryView.showHeader()
50− }
51− }
52−
53− /* Workaround for bug: https://bugreports.qt-project.org/browse/QTBUG-28403
54− When using Loader to load external QML file in the list deelgate, the ListView has
55− a bug where it can position the delegate content to overlap the section header
56− of the ListView - a workaround is to use sourceComponent of Loader instead */
57− Component { id: musicCarousel; MusicCarousel {} }
58− Component { id: musicFilterGrid; MusicFilterGrid {} }
59−
60− function getRenderer(categoryId) {
61− switch (categoryId) {
62− case 0: return musicCarousel
63− default: return musicFilterGrid
64− }
65− }
66−
67− ListViewWithPageHeader {
68− id: categoryView
69− anchors.fill: parent
70− model: lensView.categories
71−
72− onAtYEndChanged: if (atYEnd) endReached()
73− onMovingChanged: if (moving && atYEnd) endReached()
74−
75− delegate: ListItems.Base {
76− id: base
77− highlightWhenPressed: false
78−
79− property int categoryId: id
80−
81− Loader {
82− anchors { top: parent.top; left: parent.left; right: parent.right }
83− sourceComponent: lensView.getRenderer(base.categoryId)
84− onLoaded: {
85− item.model = results
86− }
87− asynchronous: true
88− }
89− }
90−
91− sectionProperty: "name"
92− sectionDelegate: ListItems.Header {
93− width: categoryView.width
94− text: i18n.tr(section)
95− }
96− pageHeader: PageHeader {
97− id: pageHeader
98− width: categoryView.width
99− text: i18n.tr("Music")
100− searchEntryEnabled: true
101− searchHistory: lensView.searchHistory
102− }
103− }
104−}
Dash/DashPeople.qmldeleted−235
@@ -1,235 +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 Dee 3.0
20−import Unity 0.1
21−import Utils 0.1
22−import "../Components"
23−import "../Components/ListItems" as ListItems
24−import "People"
25−
26−LensView {
27− id: lensView
28− property alias previewShown: previewLoader.onScreen
29−
30− property var categoryNames: [
31− i18n.tr("Favourites"),
32− i18n.tr("Recently in touch"),
33− i18n.tr("New Contacts"),
34− i18n.tr("A-Z")
35− ]
36−
37− onIsCurrentChanged: {
38− pageHeader.resetSearch();
39− }
40−
41− onMovementStarted: categoryView.showHeader()
42−
43− Binding {
44− target: lensView.lens
45− property: "searchQuery"
46− value: pageHeader.searchQuery
47− }
48−
49− Connections {
50− target: panel
51− onSearchClicked: if (isCurrent) {
52− pageHeader.triggerSearch()
53− categoryView.showHeader()
54− }
55− }
56−
57− OpenEffect {
58− id: effect
59− anchors {
60− fill: parent
61− bottomMargin: -bottomOverflow
62− }
63− sourceItem: categoryView
64−
65− enabled: gap > 0.0
66−
67− topGapPx: (1 - gap) * positionPx
68− topOpacity: (1 - gap * 1.2)
69− bottomGapPx: positionPx + gap * (targetBottomGapPx - positionPx)
70− bottomOverflow: units.gu(20)
71− bottomOpacity: 1 - (gap * 0.8)
72−
73− property int targetBottomGapPx: height - units.gu(8) - bottomOverflow
74− property real gap: previewLoader.open ? 1.0 : 0.0
75−
76− Behavior on gap {
77− NumberAnimation {
78− duration: 200
79− easing.type: Easing.InOutQuad
80− onRunningChanged: {
81− if (!previewLoader.open && !running) {
82− previewLoader.onScreen = false;
83− }
84− }
85− }
86− }
87− }
88−
89− ListViewWithPageHeader {
90− id: categoryView
91− anchors.fill: parent
92− model: lensView.categories
93− onAtYEndChanged: if (atYEnd) endReached()
94− onMovingChanged: if (moving && atYEnd) endReached()
95− clipListView: !previewLoader.onScreen
96−
97− delegate: ListItems.Base {
98− id: base
99− property int categoryIndex: index
100− property int categoryId: id
101− highlightWhenPressed: false
102−
103− Loader {
104− width: categoryView.width
105− sourceComponent: base.categoryId == 0 ? peopleCarouselComponent : peopleGridComponent
106−
107− onLoaded: {
108− item.categoryId = Qt.binding(function() { return base.categoryId; })
109− item.categoryIndex = Qt.binding(function() { return base.categoryIndex; })
110− item.model = results;
111− }
112− }
113− }
114−
115− sectionProperty: "name"
116− sectionDelegate: ListItems.Header {
117− width: categoryView.width
118− text: i18n.tr(section)
119− }
120− pageHeader: PageHeader {
121− id: pageHeader
122− width: categoryView.width
123− text: i18n.tr("People")
124− searchEntryEnabled: true
125− searchHistory: lensView.searchHistory
126− }
127− }
128−
129− Component {
130− id: peopleCarouselComponent
131− PeopleCarousel {
132− id: peopleCarousel
133−
134− property int categoryId
135− property int categoryIndex
136−
137− onClicked: {
138− effect.positionPx = mapToItem(categoryView, 0, itemY).y;
139− previewData.model = delegateItem.dataModel;
140− previewData.uri = delegateItem.dataModel.uri;
141− previewLoader.open = true;
142− }
143− }
144− }
145−
146− Component {
147− id: peopleGridComponent
148− PeopleFilterGrid {
149− id: peopleGrid
150−
151− property int categoryIndex
152−
153− onClicked: {
154− if (peopleGrid.columnCount == 1) {
155− if (categoryIndex >= categoryView.model.count -1 && index >= peopleGrid.model.count - 1) {
156− effect.positionPx = mapToItem(categoryView, 0, itemY).y;
157− } else {
158− effect.positionPx = mapToItem(categoryView, 0, itemY + peopleGrid.cellHeight).y
159− }
160− } else {
161− effect.positionPx = mapToItem(categoryView, 0, itemY).y
162− }
163− previewData.model = data;
164− previewData.uri = data.uri
165− previewLoader.open = true;
166− }
167− }
168− }
169−
170− Loader {
171− id: previewLoader
172− height: effect.bottomGapPx - effect.topGapPx
173− anchors {
174− top: parent.top
175− topMargin: effect.topGapPx
176− left: parent.left
177− right: parent.right
178− }
179− sourceComponent: onScreen ? previewComponent : undefined
180−
181− property bool open: false
182− property bool onScreen: false
183− property QtObject videoItem
184−
185− onOpenChanged: {
186− if (open) {
187− onScreen = true
188− }
189− }
190−
191− onLoaded: {
192− if (previewData.ready) {
193− item.model = previewData;
194− }
195− }
196− }
197−
198− Component {
199− id: previewComponent
200−
201− PeoplePreview {
202− id: preview
203− anchors.fill: parent
204− forceSquare: true
205− onClose: {
206− open = false;
207− }
208− }
209− }
210−
211− PeoplePreviewData {
212− id: previewData
213− lens: lensView.lens
214− property Data model
215−
216− onError: previewLoader.open = false
217− onReadyChanged: {
218− if (previewLoader.item) {
219− previewLoader.item.model = ready ? previewData : undefined
220− }
221− }
222− }
223−
224− // TODO: Move as InverseMouseArea to DashPreview
225− MouseArea {
226− enabled: previewLoader.onScreen
227− anchors {
228− fill: parent
229− topMargin: effect.bottomGapPx
230− }
231− onClicked: {
232− previewLoader.open = false;
233− }
234− }
235−}
Dash/DashPreview.qmldeleted−218
@@ -1,218 +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−
20−Rectangle {
21− id: root
22− property string title: ""
23− property url url: ""
24− property real previewWidthRatio: 0.5
25− property bool playable: false
26− property bool forceSquare: false
27− property Component buttons
28− property Component caption
29− property Component description
30−
31− readonly property bool narrowMode: width <= height
32− readonly property int contentSpacing: units.gu(3)
33−
34− signal close()
35− signal previewImageClicked()
36−
37− color: Qt.rgba(0, 0, 0, .3)
38− clip: true
39−
40− Connections {
41− target: shell.applicationManager
42− onMainStageFocusedApplicationChanged: {
43− root.close();
44− }
45− onSideStageFocusedApplicationChanged: {
46− root.close();
47− }
48− }
49−
50− MouseArea {
51− anchors.fill: parent
52− }
53−
54− Item {
55− id: headerRow
56− height: units.gu(4)
57− anchors {
58− top: parent.top
59− left: parent.left
60− right: parent.right
61− margins: root.contentSpacing
62− }
63−
64− MouseArea {
65− anchors {
66− fill: parent
67− leftMargin: -root.contentSpacing
68− rightMargin: -root.contentSpacing
69− topMargin: -root.contentSpacing
70− }
71−
72− onClicked: root.close();
73− }
74−
75− Item {
76− id: labelItem
77− anchors {
78− fill: parent
79− rightMargin: closePreviewImage.width + spacing
80− }
81−
82− property int spacing: units.gu(2)
83−
84− Label {
85− id: title
86− objectName: "titleLabel"
87− anchors {
88− left: parent.left
89− right: parent.right
90− }
91−
92− elide: Text.ElideRight
93− fontSize: "x-large"
94− font.weight: Font.Light
95− color: "#f3f3e7"
96− opacity: 0.9
97− text: root.title
98− style: Text.Raised
99− styleColor: "black"
100− }
101− Image {
102− id: closePreviewImage
103− source: "graphics/tablet/icon_close_preview.png"
104− width: units.gu(4)
105− height: units.gu(1.5)
106− anchors {
107− bottom: title.bottom
108− bottomMargin: units.dp(7)
109− left: parent.left
110− leftMargin: title.paintedWidth + labelItem.spacing
111− }
112− }
113− }
114− }
115−
116− Row {
117− id: contentRow
118− anchors {
119− left: parent.left
120− right: parent.right
121− top: headerRow.bottom
122− bottom: parent.bottom
123− margins: root.contentSpacing
124− }
125−
126− spacing: units.gu(2)
127−
128− Flickable {
129− id: leftFlickable
130− anchors.top: parent.top
131− anchors.bottom: parent.bottom
132− width: root.narrowMode ? contentRow.width : contentRow.width * root.previewWidthRatio
133− contentHeight: leftColumn.height
134− clip: true
135−
136− Column {
137− id: leftColumn
138− objectName: "leftColumn"
139− anchors {
140− left: parent.left
141− right: parent.right
142− }
143− height: childrenRect.height
144− spacing: root.contentSpacing
145−
146− // TODO: replace this UbuntuShape with the Video component once that lands
147− // with the player.
148− UbuntuShape {
149− id: urlLoader
150− anchors.left: parent.left
151− anchors.right: parent.right
152− height: root.forceSquare ? width : width * previewImage.sourceSize.height / previewImage.sourceSize.width
153− radius: "medium"
154− image: Image {
155− id: previewImage
156− asynchronous: true
157− source: root.url
158− fillMode: Image.PreserveAspectCrop
159− }
160−
161− Image {
162− objectName: "playButton"
163− anchors.centerIn: parent
164− visible: root.playable
165− readonly property bool bigButton: parent.width > units.gu(40)
166− width: bigButton ? units.gu(8) : units.gu(4.5)
167− height: width
168− source: "graphics/play_button%1%2.png".arg(previewImageMouseArea.pressed ? "_active" : "").arg(bigButton ? "_big" : "")
169− }
170−
171− MouseArea {
172− id: previewImageMouseArea
173− anchors.fill: parent
174− onClicked: root.previewImageClicked()
175− }
176− }
177− Loader {
178− id: buttonLoader
179− anchors.left: parent.left
180− anchors.right: parent.right
181− sourceComponent: root.buttons
182− }
183− Loader {
184− id: captionLoader
185− anchors.left: parent.left
186− anchors.right: parent.right
187− sourceComponent: root.caption
188− }
189− }
190− }
191−
192− Flickable {
193− id: rightFlickable
194− anchors.top: parent.top
195− anchors.bottom: parent.bottom
196− width: narrowMode ? 0 : (contentRow.width - leftColumn.width - contentRow.spacing)
197− contentHeight: rightColumn.height
198− clip: true
199−
200− Column {
201− id: rightColumn
202− objectName: "rightColumn"
203− height: childrenRect.height
204− anchors {
205− left: parent.left
206− right: parent.right
207− }
208− }
209− }
210− }
211−
212− Loader {
213− parent: root.narrowMode ? leftColumn : rightColumn
214− anchors.left: parent.left
215− anchors.right: parent.right
216− sourceComponent: root.description
217− }
218−}
Dash/DashVideos.qmldeleted−210
@@ -1,210 +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 "../Components"
20−import "../Components/ListItems" as ListItems
21−import "Video"
22−
23−LensView {
24− id: lensView
25− property alias previewShown: previewLoader.onScreen
26−
27− property var categoryNames: [
28− i18n.tr("Featured"),
29− i18n.tr("Recent"),
30− i18n.tr("New Releases"),
31− i18n.tr("Popular Online")
32− ]
33−
34− onIsCurrentChanged: {
35− pageHeader.resetSearch();
36− }
37−
38− onMovementStarted: categoryView.showHeader()
39−
40− Binding {
41− target: lensView.lens
42− property: "searchQuery"
43− value: pageHeader.searchQuery
44− }
45−
46− Connections {
47− target: panel
48− onSearchClicked: if (isCurrent) {
49− pageHeader.triggerSearch()
50− categoryView.showHeader()
51− }
52− }
53−
54− /* Workaround for bug: https://bugreports.qt-project.org/browse/QTBUG-28403
55− When using Loader to load external QML file in the list deelgate, the ListView has
56− a bug where it can position the delegate content to overlap the section header
57− of the ListView - a workaround is to use sourceComponent of Loader instead */
58− Component { id: videosFilterGrid; VideosFilterGrid {} }
59− Component { id: videosCarousel; VideosCarousel {} }
60−
61− function getRenderer(categoryId) {
62− switch (categoryId) {
63− case 0: return videosCarousel
64− default: return videosFilterGrid
65− }
66− }
67−
68− OpenEffect {
69− id: effect
70− anchors {
71− fill: parent
72− bottomMargin: -bottomOverflow
73− }
74− sourceItem: categoryView
75−
76− enabled: gap > 0.0
77−
78− topGapPx: (1 - gap) * positionPx
79− topOpacity: Math.max(0, (1 - gap * 1.2))
80− bottomGapPx: positionPx + gap * (targetBottomGapPx - positionPx)
81− bottomOverflow: units.gu(6)
82− bottomOpacity: 1 - (gap * 0.8)
83−
84− property int targetBottomGapPx: height - units.gu(8) - bottomOverflow
85− property real gap: previewLoader.open ? 1.0 : 0.0
86−
87− Behavior on gap {
88− NumberAnimation {
89− duration: 200
90− easing.type: Easing.InOutQuad
91− onRunningChanged: {
92− if (!previewLoader.open && !running) {
93− previewLoader.onScreen = false;
94− }
95− }
96− }
97− }
98− }
99−
100− ListViewWithPageHeader {
101− id: categoryView
102− anchors.fill: parent
103− model: lensView.categories
104− clipListView: !previewLoader.onScreen
105−
106− onAtYEndChanged: if (atYEnd) endReached()
107− onMovingChanged: if (moving && atYEnd) endReached()
108−
109− delegate: ListItems.Base {
110− id: base
111− highlightWhenPressed: false
112− property int categoryIndex: index
113− property int categoryId: id
114−
115− Loader {
116− id: loader
117− anchors { top: parent.top; left: parent.left; right: parent.right }
118− sourceComponent: lensView.getRenderer(base.categoryId)
119− onLoaded: {
120− item.model = results
121− }
122− asynchronous: true
123−
124− Connections {
125− target: loader.item
126− onClicked: {
127− var dataItem;
128− // VideosCarousel and VideosFilterGrid have different
129− // clicked signals, accomodate for that
130− if (categoryId == 0) {
131− var fileUri = delegateItem.model.column_0.replace(/^[^:]+:/, "")
132− dataItem = {fileUri: fileUri, nfoUri: delegateItem.model.column_5}
133− } else {
134− dataItem = data;
135− }
136− if (dataItem.nfoUri != "") {
137− previewLoader.videoData = dataItem;
138− previewLoader.open = true;
139− effect.positionPx = mapToItem(categoryView, 0, itemY).y;
140− }
141− }
142− }
143− }
144− }
145−
146− sectionProperty: "name"
147− sectionDelegate: ListItems.Header {
148− width: categoryView.width
149− text: i18n.tr(section)
150− }
151−
152− pageHeader: PageHeader {
153− id: pageHeader
154− width: categoryView.width
155− text: i18n.tr("Videos")
156− searchEntryEnabled: true
157− searchHistory: lensView.searchHistory
158− }
159− }
160−
161− Loader {
162− id: previewLoader
163− height: effect.bottomGapPx - effect.topGapPx
164− anchors {
165− top: parent.top
166− topMargin: effect.topGapPx
167− left: parent.left
168− right: parent.right
169− }
170− sourceComponent: onScreen ? previewComponent : undefined
171−
172− property bool open: false
173− property bool onScreen: false
174− property var videoData
175−
176−
177− onOpenChanged: {
178− if (open) {
179− onScreen = true;
180− }
181− }
182−
183− onLoaded: {
184− item.item = videoData;
185− }
186− }
187−
188− Component {
189− id: previewComponent
190−
191− VideoPreview {
192− id: preview
193− anchors.fill: parent
194− onClose: open = false;
195− }
196− }
197−
198− // TODO: Move as InverseMouseArea to DashPreview
199− MouseArea {
200− enabled: previewLoader.onScreen
201− anchors {
202− fill: parent
203− topMargin: effect.bottomGapPx
204− }
205− onClicked: {
206− previewLoader.open = false;
207− }
208− }
209−
210−}
Dash/GenericLensView.qmldeleted−95
@@ -1,95 +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 "../Components"
20−import "../Components/ListItems" as ListItems
21−
22−LensView {
23− id: lensView
24−
25− onIsCurrentChanged: {
26− pageHeader.resetSearch();
27− }
28−
29− onMovementStarted: categoryView.showHeader()
30−
31− Binding {
32− target: lensView.lens
33− property: "searchQuery"
34− value: pageHeader.searchQuery
35− }
36−
37− Connections {
38− target: panel
39− onSearchClicked: if (isCurrent) {
40− pageHeader.triggerSearch()
41− categoryView.showHeader()
42− }
43− }
44−
45− ListViewWithPageHeader {
46− id: categoryView
47− anchors.fill: parent
48− model: lensView.categories
49− onAtYEndChanged: if (atYEnd) endReached()
50− onMovingChanged: if (moving && atYEnd) endReached()
51−
52− delegate: ListItems.Base {
53− highlightWhenPressed: false
54−
55− FilterGrid {
56− id: filtergrid
57− model: results
58−
59− anchors {
60− top: parent.top
61− left: parent.left
62− right: parent.right
63− }
64−
65− filter: false
66− minimumHorizontalSpacing: units.gu(0.5)
67− delegateWidth: units.gu(11)
68− delegateHeight: units.gu(18)
69− verticalSpacing: units.gu(2)
70−
71− delegate: Tile {
72− width: filtergrid.cellWidth
73− height: filtergrid.cellHeight
74− text: column_4 ? column_4 : "" // FIXME: this shouldn't be necessary
75− imageWidth: units.gu(11)
76− imageHeight: units.gu(16)
77− source: column_1 ? column_1 : "" // FIXME: ditto
78− }
79− }
80− }
81−
82− sectionProperty: "name"
83− sectionDelegate: ListItems.Header {
84− width: categoryView.width
85− text: section
86− }
87− pageHeader: PageHeader {
88− id: pageHeader
89− objectName: "pageHeader"
90− width: categoryView.width
91− text: lensView.lens.name
92− searchEntryEnabled: true
93− }
94− }
95−}
Dash/LensDelegateMapper.qmldeleted−35
@@ -1,35 +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−
19−QtObject {
20− property var lensDelegateMapping: {"mockmusic.lens": "DashMusic.qml",
21− "applications.lens": "DashApps.qml",
22− "home.lens": "DashHome.qml",
23− "mockvideos.lens": "DashVideos.qml",
24− "people.lens": "DashPeople.qml",
25− }
26− property string genericLens: "GenericLensView.qml"
27−
28− function map(lensId) {
29− var customLens = lensDelegateMapping[lensId]
30− if (customLens != undefined) {
31− return customLens
32− }
33− return genericLens
34− }
35−}
Dash/LensView.qmldeleted−48
@@ -1,48 +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 Utils 0.1
19−import Unity 0.1
20−
21−FocusScope {
22− property Lens lens
23− property SortFilterProxyModel categories: categoryFilter
24− property bool isCurrent
25− property ListModel searchHistory
26−
27− signal endReached
28− signal movementStarted
29− signal positionedAtBeginning
30−
31− // FIXME delay the search so that daemons have time to settle
32− onLensChanged: timer.restart()
33−
34− Timer {
35− id: timer
36− interval: 2000
37− onTriggered: lens.searchQuery = ""
38− }
39−
40− SortFilterProxyModel {
41− id: categoryFilter
42− model: lens.categories
43− dynamicSortFilter: true
44− filterRole: Categories.RoleCount
45− filterRegExp: /^0$/
46− invertMatch: true
47− }
48−}
Dash/Music/AlbumTile.qmldeleted−116
@@ -1,116 +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−
20−AbstractButton {
21− id: root
22− property url source
23− property alias album: albumLabel.text
24− property alias artist: artistLabel.text
25− property alias iconWidth: icon.width
26− property alias iconHeight: icon.height
27−
28− UbuntuShape {
29− id: icon
30− anchors {
31− top: parent.top
32− horizontalCenter: parent.horizontalCenter
33− }
34− radius: "medium"
35− image: Image {
36− source: root.source
37− sourceSize { width: icon.width; height: icon.height }
38− asynchronous: true
39− cache: false
40− }
41− }
42−
43− UbuntuShape {
44− id: borderPressed
45−
46− anchors.fill: icon
47− radius: "medium"
48− borderSource: ItemStyle.style.borderPressed
49− opacity: root.pressed ? 1.0 : 0.0
50− Behavior on opacity { NumberAnimation { duration: 200; easing.type: Easing.OutQuint } }
51− }
52−
53− Item {
54− id: artistContainer
55− anchors {
56− left: parent.left
57− right: parent.right
58− top: icon.bottom
59− }
60− height: units.gu(2)
61−
62− Label {
63− id: artistLabel
64− anchors {
65− baseline: parent.bottom
66− left: parent.left
67− right: parent.right
68− leftMargin: units.gu(1)
69− rightMargin: units.gu(1)
70− }
71−
72− color: "#f3f3e7"
73− opacity: 0.9
74− style: Text.Raised
75− styleColor: "black"
76− fontSize: "small"
77− elide: Text.ElideMiddle
78− horizontalAlignment: Text.AlignHCenter
79− }
80− }
81−
82− Item {
83− anchors {
84− left: parent.left
85− right: parent.right
86− top: artistContainer.bottom
87− }
88− height: units.gu(1.5)
89−
90− Label {
91− id: albumLabel
92− anchors {
93− baseline: parent.bottom
94− left: parent.left
95− right: parent.right
96− leftMargin: units.gu(1)
97− rightMargin: units.gu(1)
98− }
99−
100− color: "#f3f3e7"
101− opacity: 0.9
102− style: Text.Raised
103− styleColor: "black"
104− fontSize: "small"
105− font.weight: Font.Light
106− elide: Text.ElideMiddle
107− horizontalAlignment: Text.AlignHCenter
108− }
109− }
110−
111− GridView.onRemove: SequentialAnimation {
112− PropertyAction { target: root; property: "GridView.delayRemove"; value: true }
113− NumberAnimation { target: root; property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.InOutQuad }
114− PropertyAction { target: root; property: "GridView.delayRemove"; value: false }
115− }
116−}
Dash/Music/MusicFilterGrid.qmldeleted−48
@@ -1,48 +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 "../../Components"
19−
20−FilterGrid {
21− id: filterGrid
22−
23− expandable: false
24− minimumHorizontalSpacing: units.gu(2)
25− maximumNumberOfColumns: 5
26− delegateWidth: units.gu(17)
27− delegateHeight: iconHeight + units.gu(3.5)
28− verticalSpacing: units.gu(2)
29−
30− readonly property int iconWidth: (width / columns) * 0.8
31− readonly property int iconHeight: iconWidth
32−
33− signal clicked(int index)
34−
35− delegate: AlbumTile {
36− objectName: "delegate" + index
37− width: filterGrid.cellWidth
38− height: filterGrid.cellHeight
39− iconWidth: filterGrid.iconWidth
40− iconHeight: filterGrid.iconHeight
41− artist: model.column_4
42− album: model.column_5
43− source: model.column_1
44− onClicked: {
45− filterGrid.clicked(index);
46− }
47− }
48−}
Dash/People/CarouselDelegatePeople.qmldeleted−166
@@ -1,166 +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 "../../Components"
20−
21−BaseCarouselDelegate {
22− id: item
23−
24− property var dataModel
25− readonly property real frameHeight: Math.max(height / 3.6, units.gu(5.5))
26−
27− UbuntuShape {
28− anchors.fill: parent
29− radius: "medium"
30− borderSource: ""
31− image: Image {
32− asynchronous: true
33− sourceSize { width: item.width; height: item.height }
34− source: dataModel.avatar ? dataModel.avatar : ""
35− fillMode: Image.PreserveAspectCrop
36− }
37− }
38−
39− Component {
40− id: component_frame
41− Item {
42− id: frame
43−
44− BorderImage {
45− // TODO This will go away once we have 'clip: true' in UbuntuShape
46− anchors.centerIn: parent
47− width: parent.width + units.gu(1.5)
48− height: parent.height + units.gu(1.5)
49− visible: labelRemotePost.visible
50− opacity: 0.9
51− source: "graphics/bottomshape.sci"
52− }
53−
54− property bool showRemoteDetails: true
55− // To decide if the remote icon and time should be shown, its once layed out to do so.
56− // Then it's checked if everything fits in the frame size. If not, showRemoteDetails is set false
57− // Using bindings to do so cause a binding loop
58− function checkSizeForRemoteDetails() {
59− showRemoteDetails = true
60− showRemoteDetails = (frame.height - column.minimumHeight) >= labelRemotePostTime.height
61− }
62−
63− Item {
64− id: remoteSourceIconContainer
65−
66− // TODO use proper asset and get rid of these dimensions
67− width: units.gu(3)
68− height: units.gu(4)
69− visible: showRemoteDetails
70−
71− Image {
72− anchors.centerIn: parent
73− anchors.horizontalCenterOffset: units.gu(1)
74− source: dataModel.remoteSourceIcon ? dataModel.remoteSourceIcon : ""
75− fillMode: Image.PreserveAspectFit
76− }
77− }
78−
79− Column {
80− id: column
81−
82− property real minimumHeight: labelName.height + labelRemotePost.height + anchors.topMargin + anchors.bottomMargin
83−
84− anchors {
85− left: remoteSourceIconContainer.visible ? remoteSourceIconContainer.right : parent.left
86− right: parent.right
87− top: remoteSourceIconContainer.visible ? parent.top : undefined
88− verticalCenter: remoteSourceIconContainer.visible ? undefined : parent.verticalCenter
89− margins: units.gu(1)
90− }
91−
92− Label {
93− id: labelName
94−
95− width: parent.width
96− text: dataModel.name ? dataModel.name : ""
97− color: "white"
98− fontSize: "x-small"
99− elide: Text.ElideRight
100− font.weight: Font.Bold
101− onTextChanged: checkSizeForRemoteDetails()
102− }
103−
104− Label {
105− id: labelRemotePost
106−
107− width: parent.width
108− text: dataModel.remotePost ? dataModel.remotePost : ""
109− color: "white"
110− opacity: 0.8
111− fontSize: "xx-small"
112− elide: Text.ElideRight
113− maximumLineCount: 2
114− wrapMode: Text.WordWrap
115− onTextChanged: checkSizeForRemoteDetails()
116− }
117−
118− Label {
119− id: labelRemotePostTime
120−
121− width: parent.width
122− text: model.remotePostTime ? model.remotePostTime : ""
123− color: "white"
124− opacity: 0.5
125− fontSize: "xx-small"
126− elide: Text.ElideRight
127− visible: showRemoteDetails
128− onTextChanged: checkSizeForRemoteDetails()
129− }
130− }
131−
132− onHeightChanged: checkSizeForRemoteDetails()
133− onWidthChanged: checkSizeForRemoteDetails()
134− Component.onCompleted: checkSizeForRemoteDetails()
135− }
136− }
137−
138− Loader {
139− id: loader_frame
140−
141− anchors {
142− left: parent.left
143− right: parent.right
144− bottom: parent.bottom
145− }
146− height: item.frameHeight
147− opacity: item.explicitlyScaled ? 1.0 : 0
148−
149− Behavior on opacity {
150− NumberAnimation {
151− duration: 250
152− easing.type: Easing.InOutQuad
153− }
154− }
155−
156− sourceComponent: opacity > 0 ? component_frame : undefined
157− }
158−
159− BorderImage {
160− anchors.centerIn: parent
161− opacity: 0.6
162− source: "../../Components/graphics/non-selected.sci"
163− width: parent.width + units.gu(1.5)
164− height: parent.height + units.gu(1.5)
165− }
166−}
Dash/People/Data.qmldeleted−71
@@ -1,71 +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 Dee 3.0
19−
20−DeeVariantText {
21− property string uri
22− property string name
23− property url avatar
24− property var emails: ListModel {}
25− property var phones: ListModel {}
26− property string presenceStatus
27− property string presenceMessage
28− property url remoteSourceIcon
29− property string remotePost
30− property bool favorite
31− property bool recent
32− property url statusIcon
33− property string status: remotePost ? remotePost : presenceMessage
34− property url recentIcon
35− property string recentTime
36−
37− statusIcon: switch(presenceStatus) {
38− case "offline": "graphics/icon_offline.png"; break
39− // FIXME random for now, as we don't get actual presence data on the phone
40− case "":
41− var r = Math.random();
42− if (r >= 0.7) "graphics/icon_online.png"
43− else if (r >= 0.4) "graphics/icon_offline.png"
44− else "graphics/icon_unknown.png"
45− break;
46− default: "graphics/icon_online.png"
47− }
48−
49− onValueChanged: {
50− for (var i in value) switch (value[i][0]) {
51− case "presence-message": presenceMessage = value[i][1]; break
52− case "presence-status": presenceStatus = value[i][1]; break
53− case "remote-source-icon": remoteSourceIcon = value[i][1]; break
54− case "remote-post": remotePost = value[i][1]; break
55− case "recent-icon": recentIcon = value[i][1]; break
56− case "recent-time": recentTime = value[i][1]; break
57− case "phone": phones.append({"type": generateType(), "number": value[i][1]}); break
58− case "email": emails.append({"type": generateType(), "address": value[i][1]}); break
59− }
60− }
61−
62− // FIXME: random for now, as we don't have multiple phone numbers in the backend yet
63− function generateType() {
64− var phoneType = "";
65− var r = Math.random();
66− if (r >= 0.7) phoneType = "Private";
67− else if (r >= 0.4) phoneType = "Mobile";
68− else phoneType = "Work";
69− return phoneType;
70− }
71−}
Dash/People/Delegate.qmldeleted−167
@@ -1,167 +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 "../../Components"
20−import "../../Components/Time.js" as Time
21−
22−Item {
23− id: peopleView
24−
25− property var dataModel
26−
27− property int __spacing: units.gu(1)
28−
29− /* Select what is shown in the subtitle
30− data: phone number or email address
31− status: social media presence status
32− */
33− property string subtitleType: "data"
34− height: subtitleType == "data" && detailsLabel.lineCount < 2 ? units.gu(10) : units.gu(11.5)
35−
36− Row {
37− id: row
38− anchors {
39− left: parent.left
40− right: parent.right
41− leftMargin: units.gu(2)
42− rightMargin: units.gu(4)
43− top: parent.top
44− topMargin: units.gu(2)
45− }
46− spacing: __spacing
47−
48− UbuntuShape {
49− id: avatar
50− anchors { top: parent.top }
51− width: units.gu(6)
52− height: units.gu(6)
53− image: Image {
54− width: units.gu(6)
55− source: peopleView.dataModel.avatar
56− sourceSize { width: avatar.width; height: avatar.height }
57− fillMode: Image.PreserveAspectCrop
58− smooth: true
59− asynchronous: true
60− cache: false
61− }
62− }
63−
64− Grid {
65− spacing: units.gu(0.5)
66− width: parent.width - x
67− columns: 2
68−
69− Item {
70− height: units.gu(2)
71− width: units.gu(2)
72−
73− Image {
74− id: statusImage
75− source: peopleView.dataModel.statusIcon
76− width: units.gu(1.5)
77− height: units.gu(1.5)
78− fillMode: Image.PreserveAspectFit
79− smooth: true
80− anchors.verticalCenter: parent.verticalCenter
81− }
82− }
83−
84− Label {
85− id: nameLabel
86− elide: Text.ElideRight
87− text: peopleView.dataModel.name
88− color: "#f3f3e7"
89− style: Text.Raised
90− styleColor: "black"
91− font.weight: Font.DemiBold;
92− opacity: 0.9;
93− }
94−
95− Image {
96− source: switch(peopleView.subtitleType) {
97− case "data":
98− return peopleView.dataModel.remoteSourceIcon;
99− case "status":
100− return peopleView.dataModel.recent ? peopleView.dataModel.recentIcon : "";
101− }
102−
103− width: units.gu(1.5)
104− height: units.gu(1.5)
105− fillMode: Image.PreserveAspectFit
106− smooth: true
107− }
108−
109− Label {
110− id: detailsLabel
111− width: parent.width - x
112− elide: Text.ElideRight
113− text: switch (peopleView.subtitleType) {
114− case "data":
115− if (peopleView.dataModel.phones && peopleView.dataModel.phones.count > 0) {
116− return peopleView.dataModel.phones.get(0).number;
117− } else if (peopleView.dataModel.emails && peopleView.dataModel.emails.count > 0) {
118− return peopleView.dataModel.emails.get(0).address;
119− }
120− return "";
121− case "status":
122− return peopleView.dataModel.status;
123− }
124− color: "#f3f3e7"
125− style: Text.Raised
126− styleColor: "black"
127− opacity: 0.7;
128− fontSize: "small";
129− wrapMode: Text.WordWrap;
130− maximumLineCount: 2;
131− }
132−
133− Item {
134− height: units.gu(2)
135− width: units.gu(1.5)
136−
137− // Placeholder
138− }
139−
140− Label {
141− width: parent.width - x
142− elide: Text.ElideRight
143− text: switch (peopleView.subtitleType) {
144− case "data":
145− if (peopleView.dataModel.phones && peopleView.dataModel.phones.count > 0) {
146− return peopleView.dataModel.phones.get(0).type;
147− } else if (peopleView.dataModel.emails && peopleView.dataModel.emails.count > 0) {
148− return peopleView.dataModel.emails.get(0).type;
149− }
150− return "";
151− case "status":
152− if (peopleView.dataModel.recent) {
153− var time = Time.readableFromNow(peopleView.dataModel.recentTime);
154− return time ? time : peopleView.dataModel.recentTime;
155− } else {
156− return peopleView.dataModel.status
157− }
158− }
159− color: "#8f8f88"
160− style: Text.Raised
161− styleColor: "black"
162− opacity: 0.7;
163− fontSize: "x-small";
164− }
165− }
166− }
167−}
Dash/People/PeopleCarousel.qmldeleted−43
@@ -1,43 +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 "../../Components"
19−
20−Carousel {
21− id: peopleCarousel
22− tileAspectRatio: 1
23− minimumTileWidth: units.gu(13)
24− itemComponent: carouselDelegatePeople
25− selectedItemScaleFactor: 1.2
26− cacheBuffer: 1404 // 18px * 13gu * 6
27− height: implicitHeight + units.gu(6)
28−
29− Component {
30− id: carouselDelegatePeople
31− CarouselDelegatePeople {
32− dataModel: data
33−
34− Data {
35− id: data
36− uri: model.column_0
37− text: model.column_5
38− name: model.column_4
39− avatar: model.column_1
40− }
41− }
42− }
43−}
Dash/People/PeopleFilterGrid.qmldeleted−74
@@ -1,74 +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 "../../Components"
19−import "../../Components/ListItems" as ListItems
20−
21−FilterGrid {
22− id: filterGrid
23−
24− filter: true
25− minimumHorizontalSpacing: 0
26− delegateWidth: units.gu(40)
27− delegateHeight: showStatusMessage ? units.gu(11.5) : units.gu(10)
28− verticalSpacing: 0
29− collapsedRowCount: 50 / columns
30− expandable: false
31−
32− property int categoryId
33− property bool showStatusMessage: categoryId == 1 || categoryId == 2
34−
35− readonly property int columnCount: width / cellWidth
36−
37− signal clicked(int index, variant data, real itemY)
38−
39− delegate: ListItems.Base {
40− id: tile
41− objectName: "delegate" + index
42− width: filterGrid.cellWidth
43− showDivider: index < Math.floor((filterGrid.model.count-1) / filterGrid.columnCount) * filterGrid.columnCount
44−
45− onClicked: {
46− filterGrid.clicked(index, data, tile.y);
47− }
48−
49− Delegate {
50− width: filterGrid.cellWidth
51− height: filterGrid.cellHeight
52− // This caches the Delegate into FBO because:
53− // - People data Delegates are slow because of their item count
54− // - FilterGrid is "height: childrenRect.height" so all delegates are always loaded
55− // TODO: Optimize this by:
56− // - not loading all delegates all the time and remove layer.enabled and/or
57− // - destroy whole lens when not visible/needed to free the GPU memory
58− layer.enabled: true
59−
60− dataModel: data
61− subtitleType: filterGrid.showStatusMessage ? "status" : "data"
62−
63− Data {
64− id: data
65− uri: column_0
66− text: column_5
67− name: column_4
68− avatar: column_1
69− favorite: filterGrid.categoryId == 0
70− recent: filterGrid.showStatusMessage
71− }
72− }
73− }
74−}
Dash/People/PeoplePreview.qmldeleted−124
@@ -1,124 +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 "../../Components"
20−import "../../Components/ListItems" as ListItems
21−import ".."
22−import "Preview"
23−
24−DashPreview {
25− id: preview
26−
27− property var model: undefined
28−
29− title: (model && model.displayName) ? model.displayName : ""
30− url: (model && model.avatar) ? model.avatar : ""
31− previewWidthRatio: 0.34
32−
33−
34− description: Grid {
35− spacing: columns > 1 ? units.gu(2) : 0
36− columns: preview.narrowMode || width < units.gu(60) ? 1 : 2
37− property int columnWidth: columns > 1 ? (width - spacing * (columns - 1)) / columns : width
38− anchors {
39− left: parent.left
40− right: parent.right
41− }
42−
43− Status {
44− id: status
45− objectName: "statusField"
46− width: parent.columnWidth
47− visible: preview.model != undefined && preview.model.status != undefined
48− model: preview.model
49− property int index: 1
50− // FIXME that should trigger the action on the lens/scope, when there's support
51− onClicked: shell.activateApplication("/usr/share/applications/%1-webapp.desktop".arg(model.statusService), "--homepage=%1".arg(model.statusPostUri))
52− }
53−
54−
55− Column {
56− id: descriptionColumn
57− width: parent.columnWidth
58−
59−
60− Column {
61− anchors {
62− left: parent.left
63− right: parent.right
64− }
65−
66− Repeater {
67− model: preview.model ? preview.model.phoneNumbers : undefined
68−
69− delegate: Phone {
70− objectName: "phoneField" + index
71− model: preview.model
72− // FIXME these should trigger actions on the lens/scope, when there's support
73− onPhoneClicked: shell.activateApplication("/usr/share/applications/phone-app.desktop", "call://%1".arg(number.replace(/[^\d\+]/g, "")))
74− onTextClicked: shell.activateApplication("/usr/share/applications/phone-app.desktop", "message://%1".arg(number.replace(/[^\d\+]/g, "")))
75− }
76− }
77− }
78−
79− Column {
80− anchors {
81− left: parent.left
82− right: parent.right
83− }
84−
85− Repeater {
86− model: preview.model ? preview.model.emailAddresses : undefined
87− delegate: Generic {
88− objectName: "emailField" + index
89− type: "email"
90− }
91− }
92− }
93−
94− Column {
95− anchors {
96− left: parent.left
97− right: parent.right
98− }
99−
100− Repeater {
101− model: preview.model ? preview.model.imAccounts : undefined
102− delegate: Generic {
103− objectName: "imField" + index
104− type: "imAccount"
105− }
106− }
107− }
108−
109− Column {
110− anchors {
111− left: parent.left
112− right: parent.right
113− }
114−
115− Repeater {
116− model: preview.model ? preview.model.addresses : undefined
117− delegate: Address {
118− objectName: "addressField" + index
119− }
120− }
121− }
122− }
123− }
124−}
Dash/People/Preview/Address.qmldeleted−74
@@ -1,74 +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−
20−Base {
21− id: root
22−
23− Item {
24− anchors {
25− left: parent.left
26− right: parent.right
27− leftMargin: units.gu(2)
28− rightMargin: units.gu(4)
29− }
30− height: childrenRect.height + units.gu(2.5)
31−
32− Label {
33− id: typeLabel
34− anchors {
35− top: parent.top
36− topMargin: units.gu(1)
37− }
38− text: type
39− elide: Text.ElideRight
40− color: "#f3f3e7"
41− style: Text.Raised
42− styleColor: "black"
43− font.capitalization: Font.Capitalize
44− opacity: 0.7;
45− fontSize: "small"
46− }
47−
48− Label {
49− id: contentLabel
50− anchors {
51− left: parent.left
52− right: parent.right
53− top: typeLabel.bottom
54− topMargin: units.gu(0.5)
55− }
56− text: {
57− var fields = [street, poBox, extension, locality, region, postalCode, country, addressFormat]
58− var parts = []
59− for (var k in fields) {
60− if (fields[k]) parts.push(fields[k])
61− }
62− return parts.join("\n")
63− }
64− elide: Text.ElideRight
65− color: "#f3f3e7"
66− style: Text.Raised
67− styleColor: "black"
68− opacity: 0.9;
69− fontSize: "large"
70− wrapMode: Text.WordWrap
71− font.weight: Font.Light
72− }
73− }
74−}
Dash/People/Preview/Generic.qmldeleted−80
@@ -1,80 +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−
20−Base {
21− id: root
22−
23− property string type
24−
25− Item {
26− anchors {
27− left: parent.left
28− right: parent.right
29− leftMargin: units.gu(2)
30− rightMargin: units.gu(4)
31− }
32− height: childrenRect.height + units.gu(2.5)
33−
34− Label {
35− id: typeLabel
36− anchors {
37− top: parent.top
38− topMargin: units.gu(1)
39− }
40− text: switch (root.type) {
41− case "email":
42− case "address": type; break
43− case "imAccount": protocol; break
44− default: type
45− }
46− elide: Text.ElideRight
47− color: "#f3f3e7"
48− style: Text.Raised
49− styleColor: "black"
50− font.capitalization: Font.Capitalize
51− opacity: 0.7;
52− fontSize: "small"
53− }
54−
55− Label {
56− id: contentLabel
57− anchors {
58− left: parent.left
59− right: parent.right
60− top: typeLabel.bottom
61− topMargin: units.gu(0.5)
62− }
63− text: switch (root.type) {
64− case "email":
65− case "address":
66− case "imAccount": address; break
67− default: text
68− }
69− elide: Text.ElideRight
70− color: "#f3f3e7"
71− style: Text.Raised
72− styleColor: "black"
73− opacity: 0.9;
74− fontSize: "large"
75− wrapMode: Text.WordWrap
76− maximumLineCount: 2
77− font.weight: Font.Light
78− }
79− }
80−}
Dash/People/Preview/Phone.qmldeleted−108
@@ -1,108 +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 "../../../Components/ListItems" as ListItems
20−
21−Base {
22− id: root
23− highlightWhenPressed: false
24−
25− signal phoneClicked
26− signal textClicked
27−
28− Row {
29− height: phoneButton.height
30− anchors {
31− left: parent.left
32− right: parent.right
33− }
34− AbstractButton {
35− id: phoneButton
36− width: parent.width - units.gu(7)
37− height: Math.max(units.gu(8), phoneColumn.height + units.gu(2))
38− Column {
39− id: phoneColumn
40− spacing: units.gu(0.5)
41− anchors {
42− top: parent.top
43− topMargin: units.gu(1)
44− left: parent.left
45− leftMargin: units.gu(2)
46− right: parent.right
47− }
48− Label {
49− text: {
50− var parts = []
51− if (location) parts.push(location)
52− if (type && type != "voice") parts.push(type)
53− if (parts.length == 0) return "other"
54− return parts.join(" ")
55− }
56− elide: Text.ElideRight
57− color: "#f3f3e7"
58− style: Text.Raised
59− styleColor: "black"
60− font.capitalization: Font.Capitalize
61− opacity: 0.7;
62− fontSize: "small"
63− }
64− Label {
65− width: parent.width
66− text: number
67− elide: Text.ElideRight
68− color: "#f3f3e7"
69− style: Text.Raised
70− styleColor: "black"
71− opacity: 0.9;
72− fontSize: "large"
73− wrapMode: Text.WordWrap
74− maximumLineCount: 2
75− font.weight: Font.Light
76− }
77− }
78−
79− ListItems.Highlight {
80− anchors.fill: parent
81− pressed: phoneButton.pressed
82− }
83−
84− onClicked: phoneClicked()
85− }
86−
87− AbstractButton {
88− id: textButton
89− width: units.gu(7)
90− height: parent.height
91−
92− Image {
93− anchors.centerIn: parent
94− width: units.gu(4)
95− height: units.gu(4)
96− source: "../graphics/icon_write_text.png"
97− fillMode: Image.PreserveAspectFit
98− }
99−
100− ListItems.Highlight {
101− anchors.fill: parent
102− pressed: textButton.pressed
103− }
104−
105− onClicked: textClicked()
106− }
107− }
108−}
Dash/People/Preview/Status.qmldeleted−97
@@ -1,97 +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 "../../../Components/Time.js" as Time
20−
21−Base {
22− id: root
23−
24− Item {
25− anchors {
26− left: parent.left
27− right: parent.right
28− leftMargin: units.gu(2)
29− rightMargin: units.gu(4)
30− }
31− height: childrenRect.height
32−
33− Label {
34− id: typeLabel
35− anchors {
36− top: parent.top
37− topMargin: units.gu(1)
38− }
39− text: "Status"
40− elide: Text.ElideRight
41− color: "#f3f3e7"
42− style: Text.Raised
43− styleColor: "black"
44− font.capitalization: Font.Capitalize
45− opacity: 0.7;
46− fontSize: "small"
47− }
48−
49− Label {
50− id: contentLabel
51− anchors {
52− left: parent.left
53− right: parent.right
54− top: typeLabel.bottom
55− topMargin: units.gu(0.5)
56− }
57− text: root.model ? root.model.status : ""
58− elide: Text.ElideRight
59− color: "#f3f3e7"
60− style: Text.Raised
61− styleColor: "black"
62− opacity: 0.9;
63− fontSize: "large"
64− wrapMode: Text.WordWrap
65− maximumLineCount: 6
66− font.weight: Font.Light
67− }
68−
69− Row {
70− anchors {
71− top: contentLabel.bottom
72− topMargin: units.gu(1)
73− }
74− height: statusText.height + units.gu(2.5)
75− spacing: units.gu(1)
76− Image {
77− width: units.gu(2)
78− height: units.gu(2)
79− fillMode: Image.PreserveAspectFit
80− source: root.model ? root.model.statusServiceIcon : ""
81− }
82− Label {
83− id: statusText
84− text: if (root.model) {
85− var time = Time.readableFromNow(root.model.statusTime);
86− return time ? time : root.model.statusTime;
87− } else return "";
88− elide: Text.ElideRight
89− color: "#f3f3e7"
90− style: Text.Raised
91− styleColor: "black"
92− opacity: 0.7;
93− fontSize: "small"
94− }
95− }
96− }
97−}
Dash/People/graphics/bottomshape@18.pngdeleted

Binary file not shown.

Dash/People/graphics/bottomshape@18.scideleted−5
@@ -1,5 +0,0 @@
1−border.left: 54
2−border.top: 60
3−border.bottom: 60
4−border.right: 54
5−source: bottomshape@18.png
Dash/People/graphics/icon_facebook@18.pngdeleted

Binary file not shown.

Dash/People/graphics/icon_offline@18.pngdeleted

Binary file not shown.

Dash/People/graphics/icon_online@18.pngdeleted

Binary file not shown.

Dash/People/graphics/icon_twitter@18.pngdeleted

Binary file not shown.

Dash/People/graphics/icon_unknown@18.pngdeleted

Binary file not shown.

Dash/People/graphics/icon_write_text@18.pngdeleted

Binary file not shown.

Dash/People/graphics/star_favourite@18.pngdeleted

Binary file not shown.

Dash/People/graphics/star_not_favourite@18.pngdeleted

Binary file not shown.

Dash/Video/VideoInfo.qmldeleted−84
@@ -1,84 +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 QtQuick.XmlListModel 2.0
19−
20−Item {
21− id: info
22− property string source
23−
24− property bool ready: nfo.status == XmlListModel.Ready || nfoTV.status == XmlListModel.Ready
25− property bool isMovie: true
26− property variant video: null
27− property variant tvShow: null
28−
29− function getActors() {
30− var c = []
31− if (video.actor1) c.push(video.actor1)
32− if (video.actor2) c.push(video.actor2)
33− if (video.actor3) c.push(video.actor3)
34− return c
35− }
36−
37− onSourceChanged: isMovie = true
38−
39− XmlListModel {
40− id: nfo
41− source: info.source
42− query: (isMovie) ? "/movie" : "/episodedetails"
43−
44− XmlRole { name: "title"; query: "title/string()" }
45− XmlRole { name: "year"; query: "year/number()" }
46− XmlRole { name: "runtime"; query: "runtime/number()" }
47− XmlRole { name: "rating"; query: "rating/number()" }
48− XmlRole { name: "plot"; query: "plot/string()" }
49− XmlRole { name: "director"; query: "director[1]/string()" }
50− XmlRole { name: "actor1"; query: "actor[1]/name/string()" }
51− XmlRole { name: "actor2"; query: "actor[2]/name/string()" }
52− XmlRole { name: "actor3"; query: "actor[3]/name/string()" }
53− XmlRole { name: "author"; query: "author[1]/string()" }
54− XmlRole { name: "season"; query: "season/number()" }
55− XmlRole { name: "episode"; query: "episode/number()" }
56−
57− XmlRole { name: "rentPrice"; query: "rent_price/string()" }
58− XmlRole { name: "buyPrice"; query: "buy_price/string()" }
59− XmlRole { name: "expires"; query: "expires/string()" }
60−
61− onStatusChanged: if (status == XmlListModel.Ready) {
62− if (count > 0) info.video = nfo.get(0)
63− else info.isMovie = false
64− } else if (status == XmlListModel.Error) info.isMovie = false
65− }
66−
67− XmlListModel {
68− id: nfoTV
69− source: (nfo.isMovie) ? "" : info.source.substring(0, info.source.lastIndexOf("/") + 1) + "tvshow.nfo"
70− query: "/tvshow"
71−
72− XmlRole { name: "title"; query: "title/string()" }
73−
74− onStatusChanged: if (status == XmlListModel.Ready) {
75− if (count > 0) info.tvShow = nfoTV.get(0)
76− } else if (status == XmlListModel.Error) {
77− // Search for tvshow.nfo in the directory above this one to cater
78− // for directory layout Show/Season
79− var path = info.source.split("/")
80− path.splice(-2, 2, "tvshow.nfo")
81− source = path.join("/")
82− }
83− }
84−}
Dash/Video/VideoPreview.qmldeleted−178
@@ -1,178 +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 ".."
20−import "../../Components"
21−
22−DashPreview {
23− id: root
24−
25− property var item
26− property alias ready: nfo.ready
27− readonly property url fileUri: item ? item.fileUri : ""
28−
29− VideoInfo {
30− id: nfo
31− source: item ? item.nfoUri : ""
32− }
33−
34− title: nfo.ready ? nfo.video.title : ""
35− url: item ? item.nfoUri.replace(/\.nfo$/, "-fanart.jpg") : ""
36− previewWidthRatio: 0.6
37− playable: fileUri != ""
38−
39− onPreviewImageClicked: {
40− if (playable) {
41− shell.activateApplication('/usr/share/applications/mediaplayer-app.desktop', root.fileUri);
42− }
43− }
44−
45− buttons: Row {
46− spacing: units.gu(2)
47−
48− property int buttonWidth: Math.min(units.gu(22), (width - spacing) / 2)
49− Button {
50− width: parent.buttonWidth
51− color: "#dd4814"
52− text: nfo.ready && nfo.video.buyPrice != "" ? "Buy for " + nfo.video.buyPrice : ""
53− visible: text != ""
54− iconSource: "graphics/icon_button_amazon.png"
55− iconPosition: "right"
56− }
57− Button {
58− width: parent.buttonWidth
59− color: "#dd4814"
60− text: nfo.ready && nfo.video.buyPrice != "" ? "Rent for " + nfo.video.rentPrice : ""
61− visible: text != ""
62− iconSource: "graphics/icon_button_u1.png"
63− iconPosition: "right"
64− }
65− }
66−
67− description: Column {
68− spacing: units.gu(2)
69− RatingStars {
70− maximumRating: 10 // FIXME: this should happen on the backend side
71− rating: nfo.ready ? nfo.video.rating: 0
72− }
73−
74− Label {
75− text: nfo.ready ? nfo.video.plot : ""
76− color: "#f3f3e7"
77− opacity: .6
78− fontSize: "medium"
79− width: parent.width
80− wrapMode: Text.WordWrap
81− style: Text.Raised
82− styleColor: "black"
83− }
84−
85− Grid {
86− columns: 2
87− spacing: units.gu(1)
88− width: parent.width
89− property int firstColWidth: units.gu(9)
90− property int secondColWidth: width - firstColWidth - spacing
91− Label {
92− visible: directedLabel.visible
93− fontSize: "small"
94− opacity: 0.9
95− color: "white"
96− horizontalAlignment: Text.AlignRight
97− width: parent.firstColWidth
98− text: i18n.tr("Directed by:")
99− style: Text.Raised
100− styleColor: "black"
101− }
102− Label {
103− id: directedLabel
104− visible: text != ""
105− fontSize: "small"
106− opacity: 0.6
107− color: "white"
108− width: parent.secondColWidth
109− text: nfo.ready ? nfo.video.director : ""
110− style: Text.Raised
111− styleColor: "black"
112− wrapMode: Text.WordWrap
113− }
114− Label {
115− visible: starringLabel.visible
116− fontSize: "small"
117− opacity: 0.9
118− horizontalAlignment: Text.AlignRight
119− color: "white"
120− width: parent.firstColWidth
121− text: i18n.tr("Starring:")
122− style: Text.Raised
123− styleColor: "black"
124− }
125− Label {
126− id: starringLabel
127− visible: text != ""
128− fontSize: "small"
129− opacity: 0.6
130− color: "white"
131− width: parent.secondColWidth
132− text: nfo.ready ? nfo.getActors().join(", ") : ""
133− wrapMode: Text.WordWrap
134− style: Text.Raised
135− styleColor: "black"
136− }
137− Label {
138− visible: authorLabel.visible
139− fontSize: "small"
140− opacity: 0.9
141− horizontalAlignment: Text.AlignRight
142− color: "white"
143− width: parent.firstColWidth
144− text: i18n.tr("Author:")
145− style: Text.Raised
146− styleColor: "black"
147− }
148− Label {
149− id: authorLabel
150− visible: text != ""
151− fontSize: "small"
152− opacity: 0.6
153− color: "white"
154− width: parent.secondColWidth
155− text: nfo.ready ? nfo.video.author : ""
156− wrapMode: Text.WordWrap
157− style: Text.Raised
158− styleColor: "black"
159− }
160− }
161−
162− Label {
163− fontSize: "small"
164− opacity: 0.6
165− color: "white"
166− text: {
167− var parts = []
168− if (nfo.ready) {
169− if (nfo.video.year) parts.push(nfo.video.year)
170− if (nfo.video.runtime) parts.push("%1 minutes".arg(nfo.video.runtime))
171− }
172− return parts.join(", ");
173− }
174− style: Text.Raised
175− styleColor: "black"
176− }
177− }
178−}
Dash/Video/VideosFilterGrid.qmldeleted−51
@@ -1,51 +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 "../../Components"
19−
20−FilterGrid {
21− id: filtergrid
22−
23− expandable: false
24− minimumHorizontalSpacing: units.gu(0.5)
25− maximumNumberOfColumns: 5
26− delegateWidth: units.gu(11)
27− delegateHeight: iconHeight + units.gu(2.5)
28− verticalSpacing: units.gu(2)
29−
30− readonly property int iconWidth: (width / columns) * 0.8
31− readonly property int iconHeight: iconWidth * 16 / 11
32−
33− signal clicked(int index, var data, real itemY)
34−
35− delegate: Tile {
36− id: tile
37− objectName: "delegate" + index
38− width: filtergrid.cellWidth
39− height: filtergrid.cellHeight
40− text: model.column_4
41− imageWidth: filtergrid.iconWidth
42− imageHeight: filtergrid.iconHeight
43− source: model.column_1
44− fillMode: Image.PreserveAspectCrop
45− onClicked: {
46− var fileUri = model.column_0.replace(/^[^:]+:/, "")
47− var data = {fileUri: fileUri, nfoUri: model.column_5}
48− filtergrid.clicked(index, data, tile.y);
49− }
50− }
51−}
Dash/Video/graphics/icon_button_amazon@20.pngdeleted

Binary file not shown.

Dash/Video/graphics/icon_button_u1@20.pngdeleted

Binary file not shown.

Dash/graphics/icon_clear@20.pngdeleted

Binary file not shown.

Dash/graphics/icon_listview_clear@20.pngdeleted

Binary file not shown.

Dash/graphics/icon_search_active@20.pngdeleted

Binary file not shown.

Dash/graphics/icon_search_inactive@20.pngdeleted

Binary file not shown.

Dash/graphics/lensIcons/Applications@18.pngdeleted

Binary file not shown.

Dash/graphics/lensIcons/Home@18.pngdeleted

Binary file not shown.

Dash/graphics/lensIcons/Music@18.pngdeleted

Binary file not shown.

Dash/graphics/lensIcons/People@18.pngdeleted

Binary file not shown.

Dash/graphics/lensIcons/Videos@18.pngdeleted

Binary file not shown.

Dash/graphics/phone/home.pngdeleted

Binary file not shown.

Dash/graphics/phone/music.pngdeleted

Binary file not shown.

Dash/graphics/phone/screenshots/angrybirds@12.pngdeleted

Binary file not shown.

Dash/graphics/phone/screenshots/browser@12.pngdeleted

Binary file not shown.

Dash/graphics/phone/screenshots/camera@12.pngdeleted

Binary file not shown.

Dash/graphics/phone/screenshots/facebook@12.pngdeleted

Binary file not shown.

Dash/graphics/phone/screenshots/gallery@12.pngdeleted

Binary file not shown.

Dash/graphics/phone/screenshots/map@12.pngdeleted

Binary file not shown.

Dash/graphics/phone/screenshots/music@12.pngdeleted

Binary file not shown.

Dash/graphics/phone/screenshots/phone@12.pngdeleted

Binary file not shown.

Dash/graphics/phone/screenshots/settings@12.pngdeleted

Binary file not shown.

Dash/graphics/phone/screenshots/twitter@12.pngdeleted

Binary file not shown.

Dash/graphics/phone/videos.pngdeleted

Binary file not shown.

Dash/graphics/play_button@18.pngdeleted

Binary file not shown.

Dash/graphics/play_button_active@18.pngdeleted

Binary file not shown.

Dash/graphics/play_button_active_big@20.pngdeleted

Binary file not shown.

Dash/graphics/play_button_big@20.pngdeleted

Binary file not shown.

Dash/graphics/tablet/apps.pngdeleted

Binary file not shown.

Dash/graphics/tablet/home.pngdeleted

Binary file not shown.

Dash/graphics/tablet/icon_close_preview@20.pngdeleted

Binary file not shown.

Dash/graphics/tablet/music.pngdeleted

Binary file not shown.

Dash/graphics/tablet/people.pngdeleted

Binary file not shown.

Dash/graphics/tablet/videos.pngdeleted

Binary file not shown.

Greeter/Clock.qmldeleted−66
@@ -1,66 +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−
20−Item {
21− id: clock
22−
23− implicitWidth: childrenRect.width
24− implicitHeight: childrenRect.height
25−
26− property date __date
27− property alias __timerInterval: timer.interval
28− readonly property bool __timerRunning: timer.running
29−
30− Timer {
31− id: timer
32− interval: 1000 * 60
33− running: clock.enabled && clock.visible && clock.opacity != 0
34− repeat: true
35− triggeredOnStart: true
36− onTriggered: __date = new Date
37− }
38−
39− Column {
40− spacing: units.gu(0.5)
41−
42− Label {
43− id: timeLabel
44− objectName: "timeLabel"
45−
46− anchors.horizontalCenter: parent.horizontalCenter
47− font.pixelSize: units.gu(7.5)
48− color: "white"
49− opacity: 0.5
50− text: Qt.formatTime(__date)
51− font.weight: Font.Light
52− }
53−
54− Label {
55− id: dateLabel
56− objectName: "dateLabel"
57−
58− anchors.horizontalCenter: parent.horizontalCenter
59− fontSize: "medium"
60− color: "white"
61− opacity: 0.5
62− text: Qt.formatDate(__date, Qt.DefaultLocaleLongDate)
63− font.weight: Font.Light
64− }
65− }
66−}
Greeter/Greeter.qmldeleted−94
@@ -1,94 +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 LightDM 0.1 as LightDM
20−import "../Components"
21−
22−Showable {
23− id: greeter
24− enabled: shown
25− created: greeterContentLoader.status == Loader.Ready && greeterContentLoader.item.ready
26−
27− property alias model: greeterContentLoader.model
28− property bool locked: shown && multiUser && !greeterContentLoader.promptless
29−
30− readonly property bool narrowMode: !multiUser && width <= units.gu(60)
31− readonly property bool multiUser: LightDM.Users.count > 1
32−
33− readonly property bool leftTeaserPressed: greeterContentLoader.status == Loader.Ready &&
34− greeterContentLoader.item.leftTeaserPressed
35− readonly property bool rightTeaserPressed: greeterContentLoader.status == Loader.Ready &&
36− greeterContentLoader.item.rightTeaserPressed
37−
38− signal selected(int uid)
39− signal unlocked(int uid)
40−
41− onRightTeaserPressedChanged: {
42− if (rightTeaserPressed) {
43− teasingTimer.start();
44− }
45− }
46−
47− Loader {
48− id: greeterContentLoader
49− objectName: "greeterContentLoader"
50− anchors.fill: parent
51− property var model: LightDM.Users
52− property int currentIndex: 0
53− property bool promptless: item ? item.promptless : false
54− property var infographicModel: LightDM.Infographic
55−
56− source: required ? "GreeterContent.qml" : ""
57−
58−
59− Connections {
60− target: greeterContentLoader.item
61−
62− onSelected: greeter.selected(uid);
63− onUnlocked: greeter.unlocked(uid);
64− }
65− }
66−
67− Timer {
68− id: teasingTimer
69− interval: 200
70− }
71−
72− states: [
73− State {
74− name: "teasing"
75− when: greeter.rightTeaserPressed || teasingTimer.running
76− PropertyChanges {
77− target: greeter
78− x: -units.gu(2)
79− }
80− }
81− ]
82− transitions: [
83− Transition {
84− from: "*"
85− to: "*"
86− NumberAnimation {
87− target: greeter
88− property: "x"
89− duration: 300
90− easing.type: Easing.OutCubic
91− }
92− }
93− ]
94−}
Greeter/GreeterContent.qmldeleted−133
@@ -1,133 +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 LightDM 0.1 as LightDM
20−import "../Components"
21−
22−MouseArea {
23− id: root
24− anchors.fill: parent
25−
26− property bool promptless: loginLoader.status == Loader.Ready && LightDM.Greeter.promptless
27− property bool ready: wallpaper.status == Image.Ready
28− property bool leftTeaserPressed: teasingMouseArea.pressed &&
29− teasingMouseArea.mouseX < teasingMouseArea.width / 2
30− property bool rightTeaserPressed: teasingMouseArea.pressed &&
31− teasingMouseArea.mouseX > teasingMouseArea.width / 2
32−
33− signal selected(int uid)
34− signal unlocked(int uid)
35−
36− CrossFadeImage {
37− id: wallpaper
38−
39− source: shell.background
40− anchors.fill: parent
41− crossFade: false
42− fadeInFirst: false
43− }
44−
45− Rectangle {
46− anchors.fill: parent
47− color: "black"
48− opacity: 0.4
49− }
50−
51− Clock {
52− id: clock
53− visible: narrowMode
54−
55− anchors {
56− top: parent.top
57− topMargin: units.gu(2)
58− horizontalCenter: parent.horizontalCenter
59− }
60− }
61−
62− MouseArea {
63− id: teasingMouseArea
64− anchors.fill: parent
65− }
66−
67− Loader {
68− id: loginLoader
69− objectName: "loginLoader"
70− anchors {
71− left: parent.left
72− leftMargin: Math.min(parent.width * 0.16, units.gu(20))
73− verticalCenter: parent.verticalCenter
74− }
75− width: units.gu(29)
76− height: parent.height
77−
78− // TODO: Once we have a system API for determining which mode we are
79− // in, tablet/phone/desktop, that should be used instead of narrowMode.
80− source: greeter.narrowMode ? "" : "LoginList.qml"
81−
82− onLoaded: {
83− item.currentIndex = greeterContentLoader.currentIndex
84− }
85−
86− Binding {
87− target: loginLoader.item
88− property: "model"
89− value: greeterContentLoader.model
90− }
91−
92− Connections {
93− target: loginLoader.item
94−
95− onSelected: {
96− root.selected(uid);
97− }
98−
99− onUnlocked: {
100− root.unlocked(uid);
101− }
102−
103− onCurrentIndexChanged: {
104− if (greeterContentLoader.currentIndex !== loginLoader.item.currentIndex) {
105− greeterContentLoader.currentIndex = loginLoader.item.currentIndex;
106− }
107− }
108− }
109− }
110−
111− Infographics {
112− id: infographics
113− height: narrowMode ? parent.height : 0.75 * parent.height
114− model: greeterContentLoader.infographicModel
115−
116− Component.onCompleted: infographics.updateUsername(greeterContentLoader.currentIndex)
117−
118− Connections {
119− target: root
120− onSelected: infographics.updateUsername(uid)
121− }
122−
123− function updateUsername(uid) {
124− greeterContentLoader.infographicModel.username = greeterContentLoader.model.data(uid, LightDM.UserRoles.NameRole)
125− }
126−
127− anchors {
128− verticalCenter: parent.verticalCenter
129− left: narrowMode ? root.left : loginLoader.right
130− right: root.right
131− }
132− }
133−}
Greeter/Lockscreen.qmldeleted−149
@@ -1,149 +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 "../Components"
20−import LightDM 0.1 as LightDM
21−
22−Showable {
23− id: root
24−
25− // Determine if a numeric or alphanumeric pad is used.
26− property bool alphaNumeric: false
27−
28− // Placeholder text
29− property string placeholderText: ""
30−
31− // In case the Lockscreen can show a greeter message, this is the username
32− property string username: ""
33−
34− // As the numeric PIN pad doesn't have a OK button by design, we need to auto-confirm on a certain length.
35− // This is ignored by the alphaNumeric lockscreen as that one is confirmed with pressing enter on the OSK.
36− property int pinLength: 4
37−
38− property url background: ""
39−
40− signal unlocked()
41− signal cancel()
42− signal emergencyCall()
43−
44− function reset() {
45− pinPadLoader.resetting = true;
46− pinPadLoader.resetting = false;
47− }
48−
49− Image {
50− anchors.fill: parent
51− source: root.required ? root.background : ""
52− }
53−
54− MouseArea {
55− anchors.fill: root
56− }
57−
58− Loader {
59− id: pinPadLoader
60− objectName: "pinPadLoader"
61− anchors {
62− left: parent.left
63− right: parent.right
64− verticalCenter: parent.verticalCenter
65− verticalCenterOffset: root.alphaNumeric ? -units.gu(10) : 0
66− }
67− property bool resetting: false
68−
69− source: (!resetting && root.required) ? (root.alphaNumeric ? "PassphraseLockscreen.qml" : "PinLockscreen.qml") : ""
70−
71− Connections {
72− target: pinPadLoader.item
73−
74− onEntered: {
75− LightDM.Greeter.respond(passphrase);
76− }
77−
78− onCancel: {
79− root.cancel()
80− }
81− }
82−
83− Binding {
84− target: pinPadLoader.item
85− property: "pinLength"
86− value: root.pinLength
87− }
88− Binding {
89− target: pinPadLoader.item
90− property: "placeholderText"
91− value: root.placeholderText
92− }
93− Binding {
94− target: pinPadLoader.item
95− property: "username"
96− value: root.username
97− }
98− }
99−
100− Column {
101− anchors {
102− left: parent.left
103− top: pinPadLoader.bottom
104− topMargin: units.gu(4)
105− right: parent.right
106− bottom: parent.bottom
107− }
108− spacing: units.gu(1)
109−
110− Icon {
111− objectName: "emergencyCallIcon"
112− height: units.gu(3)
113− width: height
114− anchors.horizontalCenter: parent.horizontalCenter
115− name: "phone-app-call-symbolic"
116− color: "white"
117− opacity: 0.9
118−
119− MouseArea {
120− anchors.fill: parent
121− onClicked: root.emergencyCall()
122− }
123− }
124−
125− Label {
126− text: i18n.tr("Emergency call")
127− color: "white"
128− opacity: 0.9
129− fontSize: "medium"
130− anchors.horizontalCenter: parent.horizontalCenter
131− }
132− }
133−
134− Connections {
135− target: LightDM.Greeter
136−
137− onAuthenticationComplete: {
138− if (LightDM.Greeter.promptless) {
139− return;
140− }
141− if (LightDM.Greeter.authenticated) {
142− root.unlocked();
143− pinPadLoader.item.clear(false);
144− } else {
145− pinPadLoader.item.clear(true);
146− }
147− }
148− }
149−}
Greeter/LoginList.qmldeleted−301
@@ -1,301 +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 LightDM 0.1 as LightDM
20−import "../Components"
21−
22−Item {
23− id: root
24−
25− property alias userList: userList
26− property alias model: userList.model
27− property alias currentIndex: userList.currentIndex
28−
29− readonly property int numAboveBelow: 4
30− readonly property int cellHeight: units.gu(5)
31− readonly property int highlightedHeight: units.gu(10)
32− readonly property int moveDuration: 200
33− property bool wasPrompted: false
34−
35− signal selected(int uid)
36− signal unlocked(int uid)
37−
38− Keys.onEscapePressed: root.resetAuthentication()
39−
40− Rectangle {
41− id: highlightItem
42− anchors {
43− left: parent.left
44− right: parent.right
45− verticalCenter: parent.verticalCenter
46− }
47− height: root.highlightedHeight
48− color: Qt.rgba(0.1, 0.1, 0.1, 0.4)
49− border.color: Qt.rgba(0.4, 0.4, 0.4, 0.4)
50− border.width: units.dp(1)
51− radius: units.gu(1.5)
52− antialiasing: true
53− }
54−
55− ListView {
56− id: userList
57− objectName: "userList"
58−
59− anchors.fill: parent
60−
61− preferredHighlightBegin: userList.height / 2 - root.highlightedHeight / 2
62− preferredHighlightEnd: userList.height / 2 - root.highlightedHeight / 2
63− highlightRangeMode: ListView.StrictlyEnforceRange
64− highlightMoveDuration: root.moveDuration
65− flickDeceleration: 10000
66−
67− readonly property bool movingInternally: moveTimer.running || userList.moving
68−
69− onCountChanged: {
70− // Start authentication when we start up
71− if (!LightDM.Greeter.authenticationUser && userList.currentItem) {
72− root.selected(userList.currentIndex);
73− root.resetAuthentication();
74− }
75− }
76−
77− onCurrentIndexChanged: {
78− if (LightDM.Greeter.authenticationUser != userList.model.data(currentIndex, LightDM.UserRoles.NameRole)) {
79− root.resetAuthentication();
80− }
81− }
82−
83− onMovingInternallyChanged: {
84− // Only emit the selected signal once we stop moving to avoid frequent background changes
85− if (!movingInternally) {
86− root.selected(userList.currentIndex);
87− }
88− }
89−
90− delegate: Item {
91− width: parent.width
92− height: root.cellHeight
93−
94− readonly property bool belowHighlight: (userList.currentIndex < 0 && index > 0) || (userList.currentIndex >= 0 && index > userList.currentIndex)
95− readonly property int belowOffset: root.highlightedHeight - root.cellHeight
96−
97− opacity: {
98− // The goal here is to make names less and less opaque as they
99− // leave the highlight area. Can't simply use index, because
100− // that can change quickly if the user clicks at edges of
101− // list. So we use actual pixel distance.
102− var highlightDist = 0;
103− var realY = y - userList.contentY;
104− if (belowHighlight)
105− realY += belowOffset;
106− if (realY + height <= highlightItem.y)
107− highlightDist = realY + height - highlightItem.y;
108− else if (realY >= highlightItem.y + root.highlightedHeight)
109− highlightDist = realY - highlightItem.y - root.highlightedHeight;
110− else
111− return 1;
112− return 1 - Math.min(1, (Math.abs(highlightDist) + root.cellHeight) / ((root.numAboveBelow + 1) * root.cellHeight))
113− }
114−
115− Label {
116− objectName: "username" + index
117−
118− anchors {
119− left: parent.left
120− leftMargin: units.gu(2)
121− right: parent.right
122− rightMargin: units.gu(2)
123− top: parent.top
124− // Add an offset to topMargin for any items below the highlight
125− topMargin: units.gu(1) + (parent.belowHighlight ? parent.belowOffset : 0)
126− }
127− text: realName
128− color: "white"
129− elide: Text.ElideRight
130−
131− Behavior on anchors.topMargin { NumberAnimation { duration: root.moveDuration; easing.type: Easing.InOutQuad; } }
132− }
133−
134− MouseArea {
135− anchors {
136− left: parent.left
137− right: parent.right
138− top: parent.top
139− // Add an offset to topMargin for any items below the highlight
140− topMargin: parent.belowHighlight ? parent.belowOffset : 0
141− }
142− height: parent.height
143− enabled: userList.currentIndex !== index
144− onClicked: {
145− moveTimer.start();
146− userList.currentIndex = index;
147− }
148−
149− Behavior on anchors.topMargin { NumberAnimation { duration: root.moveDuration; easing.type: Easing.InOutQuad; } }
150− }
151− }
152−
153− // This is needed because ListView.moving is not true if the ListView
154− // moves because of an internal event (e.g. currentIndex has changed)
155− Timer {
156− id: moveTimer
157− running: false
158− repeat: false
159− interval: root.moveDuration
160− }
161− }
162−
163− Label {
164− id: infoLabel
165− objectName: "infoLabel"
166− anchors {
167− bottom: passwordInput.top
168− left: parent.left
169− topMargin: units.gu(1)
170− bottomMargin: units.gu(1)
171− leftMargin: units.gu(2)
172− rightMargin: units.gu(1)
173− }
174−
175− color: "white"
176− width: root.width - anchors.leftMargin - anchors.rightMargin
177− fontSize: "small"
178− textFormat: Text.StyledText
179− clip: true
180−
181− opacity: (userList.movingInternally || text == "") ? 0 : 1
182− Behavior on opacity {
183− NumberAnimation { duration: 100 }
184− }
185− }
186−
187− TextField {
188− id: passwordInput
189− objectName: "passwordInput"
190− anchors {
191− bottom: highlightItem.bottom
192− horizontalCenter: parent.horizontalCenter
193− margins: units.gu(1)
194− }
195− height: units.gu(4.5)
196− width: parent.width - anchors.margins * 2
197− opacity: userList.movingInternally ? 0 : 1
198−
199− Behavior on opacity {
200− NumberAnimation { duration: 100 }
201− }
202−
203− onAccepted: {
204− if (!enabled)
205− return;
206− root.focus = true; // so that it can handle Escape presses for us
207− enabled = false;
208− LightDM.Greeter.respond(text);
209− }
210− Keys.onEscapePressed: root.resetAuthentication()
211−
212− Image {
213− anchors {
214− right: parent.right
215− rightMargin: units.gu(2)
216− verticalCenter: parent.verticalCenter
217− }
218− visible: LightDM.Greeter.promptless
219− source: "graphics/icon_arrow.png"
220− }
221−
222− WrongPasswordAnimation {
223− id: wrongPasswordAnimation
224− target: passwordInput
225− }
226−
227− Connections {
228− target: Qt.inputMethod
229− onVisibleChanged: {
230− if (!Qt.inputMethod.visible) {
231− passwordInput.focus = false;
232− }
233− }
234− }
235−
236− }
237−
238− MouseArea {
239− anchors.fill: passwordInput
240− enabled: LightDM.Greeter.promptless
241− onClicked: {
242− if (LightDM.Greeter.authenticated)
243− root.unlocked(userList.currentIndex);
244− else
245− root.resetAuthentication();
246− }
247− }
248−
249− function resetAuthentication() {
250− if (!userList.currentItem) {
251− return;
252− }
253− infoLabel.text = "";
254− passwordInput.placeholderText = "";
255− passwordInput.text = "";
256− passwordInput.focus = false;
257− passwordInput.enabled = true;
258− root.wasPrompted = false;
259− LightDM.Greeter.authenticate(userList.model.data(currentIndex, LightDM.UserRoles.NameRole));
260− }
261−
262− Connections {
263− target: LightDM.Greeter
264−
265− onShowMessage: {
266− // inefficient, but we only rarely deal with messages
267− text = text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\n/g, "<br>");
268− if (isError)
269− text = "<font color=\"#df382c\">" + text + "</font>"
270− if (infoLabel.text == "")
271− infoLabel.text = text;
272− else
273− infoLabel.text = infoLabel.text + "<br>" + text;
274− }
275−
276− onShowPrompt: {
277− passwordInput.text = "";
278− passwordInput.placeholderText = text;
279− passwordInput.enabled = true;
280− passwordInput.echoMode = isSecret ? TextInput.Password : TextInput.Normal;
281− if (root.wasPrompted) // stay in text field if second prompt
282− passwordInput.focus = true;
283− root.wasPrompted = true;
284− }
285−
286− onAuthenticationComplete: {
287− if (LightDM.Greeter.promptless) {
288− passwordInput.placeholderText = LightDM.Greeter.authenticated ? "Tap to unlock" : "Retry";
289− return;
290− }
291− if (LightDM.Greeter.authenticated) {
292− root.unlocked(userList.currentIndex);
293− } else {
294− wrongPasswordAnimation.start();
295− root.resetAuthentication();
296− passwordInput.focus = true;
297− }
298− passwordInput.text = "";
299− }
300− }
301−}
Greeter/PassphraseLockscreen.qmldeleted−87
@@ -1,87 +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 "../Components"
20−
21−Item {
22− id: root
23− height: highlightItem.height
24−
25− property alias placeholderText: pinentryField.placeholderText
26− property string username: ""
27−
28− signal entered(string passphrase)
29− signal cancel()
30−
31− function clear(playAnimation) {
32− pinentryField.text = "";
33− if (playAnimation) {
34− wrongPasswordAnimation.start();
35− } else {
36− pinentryField.focus = false
37− }
38− }
39−
40− Rectangle {
41− id: highlightItem
42− width: units.gu(32)
43− height: units.gu(10)
44− anchors.centerIn: parent
45− color: Qt.rgba(0.1, 0.1, 0.1, 0.4)
46− border.color: Qt.rgba(0.4, 0.4, 0.4, 0.4)
47− border.width: units.dp(1)
48− radius: units.gu(1.5)
49− antialiasing: true
50−
51− Label {
52− objectName: "greeterLabel"
53− anchors {
54− left: parent.left
55− top: parent.top
56− right: parent.right
57− margins: units.gu(1.5)
58− }
59− text: root.username.length > 0 ? i18n.tr("Hello %1").arg(root.username) : i18n.tr("Hello")
60− color: "white"
61− }
62−
63− TextField {
64− id: pinentryField
65− objectName: "pinentryField"
66− anchors {
67− horizontalCenter: parent.horizontalCenter
68− bottom: parent.bottom
69− margins: units.gu(1)
70− }
71− height: units.gu(4.5)
72− width: parent.width - units.gu(2)
73− echoMode: TextInput.Password
74− opacity: 0.9
75− hasClearButton: false
76−
77− onAccepted: {
78− root.entered(pinentryField.text);
79− }
80− }
81− }
82−
83− WrongPasswordAnimation {
84− id: wrongPasswordAnimation
85− target: pinentryField
86− }
87−}
Greeter/PinLockscreen.qmldeleted−111
@@ -1,111 +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 "../Components"
20−
21−Column {
22− id: root
23− anchors.centerIn: parent
24− spacing: units.gu(2.5)
25−
26− property alias placeholderText: pinentryField.placeholderText
27− property int padWidth: units.gu(32)
28− property int pinLength: 4
29−
30− signal entered(string passphrase)
31− signal cancel()
32−
33− function clear(playAnimation) {
34− pinentryField.text = "";
35− if (playAnimation) {
36− wrongPasswordAnimation.start();
37− }
38− }
39−
40− TextField {
41− id: pinentryField
42− objectName: "pinentryField"
43− anchors.horizontalCenter: parent.horizontalCenter
44− width: units.gu(32)
45− height: units.gu(5)
46− echoMode: TextInput.Password
47− font.pixelSize: units.dp(44)
48− color: "white"
49− opacity: 0.9
50− hasClearButton: false
51− horizontalAlignment: Text.AlignHCenter
52−
53− onTextChanged: {
54− if (pinentryField.text.length === root.pinLength) {
55− root.entered(pinentryField.text);
56− }
57− }
58−
59− // Using a MouseArea to eat clicks. We don't want to disable the TextField for styling reasons
60− MouseArea {
61− anchors.fill: parent
62− }
63− }
64−
65− Grid {
66− anchors {
67− left: parent.left
68− right: parent.right
69− margins: (parent.width - root.padWidth) / 2
70− }
71−
72− columns: 3
73− spacing: units.gu(1)
74−
75− Repeater {
76− model: 9
77−
78− PinPadButton {
79− objectName: "pinPadButton" + (index + 1)
80− text: index + 1
81−
82− onClicked: {
83− pinentryField.text = pinentryField.text + text
84− }
85− }
86− }
87−
88− PinPadButton {
89− objectName: "pinPadButtonBack"
90− iconName: "back"
91− onClicked: root.cancel();
92−
93− }
94− PinPadButton {
95− objectName: "pinPadButton0"
96− text: "0"
97− onClicked: pinentryField.text = pinentryField.text + text
98−
99− }
100− PinPadButton {
101− objectName: "pinPadButtonErase"
102− iconName: "erase"
103− onClicked: pinentryField.text = pinentryField.text.substring(0, pinentryField.text.length-1)
104− }
105− }
106−
107− WrongPasswordAnimation {
108− id: wrongPasswordAnimation
109− target: pinentryField
110− }
111−}
Greeter/PinPadButton.qmldeleted−59
@@ -1,59 +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−
20−UbuntuShape {
21− id: root
22− width: units.gu(10)
23− height: units.gu(7)
24− radius: "medium"
25−
26− property alias text: label.text
27− property alias iconName: icon.name
28−
29− signal clicked()
30−
31− Behavior on color {
32− ColorAnimation { duration: 100 }
33− }
34−
35− Label {
36− id: label
37− anchors.centerIn: parent
38− color: "white"
39− fontSize: "x-large"
40− font.weight: Font.Light
41− opacity: 0.9
42− }
43−
44− Icon {
45− id: icon
46− height: units.gu(3)
47− width: height
48− anchors.centerIn: parent
49− color: "white"
50− opacity: 0.9
51− }
52−
53− MouseArea {
54− anchors.fill: parent
55− onClicked: root.clicked()
56− onPressed: root.color = Qt.rgba(0, 0, 0, 0.3)
57− onReleased: root.color = Qt.rgba(0, 0, 0, 0)
58− }
59−}
Greeter/graphics/dot_empty.pngdeleted

Binary file not shown.

Greeter/graphics/dot_filled.pngdeleted

Binary file not shown.

Greeter/graphics/dot_pointer.pngdeleted

Binary file not shown.

Greeter/graphics/icon_arrow.pngdeleted

Binary file not shown.

Greeter/graphics/infographic_circle.pngdeleted

Binary file not shown.

Hud/Hud.qmldeleted−496
@@ -1,496 +0,0 @@
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−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−import HudClient 0.1
20−
21−import "../Components"
22−
23−Item {
24− id: hud
25−
26− readonly property real elementsPadding: units.gu(1)
27− readonly property real elementsYSliding: units.gu(2)
28−
29− property alias revealerTarget: hudShowable
30− property alias showAnimation: hudShowable.showAnimation
31− property alias hideAnimation: hudShowable.hideAnimation
32− property alias available: hudShowable.available
33− property alias shown: hudShowable.shown
34− property alias handleHeight: handle.height
35−
36− readonly property variant outEasing: Easing.OutQuad
37− readonly property variant inEasing: Easing.InQuad
38− readonly property int animationDuration: 200
39− readonly property int showableAnimationDuration: 100
40− property bool showingOpenIndicator: false
41−
42− // FIXME At the moment since we have no appstack
43− // it's not possible to get results of the sidestage app
44− // design has to come up with a solution
45− function show() {
46− hudShowable.show()
47− }
48− function hide() {
49− hudShowable.hide()
50− }
51− function resetToInitialState() {
52− hud.state = "initial"
53− searchBar.unfocus()
54− searchBar.text = ""
55− parametrizedActionsPage.shown = false
56− }
57−
58− states: [
59− State {
60− name: "initial"
61− PropertyChanges { target: searchBar; placeholderText: i18n.tr("Type or say a command") }
62− PropertyChanges { target: searchBar; searchEnabled: true }
63− PropertyChanges { target: toolBarAnimator; visible: true}
64− AnchorChanges { target: searchBarAnimator; anchors.top: undefined; anchors.bottom: parent.bottom; }
65− AnchorChanges { target: resultsCardAnimator; anchors.top: undefined; anchors.bottom: toolBarAnimator.top; }
66− },
67− State {
68− name: "input" //only inherited by other states.
69− AnchorChanges { target: searchBarAnimator; anchors.top: parent.top; anchors.bottom: undefined; }
70− AnchorChanges { target: resultsCardAnimator; anchors.top: searchBarAnimator.bottom; anchors.bottom: undefined; }
71− PropertyChanges { target: toolBarAnimator; visible: false }
72− },
73− State {
74− name: "voice_input" //only inherited by other states.
75− extend: "input"
76− PropertyChanges { target: soundAmplitudeVisualAnimator; visible: true }
77− PropertyChanges { target: resultsCardAnimator; visible: false }
78− PropertyChanges { target: soundAmplitudeVisualAnimator; progress: 1 }
79− PropertyChanges { target: searchBar; searchEnabled: false }
80− },
81− State {
82− name: "voice_recognition_loading"
83− extend: "voice_input"
84− PropertyChanges { target: searchBar; placeholderText: i18n.tr("Loading. Please Wait...") }
85− },
86− State {
87− name: "voice_recognition_listening"
88− extend: "voice_input"
89− PropertyChanges { target: searchBar; placeholderText: i18n.tr("Speak Now...") }
90− },
91− State {
92− name: "voice_recognition_processing"
93− extend: "voice_input"
94− PropertyChanges { target: searchBar; placeholderText: i18n.tr("Speaking...") }
95− },
96− State {
97− name: "showing_results"
98− extend: "input"
99− PropertyChanges { target: searchBar; placeholderText: i18n.tr("Type or say a command") }
100− PropertyChanges { target: searchBar; searchEnabled: true }
101− }
102− ]
103−
104− transitions: [
105− Transition {
106− from: "initial"
107− to: "voice_recognition_loading"
108− SequentialAnimation {
109− NumberAnimation { // hide these components
110− targets: [toolBarAnimator, searchBarAnimator, resultsCardAnimator]
111− property: "progress"; duration: animationDuration; to: 0
112− }
113−
114− PropertyAction { targets: [toolBarAnimator, resultsCardAnimator]; property: "visible"; value: false}
115− PropertyAction { target: soundAmplitudeVisualAnimator; property: "visible"; value: true}
116−
117− AnchorAnimation { duration: 0 } // so anchor change happens at this point
118−
119− NumberAnimation { // show these components
120− targets: [searchBarAnimator, soundAmplitudeVisualAnimator]
121− property: "progress"; duration: animationDuration; from: 0; to: 1
122− }
123− }
124− },
125− Transition {
126− from: "showing_results"
127− to: "voice_recognition_loading"
128− SequentialAnimation {
129− PropertyAction { target: soundAmplitudeVisualAnimator; property: "progress"; value: 0}
130−
131− PropertyAction { // hide these components
132− target: resultsCardAnimator; property: "progress"; value: 0
133− }
134−
135− NumberAnimation { // show these components
136− target: soundAmplitudeVisualAnimator; property: "progress"; duration: animationDuration; from: 0; to: 1
137− }
138− }
139− },
140− Transition {
141− from: "voice_recognition_processing"
142− to: "showing_results"
143− SequentialAnimation {
144− NumberAnimation { // hide these components
145− target: soundAmplitudeVisualAnimator; property: "progress"; duration: animationDuration; to: 0
146− }
147− PropertyAction { target: resultsCardAnimator; property: "visible"; value: true}
148−
149− NumberAnimation { // show these components
150− target: resultsCardAnimator; property: "progress"; duration: animationDuration; from: 0; to: 1
151− }
152− }
153− },
154− Transition {
155− from: "initial"
156− to: "showing_results"
157− SequentialAnimation {
158− NumberAnimation {
159− targets: [toolBarAnimator, searchBarAnimator, resultsCardAnimator]
160− property: "progress"; duration: animationDuration; to: 0
161− }
162−
163− PropertyAction { target: toolBarAnimator; property: "visible"; value: false}
164−
165− AnchorAnimation { duration: 0 } // so anchor change happens at this point
166−
167− NumberAnimation {
168− targets: [searchBarAnimator, resultsCardAnimator]
169− property: "progress"; duration: animationDuration; from: 0; to: 1
170− }
171− }
172− }
173− ]
174−
175− state: "initial"
176−
177− HudClient {
178− id: hudClient
179−
180− onCommandExecuted: {
181− hudShowable.hide()
182− }
183−
184− onShowParametrizedAction: {
185− parametrizedActionsPage.header = action
186− parametrizedActionsPage.setItems(items)
187− parametrizedActionsPage.shown = true
188− }
189−
190− onVoiceQueryLoading: {
191− hud.state = "voice_recognition_loading"
192− searchBar.ignoreNextTextChange = true
193− searchBar.text = ""
194− searchBar.unfocus()
195− soundAmplitudeVisual.startIdle()
196− }
197− onVoiceQueryListening: {
198− if (hud.state == "voice_recognition_loading" || hud.state == "showing_results") {
199− searchBar.ignoreNextTextChange = true
200− searchBar.text = ""
201− searchBar.unfocus()
202− hud.state = "voice_recognition_listening"
203− }
204− }
205− onVoiceQueryHeardSomething: {
206− if (hud.state == "voice_recognition_listening") {
207− hud.state = "voice_recognition_processing"
208− soundAmplitudeVisual.setDetectorEnabled(true)
209− }
210− }
211− onVoiceQueryFinished: {
212− hud.state = "showing_results"
213− searchBar.text = query
214− soundAmplitudeVisual.setDetectorEnabled(false)
215− }
216− onVoiceQueryFailed: {
217− hud.state = "showing_results"
218− searchBar.text = ""
219− soundAmplitudeVisual.setDetectorEnabled(false)
220− }
221− }
222−
223− Showable {
224− id: hudShowable
225− objectName: "hudShowable"
226− height: parent.height
227− width: parent.width
228−
229− onYChanged: {
230− if (greeter.shown) {
231− showAnimation.duration = 0
232− hideAnimation.duration = 0
233− } else if (!showAnimation.running && !hideAnimation.running) {
234− if (parent.height > 0) {
235− showAnimation.duration = Math.min(showableAnimationDuration * (1 - (parent.height - y) / parent.height), showableAnimationDuration)
236− hideAnimation.duration = showableAnimationDuration - showAnimation.duration
237− }
238− }
239− }
240−
241− MouseArea {
242− // Eat everything that doesn't go to other places
243− anchors.fill: parent
244− }
245−
246− Image {
247− anchors.fill: parent
248− fillMode: Image.Tile
249− source: "graphics/hud_bg.png"
250− }
251−
252− Connections {
253− target: hideAnimation
254− onRunningChanged: {
255− if (!hideAnimation.running) {
256− showAnimation.duration = showableAnimationDuration
257− hud.resetToInitialState()
258− }
259− }
260− }
261−
262− Connections {
263− target: showAnimation
264− onRunningChanged: {
265− if (!showAnimation.running) {
266− hideAnimation.duration = showableAnimationDuration
267− }
268− }
269− }
270− }
271−
272− Item {
273− id: handle
274− objectName: "handle"
275−
276− y: hudShowable.y
277− anchors {
278− left: parent.left
279− right: parent.right
280− }
281− height: handleImage.height
282−
283− Image {
284− id: handleImage
285− anchors {
286− left: parent.left
287− right: parent.right
288− }
289− source: "graphics/hud_handlebar.png"
290− }
291−
292− Image {
293− id: handleArrow
294− y: units.gu(1)
295− anchors.horizontalCenter: parent.horizontalCenter
296− source: "graphics/hud_handlearrow.png"
297− cache: false
298− }
299− }
300−
301− Item {
302− id: hudContentClipper
303−
304− anchors {
305− left: parent.left
306− right: parent.right
307− bottom: parent.bottom
308− top: handle.bottom
309− }
310− clip: visible && hudContent.height !== height
311− visible: hudContent.height >= 0
312−
313− Item {
314− id: hudContent
315− anchors {
316− left: parent.left
317− right: parent.right
318− bottom: parent.bottom
319− }
320− height: hud.height
321−
322− Item {
323− id: mainPage
324− x: parametrizedActionsPage.x - width
325− height: hud.height
326− width: hud.width
327−
328− ShowingAnimation {
329− id: toolBarAnimator
330− objectName: "toolBarAnimator"
331− anchors {
332− left: parent.left
333− right: parent.right
334− bottom: searchBarAnimator.top
335− margins: 2*elementsPadding //ensures positioning correct
336− }
337− progress: MathUtils.clamp((y - hudShowable.y - anchors.margins)/elementsYSliding, 0, 1)
338−
339− ToolBar {
340− id: toolBar
341− objectName: "toolBar"
342− model: hudClient.toolBarModel
343− anchors.horizontalCenter: parent.horizontalCenter
344− onActionTriggered: {
345− hudClient.executeToolBarAction(action)
346− }
347− }
348− }
349−
350− ShowingAnimation {
351− id: searchBarAnimator
352− objectName: "searchBarAnimator"
353− anchors {
354− left: parent.left
355− right: parent.right
356− bottom: parent.bottom
357− margins: elementsPadding
358− topMargin: handle.height + units.dp(1) + elementsPadding
359− }
360− progress: MathUtils.clamp((y - hudShowable.y - anchors.margins)/elementsYSliding, 0, 1)
361−
362− SearchBar {
363− id: searchBar
364− objectName: "searchBar"
365−
366− property bool ignoreNextTextChange: false
367−
368− anchors.left: parent.left
369− anchors.right: parent.right
370− height: units.gu(5)
371−
372− placeholderText: i18n.tr("Type or say a command")
373− activityIndicatorVisible: hud.state == "voice_recognition_processing"
374−
375− onMicrophoneClicked: hudClient.startVoiceQuery()
376−
377− onTextChanged: {
378− if (ignoreNextTextChange) {
379− ignoreNextTextChange = false
380− } else {
381− hudClient.setQuery(searchBar.text)
382− }
383− }
384−
385− onTextFocused: {
386− hud.state = "showing_results"
387− }
388− }
389− }
390−
391− ShowingAnimation {
392− id: resultsCardAnimator
393− objectName: "resultsCardAnimator"
394−
395− anchors {
396− left: parent.left
397− right: parent.right
398− top: searchBarAnimator.bottom
399− margins: elementsPadding
400− }
401− progress: MathUtils.clamp((y - hudShowable.y + height - units.gu(8))/elementsYSliding, 0, 1)
402−
403− Flickable {
404− anchors.left: parent.left
405− anchors.right: parent.right
406− contentHeight: resultList.height
407− contentWidth: width
408− clip: height < contentHeight
409− interactive: height < contentHeight
410−
411− height: {
412− if (hud.state == "showing_results") {
413− return shell.applicationManager.keyboardVisible ? Math.min(hud.height - searchBarAnimator.y - searchBarAnimator.height - units.gu(2) - shell.applicationManager.keyboardHeight, contentHeight) : contentHeight
414− } else {
415− return contentHeight
416− }
417− }
418−
419−
420− ResultList {
421− id: resultList
422−
423− anchors.left: parent.left
424− anchors.right: parent.right
425− height: childrenRect.height
426−
427− onActivated: {
428− hudClient.executeCommand(index)
429− }
430−
431− model: hudClient.results
432− }
433− }
434− }
435−
436− ShowingAnimation {
437− id: soundAmplitudeVisualAnimator
438−
439− anchors {
440− horizontalCenter: parent.horizontalCenter
441− verticalCenter: parent.verticalCenter
442− verticalCenterOffset: (searchBar.height + 2*elementsPadding)/2
443− }
444− visible: false
445− width: units.gu(33)
446− progress: MathUtils.clamp((y - hudShowable.y - anchors.verticalCenterOffset)/elementsYSliding, 0, 1)
447−
448− SoundAmplitudeVisual {
449− id: soundAmplitudeVisual
450− width: units.gu(33)
451− height: width
452− }
453− }
454− }
455−
456− HudParametrizedActionsPage {
457− id: parametrizedActionsPage
458− objectName: "parametrizedActionsPage"
459− property bool shown: false
460−
461− anchors.bottom: parent.bottom
462− height: hud.height - handle.height - units.dp(1)
463− width: parent.width
464− x: shown ? 0 : width
465− onConfirmPressed: {
466− hudClient.executeParametrizedAction(values())
467− }
468− onValuesUpdated: {
469− hudClient.updateParametrizedAction(values())
470− }
471− onBackPressed: {
472− shown = false
473− }
474− onShownChanged: {
475− if (!shown) {
476− hudClient.cancelParametrizedAction()
477− }
478− }
479− Behavior on x {
480− NumberAnimation {
481− easing.type: outEasing
482− duration: animationDuration
483− }
484− }
485− }
486− }
487− }
488−
489− Image {
490− anchors.left: hudContentClipper.right
491− anchors.top: hudContentClipper.top
492− anchors.bottom: hudContentClipper.bottom
493− fillMode: Image.Tile
494− source: "graphics/dropshadow_right.png"
495− }
496−}
Hud/HudParametrizedActionsPage.qmldeleted−172
@@ -1,172 +0,0 @@
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−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−import "../Components"
20−
21−Item {
22− property alias header: header.text
23− signal backPressed
24− signal confirmPressed
25− signal valuesUpdated
26− id: root
27−
28− ListModel {
29− id: actionItems
30− }
31−
32− function setItems(items) {
33− while (actionItems.count > 0) {
34− var item = actionItems.get(0).item
35− actionItems.remove(0)
36− item.visible = false
37− item.destroy()
38− }
39−
40− var sliderCreator = Qt.createComponent("SliderLabel.qml");
41− var first = true
42− var topAnchor = header.bottom
43− for (var i = 0; i < items.length; i++) {
44− var item = items[i]
45− if (item["parameter-type"] == "slider")
46− {
47− var slider = sliderCreator.createObject(flickableColumn);
48− slider.anchors.left = flickableColumn.left
49− slider.anchors.right = flickableColumn.right
50− slider.anchors.topMargin = first ? units.gu(1) : units.gu(2)
51− slider.anchors.top = topAnchor
52− slider.tooltip = tooltip
53− slider.sliderData = item
54− topAnchor = slider.bottom
55− actionItems.append({"item": slider})
56− slider.onValueChanged.connect(valueChanged)
57− }
58− first = false
59− }
60− }
61−
62− function valueChanged()
63− {
64− valuesUpdated()
65− }
66−
67− function values() {
68− var values = {}
69− for (var i = 0; i < actionItems.count; ++i) {
70− var item = actionItems.get(i).item
71− values[item.action] = item.value
72− }
73− return values
74− }
75−
76− Flickable {
77− anchors.top: parent.top
78− anchors.bottom: buttons.top
79− anchors.left: parent.left
80− anchors.right: parent.right
81− clip: true
82−
83− flickableDirection: Flickable.VerticalFlick
84− interactive: !tooltip.visible
85−
86− Item {
87− id: flickableColumn
88− anchors.top: parent.top
89− anchors.left: parent.left
90− anchors.right: parent.right
91−
92− PageHeader {
93− id: header
94− anchors.top: parent.top
95− anchors.left: parent.left
96− anchors.right: parent.right
97− anchors.topMargin: units.gu(1)
98− }
99− }
100− }
101− Item {
102− id: buttons
103− anchors.bottom: parent.bottom
104− anchors.left: parent.left
105− anchors.right: parent.right
106− anchors.margins: units.gu(1)
107− height: confirmButton.height
108−
109− Button {
110− id: backButton
111− anchors.left: parent.left
112− anchors.top: parent.top
113− anchors.bottom: parent.bottom
114− width: units.gu(7)
115− color: "black"
116− opacity: 0.25
117− MouseArea {
118− anchors.fill: parent
119− onClicked: backPressed()
120− }
121− }
122− Image {
123− anchors.centerIn: backButton
124− source: "graphics/icon_arrow.png"
125− }
126−
127− Button {
128− id: confirmButton
129− anchors.right: parent.right
130− width: units.gu(13)
131− height: units.gu(5)
132− text: i18n.tr("Confirm")
133− color: "#F05D22"
134− onClicked: confirmPressed()
135− }
136− }
137−
138− Item {
139− id: tooltip
140− property variant target: undefined
141− visible: target != undefined
142− y: visible ? root.mapFromItem(target.parent, 0, target.y).y - height : 0
143− x: visible ? target.anchors.leftMargin + target.__internals.thumb.x + target.__internals.thumb.width / 2 - width / 2 : 0
144−
145− width: childrenRect.width
146− height: childrenRect.height
147−
148− Rectangle {
149− id: tooltipRectangle
150− width: units.gu(8)
151− height: units.gu(6)
152− color: "white"
153− radius: units.gu(0.5)
154−
155− Label {
156− anchors.fill: parent
157− text: tooltip.target ? tooltip.target.realFormatValue(tooltip.target.value) : ""
158− horizontalAlignment: Text.AlignHCenter
159− verticalAlignment: Text.AlignVCenter
160− fontSize: "large"
161− }
162− }
163− Image {
164− id: tooltipTip
165− source: "graphics/popup_triangle.png"
166−
167− anchors.top: tooltipRectangle.bottom
168− anchors.horizontalCenter: parent.horizontalCenter
169− }
170−
171− }
172−}
Hud/Result.qmldeleted−84
@@ -1,84 +0,0 @@
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−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−
20−Item {
21− property string contextSnippetText
22− property variant contextSnippetHighlights
23− property string nameText
24− property variant nameHighlights
25−
26− function highlightedText(text, highlights) {
27− var hText = "";
28− var nextIndexToProcess = 0;
29− if (highlights && highlights.length % 2 == 0) {
30− for (var i = 0; i < highlights.length - 1; i += 2) {
31− var highlightStart = highlights[i];
32− var highlightEnd = highlights[i + 1];
33− if (highlightEnd < highlightStart)
34− continue;
35− if (highlightStart < nextIndexToProcess)
36− continue;
37− if (highlightStart != nextIndexToProcess) {
38− // Prev non marked text
39− hText += text.substr(nextIndexToProcess, highlightStart - nextIndexToProcess);
40− }
41−
42− // Marked text
43− hText += "<font color=\"#ffffff\">" + text.substr(highlightStart, highlightEnd - highlightStart + 1) + "</font>";
44− nextIndexToProcess = highlightEnd + 1;
45− }
46− }
47− if (nextIndexToProcess != text.length) {
48− // End non marked text
49− hText += text.substr(nextIndexToProcess);
50− }
51− return hText;
52− }
53−
54− Label {
55− id: actionLabel
56− objectName: "actionLabel"
57− anchors.left: parent.left
58− anchors.leftMargin: units.gu(1)
59− anchors.verticalCenter: parent.verticalCenter
60− width: parent.width / 2
61− fontSize: "medium"
62− elide: Text.ElideRight
63− maximumLineCount: 1
64− text: highlightedText(nameText, nameHighlights)
65− color: "#80ffffff"
66− }
67−
68− Label {
69− horizontalAlignment: Text.AlignRight
70− id: contextSnippetLabel
71− objectName: "contextSnippetLabel"
72− width: parent.width / 2 - units.gu(1)
73− visible: text != ""
74− anchors.right: parent.right
75− anchors.rightMargin: units.gu(1)
76− anchors.verticalCenter: parent.verticalCenter
77− fontSize: "small"
78− opacity: 0.5
79− elide: Text.ElideRight
80− maximumLineCount: 2
81− text: highlightedText(contextSnippetText, contextSnippetHighlights)
82− color: "#80ffffff"
83− }
84−}
Hud/ResultList.qmldeleted−106
@@ -1,106 +0,0 @@
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−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−
20−Column {
21− property var model: undefined
22−
23− // Hud gives lots of results, make sure we have 5 at most
24− // FIXME This should use SortFilterProxyModel
25− // but there is a problem with the hud-service refreshing the
26− // data for no reason so we use the internal model + timer
27− // to fix those issues
28− ListModel {
29− id: internalModel
30− }
31−
32− Connections {
33− target: model
34− // Accumulate count changes since hud clears
35− // and then readds items to the models which means
36− // even if the result is the same we get lots of count changes
37− onCountChanged: updateModelTimer.restart()
38− }
39−
40− onModelChanged: updateModelTimer.restart()
41−
42− Timer {
43− id: updateModelTimer
44− interval: 30
45− onTriggered: updateModel()
46− }
47−
48− function updateModel() {
49− internalModel.clear()
50− for (var i = 0; i < 5 && i < model.count; ++i) {
51− var itemData = model.get(i)
52− internalModel.append({"name": itemData.column_1, "highlights": itemData.column_2, "context": itemData.column_3, "contextHighlights": itemData.column_4})
53− }
54− }
55−
56− signal activated(int index)
57−
58− height: repeater.height
59−
60− Repeater {
61− id: repeater
62− objectName: "resultListRepeater"
63− model: internalModel
64−
65− delegate: MouseArea {
66− id: delegate
67− height: result.height + separatorLine.height * 2
68− anchors.left: parent.left
69− anchors.right: parent.right
70−
71− onClicked: activated(index)
72−
73− BorderImage {
74− id: separatorLine
75− anchors.top: parent.top
76− anchors.left: parent.left
77− anchors.right: parent.right
78− source: "graphics/divider.sci"
79− visible: index == 0
80− }
81−
82− Result {
83− id: result
84− height: units.gu(6)
85− anchors.top: separatorLine.bottom
86− anchors.left: parent.left
87− anchors.right: parent.right
88−
89− nameText: name
90− nameHighlights: highlights
91− contextSnippetText: context
92− contextSnippetHighlights: contextHighlights
93− }
94−
95− BorderImage {
96− anchors.top: result.bottom
97− anchors.left: parent.left
98− anchors.right: parent.right
99− source: "graphics/divider.sci"
100− }
101−
102− Component.onCompleted: fadeIn.start()
103− NumberAnimation { id: fadeIn; target: resultList; alwaysRunToEnd: true; property: "opacity"; duration: 200; from: 0; to: 1 }
104− }
105− }
106−}
Hud/SearchBar.qmldeleted−107
@@ -1,107 +0,0 @@
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−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−
20−Item {
21− id: root
22− property alias activityIndicatorVisible: activityIndicator.visible
23− property alias text: searchBar.text
24− property alias placeholderText: searchBar.placeholderText
25− property alias searchEnabled: searchBar.enabled
26− signal microphoneClicked
27− signal textFocused
28−
29− readonly property real imageSize: units.gu(3)
30−
31− function unfocus()
32− {
33− searchBar.focus = false
34− }
35−
36− ActivityIndicator {
37− id: activityIndicator
38− height: imageSize
39− width: height
40− x: magnifierImage.x
41− y: magnifierImage.y
42− running: visible
43− }
44−
45− TextField {
46− id: searchBar
47− anchors.fill: parent
48−
49− hasClearButton: false
50− font.pixelSize: FontUtils.sizeToPixels("large")
51−
52− onActiveFocusChanged: {
53− if (activeFocus) {
54− root.textFocused()
55− }
56− }
57−
58− // Don't let the style play with our opacity
59− Binding {
60− target: searchBar.ItemStyle.style
61− property: "opacity"
62− value: 1
63− }
64−
65− Item {
66− id: primary
67− height: searchBar.height
68− width: height
69−
70− Image {
71− id: magnifierImage
72− height: imageSize
73− width: height
74− anchors.centerIn: parent
75− source: "graphics/icon_search.png"
76− visible: !activityIndicator.visible && !clearImage.visible
77− }
78−
79− Image {
80− id: clearImage
81− height: imageSize
82− width: height
83− anchors.centerIn: parent
84− source: "graphics/icon_clear.png"
85− visible: !activityIndicator.visible && searchBar.text != ""
86− MouseArea {
87− anchors.fill: parent
88− onClicked: searchBar.text = ""
89− }
90− }
91− }
92−
93− primaryItem: primary
94− secondaryItem: MouseArea {
95− height: searchBar.height
96− width: height
97− onClicked: microphoneClicked()
98−
99− Image {
100− height: imageSize
101− width: height
102− anchors.centerIn: parent
103− source: "graphics/microphone.png"
104− }
105− }
106− }
107−}
Hud/ShowingAnimation.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 Ubuntu.Components 0.1
19−import "../Components"
20−
21−Item {
22− id: root
23− property real yOffsetAtAnimationStart: units.gu(2)
24− property real progress: 0
25− property int animationDuration: 200
26− default property alias __itemsToAnimate: container.children
27−
28− property bool showing: progress > 0
29−
30− height: childrenRect.height
31−
32− Item {
33− id: container
34− anchors {
35− left: parent.left
36− right: parent.right
37− }
38− height: childrenRect.height
39− }
40−
41− NumberAnimation {id: opacityAnimation; target: container; property: "opacity"; from: 0; to: 1; duration: animationDuration}
42− NumberAnimation {id: yAnimation; target: container; property: "y"; from: yOffsetAtAnimationStart; to: 0; duration: animationDuration}
43−
44− // FIXME This would much more sense in a ParallelAnimation and just
45− // one AnimationController but that goes something crazy and rendering never stops
46− AnimationController {
47− animation: opacityAnimation
48− progress: root.progress
49− }
50− AnimationController {
51− animation: yAnimation
52− progress: root.progress
53− }
54−}
Hud/SliderLabel.qmldeleted−74
@@ -1,74 +0,0 @@
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−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−
20−Item {
21− height: childrenRect.height
22− width: childrenRect.width
23− property variant tooltip
24−
25− property variant sliderData
26− property string action
27− property alias value: slider.value
28− onValueChanged: {
29− // TODO We should not need this but without it
30− // slider.onValueChanged.connect(valueChanged) in
31− // HudParametrizedActionsPage.qml doesn't work
32− // Michael thinks it's related to https://bugreports.qt-project.org/browse/QTBUG-29141
33− }
34−
35− onSliderDataChanged: {
36− label.text = sliderData["label"]
37− slider.minimumValue = sliderData["min"]
38− slider.maximumValue = sliderData["max"]
39− slider.live = sliderData["live"]
40− // SDK Slider does not support step yet
41−// slider.step = sliderData["step"]
42− slider.value = sliderData["value"]
43− action = sliderData["action"]
44− }
45−
46− Label {
47− id: label
48− anchors.top: parent.top
49− anchors.left: parent.left
50− anchors.right: parent.right
51− anchors.margins: units.gu(1)
52− anchors.leftMargin: units.gu(2)
53− color: "white"
54− }
55− Slider {
56− id: slider
57− anchors.top: label.bottom
58− anchors.left: parent.left
59− anchors.right: parent.right
60− anchors.margins: units.gu(1)
61− height: units.gu(6)
62− live: true
63− function realFormatValue(v) { return Math.round(v) + " %" }
64− function formatValue(v) { return tooltip.target == slider ? "" : realFormatValue(v) }
65− onPressedChanged: tooltip.target = pressed ? slider : undefined
66− }
67− BorderImage {
68− source: "graphics/divider.sci"
69− anchors.top: slider.bottom
70− anchors.left: parent.left
71− anchors.right: parent.right
72− anchors.topMargin: units.gu(2)
73− }
74−}
Hud/SoundAmplitudeDelegate.qmldeleted−52
@@ -1,52 +0,0 @@
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−
17−import QtQuick 2.0
18−
19−Rectangle {
20− id: delegate
21− property real amplitude: 0
22− property int totalCount
23− property int ballIndex
24− width: {
25− var t = amplitude / 0.6
26− t = -t * (t - 2)
27− return units.gu(0.25) + units.gu(5) * t
28− }
29− visible: amplitude != 0
30− height: width
31− color: "#DD4814"
32− radius: width * 0.5
33− antialiasing: true
34− opacity: {
35− // TODO This formula has hardocded values everywhere :D
36− var t
37− var dampenAfterThisIndex = 7
38− if (ballIndex < dampenAfterThisIndex) {
39− t = (totalCount - ballIndex) / totalCount
40− return Math.pow(t, 4);
41− } else {
42− t = (totalCount - dampenAfterThisIndex) / totalCount
43− t = Math.pow(t, 4);
44− t = t * 0.7;
45− return 0.09 + t * (totalCount - ballIndex) / (totalCount - dampenAfterThisIndex)
46− }
47− }
48−
49− property double orbitRadius: ((parent.width - units.gu(6)) / 2)
50− x: -(width / 2) + (parent.width / 2) + orbitRadius * Math.sin((ballIndex / totalCount) * (2 * Math.PI))
51− y: -(height / 2) + (parent.height / 2) - orbitRadius * Math.cos((ballIndex / totalCount) * (2 * Math.PI))
52−}
Hud/SoundAmplitudeVisual.qmldeleted−146
@@ -1,146 +0,0 @@
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−
17−import QtQuick 2.0
18−import HudClient 0.1
19−
20−Item {
21− id: voiceInput
22−
23− readonly property int totalSpots: 30
24− readonly property int totalIdles: 7
25−
26− property real __newPeak: 0
27−
28− VolumePeakDetector {
29− id: peakDetector
30− desiredInterval: peakMover.interval
31− onNewPeak: {
32− __newPeak = volume
33− }
34− }
35−
36− Timer {
37− id: peakMover
38− interval: 10
39− repeat: true
40− onTriggered: {
41− moveBalls()
42− voiceAmplitudes.itemAt(0).amplitude = __newPeak
43− }
44− }
45−
46− Repeater {
47− id: fixedPositionSoundAmplitudes
48− model: totalSpots
49− delegate: SoundAmplitudeDelegate {
50− totalCount: fixedPositionSoundAmplitudes.count
51− ballIndex: index
52− opacity: 1
53− visible: true
54− }
55− }
56−
57− Repeater {
58− id: voiceAmplitudes
59− model: totalSpots
60− delegate: SoundAmplitudeDelegate {
61− totalCount: voiceAmplitudes.count
62− ballIndex: index
63− }
64− }
65−
66− Repeater {
67− id: idleAmplitudes
68− model: totalSpots
69− delegate: SoundAmplitudeDelegate {
70− totalCount: idleAmplitudes.count
71− ballIndex: index
72− amplitude: 0.05
73− visible: idleAmplitudes.enabled
74− }
75− }
76−
77− function setDetectorEnabled(enabled) {
78− idleAmplitudes.enabled = false
79− if (enabled) {
80− peakMover.start()
81− } else {
82− peakDetector.enabled = false
83− peakMover.stop()
84− }
85− }
86−
87− function moveBalls() {
88− var i = 0
89− var amplitude = voiceAmplitudes.itemAt(0).amplitude
90− for (var i = 1; i < totalSpots; ++i) {
91− var item = voiceAmplitudes.itemAt(i)
92− var tempAmplitude = item.amplitude
93− item.amplitude = amplitude
94− amplitude = tempAmplitude
95− }
96− }
97−
98− property int __firstIdle
99− property int __idleCount
100−
101− Timer {
102− id: idleBallsTimer
103− interval: 40
104− onTriggered: moveAndAddIdleBalls()
105− }
106−
107− function moveAndAddIdleBalls() {
108− // Check if we are doing the real thing
109− if (!idleAmplitudes.enabled) {
110− return
111− }
112−
113− for (var i = 0; i < __idleCount; ++i) {
114− var index = __firstIdle - i
115− var item = idleAmplitudes.itemAt(index % totalSpots)
116− var nextItem = idleAmplitudes.itemAt((index + 1) % totalSpots)
117− nextItem.opacity = item.opacity
118− }
119− __firstIdle++
120− idleAmplitudes.itemAt((__firstIdle - __idleCount) % totalSpots).opacity = 0
121−
122− if (__idleCount < totalIdles) {
123− idleAmplitudes.itemAt(0).opacity = 1 - (__idleCount / totalIdles)
124− __idleCount++
125− }
126− idleBallsTimer.start()
127− }
128−
129− function startIdle() {
130− // On the device the peak detector takes quite a lot to start up
131− // so enable it as soon as we know we are going to do voice capture
132− peakDetector.enabled = true
133− for (var i = 0; i < totalSpots; ++i) {
134− idleAmplitudes.itemAt(i).opacity = 0
135− }
136− for (var i = 0; i < totalSpots; ++i) {
137− voiceAmplitudes.itemAt(i).amplitude = 0
138− }
139−
140− idleAmplitudes.enabled = true
141− idleAmplitudes.itemAt(0).opacity = 1
142− __idleCount = 1
143− __firstIdle = 0
144− idleBallsTimer.start()
145− }
146−}
Hud/graphics/divider@20.pngdeleted

Binary file not shown.

Hud/graphics/divider@20.scideleted−5
@@ -1,5 +0,0 @@
1−border.left: 0
2−border.top: 0
3−border.bottom: 0
4−border.right: 2
5−source: divider@20.png
Hud/graphics/dropshadow_right@20.pngdeleted

Binary file not shown.

Hud/graphics/help@20.pngdeleted

Binary file not shown.

Hud/graphics/hud_bg@20.pngdeleted

Binary file not shown.

Hud/graphics/hud_handlearrow@20.pngdeleted

Binary file not shown.

Hud/graphics/hud_handlebar@20.pngdeleted

Binary file not shown.

Hud/graphics/icon_arrow@20.pngdeleted

Binary file not shown.

Hud/graphics/icon_clear@20.pngdeleted

Binary file not shown.

Hud/graphics/icon_search@20.pngdeleted

Binary file not shown.

Hud/graphics/microphone@20.pngdeleted

Binary file not shown.

Hud/graphics/popup_triangle@20.pngdeleted

Binary file not shown.

Hud/graphics/settings@20.pngdeleted

Binary file not shown.

Hud/graphics/undo@20.pngdeleted

Binary file not shown.

Hud/graphics/view-fullscreen@20.pngdeleted

Binary file not shown.

Jenkinsfilenew file+2
@@ -0,0 +1,2 @@
1+@Library('ubports-build-tools') _
2+buildAndProvideDebianPackage()
LGPL_EXCEPTION.txtnew file+22
@@ -0,0 +1,22 @@
1+Digia Qt LGPL Exception version 1.1
2+
3+As an additional permission to the GNU Lesser General Public License version
4+2.1, the object code form of a "work that uses the Library" may incorporate
5+material from a header file that is part of the Library. You may distribute
6+such object code under terms of your choice, provided that:
7+ (i) the header files of the Library have not been modified; and
8+ (ii) the incorporated material is limited to numerical parameters, data
9+ structure layouts, accessors, macros, inline functions and
10+ templates; and
11+ (iii) you comply with the terms of Section 6 of the GNU Lesser General
12+ Public License version 2.1.
13+
14+Moreover, you may apply this exception to a modified version of the Library,
15+provided that such modification does not involve copying material from the
16+Library into the modified Library's header files unless such material is
17+limited to (i) numerical parameters; (ii) data structure layouts;
18+(iii) accessors; and (iv) small macros, templates and inline functions of
19+five lines or less in length.
20+
21+Furthermore, you are not required to apply this additional permission to a
22+modified version of the Library.
Launcher/Launcher.qmldeleted−254
@@ -1,254 +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 "../Components"
19−import Ubuntu.Components 0.1
20−import Ubuntu.Gestures 0.1
21−import Unity 0.1
22−
23−Item {
24− id: root
25−
26− property bool available: true // can be used to disable all interactions
27−
28− property bool teasing: false
29− property int panelWidth: units.gu(8.5)
30− property int dragAreaWidth: units.gu(1)
31− property real progress: dragArea.dragging && dragArea.touchX > panel.width ? dragArea.touchX : 0
32−
33− readonly property bool shown: panel.x > -panel.width
34−
35− // emitted when an application is selected
36− signal launcherApplicationSelected(string desktopFile)
37−
38− // emitted when the apps dash should be shown because of a swipe gesture
39− signal dash()
40−
41− // emitted when the dash icon in the launcher has been tapped
42− signal dashItemSelected()
43−
44− onStateChanged: {
45− if (state == "") {
46− dismissTimer.stop()
47− } else {
48− dismissTimer.restart()
49− }
50− }
51−
52− function hide() {
53− state = ""
54− }
55−
56− function switchToNextState(state) {
57− animateTimer.nextState = state
58− animateTimer.start();
59− }
60−
61− onTeasingChanged: {
62− if (teasing) {
63− teaseTimer.start();
64− }
65− }
66−
67− Timer {
68− id: teaseTimer
69− interval: 200
70− }
71−
72− Timer {
73− id: dismissTimer
74− interval: 5000
75− onTriggered: {
76− if (!panel.moving) {
77− root.state = ""
78− } else {
79− dismissTimer.restart()
80− }
81− }
82− }
83−
84− // Because the animation on x is disabled while dragging
85− // switching state directly in the drag handlers would not animate
86− // the completion of the hide/reveal gesture. Lets update the state
87− // machine and switch to the final state in the next event loop run
88− Timer {
89− id: animateTimer
90− interval: 1
91− property string nextState: ""
92− onTriggered: {
93− // switching to an intermediate state here to make sure all the
94− // values are restored, even if we were already in the target state
95− root.state = "tmp"
96− root.state = nextState
97− }
98− }
99−
100− LauncherModel {
101− id: launcherModel
102− }
103−
104− MouseArea {
105− id: launcherDragArea
106− enabled: root.state == "visible"
107− anchors.fill: panel
108− anchors.rightMargin: -units.gu(2)
109− drag {
110− axis: Drag.XAxis
111− maximumX: 0
112− target: panel
113− }
114−
115− onReleased: {
116− if (panel.x < -panel.width/3) {
117− root.switchToNextState("")
118− } else {
119− root.switchToNextState("visible")
120− }
121− }
122−
123− }
124− MouseArea {
125− id: closeMouseArea
126− anchors {
127− left: launcherDragArea.right
128− top: parent.top
129− right: parent.right
130− bottom: parent.bottom
131− }
132− enabled: root.state == "visible"
133− onPressed: {
134− root.state = ""
135− }
136− }
137−
138− Rectangle {
139− id: backgroundShade
140− anchors.fill: parent
141− color: "black"
142− opacity: root.state == "visible" ? 0.4 : 0
143−
144− Behavior on opacity { NumberAnimation { duration: 200; easing.type: Easing.OutQuad} }
145− }
146−
147− LauncherPanel {
148− id: panel
149− objectName: "launcherPanel"
150− width: root.panelWidth
151− anchors {
152− top: parent.top
153− bottom: parent.bottom
154− }
155− x: -width
156− model: launcherModel
157−
158− property bool animate: true
159−
160− onApplicationSelected: {
161− root.state = ""
162− launcherApplicationSelected(desktopFile)
163− }
164− onDashItemSelected: {
165− root.state = ""
166− root.dashItemSelected(index)
167− }
168−
169− onMovingChanged: {
170− if (dismissTimer.running) {
171− dismissTimer.restart();
172− }
173− }
174−
175− Behavior on x {
176− NumberAnimation {
177− // Disabling animation when dragging
178− duration: dragArea.dragging || launcherDragArea.drag.active ? 0 : 300;
179− easing.type: Easing.OutCubic
180− }
181− }
182− }
183−
184− DirectionalDragArea {
185− id: dragArea
186−
187− direction: Direction.Rightwards
188−
189− // values to be tweaked and later removed from here and set in stone as defaults
190− // once we are confident it's all good.
191− maxDeviation: units.gu(1)
192− wideningAngle: 30
193− distanceThreshold: units.gu(3)
194− minSpeed: units.gu(5)
195−
196− enabled: root.available && root.state !== "visible"
197− width: root.dragAreaWidth
198− height: root.height
199−
200− onTouchXChanged: {
201− if (status !== DirectionalDragArea.Recognized)
202− return;
203−
204− // When the gesture finally gets recognized, the finger will likely be
205− // reasonably far from the edge. If we made the panel immediately
206− // follow the finger position it would be visually unpleasant as it
207− // would appear right next to the user's finger out of nowhere.
208− // Instead, we make the panel go towards the user's finger in several
209− // steps. ie., in an animated way.
210− var targetPanelX = Math.min(0, touchX - panel.width)
211− var delta = targetPanelX - panel.x
212− // the trick is not to go all the way (1.0) as it would cause a sudden jump
213− panel.x += 0.4 * delta
214− }
215−
216− onDraggingChanged: {
217− if (!dragging) {
218− if (distance > root.width / 2) {
219− root.dash()
220− root.switchToNextState("")
221− } else if (distance > panel.width/2) {
222− root.switchToNextState("visible")
223− } else {
224− root.switchToNextState("")
225− }
226− }
227− }
228− }
229−
230− states: [
231− State {
232− name: "" // hidden state. Must be the default state ("") because "when:" falls back to this.
233− PropertyChanges {
234− target: panel
235− x: -root.panelWidth
236− }
237− },
238− State {
239− name: "visible"
240− PropertyChanges {
241− target: panel
242− x: 0
243− }
244− },
245− State {
246− name: "teasing"
247− when: root.teasing || teaseTimer.running
248− PropertyChanges {
249− target: panel
250− x: -root.panelWidth + units.gu(2)
251− }
252− }
253− ]
254−}
Launcher/LauncherDelegate.qmldeleted−127
@@ -1,127 +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−
20−Item {
21− id: root
22−
23− property string iconName
24−
25− property real angle: 0
26− property bool highlighted: false
27− property real offset: 0
28−
29− property real maxAngle: 0
30− property bool inverted: false
31−
32− readonly property int effectiveHeight: Math.cos(angle * Math.PI / 180) * height
33− readonly property real foldedHeight: Math.cos(maxAngle * Math.PI / 180) * height
34−
35− property int itemsBeforeThis: 0
36− property int itemsAfterThis: 0
37−
38− property bool dragging:false
39−
40− signal clicked()
41− signal longtap()
42− signal released()
43−
44− UbuntuShape {
45− id: iconItem
46− color: Qt.rgba(0, 0, 1, 0.5)
47− width: parent.width
48− height: parent.height
49− anchors.centerIn: parent
50− anchors.verticalCenterOffset: root.offset + (height - root.effectiveHeight)/2 * (angle < 0 ? -1 : 1)
51− rotation: root.inverted ? 180 : 0
52− radius: "medium"
53−
54− transform: Rotation {
55− axis { x: 1; y: 0; z: 0 }
56− origin { x: iconItem.width / 2; y: iconItem.height / 2; z: 0 }
57− angle: root.angle
58− }
59−
60− image: Image {
61− source: "../graphics/applicationIcons/" + root.iconName + ".png"
62− }
63−
64− MouseArea {
65− id: mouseArea
66− anchors.fill: parent
67− onClicked: root.clicked()
68− onCanceled: root.released()
69− preventStealing: false
70−
71− onPressAndHold: {
72− root.state = "moving"
73− }
74− onReleased: {
75− root.state = "docked"
76− }
77− }
78−
79− BorderImage {
80− id: overlayHighlight
81− anchors.centerIn: iconItem
82− rotation: inverted ? 180 : 0
83− source: root.highlighted || mouseArea.pressed ? "graphics/selected.sci" : "graphics/non-selected.sci"
84− width: iconItem.width + units.gu(1.5)
85− height: width
86− }
87− }
88−
89− states: [
90− State {
91− name: "docked"
92− PropertyChanges {
93− target: root
94− offset: if (launcherFlickable.contentY > itemsBeforeThis * (foldedHeight + launcherColumn.spacing*2)) {
95− return launcherFlickable.contentY - (index * (foldedHeight + launcherColumn.spacing*2));
96− } else if (y + height - launcherFlickable.contentY > launcherFlickable.height - (itemsAfterThis*(foldedHeight - launcherColumn.spacing))) {
97− return launcherFlickable.height - (y+height) + launcherFlickable.contentY - (itemsAfterThis*(foldedHeight - launcherColumn.spacing));
98− } else {
99− return 0;
100− }
101− angle: -Math.min(Math.max(offset * maxAngle / foldedHeight, -maxAngle), maxAngle)
102−
103− }
104− },
105−
106− State {
107− name: "moving"
108− PropertyChanges {
109− target: launcherDelegate;
110− offset: 0
111− angle: 0
112− }
113− PropertyChanges {
114− target: root
115− highlighted: true
116− dragging: true
117− }
118− PropertyChanges {
119− target: mouseArea
120− preventStealing: true
121− drag.target: root
122− }
123− }
124−
125− ]
126−
127−}
Launcher/LauncherPanel.qmldeleted−120
@@ -1,120 +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 0.1
20−
21−Item {
22− id: root
23−
24− rotation: inverted ? 180 : 0
25−
26− property var model
27− property bool inverted: true
28− property bool dragging: false
29− property bool moving: launcherFlickable.moving
30− property int dragPosition: 0
31− property int highlightIndex: -1
32−
33− signal applicationSelected(string desktopFile)
34− signal dashItemSelected(int index)
35−
36− onDragPositionChanged: {
37− var effectiveDragPosition = root.inverted ? launcherFlickable.height - dragPosition : dragPosition - mainColumn.anchors.margins
38−
39− var hiddenContentHeight = launcherFlickable.contentHeight - launcherFlickable.height
40− // Shortening scrollable height because the first/last item needs to be fully expanded before reaching the top/bottom
41− var scrollableHeight = launcherFlickable.height - (launcherFlickable.itemSize + launcherColumn.spacing) *2
42− // As we shortened the scrollableHeight, lets move everything down by the itemSize
43− var shortenedEffectiveDragPosition = effectiveDragPosition - launcherFlickable.itemSize - launcherColumn.spacing
44− var newContentY = shortenedEffectiveDragPosition * hiddenContentHeight / scrollableHeight
45−
46− // limit top/bottom to prevent overshooting
47− launcherFlickable.contentY = Math.min(hiddenContentHeight, Math.max(0, newContentY));
48−
49− // Now calculate the current index:
50− // > the current mouse position + the hidden/scolled content on top is the mouse position in the averall view
51− // > adjust that removing all the margins
52− // > divide by itemSize to get index
53− highlightIndex = (effectiveDragPosition + launcherFlickable.contentY - mainColumn.anchors.margins*3 - launcherColumn.spacing/2) / (launcherFlickable.itemSize + launcherColumn.spacing)
54− }
55−
56− BorderImage {
57− id: background
58− source: "graphics/launcher_bg.sci"
59− anchors.fill: parent
60− }
61−
62− Column {
63− id: mainColumn
64− anchors.fill: parent
65− anchors.margins: units.gu(1)
66− spacing: units.gu(1)
67−
68− LauncherDelegate {
69− id: dashItem
70− objectName: "dashItem"
71− width: launcherFlickable.itemSize
72− height: launcherFlickable.itemSize
73− anchors.horizontalCenter: parent.horizontalCenter
74− iconName: "dash"
75− onClicked: root.dashItemSelected(0)
76− }
77− Flickable {
78− id: launcherFlickable
79− anchors.left: parent.left
80− anchors.right: parent.right
81− height: parent.height - dashItem.height - parent.spacing
82− contentHeight: launcherColumn.height
83−
84− property int itemSize: width
85−
86− Column {
87− id: launcherColumn
88− width: parent.width
89− spacing: units.gu(1)
90− anchors.horizontalCenter: parent.horizontalCenter
91−
92− Repeater {
93− id: iconRepeater
94− model: root.model
95−
96− LauncherDelegate {
97− id: launcherDelegate
98− objectName: "launcherDelegate" + index
99− width: launcherFlickable.itemSize
100− height: launcherFlickable.itemSize
101− iconName: model.icon
102− inverted: root.inverted
103− highlighted: root.dragging && index === root.highlightIndex
104− z: -Math.abs(offset)
105− state: "docked"
106−
107− maxAngle: 60
108−
109− itemsBeforeThis: index
110− itemsAfterThis: iconRepeater.count - (index+1)
111−
112− onClicked: {
113− root.applicationSelected(launcherModel.get(index).desktopFile);
114− }
115− }
116− }
117− }
118− }
119− }
120−}
Launcher/ShortcutsContainer.qmldeleted−39
@@ -1,39 +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−
19−Column {
20− id: shortcutsContainer
21−
22− property int foldedAngle: 0
23− property int initialFoldedOffset: 0
24− property int foldedOffset: 0
25− property int initialIndex: 0
26−
27− property bool animating: angleAnimation.running || offsetAnimation.running
28−
29− property ListModel model
30− property var delegate
31−
32− Behavior on foldedAngle { NumberAnimation { id: angleAnimation; duration: 200; } }
33− Behavior on foldedOffset { NumberAnimation { id: offsetAnimation; duration: 200; } }
34−
35− Repeater {
36− model: shortcutsContainer.model
37− delegate: shortcutsContainer.delegate
38− }
39−}
Launcher/graphics/highlight@18.pngdeleted

Binary file not shown.

Launcher/graphics/launcher_bg@18.pngdeleted

Binary file not shown.

Launcher/graphics/launcher_bg@18.scideleted−5
@@ -1,5 +0,0 @@
1−border.left: 0
2−border.top: 0
3−border.bottom: 0
4−border.right: 24
5−source: launcher_bg@18.png
Launcher/graphics/non-selected@18.pngdeleted

Binary file not shown.

Launcher/graphics/non-selected@18.scideleted−5
@@ -1,5 +0,0 @@
1−border.left: 54
2−border.top: 60
3−border.bottom: 60
4−border.right: 54
5−source: non-selected@18.png
Launcher/graphics/selected@18.pngdeleted

Binary file not shown.

Launcher/graphics/selected@18.scideleted−5
@@ -1,5 +0,0 @@
1−border.left: 54
2−border.top: 60
3−border.bottom: 60
4−border.right: 54
5−source: selected@18.png
Launcher/graphics/triangle@18.pngdeleted

Binary file not shown.

MouseTouchAdaptor.cppdeleted−136
@@ -1,136 +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− * Authored by: Daniel d'Andrada <daniel.dandrada@canonical.com>
17− */
18−
19−#include "MouseTouchAdaptor.h"
20−
21−#include <qpa/qwindowsysteminterface.h>
22−
23−#include <QtGui/QMouseEvent>
24−#include <QtTest/QTest>
25−
26−using QTest::QTouchEventSequence;
27−
28−namespace {
29−Qt::MouseButton translateMouseButton(xcb_button_t detail)
30−{
31− switch (detail) {
32− case 1: return Qt::LeftButton;
33− case 2: return Qt::MidButton;
34− case 3: return Qt::RightButton;
35− // Button values 4-7 are Wheel events
36− default: return Qt::NoButton;
37− }
38−}
39−} // end of anonymous namespace
40−
41−MouseTouchAdaptor::MouseTouchAdaptor()
42− : m_targetWindow(0)
43− , m_leftButtonIsPressed(false)
44−{
45− m_touchDevice = new QTouchDevice;
46− m_touchDevice->setType(QTouchDevice::TouchScreen);
47− QWindowSystemInterface::registerTouchDevice(m_touchDevice);
48−}
49−
50−void MouseTouchAdaptor::setTargetWindow(QWindow *window)
51−{
52− m_targetWindow = window;
53−}
54−
55−bool MouseTouchAdaptor::nativeEventFilter(const QByteArray & eventType,
56− void * message, long * /*result*/)
57−{
58− Q_ASSERT(m_targetWindow);
59−
60− if (eventType != "xcb_generic_event_t") {
61− // wrong backend.
62− qWarning("MouseTouchAdaptor: XCB backend not in use. Adaptor inoperative!");
63− return false;
64− }
65−
66− xcb_generic_event_t *xcbEvent = static_cast<xcb_generic_event_t *>(message);
67−
68− switch (xcbEvent->response_type & ~0x80) {
69− case XCB_BUTTON_PRESS:
70− return handleButtonPress(reinterpret_cast<xcb_button_press_event_t *>(xcbEvent));
71− break;
72− case XCB_BUTTON_RELEASE:
73− return handleButtonRelease(reinterpret_cast<xcb_button_release_event_t *>(xcbEvent));
74− break;
75− case XCB_MOTION_NOTIFY:
76− return handleMotionNotify(reinterpret_cast<xcb_motion_notify_event_t *>(xcbEvent));
77− break;
78− default:
79− return false;
80− break;
81− };
82−}
83−
84−bool MouseTouchAdaptor::handleButtonPress(xcb_button_press_event_t *pressEvent)
85−{
86− Qt::MouseButton button = translateMouseButton(pressEvent->detail);
87−
88− // Just eat the event if it wasn't a left mouse press
89− if (button != Qt::LeftButton)
90− return true;
91−
92− QPoint windowPos(pressEvent->event_x, pressEvent->event_y);
93−
94− QTouchEventSequence touchEvent = QTest::touchEvent(m_targetWindow, m_touchDevice,
95− false /* autoCommit */);
96− touchEvent.press(0 /* touchId */, windowPos);
97− touchEvent.commit(false /* processEvents */);
98−
99− m_leftButtonIsPressed = true;
100− return true;
101−}
102−
103−bool MouseTouchAdaptor::handleButtonRelease(xcb_button_release_event_t *releaseEvent)
104−{
105− Qt::MouseButton button = translateMouseButton(releaseEvent->detail);
106−
107− // Just eat the event if it wasn't a left mouse release
108− if (button != Qt::LeftButton)
109− return true;
110−
111− QPoint windowPos(releaseEvent->event_x, releaseEvent->event_y);
112−
113− QTouchEventSequence touchEvent = QTest::touchEvent(m_targetWindow, m_touchDevice,
114− false /* autoCommit */);
115− touchEvent.release(0 /* touchId */, windowPos);
116− touchEvent.commit(false /* processEvents */);
117−
118− m_leftButtonIsPressed = false;
119− return true;
120−}
121−
122−bool MouseTouchAdaptor::handleMotionNotify(xcb_motion_notify_event_t *event)
123−{
124− if (!m_leftButtonIsPressed) {
125− return true;
126− }
127−
128− QPoint windowPos(event->event_x, event->event_y);
129−
130− QTouchEventSequence touchEvent = QTest::touchEvent(m_targetWindow, m_touchDevice,
131− false /* autoCommit */);
132− touchEvent.move(0 /* touchId */, windowPos);
133− touchEvent.commit(false /* processEvents */);
134−
135− return true;
136−}
Notifications/Notification.qmldeleted−153
@@ -1,153 +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−
20−UbuntuShape {
21− id: notification
22−
23− property string type
24− property alias iconSource: avatarIcon.source
25− property alias secondaryIconSource: secondaryIcon.source
26− property alias summary: summaryLabel.text
27− property alias body: bodyLabel.text
28− property var actions
29−
30− signal actionInvoked(string buttonId)
31−
32− implicitHeight: childrenRect.height
33− color: Qt.rgba(0, 0, 0, 0.85)
34− opacity: 0
35−
36− MouseArea {
37− id: interactiveArea
38−
39− anchors.fill: contentColumn
40− objectName: "interactiveArea"
41− enabled: notification.type == "Notifications.Type.Interactive"
42− onClicked: notification.actionInvoked(actions.get(0).id)
43− }
44−
45− Column {
46− id: contentColumn
47−
48− anchors {
49− left: parent.left
50− right: parent.right
51− top: parent.top
52− margins: spacing
53− }
54− height: childrenRect.height + spacing
55− spacing: units.gu(1)
56−
57− Row {
58− id: topRow
59−
60− spacing: contentColumn.spacing
61− anchors {
62− left: parent.left
63− right: parent.right
64− }
65−
66− UbuntuShape {
67− id: icon
68−
69− objectName: "icon"
70− width: units.gu(6)
71− height: units.gu(6)
72− visible: iconSource !== undefined && iconSource != ""
73− image: Image {
74− id: avatarIcon
75−
76− fillMode: Image.PreserveAspectCrop
77− }
78− }
79−
80− Image {
81− id: secondaryIcon
82−
83− objectName: "secondaryIcon"
84− width: units.gu(2)
85− height: units.gu(2)
86− visible: source !== undefined && source != ""
87− fillMode: Image.PreserveAspectCrop
88− }
89−
90− Column {
91− id: labelColumn
92− width: parent.width - x
93−
94− Label {
95− id: summaryLabel
96−
97− objectName: "summaryLabel"
98− anchors {
99− left: parent.left
100− right: parent.right
101− }
102− fontSize: "medium"
103− font.bold: true
104− color: "#f3f3e7"
105− elide: Text.ElideRight
106− }
107−
108− Label {
109− id: bodyLabel
110−
111− objectName: "bodyLabel"
112− anchors {
113− left: parent.left
114− right: parent.right
115− }
116− visible: body != ""
117− fontSize: "small"
118− color: "#f3f3e7"
119− opacity: 0.6
120− wrapMode: Text.WordWrap
121− maximumLineCount: 10
122− elide: Text.ElideRight
123− }
124− }
125− }
126−
127− Row {
128− id: buttonRow
129−
130− objectName: "buttonRow"
131− spacing: contentColumn.spacing
132− layoutDirection: Qt.RightToLeft
133− visible: notification.type == "Notifications.Type.SnapDecision"
134− anchors {
135− left: parent.left
136− right: parent.right
137− }
138−
139− Repeater {
140− model: notification.actions
141−
142− Button {
143− objectName: "button" + index
144− color: Positioner.isFirstItem ? "#d85317" : "#cdcdcb"
145− width: (buttonRow.width - buttonRow.spacing) / 2
146− height: units.gu(4)
147− text: label
148− onClicked: notification.actionInvoked(id)
149− }
150− }
151− }
152− }
153−}
Notifications/Notifications.qmldeleted−77
@@ -1,77 +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 "../Components"
20−import "timings.js" as Timings
21−
22−ListView {
23− id: notificationRenderer
24−
25− objectName: "notificationRenderer"
26− interactive: false
27−
28− spacing: units.gu(.5)
29− delegate: Notification {
30− objectName: "notification" + index
31− anchors {
32− left: parent.left
33− right: parent.right
34− }
35− type: model.type
36− iconSource: model.icon
37− secondaryIconSource: model.secondaryIcon
38− summary: model.summary
39− body: model.body
40− actions: model.actions
41− }
42−
43− populate: Transition {
44− NumberAnimation {
45− property: "opacity"
46− to: 1
47− duration: Timings.snapBeat
48− easing.type: Timings.easing
49− }
50− }
51−
52− add: Transition {
53− NumberAnimation {
54− property: "opacity"
55− to: 1
56− duration: Timings.snapBeat
57− easing.type: Timings.easing
58− }
59− }
60−
61− remove: Transition {
62− NumberAnimation {
63− property: "opacity"
64− to: 0
65− duration: Timings.fastBeat
66− easing.type: Timings.easing
67− }
68− }
69−
70− displaced: Transition {
71− NumberAnimation {
72− properties: "x,y"
73− duration: Timings.fastBeat
74− easing.type: Timings.easing
75− }
76− }
77−}
Panel/CMakeLists.txtdeleted−1
@@ -1 +0,0 @@
1−add_subdirectory(Indicators)
Panel/IndicatorItem.qmldeleted−57
@@ -1,57 +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.Indicators 0.1 as Indicators
20−
21−Item {
22− id: indicatorItem
23−
24− property alias widgetSource: loader.source
25− property bool highlighted: false
26− property bool dimmed: false
27− property var indicatorProperties: undefined
28−
29− opacity: dimmed ? 0.4 : 1
30−
31− // only visible when non-empty
32− visible: loader.item != undefined && loader.status == Loader.Ready ? loader.item.enabled : false
33− width: visible ? loader.item.width : 0
34−
35− Loader {
36− id: loader
37−
38− onLoaded: {
39− item.height = Qt.binding(function() { return indicatorItem.height; })
40−
41− for(var pName in indicatorProperties) {
42− if (item.hasOwnProperty(pName)) {
43− item[pName] = indicatorProperties[pName]
44− }
45− }
46− }
47− }
48−
49− Rectangle {
50− color: "#dd4814"
51− objectName: "highlight"
52− height: units.dp(2)
53− width: parent.width
54− anchors.top: parent.bottom
55− visible: highlighted
56− }
57−}
Panel/IndicatorRow.qmldeleted−106
@@ -1,106 +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−
20−Item {
21− id: indicatorRow
22−
23− property QtObject currentItem : null
24− readonly property int currentItemIndex: currentItem ? currentItem.ownIndex : -1
25− property alias row: row
26− property QtObject indicatorsModel: null
27− property bool overviewActive: false // "state of the menu"
28−
29− Behavior on y {NumberAnimation {duration: 300; easing.type: Easing.OutCubic} }
30−
31− width: units.gu(40)
32− height: units.gu(3)
33−
34− Component.onCompleted: setDefaultItem()
35−
36− function setDefaultItem() {
37− // The leftmost indicator
38− var defaultItemIndex = 0
39− setItem(defaultItemIndex)
40− }
41−
42− function setItem(index) {
43− currentItem = rowRepeater.itemAt(index)
44− }
45−
46− Row {
47− id: row
48−
49− width: children.width
50− height: parent.height
51− anchors.right: parent.right
52−
53− Repeater {
54− id: rowRepeater
55− objectName: "rowRepeater"
56− model: indicatorsModel ? indicatorsModel : undefined
57−
58− IndicatorItem {
59− id: indicatorItem
60−
61− property int ownIndex: index
62−
63− widgetSource: model.widgetSource
64−
65− indicatorProperties : model.indicatorProperties
66− highlighted: indicatorRow.state == "reveal" || indicatorRow.state == "locked" || indicatorRow.state == "commit" ? ownIndex == indicatorRow.currentItemIndex : false
67− dimmed: { //See FIXME in Indicators regarding the "states" change
68− if (indicatorRow.state == "initial" || indicatorRow.state == "") {
69− return false;
70− } else if (indicatorRow.state == "hint") {
71− return true
72− } else {
73− return ownIndex != indicatorRow.currentItemIndex
74− }
75− }
76− height: indicatorRow.height
77− y: {
78− //FIXME: all indicators will be initial for now.
79− if (!highlighted && !overviewActive && (indicatorRow.state == "locked" || indicatorRow.state == "commit")) {
80− return -indicatorRow.height
81− } else {
82− return 0
83− }
84− }
85− Behavior on y {
86− NumberAnimation{
87− duration: {
88− if (index == 0) {
89− return 250
90− } else if (index == 1) {
91− return 150
92− } else if (index == 2) {
93− return 550
94− } else if (index == 3) {
95− return 400
96− } else {
97− return 100 + Math.random() * 200
98− }
99− }
100− easing.type: Easing.OutCubic
101− }
102− }
103− }
104− }
105− }
106−}
Panel/Indicators.qmldeleted−325
@@ -1,325 +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−
20−import "../Components"
21−import "../Components/Math.js" as MathLocal
22−
23−Showable {
24− id: indicators
25−
26− property int progress: panelHeight
27− property int openedHeight: units.gu(71)
28− property int panelHeight: units.gu(3)
29− property bool pinnedMode: true //should be set true if indicators menu can cover whole screen
30−
31− property int hintValue
32− readonly property int lockThreshold: shell.height/2
33− property bool fullyOpened: revealer ? progress == revealer.openedValue : false
34− property bool partiallyOpened: revealer ? progress > revealer.closedValue && progress < revealer.openedValue : false
35−
36− property Revealer revealer: null
37−
38− height: menuContent.height + handle.height + menuContent.y
39−
40− onProgressChanged: {
41− // need to use handle.get_height(). As the handle height depends on progress changes (but this is called first!)
42− var contentProgress = progress - handle.get_height()
43− if (!showAnimation.running && !hideAnimation.running && !revealer.hintingAnimation.running) {
44− if (contentProgress <= hintValue && indicators.state == "reveal") {
45− indicators.state = "hint"
46− menuContent.hideAll()
47− menuContent.releaseContent()
48− } else if (contentProgress > hintValue && contentProgress < lockThreshold) {
49− menuContent.showMenu()
50− indicators.state = "reveal"
51− } else if (contentProgress >= lockThreshold && lockThreshold > 0) {
52− // If we've shown the overview and are closing the view with progress changes (revealer handle),
53− // we dont want to switch to a indicator menu until we hit reveal state.
54− if (menuContent.overviewActive) {
55− menuContent.showOverview()
56− }
57− else {
58− menuContent.showMenu()
59− }
60− indicators.state = "locked"
61− }
62− }
63− }
64−
65− function handlePress() {
66− menuContent.hideAll()
67− menuContent.activateContent()
68− indicators.state = "hint"
69− }
70−
71− function openOverview() {
72− indicatorRow.currentItem = null
73− menuContent.showOverview()
74− }
75−
76− function calculateCurrentItem(xValue, useBuffer) {
77− var rowCoordinates
78− var itemCoordinates
79− var currentItem
80− var distanceFromRightEdge
81− var bufferExceeded = false
82−
83− if (indicators.state == "commit" || indicators.state == "locked" || showAnimation.running || hideAnimation.running) return
84−
85− /*
86− If user drags the indicator handle bar down a distance hintValue or less, this is 0.
87− If bar is dragged down a distance greater than or equal to lockThreshold, this is 1.
88− Otherwise it contains the bar's location as a fraction of the distance between hintValue (is 0) and lockThreshold (is 1).
89− */
90− var verticalProgress = MathLocal.clamp((indicators.progress - handle.height - hintValue) / (lockThreshold - hintValue), 0, 1)
91−
92− /*
93− Percentage of an indicator icon's width the user's press can stray horizontally from the
94− focused icon before we change focus to another icon. E.g. a value of 0.5 means you must
95− go right a distance of half an icon's width before focus moves to the icon on the right
96− */
97− var maxBufferThreshold = 0.5
98−
99− /*
100− To help users find the indicator of their choice while opening the indicators, we add logic to add a
101− left/right buffer to each icon so it is harder for the focus to be moved accidentally to another icon,
102− as the user moves their finger down, but yet allows them to switch indicator if they want.
103− This buffer is wider the further the user's finger is from the top of the screen.
104− */
105− var effectiveBufferThreshold = maxBufferThreshold * verticalProgress;
106−
107− rowCoordinates = indicatorRow.mapToItem(indicatorRow.row, xValue, 0);
108− // get the current delegate
109− currentItem = indicatorRow.row.childAt(rowCoordinates.x, 0);
110− if (currentItem && currentItem != indicatorRow.currentItem ) {
111− itemCoordinates = indicatorRow.row.mapToItem(currentItem, rowCoordinates.x, 0);
112− distanceFromRightEdge = (currentItem.width - itemCoordinates.x) / (currentItem.width)
113− if (Math.abs(currentItem.ownIndex - indicatorRow.currentItemIndex) > 1) {
114− bufferExceeded = true
115− } else {
116− if (indicatorRow.currentItemIndex < currentItem.ownIndex && distanceFromRightEdge < (1 - effectiveBufferThreshold)) {
117− bufferExceeded = true
118− } else if (indicatorRow.currentItemIndex > currentItem.ownIndex && distanceFromRightEdge > effectiveBufferThreshold) {
119− bufferExceeded = true
120− }
121− }
122− if ((!useBuffer || (useBuffer && bufferExceeded)) || indicatorRow.currentItem < 0 || indicatorRow.currentItem == null) {
123− indicatorRow.currentItem = currentItem;
124− }
125− }
126− }
127−
128− // eater
129− MouseArea {
130− anchors {
131− top: parent.top
132− bottom: handle.bottom
133− left: parent.left
134− right: parent.right
135− }
136− }
137−
138− MenuContent {
139− id: menuContent
140− objectName: "menuContent"
141−
142− anchors {
143− left: parent.left
144− right: parent.right
145− top: indicatorRow.bottom
146− }
147− height: progress - y
148− indicatorsModel: indicatorsModel
149− animate: false
150− clip: indicators.partiallyOpened
151−
152− onMenuSelected: {
153− indicatorRow.setItem(index)
154− }
155−
156− //small shadow gradient at bottom of menu
157− Rectangle {
158− anchors {
159− left: parent.left
160− right: parent.right
161− bottom: parent.bottom
162− }
163− height: units.gu(0.5)
164− gradient: Gradient {
165− GradientStop { position: 0.0; color: "transparent" }
166− GradientStop { position: 1.0; color: "black" }
167− }
168− opacity: 0.4
169− }
170− }
171−
172− Rectangle {
173− id: handle
174−
175− color: menuContent.backgroundColor
176−
177− anchors {
178− left: parent.left
179− right: parent.right
180− top: menuContent.bottom
181− }
182− height: get_height()
183− clip: height < handleImage.height
184−
185− function get_height() {
186− return Math.max(Math.min(handleImage.height, progress - handleImage.height), 0)
187− }
188−
189− BorderImage {
190− id: handleImage
191− source: "graphics/handle.sci"
192− height: panelHeight
193− anchors {
194− left: parent.left
195− right: parent.right
196− bottom: parent.bottom
197− }
198− }
199− MouseArea { //prevent clicks passing through
200− anchors.fill: parent
201− }
202− }
203−
204− PanelBackground {
205− anchors.fill: indicatorRow
206− }
207−
208− IndicatorRow {
209− id: indicatorRow
210− objectName: "indicatorRow"
211− anchors {
212− left: parent.left
213− right: parent.right
214− }
215− height: indicators.panelHeight
216− indicatorsModel: indicatorsModel
217− state: indicators.state
218− overviewActive: menuContent.overviewActive
219−
220− onCurrentItemIndexChanged: menuContent.currentIndex = currentItemIndex
221−
222− }
223−
224− IndicatorsDataModel {
225− id: indicatorsModel
226− }
227−
228− Connections {
229− target: hideAnimation
230− onRunningChanged: {
231− if (hideAnimation.running) {
232− indicators.state = "initial"
233− menuContent.hideAll()
234− menuContent.releaseContent()
235− } else {
236− if (state == "initial") indicatorRow.setDefaultItem()
237− }
238− }
239− }
240− Connections {
241− target: showAnimation
242− onRunningChanged: {
243− if (showAnimation.running) {
244− if (indicators.state == "initial") {
245− openOverview()
246− }
247− else {
248− indicators.calculateCurrentItem(revealer.lateralPosition, false)
249− menuContent.showMenu()
250− }
251− indicators.state = "commit"
252− }
253− }
254− }
255−
256− Connections {
257− target: revealer
258− onLateralPositionChanged: {
259− var buffer = revealer.dragging ? true : false
260− indicators.calculateCurrentItem(revealer.lateralPosition, buffer)
261− }
262− }
263−
264− // We start with pinned states. (default pinnedMode: true)
265− states: pinnedModeStates
266− // because of dynamic assignment of states, we need to assign state after completion.
267− Component.onCompleted: state = "initial"
268−
269− // changing states will reset state to "".
270− onPinnedModeChanged: {
271− var last_state = state;
272− states = (pinnedMode) ? pinnedModeStates : offScreenModeStates;
273− state = last_state;
274− }
275−
276− property list<State> offScreenModeStates: [
277− State {
278− name: "initial"
279− },
280− State {
281− name: "hint"
282− PropertyChanges { target: indicatorRow; y: panelHeight }
283− },
284− State {
285− name: "reveal"
286− extend: "hint"
287− PropertyChanges { target: menuContent; animate: true }
288− StateChangeScript { script: calculateCurrentItem(revealer.lateralPosition, false); }
289− },
290− State {
291− name: "locked"
292− extend: "hint"
293− },
294− State {
295− name: "commit"
296− extend: "hint"
297− }
298− ]
299−
300− property list<State> pinnedModeStates: [
301− State {
302− name: "initial"
303− },
304− State {
305− name: "hint"
306− },
307− State {
308− name: "reveal"
309− PropertyChanges { target: menuContent; animate: true }
310− StateChangeScript { script: calculateCurrentItem(revealer.lateralPosition, false); }
311− },
312− State {
313− name: "locked"
314− },
315− State {
316− name: "commit"
317− }
318− ]
319−
320− transitions: [
321− Transition {
322− NumberAnimation {targets: [indicatorRow, menuContent]; property: "y"; duration: 300; easing.type: Easing.OutCubic}
323− }
324− ]
325−}
Panel/Indicators/CMakeLists.txtdeleted−2
@@ -1,2 +0,0 @@
1−add_subdirectory(client)
2−add_subdirectory(servicefiles)
Panel/Indicators/DatetimeIndicatorPage.qmldeleted−97
@@ -1,97 +0,0 @@
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 Lesser 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 Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− * Ubo Riboni <ugo.riboni@canonical.com>
19− */
20−
21−import QtQuick 2.0
22−import Ubuntu.Components 0.1
23−
24−Flickable {
25− id: page
26−
27− contentHeight: image.height
28−
29− Image {
30− id: image
31− anchors {
32− left: parent.left
33− right: parent.right
34− }
35− source: "../graphics/time_and_date@18.png"
36− fillMode: Image.PreserveAspectFit
37− }
38−
39− Item {
40− anchors {
41− top: parent.top
42− topMargin: units.gu(5)
43− left: parent.left
44− right: parent.right
45− }
46−
47− height: units.gu(30)
48−
49− Label {
50− id: timeLabel
51− anchors {
52− horizontalCenter: parent.horizontalCenter
53− verticalCenter: parent.verticalCenter
54− }
55−
56− text: ""
57− color: "#f3f3e7"
58− font.weight: Font.Light
59− font.pixelSize: units.gu(6)
60− }
61−
62− Label {
63− id: dateLabel
64−
65− anchors {
66− left: parent.left
67− leftMargin: units.gu(2)
68− bottom: parent.bottom
69− bottomMargin: units.gu(1.5)
70− }
71− text: ""
72− color: "#f3f3e7"
73− fontSize: "small"
74− }
75− }
76−
77− Timer {
78− interval: 1000 * 10 // 10 seconds
79− running: true
80− repeat: true
81− triggeredOnStart: true
82− onTriggered: updateTime();
83− }
84−
85− function updateTime() {
86− var dt = new Date();
87− var time = Qt.formatTime(dt);
88− var space = time.indexOf(" ");
89− timeLabel.text = time.substr(0, space > 0 ? space : 5);
90− dateLabel.text = Qt.formatDateTime(dt, "dddd,\ndd MMMM");
91− }
92−
93− // Make it compatible with the PluginItem interface
94− function start() {}
95− function stop() {}
96− function reset() {}
97−}
Panel/Indicators/DatetimeIndicatorWidget.qmldeleted−65
@@ -1,65 +0,0 @@
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 Lesser 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 Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−import Unity.Indicators 0.1 as Indicators
23−
24−Indicators.IndicatorWidget {
25− id: indicatorWidget
26−
27− width: timeLabel.width + units.gu(1)
28−
29− property alias label: timeLabel.text
30−
31− Label {
32− id: timeLabel
33− objectName: "timeLabel"
34− color: "#f3f3e7"
35− opacity: 0.8
36− font.family: "Ubuntu"
37− fontSize: "medium"
38− anchors.centerIn: parent
39− text: Qt.formatTime(timer.dateNow)
40− }
41−
42− Timer {
43− id: timer
44− interval: 1000 * 10
45− running: indicatorWidget.visible
46− repeat: true
47− triggeredOnStart: true
48− property date dateNow
49−
50− onTriggered: dateNow = new Date
51− }
52−
53− onActionStateChanged: {
54− if (action == undefined || !action.valid) {
55− return;
56− }
57−
58− if (action.state == undefined) {
59− visible = false;
60− return;
61− }
62−
63− indicatorWidget.visible = action.state[3];
64− }
65−}
Panel/Indicators/DefaultIndicatorWidget.qmldeleted−80
@@ -1,80 +0,0 @@
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 Lesser 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 Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−import Unity.Indicators 0.1 as Indicators
23−
24−Indicators.IndicatorWidget {
25− id: indicatorWidget
26−
27− width: itemRow.width + units.gu(1)
28−
29− property alias label: itemLabel.text
30− property alias iconSource: itemImage.source
31−
32− Row {
33− id: itemRow
34− objectName: "itemRow"
35− anchors {
36− top: parent.top
37− bottom: parent.bottom
38− horizontalCenter: parent.horizontalCenter
39− }
40− spacing: units.gu(0.5)
41−
42− // FIXME : Should us Ubuntu.Icon . results in low res images
43− Image {
44− id: itemImage
45− objectName: "itemImage"
46− visible: source != ""
47− height: indicatorWidget.iconSize
48− width: indicatorWidget.iconSize
49− anchors.verticalCenter: parent.verticalCenter
50− }
51−
52− Label {
53− id: itemLabel
54− objectName: "itemLabel"
55− color: "#f3f3e7"
56− opacity: 0.8
57− font.family: "Ubuntu"
58− fontSize: "medium"
59− anchors.verticalCenter: parent.verticalCenter
60− visible: text != ""
61− }
62− }
63−
64− onActionStateChanged: {
65− if (action == undefined || !action.valid) {
66− return;
67− }
68−
69− if (action.state == undefined) {
70− label = "";
71− iconSource = "";
72− enabled = false;
73− return;
74− }
75−
76− label = action.state[Indicators.DefaultActionState.Label];
77− iconSource = "image://gicon/" + action.state[Indicators.DefaultActionState.IconSource];
78− enabled = action.state[Indicators.DefaultActionState.Visible];
79− }
80−}
Panel/Indicators/NetworkIndicatorPage.qmldeleted−80
@@ -1,80 +0,0 @@
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 Lesser 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 Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Unity.Indicators 0.1 as Indicators
22−import Unity.Indicators.Network 0.1 as ICNetwork
23−import Ubuntu.Components 0.1
24−
25−PageStack {
26− id: _network
27−
28− property alias title: _mainPage.title
29− property alias emptyText: _pluginItem.emptyText
30− property alias busType: _pluginItem.busType
31− property alias busName: _pluginItem.busName
32− property alias actionsObjectPath : _pluginItem.actionsObjectPath
33− property alias menuObjectPaths : _pluginItem.menuObjectPaths
34−
35− __showHeader: false
36− anchors.fill: parent
37−
38− Page {
39− id: _mainPage
40−
41− Indicators.IndicatorPage {
42− id: _pluginItem
43− anchors.fill: parent
44− }
45− }
46−
47− Component {
48− id: passwordPageComponent
49−
50− ICNetwork.PasswordPage {
51− agent: networkAgent
52− token: token
53− }
54− }
55−
56− ICNetwork.NetworkAgent {
57− id: networkAgent
58−
59− onSecretRequested: {
60− _network.push(passwordPageComponent)
61− }
62− }
63−
64− function start()
65− {
66− push(_mainPage);
67− _pluginItem.start();
68− }
69−
70− function stop()
71− {
72− clear();
73− _pluginItem.stop();
74− }
75−
76− function reset()
77− {
78− _pluginItem.reset();
79− }
80−}
Panel/Indicators/NetworkIndicatorWidget.qmldeleted−115
@@ -1,115 +0,0 @@
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 Lesser 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 Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−import Unity.Indicators 0.1 as Indicators
23−
24−Indicators.IndicatorWidget {
25− id: indicatorWidget
26−
27− width: networkIcon.width + units.gu(1)
28−
29− property int signalStrength: 0
30− property int connectionState: Indicators.NetworkConnection.Initial
31−
32− // FIXME : Should us Ubuntu.Icon . results in low res images
33− Image {
34− id: networkIcon
35− objectName: "itemImage"
36− source: get_icon_for_signal(connectionState, signalStrength)
37− visible: source != ""
38− height: indicatorWidget.iconSize
39− width: indicatorWidget.iconSize
40− anchors.centerIn: parent
41− }
42−
43− function parseRootElement(type, data) {
44− if (type == "com.canonical.indicator.root.network") {
45− return true;
46− }
47− return false;
48− }
49−
50− onActionStateChanged: {
51− if (action == undefined || !action.valid) {
52− return;
53− }
54−
55− if (action.state == undefined) {
56− connectionState = 0;
57− return;
58− }
59−
60− connectionState = action.state[Indicators.NetworkActionState.Connection];
61− if (connectionState == Indicators.NetworkConnection.Activated) {
62− signalStrength = action.state[Indicators.NetworkActionState.SignalStrength];
63− }
64− }
65−
66− NumberAnimation {
67− id: activation_animation
68− target: indicatorWidget
69− property: "signalStrength"
70− from: 0
71− to: 100
72− duration: 2500 // 5 states in 2.5 seconds
73− loops: Animation.Infinite
74− }
75−
76− states: [
77− State {
78− name: "unknown"
79− when: connectionState < Indicators.NetworkConnection.Activating || connectionState > Indicators.NetworkConnection.Deactivating
80− PropertyChanges { target: activation_animation; running: false }
81− },
82− State {
83− name: "activating"
84− when: connectionState == Indicators.NetworkConnection.Activating
85− PropertyChanges { target: activation_animation; running: true }
86− },
87− State {
88− name: "activated"
89− when: connectionState == Indicators.NetworkConnection.Activated
90− PropertyChanges { target: activation_animation; running: false }
91− },
92− State {
93− name: "deactivating"
94− when: connectionState == Indicators.NetworkConnection.Deactivating
95− PropertyChanges { target: activation_animation; running: true }
96− }
97− ]
98−
99−
100− function get_icon_for_signal(con_state, value) {
101− if (con_state >= Indicators.NetworkConnection.Activating && con_state <= Indicators.NetworkConnection.Deactivating) {
102− if (value == 0) {
103− return "image://gicon/nm-signal-00";
104− } else if (value <= 25) {
105− return "image://gicon/nm-signal-25";
106− } else if (value <= 50) {
107− return "image://gicon/nm-signal-50";
108− } else if (value <= 75) {
109− return "image://gicon/nm-signal-75";
110− }
111− return "image://gicon/nm-signal-100";
112− }
113− return "image://gicon/wifi-none";
114− }
115−}
Panel/Indicators/client/IndicatorsPage.qmldeleted−49
@@ -1,49 +0,0 @@
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 Lesser 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 Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−
23−Page {
24− id: _page
25−
26− title: indicatorProperties && indicatorProperties.title ? indicatorProperties.title : ""
27− property variant indicatorProperties
28− property alias pageSource : page_loader.source
29−
30− anchors.fill: parent
31−
32− Loader {
33− id: page_loader
34− objectName: "page_loader"
35−
36− anchors.fill: parent
37−
38− onStatusChanged: {
39− if (status == Loader.Ready) {
40− for(var pName in indicatorProperties) {
41− if (item.hasOwnProperty(pName)) {
42− item[pName] = indicatorProperties[pName];
43− }
44− }
45− item.start();
46− }
47− }
48− }
49−}
Panel/Indicators/client/indicatorsclient.cppdeleted−72
@@ -1,72 +0,0 @@
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 Lesser 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 Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− * Nick Dedekind <nick.dedekind@canonical.com>
19− */
20−
21−#include "indicatorsclient.h"
22−#include "paths.h"
23−
24−#include <QQuickView>
25−#include <QQmlContext>
26−#include <QQmlEngine>
27−#include <QDebug>
28−
29−void prependImportPaths(QQmlEngine *engine, const QStringList &paths)
30−{
31− QStringList importPathList = engine->importPathList();
32− for (int i = paths.count()-1; i >= 0; i--) {
33− importPathList.prepend(paths[i]);
34− }
35− engine->setImportPathList(importPathList);
36−}
37−
38−IndicatorsClient::IndicatorsClient(int &argc, char **argv)
39− : QObject(0),
40− m_view(0)
41−{
42− m_application = new QApplication(argc, argv);
43−}
44−
45−IndicatorsClient::~IndicatorsClient()
46−{
47− if (m_view != 0) {
48− delete m_view;
49− }
50−
51− delete m_application;
52−}
53−
54−void IndicatorsClient::setupUI()
55−{
56− m_view = new QQuickView;
57− m_view->engine()->setBaseUrl(QUrl::fromLocalFile(::shellAppDirectory()+"Panel/Indicators/client/"));
58− prependImportPaths(m_view->engine(), ::shellImportPaths());
59−
60− m_view->setSource(QUrl("IndicatorsClient.qml"));
61− m_view->setResizeMode(QQuickView::SizeRootObjectToView);
62−
63− //Usable size on desktop
64− m_view->setMinimumSize(QSize(480, 720));
65−}
66−
67−int IndicatorsClient::run()
68−{
69− setupUI();
70− m_view->show();
71− return m_application->exec();
72−}
Panel/Indicators/servicefiles/CMakeLists.txtdeleted−17
@@ -1,17 +0,0 @@
1−set(INDICATOR_FILES
2− ${CMAKE_CURRENT_SOURCE_DIR}/com.canonical.indicator.battery
3− ${CMAKE_CURRENT_SOURCE_DIR}/com.canonical.indicator.messages
4− ${CMAKE_CURRENT_SOURCE_DIR}/com.canonical.indicator.time
5− ${CMAKE_CURRENT_SOURCE_DIR}/com.canonical.settings.network
6− ${CMAKE_CURRENT_SOURCE_DIR}/com.canonical.settings.sound
7−)
8−
9−# copy indicators file into build directory for shadow builds
10−file(COPY ${INDICATOR_FILES}
11− DESTINATION ${CMAKE_BINARY_DIR}/share/unity/indicators
12−)
13−
14−# install indicator file
15−install(FILES ${INDICATOR_FILES}
16− DESTINATION ${CMAKE_INSTALL_DATADIR}/unity/indicators
17−)
Panel/Indicators/servicefiles/com.canonical.indicator.batterydeleted−9
@@ -1,9 +0,0 @@
1−[Indicator Service]
2−Name=indicator-power
3−ObjectPath=/com/canonical/indicator/battery
4−
5−[phone]
6−ObjectPath=/com/canonical/indicator/battery/phone
7−
8−[desktop]
9−ObjectPath=/com/canonical/indicator/battery/phone
Panel/Indicators/servicefiles/com.canonical.indicator.messagesdeleted−9
@@ -1,9 +0,0 @@
1−[Indicator Service]
2−Name=indicator-messaging
3−ObjectPath=/com/canonical/indicator/messages
4−
5−[phone]
6−ObjectPath=/com/canonical/indicator/messages/phone
7−
8−[desktop]
9−ObjectPath=/com/canonical/indicator/messages/menu
Panel/Indicators/servicefiles/com.canonical.indicator.timedeleted−9
@@ -1,9 +0,0 @@
1−[Indicator Service]
2−Name=indicator-datetime
3−ObjectPath=/com/canonical/indicator/time
4−
5−[phone]
6−ObjectPath=/com/canonical/indicator/time/phone
7−
8−[desktop]
9−ObjectPath=/com/canonical/indicator/time/desktop
Panel/Indicators/servicefiles/com.canonical.settings.networkdeleted−9
@@ -1,9 +0,0 @@
1−[Indicator Service]
2−Name=indicator-network
3−ObjectPath=/com/canonical/settings/network
4−
5−[phone]
6−ObjectPath=/com/canonical/settings/network/phone
7−
8−[desktop]
9−ObjectPath=/com/canonical/settings/network/desktop
Panel/Indicators/servicefiles/com.canonical.settings.sounddeleted−9
@@ -1,9 +0,0 @@
1−[Indicator Service]
2−Name=indicator-sound
3−ObjectPath=/com/canonical/settings/sound
4−
5−[phone]
6−ObjectPath=/com/canonical/settings/sound/phone
7−
8−[desktop]
9−ObjectPath=/com/canonical/settings/sound/desktop
Panel/IndicatorsDataModel.qmldeleted−68
@@ -1,68 +0,0 @@
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 Lesser 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 Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Unity.Indicators 0.1 as Indicators
22−import Utils 0.1
23−
24−Indicators.IndicatorsModel {
25− id: ic_model
26−
27− Component.onCompleted: load()
28−
29− property var applicationPaths: ApplicationPaths {}
30−
31− indicatorData : {
32− 'indicator-messaging' : {
33− 'title': 'Messaging',
34− 'description' : '',
35− 'priority': 10,
36− 'widgetSource' : applicationPaths.shellAppDirectory()+'/Panel/Indicators/MessagingIndicatorWidget.qml',
37− 'pageSource' : applicationPaths.shellAppDirectory()+'/Panel/Indicators/MessagingIndicatorPage.qml'
38− },
39− 'indicator-sound' : {
40− 'title': 'Sound',
41− 'description' : '',
42− 'priority': 20,
43− 'widgetSource' : applicationPaths.shellAppDirectory()+'/Panel/Indicators/SoundIndicatorWidget.qml',
44− 'pageSource' : applicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorPage.qml'
45− },
46− 'indicator-network' : {
47− 'title': 'Networks',
48− 'description' : '',
49− 'priority': 30,
50− 'widgetSource' : applicationPaths.shellAppDirectory()+'/Panel/Indicators/NetworkIndicatorWidget.qml',
51− 'pageSource' : applicationPaths.shellAppDirectory()+'/Panel/Indicators/NetworkIndicatorPage.qml'
52− },
53− 'indicator-power' : {
54− 'title': 'Battery',
55− 'description' : '',
56− 'priority': 40,
57− 'widgetSource' : applicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorWidget.qml',
58− 'pageSource' : applicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorPage.qml'
59− },
60− 'indicator-datetime' : {
61− 'title': 'Date and Time',
62− 'description' : '',
63− 'priority': 100,
64− 'widgetSource' : applicationPaths.shellAppDirectory()+'/Panel/Indicators/DatetimeIndicatorWidget.qml',
65− 'pageSource' : applicationPaths.shellAppDirectory()+'/Panel/Indicators/DatetimeIndicatorPage.qml'
66− }
67− }
68−}
Panel/MenuContent.qmldeleted−194
@@ -1,194 +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 "Menus"
20−import "../Components"
21−
22−Rectangle {
23− id: content
24−
25− property QtObject indicatorsModel: null
26− property bool animate: true // FIXME: Remove. This doesnt seem to be being used and it's referenced in Indicators.
27− property bool overviewActive: true // "state of the menu"
28− property bool __shown: false
29− property bool __contentActive: false
30− property alias currentIndex : menus.currentIndex
31− property color backgroundColor: "#221e1c"
32− property int contentReleaseInterval: 20000
33−
34− width: units.gu(40)
35− height: units.gu(42)
36− color: backgroundColor
37− enabled: __shown
38−
39− signal menuSelected(int index)
40−
41− function showMenu() {
42− __shown = true
43− overviewActive = false
44− }
45−
46− function showOverview() {
47− __shown = true
48− overviewActive = true
49− }
50−
51− function hideAll() {
52− __shown = false
53− }
54−
55− function activateContent() {
56− contentReleaseTimer.stop()
57− __contentActive = true
58− }
59−
60− function releaseContent() {
61− if (__contentActive)
62− contentReleaseTimer.restart()
63− }
64−
65− ListView {
66− id: menus
67− objectName: "menus"
68−
69− anchors.bottom: parent.bottom
70− anchors.top: header.bottom
71− width: parent.width
72−
73− spacing: units.gu(0.5)
74− opacity: !overviewActive && __shown ? 1 : 0
75− enabled: opacity != 0
76− orientation: ListView.Horizontal
77− model: indicatorsModel
78− interactive: false
79− //FIXME: This will make sure that all plugins still alive
80− //check bug https://bugs.launchpad.net/manhattan/+bug/1088945 for more details
81− cacheBuffer: 2147483647
82−
83− delegate: Loader {
84− clip: true
85− property bool contentActive: content.__contentActive
86−
87− onContentActiveChanged: {
88− if (contentActive && item) {
89− item.start()
90− } else if (!contentActive && item) {
91− item.stop()
92− }
93− }
94−
95− width: menus.width
96− height: menus.height
97− source: pageSource
98− visible: content.__shown
99− onVisibleChanged: {
100− // Reset the indicator states
101− if (!visible && item) {
102− item.reset()
103− }
104− }
105− asynchronous: true
106−
107− onLoaded: {
108− for(var pName in indicatorProperties) {
109− if (item.hasOwnProperty(pName)) {
110− item[pName] = indicatorProperties[pName]
111− }
112− }
113− if (contentActive && menus.visible) {
114− item.start()
115− }
116− }
117−
118− // Need to use a binding because the handle height changes.
119− // FIXME: Dont know why we're using handle height (introduces dep).. Check with design about bottom margin
120− Binding {
121− target: item
122− property: "anchors.bottomMargin"
123− value: handle.height
124− }
125− }
126−
127− Behavior on opacity { NumberAnimation {duration: 200} }
128− }
129−
130− Overview {
131− id: overview
132− objectName: "overview"
133−
134− anchors.top: header.bottom
135− anchors.bottom: parent.bottom
136− // FIXME: Dont know why we're using handle height (introduces dep).. Check with design about bottom margin
137− anchors.bottomMargin: handle.height
138−
139− width: content.width
140− indicatorsModel: content.indicatorsModel
141− enabled: content.overviewActive && content.__shown
142− opacity: content.overviewActive && content.__shown ? 1 : 0
143− Behavior on opacity {NumberAnimation{duration: 200}}
144− visible: opacity != 0
145−
146− onMenuSelected: {
147− var storedDuration = menus.highlightMoveDuration
148− var storedVelocity = menus.highlightMoveVelocity
149− menus.highlightMoveDuration = 0
150− menus.highlightMoveVelocity = 100000
151−
152− menus.currentIndex = modelIndex
153− content.overviewActive = false
154−
155− menus.highlightMoveDuration = storedDuration
156− menus.highlightMoveVelocity = storedVelocity
157−
158− content.menuSelected(modelIndex)
159− }
160− }
161−
162− Rectangle {
163− id: header
164− objectName: "header"
165−
166− property alias title: pageHeader.text
167−
168− color: backgroundColor
169− opacity: pageHeader.opacity
170− anchors {
171− left: parent.left
172− right: parent.right
173− }
174− height: childrenRect.height
175−
176− PageHeader {
177− id: pageHeader
178− anchors {
179− left: parent.left
180− right: parent.right
181− }
182− text: content.overviewActive ? i18n.tr("Device") : (indicatorsModel && menus.currentIndex >= 0 && menus.currentIndex < indicatorsModel.count) ? indicatorsModel.get(menus.currentIndex).title : ""
183− opacity: __shown ? 1 : 0
184− Behavior on opacity {NumberAnimation{duration: 100}}
185− }
186− }
187−
188− Timer {
189− id: contentReleaseTimer
190−
191− interval: contentReleaseInterval
192− onTriggered: __contentActive = false
193− }
194−}
Panel/Menus/Overview.qmldeleted−70
@@ -1,70 +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 "../../Components/ListItems" as ListItems
20−import "Overview"
21−
22−IndicatorMenuWindow {
23− id: overview
24−
25− property QtObject indicatorsModel: null
26−
27− signal menuSelected(int modelIndex)
28−
29− VisualItemModel {
30− id: itemModel
31−
32− FlightModeWidget {
33− anchors {
34− left: parent ? parent.left : undefined
35− right: parent ? parent.right : undefined
36− }
37− height: units.gu(8)
38−
39− ListItems.ThinDivider {
40− anchors {
41− bottom: parent.bottom
42− bottomMargin: -units.dp(1)
43− }
44− }
45− }
46−
47− VolumeWidget {
48− anchors {
49− left: parent ? parent.left : undefined
50− right: parent ? parent.right : undefined
51− }
52− height: units.gu(10)
53− }
54−
55− OverviewGrid {
56− model: indicatorsModel
57− anchors {
58− left: parent ? parent.left : undefined
59− right: parent ? parent.right : undefined
60− }
61− }
62− }
63−
64− ListView {
65− id: listView
66− anchors.fill: parent
67− model: itemModel
68− interactive: false
69− }
70−}
Panel/Menus/Overview/FlightModeWidget.qmldeleted−60
@@ -1,60 +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−
20−Item {
21− id: flightModeWidget
22−
23− Image {
24− id: flightIcon
25− source: "graphics/plane_icon.png"
26− anchors {
27− left: parent.left
28− leftMargin: units.gu(2)
29− verticalCenter: parent.verticalCenter
30− }
31− width: units.gu(4)
32− height: units.gu(4)
33− }
34−
35− Label {
36− anchors {
37− left: flightIcon.right
38− right: flightModeSwitch.left
39− margins: units.gu(2)
40− verticalCenter: parent.verticalCenter
41− }
42− text: i18n.tr("Flight mode")
43− color: "#f3f3e7"
44− style: Text.Raised
45− styleColor: "black"
46− opacity: 0.6;
47− fontSize: "medium"
48− elide: Text.ElideRight
49− horizontalAlignment: Text.AlignLeft
50− }
51−
52− Switch {
53− id: flightModeSwitch
54− anchors {
55− right: parent.right
56− rightMargin: units.gu(2)
57− verticalCenter: parent.verticalCenter
58− }
59− }
60−}
Panel/Menus/Overview/OverviewGrid.qmldeleted−136
@@ -1,136 +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−
20−import "../../../Components/ListItems" as ListItems
21−
22−Item {
23− id: overviewGrid
24−
25− height: childrenRect.height
26−
27− property var model
28−
29− UbuntuShape {
30− id: gridBackground
31− anchors.fill: grid
32− color: "#282421"
33− radius: "medium"
34− }
35−
36− GridView {
37− id: grid
38− objectName: "overviewGrid"
39−
40− property int columnCount: 3
41− property int rowCount: Math.ceil(model.count / columnCount)
42−
43− anchors {
44− top: parent.top
45− left: parent.left
46− right: parent.right
47− topMargin: units.gu(3)
48− leftMargin: units.gu(2)
49− rightMargin: units.gu(2)
50− }
51− height: cellWidth * rowCount
52− cellWidth: Math.floor((width) / columnCount)
53− cellHeight: cellWidth
54− model: overviewGrid.model
55− visible: opacity != 0
56− interactive: false
57− delegate:
58− AbstractButton {
59− id: indicatorButton
60− objectName: "overviewGridButton" + index
61− width: grid.cellWidth
62− height: grid.cellHeight
63−
64− Loader {
65− id: loader
66− source: widgetSource
67−
68− width: units.gu(5)
69− height: units.gu(5)
70− anchors.centerIn: parent
71− anchors.verticalCenterOffset: -units.gu(1)
72−
73− onLoaded: {
74− for(var pName in indicatorProperties) {
75− if (item.hasOwnProperty(pName)) {
76− item[pName] = indicatorProperties[pName]
77− }
78− }
79− }
80− }
81−
82− Label {
83− text: title
84− color: "#f3f3e7"
85− fontSize: "small"
86− anchors {
87− left: parent.left
88− right: parent.right
89− bottom: parent.bottom
90− leftMargin: units.gu(0.5)
91− rightMargin: units.gu(0.5)
92− bottomMargin: units.gu(1.5)
93− }
94− elide: Text.ElideRight
95− horizontalAlignment: Text.AlignHCenter
96−
97− }
98− onClicked: overview.menuSelected(index)
99− }
100− }
101−
102− Item {
103− id: gridOverlay
104− anchors.fill: grid
105−
106− Column {
107− anchors {
108− left: parent.left
109− right: parent.right
110− }
111− spacing: grid.cellHeight
112− y: grid.cellHeight - units.dp(1)
113− Repeater {
114− model: grid.rowCount - 1
115− ListItems.ThinDivider {
116− anchors.margins: units.dp(1)
117− }
118− }
119− }
120−
121− Row {
122− anchors {
123− top: parent.top
124− bottom: parent.bottom
125− }
126− spacing: grid.cellWidth - units.dp(1)
127− x: grid.cellWidth - units.dp(1)
128− Repeater {
129− model: grid.columnCount - 1
130− ListItems.VerticalThinDivider {
131− anchors.margins: units.dp(1)
132− }
133− }
134− }
135− }
136−}
Panel/Menus/Overview/VolumeWidget.qmldeleted−88
@@ -1,88 +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 "../../../Components/"
20−
21−Item {
22− id: volumeWidget
23−
24− Image {
25− id: minVolumeIcon
26− objectName: "minVolumeIcon"
27− source: "graphics/sound_off_icon.png"
28− anchors {
29− left: parent.left
30− leftMargin: units.gu(2)
31− verticalCenter: parent.verticalCenter
32− }
33− width: units.gu(4)
34− height: units.gu(4)
35−
36− MouseArea {
37− anchors.fill: parent
38− onClicked: volumeControl.volumeDown();
39− }
40− }
41−
42− Slider {
43− id: slider
44− objectName: "volumeSlider"
45− anchors {
46− left: minVolumeIcon.right
47− right: maxVolumeIcon.left
48− margins: units.gu(1)
49− verticalCenter: parent.verticalCenter
50− }
51− live: false
52− minimumValue: 0
53− maximumValue: 100
54− value: 50
55−
56− onValueChanged: {
57− volumeControl.volume = value;
58− }
59−
60− Binding {
61− target: slider
62− property: "value"
63− value: volumeControl.volume
64− }
65−
66− function formatValue(v) {
67− return ""
68− }
69− }
70−
71− Image {
72− id: maxVolumeIcon
73− objectName: "maxVolumeIcon"
74− source: "graphics/sound_on_icon.png"
75− anchors {
76− right: parent.right
77− rightMargin: units.gu(2)
78− verticalCenter: parent.verticalCenter
79− }
80− width: units.gu(4)
81− height: units.gu(4)
82−
83− MouseArea {
84− anchors.fill: parent
85− onClicked: volumeControl.volumeUp();
86− }
87− }
88−}
Panel/Menus/Overview/graphics/plane_icon@18.pngdeleted

Binary file not shown.

Panel/Menus/Overview/graphics/sound_off_icon@18.pngdeleted

Binary file not shown.

Panel/Menus/Overview/graphics/sound_on_icon@18.pngdeleted

Binary file not shown.

Panel/Panel.qmldeleted−204
@@ -1,204 +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 "../Components"
20−import "../Components/ListItems"
21−
22−Item {
23− id: root
24− readonly property real panelHeight: units.gu(3) + units.dp(2)
25− property real indicatorsMenuWidth: (shell.width > units.gu(60)) ? units.gu(40) : shell.width
26− property alias indicators: indicatorsMenu
27− property bool fullscreenMode: false
28− property bool searchVisible: true
29−
30− readonly property real separatorLineHeight: leftSeparatorLine.height
31− readonly property real __panelMinusSeparatorLineHeight: panelHeight - separatorLineHeight
32−
33− signal searchClicked
34−
35− PanelBackground {
36− id: panelBackground
37− anchors {
38− left: parent.left
39− right: parent.right
40− }
41− height: __panelMinusSeparatorLineHeight
42− y: 0
43− onYChanged: indicatorsMenu.y = y;
44−
45− Behavior on y {
46− NumberAnimation { duration: 200 }
47− }
48− }
49−
50− PanelSeparatorLine {
51− id: leftSeparatorLine
52− anchors {
53− top: panelBackground.bottom
54− left: parent.left
55− right: indicatorsMenu.left
56− }
57− saturation: 1 - indicatorsMenu.unitProgress
58− }
59−
60− Rectangle {
61− id: darkenedArea
62− property real darkenedOpacity: 0.6
63− anchors {
64− left: parent.left
65− right: parent.right
66− top: panelBackground.bottom
67− bottom: parent.bottom
68− }
69− color: "black"
70− opacity: indicatorsMenu.unitProgress * darkenedOpacity
71− MouseArea {
72− anchors.fill: parent
73− enabled: indicatorsMenu.shown
74− onClicked: if (indicatorsMenu.fullyOpened) indicatorsMenu.hide();
75− }
76− }
77−
78− BorderImage {
79− id: dropShadow
80− anchors {
81− top: indicatorsMenu.top
82− bottom: indicatorsSeparatorLine.bottom
83− left: indicatorsMenu.left
84− right: indicatorsMenu.right
85− margins: -units.gu(1)
86− }
87− visible: indicatorsMenu.progress != indicatorRevealer.closedValue
88− source: "graphics/rectangular_dropshadow.sci"
89− }
90−
91− VerticalThinDivider {
92− anchors {
93− top: leftSeparatorLine.top
94− bottom: indicatorsSeparatorLine.top
95− right: indicatorsMenu.left
96− }
97− width: units.dp(2)
98− source: "graphics/VerticalDivider.png"
99− }
100−
101− Indicators {
102− id: indicatorsMenu
103−
104− anchors.right: parent.right
105− y: 0
106− width: root.indicatorsMenuWidth
107− shown: false
108− revealer: indicatorRevealer
109− hintValue: indicatorRevealer.hintDisplacement
110− panelHeight: __panelMinusSeparatorLineHeight
111− showAnimation: StandardAnimation { property: "progress"; duration: 350; to: indicatorRevealer.openedValue; easing.type: Easing.OutCubic }
112− hideAnimation: StandardAnimation { property: "progress"; duration: 350; to: indicatorRevealer.closedValue; easing.type: Easing.OutCubic }
113− openedHeight: parent.height
114−
115− pinnedMode: !fullscreenMode
116−
117− property real unitProgress: (indicatorRevealer.closedValue - progress) / (indicatorRevealer.closedValue - indicatorRevealer.openedValue)
118− }
119−
120− PanelSeparatorLine {
121− id: indicatorsSeparatorLine
122− anchors {
123− top: indicatorsMenu.bottom
124− left: indicatorsMenu.left
125− right: parent.right
126− }
127− }
128−
129− Revealer {
130− id: indicatorRevealer
131− objectName: "indicatorRevealer"
132−
133− width: root.indicatorsMenuWidth
134− anchors {
135− top: parent.top
136− bottom: parent.bottom
137− right: parent.right
138− }
139− target: indicatorsMenu
140− handleSize: __panelMinusSeparatorLineHeight
141− closedValue: __panelMinusSeparatorLineHeight
142− dragVelocityThreshold: units.dp(1)
143− boundProperty: "progress"
144− hintDisplacement: __panelMinusSeparatorLineHeight * 3
145− openOnPress: !fullscreenMode
146− orientation: Qt.Vertical
147−
148− onOpenClicked: {
149− indicatorsMenu.openOverview();
150− indicatorsMenu.show();
151− }
152− onCloseClicked: indicatorsMenu.hide();
153−
154− onOpenPressed: indicatorsMenu.handlePress()
155−
156− function dragToValue(dragPosition) {
157− var offset = target.shown ? 0 : -hintDisplacement + handleSize;
158− return dragPosition + offset;
159− }
160− }
161−
162− SearchIndicator {
163− id: search
164− objectName: "search"
165− enabled: root.searchVisible
166−
167− state: {
168− if (parent.width < indicatorsMenu.width + width) {
169− if (indicatorsMenu.state != "initial") {
170− return "hiddenUp";
171− }
172− }
173− if (root.searchVisible) {
174− return "visible";
175− }
176−
177− return "hiddenUp";
178− }
179−
180− width: units.gu(13)
181− height: __panelMinusSeparatorLineHeight
182− anchors {
183− top: panelBackground.top
184− left: panelBackground.left
185− }
186−
187− onClicked: root.searchClicked()
188− }
189−
190− states: [
191− State {
192− name: "in" //fully opaque and visible at top edge of screen
193− when: !fullscreenMode
194− PropertyChanges { target: panelBackground; y: 0 }
195− PropertyChanges { target: indicatorRevealer; openedValue: indicatorsMenu.openedHeight - panelHeight }
196− },
197− State {
198− name: "out" //pushed off screen
199− when: fullscreenMode
200− PropertyChanges { target: panelBackground; y: -panelHeight }
201− PropertyChanges { target: indicatorRevealer; openedValue: indicatorsMenu.openedHeight }
202− }
203− ]
204−}
Panel/SearchIndicator.qmldeleted−83
@@ -1,83 +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−
20−Item {
21− id: search
22−
23− width: units.gu(9)
24− height: units.gu(3)
25−
26− property string headerText: i18n.tr("Search")
27−
28− signal clicked
29−
30− // eater
31− MouseArea {
32− anchors.fill: parent
33− onClicked: search.clicked()
34− }
35−
36− Item {
37− id: container
38− objectName: "container"
39−
40− width: parent.width
41− height: parent.height
42−
43− Behavior on opacity {NumberAnimation {}}
44− Behavior on y {NumberAnimation {duration: 300; easing.type: Easing.OutCubic}}
45−
46− Image {
47− id: icon
48− source: "graphics/search.png"
49− anchors.verticalCenter: parent.verticalCenter
50− anchors.left: parent.left
51− anchors.leftMargin: units.gu(1)
52− }
53−
54− Label {
55− text: search.headerText
56− color: Qt.rgba(0.8, 0.8, 0.8, 1.0)
57− fontSize: "small"
58− font.capitalization: Font.AllUppercase
59− anchors.left: icon.right
60− anchors.leftMargin: units.gu(1)
61− anchors.verticalCenter: parent.verticalCenter
62− }
63− }
64−
65− states: [
66− State {
67− name: "visible"
68− PropertyChanges {
69− target: container
70− y: 0
71− opacity: 1
72− }
73− },
74− State {
75− name: "hiddenUp"
76− PropertyChanges {
77− target: container
78− y: -height
79− opacity: 0
80− }
81− }
82− ]
83−}
Panel/graphics/Battery@18.pngdeleted

Binary file not shown.

Panel/graphics/Bluetooth@18.pngdeleted

Binary file not shown.

Panel/graphics/Clock@18.pngdeleted

Binary file not shown.

Panel/graphics/Location@18.pngdeleted

Binary file not shown.

Panel/graphics/Messages@18.pngdeleted

Binary file not shown.

Panel/graphics/Network@18.pngdeleted

Binary file not shown.

Panel/graphics/Sound@18.pngdeleted

Binary file not shown.

Panel/graphics/Sync@18.pngdeleted

Binary file not shown.

Panel/graphics/System@18.pngdeleted

Binary file not shown.

Panel/graphics/Time@18.pngdeleted

Binary file not shown.

Panel/graphics/VerticalDivider@18.pngdeleted

Binary file not shown.

Panel/graphics/handle@12.pngdeleted

Binary file not shown.

Panel/graphics/handle@12.scideleted−5
@@ -1,5 +0,0 @@
1−border.left: 0
2−border.top: 1
3−border.bottom: 0
4−border.right: 0
5−source: handle@12.png
Panel/graphics/rectangular_dropshadow@30.pngdeleted

Binary file not shown.

Panel/graphics/search@12.pngdeleted

Binary file not shown.

Panel/graphics/time_and_date@18.pngdeleted

Binary file not shown.

README.mdnew file+31
@@ -0,0 +1,31 @@
1+# Lomiri
2+
3+Lomiri is the operating environment for everywhere. It is able to span the gaps between touch, mouse, and keyboard; between phones, tablets, and workstations; and look good doing it.
4+
5+If you want to contribute to Lomiri on Ubuntu Touch, you've come to the right place. If you want to package Lomiri for other operating systems, you'll be better served by the main branch on the repository that we're migrating to: https://gitlab.com/ubports/core/lomiri
6+
7+Lomiri has been renamed from Unity8. Most of the software on-device in Ubuntu Touch based on Ubuntu 16.04 is still called `unity8`.
8+
9+## Where to report issues
10+
11+Issues related to the version of Lomiri that currently runs on Ubuntu Touch devices may still be reported on this repository. We will move these reports to the GitLab repository as part of our final migration.
12+
13+## Developing Lomiri on Ubuntu Touch
14+
15+This repository contains the code for Lomiri currently running on Ubuntu Touch. If you would like to modify this version of Lomiri, follow the steps below. If you would like to modify Lomiri in another operating system, check out our new repository: https://gitlab.com/ubports/core/lomiri
16+
17+Lomiri can be built and its test suite run using [`clickable`](https://clickable-ut.dev). This is a convenient method to try out most graphical changes to Lomiri without an annoying redeployment process. If you wish to test your changes on your device or make changes that are more difficult to test without real hardware, check out [Making changes and testing locally on the UBports documentation](https://docs.ubports.com/en/latest/systemdev/testing-locally.html). If not, read on.
18+
19+Before you start, [install Clickable](https://clickable-ut.dev/en/latest/install.html).
20+
21+Now, clone this repository to your computer: `git clone https://github.com/ubports/unity8.git`
22+
23+Move into this directory: `cd unity8`
24+
25+Now you can use the full suite of tools provided by this repository's [clickable.yaml](clickable.yaml). For example:
26+
27+* `clickable ide qtcreator` will open QtCreator with this repository open as a project. You can edit and build the project this way, but running the tests will be a bit difficult.
28+* `clickable build --libs --verbose` will build Lomiri in the same environment as it would receive in Ubuntu Touch.
29+* `clickable test --libs` will run the entire Lomiri test suite. This test suite includes graphical tests (which are run on a virtual, invisible desktop) and non-graphical unit tests. These tests make sure Lomiri functions as prescribed and prevents new bugs from being added. You should run them before you create a PR on this repository. This command takes about 7 minutes on an Intel i7-8550U, so plan your time accordingly and use the next two options to reduce the number of times you need to run the whole test suite...
30+* `clickable ide 'cd build/x86_64-linux-gnu/unity8/ && make tryShell'` and similar commands that replace the `Shell` with another test target defined in [tests/qmltests/CMakeLists.txt](tests/qmltests/CMakeLists.txt) allow trying out some Lomiri components in a mock environment. You can use this to try out your changes to Lomiri as you develop.
31+* `clickable ide 'cd build/x86_64-linux-gnu/unity8/ && make xvfbtestShell'` and similar commands that replace the `Shell` with another test target defined in [tests/qmltests/CMakeLists.txt](tests/qmltests/CMakeLists.txt) allow running a single TestCase. You can remove the `xvfb` part of the make target to run the test case graphically, which might help you see what is causing the test to fail.
Shell.qmldeleted−601
@@ -1,601 +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.Application 0.1
19−import Ubuntu.Components 0.1
20−import LightDM 0.1 as LightDM
21−import "Dash"
22−import "Greeter"
23−import "Launcher"
24−import "Panel"
25−import "Hud"
26−import "Components"
27−import "Components/Math.js" as MathLocal
28−import "Bottombar"
29−import "SideStage"
30−
31−FocusScope {
32− id: shell
33−
34− // this is only here to select the width / height of the window if not running fullscreen
35− property bool tablet: false
36− width: tablet ? units.gu(160) : units.gu(40)
37− height: tablet ? units.gu(100) : units.gu(71)
38−
39− property real edgeSize: units.gu(2)
40− property url default_background: shell.width >= units.gu(60) ? "graphics/tablet_background.jpg" : "graphics/phone_background.jpg"
41− property url background: default_background
42− readonly property real panelHeight: panel.panelHeight
43−
44− property bool dashShown: dash.shown
45− property bool stageScreenshotsReady: {
46− if (sideStage.shown) {
47− if (mainStage.applications.count > 0) {
48− return mainStage.usingScreenshots && sideStage.usingScreenshots;
49− } else {
50− return sideStage.usingScreenshots;
51− }
52− } else {
53− return mainStage.usingScreenshots;
54− }
55− }
56−
57− property ListModel searchHistory: SearchHistoryModel {}
58−
59− property var applicationManager: ApplicationManagerWrapper {}
60−
61− Component.onCompleted: {
62− applicationManager.sideStageEnabled = Qt.binding(function() { return sideStage.enabled })
63−
64− // FIXME: if application focused before shell starts, shell draws on top of it only.
65− // We should detect already running applications on shell start and bring them to the front.
66− applicationManager.unfocusCurrentApplication();
67− }
68−
69− readonly property bool fullscreenMode: {
70− if (greeter.shown || lockscreen.shown) {
71− return false;
72− } else if (mainStage.usingScreenshots) { // Window Manager animating so want to re-evaluate fullscreen mode
73− return mainStage.switchingFromFullscreenToFullscreen;
74− } else if (applicationManager.mainStageFocusedApplication) {
75− return applicationManager.mainStageFocusedApplication.fullscreen;
76− } else {
77− return false;
78− }
79− }
80−
81− Connections {
82− target: applicationManager
83− ignoreUnknownSignals: true
84− onFocusRequested: {
85− // TODO: this should be protected to only unlock for certain applications / certain usecases
86− // potentially only in connection with a notification
87− greeter.hide();
88− shell.activateApplication(desktopFile);
89− }
90− }
91−
92− function activateApplication(desktopFile, argument) {
93− if (applicationManager) {
94− // For newly started applications, as it takes them time to draw their first frame
95− // we add a delay before we hide the animation screenshots to compensate.
96− var addDelay = !applicationManager.getApplicationFromDesktopFile(desktopFile);
97−
98− var application;
99− application = applicationManager.activateApplication(desktopFile, argument);
100− if (application == null) {
101− return;
102− }
103− if (application.stage == ApplicationInfo.MainStage || !sideStage.enabled) {
104− mainStage.activateApplication(desktopFile, addDelay);
105− } else {
106− sideStage.activateApplication(desktopFile, addDelay);
107− }
108− stages.show();
109− }
110− }
111−
112− VolumeControl {
113− id: volumeControl
114− }
115−
116− Keys.onVolumeUpPressed: volumeControl.volumeUp()
117− Keys.onVolumeDownPressed: volumeControl.volumeDown()
118−
119− Keys.onReleased: {
120− if (event.key == Qt.Key_PowerOff) {
121− greeter.show()
122− }
123− }
124−
125− Item {
126− id: underlay
127− anchors.fill: parent
128− visible: !(panel.indicators.fullyOpened && shell.width <= panel.indicatorsMenuWidth)
129− && (stages.fullyHidden
130− || (stages.fullyShown && mainStage.usingScreenshots)
131− || !stages.fullyShown && (mainStage.usingScreenshots || (sideStage.shown && sideStage.usingScreenshots)))
132−
133− Image {
134− id: backgroundImage
135− source: shell.background
136− sourceSize.width: parent.width
137− sourceSize.height: parent.height
138− anchors.fill: parent
139− }
140−
141− Rectangle {
142− anchors.fill: parent
143− color: "black"
144− opacity: dash.disappearingAnimationProgress
145− }
146−
147− Dash {
148− id: dash
149−
150− available: !greeter.shown && !lockscreen.shown
151− hides: [stages, launcher, panel.indicators]
152− shown: disappearingAnimationProgress !== 1.0
153− enabled: disappearingAnimationProgress === 0.0
154− // FIXME: unfocus all applications when going back to the dash
155− onEnabledChanged: {
156− if (enabled) {
157− shell.applicationManager.unfocusCurrentApplication()
158− }
159− }
160−
161− anchors {
162− fill: parent
163− topMargin: panel.panelHeight
164− }
165−
166− contentScale: 1.0 - 0.2 * disappearingAnimationProgress
167− opacity: 1.0 - disappearingAnimationProgress
168− property real disappearingAnimationProgress: ((greeter.shown) ? greeterRevealer.animatedProgress : stagesRevealer.animatedProgress)
169− // FIXME: only necessary because stagesRevealer.animatedProgress and
170− // greeterRevealer.animatedProgress are not animated
171− Behavior on disappearingAnimationProgress { SmoothedAnimation { velocity: 5 }}
172− }
173− }
174−
175−
176− Item {
177−
178− width: parent.width
179− height: parent.height
180− x: launcher.progress
181− Behavior on x {SmoothedAnimation{velocity: 600}}
182−
183−
184− Showable {
185− id: stages
186−
187− property bool fullyShown: shown && stages[stagesRevealer.boundProperty] == stagesRevealer.openedValue
188− && parent.x == 0
189− property bool fullyHidden: !shown && stages[stagesRevealer.boundProperty] == stagesRevealer.closedValue
190− available: !greeter.shown
191− hides: [launcher, panel.indicators]
192− shown: false
193− opacity: 1.0
194− showAnimation: StandardAnimation { property: "x"; duration: 350; to: stagesRevealer.openedValue; easing.type: Easing.OutCubic }
195− hideAnimation: StandardAnimation { property: "x"; duration: 350; to: stagesRevealer.closedValue; easing.type: Easing.OutCubic }
196−
197− width: parent.width
198− height: parent.height
199−
200− // close the stages when no focused application remains
201− Connections {
202− target: shell.applicationManager
203− onMainStageFocusedApplicationChanged: stages.closeIfNoApplications()
204− onSideStageFocusedApplicationChanged: stages.closeIfNoApplications()
205− ignoreUnknownSignals: true
206− }
207−
208− function closeIfNoApplications() {
209− if (!shell.applicationManager.mainStageFocusedApplication
210− && !shell.applicationManager.sideStageFocusedApplication
211− && shell.applicationManager.mainStageApplications.count == 0
212− && shell.applicationManager.sideStageApplications.count == 0) {
213− stages.hide();
214− }
215− }
216−
217− // show the stages when an application gets the focus
218− Connections {
219− target: shell.applicationManager
220− onMainStageFocusedApplicationChanged: {
221− if (shell.applicationManager.mainStageFocusedApplication) {
222− mainStage.show();
223− stages.show();
224− }
225− }
226− onSideStageFocusedApplicationChanged: {
227− if (shell.applicationManager.sideStageFocusedApplication) {
228− sideStage.show();
229− stages.show();
230− }
231− }
232− ignoreUnknownSignals: true
233− }
234−
235−
236− Stage {
237− id: mainStage
238−
239− anchors.fill: parent
240− fullyShown: stages.fullyShown
241− shouldUseScreenshots: !fullyShown
242− rightEdgeEnabled: !sideStage.enabled
243−
244− applicationManager: shell.applicationManager
245− rightEdgeDraggingAreaWidth: shell.edgeSize
246− normalApplicationY: shell.panelHeight
247−
248− shown: true
249− function show() {
250− stages.show();
251− }
252− function showWithoutAnimation() {
253− stages.showWithoutAnimation();
254− }
255− function hide() {
256− }
257−
258− // FIXME: workaround the fact that focusing a main stage application
259− // raises its surface on top of all other surfaces including the ones
260− // that belong to side stage applications.
261− onFocusedApplicationChanged: {
262− if (focusedApplication && sideStage.focusedApplication && sideStage.fullyShown) {
263− shell.applicationManager.focusApplication(sideStage.focusedApplication);
264− }
265− }
266− }
267−
268− SideStage {
269− id: sideStage
270−
271− applicationManager: shell.applicationManager
272− rightEdgeDraggingAreaWidth: shell.edgeSize
273− normalApplicationY: shell.panelHeight
274−
275− onShownChanged: {
276− if (!shown && mainStage.applications.count == 0) {
277− stages.hide();
278− }
279− }
280− // FIXME: when hiding the side stage, refocus the main stage
281− // application so that it goes in front of the side stage
282− // application and hides it
283− onFullyShownChanged: {
284− if (!fullyShown && stages.fullyShown && sideStage.focusedApplication != null) {
285− shell.applicationManager.focusApplication(mainStage.focusedApplication);
286− }
287− }
288−
289− enabled: shell.width >= units.gu(60)
290− visible: enabled
291− fullyShown: stages.fullyShown && shown
292− && sideStage[sideStageRevealer.boundProperty] == sideStageRevealer.openedValue
293− shouldUseScreenshots: !fullyShown || mainStage.usingScreenshots || sideStageRevealer.pressed
294−
295− available: !greeter.shown && !lockscreen.shown && enabled
296− hides: [launcher, panel.indicators]
297− shown: false
298− showAnimation: StandardAnimation { property: "x"; duration: 350; to: sideStageRevealer.openedValue; easing.type: Easing.OutQuint }
299− hideAnimation: StandardAnimation { property: "x"; duration: 350; to: sideStageRevealer.closedValue; easing.type: Easing.OutQuint }
300−
301− width: units.gu(40)
302− height: stages.height
303− handleExpanded: sideStageRevealer.pressed
304− }
305−
306− Revealer {
307− id: sideStageRevealer
308−
309− enabled: mainStage.applications.count > 0 && sideStage.applications.count > 0
310− && sideStage.available
311− direction: Qt.RightToLeft
312− openedValue: parent.width - sideStage.width
313− hintDisplacement: units.gu(3)
314− /* The size of the sidestage handle needs to be bigger than the
315− typical size used for edge detection otherwise it is really
316− hard to grab.
317− */
318− handleSize: sideStage.shown ? units.gu(4) : shell.edgeSize
319− closedValue: parent.width + sideStage.handleSizeCollapsed
320− target: sideStage
321− x: parent.width - width
322− width: sideStage.width + handleSize * 0.7
323− height: sideStage.height
324− orientation: Qt.Horizontal
325− }
326− }
327− }
328−
329−
330− Revealer {
331− id: stagesRevealer
332−
333− property real animatedProgress: MathLocal.clamp((-dragPosition - launcher.progress) / closedValue, 0, 1)
334− enabled: mainStage.applications.count > 0 || sideStage.applications.count > 0
335− direction: Qt.RightToLeft
336− openedValue: 0
337− hintDisplacement: units.gu(3)
338− handleSize: shell.edgeSize
339− closedValue: width
340− target: stages
341− width: stages.width
342− height: stages.height
343− orientation: Qt.Horizontal
344− }
345−
346− Lockscreen {
347− id: lockscreen
348− hides: [launcher, panel.indicators, hud]
349− shown: false
350− enabled: true
351− showAnimation: StandardAnimation { property: "opacity"; to: 1 }
352− hideAnimation: StandardAnimation { property: "opacity"; to: 0 }
353− y: panel.panelHeight
354− x: required ? 0 : - width
355− width: parent.width
356− height: parent.height - panel.panelHeight
357− background: shell.background
358−
359− onUnlocked: lockscreen.hide()
360− onCancel: greeter.show()
361−
362− Component.onCompleted: {
363− if (LightDM.Users.count == 1) {
364− LightDM.Greeter.authenticate(LightDM.Users.data(0, LightDM.UserRoles.NameRole))
365− }
366− }
367− }
368−
369− Connections {
370− target: LightDM.Greeter
371−
372− onShowPrompt: {
373− if (LightDM.Users.count == 1) {
374− // TODO: There's no better way for now to determine if its a PIN or a passphrase.
375− if (text == "PIN") {
376− lockscreen.alphaNumeric = false
377− } else {
378− lockscreen.alphaNumeric = true
379− }
380− lockscreen.placeholderText = i18n.tr("Please enter %1:").arg(text);
381− lockscreen.show();
382− }
383− }
384− }
385−
386− Greeter {
387− id: greeter
388−
389− available: true
390− hides: [launcher, panel.indicators, hud]
391− shown: true
392− showAnimation: StandardAnimation { property: "x"; to: greeterRevealer.openedValue }
393− hideAnimation: StandardAnimation { property: "x"; to: greeterRevealer.closedValue }
394− y: panel.panelHeight
395− width: parent.width
396− height: parent.height - panel.panelHeight
397−
398− property var previousMainApp: null
399− property var previousSideApp: null
400−
401− onShownChanged: {
402− if (shown) {
403− lockscreen.reset();
404− // If there is only one user, we start authenticating with that one here.
405− // If there are more users, the Greeter will handle that
406− if (LightDM.Users.count == 1) {
407− LightDM.Greeter.authenticate(LightDM.Users.data(0, LightDM.UserRoles.NameRole));
408− }
409− greeter.forceActiveFocus();
410− // FIXME: *FocusedApplication are not updated when unfocused, hence the need to check whether
411− // the stage was actually shown
412− if (mainStage.fullyShown) greeter.previousMainApp = applicationManager.mainStageFocusedApplication;
413− if (sideStage.fullyShown) greeter.previousSideApp = applicationManager.sideStageFocusedApplication;
414− applicationManager.unfocusCurrentApplication();
415− } else {
416− if (greeter.previousMainApp) {
417− applicationManager.focusApplication(greeter.previousMainApp);
418− greeter.previousMainApp = null;
419− }
420− if (greeter.previousSideApp) {
421− applicationManager.focusApplication(greeter.previousSideApp);
422− greeter.previousSideApp = null;
423− }
424− }
425− }
426−
427− onUnlocked: greeter.hide()
428− onSelected: {
429− var bgPath = greeter.model.data(uid, LightDM.UserRoles.BackgroundPathRole)
430− shell.background = bgPath ? bgPath : default_background
431− }
432− }
433−
434− InputFilterArea {
435− anchors.fill: parent
436− blockInput: greeter.shown || lockscreen.shown
437− }
438−
439− Revealer {
440− id: greeterRevealer
441−
442− property real animatedProgress: MathLocal.clamp(-dragPosition / closedValue, 0, 1)
443− target: greeter
444− width: greeter.width
445− height: greeter.height
446− handleSize: shell.edgeSize
447− orientation: Qt.Horizontal
448− visible: greeter.shown
449− enabled: !greeter.locked
450− }
451−
452− Item {
453− id: overlay
454−
455− anchors.fill: parent
456−
457− Panel {
458− id: panel
459− anchors.fill: parent //because this draws indicator menus
460− indicatorsMenuWidth: parent.width > units.gu(60) ? units.gu(40) : parent.width
461− indicators {
462− hides: [launcher]
463− }
464− fullscreenMode: shell.fullscreenMode
465− searchVisible: !greeter.shown && !lockscreen.shown
466−
467− InputFilterArea {
468− anchors.fill: parent
469− blockInput: panel.indicators.shown
470− }
471− }
472−
473− Hud {
474− id: hud
475−
476− width: parent.width > units.gu(60) ? units.gu(40) : parent.width
477− height: parent.height
478−
479− available: !greeter.shown && !panel.indicators.shown && !lockscreen.shown
480− shown: false
481− showAnimation: StandardAnimation { property: "y"; duration: hud.showableAnimationDuration; to: 0; easing.type: Easing.Linear }
482− hideAnimation: StandardAnimation { property: "y"; duration: hud.showableAnimationDuration; to: hudRevealer.closedValue; easing.type: Easing.Linear }
483−
484− Connections {
485− target: shell.applicationManager
486− onMainStageFocusedApplicationChanged: hud.hide()
487− onSideStageFocusedApplicationChanged: hud.hide()
488− }
489−
490− InputFilterArea {
491− anchors.fill: parent
492− blockInput: hud.shown
493− }
494− }
495−
496− Revealer {
497− id: hudRevealer
498−
499− enabled: hud.shown
500− width: hud.width
501− anchors.left: hud.left
502− height: parent.height
503− target: hud.revealerTarget
504− closedValue: height
505− openedValue: 0
506− direction: Qt.RightToLeft
507− orientation: Qt.Vertical
508− handleSize: hud.handleHeight
509− onCloseClicked: target.hide()
510− }
511−
512− Bottombar {
513− theHud: hud
514− anchors.fill: parent
515− enabled: !panel.indicators.shown
516− }
517−
518− InputFilterArea {
519− blockInput: launcher.shown
520− anchors {
521− top: parent.top
522− bottom: parent.bottom
523− left: parent.left
524− }
525− width: launcher.width
526− }
527−
528− Launcher {
529− id: launcher
530−
531− anchors.top: parent.top
532− anchors.bottom: parent.bottom
533− width: parent.width
534− dragAreaWidth: shell.edgeSize
535− available: !greeter.locked
536− teasing: available && greeter.leftTeaserPressed
537− onDashItemSelected: {
538− greeter.hide()
539− // Animate if moving between application and dash
540− if (!stages.shown) {
541− dash.setCurrentLens("home.lens", true, false)
542− } else {
543− dash.setCurrentLens("home.lens", false, false)
544− }
545− stages.hide();
546− }
547− onDash: {
548− dash.setCurrentLens("applications.lens", true, false)
549− stages.hide();
550− }
551− onLauncherApplicationSelected:{
552− greeter.hide()
553− shell.activateApplication(desktopFile)
554− }
555− onShownChanged: {
556− if (shown) {
557− panel.indicators.hide()
558− hud.hide()
559− }
560− }
561− }
562− }
563−
564− focus: true
565−
566− InputFilterArea {
567− anchors {
568− top: parent.top
569− bottom: parent.bottom
570− left: parent.left
571− }
572− width: shell.edgeSize
573− blockInput: true
574− }
575−
576− InputFilterArea {
577− anchors {
578− top: parent.top
579− bottom: parent.bottom
580− right: parent.right
581− }
582− width: shell.edgeSize
583− blockInput: true
584− }
585−
586− Binding {
587− target: i18n
588− property: "domain"
589− value: "unity8"
590− }
591−
592− //FIXME: This should be handled in the input stack, keyboard shouldnt propagate
593− MouseArea {
594− anchors.bottom: parent.bottom
595− anchors.left: parent.left
596− anchors.right: parent.right
597− height: shell.applicationManager ? shell.applicationManager.keyboardHeight : 0
598−
599− enabled: shell.applicationManager && shell.applicationManager.keyboardVisible
600− }
601−}
SideStage/SideStage.qmldeleted−68
@@ -1,68 +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.Application 0.1
19−import Ubuntu.Components 0.1
20−import "../Components"
21−
22−Stage {
23− id: stage
24−
25− type: ApplicationInfo.SideStage
26− property real handleSizeCollapsed: units.gu(2.5)
27− property real handleSizeExpanded: units.gu(4)
28− property bool handleExpanded
29−
30− /* FIXME: workaround so that when a main stage app goes fullscreen
31− the sidestage's top is not transparent. Proper fix would be to
32− resize the side stage app.
33− */
34− Rectangle {
35− id: backgroundBeneathPanel
36− anchors {
37− top: parent.top
38− left: parent.left
39− right: parent.right
40− }
41− height: shell.panelHeight
42− color: background.color
43− z: -1
44− }
45−
46− Rectangle {
47− id: background
48− anchors.fill: parent
49− color: "#2c2924"
50− z: -1
51− visible: stage.usingScreenshots
52− }
53−
54− SidestageHandle {
55− id: handle
56− objectName: "sideStageHandle"
57−
58− anchors {
59− top: parent.top
60− bottom: parent.bottom
61− left: parent.left
62− leftMargin: -width
63− }
64− width: handleExpanded ? handleSizeExpanded : handleSizeCollapsed
65− Behavior on width { NumberAnimation { easing.type: Easing.OutQuart} }
66− z: -1
67− }
68−}
SideStage/graphics/sidestage_handle@20.pngdeleted

Binary file not shown.

builddeleted−68
@@ -1,68 +0,0 @@
1−#!/bin/sh
2−
3−PACKAGE=unity8
4−UNITY_BUILD_DIR=$PWD/../unity_build/build
5−SETUP=false
6−CLEAN=false
7−NUM_JOBS=$(( `grep -c ^processor /proc/cpuinfo` + 1 ))
8−
9−usage() {
10− echo "usage: build [OPTIONS] [BUILD_TYPE]\n" >&2
11− echo "Script to build the shell. If BUILD_TYPE is not specified, it defaults to \"debug\".\n" >&2
12− echo "OPTIONS:" >&2
13− echo " -s, --setup Setup the build environment and branch Unity" >&2
14− echo " -c, --clean Clean the build tree before building" >&2
15− echo >&2
16− exit 1
17−}
18−
19−ARGS=`getopt -n$0 -u -a --longoptions="setup,clean,help" -o "sch" -- "$@"`
20−[ $? -ne 0 ] && usage
21−eval set -- "$ARGS"
22−
23−while [ $# -gt 0 ]
24−do
25− case "$1" in
26− -s|--setup) SETUP=true;;
27− -c|--clean) CLEAN=true;;
28− -h|--help) usage;;
29− --) shift;break;;
30− esac
31− shift
32−done
33−
34−[ $# -gt 1 ] && usage
35−
36−BUILD_TYPE="debug"
37−[ $# -eq 1 ] && BUILD_TYPE="$1"
38−
39−install_dependencies() {
40− . /etc/lsb-release
41− [ -f /etc/apt/sources.list.d/phablet-team-desktop-deps-${DISTRIB_CODENAME}.list ] || sudo add-apt-repository ppa:phablet-team/desktop-deps || exit 1
42− [ -f /etc/apt/sources.list.d/canonical-qt5-edgers-qt5-proper-${DISTRIB_CODENAME}.list ] || sudo add-apt-repository ppa:canonical-qt5-edgers/qt5-proper || exit 2;
43− [ -f /etc/apt/sources.list.d/ubuntu-sdk-team-ppa-${DISTRIB_CODENAME}.list ] || sudo add-apt-repository ppa:ubuntu-sdk-team/ppa || exit 3
44− sudo apt-get update || exit 4
45− echo "Installing Unity 8 dependencies.."
46− sudo apt-get install qtdeclarative5-ubuntu-ui-toolkit-plugin qtdeclarative5-dee-plugin indicators-client indicators-client-plugin-* qtbase5-dev qtbase5-private-dev qtdeclarative5-dev qtdeclarative5-dev-tools qtdeclarative5-test-plugin libdee-qt5-dev libnm-glib-dev libnm-util-dev libqmenumodel-dev libpulse-dev qtdeclarative5-xmllistmodel-plugin unity-lens-mock demo-assets ubuntu-mobile-icons || exit 5
47−}
48−
49−if [ -f "/usr/bin/ninja" ] ; then
50− GENERATOR="-G Ninja"
51− BUILD_COMMAND="ninja -j$NUM_JOBS"
52−else
53− GENERATOR=
54− BUILD_COMMAND="make -j$NUM_JOBS"
55−fi
56−
57−if $SETUP; then
58− install_dependencies
59− ./build_unity --setup || exit 1$?
60− ./build_unity || exit 1$?
61−else
62− if $CLEAN; then rm -rf builddir; fi
63− mkdir -p builddir
64− cd builddir
65− PKG_CONFIG_PATH=$UNITY_BUILD_DIR/lib/pkgconfig/:$PKG_CONFIG_PATH cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE .. ${GENERATOR} || exit 6
66− ${BUILD_COMMAND} || exit 7
67−fi
68−
build.shnew file+82
@@ -0,0 +1,82 @@
1+#!/bin/sh
2+
3+#
4+# Copyright (C) 2017 Canonical Ltd
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 version 3 as
8+# published by the Free Software Foundation.
9+#
10+# This program is distributed in the hope that it will be useful,
11+# but WITHOUT ANY WARRANTY; without even the implied warranty of
12+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+# GNU General Public License for more details.
14+#
15+# You should have received a copy of the GNU General Public License
16+# along with this program. If not, see <http://www.gnu.org/licenses/>.
17+#
18+
19+SETUP=false
20+CLEAN=false
21+NUM_JOBS=$(( `grep -c ^processor /proc/cpuinfo` + 1 ))
22+CODE_DIR=$( dirname `readlink -f $0` )
23+
24+usage() {
25+ echo "usage: build [OPTIONS] [BUILD_TYPE]\n" >&2
26+ echo "Script to build the shell. If BUILD_TYPE is not specified, it defaults to \"debug\".\n" >&2
27+ echo "OPTIONS:" >&2
28+ echo " -c, --clean Clean the build tree before building" >&2
29+ echo >&2
30+ exit 1
31+}
32+
33+ARGS=`getopt -n$0 -u -a --longoptions="setup,clean,help" -o "sch" -- "$@"`
34+[ $? -ne 0 ] && usage
35+eval set -- "$ARGS"
36+
37+while [ $# -gt 0 ]
38+do
39+ case "$1" in
40+ -c|--clean) CLEAN=true;;
41+ -h|--help) usage;;
42+ --) shift;break;;
43+ esac
44+ shift
45+done
46+
47+[ $# -gt 1 ] && usage
48+
49+BUILD_TYPE="debug"
50+[ $# -eq 1 ] && BUILD_TYPE="$1"
51+
52+mk_build_deps() {
53+ if [ ! -f control -o $CODE_DIR/debian/control -nt control ]; then
54+ sed 's/\:native//g' $CODE_DIR/debian/control > control
55+ mk-build-deps --install --root-cmd sudo control
56+ fi
57+}
58+
59+if [ -f "/usr/bin/ccache" ] ; then
60+ if [ "x$CC" = "x" ]; then
61+ export CC='ccache gcc'
62+ fi
63+ if [ "x$CXX" = "x" ] ; then
64+ export CXX='ccache g++'
65+ fi
66+fi
67+
68+if [ -f "/usr/bin/ninja" ] ; then
69+ GENERATOR="-G Ninja"
70+ # Ninja does not need -j, it parallelizes automatically.
71+ BUILD_COMMAND="ninja"
72+else
73+ GENERATOR=
74+ BUILD_COMMAND="make -j$NUM_JOBS"
75+fi
76+
77+if $CLEAN; then rm -rf builddir; fi
78+mkdir -p builddir
79+cd builddir
80+mk_build_deps
81+cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE $CODE_DIR ${GENERATOR} || exit 6
82+${BUILD_COMMAND} || exit 7
build_unitydeleted−168
@@ -1,168 +0,0 @@
1−#!/bin/bash
2−
3−TARGET_DIR=$PWD/../unity_build
4−BUILD_DIR=$TARGET_DIR/build
5−SETUP=false
6−UPDATE=false
7−CLEAN=false
8−NUM_JOBS=$(( `grep -c ^processor /proc/cpuinfo` + 1 ))
9−LENSES="applications mockmusic mockvideos"
10−
11−# verified working revisions
12−LIBUNITY_REV=215
13−UNITY_REV=3260
14−HUD_REV=252
15−
16−usage() {
17− echo "usage: build_unity [OPTIONS]\n"
18− echo "Script to build Unity on Ubuntu 12.10.\n"
19− echo "OPTIONS:"
20− echo " -s, --setup Setup the build environment and branch Unity"
21− echo " -u, --update Update Unity's source code"
22− echo " -c, --clean Clean build trees before building"
23− exit 1
24−}
25−
26−set -- `getopt -n$0 -u -a --longoptions="setup,update,clean,help" "such" "$@"`
27−
28−# FIXME: giving incorrect arguments does not call usage and exit
29−while [ $# -gt 0 ]
30−do
31− case "$1" in
32− -s|--setup) SETUP=true;;
33− -u|--update) UPDATE=true;;
34− -c|--clean) CLEAN=true;;
35− -h|--help) usage;;
36− --) shift;break;;
37− esac
38− shift
39−done
40−
41−install_utils() {
42− echo "Installing build utilities.."
43− sudo apt-get install devscripts equivs || exit 4
44−}
45−
46−mk_build_deps() {
47− echo "Installing build dependencies.."
48− cd $TARGET_DIR
49− sudo mk-build-deps -B -i $TARGET_DIR/libunity/debian/control || exit 5
50− sudo mk-build-deps -B -i $TARGET_DIR/unity/debian/control || exit 6
51− sudo mk-build-deps -B -i $TARGET_DIR/hud/debian/control || exit 7
52−}
53−
54−branch_libunity() {
55− echo "Branching libunity.."
56− bzr branch lp:libunity/phablet $TARGET_DIR/libunity || exit 8
57−}
58−
59−branch_unity() {
60− echo "Branching Unity.."
61− bzr branch lp:unity/phablet-mods $TARGET_DIR/unity || exit 9
62−}
63−
64−branch_hud() {
65− echo "Branching hud.."
66− bzr branch lp:hud $TARGET_DIR/hud || exit 10
67−}
68−
69−update_unity() {
70− echo "Updating Unity.."
71− bzr pull -d $TARGET_DIR/unity || exit 11
72−}
73−
74−update_libunity() {
75− echo "Updating libunity.."
76− bzr pull -d $TARGET_DIR/libunity || exit 12
77−}
78−
79−update_hud() {
80− echo "Updating hud"
81− bzr pull -d $TARGET_DIR/hud || exit 13
82−}
83−
84−compile_libunity() {
85− echo "Configuring libunity.."
86−
87− if $CLEAN; then bzr clean-tree -d $TARGET_DIR/libunity --quiet --unknown --ignored --force; fi
88−
89− cd $TARGET_DIR/libunity
90− bzr revert --quiet -r $LIBUNITY_REV || exit 14
91−
92− mkdir $TARGET_DIR/libunity/build
93− cd $TARGET_DIR/libunity/build
94−
95− ../autogen.sh --prefix $BUILD_DIR --disable-debug || exit 15
96−
97− echo "Building libunity and installing in " $BUILD_DIR
98− make -j$NUM_JOBS install || exit 16
99−
100−}
101−
102−compile_unity_core() {
103− echo "Configuring Unity.."
104−
105− if $CLEAN; then bzr clean-tree -d $TARGET_DIR/unity --quiet --unknown --ignored --force; fi
106−
107− cd $TARGET_DIR/unity
108− bzr revert --quiet -r $UNITY_REV || exit 17
109−
110− mkdir $TARGET_DIR/unity/build
111− cd $TARGET_DIR/unity/build
112−
113− PKG_CONFIG_PATH=$BUILD_DIR/lib/pkgconfig:$PKG_CONFIG_PATH cmake $TARGET_DIR/unity -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$BUILD_DIR -DCOMPIZ_PLUGIN_INSTALL_TYPE=local -DGSETTINGS_LOCALINSTALL=ON || exit 18
114−
115− echo "Building UnityCore and installing in " $BUILD_DIR
116− cd UnityCore
117− make -j$NUM_JOBS install || exit 19
118−
119−}
120−
121−compile_hud() {
122− echo "Configuring hud.."
123−
124− if $CLEAN; then bzr clean-tree -d $TARGET_DIR/hud --quiet --unknown --ignored --force; fi
125−
126− cd $TARGET_DIR/hud
127− bzr revert -r $HUD_REV || exit 20
128−
129− mkdir $TARGET_DIR/hud/build
130− cd $TARGET_DIR/hud/build
131−
132− cmake $TARGET_DIR/hud/ -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$BUILD_DIR -DCMAKE_INSTALL_LIBDIR=lib -DLOCAL_INSTALL=ON -DENABLE_TESTS=OFF || exit 21
133−
134− echo "Building hud and installing in " $BUILD_DIR
135− make install || exit 22
136−
137−}
138−
139−link_lenses() {
140− echo "Linking system lenses.."
141− mkdir -p $BUILD_DIR/share/unity/lenses/
142− for LENS in $LENSES; do
143− [ -e $BUILD_DIR/share/unity/lenses/$LENS ] || ln -ivs /usr/share/unity/lenses/$LENS $BUILD_DIR/share/unity/lenses/$LENS
144− done
145−}
146−
147−if $SETUP; then
148− echo "Setting up environment for building Unity.."
149− install_utils
150− mkdir -p $TARGET_DIR
151− branch_libunity
152− branch_unity
153− branch_hud
154− mk_build_deps
155−elif $UPDATE; then
156− update_libunity
157− update_unity
158− update_hud
159− mk_build_deps
160−else
161− if $CLEAN; then rm -Rf $BUILD_DIR; fi
162− mkdir -p $BUILD_DIR
163− compile_libunity
164− compile_unity_core
165− compile_hud
166− link_lenses
167−fi
168−
clickable.yamlnew file+153
@@ -0,0 +1,153 @@
1+clickable_minimum_required: '7'
2+builder: custom
3+build: echo Run \'clickable build --libs --verbose\' to build && false
4+restrict_arch: amd64
5+libraries:
6+ unity8:
7+ builder: cmake
8+ src_dir: "${ROOT}"
9+ test: make xvfballtests -j${NUM_PROCS}
10+ dependencies_host:
11+ - android-headers
12+ - cmake
13+ - cmake-extras
14+ - dbus-test-runner
15+ - debhelper
16+ - dh-apparmor
17+ - doxyqml
18+ - g++:native
19+ - gdb
20+ - graphviz
21+ - gsettings-ubuntu-schemas
22+ - libandroid-properties-dev
23+ - libconnectivity-qt1-dev
24+ - libevdev-dev
25+ - libgeonames-dev
26+ - libgl1-mesa-dev
27+ - libgl1-mesa-dri
28+ - libgles2-mesa-dev
29+ - libglib2.0-dev
30+ - libgnome-desktop-3-12
31+ - libgnome-desktop-3-dev
32+ - libgsettings-qt-dev
33+ - libhardware-dev
34+ - liblightdm-qt5-3-dev
35+ - libpam0g-dev
36+ - libpulse-dev
37+ - libqmenumodel-dev
38+ - libqt5sql5-sqlite
39+ - libqt5svg5-dev
40+ - libqt5xmlpatterns5-dev
41+ - libqtdbusmock1-dev
42+ - libqtdbustest1-dev
43+ - libsystemsettings-dev
44+ - libubuntu-app-launch2-dev
45+ - libubuntu-download-manager-common-dev
46+ - libubuntugestures5-dev
47+ - libubuntugestures5-private-dev
48+ - libudev-dev
49+ - libudm-common-dev
50+ - libunity-api-dev
51+ - libusermetricsoutput1-dev
52+ - libx11-dev
53+ - libxcb1-dev
54+ - libxi-dev
55+ - pkg-config
56+ - python3-all:any
57+ - python3-setuptools:native
58+ - qml-module-qt-labs-folderlistmodel
59+ - qml-module-qt-labs-settings
60+ - qml-module-qtmultimedia
61+ - qml-module-qtqml-statemachine
62+ - qml-module-qtquick-layouts
63+ - qml-module-qtquick-xmllistmodel
64+ - qml-module-qtquick2
65+ - qml-module-qtsysteminfo
66+ - qml-module-qttest
67+ - qml-module-ubuntu-components
68+ - qml-module-ubuntu-layouts
69+ - qml-module-ubuntu-settings-components
70+ - qml-module-ubuntu-test
71+ - qtbase5-dev
72+ - qtbase5-dev-tools
73+ - qtbase5-private-dev
74+ - qtdbustest-runner
75+ - qtdeclarative5-dev
76+ - qtdeclarative5-dev-tools
77+ - qtdeclarative5-private-dev
78+ - qtdeclarative5-ubuntu-content1
79+ - ttf-ubuntu-font-family
80+ - ubports-wallpapers
81+ - xvfb
82+dependencies_target:
83+ - android-headers
84+ - cmake
85+ - cmake-extras
86+ - dbus-test-runner
87+ - debhelper
88+ - dh-apparmor
89+ - doxyqml
90+ - g++:native
91+ - gdb
92+ - graphviz
93+ - gsettings-ubuntu-schemas
94+ - libandroid-properties-dev
95+ - libconnectivity-qt1-dev
96+ - libevdev-dev
97+ - libgeonames-dev
98+ - libgl1-mesa-dev
99+ - libgl1-mesa-dri
100+ - libgles2-mesa-dev
101+ - libglib2.0-dev
102+ - libgnome-desktop-3-12
103+ - libgnome-desktop-3-dev
104+ - libgsettings-qt-dev
105+ - libhardware-dev
106+ - liblightdm-qt5-3-dev
107+ - libpam0g-dev
108+ - libpulse-dev
109+ - libqmenumodel-dev
110+ - libqt5sql5-sqlite
111+ - libqt5svg5-dev
112+ - libqt5xmlpatterns5-dev
113+ - libqtdbusmock1-dev
114+ - libqtdbustest1-dev
115+ - libsystemsettings-dev
116+ - libubuntu-app-launch2-dev
117+ - libubuntu-download-manager-common-dev
118+ - libubuntugestures5-dev
119+ - libubuntugestures5-private-dev
120+ - libudev-dev
121+ - libudm-common-dev
122+ - libunity-api-dev
123+ - libusermetricsoutput1-dev
124+ - libx11-dev
125+ - libxcb1-dev
126+ - libxi-dev
127+ - pkg-config
128+ - python3-all:any
129+ - python3-setuptools:native
130+ - qml-module-qt-labs-folderlistmodel
131+ - qml-module-qt-labs-settings
132+ - qml-module-qtmultimedia
133+ - qml-module-qtqml-statemachine
134+ - qml-module-qtquick-layouts
135+ - qml-module-qtquick-xmllistmodel
136+ - qml-module-qtquick2
137+ - qml-module-qtsysteminfo
138+ - qml-module-qttest
139+ - qml-module-ubuntu-components
140+ - qml-module-ubuntu-layouts
141+ - qml-module-ubuntu-settings-components
142+ - qml-module-ubuntu-test
143+ - qtbase5-dev
144+ - qtbase5-dev-tools
145+ - qtbase5-private-dev
146+ - qtdbustest-runner
147+ - qtdeclarative5-dev
148+ - qtdeclarative5-dev-tools
149+ - qtdeclarative5-private-dev
150+ - qtdeclarative5-ubuntu-content1
151+ - ttf-ubuntu-font-family
152+ - ubports-wallpapers
153+ - xvfb
cmake/modules/QmlTest.cmake+470−64
@@ -1,83 +1,489 @@
1−# add_qml_test(path component_name [NO_ADD_TEST] [NO_TARGETS]
2−# [TARGETS target1 [target2 [...]]]
3−# [IMPORT_PATHS import_path1 [import_path2 [...]]
4−# [PROPERTIES prop1 value1 [prop2 value2 [...]]])
1+# If you need to override the qmlscene or qmltestrunner executables,
2+# create the corresponding executable target.
3+
4+# These functions respect the global STDOUT_LOGGER and ARTIFACTS_DIR variables.
5+
6+# You can use those with cmake_parse_arguments
7+# if you need to wrap and mangle arguments.
8+set(QMLTEST_OPTIONS ADD_TEST CACHE INTERNAL "")
9+set(QMLTEST_SINGLE ITERATIONS ARG_PREFIX CACHE INTERNAL "")
10+set(QMLTEST_MULTI ARGS ENVIRONMENT DEPENDS IMPORT_PATHS TARGETS CACHE INTERNAL "")
11+
12+# import_executables(name1 [name2 [...]]
13+# [OPTIONAL] # continue when not found
14+# )
515#
6−# NO_ADD_TEST will prevent adding the test to the "test" target
7−# NO_TARGETS will prevent adding the test to any targets
8−# TARGETS lists the targets the test should be added to
9−# IMPORT_PATHS will pass those paths to qmltestrunner as "-import" arguments
10−# PROPERTIES will be set on the target and test target. See CMake's set_target_properties()
16+# This will find the named executables and import them
17+# to an imported target of the same name.
18+
19+function(import_executables)
20+ cmake_parse_arguments(QMLTEST "OPTIONAL" "" "" ${ARGN})
21+
22+ foreach(NAME ${QMLTEST_UNPARSED_ARGUMENTS})
23+ if(NOT TARGET ${NAME})
24+ add_executable(${NAME} IMPORTED GLOBAL)
25+ find_program(${NAME}_exe ${NAME})
26+
27+ if(NOT QMLTEST_OPTIONAL AND NOT ${NAME}_exe)
28+ message(FATAL_ERROR "Could not locate ${NAME}.")
29+ elseif(NOT ${NAME}_exe)
30+ message(STATUS "Could not locate ${NAME}, skipping.")
31+ else()
32+ set_target_properties(${NAME} PROPERTIES IMPORTED_LOCATION ${${NAME}_exe})
33+ endif()
34+ endif()
35+ endforeach()
36+endfunction()
37+
38+
39+# add_qml_test(path component_name
40+# [...]
41+# )
42+#
43+# Add test targets for ${component_name} under ${path}. It's assumed
44+# that the test file is named ${path}/tst_${component_name}.qml.
45+#
46+# This function wraps add_manual_qml_test and add_qml_unittest,
47+# see below for available arguments.
48+
49+function(add_qml_test PATH COMPONENT_NAME)
50+ cmake_parse_arguments(QMLTEST "${QMLTEST_OPTIONS}" "${QMLTEST_SINGLE}" "${QMLTEST_MULTI}" ${ARGN})
51+ mangle_arguments()
52+
53+ add_qml_unittest(${ARGV})
54+ add_manual_qml_test(${ARGV})
55+endfunction()
56+
57+
58+# add_qml_test_data(path component_name
59+# [...]
60+# )
1161#
12−# To change/set a default value for the whole test suite, prior to calling add_qml_test, set:
13−# qmltest_DEFAULT_NO_ADD_TEST (default: FALSE)
14−# qmltest_DEFAULT_TARGETS
15−# qmltest_DEFAULT_IMPORT_PATHS
16−# qmltest_DEFAULT_PROPERTIES
62+# Install file called ${component_name} (or ${component_name}.qml) under
63+# ${path}.
1764
18−find_program(qmltestrunner_exe qmltestrunner)
65+function(add_qml_test_data PATH COMPONENT_NAME)
66+ cmake_parse_arguments(TEST "" "DESTINATION" "" ${ARGN})
1967
20−if(NOT qmltestrunner_exe)
21− msg(FATAL_ERROR "Could not locate qmltestrunner.")
22−endif()
68+ set(filename "${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/${COMPONENT_NAME}")
2369
24−macro(add_qml_test SUBPATH COMPONENT_NAME)
25− set(options NO_ADD_TEST NO_TARGETS)
26− set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
70+ if (IS_DIRECTORY "${filename}")
71+ # As a convenience, allow specifying a directory and we will install
72+ # all files in the dir. We do it this way rather than passing
73+ # DIRECTORY to install() because we want to process any qml files.
74+ file(GLOB subfiles RELATIVE "${filename}" "${filename}/*")
75+ foreach(subfile ${subfiles})
76+ add_qml_test_data("${PATH}/${COMPONENT_NAME}" "${subfile}")
77+ endforeach()
78+ return()
79+ endif()
2780
28− cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
81+ if (NOT EXISTS "${filename}")
82+ set(filename "${filename}.qml")
83+ set(COMPONENT_NAME "${COMPONENT_NAME}.qml")
84+ endif()
2985
30− set(qmltest_TARGET test${COMPONENT_NAME})
31− set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME})
86+ if ("${filename}" MATCHES "\\.qml$")
87+ file(READ "${filename}" contents)
88+ string(REGEX REPLACE "(\"[./]*)/qml(/|\")" "\\1\\2" contents "${contents}")
89+ # this is for (at least) cardcreatortest which pulls in an architecture-specific
90+ # import into the plugins directory (which is a 'qml' once installed).
91+ string(REGEX REPLACE "(import \"[./]*)/plugins(/|\")" "\\1/qml\\2" contents "${contents}")
92+ set(filename "${CMAKE_CURRENT_BINARY_DIR}/${PATH}/${COMPONENT_NAME}")
93+ file(WRITE "${filename}" "${contents}")
94+ endif()
3295
33− set(qmltestrunner_imports "")
34− if(NOT "${qmltest_IMPORT_PATHS}" STREQUAL "")
35− foreach(IMPORT_PATH ${qmltest_IMPORT_PATHS})
36− list(APPEND qmltestrunner_imports "-import")
37− list(APPEND qmltestrunner_imports ${IMPORT_PATH})
38− endforeach(IMPORT_PATH)
39− elseif(NOT "${qmltest_DEFAULT_IMPORT_PATHS}" STREQUAL "")
40− foreach(IMPORT_PATH ${qmltest_DEFAULT_IMPORT_PATHS})
41− list(APPEND qmltestrunner_imports "-import")
42− list(APPEND qmltestrunner_imports ${IMPORT_PATH})
43− endforeach(IMPORT_PATH)
96+ if (TEST_DESTINATION)
97+ set(DESTINATION "${TEST_DESTINATION}")
98+ else()
99+ file(RELATIVE_PATH relcurpath "${CMAKE_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")
100+ set(DESTINATION "${SHELL_APP_DIR}/${relcurpath}/${PATH}")
44101 endif()
45102
103+ install(FILES "${filename}" DESTINATION "${DESTINATION}")
104+endfunction()
105+
106+
107+# add_qml_unittest(path component_name
108+# [...]
109+# )
110+#
111+# Add test targets for ${component_name} under ${path}. It's assumed
112+# that the test file is named ${path}/tst_${component_name}.qml.
113+#
114+# This function wraps add_executable_test, see below for available arguments.
115+
116+function(add_qml_unittest PATH COMPONENT_NAME)
117+ import_executables(qmltestrunner)
118+
119+ add_executable_test(${COMPONENT_NAME} qmltestrunner
120+ ${ARGN}
121+ ARGS -input ${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml ${QMLTEST_ARGS}
122+ )
123+
124+ if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml")
125+ add_qml_test_data("${PATH}" "tst_${COMPONENT_NAME}.qml")
126+ endif()
127+endfunction()
128+
129+
130+# add_manual_qml_test(path component_name
131+# [...]
132+# )
133+#
134+# Add manual test targets for ${component_name} under ${path}. It's assumed
135+# that the test file is named ${path}/tst_${component_name}.qml.
136+#
137+# This function wraps add_manual_test, see below for available arguments.
138+
139+function(add_manual_qml_test PATH COMPONENT_NAME)
140+ import_executables(qmlscene)
141+ cmake_parse_arguments(QMLTEST "${QMLTEST_OPTIONS}" "${QMLTEST_SINGLE}" "${QMLTEST_MULTI}" ${ARGN})
142+
143+ add_manual_test(${COMPONENT_NAME} qmlscene
144+ ${ARGN}
145+ ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml ${QMLTEST_ARGS}
146+ )
147+
148+ if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml")
149+ add_qml_test_data("${PATH}" "tst_${COMPONENT_NAME}.qml")
150+ endif()
151+endfunction()
152+
153+
154+# add_executable_test(target component_name
155+# [...] # see doc for add_manual_qml_test for common arguments
156+# [ADD_TEST] # whether to add to the "test" target
157+# [ARG_PREFIX arg_prefix] # prefix logging arguments with this string
158+# [ARGS] arg1 [arg2 [...]] # pass these arguments to the test executable
159+# [TARGETS target1 [target2 [...]]] # make the listed targets depend on this test
160+# # if a corresponding xvfbtarget1, xvfbtarget2 etc. exists,
161+# # this test running under xvfb will be added as a dependency
162+# # of those targets
163+# [ITERATIONS count] # run this test as a benchmark for ${count} iterations
164+# )
165+#
166+# Logging options in the standard form of "-o filename,format"
167+# will be appended to the arguments list, prefixed with ARG_PREFIX.
168+# XUnitXML files will be stored in current binary dir.
169+#
170+# Three targets will be created:
171+# - test${component_name} - Runs the test
172+# - xvfbtest${component_name} - Runs the test under xvfb
173+# - gdbtest${component_name} - Runs the test under gdb
174+
175+function(add_executable_test COMPONENT_NAME TARGET)
176+ import_executables(gdb xvfb-run OPTIONAL)
177+
178+ cmake_parse_arguments(QMLTEST "${QMLTEST_OPTIONS}" "${QMLTEST_SINGLE}" "${QMLTEST_MULTI}" ${ARGN})
179+ mangle_arguments()
180+
181+ file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
182+ set(file_logger -o ${CMAKE_CURRENT_BINARY_DIR}/test${COMPONENT_NAME}.xml,xunitxml)
183+
184+ bake_arguments("${QMLTEST_ARG_PREFIX}" args ${iterations} ${file_logger} ${STDOUT_LOGGER})
185+
46186 set(qmltest_command
47− env ${qmltest_ENVIRONMENT}
48− ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
49− ${qmltestrunner_imports}
50− -o ${CMAKE_BINARY_DIR}/${qmltest_TARGET}.xml,xunitxml
51− -o -,txt
187+ $<TARGET_FILE:${TARGET}>
188+ ${QMLTEST_ARGS}
189+ ${args}
190+ )
191+
192+ add_qmltest_target(test${COMPONENT_NAME} ${TARGET}
193+ COMMAND ${qmltest_command}
194+ ${depends}
195+ ENVIRONMENT QML2_IMPORT_PATH=${imports} ${QMLTEST_ENVIRONMENT}
196+ ${add_test}
197+ ${targets}
198+ )
199+
200+ if(TARGET xvfb-run)
201+ add_qmltest_target(xvfbtest${COMPONENT_NAME} ${TARGET}
202+ COMMAND $<TARGET_FILE:xvfb-run> --server-args "-screen 0 1024x768x24" --auto-servernum ${qmltest_command}
203+ ${depends}
204+ ENVIRONMENT QT_QPA_PLATFORM=xcb QML2_IMPORT_PATH=${imports} LD_PRELOAD=/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/mesa/libGL.so.1 ${QMLTEST_ENVIRONMENT}
205+ TARGETS ${xvfb_targets}
206+ )
207+ endif()
208+
209+ if(TARGET gdb)
210+ add_qmltest_target(gdbtest${COMPONENT_NAME} ${TARGET}
211+ COMMAND $<TARGET_FILE:gdb> -ex run -args ${qmltest_command}
212+ ${depends}
213+ ENVIRONMENT QML2_IMPORT_PATH=${imports} ${QMLTEST_ENVIRONMENT}
214+ )
215+ endif()
216+endfunction()
217+
218+
219+# add_manual_test(target component_name
220+# [DEPENDS target1 [target2 [...]]] # make this test depend on the specified targets
221+# [IMPORT_PATHS import_path1 [import_path2 [...]] # use these QML import paths
222+# # (they're searched first to last)
223+# [ENVIRONMENT var1=value1 [var2=value2 [...]]] # set these environment variables
224+# )
225+#
226+# Two targets will be created:
227+# - try${component_name} - Runs the test for manual interaction
228+# - gdbtry${component_name} - Runs the test under gdb
229+
230+function(add_manual_test COMPONENT_NAME TARGET)
231+ import_executables(gdb OPTIONAL)
232+
233+ cmake_parse_arguments(QMLTEST "${QMLTEST_OPTIONS}" "${QMLTEST_SINGLE}" "${QMLTEST_MULTI}" ${ARGN})
234+ mangle_arguments()
235+
236+ bake_arguments("${QMLTEST_ARG_PREFIX}" args -qmljsdebugger=port:3768,3800)
237+
238+ set(qmltry_command
239+ $<TARGET_FILE:${TARGET}>
240+ ${QMLTEST_ARGS}
241+ ${args}
52242 )
53243
54− add_custom_target(${qmltest_TARGET} ${qmltest_command})
244+ add_qmltest_target(try${COMPONENT_NAME} ${TARGET}
245+ COMMAND ${qmltry_command}
246+ ${depends}
247+ ENVIRONMENT QML2_IMPORT_PATH=${imports} ${QMLTEST_ENVIRONMENT}
248+ )
249+
250+ if(TARGET gdb)
251+ add_qmltest_target(gdbtry${COMPONENT_NAME} ${TARGET}
252+ COMMAND $<TARGET_FILE:gdb> -ex run -args ${qmltry_command}
253+ ${depends}
254+ ENVIRONMENT QML2_IMPORT_PATH=${imports} ${QMLTEST_ENVIRONMENT}
255+ )
256+ endif()
257+endfunction()
258+
259+
260+# add_meta_test(target)
261+#
262+# Adds a test target that will run one of our "meta" test targets, like
263+# xvfbuitests. This script will run the specified suite of tests on an
264+# installed system.
265+
266+function(add_meta_test TARGET_NAME)
267+ cmake_parse_arguments(TEST "SERIAL" "" "DEPENDS" ${ARGN})
268+
269+ add_custom_target(${TARGET_NAME})
55270
56− if(NOT "${qmltest_PROPERTIES}" STREQUAL "")
57− set_target_properties(${qmltest_TARGET} PROPERTIES ${qmltest_PROPERTIES})
58− elseif(NOT "${qmltest_DEFAULT_PROPERTIES}" STREQUAL "")
59− set_target_properties(${qmltest_TARGET} PROPERTIES ${qmltest_DEFAULT_PROPERTIES})
271+ set(filename "${CMAKE_BINARY_DIR}/tests/scripts/${TARGET_NAME}.sh")
272+ if(TEST_SERIAL)
273+ file(WRITE "${filename}" "#!/bin/sh\n\n")
274+ else()
275+ file(WRITE "${filename}" "#!/usr/bin/parallel --shebang --no-notice\n\n")
60276 endif()
61277
62− if("${qmltest_NO_ADD_TEST}" STREQUAL FALSE AND NOT "${qmltest_DEFAULT_NO_ADD_TEST}" STREQUAL "TRUE")
63− add_test(${qmltest_TARGET} ${qmltest_command})
278+ add_meta_dependencies(${TARGET_NAME} DEPENDS ${TEST_DEPENDS})
279+ # else we will write the rest of the script as we add cmake targets
280+
281+ install(FILES "${filename}"
282+ PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE
283+ GROUP_EXECUTE GROUP_READ
284+ WORLD_EXECUTE WORLD_READ
285+ DESTINATION "${SHELL_PRIVATE_LIBDIR}/tests/scripts"
286+ )
287+endfunction()
288+
289+
290+################### INTERNAL ####################
291+
292+function(install_test_script TARGET_NAME)
293+ cmake_parse_arguments(TEST "" "" "COMMAND;ENVIRONMENT" ${ARGN})
294+
295+ # Now write the above test into a shell script that we can run on an
296+ # installed system.
297+ set(script "#!/bin/sh\n\nset -x\n\n")
298+ foreach(ONE_ENV ${TEST_ENVIRONMENT})
299+ set(script "${script}export ${ONE_ENV}\n")
300+ endforeach()
301+ set(script "${script}export UNITY_TESTING_DATADIR=\"${CMAKE_INSTALL_PREFIX}/${SHELL_APP_DIR}\"\n")
302+ set(script "${script}export UNITY_TESTING_LIBDIR=\"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}\"\n")
303+ set(script "${script}\n")
304+ set(script "${script}XML_ARGS=\n")
305+ set(script "${script}if [ -n \"\$ARTIFACTS_DIR\" ]; then\n")
306+ set(script "${script} XML_ARGS=\"@XML_ARGS@\"\n")
307+ set(script "${script} mkdir -p \"@XML_DIR@\"\n")
308+ set(script "${script} touch \"@XML_FILE@\"\n")
309+ set(script "${script}fi\n")
310+ set(script "${script}\n")
311+ foreach(ONE_CMD ${TEST_COMMAND})
312+ set(script "${script}'${ONE_CMD}' ")
313+ endforeach()
314+ set(script "${script}\"\$@\"") # Allow passing arguments if desired
315+
316+ set(filename "${CMAKE_BINARY_DIR}/tests/scripts/${TARGET_NAME}.sh")
64317
65− if(NOT "${qmltest_UNPARSED_ARGUMENTS}" STREQUAL "")
66− set_tests_properties(${qmltest_TARGET} PROPERTIES ${qmltest_PROPERTIES})
67− elseif(NOT "${qmltest_DEFAULT_PROPERTIES}" STREQUAL "")
68− set_tests_properties(${qmltest_TARGET} PROPERTIES ${qmltest_DEFAULT_PROPERTIES})
318+ # Generate script to file then read it back to resolve any generator
319+ # expressions before we try to replace paths.
320+ file(GENERATE
321+ OUTPUT "${filename}"
322+ CONTENT "${script}"
323+ )
324+
325+ # Do replacement at install time to save needless work and to make sure
326+ # we are modifying file after generate step above (which doesn't happen
327+ # immediately). We can't use a custom-defined function or macro here...
328+ # So instead we use a giant ugly code block.
329+
330+ # START OF CODE BLOCK --------------------------------------------------
331+ install(CODE "
332+ file(READ \"${filename}\" replacestr)
333+
334+ # Now some replacements...
335+ # tests like to write xml output to our builddir; we don't need that, but we do want them in ARTIFACTS_DIR
336+ string(REGEX MATCH \"( '--parameter')? '-o'( '--parameter')? '[^']*,xunitxml' \" xmlargs \"\${replacestr}\")
337+ string(REGEX REPLACE \"( '--parameter')? '-o'( '--parameter')? '[^']*,xunitxml' \" \" \\\$XML_ARGS \" replacestr \"\${replacestr}\")
338+ string(REGEX REPLACE \"'[^']*/tests/\" \"'\\\$ARTIFACTS_DIR/tests/\" xmlargs \"\${xmlargs}\")
339+ string(REGEX REPLACE \".*'([^']*),xunitxml'.*\" \"\\\\1\" xmlfile \"\${xmlargs}\")
340+ string(REGEX REPLACE \"(.*)/[^/]*\" \"\\\\1\" xmldir \"\${xmlfile}\")
341+ string(REGEX REPLACE \"'\" \"\" xmlargs \"\${xmlargs}\") # strip single quotes
342+ string(REGEX REPLACE \"@XML_ARGS@\" \"\${xmlargs}\" replacestr \"\${replacestr}\")
343+ string(REGEX REPLACE \"@XML_DIR@\" \"\${xmldir}\" replacestr \"\${replacestr}\")
344+ string(REGEX REPLACE \"@XML_FILE@\" \"\${xmlfile}\" replacestr \"\${replacestr}\")
345+ # replace build/source roots with their install paths
346+ string(REPLACE \"${CMAKE_BINARY_DIR}/libs\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}\" replacestr \"\${replacestr}\")
347+ string(REPLACE \"${CMAKE_BINARY_DIR}/plugins\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_INSTALL_QML}\" replacestr \"\${replacestr}\")
348+ string(REPLACE \"${CMAKE_BINARY_DIR}/tests/libs\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}/tests/libs\" replacestr \"\${replacestr}\")
349+ string(REPLACE \"${CMAKE_BINARY_DIR}/tests/mocks\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_INSTALL_QML}/mocks\" replacestr \"\${replacestr}\")
350+ string(REPLACE \"${CMAKE_BINARY_DIR}/tests/plugins\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}/tests/plugins\" replacestr \"\${replacestr}\")
351+ string(REPLACE \"${CMAKE_BINARY_DIR}/tests/qmltests\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}/tests/qmltests\" replacestr \"\${replacestr}\")
352+ string(REPLACE \"${CMAKE_BINARY_DIR}/tests/uqmlscene\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}\" replacestr \"\${replacestr}\")
353+ string(REPLACE \"${CMAKE_BINARY_DIR}/tests/utils/modules\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_INSTALL_QML}/utils\" replacestr \"\${replacestr}\")
354+ string(REPLACE \"${CMAKE_SOURCE_DIR}/tests/plugins\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_APP_DIR}/tests/plugins\" replacestr \"\${replacestr}\")
355+ string(REPLACE \"${CMAKE_SOURCE_DIR}/tests/qmltests\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_APP_DIR}/tests/qmltests\" replacestr \"\${replacestr}\")
356+
357+ file(WRITE \"${filename}\" \"\${replacestr}\")
358+ ")
359+ # END OF CODE BLOCK --------------------------------------------------
360+
361+ install(FILES "${filename}"
362+ PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE
363+ GROUP_EXECUTE GROUP_READ
364+ WORLD_EXECUTE WORLD_READ
365+ DESTINATION "${SHELL_PRIVATE_LIBDIR}/tests/scripts"
366+ )
367+endfunction()
368+
369+function(add_meta_dependencies UPSTREAM_TARGET)
370+ cmake_parse_arguments(TEST "" "" "DEPENDS" ${ARGN})
371+
372+ foreach(depend ${TEST_DEPENDS})
373+ add_dependencies(${UPSTREAM_TARGET} ${depend})
374+
375+ # add depend to the meta test script that we will install on system
376+ set(filename "${CMAKE_BINARY_DIR}/tests/scripts/${UPSTREAM_TARGET}.sh")
377+ if (EXISTS "${filename}")
378+ file(APPEND "${filename}" "${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}/tests/scripts/${depend}.sh \"\$@\" 2>&1\n")
69379 endif()
70− endif("${qmltest_NO_ADD_TEST}" STREQUAL FALSE AND NOT "${qmltest_DEFAULT_NO_ADD_TEST}" STREQUAL "TRUE")
71−
72− if("${qmltest_NO_TARGETS}" STREQUAL "FALSE")
73− if(NOT "${qmltest_TARGETS}" STREQUAL "")
74− foreach(TARGET ${qmltest_TARGETS})
75− add_dependencies(${TARGET} ${qmltest_TARGET})
76− endforeach(TARGET)
77− elseif(NOT "${qmltest_DEFAULT_TARGETS}" STREQUAL "")
78− foreach(TARGET ${qmltest_DEFAULT_TARGETS})
79− add_dependencies(${TARGET} ${qmltest_TARGET})
80− endforeach(TARGET)
380+ endforeach()
381+endfunction()
382+
383+# add_qmltest_target(target_name target
384+# COMMAND test_exe [arg1 [...]] # execute this test with arguments
385+# [...] # see above for available arguments:
386+# # ADD_TEST, ENVIRONMENT, DEPENDS and TARGETS
387+# )
388+
389+function(add_qmltest_target TARGET_NAME TARGET)
390+ cmake_parse_arguments(QMLTEST "${QMLTEST_OPTIONS}" "${QMLTEST_SINGLE}" "COMMAND;${QMLTEST_MULTI}" ${ARGN})
391+ mangle_arguments()
392+
393+ # Additional arguments
394+ string(TOLOWER "${CMAKE_GENERATOR}" cmake_generator_lower)
395+ if(cmake_generator_lower STREQUAL "unix makefiles")
396+ set(function "$(FUNCTION)")
397+ endif()
398+
399+ add_custom_target(${TARGET_NAME}
400+ env ${QMLTEST_ENVIRONMENT}
401+ ${QMLTEST_COMMAND} ${function}
402+ DEPENDS ${TARGET} ${QMLTEST_DEPENDS}
403+ )
404+
405+ install_test_script(${TARGET_NAME}
406+ ENVIRONMENT ${QMLTEST_ENVIRONMENT}
407+ COMMAND ${QMLTEST_COMMAND}
408+ )
409+
410+ if(QMLTEST_ADD_TEST)
411+ add_test(
412+ NAME ${TARGET_NAME}
413+ COMMAND ${QMLTEST_COMMAND}
414+ )
415+
416+ foreach(ENV ${QMLTEST_ENVIRONMENT})
417+ set_property(TEST ${TARGET_NAME} APPEND PROPERTY ENVIRONMENT ${ENV})
418+ endforeach()
419+
420+ set_property(TEST ${TARGET_NAME} APPEND PROPERTY DEPENDS ${TARGET})
421+ foreach(DEPEND ${DEPENDS})
422+ set_property(TEST ${TARGET_NAME} APPEND PROPERTY DEPENDS ${DEPEND})
423+ endforeach()
424+ endif()
425+
426+ foreach(UPSTREAM_TARGET ${QMLTEST_TARGETS})
427+ add_meta_dependencies(${UPSTREAM_TARGET} DEPENDS ${TARGET_NAME})
428+ endforeach()
429+endfunction()
430+
431+
432+# mangle_arguments(${ARGN})
433+#
434+# Verify there were no unparsed arguments and
435+# mangle the known ones for further processing.
436+
437+macro(mangle_arguments)
438+ if(QMLTEST_UNPARSED_ARGUMENTS)
439+ message(FATAL_ERROR "Unexpected arguments: ${QMLTEST_UNPARSED_ARGUMENTS}")
440+ endif()
441+
442+ if(QMLTEST_ADD_TEST)
443+ set(add_test ADD_TEST)
444+ endif()
445+
446+ if(QMLTEST_IMPORT_PATHS)
447+ string(REPLACE ";" ":" imports "${QMLTEST_IMPORT_PATHS}")
448+ endif()
449+
450+ if(QMLTEST_ITERATIONS)
451+ set(iterations -iterations ${QMLTEST_ITERATIONS})
452+ endif()
453+
454+ if(QMLTEST_DEPENDS)
455+ set(depends DEPENDS ${QMLTEST_DEPENDS})
456+ endif()
457+
458+ if(QMLTEST_TARGETS)
459+ set(targets TARGETS ${QMLTEST_TARGETS})
460+ endif()
461+
462+ set(xvfb_targets "")
463+ foreach(target ${QMLTEST_TARGETS})
464+ if(TARGET xvfb${target})
465+ list(APPEND xvfb_targets xvfb${target})
81466 endif()
82− endif("${qmltest_NO_TARGETS}" STREQUAL "FALSE")
83−endmacro(add_qml_test)
467+ endforeach()
468+ set(xvfb_targets "${xvfb_targets}" PARENT_SCOPE)
469+endmacro()
470+
471+
472+# bake_arguments(prefix output
473+# arg1 [arg2 [...]]
474+# )
475+#
476+# If set, add the argument prefix before every passed
477+# argument and store the result in ${OUTPUT} variable.
478+
479+function(bake_arguments PREFIX OUTPUT)
480+ set(args "${ARGN}")
481+ if(PREFIX)
482+ set(args "")
483+ foreach(arg ${ARGN})
484+ list(APPEND args ${PREFIX})
485+ list(APPEND args ${arg})
486+ endforeach()
487+ endif()
488+ set(${OUTPUT} "${args}" PARENT_SCOPE)
489+endfunction()
cmake/modules/autopilot.cmake+13−4
@@ -1,7 +1,16 @@
11add_custom_target(autopilot)
22
3−function(declare_autopilot_test TEST_NAME WORKING_DIR)
4− add_custom_command(TARGET autopilot
5− COMMAND autopilot run ${TEST_NAME}
6− WORKING_DIRECTORY ${WORKING_DIR})
3+function(declare_autopilot_test TEST_NAME TEST_SUITE WORKING_DIR)
4+ add_custom_target(autopilot-${TEST_NAME}
5+ COMMAND UNITY_TESTING=1 LANG=C QML2_IMPORT_PATH=${SHELL_INSTALL_QML}/mocks python3 -m autopilot.run run ${TEST_SUITE}
6+ WORKING_DIRECTORY ${WORKING_DIR}
7+ DEPENDS fake_install
8+ )
9+
10+ add_custom_target(fake_install
11+ COMMAND cmake --build ${CMAKE_BINARY_DIR} --target install
12+ )
13+
14+ add_dependencies(autopilot autopilot-${TEST_NAME})
15+
716endfunction()
data/51-unity8-greeter.confnew file+2
@@ -0,0 +1,2 @@
1+[Seat:*]
2+greeter-session=unity8-greeter
data/CMakeLists.txtnew file+27
@@ -0,0 +1,27 @@
1+# generate desktop files
2+configure_file(${SHELL_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop @ONLY)
3+configure_file(${INDICATORS_CLIENT_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${INDICATORS_CLIENT_APP}.desktop @ONLY)
4+configure_file(${GREETER_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${GREETER_APP}.desktop @ONLY)
5+
6+# install desktop files
7+install(FILES
8+ ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop
9+ ${CMAKE_CURRENT_BINARY_DIR}/${INDICATORS_CLIENT_APP}.desktop
10+ DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
11+ )
12+
13+install(FILES
14+ ${CMAKE_CURRENT_BINARY_DIR}/${GREETER_APP}.desktop
15+ DESTINATION ${CMAKE_INSTALL_DATADIR}/lightdm/greeters
16+ )
17+
18+install(FILES
19+ 51-unity8-greeter.conf
20+ DESTINATION ${CMAKE_INSTALL_DATADIR}/lightdm/lightdm.conf.d
21+ )
22+
23+add_custom_target(pkgversion ALL COMMAND dpkg-parsechangelog -l${CMAKE_SOURCE_DIR}/debian/changelog --show-field version > ${CMAKE_CURRENT_BINARY_DIR}/version)
24+
25+install(FILES com.canonical.Unity8.gschema.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/glib-2.0/schemas)
26+install(FILES com.canonical.Unity.gschema.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/glib-2.0/schemas)
27+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/version DESTINATION ${CMAKE_INSTALL_LOCALSTATEDIR}/lib/unity8)
data/com.canonical.Unity.gschema.xmlnew file+255
@@ -0,0 +1,255 @@
1+<schemalist>
2+ <enum id="form-factor-enum">
3+ <value nick="Automatic" value="0" />
4+ <value nick="Desktop" value="1" />
5+ <value nick="Netbook" value="2" />
6+ <value nick="TV" value="3" />
7+ </enum>
8+ <enum id="home-expanded-enum">
9+ <value nick="Not Expanded" value="0" />
10+ <value nick="Expanded" value="1" />
11+ </enum>
12+ <enum id="launcher-position-enum">
13+ <value nick="Left" value="0" />
14+ <value nick="Bottom" value="1" />
15+ </enum>
16+ <enum id="desktop-type-enum">
17+ <value nick="Ubuntu" value="0" />
18+ <value nick="UbuntuKylin" value="1" />
19+ </enum>
20+
21+ <schema path="/com/canonical/unity/" id="com.canonical.Unity" gettext-domain="unity">
22+ <key enum="form-factor-enum" name="form-factor">
23+ <default>"Automatic"</default>
24+ <summary>The form factor Unity should target.</summary>
25+ <description>The form factor chosen will affect the size and appearance of the Dash, Launcher and also the Window Management behaviour.</description>
26+ </key>
27+ <key enum="home-expanded-enum" name="home-expanded">
28+ <default>"Expanded"</default>
29+ <summary>Whether the home screen should be expanded.</summary>
30+ <description>Whether the home screen should be expanded.</description>
31+ </key>
32+ <key enum="desktop-type-enum" name="desktop-type">
33+ <default>"Ubuntu"</default>
34+ <summary>The current desktop name.</summary>
35+ <description>The current desktop name.</description>
36+ </key>
37+ <key type="i" name="minimize-count">
38+ <default>0</default>
39+ <summary>Number of times a normal window has been minimized.</summary>
40+ <description>This is used to adjust the animation speed by making it progressively faster the more it is used.</description>
41+ </key>
42+ <key type="i" name="minimize-fast-duration">
43+ <default>300</default>
44+ <summary>The duration for the minimize animation when it is at its fastest setting.</summary>
45+ <description>This is the duration that the minimize animation will have when it has been used more than an number of times equal minimize-speed-threshold.</description>
46+ </key>
47+ <key type="i" name="minimize-slow-duration">
48+ <default>800</default>
49+ <summary>The duration for the minimize animation when it is at its slowest setting.</summary>
50+ <description>This is the duration that the minimize animation will have when it has never been used.</description>
51+ </key>
52+ <key type="i" name="minimize-speed-threshold">
53+ <default>100</default>
54+ <summary>The number of minimizations required to reach maximum speed.</summary>
55+ <description>The speed of the minimize animation will progressively get faster as minimize-count approaches this value.</description>
56+ </key>
57+ <key type="b" name="double-click-activate">
58+ <default>true</default>
59+ <summary>Enable/Disable dash result double-click activation.</summary>
60+ <description>This is used to enable/disable double-click result activation in the dash. Double-click to activate, single click preview</description>
61+ </key>
62+ <key type="b" name="integrated-menus">
63+ <default>false</default>
64+ <summary>Enable/Disable the integrated menus in Unity.</summary>
65+ <description>When this is enabled, the application menus will be shown
66+ on the window decoration, otherwise they will be always shown on the
67+ unity top panel</description>
68+ </key>
69+ <key type="u" name="show-menus-now-delay">
70+ <default>180</default>
71+ <range min="0" max="5000"/>
72+ <summary>Delay (in ms) before showing the menus when pressing Alt</summary>
73+ <description>This allows tune the delay before presenting unity menus
74+ (in non always-show-menus mode).</description>
75+ </key>
76+ <key type="b" name="always-show-menus">
77+ <default>false</default>
78+ <summary>Toggle the menu visibility based on mouse hovering.</summary>
79+ <description>When this is enabled, the application menus will be always
80+ shown (on the window decoration or in the unity panel, depending whether
81+ integrated menus are enabled), otherwise they will be shown only when
82+ the mouse cursor is over the relative mouse area.</description>
83+ </key>
84+ <key type="as" name="whitelist-repeated-keys">
85+ <default>[
86+ 'XF86KbdBrightnessUp',
87+ 'XF86KbdBrightnessDown',
88+ 'XF86MonBrightnessUp',
89+ 'XF86MonBrightnessDown',
90+ 'XF86AudioRaiseVolume',
91+ 'XF86AudioLowerVolume'
92+ ]</default>
93+ <summary>List of keycodes that should be processed even if auto-repated.</summary>
94+ <description>These keycodes are processed even if they are auto-repeated.</description>
95+ </key>
96+ <key type="b" name="pam-check-account-type">
97+ <default>false</default>
98+ <summary>Enable/Disable PAM account checking</summary>
99+ <description>Whether PAM should check the result of account modules
100+ when authenticating. Only do this if you have account
101+ configured properly on your system.</description>
102+ </key>
103+ <key type="b" name="lowgfx">
104+ <default>false</default>
105+ <summary>Enable/Disable Low Graphics Mode</summary>
106+ <description>Whether Unity runs in Low Graphics Mode.</description>
107+ </key>
108+ </schema>
109+ <schema path="/com/canonical/unity/interface/" id="com.canonical.Unity.Interface" gettext-domain="unity">
110+ <key type="d" name="text-scale-factor">
111+ <default>1.0</default>
112+ <range min="0.5" max="3.0"/>
113+ <summary>Font scaling for unity and applications.</summary>
114+ <description>This value defines the global font scaling used by both
115+ unity and applications. It will match the current system font scaling.</description>
116+ </key>
117+ <key type="d" name="cursor-scale-factor">
118+ <default>1.0</default>
119+ <range min="0.5" max="3.0"/>
120+ <summary>Mouse cursor scaling.</summary>
121+ <description>This value defines the global mouse cursor scaling used by both
122+ unity and applications. Changing this value allows to use a custom scaling
123+ for the mouse cursor.</description>
124+ </key>
125+ <key type="s" name="app-scale-factor-monitor">
126+ <default>''</default>
127+ <summary>The name of the monitor that controls the global app scaling factor.</summary>
128+ <description>This value defines the monitor that unity will use (if found) as reference
129+ for scaling all the applications.</description>
130+ </key>
131+ <key type="b" name="app-fallback-to-maximum-scale-factor">
132+ <default>true</default>
133+ <summary>Use the maximum per-monitor scale-factor as application scale factor if no target monitor is found.</summary>
134+ <description>When this is enabled, the applications scale factor will match
135+ the scale factor of the monitor with the greater value, in case the monitor
136+ defined in 'app-scale-factor-monitor' is not provided or available.</description>
137+ </key>
138+ </schema>
139+ <schema path="/com/canonical/unity/launcher/" id="com.canonical.Unity.Launcher" gettext-domain="unity">
140+ <key type="as" name="favorites">
141+ <default>[
142+ 'application://ubiquity.desktop',
143+ 'application://org.gnome.Nautilus.desktop',
144+ 'application://firefox.desktop',
145+ 'application://libreoffice-writer.desktop',
146+ 'application://libreoffice-calc.desktop',
147+ 'application://libreoffice-impress.desktop',
148+ 'application://org.gnome.Software.desktop',
149+ 'application://ubuntu-amazon-default.desktop',
150+ 'application://unity-control-center.desktop',
151+ 'unity://running-apps',
152+ 'unity://expo-icon',
153+ 'unity://devices'
154+ ]</default>
155+ <summary>List of items that should be shown by default in the launcher</summary>
156+ <description>These items can be: application://desktop-id.desktop, device://uiid and unity://special-id (including: unity://running-apps (icons of running applications) unity://devices (icons of attached devices), unity://expo-icon (icon of the workspace switcher) and unity://desktop-icon (the show-desktop icon)); the order of this list determines the launcher item's position.</description>
157+ </key>
158+ <key type="as" name="items">
159+ <default>[
160+ 'application:///dialer-app.desktop',
161+ 'application:///messaging-app.desktop',
162+ 'application:///address-book-app.desktop',
163+ 'application:///ubuntu-system-settings.desktop',
164+ 'appid://openstore.openstore-team/openstore/current-user-version',
165+ 'appid://com.ubuntu.camera/camera/current-user-version',
166+ 'appid://com.ubuntu.gallery/gallery/current-user-version',
167+ 'application:///morph-browser.desktop'
168+ ]</default>
169+ <summary>List of items that should be shown by default in the launcher</summary>
170+ <description>These items can be: application:///desktop-id.desktop or appid://package/app/current-user-version.</description>
171+ </key>
172+ <key type="s" name="favorite-migration">
173+ <default>''</default>
174+ <summary>Version of last migration done</summary>
175+ <description>This is a detection key for the favorite migration script to know whether the needed migration is done or not.</description>
176+ </key>
177+ <key enum="launcher-position-enum" name="launcher-position">
178+ <default>"Left"</default>
179+ <summary>The position of launcher.</summary>
180+ <description>The position of launcher.</description>
181+ </key>
182+ </schema>
183+ <schema path="/com/canonical/unity/devices/" id="com.canonical.Unity.Devices" gettext-domain="unity">
184+ <key type="as" name="blacklist">
185+ <default>[]</default>
186+ <summary>List of device uuid blacklist from the launcher.</summary>
187+ <description>These devices are not shown in the launcher by default.</description>
188+ </key>
189+ </schema>
190+ <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
191+ <key type="as" name="scopes">
192+ <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
193+ <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
194+ <description>The scopes listed in the scope bar will be ordered according to this list.</description>
195+ </key>
196+ <key type="as" name="favorite-scopes">
197+ <default>[ 'scope://clickscope', 'scope://musicaggregator', 'scope://videoaggregator' ]</default>
198+ <summary>List of scope queries specifying what should be displayed in the dash.</summary>
199+ <description>List of favorite scopes displayed in the dash.</description>
200+ </key>
201+ </schema>
202+ <schema path="/com/canonical/unity/decorations/" id="com.canonical.Unity.Decorations" gettext-domain="unity">
203+ <key type="u" name="grab-wait">
204+ <default>175</default>
205+ <range min="0" max="1000"/>
206+ <summary>Milliseconds to wait before considering a mouse pressure a grab</summary>
207+ <description>The number of ms to wait before starting the window movement (and then
208+ showing the proper mouse cursor, and grabbing the window)</description>
209+ </key>
210+ </schema>
211+ <schema path="/com/canonical/unity/integrated-menus/" id="com.canonical.Unity.IntegratedMenus" gettext-domain="unity">
212+ <key type="u" name="click-movement-threshold">
213+ <default>15</default>
214+ <range min="0" max="30"/>
215+ <summary>Number of pixels to ignore on mouse pressure</summary>
216+ <description>This value define how many pixels the user can move the mouse
217+ when holding the mouse button, before we consider his action a movement
218+ (to grab the window).</description>
219+ </key>
220+ <key type="u" name="double-click-wait">
221+ <default>0</default>
222+ <range min="0" max="300"/>
223+ <summary>Milliseconds to wait before activating a menu after mouse release</summary>
224+ <description>The number of ms to wait after a mouse button release event before considering
225+ it a click. When this value is greater than 0, then it's possible to maximize
226+ a window by double-clicking on its menus if the second click happens before the
227+ specified value of ms is elapsed</description>
228+ </key>
229+ <key type="b" name="unfocused-windows-popup">
230+ <default>true</default>
231+ <summary>Whether to pop-up a menu when clicking over unfocused windows entries</summary>
232+ <description>By disabling this setting you can make unity to only focus a window
233+ when clicking over unfocused menu entries</description>
234+ </key>
235+ </schema>
236+ <schema path="/com/canonical/unity/gestures/" id="com.canonical.Unity.Gestures" gettext-domain="unity">
237+ <key type="b" name="launcher-drag">
238+ <default>true</default>
239+ <summary>Multi-touch gesture to reveal the launcher.</summary>
240+ <description>When this is enabled, a 4 finger swipe from left to right will reveal launcher,
241+ provided that the launcher is set to auto-hide.</description>
242+ </key>
243+ <key type="b" name="dash-tap">
244+ <default>true</default>
245+ <summary>Multi-touch gesture to open the dash.</summary>
246+ <description>When this is enabled, a 4 finger tap will open the dash.</description>
247+ </key>
248+ <key type="b" name="windows-drag-pinch">
249+ <default>true</default>
250+ <summary>Multi-touch gestures to manage the windows.</summary>
251+ <description>When this is enabled, 3 finger gestures such as drag, and pinch, will
252+ help manage the windows.</description>
253+ </key>
254+ </schema>
255+</schemalist>
data/com.canonical.Unity8.gschema.xmlnew file+75
@@ -0,0 +1,75 @@
1+<schemalist>
2+ <enum id="usage-mode-enum">
3+ <value nick="Staged" value="0" />
4+ <value nick="Windowed" value="1" />
5+ <value nick="Automatic" value="2" />
6+ </enum>
7+
8+ <schema path="/com/canonical/unity8/" id="com.canonical.Unity8" gettext-domain="unity8">
9+ <key enum="usage-mode-enum" name="usage-mode">
10+ <default>"Automatic"</default>
11+ <summary>The usage mode.</summary>
12+ <description>The usage mode chosen will affect the Window Management behaviour.</description>
13+ </key>
14+ <key type="u" name="edge-barrier-sensitivity">
15+ <default>50</default>
16+ <range min="1" max="100"/>
17+ <summary>Sensitivity of screen edge barriers for the mouse pointer.</summary>
18+ <description>Some UI actions like revealing the launcher or the applications spread are triggered by pushing the mouse pointer against a screen edge. This key defines how much you have to push in order to trigger the associated action.</description>
19+ </key>
20+ <key type="u" name="edge-barrier-min-push">
21+ <default>2</default>
22+ <summary>Minimum push needed to overcome edge barrier</summary>
23+ <description>How much you have to push (in grid units)the mouse against an edge barrier when sensibility is 100.</description>
24+ </key>
25+ <key type="u" name="edge-barrier-max-push">
26+ <default>120</default>
27+ <summary>Maximum push needed to overcome edge barrier</summary>
28+ <description>How much you have to push (in grid units) the mouse against an edge barrier when sensibility is 1.</description>
29+ </key>
30+ <key type="u" name="edge-drag-width">
31+ <default>2</default>
32+ <summary>The width of the edge drag areas</summary>
33+ <description>How big (in grid units) the edge-drag sensitive area should be.</description>
34+ </key>
35+ <key type="b" name="autohide-launcher">
36+ <default>false</default>
37+ <summary>Autohide the launcher</summary>
38+ <description>This will only be applied in windowed mode. In staged mode, the launcher will always hide.</description>
39+ </key>
40+ <key type="u" name="launcher-width">
41+ <default>8</default>
42+ <range min="6" max="12"/>
43+ <summary>Width of the launcher in grid units.</summary>
44+ <description>Changes the width of the launcher in all usage modes.</description>
45+ </key>
46+ <key type="b" name="enable-indicator-menu">
47+ <default>true</default>
48+ <summary>Enable or disable the indicator pull down menus</summary>
49+ <description>Toggle the availability of the indicator pull down menus</description>
50+ </key>
51+ <key type="s" name="appstore-uri">
52+ <default>'appid://openstore.openstore-team/openstore/current-user-version'</default>
53+ <summary>The uri to the app store</summary>
54+ <description>This will be used whenever the user triggers an action to open the app store.</description>
55+ </key>
56+ <key type="b" name="always-show-osk">
57+ <default>false</default>
58+ <summary>Force showing/hiding the OSK</summary>
59+ <description>Toggle the visibility of the On Screen Keyboard unconditionally</description>
60+ </key>
61+ <key type="b" name="osk-switch-visible">
62+ <default>false</default>
63+ <summary>Whether the OSK switch should be visible</summary>
64+ <description>Toggle the visibility of the OSK switch</description>
65+ </key>
66+ </schema>
67+
68+ <schema path="/com/canonical/unity8/greeter/" id="com.canonical.Unity8.Greeter" gettext-domain="unity8">
69+ <key type="x" name="locked-out-time">
70+ <default>0</default>
71+ <summary>When the greeter was last locked.</summary>
72+ <description>If too many unsuccessful login attempts have been made in a row, the greeter locks you out for a while. This unix timestamp indicates when you were locked out, so unity8 knows when to let you back in.</description>
73+ </key>
74+ </schema>
75+</schemalist>
data/devices.confnew file+30
@@ -0,0 +1,30 @@
1+# This file can hold multiple device configs. Devices are separated by sections.
2+#
3+# SupportedOrientations holds a list of all enabled orientations. A standard
4+# phone will usually have Portrait,Landcape,InvertedLandscape in order to
5+# disable upside down usage.
6+#
7+# PrimaryOrientation gives the orientation the device will start up with
8+# when there is no orientations sensor input available (yet) or lock to
9+# when an application specifies to be locked to PrimaryOrientation.
10+#
11+# The other Orientation settings can be used to re-map the orientations.
12+# A device might be used with different orientations than how the screen
13+# is physically mounted on the hardware.
14+#
15+# Category can be phone, tablet, or desktop. This option determines
16+# whether the side stage is shown (tablet) or not (phone). Using
17+# desktop will load the shell in windowed mode. Note that the user
18+# can override/change this by connecting input hardware or change
19+# user settings.
20+#
21+# Any options not listed will default to the values of the example below.
22+
23+# [devicename]
24+# SupportedOrientations=Portrait,InvertedPortrait,Landscape,InvertedLandscape
25+# PrimaryOrientation=PrimaryOrienation
26+# PortraitOrientation=Portrait
27+# InvertedPortraitOrientation=InvertedPortrait
28+# LandscapeOrientation=Landscape
29+# InvertedLandscapeOrientation=InvertedLandscape
30+# Category=phone
data/indicators-client.desktop.innew file+9
@@ -0,0 +1,9 @@
1+[Desktop Entry]
2+Type=Application
3+Name=Indicators Client
4+Comment=Application for testing the Indicators system
5+Exec=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/indicators-client
6+Terminal=false
7+Icon=
8+NoDisplay=false
9+X-Ubuntu-Touch=true
data/test.sensorsnew file+12
@@ -0,0 +1,12 @@
1+create light 0 10 1
2+create accel 0 1000 0.1
3+create proximity
4+
5+200 proximity near
6+500 light 5
7+# simulate crash on the ground
8+500 accel 0.2 0.1 10
9+100 accel 0.2 0.2 1000
10+20 accel 0 0 0
11+10 proximity far
12+10 light 10
data/unity-mock-indicator-service.confnew file+7
@@ -0,0 +1,7 @@
1+description "Unity Shell v8 Mock Indicator"
2+author "Nick Dedekind <nick.dedekind@canonical.com>"
3+
4+respawn
5+respawn limit 2 10
6+
7+exec ${BINARY:-unity-mock-indicator-service} $ARGS
data/unity8-filewatcher.confnew file+13
@@ -0,0 +1,13 @@
1+description "File system watcher for unity8"
2+author "Michael Zanetti <michael.zanetti@canonical.com>"
3+
4+# This method of updating the launcher will not work in our new snappy world,
5+# neither for snaps installed in the system nor if we are running inside a snap.
6+# Plus it hardcodes the phablet user... To be replaced once bug 1630997 is
7+# fixed in ubuntu-app-launch.
8+
9+# Workaround for bug 1360208. ~ and * in one expression doesn't work currently
10+start on (file FILE=/home/phablet/.local/share/applications/*.desktop) or (file FILE=/usr/share/applications/*.desktop)
11+
12+exec dbus-send --type=method_call --dest=com.canonical.Unity.Launcher /com/canonical/Unity/Launcher com.canonical.Unity.Launcher.Refresh
13+
data/unity8-greeter-init.confnew file+12
@@ -0,0 +1,12 @@
1+description "Unity 8 Greeter initialization"
2+author "Michael Terry <mterry@ubuntu.com>"
3+
4+start on unity8-greeter-started
5+task
6+emits indicator-services-start
7+
8+script
9+ start --no-wait ofono-setup || true
10+ initctl emit --no-wait indicator-services-start || true
11+ start --no-wait maliit-server || true
12+end script
data/unity8-greeter-logrotate.confnew file+14
@@ -0,0 +1,14 @@
1+description "Unity 8 Greeter logrotate support"
2+author "Michael Terry <mterry@ubuntu.com>"
3+
4+start on unity8-greeter-started
5+task
6+
7+script
8+ # logrotate normally starts on startup and then sleeps for 60 seconds.
9+ # Otherwise, it skips that sleep. Since we can't emit the startup signal
10+ # for a unity8-greeter session, we have to trigger logrotate manually.
11+ # So we do the sleep ourselves in its stead.
12+ sleep 60
13+ initctl emit :sys:rotate-logs
14+end script
data/unity8-greeter-wrappernew file+109
@@ -0,0 +1,109 @@
1+#!/bin/sh
2+# -*- Mode: sh; indent-tabs-mode: nil; tab-width: 4 -*-
3+#
4+# Copyright (C) 2011,2013,2016 Canonical Ltd
5+#
6+# This program is free software: you can redistribute it and/or modify it under
7+# the terms of the GNU General Public License as published by the Free Software
8+# Foundation, version 3 of the License.
9+#
10+# See http://www.gnu.org/copyleft/gpl.html the full text of the license.
11+
12+# This wrapper merely ensures that init and friends live only as long as this
13+# script does. Otherwise, it's very easy for some processes to not notice that
14+# the session died. We could try to do this in-process, but we want to do this
15+# cleanup even if the greeter aborts.
16+
17+trap cleanup TERM EXIT
18+
19+cleanup()
20+{
21+ trap - TERM EXIT
22+ # Kill upstart and indicators
23+ if [ -n "$INIT_PID" ]; then
24+ kill "$INIT_PID"
25+ fi
26+ if [ -n "$CMD_PID" ]; then
27+ kill "$CMD_PID"
28+ fi
29+ exit 0
30+}
31+
32+set_greeter_var()
33+{
34+ export "$1=$2"
35+ gdbus call --session --dest org.freedesktop.DBus --object-path /org/freedesktop/DBus --method org.freedesktop.DBus.UpdateActivationEnvironment "{'$1': '$2'}"
36+ if [ -n "$INIT_PID" ]; then
37+ initctl set-env --global "$1=$2"
38+ fi
39+}
40+
41+SUB_SOCKET=$XDG_RUNTIME_DIR/mir_socket
42+rm -f $SUB_SOCKET # clear socket in case we were hard shut down
43+
44+echo "DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS}" >"$XDG_RUNTIME_DIR/dbus-session"
45+
46+# If touch session script (which sets up grid units and mir variables) is available, use it
47+TOUCH_WRAPPER=
48+if which ubuntu-touch-session >/dev/null; then
49+ TOUCH_WRAPPER=ubuntu-touch-session
50+fi
51+
52+# Advertise as a unity8 session, so that indicator-network will start.
53+export XDG_SESSION_DESKTOP=unity8
54+export DESKTOP_SESSION=$XDG_SESSION_DESKTOP
55+
56+set_greeter_var QT_IM_MODULE maliitphablet
57+set_greeter_var QT_QPA_PLATFORM ubuntumirclient
58+
59+# We disable ofono using pulse. It causes problems with racing with the user's
60+# pulse. We need to come up with a better long-term fix for this, because we
61+# eventually need the greeter to play ringtones for users that aren't logged in.
62+set_greeter_var PA_DISABLED 1
63+
64+# Normal unity8 sessions are entirely driven by Upstart. But greeters
65+# are special. They need access to the file descriptors that lightdm
66+# creates for them and don't want to start all the services that a normal
67+# session would. So it's inconvenient to live within an upstart session.
68+# But... we still want to use Upstart for some services. So launch here.
69+MIR_SOCKET=$SUB_SOCKET $TOUCH_WRAPPER upstart --user --no-startup-event &
70+INIT_PID=$!
71+while [ ! -e "$XDG_RUNTIME_DIR/upstart/sessions/$INIT_PID.session" ]; do sleep 0.1; done
72+. "$XDG_RUNTIME_DIR/upstart/sessions/$INIT_PID.session"
73+export UPSTART_SESSION
74+
75+# Connect upstart to system, but do first command in a loop to avoid any
76+# race condition between the session file above being written and upstart being
77+# ready to handle requests.
78+while ! initctl notify-dbus-address "$DBUS_SESSION_BUS_ADDRESS"; do sleep 0.1; done
79+initctl start notify-cgmanager
80+
81+# Start any pre-greeter tasks if needed (like wizard)
82+initctl emit unity8-greeter-starting
83+
84+# Define language here for phone if available. When phone user switches their
85+# language, they expect that to affect the greeter too. But the user doesn't
86+# have permission to switch system language, only their own. So we notice if
87+# the phablet user exists and use their language if so. TODO: talk to design
88+# about whether we should switch language on fly as users are selected (this
89+# is very hard to do technically).
90+#
91+# Do this after unity8-greeter-starting, in case a customization upstart job
92+# changes language.
93+if [ "$(id -u phablet 2>/dev/null)" = "32011" ]; then
94+ USER_LANG=$(gdbus call --system --dest org.freedesktop.Accounts --object-path /org/freedesktop/Accounts/User32011 --method org.freedesktop.DBus.Properties.Get org.freedesktop.Accounts.User Language | cut -d\' -f2)
95+ if [ -n "$USER_LANG" ]; then
96+ set_greeter_var LANGUAGE "$USER_LANG"
97+ fi
98+ USER_LOCALE=$(gdbus call --system --dest org.freedesktop.Accounts --object-path /org/freedesktop/Accounts/User32011 --method org.freedesktop.DBus.Properties.Get org.freedesktop.Accounts.User FormatsLocale | cut -d\' -f2)
99+ if [ -n "$USER_LOCALE" ]; then
100+ set_greeter_var LANG "$USER_LOCALE"
101+ set_greeter_var LC_ALL "$USER_LOCALE"
102+ fi
103+fi
104+
105+# And finally actually start the greeter
106+exec env MIR_SERVER_FILE=$SUB_SOCKET $TOUCH_WRAPPER $@ &
107+CMD_PID=$!
108+wait $CMD_PID
109+CMD_PID=
data/unity8-greeter.desktop.innew file+7
@@ -0,0 +1,7 @@
1+[Desktop Entry]
2+Type=Application
3+Name=Unity 8 Greeter
4+Comment=The converged Unity shell's Greeter
5+Exec=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/unity8-greeter-wrapper @CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/unity8 --mode=greeter
6+X-LightDM-Session-Type=mir
7+X-Ubuntu-Touch=true
data/unity8-greeter.pklanew file+44
@@ -0,0 +1,44 @@
1+# DO NOT EDIT THIS FILE, it will be overwritten on update
2+# Place your local configurations under /etc/polkit-1/localauthority/
3+
4+[Disable Controlling of Network Devices]
5+Identity=unix-user:lightdm
6+Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
7+ResultActive=no
8+ResultInactive=no
9+ResultsAny=no
10+
11+[Disable Sleep and Wake]
12+Identity=unix-user:lightdm
13+Action=org.freedesktop.NetworkManager.sleep-wake
14+ResultActive=no
15+ResultInactive=no
16+ResultsAny=no
17+
18+[Disable WiFi Sharing]
19+Identity=unix-user:lightdm
20+Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
21+ResultActive=no
22+ResultInactive=no
23+ResultsAny=no
24+
25+[Disable Settings Modifications]
26+Identity=unix-user:lightdm
27+Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
28+ResultActive=no
29+ResultInactive=no
30+ResultsAny=no
31+
32+[Disable User Connections]
33+Identity=unix-user:lightdm
34+Action=org.freedesktop.NetworkManager.use-user-connections
35+ResultActive=no
36+ResultInactive=no
37+ResultsAny=no
38+
39+[Enable Controlling of Network Connections]
40+Identity=unix-user:lightdm
41+Action=org.freedesktop.NetworkManager.network-control
42+ResultActive=yes
43+ResultInactive=no
44+ResultsAny=no
data/unity8.confnew file+99
@@ -0,0 +1,99 @@
1+description "Unity Shell v8"
2+author "Ricardo Mendoza <ricmm@ubuntu.com>"
3+
4+emits indicator-services-start
5+emits indicator-services-end
6+
7+start on ((xsession SESSION=ubuntu-touch) or (xsession SESSION=unity8-mir) or (xsession SESSION=unity8)) and started dbus
8+stop on desktop-end
9+
10+kill timeout 120
11+
12+#
13+# Ensure the shell always gets unthrottled touch events, so that applications
14+# who want full speed low-latency input can get it (LP: #1497105) and so that
15+# apps can use QML touch compression safely (the QML touch compression
16+# algorithm does not support nesting well - LP: #1486341, LP: #1556763 - so
17+# must be fed by the raw input event stream from Unity8).
18+#
19+env QML_NO_TOUCH_COMPRESSION=1
20+
21+respawn
22+expect stop
23+
24+# FIXME Create an autopilot test that makes sure start+stop and restart
25+# work fine at least 2 times
26+
27+pre-start script
28+ # Tell unity-mir to raise SIGSTOP after we start
29+ initctl set-env UNITY_MIR_EMITS_SIGSTOP=1
30+
31+ # Save original value of MIR_SOCKET so that we can restore it when stopped,
32+ # as we modify the variable for future jobs, including ourself.
33+ initctl set-env UNITY_MIR_SOCKET=$MIR_SOCKET
34+
35+ # Decide where we are going to put our own socket file
36+ if [ -n "$SNAP" ]; then
37+ # In snappy, we want to hard code our path because our apparmor profile
38+ # only lets us put the socket in one place. And consumers expect it
39+ # there.
40+ MIR_SERVER_FILE=/run/user/$(id -u)/mir_socket
41+ else
42+ MIR_SERVER_FILE=$XDG_RUNTIME_DIR/mir_socket
43+ fi
44+ initctl set-env MIR_SERVER_FILE=$MIR_SERVER_FILE
45+
46+ # Point all future jobs in this session to our Mir socket instead of
47+ # unity-system-compositor's socket.
48+ initctl set-env --global MIR_SOCKET=$MIR_SERVER_FILE
49+ gdbus call --session --dest org.freedesktop.DBus --object-path /org/freedesktop/DBus --method org.freedesktop.DBus.UpdateActivationEnvironment "@a{ss} {'MIR_SOCKET': '$MIR_SERVER_FILE'}"
50+
51+ # Remove the normal and trusted sockets if still there
52+ if [ -S "$MIR_SERVER_FILE" ]; then
53+ rm "$MIR_SERVER_FILE"
54+ fi
55+
56+ if [ -S "${MIR_SERVER_FILE}_trusted" ]; then
57+ rm "${MIR_SERVER_FILE}_trusted"
58+ fi
59+
60+ initctl set-env --global MIR_SERVER_PROMPT_FILE=1
61+
62+ # Disable Qt's stuttering 'touch compression' to fix scrolling smoothness
63+ # issues (LP: #1486341, LP: #1556763). As a bonus, this eliminates most of
64+ # the lag seen in the indicator panel pull-down (LP: #1488327) and also
65+ # reduces lag seen in apps:
66+ initctl set-env --global QML_NO_TOUCH_COMPRESSION=1
67+
68+ # Workaround for text not rendering correctly
69+ initctl set-env --global QT_ENABLE_GLYPH_CACHE_WORKAROUND=1
70+
71+ if [ "$XDG_SESSION_DESKTOP" = "ubuntu-touch" ]; then
72+ # On Ubuntu Touch, we currently use a trick where we auto-login the
73+ # user without a LightDM greeter at all. In this case, we want to
74+ # start with the lockscreen visible. Once we switch to using a
75+ # proper greeter for the first login, we can remove this code path.
76+ initctl set-env MODE=full-greeter
77+ else
78+ initctl set-env MODE=full-shell
79+ fi
80+
81+ # HACK! WORKAROUND FOR HALIUM MISSING UBUNTU_PLATFORM_API
82+ if [ ! -f /system/lib/libubuntu_application_api.so ]; then
83+ initctl set-env --global UBUNTU_PLATFORM_API_BACKEND=test.so.3
84+ initctl set-env --global UBUNTU_PLATFORM_API_SENSOR_TEST=/etc/ubuntusensors/test.sensors
85+ fi
86+end script
87+
88+exec ${BINARY:-unity8} --mode=$MODE $ARGS
89+
90+post-start script
91+ initctl emit --no-wait indicator-services-start
92+end script
93+
94+post-stop script
95+ initctl set-env --global MIR_SOCKET=$UNITY_MIR_SOCKET
96+ initctl unset-env --global MIR_SERVER_PROMPT_FILE
97+ initctl emit application-end
98+ initctl emit indicator-services-end
99+end script
unity8.desktop.in → data/unity8.desktop.inrenamed+1−2
@@ -1,10 +1,9 @@
11[Desktop Entry]
22Type=Application
33Name=Unity 8
4−GenericName=unity8
54Comment=The converged Unity shell
65Exec=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/unity8
76Terminal=false
8−Icon=unity8
7+Icon=
98NoDisplay=true
109X-Ubuntu-Touch=true
debian/bileto_pre_release_hooknew file+5
@@ -0,0 +1,5 @@
1+#!/bin/sh
2+
3+set -eux
4+
5+sh ./po/update-unity-pot
debian/changelog+7404−15

This diff is too big to show here.

debian/control+258−91

This diff is too big to show here.

debian/copyright+34−3

This diff is too big to show here.

debian/indicators-client.install+1

This diff is too big to show here.

debian/rules+45−3

This diff is too big to show here.

debian/shlibs.localnew file+1

This diff is too big to show here.

debian/source/formatdeleted−1

This diff is too big to show here.

debian/tests/autopilot.shnew file+13

This diff is too big to show here.

debian/tests/controlnew file+11

This diff is too big to show here.

debian/tests/qmluitests.shnew file+11

This diff is too big to show here.

debian/unity8-autopilot.install+2−1

This diff is too big to show here.

debian/unity8-common.installnew file+5

This diff is too big to show here.

debian/unity8-common.udevnew file+2

This diff is too big to show here.

debian/unity8-doc.installnew file+2

This diff is too big to show here.

debian/unity8-fake-env.installdeleted−1

This diff is too big to show here.

debian/unity8-greeter.installnew file+5

This diff is too big to show here.

debian/unity8-private.installnew file+18

This diff is too big to show here.

debian/unity8-schemas.installnew file+1

This diff is too big to show here.

debian/unity8-tests.installnew file+9

This diff is too big to show here.

debian/unity8-tests.lintian-overridesnew file+1

This diff is too big to show here.

debian/unity8.install+19−22

This diff is too big to show here.

debian/unity8.maintscriptnew file+1

This diff is too big to show here.

doc/CMakeLists.txtnew file+40

This diff is too big to show here.

doc/Doxyfile.innew file+2317

This diff is too big to show here.

doc/devices.confnew file+45

This diff is too big to show here.

graphics/12_10_background_wide@12.pngdeleted

Binary file not shown.

graphics/applicationIcons/angrybirds@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/browser@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/calendar@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/camera@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/dash@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/evernote@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/facebook@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/gallery@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/gmail@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/map@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/media-player@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/music@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/notepad@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/phone-app@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/pinterest@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/ski_safari@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/skype@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/soundcloud@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/twitter@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/weather@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/wikipedia@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/youtube@18.pngdeleted

Binary file not shown.

graphics/avatars/amanda@12.pngdeleted

Binary file not shown.

graphics/avatars/anna_olsson@12.pngdeleted

Binary file not shown.

graphics/avatars/funky@12.pngdeleted

Binary file not shown.

graphics/phone_background.jpgdeleted

Binary file not shown.

graphics/tablet_background.jpgdeleted

Binary file not shown.

include/CMakeLists.txtnew file+1

This diff is too big to show here.

include/paths.h.innew file+175

This diff is too big to show here.

main.cppdeleted−149

This diff is too big to show here.

modules/Unity/CMakeLists.txtdeleted−1

This diff is too big to show here.

modules/Unity/Indicators/CMakeLists.txtdeleted−54

This diff is too big to show here.

modules/Unity/Indicators/Network/CMakeLists.txtdeleted−37

This diff is too big to show here.

modules/Unity/Indicators/Network/networkagent.cppdeleted−146

This diff is too big to show here.

modules/Unity/Indicators/Network/networkagent.hdeleted−65

This diff is too big to show here.

modules/Unity/Indicators/Network/secret-agent.cdeleted−382

This diff is too big to show here.

modules/Unity/Indicators/Network/secret-agent.hdeleted−102

This diff is too big to show here.

modules/Unity/Indicators/flatmenuproxymodel.cppdeleted−332

This diff is too big to show here.

modules/Unity/Indicators/flatmenuproxymodel.hdeleted−97

This diff is too big to show here.

modules/Unity/Indicators/indicatorsmodel.cppdeleted−326

This diff is too big to show here.

modules/Unity/Indicators/plugin.cppdeleted−41

This diff is too big to show here.

modules/Unity/Indicators/qml/BasicMenu.qmldeleted−51

This diff is too big to show here.

modules/Unity/Indicators/qml/ButtonMenu.qmldeleted−44

This diff is too big to show here.

modules/Unity/Indicators/qml/CMakeLists.txtdeleted−24

This diff is too big to show here.

modules/Unity/Indicators/qml/DBusActionState.qmldeleted−104

This diff is too big to show here.

modules/Unity/Indicators/qml/IndicatorBase.qmldeleted−60

This diff is too big to show here.

modules/Unity/Indicators/qml/IndicatorPage.qmldeleted−191

This diff is too big to show here.

modules/Unity/Indicators/qml/IndicatorWidget.qmldeleted−77

This diff is too big to show here.

modules/Unity/Indicators/qml/Menu.qmldeleted−44

This diff is too big to show here.

modules/Unity/Indicators/qml/MenuFactory.qmldeleted−106

This diff is too big to show here.

modules/Unity/Indicators/qml/ProgressMenu.qmldeleted−62

This diff is too big to show here.

modules/Unity/Indicators/qml/RemoveBackground.qmldeleted−59

This diff is too big to show here.

modules/Unity/Indicators/qml/SectionMenu.qmldeleted−58

This diff is too big to show here.

modules/Unity/Indicators/qml/SliderMenu.qmldeleted−66

This diff is too big to show here.

modules/Unity/Indicators/qml/TextMenu.qmldeleted−81

This diff is too big to show here.

modules/Unity/Indicators/qml/messaging/ActionTextField.qmldeleted−60

This diff is too big to show here.

modules/Unity/Indicators/qml/messaging/CMakeLists.txtdeleted−22

This diff is too big to show here.

modules/Unity/Indicators/qml/messaging/GroupedMessage.qmldeleted−90

This diff is too big to show here.

modules/Unity/Indicators/qml/messaging/HeroMessage.qmldeleted−115

This diff is too big to show here.

modules/Unity/Indicators/qml/messaging/HeroMessageHeader.qmldeleted−147

This diff is too big to show here.

modules/Unity/Indicators/qml/messaging/MessageItem.qmldeleted−92

This diff is too big to show here.

modules/Unity/Indicators/qml/messaging/QuickReply.qmldeleted−152

This diff is too big to show here.

modules/Unity/Indicators/qml/messaging/SimpleTextMessage.qmldeleted−91

This diff is too big to show here.

modules/Unity/Indicators/qml/messaging/SnapDecision.qmldeleted−135

This diff is too big to show here.

modules/Unity/Indicators/qml/messaging/qmldirdeleted−13

This diff is too big to show here.

modules/Unity/Indicators/qml/messaging/utils.jsdeleted−27

This diff is too big to show here.

modules/Unity/Indicators/qml/network/AccessPoint.qmldeleted−69

This diff is too big to show here.

modules/Unity/Indicators/qml/network/CMakeLists.txtdeleted−21

This diff is too big to show here.

modules/Unity/Indicators/qml/network/PasswordPage.qmldeleted−80

This diff is too big to show here.

modules/Unity/Indicators/qml/network/qmldirdeleted−7

This diff is too big to show here.

modules/Unity/Indicators/qml/qmldirdeleted−21

This diff is too big to show here.

modules/Unity/Indicators/resources/artwork/messaging/default_app.svgdeleted−42

This diff is too big to show here.

modules/Unity/Indicators/resources/artwork/messaging/default_contact.pngdeleted

Binary file not shown.

modules/Unity/Indicators/resources/artwork/messaging/message_sms01_54px.pngdeleted

Binary file not shown.

modules/Unity/Indicators/resources/indicators.qrcdeleted−7

This diff is too big to show here.

paths.h.indeleted−82

This diff is too big to show here.

plugins/AccountsService/AccountsService.cppnew file+443

This diff is too big to show here.

plugins/AccountsService/AccountsService.hnew file+156

This diff is too big to show here.

plugins/AccountsService/AccountsServiceDBusAdaptor.cppnew file+152

This diff is too big to show here.

plugins/AccountsService/AccountsServiceDBusAdaptor.hnew file+58

This diff is too big to show here.

plugins/AccountsService/CMakeLists.txtnew file+28

This diff is too big to show here.

plugins/AccountsService/com.canonical.unity.AccountsService.xmlnew file+61

This diff is too big to show here.

plugins/AccountsService/plugin.cppnew file+38

This diff is too big to show here.

plugins/AccountsService/plugin.hnew file+34

This diff is too big to show here.

plugins/AccountsService/qmldirnew file+3

This diff is too big to show here.

plugins/CMakeLists.txt+26−3

This diff is too big to show here.

plugins/Cursor/3rd_party/CMakeLists.txtnew file+1

This diff is too big to show here.

plugins/Cursor/3rd_party/xcursor/CMakeLists.txtnew file+15

This diff is too big to show here.

plugins/Cursor/3rd_party/xcursor/xcursor.cnew file+968

This diff is too big to show here.

plugins/Cursor/3rd_party/xcursor/xcursor.hnew file+65

This diff is too big to show here.

plugins/Cursor/CMakeLists.txtnew file+32

This diff is too big to show here.

plugins/Cursor/Cursor.qmlnew file+62

This diff is too big to show here.

plugins/Cursor/CursorImageInfo.cppnew file+115

This diff is too big to show here.

plugins/Cursor/CursorImageInfo.hnew file+82

This diff is too big to show here.

plugins/Cursor/CursorImageProvider.cppnew file+337

This diff is too big to show here.

plugins/Cursor/CursorImageProvider.hnew file+103

This diff is too big to show here.

plugins/Cursor/MousePointer.cppnew file+235

This diff is too big to show here.

plugins/Cursor/MousePointer.hnew file+92

This diff is too big to show here.

plugins/Cursor/plugin.cppnew file+41

This diff is too big to show here.

plugins/Cursor/plugin.hnew file+33

This diff is too big to show here.

plugins/Cursor/qmldirnew file+3

This diff is too big to show here.

plugins/GlobalShortcut/CMakeLists.txtnew file+10

This diff is too big to show here.

plugins/GlobalShortcut/globalshortcut.cppnew file+91

This diff is too big to show here.

plugins/GlobalShortcut/globalshortcut.hnew file+81

This diff is too big to show here.

plugins/GlobalShortcut/globalshortcutregistry.cppnew file+125

This diff is too big to show here.

plugins/GlobalShortcut/globalshortcutregistry.hnew file+70

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/plugin.cpp → plugins/GlobalShortcut/plugin.cpprenamed+7−10

This diff is too big to show here.

plugins/GlobalShortcut/plugin.hnew file+32

This diff is too big to show here.

plugins/GlobalShortcut/qmldirnew file+2

This diff is too big to show here.

plugins/Greeter/CMakeLists.txtnew file+6

This diff is too big to show here.

plugins/Greeter/Unity/CMakeLists.txtnew file+1

This diff is too big to show here.

plugins/Greeter/Unity/Launcher/CMakeLists.txtnew file+35

This diff is too big to show here.

plugins/Greeter/Unity/Launcher/launcheritem.cppnew file+218

This diff is too big to show here.

plugins/Greeter/Unity/Launcher/launcheritem.hnew file+84

This diff is too big to show here.

plugins/Greeter/Unity/Launcher/launchermodelas.cppnew file+303

This diff is too big to show here.

plugins/Greeter/Unity/Launcher/launchermodelas.hnew file+77

This diff is too big to show here.

plugins/Greeter/Unity/Launcher/plugin.cppnew file+46

This diff is too big to show here.

modules/Unity/Indicators/plugin.h → plugins/Greeter/Unity/Launcher/plugin.hrenamed+8−8

This diff is too big to show here.

plugins/Greeter/Unity/Launcher/qmldirnew file+3

This diff is too big to show here.

plugins/Greeter/Unity/Launcher/quicklistentry.cppnew file+56

This diff is too big to show here.

plugins/Greeter/Unity/Launcher/quicklistentry.hnew file+43

This diff is too big to show here.

plugins/Greeter/Unity/Launcher/quicklistmodel.cppnew file+72

This diff is too big to show here.

plugins/Greeter/Unity/Launcher/quicklistmodel.hnew file+55

This diff is too big to show here.

plugins/HudClient/CMakeLists.txtdeleted−49

This diff is too big to show here.

plugins/HudClient/hudclient.cppdeleted−309

This diff is too big to show here.

plugins/HudClient/hudclient.hdeleted−71

This diff is too big to show here.

plugins/HudClient/hudtoolbarmodel.cppdeleted−98

This diff is too big to show here.

plugins/HudClient/hudtoolbarmodel.hdeleted−44

This diff is too big to show here.

plugins/HudClient/qmldirdeleted−1

This diff is too big to show here.

plugins/HudClient/volumepeakdetector.cppdeleted−223

This diff is too big to show here.

plugins/HudClient/volumepeakdetector.hdeleted−78

This diff is too big to show here.

plugins/LightDM/CMakeLists.txt+14−31

This diff is too big to show here.

plugins/LightDM/DBusGreeter.cppnew file+50

This diff is too big to show here.

plugins/LightDM/DBusGreeter.hnew file+52

This diff is too big to show here.

plugins/LightDM/DBusGreeterList.cppnew file+56

This diff is too big to show here.

plugins/LightDM/DBusGreeterList.hnew file+57

This diff is too big to show here.

plugins/LightDM/FullLightDM/CMakeLists.txtnew file+32

This diff is too big to show here.

plugins/LightDM/FullLightDM/qmldirnew file+3

This diff is too big to show here.

plugins/LightDM/Greeter.cpp+185−39

This diff is too big to show here.

plugins/LightDM/Greeter.h+37−15

This diff is too big to show here.

plugins/LightDM/GreeterPrivate.hnew file+45

This diff is too big to show here.

plugins/LightDM/IntegratedLightDM/CMakeLists.txtnew file+33

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget1.qml → plugins/LightDM/IntegratedLightDM/QLightDM/Greeterrenamed+2−8

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget3.qml → plugins/LightDM/IntegratedLightDM/QLightDM/SessionsModelrenamed+2−8

This diff is too big to show here.

plugins/LightDM/IntegratedLightDM/QLightDM/UsersModelnew file+17

This diff is too big to show here.

plugins/LightDM/IntegratedLightDM/liblightdm/CMakeLists.txtnew file+54

This diff is too big to show here.

tests/mocks/LightDM/Greeter.cpp → plugins/LightDM/IntegratedLightDM/liblightdm/Greeter.cpprenamed+29−14

This diff is too big to show here.

tests/mocks/LightDM/Greeter.h → plugins/LightDM/IntegratedLightDM/liblightdm/Greeter.hrenamed+9−6

This diff is too big to show here.

plugins/LightDM/IntegratedLightDM/liblightdm/GreeterPrivate.cppnew file+309

This diff is too big to show here.

tests/mocks/LightDM/GreeterPrivate.h → plugins/LightDM/IntegratedLightDM/liblightdm/GreeterPrivate.hrenamed+4−2

This diff is too big to show here.

plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModel.cppnew file+87

This diff is too big to show here.

plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModel.hnew file+72

This diff is too big to show here.

plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModelPrivate.cppnew file+36

This diff is too big to show here.

plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModelPrivate.hnew file+54

This diff is too big to show here.

tests/mocks/LightDM/UsersModel.cpp → plugins/LightDM/IntegratedLightDM/liblightdm/UsersModel.cpprenamed+14−21

This diff is too big to show here.

tests/mocks/LightDM/UsersModel.h → plugins/LightDM/IntegratedLightDM/liblightdm/UsersModel.hrenamed+10−6

This diff is too big to show here.

plugins/LightDM/IntegratedLightDM/liblightdm/UsersModelPrivate.cppnew file+94

This diff is too big to show here.

plugins/LightDM/IntegratedLightDM/liblightdm/UsersModelPrivate.hnew file+72

This diff is too big to show here.

plugins/LightDM/IntegratedLightDM/qmldirnew file+3

This diff is too big to show here.

plugins/LightDM/PromptsModel.cppnew file+97

This diff is too big to show here.

plugins/LightDM/PromptsModel.hnew file+70

This diff is too big to show here.

plugins/LightDM/SessionsModel.cppnew file+135

This diff is too big to show here.

plugins/LightDM/SessionsModel.hnew file+66

This diff is too big to show here.

plugins/LightDM/UsersModel.cpp+183−15

This diff is too big to show here.

plugins/LightDM/UsersModel.h+8−10

This diff is too big to show here.

plugins/LightDM/plugin.cpp+52−13

This diff is too big to show here.

plugins/LightDM/plugin.h+4−6

This diff is too big to show here.

plugins/LightDM/qmldir+3−2

This diff is too big to show here.

plugins/Lights/CMakeLists.txtnew file+23

This diff is too big to show here.

plugins/Lights/HfdLights.cppnew file+62

This diff is too big to show here.

plugins/Lights/HfdLights.hnew file+42

This diff is too big to show here.

plugins/Lights/LegacyLights.cppnew file+91

This diff is too big to show here.

plugins/Lights/LegacyLights.hnew file+45

This diff is too big to show here.

plugins/Lights/Lights.cppnew file+101

This diff is too big to show here.

plugins/Lights/Lights.hnew file+71

This diff is too big to show here.

plugins/Lights/android-hardware.hnew file+19

This diff is too big to show here.

plugins/Lights/plugin.cppnew file+54

This diff is too big to show here.

plugins/Unity/plugin.h → plugins/Lights/plugin.hrenamed+6−7

This diff is too big to show here.

plugins/Lights/qmldirnew file+3

This diff is too big to show here.

plugins/Powerd/CMakeLists.txtnew file+17

This diff is too big to show here.

plugins/Powerd/Powerd.cppnew file+90

This diff is too big to show here.

plugins/Powerd/Powerd.hnew file+70

This diff is too big to show here.

plugins/Powerd/plugin.cppnew file+36

This diff is too big to show here.

plugins/Powerd/plugin.hnew file+35

This diff is too big to show here.

plugins/Powerd/qmldirnew file+3

This diff is too big to show here.

plugins/ScreenshotDirectory/CMakeLists.txtnew file+9

This diff is too big to show here.

plugins/ScreenshotDirectory/ScreenGrabber.qmltypesnew file+17

This diff is too big to show here.

plugins/ScreenshotDirectory/ScreenshotDirectory.cppnew file+64

This diff is too big to show here.

plugins/ScreenshotDirectory/ScreenshotDirectory.hnew file+39

This diff is too big to show here.

tests/mocks/LightDM/single/UsersModelPrivate.cpp → plugins/ScreenshotDirectory/plugin.cpprenamed+7−14

This diff is too big to show here.

modules/Unity/Indicators/Network/plugin.h → plugins/ScreenshotDirectory/plugin.hrenamed+7−8

This diff is too big to show here.

plugins/ScreenshotDirectory/qmldirnew file+2

This diff is too big to show here.

plugins/SessionBroadcast/CMakeLists.txtnew file+14

This diff is too big to show here.

plugins/SessionBroadcast/SessionBroadcast.cppnew file+71

This diff is too big to show here.

plugins/SessionBroadcast/SessionBroadcast.hnew file+51

This diff is too big to show here.

plugins/SessionBroadcast/plugin.cppnew file+35

This diff is too big to show here.

plugins/SessionBroadcast/plugin.hnew file+33

This diff is too big to show here.

plugins/SessionBroadcast/qmldirnew file+3

This diff is too big to show here.

plugins/UInput/CMakeLists.txtnew file+7

This diff is too big to show here.

plugins/UInput/plugin.cppnew file+26

This diff is too big to show here.

plugins/UInput/plugin.hnew file+32

This diff is too big to show here.

plugins/UInput/qmldirnew file+3

This diff is too big to show here.

plugins/UInput/uinput.cppnew file+182

This diff is too big to show here.

plugins/UInput/uinput.hnew file+61

This diff is too big to show here.

plugins/Ubuntu/CMakeLists.txt+1

This diff is too big to show here.

plugins/Ubuntu/DownloadDaemonListener/CMakeLists.txtnew file+20

This diff is too big to show here.

plugins/Ubuntu/DownloadDaemonListener/DownloadTracker.cppnew file+85

This diff is too big to show here.

plugins/Ubuntu/DownloadDaemonListener/DownloadTracker.hnew file+70

This diff is too big to show here.

plugins/Ubuntu/DownloadDaemonListener/interface/downloadtrackeradaptor.cppnew file+25

This diff is too big to show here.

plugins/Ubuntu/DownloadDaemonListener/interface/downloadtrackeradaptor.hnew file+192

This diff is too big to show here.

plugins/Ubuntu/DownloadDaemonListener/interface/metatypes.hnew file+25

This diff is too big to show here.

plugins/Ubuntu/DownloadDaemonListener/plugin.cppnew file+39

This diff is too big to show here.

plugins/Ubuntu/DownloadDaemonListener/plugin.hnew file+37

This diff is too big to show here.

plugins/Ubuntu/DownloadDaemonListener/qmldirnew file+3

This diff is too big to show here.

plugins/Ubuntu/Gestures/AxisVelocityCalculator.cpp+27−21

This diff is too big to show here.

plugins/Ubuntu/Gestures/AxisVelocityCalculator.h+24−20

This diff is too big to show here.

plugins/Ubuntu/Gestures/CMakeLists.txt+29−20

This diff is too big to show here.

plugins/Ubuntu/Gestures/Damper.hdeleted−85

This diff is too big to show here.

plugins/Ubuntu/Gestures/Direction.cpp+15−3

This diff is too big to show here.

plugins/Ubuntu/Gestures/Direction.h+9−5

This diff is too big to show here.

plugins/Ubuntu/Gestures/DirectionalDragArea.cppdeleted−410

This diff is too big to show here.

plugins/Ubuntu/Gestures/DirectionalDragArea.hdeleted−233

This diff is too big to show here.

plugins/Ubuntu/Gestures/MouseEventGenerator.cppnew file+64

This diff is too big to show here.

plugins/Ubuntu/Gestures/MouseEventGenerator.hnew file+48

This diff is too big to show here.

plugins/Ubuntu/Gestures/PressedOutsideNotifier.cppnew file+119

This diff is too big to show here.

plugins/Ubuntu/Gestures/PressedOutsideNotifier.hnew file+62

This diff is too big to show here.

plugins/Ubuntu/Gestures/TouchDispatcher.cppnew file+398

This diff is too big to show here.

plugins/Ubuntu/Gestures/TouchDispatcher.hnew file+96

This diff is too big to show here.

plugins/Ubuntu/Gestures/TouchGate.cppnew file+290

This diff is too big to show here.

plugins/Ubuntu/Gestures/TouchGate.hnew file+125

This diff is too big to show here.

plugins/Ubuntu/Gestures/TouchGestureArea.cppnew file+879

This diff is too big to show here.

plugins/Ubuntu/Gestures/TouchGestureArea.hnew file+229

This diff is too big to show here.

Notifications/timings.js → plugins/Ubuntu/Gestures/UbuntuGesturesQmlGlobal.hrenamed+6−6

This diff is too big to show here.

plugins/Ubuntu/Gestures/plugin.cpp+11−4

This diff is too big to show here.

plugins/Ubuntu/Gestures/plugin.h+2−2

This diff is too big to show here.

plugins/Ubuntu/Gestures/qmldir+2−1

This diff is too big to show here.

plugins/Unity/ApplicationMenu/CMakeLists.txtnew file+19

This diff is too big to show here.

plugins/Unity/ApplicationMenu/applicationmenuregistry.cppnew file+141

This diff is too big to show here.

plugins/Unity/ApplicationMenu/applicationmenuregistry.hnew file+83

This diff is too big to show here.

plugins/Unity/ApplicationMenu/com.ubuntu.MenuRegistrar.xmlnew file+83

This diff is too big to show here.

plugins/Unity/ApplicationMenu/dbusapplicationmenuregistry.cppnew file+44

This diff is too big to show here.

plugins/Unity/ApplicationMenu/dbusapplicationmenuregistry.hnew file+34

This diff is too big to show here.

plugins/Unity/ApplicationMenu/plugin.cppnew file+42

This diff is too big to show here.

plugins/Unity/ApplicationMenu/plugin.hnew file+32

This diff is too big to show here.

plugins/Unity/ApplicationMenu/qmldirnew file+3

This diff is too big to show here.

plugins/Unity/CMakeLists.txt+7−50

This diff is too big to show here.

plugins/Unity/Connectivity/CMakeLists.txtnew file+10

This diff is too big to show here.

plugins/Unity/Connectivity/Connectivity.cppnew file+33

This diff is too big to show here.

plugins/Unity/Connectivity/Connectivity.hnew file+34

This diff is too big to show here.

plugins/Unity/Connectivity/plugin.cppnew file+34

This diff is too big to show here.

plugins/Unity/Connectivity/plugin.hnew file+31

This diff is too big to show here.

plugins/Unity/Connectivity/qmldirnew file+3

This diff is too big to show here.

plugins/Unity/Indicators/CMakeLists.txtnew file+50

This diff is too big to show here.

modules/Unity/Indicators/qml/messaging/ActionButton.qml → plugins/Unity/Indicators/Messaging/qml/ActionButton.qmlrenamed+14−4

This diff is too big to show here.

plugins/Unity/Indicators/actionrootstate.cppnew file+97

This diff is too big to show here.

plugins/Unity/Indicators/actionrootstate.hnew file+55

This diff is too big to show here.

modules/Unity/Indicators/indicator.cpp → plugins/Unity/Indicators/indicator.cpprenamed+39−20

This diff is too big to show here.

modules/Unity/Indicators/indicator.h → plugins/Unity/Indicators/indicator.hrenamed+12−6

This diff is too big to show here.

modules/Unity/Indicators/indicators.h → plugins/Unity/Indicators/indicators.hrenamed+43−8

This diff is too big to show here.

modules/Unity/Indicators/indicatorsmanager.cpp → plugins/Unity/Indicators/indicatorsmanager.cpprenamed+85−47

This diff is too big to show here.

modules/Unity/Indicators/indicatorsmanager.h → plugins/Unity/Indicators/indicatorsmanager.hrenamed+22−16

This diff is too big to show here.

plugins/Unity/Indicators/indicatorsmodel.cppnew file+301

This diff is too big to show here.

modules/Unity/Indicators/indicatorsmodel.h → plugins/Unity/Indicators/indicatorsmodel.hrenamed+25−28

This diff is too big to show here.

plugins/Unity/Indicators/menucontentactivator.cppnew file+344

This diff is too big to show here.

plugins/Unity/Indicators/menucontentactivator.hnew file+117

This diff is too big to show here.

plugins/Unity/Indicators/modelactionrootstate.cppnew file+204

This diff is too big to show here.

plugins/Unity/Indicators/modelactionrootstate.hnew file+72

This diff is too big to show here.

plugins/Unity/Indicators/modelprinter.cppnew file+152

This diff is too big to show here.

plugins/Unity/Indicators/modelprinter.hnew file+56

This diff is too big to show here.

plugins/Unity/Indicators/plugin.cppnew file+67

This diff is too big to show here.

Panel/Indicators/SoundIndicatorWidget.qml → plugins/Unity/Indicators/plugin.hrenamed+13−5

This diff is too big to show here.

plugins/Unity/Indicators/qmldirnew file+3

This diff is too big to show here.

plugins/Unity/Indicators/rootstateparser.cppnew file+231

This diff is too big to show here.

plugins/Unity/Indicators/rootstateparser.hnew file+74

This diff is too big to show here.

plugins/Unity/Indicators/sharedunitymenumodel.cppnew file+96

This diff is too big to show here.

plugins/Unity/Indicators/sharedunitymenumodel.hnew file+66

This diff is too big to show here.

plugins/Ubuntu/Gestures/UbuntuGesturesGlobal.h → plugins/Unity/Indicators/unityindicatorsglobal.hrenamed+3−3

This diff is too big to show here.

plugins/Unity/Indicators/unitymenumodelcache.cppnew file+65

This diff is too big to show here.

plugins/Unity/Indicators/unitymenumodelcache.hnew file+50

This diff is too big to show here.

plugins/Unity/Indicators/unitymenumodelstack.cppnew file+160

This diff is too big to show here.

plugins/Unity/Indicators/unitymenumodelstack.hnew file+68

This diff is too big to show here.

plugins/Unity/InputInfo/CMakeLists.txtnew file+38

This diff is too big to show here.

plugins/Unity/InputInfo/linux/qinputdeviceinfo_linux.cppnew file+296

This diff is too big to show here.

plugins/Unity/InputInfo/linux/qinputdeviceinfo_linux_p.hnew file+96

This diff is too big to show here.

plugins/Unity/InputInfo/plugin.cppnew file+32

This diff is too big to show here.

Panel/Indicators/MessagingIndicatorWidget.qml → plugins/Unity/InputInfo/plugin.hrenamed+14−9

This diff is too big to show here.

plugins/Unity/InputInfo/qdeclarativeinputdevicemodel.cppnew file+196

This diff is too big to show here.

plugins/Unity/InputInfo/qdeclarativeinputdevicemodel_p.hnew file+102

This diff is too big to show here.

plugins/Unity/InputInfo/qinputinfo.cppnew file+270

This diff is too big to show here.

plugins/Unity/InputInfo/qinputinfo.hnew file+142

This diff is too big to show here.

plugins/Unity/InputInfo/qmldirnew file+3

This diff is too big to show here.

plugins/Unity/Launcher/CMakeLists.txtnew file+54

This diff is too big to show here.

plugins/Unity/Launcher/appdrawermodel.cppnew file+192

This diff is too big to show here.

plugins/Unity/Launcher/appdrawermodel.hnew file+64

This diff is too big to show here.

plugins/Unity/Launcher/asadapter.cppnew file+67

This diff is too big to show here.

plugins/Unity/Launcher/asadapter.hnew file+46

This diff is too big to show here.

plugins/Unity/Launcher/dbusinterface.cppnew file+226

This diff is too big to show here.

plugins/Unity/Launcher/dbusinterface.hnew file+49

This diff is too big to show here.

plugins/Unity/Launcher/gsettings.cppnew file+80

This diff is too big to show here.

plugins/Unity/Launcher/gsettings.hnew file+47

This diff is too big to show here.

plugins/Unity/Launcher/launcheritem.cppnew file+274

This diff is too big to show here.

plugins/Unity/Launcher/launcheritem.hnew file+92

This diff is too big to show here.

plugins/Unity/Launcher/launchermodel.cppnew file+645

This diff is too big to show here.

plugins/Unity/Launcher/launchermodel.hnew file+92

This diff is too big to show here.

plugins/Unity/Launcher/plugin.cppnew file+50

This diff is too big to show here.

plugins/Unity/Launcher/plugin.hnew file+34

This diff is too big to show here.

plugins/Unity/Launcher/qmldirnew file+3

This diff is too big to show here.

plugins/Unity/Launcher/quicklistentry.cppnew file+85

This diff is too big to show here.

plugins/Unity/Launcher/quicklistentry.hnew file+56

This diff is too big to show here.

plugins/Unity/Launcher/quicklistmodel.cppnew file+95

This diff is too big to show here.

plugins/Unity/Launcher/quicklistmodel.hnew file+61

This diff is too big to show here.

plugins/Unity/Launcher/ualwrapper.cppnew file+74

This diff is too big to show here.

plugins/Unity/Launcher/ualwrapper.hnew file+36

This diff is too big to show here.

plugins/Unity/Launcher/xdgwatcher.cppnew file+129

This diff is too big to show here.

plugins/Unity/Launcher/xdgwatcher.hnew file+46

This diff is too big to show here.

plugins/Unity/Platform/CMakeLists.txtnew file+11

This diff is too big to show here.

plugins/Unity/Platform/platform.cppnew file+66

This diff is too big to show here.

plugins/Unity/Platform/platform.hnew file+64

This diff is too big to show here.

plugins/Unity/Platform/plugin.cppnew file+27

This diff is too big to show here.

plugins/Unity/Platform/plugin.hnew file+32

This diff is too big to show here.

plugins/Unity/Platform/qmldirnew file+2

This diff is too big to show here.

plugins/Unity/Session/CMakeLists.txtnew file+29

This diff is too big to show here.

plugins/Unity/Session/dbusunitysessionservice.cppnew file+647

This diff is too big to show here.

plugins/Unity/Session/dbusunitysessionservice.hnew file+377

This diff is too big to show here.

plugins/Unity/Session/orientationlock.cppnew file+74

This diff is too big to show here.

plugins/Unity/Session/orientationlock.hnew file+60

This diff is too big to show here.

plugins/Unity/Session/plugin.cppnew file+48

This diff is too big to show here.

plugins/Unity/Session/plugin.hnew file+34

This diff is too big to show here.

plugins/Unity/Session/qmldirnew file+3

This diff is too big to show here.

plugins/Unity/bottombarvisibilitycommunicatorshell.hdeleted−53

This diff is too big to show here.

plugins/Unity/categories.cppdeleted−182

This diff is too big to show here.

plugins/Unity/categories.hdeleted−91

This diff is too big to show here.

plugins/Unity/launchermodel.cppdeleted−153

This diff is too big to show here.

plugins/Unity/launchermodel.hdeleted−86

This diff is too big to show here.

plugins/Unity/lens.cppdeleted−338

This diff is too big to show here.

plugins/Unity/lens.hdeleted−149

This diff is too big to show here.

plugins/Unity/lenses.cppdeleted−182

This diff is too big to show here.

plugins/Unity/lenses.hdeleted−90

This diff is too big to show here.

plugins/Unity/peoplepreviewdata.cppdeleted−438

This diff is too big to show here.

plugins/Unity/peoplepreviewdata.hdeleted−251

This diff is too big to show here.

plugins/Unity/plugin.cppdeleted−69

This diff is too big to show here.

plugins/Unity/qmldirdeleted−2

This diff is too big to show here.

plugins/Utils/CMakeLists.txt+36−17

This diff is too big to show here.

plugins/Utils/EdgeBarrierSettings.qmlnew file+66

This diff is too big to show here.

plugins/Utils/ElapsedTimer.hnew file+51

This diff is too big to show here.

plugins/Utils/Style.jsnew file+37

This diff is too big to show here.

plugins/Utils/Timer.cppnew file+62

This diff is too big to show here.

plugins/Utils/Timer.hnew file+78

This diff is too big to show here.

plugins/Utils/URLDispatcher.cppnew file+80

This diff is too big to show here.

plugins/Utils/URLDispatcher.hnew file+47

This diff is too big to show here.

plugins/Utils/WindowInputMonitor.cppnew file+126

This diff is too big to show here.

plugins/Utils/WindowInputMonitor.hnew file+97

This diff is too big to show here.

plugins/Utils/activefocuslogger.cppnew file+61

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_Damper.cpp → plugins/Utils/activefocuslogger.hrenamed+15−18

This diff is too big to show here.

plugins/Utils/appdrawerproxymodel.cppnew file+189

This diff is too big to show here.

plugins/Utils/appdrawerproxymodel.hnew file+87

This diff is too big to show here.

plugins/Utils/applicationpaths.hdeleted−40

This diff is too big to show here.

plugins/Utils/applicationsfiltermodel.cppnew file+101

This diff is too big to show here.

plugins/Utils/applicationsfiltermodel.hnew file+69

This diff is too big to show here.

plugins/Utils/constants.cppnew file+32

This diff is too big to show here.

plugins/Utils/constants.hnew file+43

This diff is too big to show here.

plugins/Utils/deviceconfigparser.cppnew file+176

This diff is too big to show here.

plugins/Utils/deviceconfigparser.hnew file+66

This diff is too big to show here.

plugins/Utils/easingcurve.cppnew file+73

This diff is too big to show here.

plugins/Utils/easingcurve.hnew file+69

This diff is too big to show here.

plugins/Utils/expressionfiltermodel.cppnew file+49

This diff is too big to show here.

plugins/Utils/expressionfiltermodel.hnew file+42

This diff is too big to show here.

plugins/Utils/globalfunctions.cppnew file+58

This diff is too big to show here.

plugins/Utils/globalfunctions.hnew file+44

This diff is too big to show here.

plugins/Utils/inputeventgenerator.cppnew file+34

This diff is too big to show here.

plugins/Utils/inputeventgenerator.hnew file+40

This diff is too big to show here.

plugins/Utils/inputwatcher.cppnew file+118

This diff is too big to show here.

plugins/Utils/inputwatcher.hnew file+58

This diff is too big to show here.

plugins/Utils/plugin.cpp+64−11

This diff is too big to show here.

plugins/Utils/plugin.h+1−1

This diff is too big to show here.

plugins/Utils/qlimitproxymodelqml.cpp+110−24

This diff is too big to show here.

plugins/Utils/qlimitproxymodelqml.h+4−2

This diff is too big to show here.

plugins/Utils/qmldir+3

This diff is too big to show here.

plugins/Utils/quicklistproxymodel.cppnew file+72

This diff is too big to show here.

plugins/Utils/quicklistproxymodel.hnew file+52

This diff is too big to show here.

plugins/Utils/qvariantlistmodel.h+6−6

This diff is too big to show here.

plugins/Utils/tabfocusfence.cppnew file+72

This diff is too big to show here.

plugins/Utils/tabfocusfence.hnew file+38

This diff is too big to show here.

plugins/Utils/timezoneFormatter.cppnew file+45

This diff is too big to show here.

plugins/Utils/timezoneFormatter.hnew file+33

This diff is too big to show here.

plugins/Utils/unitymenumodelpaths.cppnew file+182

This diff is too big to show here.

plugins/Utils/unitymenumodelpaths.hnew file+82

This diff is too big to show here.

plugins/Utils/unitysortfilterproxymodelqml.cppnew file+167

This diff is too big to show here.

plugins/Utils/unitysortfilterproxymodelqml.hnew file+68

This diff is too big to show here.

plugins/Utils/windowinputfilter.cppnew file+70

This diff is too big to show here.

plugins/Utils/windowinputfilter.hnew file+58

This diff is too big to show here.

plugins/Utils/windowstatestorage.cppnew file+383

This diff is too big to show here.

plugins/Utils/windowstatestorage.hnew file+74

This diff is too big to show here.

plugins/WindowManager/AvailableDesktopArea.cppnew file+50

This diff is too big to show here.

plugins/WindowManager/AvailableDesktopArea.hnew file+38

This diff is too big to show here.

plugins/WindowManager/CMakeLists.txtnew file+26

This diff is too big to show here.

plugins/WindowManager/InputMethodManager.cppnew file+56

This diff is too big to show here.

plugins/WindowManager/InputMethodManager.hnew file+55

This diff is too big to show here.

plugins/WindowManager/TopLevelWindowModel.cppnew file+782

This diff is too big to show here.

plugins/WindowManager/TopLevelWindowModel.hnew file+308

This diff is too big to show here.

plugins/WindowManager/Window.cppnew file+277

This diff is too big to show here.

plugins/WindowManager/Window.hnew file+176

This diff is too big to show here.

Components/Circle.qml → plugins/WindowManager/WindowManagerGlobal.hrenamed+7−6

This diff is too big to show here.

plugins/WindowManager/WindowManagerPlugin.cppnew file+44

This diff is too big to show here.

plugins/WindowManager/WindowManagerPlugin.hnew file+32

This diff is too big to show here.

plugins/WindowManager/WindowMargins.cppnew file+74

This diff is too big to show here.

plugins/WindowManager/WindowMargins.hnew file+59

This diff is too big to show here.

plugins/WindowManager/qmldirnew file+2

This diff is too big to show here.

plugins/Wizard/50-com.canonical.unity.wizard.pklanew file+6

This diff is too big to show here.

plugins/Wizard/CMakeLists.txtnew file+23

This diff is too big to show here.

plugins/Wizard/Changelog.cppnew file+58

This diff is too big to show here.

plugins/Wizard/Changelog.hnew file+52

This diff is too big to show here.

plugins/Wizard/LocalePlugin.cppnew file+291

This diff is too big to show here.

plugins/Wizard/LocalePlugin.hnew file+58

This diff is too big to show here.

plugins/Wizard/PageList.cppnew file+127

This diff is too big to show here.

plugins/Wizard/PageList.hnew file+53

This diff is too big to show here.

plugins/Wizard/Status.cppnew file+143

This diff is too big to show here.

plugins/Wizard/Status.hnew file+60

This diff is too big to show here.

plugins/Wizard/System.cppnew file+182

This diff is too big to show here.

plugins/Wizard/System.hnew file+75

This diff is too big to show here.

plugins/Wizard/Unity/Application/CMakeLists.txtnew file+3

This diff is too big to show here.

tests/mocks/Ubuntu/Application/InputFilterArea.qml → plugins/Wizard/Unity/Application/OSKController.qmlrenamed−1

This diff is too big to show here.

plugins/Wizard/Unity/Application/qmldirnew file+2

This diff is too big to show here.

plugins/Wizard/Unity/CMakeLists.txtnew file+1

This diff is too big to show here.

plugins/Wizard/Utils/CMakeLists.txtnew file+27

This diff is too big to show here.

plugins/Wizard/Utils/plugin.cppnew file+41

This diff is too big to show here.

tests/qmltests/plugins/Unity/fake_unity_plugin.h → plugins/Wizard/Utils/plugin.hrenamed+5−6

This diff is too big to show here.

plugins/Wizard/Utils/qmldirnew file+2

This diff is too big to show here.

plugins/Utils/qsortfilterproxymodelqml.cpp → plugins/Wizard/Utils/qsortfilterproxymodelqml.cpprenamed+45−1

This diff is too big to show here.

plugins/Utils/qsortfilterproxymodelqml.h → plugins/Wizard/Utils/qsortfilterproxymodelqml.hrenamed+5

This diff is too big to show here.

plugins/Wizard/keyboardLayoutsModel.cppnew file+163

This diff is too big to show here.

plugins/Wizard/keyboardLayoutsModel.hnew file+66

This diff is too big to show here.

plugins/Wizard/main.cppnew file+93

This diff is too big to show here.

plugins/Wizard/plugin.cppnew file+38

This diff is too big to show here.

plugins/Wizard/plugin.hnew file+31

This diff is too big to show here.

plugins/Wizard/qmldirnew file+2

This diff is too big to show here.

plugins/Wizard/timezonemodel.cppnew file+244

This diff is too big to show here.

plugins/Wizard/timezonemodel.hnew file+80

This diff is too big to show here.

plugins/Wizard/ubuntu-system-settings-wizard-cleanup.confnew file+20

This diff is too big to show here.

plugins/Wizard/ubuntu-system-settings-wizard-set-lang.confnew file+30

This diff is too big to show here.

plugins/Wizard/ubuntu-system-settings-wizard.confnew file+75

This diff is too big to show here.

po/aa.ponew file+880

This diff is too big to show here.

po/am.ponew file+1406

This diff is too big to show here.

po/ar.po+1193−165

This diff is too big to show here.

po/ast.ponew file+1408

This diff is too big to show here.

po/az.po+861−127

This diff is too big to show here.

po/be.ponew file+1253

This diff is too big to show here.

po/bg.ponew file+882

This diff is too big to show here.

po/bn.ponew file+1062

This diff is too big to show here.

po/br.ponew file+1348

This diff is too big to show here.

po/bs.ponew file+1146

This diff is too big to show here.

po/ca.po+1379−157

This diff is too big to show here.

po/ca@valencia.ponew file+1125

This diff is too big to show here.

po/ce.ponew file+816

This diff is too big to show here.

po/ckb.ponew file+870

This diff is too big to show here.

po/co.ponew file+1061

This diff is too big to show here.

po/cs.ponew file+1332

This diff is too big to show here.

po/cy.ponew file+1165

This diff is too big to show here.

po/da.ponew file+1216

This diff is too big to show here.

po/de.po+1385−167

This diff is too big to show here.

po/el.po+1255−156

This diff is too big to show here.

po/en_AU.po+1364−155

This diff is too big to show here.

po/en_GB.po+1336−166

This diff is too big to show here.

po/en_US.ponew file+814

This diff is too big to show here.

po/eo.po+805−115

This diff is too big to show here.

po/es.po+1376−169

This diff is too big to show here.

po/et.ponew file+816

This diff is too big to show here.

po/eu.ponew file+1246

This diff is too big to show here.

po/fa.ponew file+1453

This diff is too big to show here.

po/fi.po+1371−168

This diff is too big to show here.

po/fo.po+802−126

This diff is too big to show here.

po/fr.po+1394−156

This diff is too big to show here.

po/ga.ponew file+1109

This diff is too big to show here.

po/gd.ponew file+1461

This diff is too big to show here.

po/gl.po+1364−163

This diff is too big to show here.

po/gu.ponew file+814

This diff is too big to show here.

po/gv.ponew file+918

This diff is too big to show here.

po/he.po+1022−166

This diff is too big to show here.

po/hi.ponew file+850

This diff is too big to show here.

po/hr.po+1310−162

This diff is too big to show here.

po/hu.po+1365−163

This diff is too big to show here.

po/hy.po+857−140

This diff is too big to show here.

po/ia.ponew file+1409

This diff is too big to show here.

po/id.po+889−115

This diff is too big to show here.

po/is.ponew file+999

This diff is too big to show here.

po/it.po+1376−161

This diff is too big to show here.

po/ja.po+893−115

This diff is too big to show here.

po/kk.ponew file+841

This diff is too big to show here.

po/km.ponew file+1071

This diff is too big to show here.

po/kn.po+725−127

This diff is too big to show here.

po/ko.po+1176−165

This diff is too big to show here.

po/ku.ponew file+978

This diff is too big to show here.

po/ky.po+725−127

This diff is too big to show here.

po/lo.ponew file+834

This diff is too big to show here.

po/lt.ponew file+1034

This diff is too big to show here.

po/lv.po+1096−129

This diff is too big to show here.

po/ml.ponew file+871

This diff is too big to show here.

po/mr.ponew file+864

This diff is too big to show here.

po/ms.ponew file+1376

This diff is too big to show here.

po/my.po+797−126

This diff is too big to show here.

po/nb.po+1355−164

This diff is too big to show here.

po/ne.ponew file+834

This diff is too big to show here.

po/nl.po+1366−163

This diff is too big to show here.

po/nn.ponew file+816

This diff is too big to show here.

po/oc.ponew file+1276

This diff is too big to show here.

po/or.ponew file+816

This diff is too big to show here.

po/pa.ponew file+1153

This diff is too big to show here.

po/pl.po+1361−164

This diff is too big to show here.

po/pt.ponew file+1435

This diff is too big to show here.

po/pt_BR.po+1154−156

This diff is too big to show here.

po/ro.po+1145−127

This diff is too big to show here.

po/ru.po+1364−160

This diff is too big to show here.

po/sc.ponew file+904

This diff is too big to show here.

po/shn.ponew file+816

This diff is too big to show here.

po/si.po+766−115

This diff is too big to show here.

po/sk.ponew file+1352

This diff is too big to show here.

po/sl.po+1302−133

This diff is too big to show here.

po/sq.ponew file+1048

This diff is too big to show here.

po/sr.po+1329−150

This diff is too big to show here.

po/sv.po+1363−166

This diff is too big to show here.

po/sw.ponew file+1087

This diff is too big to show here.

po/ta.ponew file+872

This diff is too big to show here.

po/te.po+751−116

This diff is too big to show here.

po/th.ponew file+817

This diff is too big to show here.

po/tr.po+1348−154

This diff is too big to show here.

po/ug.po+1171−140

This diff is too big to show here.

po/uk.po+1368−168

This diff is too big to show here.

po/unity8.pot+692−111

This diff is too big to show here.

po/update-unity-pot+32−5

This diff is too big to show here.

po/ur.ponew file+819

This diff is too big to show here.

po/uz.ponew file+816

This diff is too big to show here.

po/vi.ponew file+816

This diff is too big to show here.

po/wo.ponew file+1232

This diff is too big to show here.

po/xh.ponew file+816

This diff is too big to show here.

po/zh_CN.po+1315−169

This diff is too big to show here.

po/zh_HK.ponew file+897

This diff is too big to show here.

po/zh_TW.po+1261−168

This diff is too big to show here.

qml/ApplicationMenus/ApplicationMenuItemFactory.qmlnew file+135

This diff is too big to show here.

qml/ApplicationMenus/ApplicationMenusLimits.qmlnew file+24

This diff is too big to show here.

qml/ApplicationMenus/MenuBar.qmlnew file+513

This diff is too big to show here.

qml/ApplicationMenus/MenuItem.qmlnew file+146

This diff is too big to show here.

qml/ApplicationMenus/MenuNavigator.qmlnew file+101

This diff is too big to show here.

qml/ApplicationMenus/MenuPopup.qmlnew file+510

This diff is too big to show here.

qml/ApplicationMenus/RegisteredApplicationMenuModel.qmlnew file+56

This diff is too big to show here.

qml/ApplicationMenus/qmldirnew file+1

This diff is too big to show here.

qml/CMakeLists.txtnew file+23

This diff is too big to show here.

qml/Components/Background.qmlnew file+87

This diff is too big to show here.

qml/Components/BlurLayer.qmlnew file+39

This diff is too big to show here.

qml/Components/BrightnessControl.qmlnew file+54

This diff is too big to show here.

qml/Components/Dialogs.qmlnew file+328

This diff is too big to show here.

qml/Components/DragHandle.qmlnew file+227

This diff is too big to show here.

Components/DraggingArea.qml → qml/Components/DraggingArea.qmlrenamed+7−4

This diff is too big to show here.

qml/Components/EdgeBarrier.qmlnew file+114

This diff is too big to show here.

qml/Components/EdgeBarrierController.qmlnew file+74

This diff is too big to show here.

qml/Components/EdgeDragEvaluator.qmlnew file+97

This diff is too big to show here.

qml/Components/FadingLabel.qmlnew file+42

This diff is too big to show here.

qml/Components/Flickable.qmlnew file+24

This diff is too big to show here.

qml/Components/FloatingFlickable.qmlnew file+63

This diff is too big to show here.

Components/ListItems/VerticalThinDivider.qml → qml/Components/GridView.qmlrenamed+8−10

This diff is too big to show here.

qml/Components/Handle.qmlnew file+44

This diff is too big to show here.

qml/Components/InputMethod.qmlnew file+58

This diff is too big to show here.

qml/Components/ItemGrabber.qmlnew file+86

This diff is too big to show here.

qml/Components/ItemSnapshot.qmlnew file+45

This diff is too big to show here.

qml/Components/KeyboardShortcutsOverlay.qmlnew file+336

This diff is too big to show here.

qml/Components/KeymapSwitcher.qmlnew file+102

This diff is too big to show here.

qml/Components/LazyImage.qmlnew file+202

This diff is too big to show here.

qml/Components/ListView.qmlnew file+24

This diff is too big to show here.

qml/Components/ListViewOSKScroller.qmlnew file+53

This diff is too big to show here.

qml/Components/Lockscreen.qmlnew file+256

This diff is too big to show here.

qml/Components/MediaServices/MediaServices.qmlnew file+386

This diff is too big to show here.

qml/Components/MediaServices/MediaServicesControls.qmlnew file+192

This diff is too big to show here.

qml/Components/MediaServices/MediaServicesHeader.qmlnew file+71

This diff is too big to show here.

qml/Components/MediaServices/VideoPlayer.qmlnew file+155

This diff is too big to show here.

qml/Components/MediaServices/VideoPlayerControls.qmlnew file+158

This diff is too big to show here.

qml/Components/ModeSwitchWarningDialog.qmlnew file+101

This diff is too big to show here.

qml/Components/NotificationAudio.qmlnew file+60

This diff is too big to show here.

qml/Components/Orientations.qmlnew file+57

This diff is too big to show here.

qml/Components/PanelState/PanelState.qmlnew file+36

This diff is too big to show here.

qml/Components/PanelState/qmldirnew file+1

This diff is too big to show here.

qml/Components/PassphraseLockscreen.qmlnew file+150

This diff is too big to show here.

qml/Components/PhysicalKeysMapper.qmlnew file+163

This diff is too big to show here.

qml/Components/PinLockscreen.qmlnew file+258

This diff is too big to show here.

qml/Components/PinPadButton.qmlnew file+78

This diff is too big to show here.

qml/Components/Rating.qmlnew file+49

This diff is too big to show here.

qml/Components/RatingStyle.qmlnew file+50

This diff is too big to show here.

qml/Components/ScrollCalculator.qmlnew file+100

This diff is too big to show here.

Components/SearchHistoryModel.qml → qml/Components/SearchHistoryModel/SearchHistoryModel.qmlrenamed+2−1

This diff is too big to show here.

qml/Components/SearchHistoryModel/qmldirnew file+1

This diff is too big to show here.

qml/Components/SharingPicker.qmlnew file+102

This diff is too big to show here.

qml/Components/ShellDialog.qmlnew file+68

This diff is too big to show here.

Components/Showable.qml → qml/Components/Showable.qmlrenamed+47−19

This diff is too big to show here.

Components/StandardAnimation.qml → qml/Components/StandardAnimation.qmlrenamed+1−1

This diff is too big to show here.

qml/Components/VirtualTouchPad.qmlnew file+406

This diff is too big to show here.

qml/Components/VolumeControl.qmlnew file+63

This diff is too big to show here.

qml/Components/Wallpaper.qmlnew file+96

This diff is too big to show here.

qml/Components/WallpaperResolver.qmlnew file+60

This diff is too big to show here.

qml/Components/WindowControlButtons.qmlnew file+121

This diff is too big to show here.

Components/WrongPasswordAnimation.qml → qml/Components/WrongPasswordAnimation.qmlrenamed+4−4

This diff is too big to show here.

qml/Components/ZoomableImage.qmlnew file+157

This diff is too big to show here.

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

The content is the same.

qml/Components/flickableUtils.jsnew file+28

This diff is too big to show here.

qml/Components/graphics/close@20.pngnew file

Binary file not shown.

qml/Components/graphics/icon_star_empty@20.pngnew file

Binary file not shown.

qml/Components/graphics/icon_star_full@20.pngnew file

Binary file not shown.

qml/Components/graphics/icon_star_half@20.pngnew file

Binary file not shown.

qml/Components/graphics/icon_star_off@20.pngnew file

Binary file not shown.

qml/Components/graphics/icon_star_on@20.pngnew file

Binary file not shown.

qml/Components/graphics/non-selected@18.pngnew file

Binary file not shown.

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

The content is the same.

qml/Components/graphics/window-close.svgnew file+164

This diff is too big to show here.

qml/Components/graphics/window-maximize.svgnew file+164

This diff is too big to show here.

qml/Components/graphics/window-minimize.svgnew file+164

This diff is too big to show here.

qml/Components/graphics/window-window.svgnew file+41

This diff is too big to show here.

qml/DeviceConfiguration.qmlnew file+161

This diff is too big to show here.

qml/DisabledScreenNotice.qmlnew file+81

This diff is too big to show here.

qml/Greeter/ButtonPrompt.qmlnew file+51

This diff is too big to show here.

qml/Greeter/Circle.qmlnew file+57

This diff is too big to show here.

qml/Greeter/Clock.qmlnew file+91

This diff is too big to show here.

qml/Greeter/CoverPage.qmlnew file+271

This diff is too big to show here.

qml/Greeter/DelayedLockscreen.qmlnew file+86

This diff is too big to show here.

Greeter/Dot.qml → qml/Greeter/Dot.qmlrenamed+1−1

This diff is too big to show here.

qml/Greeter/FullLightDMImpl.qmlnew file+31

This diff is too big to show here.

Greeter/Gradient.js → qml/Greeter/Gradient.jsrenamed+7−3

This diff is too big to show here.

qml/Greeter/Greeter.qmlnew file+632

This diff is too big to show here.

qml/Greeter/GreeterPrompt.qmlnew file+127

This diff is too big to show here.

qml/Greeter/GreeterView.qmlnew file+534

This diff is too big to show here.

Greeter/Infographics.qml → qml/Greeter/Infographics.qmlrenamed+118−138

This diff is too big to show here.

Dash/Music/MusicCarousel.qml → qml/Greeter/IntegratedLightDMImpl.qmlrenamed+12−16

This diff is too big to show here.

qml/Greeter/LightDMService.qmlnew file+54

This diff is too big to show here.

qml/Greeter/LoginAreaContainer.qmlnew file+38

This diff is too big to show here.

qml/Greeter/LoginList.qmlnew file+292

This diff is too big to show here.

Greeter/ObjectPositioner.qml → qml/Greeter/ObjectPositioner.qmlrenamed+2−2

This diff is too big to show here.

qml/Greeter/PinPrompt.qmlnew file+184

This diff is too big to show here.

qml/Greeter/PromptList.qmlnew file+151

This diff is too big to show here.

qml/Greeter/SessionIcon.qmlnew file+47

This diff is too big to show here.

qml/Greeter/SessionsList.qmlnew file+205

This diff is too big to show here.

qml/Greeter/ShimGreeter.qmlnew file+47

This diff is too big to show here.

qml/Greeter/TextPrompt.qmlnew file+198

This diff is too big to show here.

qml/Greeter/graphics/dot_empty.pngnew file

Binary file not shown.

qml/Greeter/graphics/dot_filled.pngnew file

Binary file not shown.

qml/Greeter/graphics/dot_pointer.pngnew file

Binary file not shown.

qml/Greeter/graphics/icon_arrow.pngnew file

Binary file not shown.

qml/Greeter/graphics/session_icons/gnome_badge.pngnew file

Binary file not shown.

qml/Greeter/graphics/session_icons/kde_badge.pngnew file

Binary file not shown.

qml/Greeter/graphics/session_icons/recovery_console_badge.pngnew file

Binary file not shown.

qml/Greeter/graphics/session_icons/ubuntu_badge.pngnew file

Binary file not shown.

qml/Greeter/graphics/session_icons/unknown_badge.pngnew file

Binary file not shown.

qml/Greeter/qmldirnew file+1

This diff is too big to show here.

qml/Launcher/BackgroundBlur.qmlnew file+81

This diff is too big to show here.

qml/Launcher/Drawer.qmlnew file+413

This diff is too big to show here.

qml/Launcher/DrawerGridView.qmlnew file+85

This diff is too big to show here.

qml/Launcher/FoldingLauncherDelegate.qmlnew file+144

This diff is too big to show here.

qml/Launcher/Launcher.qmlnew file+661

This diff is too big to show here.

qml/Launcher/LauncherDelegate.qmlnew file+327

This diff is too big to show here.

qml/Launcher/LauncherPanel.qmlnew file+961

This diff is too big to show here.

qml/Launcher/PullToRefreshScopeStyle.qmlnew file+83

This diff is too big to show here.

qml/Launcher/Tooltip.qmlnew file+72

This diff is too big to show here.

qml/Launcher/graphics/divider-line.pngnew file

Binary file not shown.

qml/Launcher/graphics/focused_app_arrow@30.pngnew file

Binary file not shown.

qml/Launcher/graphics/home.svgnew file+243

This diff is too big to show here.

qml/Launcher/graphics/quicklist_tooltip@30.pngnew file

Binary file not shown.

qml/Notifications/Notification.qmlnew file+600

This diff is too big to show here.

qml/Notifications/NotificationButton.qmlnew file+73

This diff is too big to show here.

qml/Notifications/NotificationMenuItemFactory.qmlnew file+230

This diff is too big to show here.

qml/Notifications/Notifications.qmlnew file+115

This diff is too big to show here.

qml/Notifications/OptionToggle.qmlnew file+125

This diff is too big to show here.

Dash/Video/CarouselDelegateVideo.qml → qml/Notifications/ShapedIcon.qmlrenamed+20−19

This diff is too big to show here.

qml/Notifications/SwipeToAct.qmlnew file+275

This diff is too big to show here.

qml/OrientedShell.qmlnew file+336

This diff is too big to show here.

qml/Panel/ActiveCallHint.qmlnew file+211

This diff is too big to show here.

tests/mocks/LightDM/single/InfographicModelPrivate.cpp → qml/Panel/FakePanelMenu.qmlrenamed+8−10

This diff is too big to show here.

qml/Panel/Indicators/IndicatorBase.qmlnew file+47

This diff is too big to show here.

Panel/Indicators/DefaultIndicatorPage.qml → qml/Panel/Indicators/IndicatorDelegate.qmlrenamed+4−4

This diff is too big to show here.

qml/Panel/Indicators/IndicatorItem.qmlnew file+310

This diff is too big to show here.

qml/Panel/Indicators/IndicatorMenuItemFactory.qmlnew file+1113

This diff is too big to show here.

qml/Panel/Indicators/IndicatorsLight.qmlnew file+234

This diff is too big to show here.

qml/Panel/Indicators/MessageMenuItemFactory.qmlnew file+244

This diff is too big to show here.

qml/Panel/Indicators/client/IndicatorRepresentation.qmlnew file+121

This diff is too big to show here.

Panel/Indicators/client/IndicatorsClient.qml → qml/Panel/Indicators/client/IndicatorsClient.qmlrenamed+21−13

This diff is too big to show here.

Panel/Indicators/client/IndicatorsList.qml → qml/Panel/Indicators/client/IndicatorsList.qmlrenamed+24−18

This diff is too big to show here.

modules/Unity/Indicators/qml/network/WifiSection.qml → qml/Panel/Indicators/client/IndicatorsTree.qmlrenamed+20−6

This diff is too big to show here.

qml/Panel/MenuContent.qmlnew file+83

This diff is too big to show here.

qml/Panel/Panel.qmlnew file+522

This diff is too big to show here.

qml/Panel/PanelBar.qmlnew file+330

This diff is too big to show here.

qml/Panel/PanelItemRow.qmlnew file+270

This diff is too big to show here.

qml/Panel/PanelMenu.qmlnew file+414

This diff is too big to show here.

qml/Panel/PanelMenuPage.qmlnew file+226

This diff is too big to show here.

qml/Panel/PanelVelocityCalculator.qmlnew file+54

This diff is too big to show here.

qml/Panel/graphics/rectangular_dropshadow@30.pngnew file

Binary file not shown.

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

The content is the same.

qml/Rotation/HalfLoopRotationAnimation.qmlnew file+47

This diff is too big to show here.

qml/Rotation/ImmediateRotationAction.qmlnew file+34

This diff is too big to show here.

qml/Rotation/NinetyRotationAnimation.qmlnew file+88

This diff is too big to show here.

qml/Rotation/RotationStates.qmlnew file+289

This diff is too big to show here.

qml/Rotation/UpdateShellTransformations.qmlnew file+42

This diff is too big to show here.

qml/Shell.qmlnew file+951

This diff is too big to show here.

qml/Stage/ApplicationWindow.qmlnew file+416

This diff is too big to show here.

qml/Stage/ChildWindow.qmlnew file+203

This diff is too big to show here.

qml/Stage/ChildWindowRepeater.qmlnew file+39

This diff is too big to show here.

qml/Stage/ChildWindowTree.qmlnew file+138

This diff is too big to show here.

qml/Stage/DecoratedWindow.qmlnew file+319

This diff is too big to show here.

qml/Stage/FakeMaximizeDelegate.qmlnew file+233

This diff is too big to show here.

qml/Stage/MainViewStyle.qmlnew file+87

This diff is too big to show here.

qml/Stage/MoveHandler.qmlnew file+201

This diff is too big to show here.

qml/Stage/OrientationChangeAnimation.qmlnew file+265

This diff is too big to show here.

qml/Stage/PromptSurfaceAnimations.qmlnew file+80

This diff is too big to show here.

Dash/Music/CarouselDelegateMusic.qml → qml/Stage/ResizeGrip.qmlrenamed+25−21

This diff is too big to show here.

qml/Stage/SideStage.qmlnew file+121

This diff is too big to show here.

qml/Stage/Splash.qmlnew file+150

This diff is too big to show here.

qml/Stage/Spread/BezierCurve.qmlnew file+45

This diff is too big to show here.

qml/Stage/Spread/KeySpline.jsnew file+66

This diff is too big to show here.

qml/Stage/Spread/MathUtils.jsnew file+95

This diff is too big to show here.

qml/Stage/Spread/OpacityMask.qmlnew file+82

This diff is too big to show here.

qml/Stage/Spread/Spread.qmlnew file+173

This diff is too big to show here.

qml/Stage/Spread/SpreadDelegateInputArea.qmlnew file+189

This diff is too big to show here.

qml/Stage/Spread/SpreadMaths.qmlnew file+78

This diff is too big to show here.

qml/Stage/Spread/StagedRightEdgeMaths.qmlnew file+174

This diff is too big to show here.

qml/Stage/Spread/WindowedRightEdgeMaths.qmlnew file+96

This diff is too big to show here.

qml/Stage/Spread/cubic-bezier.jsnew file+39

This diff is too big to show here.

qml/Stage/Stage.qmlnew file+2241

This diff is too big to show here.

qml/Stage/StageMaths.qmlnew file+93

This diff is too big to show here.

qml/Stage/StagedFullscreenPolicy.qmlnew file+50

This diff is too big to show here.

qml/Stage/SurfaceContainer.qmlnew file+108

This diff is too big to show here.

qml/Stage/TabletSideStageTouchGesture.qmlnew file+157

This diff is too big to show here.

qml/Stage/WindowControlsOverlay.qmlnew file+254

This diff is too big to show here.

qml/Stage/WindowDecoration.qmlnew file+163

This diff is too big to show here.

qml/Stage/WindowInfoItem.qmlnew file+69

This diff is too big to show here.

qml/Stage/WindowResizeArea.qmlnew file+300

This diff is too big to show here.

qml/Stage/WindowStateSaver.qmlnew file+64

This diff is too big to show here.

qml/Stage/WindowedFullscreenPolicy.qmlnew file+31

This diff is too big to show here.

qml/Stage/graphics/PageHeaderBaseDividerBottom@18.pngnew file

Binary file not shown.

qml/Stage/graphics/PageHeaderBaseDividerLight@18.pngnew file

Binary file not shown.

qml/Stage/graphics/PageHeaderBaseDividerLight@18.scinew file+5

This diff is too big to show here.

qml/Stage/graphics/arrows-centre.pngnew file

Binary file not shown.

qml/Stage/graphics/arrows.pngnew file

Binary file not shown.

qml/Stage/graphics/sidestage_drag.svgnew file+207

This diff is too big to show here.

qml/Stage/graphics/sidestage_handle@20.pngnew file

Binary file not shown.

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

The content is the same.

qml/Stage/graphics/sidestage_open.svgnew file+181

This diff is too big to show here.

qml/Stage/graphics/window-close.svgnew file+64

This diff is too big to show here.

qml/Tutorial/InactivityTimer.qmlnew file+78

This diff is too big to show here.

qml/Tutorial/Tutorial.qmlnew file+105

This diff is too big to show here.

qml/Tutorial/TutorialContent.qmlnew file+225

This diff is too big to show here.

qml/Tutorial/TutorialLeft.qmlnew file+54

This diff is too big to show here.

qml/Tutorial/TutorialLeftLong.qmlnew file+56

This diff is too big to show here.

qml/Tutorial/TutorialPage.qmlnew file+121

This diff is too big to show here.

qml/Tutorial/TutorialRight.qmlnew file+61

This diff is too big to show here.

qml/Tutorial/TutorialTop.qmlnew file+60

This diff is too big to show here.

qml/Tutorial/graphics/arrow.svgnew file+19

This diff is too big to show here.

qml/Tutorial/graphics/background1.pngnew file

Binary file not shown.

qml/Tutorial/graphics/background2.pngnew file

Binary file not shown.

qml/Wizard/CheckableSetting.qmlnew file+92

This diff is too big to show here.

qml/Wizard/Components/InputMethod.qmlnew file+113

This diff is too big to show here.

qml/Wizard/Page.qmlnew file+340

This diff is too big to show here.

qml/Wizard/Pages.qmlnew file+269

This diff is too big to show here.

qml/Wizard/Pages/10-welcome-update.qmlnew file+137

This diff is too big to show here.

qml/Wizard/Pages/10-welcome.qmlnew file+197

This diff is too big to show here.

qml/Wizard/Pages/11-changelog.qmlnew file+95

This diff is too big to show here.

qml/Wizard/Pages/20-keyboard.qmlnew file+161

This diff is too big to show here.

qml/Wizard/Pages/30-wifi.qmlnew file+219

This diff is too big to show here.

qml/Wizard/Pages/50-timezone.qmlnew file+278

This diff is too big to show here.

qml/Wizard/Pages/60-account.qmlnew file+76

This diff is too big to show here.

qml/Wizard/Pages/70-passwd-type.qmlnew file+168

This diff is too big to show here.

qml/Wizard/Pages/78-firmware-update.qml.disablednew file+246

This diff is too big to show here.

qml/Wizard/Pages/79-system-update.qmlnew file+148

This diff is too big to show here.

qml/Wizard/Pages/80-finished.qmlnew file+137

This diff is too big to show here.

qml/Wizard/Pages/data/Desktop_header_bkg.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/Desktop_splash_screen_bkg.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/Phone_header_bkg.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/Phone_splash_screen_bkg.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/Tick@30.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/map.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/pin.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-1.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-10.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-11.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-2.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-3.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-3.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-4.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-4.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-6.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-7.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-8.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-9.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-9.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_0.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_1.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_10.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_10.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_11.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_12.75.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_12.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_13.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_2.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_3.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_3.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_4.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_4.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_5.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_5.75.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_6.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_6.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_7.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_8.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_8.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_9.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_9.pngnew file

Binary file not shown.

qml/Wizard/Pages/passcode-confirm.qmlnew file+69

This diff is too big to show here.

qml/Wizard/Pages/passcode-desktop.qmlnew file+159

This diff is too big to show here.

qml/Wizard/Pages/passcode-set.qmlnew file+78

This diff is too big to show here.

qml/Wizard/Pages/password-set.qmlnew file+158

This diff is too big to show here.

qml/Wizard/Pages/sim.qmlnew file+108

This diff is too big to show here.

qml/Wizard/PasswordMeter.qmlnew file+108

This diff is too big to show here.

qml/Wizard/StackButton.qmlnew file+42

This diff is too big to show here.

qml/Wizard/Wizard.qmlnew file+58

This diff is too big to show here.

qml/Wizard/WizardItemSelector.qmlnew file+129

This diff is too big to show here.

qml/Wizard/WizardTextField.qmlnew file+25

This diff is too big to show here.

qml/graphics/dropshadow2gu@30.pngnew file

Binary file not shown.

qml/graphics/dropshadow2gu@30.scinew file+5

This diff is too big to show here.

qml/graphics/dropshadow_left@20.pngnew file

Binary file not shown.

qml/graphics/dropshadow_right@20.pngnew file

Binary file not shown.

rundeleted−73

This diff is too big to show here.

run_on_devicedeleted−146

This diff is too big to show here.

runtests.sh+5−14

This diff is too big to show here.

src/ApplicationArguments.cppnew file+22

This diff is too big to show here.

src/ApplicationArguments.hnew file+58

This diff is too big to show here.

src/CMakeLists.txtnew file+64

This diff is too big to show here.

src/CachingNetworkManagerFactory.cppnew file+54

This diff is too big to show here.

src/CachingNetworkManagerFactory.hnew file+47

This diff is too big to show here.

src/DebuggingController.cppnew file+92

This diff is too big to show here.

src/DebuggingController.hnew file+57

This diff is too big to show here.

src/MouseTouchAdaptor.cppnew file+419

This diff is too big to show here.

MouseTouchAdaptor.h → src/MouseTouchAdaptor.hrenamed+32−12

This diff is too big to show here.

src/SecondaryWindow.cppnew file+40

This diff is too big to show here.

src/SecondaryWindow.hnew file+30

This diff is too big to show here.

src/ShellApplication.cppnew file+231

This diff is too big to show here.

src/ShellApplication.hnew file+61

This diff is too big to show here.

src/ShellView.cppnew file+85

This diff is too big to show here.

src/ShellView.hnew file+34

This diff is too big to show here.

src/UnityCommandLineParser.cppnew file+130

This diff is too big to show here.

src/UnityCommandLineParser.hnew file+60

This diff is too big to show here.

src/UnixSignalHandler.cppnew file+139

This diff is too big to show here.

src/UnixSignalHandler.hnew file+54

This diff is too big to show here.

src/libunity8-private/CMakeLists.txtnew file+27

This diff is too big to show here.

src/libunity8-private/abstractdbusservicemonitor.cppnew file+100

This diff is too big to show here.

src/libunity8-private/abstractdbusservicemonitor.hnew file+70

This diff is too big to show here.

src/libunity8-private/unitydbusobject.cppnew file+86

This diff is too big to show here.

src/libunity8-private/unitydbusobject.hnew file+46

This diff is too big to show here.

src/libunity8-private/unitydbusvirtualobject.cppnew file+83

This diff is too big to show here.

src/libunity8-private/unitydbusvirtualobject.hnew file+47

This diff is too big to show here.

src/main.cppnew file+67

This diff is too big to show here.

Dash/Video/VideosCarousel.qml → src/qmldebuggerutils.hrenamed+14−15

This diff is too big to show here.

tests/CMakeLists.txt+149−10

This diff is too big to show here.

tests/autopilot/indicators_client/__init__.pydeleted−8

This diff is too big to show here.

tests/autopilot/indicators_client/emulators/__init__.pydeleted−31

This diff is too big to show here.

tests/autopilot/indicators_client/emulators/common.pydeleted−14

This diff is too big to show here.

tests/autopilot/indicators_client/emulators/main_window.pydeleted−29

This diff is too big to show here.

tests/autopilot/indicators_client/tests/__init__.pydeleted−69

This diff is too big to show here.

tests/autopilot/indicators_client/tests/test_power.pydeleted−96

This diff is too big to show here.

tests/autopilot/setup.pynew file+32

This diff is too big to show here.

tests/autopilot/unity8/__init__.py+146−5

This diff is too big to show here.

tests/autopilot/unity8/application_lifecycle/__init__.pynew file+20

This diff is too big to show here.

tests/autopilot/unity8/application_lifecycle/tests/__init__.pynew file+49

This diff is too big to show here.

tests/autopilot/unity8/application_lifecycle/tests/test_application_lifecycle.pynew file+141

This diff is too big to show here.

tests/autopilot/unity8/application_lifecycle/tests/test_url_dispatcher.pynew file+51

This diff is too big to show here.

tests/autopilot/unity8/emulators/__init__.pydeleted−6

This diff is too big to show here.

tests/autopilot/unity8/emulators/main_window.pydeleted−61

This diff is too big to show here.

tests/autopilot/unity8/fixture_setup.pynew file+329

This diff is too big to show here.

tests/autopilot/unity8/greeter/__init__.pynew file+97

This diff is too big to show here.

tests/autopilot/unity8/greeter/tests/__init__.pynew file+28

This diff is too big to show here.

tests/autopilot/unity8/greeter/tests/test_args.pynew file+49

This diff is too big to show here.

tests/autopilot/unity8/indicators/__init__.pynew file+203

This diff is too big to show here.

tests/autopilot/unity8/indicators/tests/__init__.pynew file+42

This diff is too big to show here.

tests/autopilot/unity8/indicators/tests/test_action_latency.pynew file+237

This diff is too big to show here.

tests/autopilot/unity8/indicators/tests/test_display_indicator.pynew file+52

This diff is too big to show here.

tests/autopilot/unity8/indicators/tests/test_indicators.pynew file+88

This diff is too big to show here.

tests/autopilot/unity8/launcher.pynew file+66

This diff is too big to show here.

tests/autopilot/unity8/process_helpers.pynew file+191

This diff is too big to show here.

tests/autopilot/unity8/sensors.pynew file+93

This diff is too big to show here.

tests/autopilot/unity8/shell/__init__.pynew file+265

This diff is too big to show here.

tests/autopilot/unity8/shell/create_interactive_notification.pynew file+101

This diff is too big to show here.

tests/autopilot/unity8/shell/emulators.pynew file+50

This diff is too big to show here.

tests/autopilot/unity8/shell/fixture_setup.pynew file+65

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/__init__.pynew file+374

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_helpers.pynew file+44

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_lock_screen.pynew file+150

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_notifications.pynew file+725

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_rotation.pynew file+113

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_system_integration.pynew file+48

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_upstart.pynew file+137

This diff is too big to show here.

tests/autopilot/unity8/tests/__init__.pydeleted−79

This diff is too big to show here.

tests/autopilot/unity8/tests/helpers.pydeleted−160

This diff is too big to show here.

tests/autopilot/unity8/tests/testbigscreen.pydeleted−25

This diff is too big to show here.

tests/autopilot/unity8/tests/testhud.pydeleted−145

This diff is too big to show here.

tests/autopilot/unity8/tests/testlockscreen.pydeleted−118

This diff is too big to show here.

tests/copyright/CMakeLists.txt+1−1

This diff is too big to show here.

tests/copyright/check_copyright.sh+35−4

This diff is too big to show here.

tests/data/unity/backgrounds/20x30.pngnew file

Binary file not shown.

tests/data/unity/backgrounds/black.pngnew file

Binary file not shown.

tests/data/unity/backgrounds/blue.pngnew file

Binary file not shown.

tests/data/unity/backgrounds/red.pngnew file

Binary file not shown.

tests/data/unity/indicators/com.canonical.indicator.fake1+5−4

This diff is too big to show here.

tests/data/unity/indicators/com.canonical.indicator.fake2+5−4

This diff is too big to show here.

tests/data/unity/indicators/com.canonical.indicator.fake3+5−4

This diff is too big to show here.

tests/data/unity/indicators/com.canonical.indicator.fake4+5−4

This diff is too big to show here.

tests/graphics/applicationIcons/browser@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/calendar@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/camera@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/contacts-app@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/dash@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/dialer-app@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/evernote@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/facebook@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/gallery@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/gmail@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/libreoffice@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/map@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/messages-app@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/notepad@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/pinterest@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/soundcloud@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/system-settings@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/twitter@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/weather@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/wikipedia@18.pngnew file

Binary file not shown.

tests/graphics/applicationIcons/youtube@18.pngnew file

Binary file not shown.

tests/graphics/avatars/amanda@12.pngnew file

Binary file not shown.

tests/graphics/avatars/anna_olsson@12.pngnew file

Binary file not shown.

tests/graphics/avatars/funky@12.pngnew file

Binary file not shown.

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

Binary file not shown.

tests/graphics/screenshots/gallery@12.pngnew file

Binary file not shown.

tests/imports/CMakeLists.txtnew file+5

This diff is too big to show here.

tests/imports/check_imports.pynew file+183

This diff is too big to show here.

tests/mocks/AccountsService/AccountsService.cppnew file+214

This diff is too big to show here.

tests/mocks/AccountsService/AccountsService.hnew file+148

This diff is too big to show here.

tests/mocks/AccountsService/CMakeLists.txtnew file+24

This diff is too big to show here.

tests/mocks/AccountsService/plugin.cppnew file+37

This diff is too big to show here.

tests/mocks/AccountsService/plugin.hnew file+35

This diff is too big to show here.

tests/mocks/AccountsService/qmldirnew file+3

This diff is too big to show here.

tests/mocks/Biometryd/CMakeLists.txtnew file+14

This diff is too big to show here.

tests/mocks/Biometryd/MockBiometryd.cppnew file+43

This diff is too big to show here.

tests/mocks/Biometryd/MockBiometryd.hnew file+50

This diff is too big to show here.

tests/mocks/Biometryd/MockDevice.cppnew file+29

This diff is too big to show here.

tests/mocks/Biometryd/MockDevice.hnew file+40

This diff is too big to show here.

tests/mocks/Biometryd/MockIdentifier.cppnew file+28

This diff is too big to show here.

tests/mocks/Biometryd/MockIdentifier.hnew file+36

This diff is too big to show here.

Dash/People/Preview/Base.qml → tests/mocks/Biometryd/MockObserver.cpprenamed+5−5

This diff is too big to show here.

tests/mocks/Biometryd/MockObserver.hnew file+37

This diff is too big to show here.

tests/mocks/Biometryd/MockOperation.cppnew file+56

This diff is too big to show here.

tests/mocks/Biometryd/MockOperation.hnew file+47

This diff is too big to show here.

tests/mocks/Biometryd/plugin.cppnew file+41

This diff is too big to show here.

tests/mocks/Biometryd/plugin.hnew file+31

This diff is too big to show here.

tests/mocks/Biometryd/qmldirnew file+3

This diff is too big to show here.

tests/mocks/CMakeLists.txt+52−1

This diff is too big to show here.

tests/mocks/Cursor/CMakeLists.txtnew file+1

This diff is too big to show here.

tests/mocks/Cursor/Cursor.qmlnew file+34

This diff is too big to show here.

tests/mocks/Cursor/qmldirnew file+2

This diff is too big to show here.

tests/mocks/GSettings.1.0/CMakeLists.txtnew file+19

This diff is too big to show here.

tests/mocks/GSettings.1.0/fake_gsettings.cppnew file+417

This diff is too big to show here.

tests/mocks/GSettings.1.0/fake_gsettings.hnew file+180

This diff is too big to show here.

plugins/Unity/categoryfilter.cpp → tests/mocks/GSettings.1.0/plugin.cpprenamed+10−22

This diff is too big to show here.

plugins/HudClient/plugin.h → tests/mocks/GSettings.1.0/plugin.hrenamed+5−5

This diff is too big to show here.

tests/mocks/GSettings.1.0/qmldirnew file+3

This diff is too big to show here.

tests/mocks/LightDM/CMakeLists.txtdeleted−52

This diff is too big to show here.

tests/mocks/LightDM/InfographicModel.cppdeleted−416

This diff is too big to show here.

tests/mocks/LightDM/InfographicModelPrivate.hdeleted−99

This diff is too big to show here.

tests/mocks/LightDM/QLightDM/Greeterdeleted−1

This diff is too big to show here.

tests/mocks/LightDM/QLightDM/InfographicModeldeleted−1

This diff is too big to show here.

tests/mocks/LightDM/QLightDM/UsersModeldeleted−1

This diff is too big to show here.

tests/mocks/LightDM/demo/CMakeLists.txtdeleted−13

This diff is too big to show here.

tests/mocks/LightDM/demo/InfographicModelPrivate.cppdeleted−98

This diff is too big to show here.

tests/mocks/LightDM/full/CMakeLists.txtdeleted−20

This diff is too big to show here.

tests/mocks/LightDM/full/InfographicModelPrivate.cppdeleted−182

This diff is too big to show here.

tests/mocks/LightDM/full/UsersModelPrivate.cppdeleted−52

This diff is too big to show here.

tests/mocks/LightDM/single-passphrase/CMakeLists.txtdeleted−21

This diff is too big to show here.

tests/mocks/LightDM/single-passphrase/GreeterPrivate.cppdeleted−53

This diff is too big to show here.

tests/mocks/LightDM/single-passphrase/InfographicModelPrivate.cppdeleted−61

This diff is too big to show here.

tests/mocks/LightDM/single-pin/CMakeLists.txtdeleted−21

This diff is too big to show here.

tests/mocks/LightDM/single-pin/GreeterPrivate.cppdeleted−53

This diff is too big to show here.

tests/mocks/LightDM/single-pin/InfographicModelPrivate.cppdeleted−61

This diff is too big to show here.

tests/mocks/LightDM/single/CMakeLists.txtdeleted−20

This diff is too big to show here.

tests/mocks/LightDMController/CMakeLists.txtnew file+14

This diff is too big to show here.

tests/mocks/LightDMController/plugin.cppnew file+35

This diff is too big to show here.

tests/qmltests/plugins/HudClient/fake_hud_plugin.h → tests/mocks/LightDMController/plugin.hrenamed+6−8

This diff is too big to show here.

tests/mocks/LightDMController/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Lights/CMakeLists.txtnew file+8

This diff is too big to show here.

tests/mocks/Lights/Lights.cppnew file+84

This diff is too big to show here.

tests/mocks/Lights/Lights.hnew file+66

This diff is too big to show here.

plugins/LightDM/InfographicModel.h → tests/mocks/Lights/plugin.cpprenamed+14−8

This diff is too big to show here.

tests/mocks/Lights/plugin.hnew file+32

This diff is too big to show here.

tests/mocks/Lights/qmldirnew file+3

This diff is too big to show here.

tests/mocks/MeeGo/CMakeLists.txtnew file+1

This diff is too big to show here.

tests/mocks/MeeGo/QOfono/CMakeLists.txtnew file+11

This diff is too big to show here.

tests/mocks/MeeGo/QOfono/MockOfonoSimManager.qmlnew file+53

This diff is too big to show here.

tests/mocks/MeeGo/QOfono/MockQOfono.cppnew file+90

This diff is too big to show here.

tests/mocks/MeeGo/QOfono/MockQOfono.hnew file+61

This diff is too big to show here.

tests/mocks/MeeGo/QOfono/MockQOfonoManager.cppnew file+66

This diff is too big to show here.

tests/mocks/MeeGo/QOfono/MockQOfonoManager.hnew file+49

This diff is too big to show here.

tests/mocks/MeeGo/QOfono/plugin.cppnew file+35

This diff is too big to show here.

tests/mocks/MeeGo/QOfono/plugin.hnew file+31

This diff is too big to show here.

tests/mocks/MeeGo/QOfono/qmldirnew file+3

This diff is too big to show here.

tests/mocks/Powerd/CMakeLists.txtnew file+10

This diff is too big to show here.

tests/mocks/LightDM/single-passphrase/UsersModelPrivate.cpp → tests/mocks/Powerd/Powerd.cpprenamed+13−8

This diff is too big to show here.

tests/mocks/Powerd/Powerd.hnew file+58

This diff is too big to show here.

tests/mocks/Powerd/plugin.cppnew file+35

This diff is too big to show here.

tests/mocks/Powerd/plugin.hnew file+34

This diff is too big to show here.

tests/mocks/Powerd/qmldirnew file+3

This diff is too big to show here.

tests/mocks/QMenuModel/CMakeLists.txtnew file+25

This diff is too big to show here.

tests/mocks/QMenuModel/QDBusActionGroup.qmlnew file+52

This diff is too big to show here.

tests/mocks/LightDM/demo/UsersModelPrivate.cpp → tests/mocks/QMenuModel/UnityMenuAction.qmlrenamed+10−13

This diff is too big to show here.

tests/mocks/QMenuModel/actiondata.hnew file+54

This diff is too big to show here.

Panel/PanelBackground.qml → tests/mocks/QMenuModel/actionstateparser.cpprenamed+3−5

This diff is too big to show here.

tests/mocks/QMenuModel/actionstateparser.hnew file+35

This diff is too big to show here.

modules/Unity/Indicators/qml/messaging/TextMessage.qml → tests/mocks/QMenuModel/dbus-enums.hrenamed+31−12

This diff is too big to show here.

tests/mocks/QMenuModel/plugin.cppnew file+43

This diff is too big to show here.

tests/mocks/QMenuModel/plugin.hnew file+34

This diff is too big to show here.

tests/mocks/QMenuModel/qmldirnew file+6

This diff is too big to show here.

tests/mocks/QMenuModel/unitymenumodel.cppnew file+310

This diff is too big to show here.

tests/mocks/QMenuModel/unitymenumodel.hnew file+115

This diff is too big to show here.

tests/mocks/QtMultimedia/CMakeLists.txtnew file+15

This diff is too big to show here.

tests/mocks/QtMultimedia/VideoSurface.qmlnew file+111

This diff is too big to show here.

tests/mocks/QtMultimedia/declarativeplaylist.cppnew file+73

This diff is too big to show here.

tests/mocks/QtMultimedia/declarativeplaylist.hnew file+54

This diff is too big to show here.

tests/mocks/QtMultimedia/mediaplayer.cppnew file+319

This diff is too big to show here.

tests/mocks/QtMultimedia/mediaplayer.hnew file+224

This diff is too big to show here.

tests/mocks/QtMultimedia/plugin.cppnew file+35

This diff is too big to show here.

tests/mocks/QtMultimedia/plugin.hnew file+34

This diff is too big to show here.

tests/mocks/QtMultimedia/qmldirnew file+3

This diff is too big to show here.

tests/mocks/QtMultimedia/videooutput.cppnew file+127

This diff is too big to show here.

tests/mocks/QtMultimedia/videooutput.hnew file+52

This diff is too big to show here.

tests/mocks/SessionBroadcast/CMakeLists.txtnew file+8

This diff is too big to show here.

plugins/Unity/bottombarvisibilitycommunicatorshell.cpp → tests/mocks/SessionBroadcast/SessionBroadcast.cpprenamed+10−11

This diff is too big to show here.

tests/mocks/SessionBroadcast/SessionBroadcast.hnew file+39

This diff is too big to show here.

plugins/HudClient/plugin.cpp → tests/mocks/SessionBroadcast/plugin.cpprenamed+10−15

This diff is too big to show here.

tests/mocks/SessionBroadcast/plugin.hnew file+32

This diff is too big to show here.

tests/mocks/SessionBroadcast/qmldirnew file+2

This diff is too big to show here.

tests/mocks/UInput/CMakeLists.txtnew file+7

This diff is too big to show here.

tests/mocks/UInput/mockuinput.cppnew file+73

This diff is too big to show here.

tests/mocks/UInput/mockuinput.hnew file+63

This diff is too big to show here.

tests/mocks/UInput/plugin.cppnew file+26

This diff is too big to show here.

tests/mocks/UInput/plugin.hnew file+32

This diff is too big to show here.

tests/mocks/UInput/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Ubuntu/Application/ApplicationImage.cppdeleted−123

This diff is too big to show here.

tests/mocks/Ubuntu/Application/ApplicationImage.hdeleted−79

This diff is too big to show here.

tests/mocks/Ubuntu/Application/ApplicationInfo.cppdeleted−91

This diff is too big to show here.

tests/mocks/Ubuntu/Application/ApplicationInfo.hdeleted−103

This diff is too big to show here.

tests/mocks/Ubuntu/Application/ApplicationManager.cppdeleted−449

This diff is too big to show here.

tests/mocks/Ubuntu/Application/ApplicationManager.hdeleted−123

This diff is too big to show here.

tests/mocks/Ubuntu/Application/CMakeLists.txtdeleted−35

This diff is too big to show here.

tests/mocks/Ubuntu/Application/plugin.cppdeleted−38

This diff is too big to show here.

tests/mocks/Ubuntu/Application/qmldirdeleted−3

This diff is too big to show here.

tests/mocks/Ubuntu/CMakeLists.txt+6−1

This diff is too big to show here.

tests/mocks/Ubuntu/Connectivity/CMakeLists.txtnew file+10

This diff is too big to show here.

tests/mocks/Ubuntu/Connectivity/networking-status.cppnew file+70

This diff is too big to show here.

tests/mocks/Ubuntu/Connectivity/networking-status.hnew file+74

This diff is too big to show here.

tests/mocks/Ubuntu/Connectivity/plugin.cppnew file+47

This diff is too big to show here.

tests/mocks/Ubuntu/Connectivity/plugin.hnew file+35

This diff is too big to show here.

tests/mocks/Ubuntu/Connectivity/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Ubuntu/DownloadDaemonListener/CMakeLists.txtnew file+10

This diff is too big to show here.

tests/mocks/Ubuntu/DownloadDaemonListener/MockDownloadTracker.cppnew file+74

This diff is too big to show here.

tests/mocks/Ubuntu/DownloadDaemonListener/MockDownloadTracker.hnew file+67

This diff is too big to show here.

Components/Math.js → tests/mocks/Ubuntu/DownloadDaemonListener/plugin.cpprenamed+9−8

This diff is too big to show here.

tests/mocks/Ubuntu/Application/plugin.h → tests/mocks/Ubuntu/DownloadDaemonListener/plugin.hrenamed+2−2

This diff is too big to show here.

tests/mocks/Ubuntu/DownloadDaemonListener/qmldirnew file+3

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/CMakeLists.txtnew file+5

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/Diagnostics/CMakeLists.txtnew file+1

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/Diagnostics/MockDiagnostics.qmlnew file+24

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/Diagnostics/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/CMakeLists.txtnew file+1

This diff is too big to show here.

tests/qmltests/plugins/Dee/DeeVariantText.qml → tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/MockKeyboardPlugin.qmlrenamed+3−4

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/MockLanguagePlugin.qmlnew file+24

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/qmldirnew file+3

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/CMakeLists.txtnew file+10

This diff is too big to show here.

plugins/Utils/ubuntuwindow.cpp → tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/MockSecurityPrivacy.cpprenamed+10−11

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/MockSecurityPrivacy.hnew file+50

This diff is too big to show here.

modules/Unity/Indicators/Network/plugin.cpp → tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/plugin.cpprenamed+6−11

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/plugin.hnew file+31

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/TimeDate/CMakeLists.txtnew file+1

This diff is too big to show here.

Components/ListItems/ThinDivider.qml → tests/mocks/Ubuntu/SystemSettings/TimeDate/MockTimeDate.qmlrenamed+18−12

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/TimeDate/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/Update/CMakeLists.txtnew file+1

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/Update/MockSystemImage.qmlnew file+30

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/Update/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/CMakeLists.txtnew file+14

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/ContactWatcherData.cppnew file+43

This diff is too big to show here.

plugins/Utils/ubuntuwindow.h → tests/mocks/Ubuntu/Telephony/ContactWatcherData.hrenamed+18−14

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/MockCallEntry.cppnew file+91

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/MockCallEntry.hnew file+65

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/MockCallManager.cppnew file+80

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/MockCallManager.hnew file+60

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/MockContactWatcher.cppnew file+50

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/MockContactWatcher.hnew file+49

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/MockTelepathyHelper.cppnew file+62

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/MockTelepathyHelper.hnew file+58

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/plugin.cppnew file+52

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/plugin.hnew file+37

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Ubuntu/Thumbnailer/CMakeLists.txtnew file+1

This diff is too big to show here.

tests/mocks/Ubuntu/Thumbnailer/qmldirnew file+4

This diff is too big to show here.

tests/mocks/Ubuntu/Web/CMakeLists.txtnew file+1

This diff is too big to show here.

tests/qmltests/Dash/qml/fake_lensView2.qml → tests/mocks/Ubuntu/Web/WebView.qmlrenamed+7−6

This diff is too big to show here.

tests/mocks/Ubuntu/Web/qmldirnew file+4

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationInfo.cppnew file+420

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationInfo.hnew file+158

This diff is too big to show here.

tests/mocks/Ubuntu/Application/ApplicationListModel.cpp → tests/mocks/Unity/Application/ApplicationListModel.cpprenamed

The content is the same.

tests/mocks/Ubuntu/Application/ApplicationListModel.h → tests/mocks/Unity/Application/ApplicationListModel.hrenamed

The content is the same.

tests/mocks/Unity/Application/ApplicationManager.cppnew file+569

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationManager.hnew file+117

This diff is too big to show here.

tests/mocks/Unity/Application/CMakeLists.txtnew file+35

This diff is too big to show here.

tests/mocks/Unity/Application/MirMock.cppnew file+62

This diff is too big to show here.

tests/mocks/Unity/Application/MirMock.hnew file+43

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurface.cppnew file+559

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurface.hnew file+237

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceItem.cppnew file+415

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceItem.hnew file+138

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceListModel.cppnew file+136

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceListModel.hnew file+54

This diff is too big to show here.

tests/mocks/Unity/Application/ObjectListModel.hnew file+108

This diff is too big to show here.

tests/mocks/Unity/Application/SurfaceManager.cppnew file+281

This diff is too big to show here.

tests/mocks/Unity/Application/SurfaceManager.hnew file+116

This diff is too big to show here.

tests/mocks/Unity/Application/VirtualKeyboard.cppnew file+58

This diff is too big to show here.

tests/mocks/Unity/Application/VirtualKeyboard.hnew file+37

This diff is too big to show here.

tests/mocks/Unity/Application/plugin.cppnew file+68

This diff is too big to show here.

tests/mocks/Unity/Application/plugin.hnew file+31

This diff is too big to show here.

tests/mocks/Unity/Application/qmldirnew file+3

This diff is too big to show here.

tests/mocks/Unity/Application/resources/Kate.qmlnew file+49

This diff is too big to show here.

tests/mocks/Unity/Application/resources/KateDialog.qmlnew file+48

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/edgeDragExample.qml → tests/mocks/Unity/Application/resources/KateMenu.qmlrenamed+17−16

This diff is too big to show here.

tests/mocks/Unity/Application/resources/MirSurfaceItem.qmlnew file+126

This diff is too big to show here.

tests/mocks/Unity/Application/resources/VirtualKeyboard.qmlnew file+41

This diff is too big to show here.

tests/mocks/Unity/Application/resources/screenshots/browser@12.pngnew file

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/camera@12.pngnew file

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/dialer@12.pngnew file

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/facebook@12.pngnew file

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/gallery@12.pngnew file

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/gmail-webapp.svgnew file+343

This diff is too big to show here.

tests/mocks/Unity/Application/resources/screenshots/libreoffice@12.pngnew file

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/map@12.pngnew file

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/music@12.pngnew file

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/twitter@12.pngnew file

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/ubuntu-weather-app.svgnew file+201

This diff is too big to show here.

tests/mocks/Unity/Application/resources/screenshots/unity8-dash@12.pngnew file

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/vkb_portrait.pngnew file

Binary file not shown.

tests/mocks/Unity/Application/resources/surfaces.qrcnew file+23

This diff is too big to show here.

tests/mocks/Unity/Application/resources/vkb_portrait.pngnew file

Binary file not shown.

tests/mocks/Unity/ApplicationMenu/CMakeLists.txtnew file+18

This diff is too big to show here.

tests/mocks/Unity/ApplicationMenu/mockapplicationmenuregistry.cppnew file+47

This diff is too big to show here.

tests/mocks/Unity/ApplicationMenu/mockapplicationmenuregistry.hnew file+41

This diff is too big to show here.

tests/mocks/Unity/ApplicationMenu/plugin.cppnew file+42

This diff is too big to show here.

tests/mocks/Unity/ApplicationMenu/plugin.hnew file+32

This diff is too big to show here.

tests/mocks/Unity/ApplicationMenu/qmldirnew file+3

This diff is too big to show here.

tests/mocks/Unity/CMakeLists.txtnew file+9

This diff is too big to show here.

tests/mocks/Unity/Connectivity/CMakeLists.txtnew file+10

This diff is too big to show here.

tests/qmltests/Dash/qml/fake_lensView1.qml → tests/mocks/Unity/Connectivity/MockConnectivity.cpprenamed+9−6

This diff is too big to show here.

tests/mocks/Unity/Connectivity/MockConnectivity.hnew file+36

This diff is too big to show here.

tests/mocks/Unity/Connectivity/plugin.cppnew file+34

This diff is too big to show here.

tests/mocks/Unity/Connectivity/plugin.hnew file+31

This diff is too big to show here.

tests/mocks/Unity/Connectivity/qmldirnew file+3

This diff is too big to show here.

tests/mocks/Unity/Indicators/ActionRootState.qmlnew file+46

This diff is too big to show here.

tests/mocks/Unity/Indicators/CMakeLists.txtnew file+39

This diff is too big to show here.

tests/mocks/Unity/Indicators/IndicatorsModel.qmlnew file+261

This diff is too big to show here.

tests/mocks/Unity/Indicators/ModelActionRootState.qmlnew file+81

This diff is too big to show here.

tests/mocks/Unity/Indicators/fakeindicatorsmodel.cppnew file+157

This diff is too big to show here.

tests/mocks/Unity/Indicators/fakeindicatorsmodel.hnew file+70

This diff is too big to show here.

tests/mocks/Unity/Indicators/fakeindicatorsmodeldata.jsnew file+1328

This diff is too big to show here.

tests/mocks/Unity/Indicators/fakeplugin.cppnew file+64

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/plugin.h → tests/mocks/Unity/Indicators/fakeplugin.hrenamed+1−1

This diff is too big to show here.

tests/mocks/Unity/Indicators/fakeunitymenumodelcache.cppnew file+59

This diff is too big to show here.

tests/mocks/Unity/Indicators/fakeunitymenumodelcache.hnew file+45

This diff is too big to show here.

tests/mocks/Unity/Indicators/qmldirnew file+7

This diff is too big to show here.

tests/mocks/Unity/InputInfo/CMakeLists.txtnew file+31

This diff is too big to show here.

modules/Unity/Indicators/qml/SwitchMenu.qml → tests/mocks/Unity/InputInfo/mockcontroller.cpprenamed+14−19

This diff is too big to show here.

tests/mocks/Unity/InputInfo/mockcontroller.hnew file+34

This diff is too big to show here.

tests/mocks/Unity/InputInfo/plugin.cppnew file+46

This diff is too big to show here.

tests/mocks/Unity/InputInfo/plugin.hnew file+30

This diff is too big to show here.

tests/mocks/Unity/InputInfo/qinputdeviceinfo_mock.cppnew file+56

This diff is too big to show here.

tests/mocks/Unity/InputInfo/qinputdeviceinfo_mock_p.hnew file+58

This diff is too big to show here.

tests/mocks/Unity/InputInfo/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Unity/Launcher/CMakeLists.txtnew file+24

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockAppDrawerModel.cppnew file+98

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockAppDrawerModel.hnew file+43

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockLauncherItem.cppnew file+228

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockLauncherItem.hnew file+91

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockLauncherModel.cppnew file+301

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockLauncherModel.hnew file+72

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockQuickListModel.cppnew file+52

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockQuickListModel.hnew file+40

This diff is too big to show here.

tests/mocks/Unity/Launcher/plugin.cppnew file+52

This diff is too big to show here.

tests/mocks/Unity/Launcher/plugin.hnew file+35

This diff is too big to show here.

tests/mocks/Unity/Launcher/qmldirnew file+3

This diff is too big to show here.

tests/mocks/Unity/Notifications/CMakeLists.txtnew file+16

This diff is too big to show here.

tests/mocks/Unity/Notifications/MockActionModel.cppnew file+74

This diff is too big to show here.

tests/mocks/Unity/Notifications/MockActionModel.hnew file+53

This diff is too big to show here.

tests/mocks/Unity/Notifications/MockNotification.cppnew file+198

This diff is too big to show here.

tests/mocks/Unity/Notifications/MockNotification.hnew file+101

This diff is too big to show here.

tests/mocks/Unity/Notifications/MockNotificationModel.cppnew file+169

This diff is too big to show here.

tests/mocks/Unity/Notifications/MockNotificationModel.hnew file+70

This diff is too big to show here.

Panel/Indicators/MessagingIndicatorPage.qml → tests/mocks/Unity/Notifications/plugin.cpprenamed+13−15

This diff is too big to show here.

tests/mocks/Unity/Notifications/plugin.hnew file+34

This diff is too big to show here.

tests/mocks/Unity/Notifications/qmldirnew file+4

This diff is too big to show here.

tests/mocks/Unity/Platform/CMakeLists.txtnew file+1

This diff is too big to show here.

tests/qmltests/Dash/qml/fake_generic_lensView.qml → tests/mocks/Unity/Platform/MockPlatform.qmlrenamed+7−6

This diff is too big to show here.

tests/mocks/Unity/Platform/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Unity/Screens/CMakeLists.txtnew file+14

This diff is too big to show here.

tests/mocks/Unity/Screens/plugin.cppnew file+29

This diff is too big to show here.

tests/mocks/Unity/Screens/plugin.hnew file+25

This diff is too big to show here.

tests/mocks/Unity/Screens/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Unity/Screens/screens.cppnew file+71

This diff is too big to show here.

tests/mocks/Unity/Screens/screens.hnew file+82

This diff is too big to show here.

tests/mocks/Utils/CMakeLists.txtnew file+61

This diff is too big to show here.

tests/mocks/Utils/EdgeBarrierSettings.qmlnew file+22

This diff is too big to show here.

tests/mocks/Utils/Style.jsnew file+37

This diff is too big to show here.

Hud/ToolBarIcon.qml → tests/mocks/Utils/URLDispatcher.cpprenamed+17−13

This diff is too big to show here.

tests/mocks/Utils/URLDispatcher.hnew file+47

This diff is too big to show here.

SideStage/SidestageHandle.qml → tests/mocks/Utils/WindowInputMonitor.qmlrenamed+6−5

This diff is too big to show here.

modules/Unity/Indicators/qml/HLine.qml → tests/mocks/Utils/constants.cpprenamed+10−13

This diff is too big to show here.

tests/mocks/Utils/constants.hnew file+43

This diff is too big to show here.

tests/mocks/Utils/plugin.cppnew file+93

This diff is too big to show here.

tests/mocks/Utils/plugin.hnew file+32

This diff is too big to show here.

tests/mocks/Utils/qmldirnew file+6

This diff is too big to show here.

tests/mocks/Utils/windowstatestorage.cppnew file+100

This diff is too big to show here.

tests/mocks/Utils/windowstatestorage.hnew file+77

This diff is too big to show here.

tests/mocks/Wizard/CMakeLists.txtnew file+20

This diff is too big to show here.

tests/mocks/Wizard/MockSystem.cppnew file+64

This diff is too big to show here.

tests/mocks/Wizard/MockSystem.hnew file+61

This diff is too big to show here.

tests/mocks/Wizard/mockplugin.cppnew file+38

This diff is too big to show here.

tests/mocks/Wizard/mockplugin.hnew file+32

This diff is too big to show here.

tests/mocks/Wizard/qmldirnew file+3

This diff is too big to show here.

tests/mocks/data/applications/webbrowser-app.desktopnew file

No changes to the content.

tests/mocks/data/unity/indicators/com.canonical.indicator.mocknew file+10

This diff is too big to show here.

tests/mocks/indicator-service/CMakeLists.txtnew file+19

This diff is too big to show here.

tests/mocks/indicator-service/mock-indicator-service.cnew file+325

This diff is too big to show here.

tests/mocks/liblightdm/CMakeLists.txtnew file+18

This diff is too big to show here.

tests/mocks/LightDM/full/GreeterPrivate.cpp → tests/mocks/liblightdm/GreeterPrivate.cpprenamed+44−10

This diff is too big to show here.

tests/mocks/liblightdm/GreeterPrivate.hnew file+54

This diff is too big to show here.

tests/mocks/liblightdm/MockController.cppnew file+192

This diff is too big to show here.

tests/mocks/liblightdm/MockController.hnew file+106

This diff is too big to show here.

tests/mocks/liblightdm/MockGreeter.cppnew file+316

This diff is too big to show here.

tests/mocks/liblightdm/MockGreeter.hnew file+102

This diff is too big to show here.

tests/mocks/liblightdm/MockSessionsModel.cppnew file+118

This diff is too big to show here.

tests/mocks/liblightdm/MockSessionsModel.hnew file+64

This diff is too big to show here.

tests/mocks/liblightdm/MockUsersModel.cppnew file+220

This diff is too big to show here.

tests/mocks/liblightdm/MockUsersModel.hnew file+61

This diff is too big to show here.

tests/mocks/liblightdm/SessionsModelPrivate.cppnew file+83

This diff is too big to show here.

tests/mocks/liblightdm/SessionsModelPrivate.hnew file+63

This diff is too big to show here.

tests/mocks/liblightdm/UsersModelPrivate.cppnew file+124

This diff is too big to show here.

tests/mocks/LightDM/UsersModelPrivate.h → tests/mocks/liblightdm/UsersModelPrivate.hrenamed+8−3

This diff is too big to show here.

tests/mocks/liblightdm/demo/CMakeLists.txtnew file+21

This diff is too big to show here.

tests/mocks/LightDM/demo/GreeterPrivate.cpp → tests/mocks/liblightdm/demo/GreeterPrivate.cpprenamed+6−2

This diff is too big to show here.

tests/mocks/LightDM/single-pin/UsersModelPrivate.cpp → tests/mocks/liblightdm/demo/UsersModelPrivate.cpprenamed+11−3

This diff is too big to show here.

tests/mocks/LightDM/qmldir → tests/mocks/liblightdm/qmldirrenamed+1

This diff is too big to show here.

tests/mocks/libusermetrics/CMakeLists.txtnew file+22

This diff is too big to show here.

tests/mocks/libusermetrics/ColorTheme.cppnew file+132

This diff is too big to show here.

tests/mocks/libusermetrics/ColorTheme.hnew file+69

This diff is too big to show here.

tests/mocks/libusermetrics/UserMetrics.cppnew file+499

This diff is too big to show here.

tests/mocks/LightDM/InfographicModel.h → tests/mocks/libusermetrics/UserMetrics.hrenamed+24−60

This diff is too big to show here.

tests/modules/CMakeLists.txtdeleted−1

This diff is too big to show here.

tests/modules/Unity/CMakeLists.txtdeleted−1

This diff is too big to show here.

tests/modules/Unity/Indicators/CMakeLists.txtdeleted−27

This diff is too big to show here.

tests/modules/Unity/Indicators/indicatorsmodeltest.cppdeleted−101

This diff is too big to show here.

tests/plugins/AccountsService/AccountsServer.cppnew file+57

This diff is too big to show here.

tests/plugins/AccountsService/AccountsServer.hnew file+44

This diff is too big to show here.

tests/plugins/AccountsService/CMakeLists.txtnew file+67

This diff is too big to show here.

tests/plugins/AccountsService/PropertiesServer.cppnew file+142

This diff is too big to show here.

tests/plugins/AccountsService/PropertiesServer.hnew file+58

This diff is too big to show here.

tests/plugins/AccountsService/UscServer.cppnew file+28

This diff is too big to show here.

tests/plugins/AccountsService/UscServer.hnew file+39

This diff is too big to show here.

tests/plugins/AccountsService/client.cppnew file+355

This diff is too big to show here.

tests/plugins/AccountsService/interfaces.xmlnew file+70

This diff is too big to show here.

tests/plugins/AccountsService/server.cppnew file+57

This diff is too big to show here.

tests/plugins/AccountsService/types.hnew file+25

This diff is too big to show here.

tests/plugins/CMakeLists.txt+10−1

This diff is too big to show here.

tests/plugins/Cursor/CMakeLists.txtnew file+8

This diff is too big to show here.

tests/plugins/Cursor/TextEntry.qmlnew file+34

This diff is too big to show here.

tests/plugins/Cursor/tst_Cursor.qmlnew file+151

This diff is too big to show here.

tests/plugins/GlobalShortcut/CMakeLists.txtnew file+19

This diff is too big to show here.

tests/plugins/GlobalShortcut/GlobalShortcutTest.cppnew file+78

This diff is too big to show here.

tests/plugins/GlobalShortcut/shortcut.qmlnew file+39

This diff is too big to show here.

modules/CMakeLists.txt → tests/plugins/Greeter/CMakeLists.txtrenamed

The content is the same.

tests/plugins/Greeter/Unity/CMakeLists.txtnew file+1

This diff is too big to show here.

tests/plugins/Greeter/Unity/Launcher/CMakeLists.txtnew file+42

This diff is too big to show here.

tests/plugins/Greeter/Unity/Launcher/launchermodelastest.cppnew file+240

This diff is too big to show here.

tests/plugins/LightDM/CMakeLists.txtnew file+1

This diff is too big to show here.

tests/plugins/LightDM/IntegratedLightDM/CMakeLists.txtnew file+157

This diff is too big to show here.

tests/plugins/LightDM/IntegratedLightDM/dbus.cppnew file+223

This diff is too big to show here.

Components/BaseCarouselDelegate.qml → tests/plugins/LightDM/IntegratedLightDM/greeter.qmlrenamed+4−5

This diff is too big to show here.

tests/plugins/LightDM/IntegratedLightDM/integrated.cppnew file+88

This diff is too big to show here.

tests/plugins/LightDM/IntegratedLightDM/pam.cppnew file+54

This diff is too big to show here.

tests/plugins/LightDM/IntegratedLightDM/promptsmodel.cppnew file+175

This diff is too big to show here.

tests/plugins/LightDM/IntegratedLightDM/sessionsmodel.cppnew file+134

This diff is too big to show here.

tests/plugins/LightDM/IntegratedLightDM/usersmodel.cppnew file+168

This diff is too big to show here.

tests/plugins/SessionBroadcast/BroadcastServer.cppnew file+33

This diff is too big to show here.

tests/plugins/SessionBroadcast/BroadcastServer.hnew file+40

This diff is too big to show here.

tests/plugins/SessionBroadcast/CMakeLists.txtnew file+51

This diff is too big to show here.

tests/plugins/SessionBroadcast/interfaces.xmlnew file+18

This diff is too big to show here.

tests/plugins/SessionBroadcast/server.cppnew file+37

This diff is too big to show here.

tests/plugins/SessionBroadcast/sessionbroadcasttest.cppnew file+111

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/CMakeLists.txt+52−37

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/DownwardsLauncher.qmldeleted−87

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/GestureTest.cppnew file+193

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/GestureTest.hnew file+102

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/LeftwardsLauncher.qmldeleted−90

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/RightwardsLauncher.qmldeleted−87

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/TestItem.cppnew file+30

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/TestItem.hnew file+33

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/UpwardsLauncher.qmldeleted−90

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget2.qml → tests/plugins/Ubuntu/Gestures/empty.qmlrenamed+5−6

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/touchGateExample.qmlnew file+27

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_AxisVelocityCalculator.cpp+41−29

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cppdeleted−463

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_FloatingFlickable.cppnew file+131

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_FloatingFlickable.qmlnew file+81

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_PressedOutsideNotifier.cppnew file+150

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_PressedOutsideNotifier.qmlnew file+62

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_TouchDispatcher.cppnew file+148

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_TouchGate.cppnew file+392

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_TouchGestureArea.cppnew file+300

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_TouchGestureArea.qmlnew file+90

This diff is too big to show here.

tests/plugins/Unity/CMakeLists.txtnew file+4

This diff is too big to show here.

tests/plugins/Unity/Indicators/CMakeLists.txtnew file+46

This diff is too big to show here.

tests/modules/Unity/Indicators/indicatorsmanagertest.cpp → tests/plugins/Unity/Indicators/IndicatorsManagerTest.cpprenamed+56−11

This diff is too big to show here.

tests/plugins/Unity/Indicators/IndicatorsModelTest.cppnew file+141

This diff is too big to show here.

tests/plugins/Unity/Indicators/MenuContentActivatorTest.cppnew file+303

This diff is too big to show here.

tests/plugins/Unity/Indicators/RootActionStateTest.cppnew file+95

This diff is too big to show here.

tests/plugins/Unity/Indicators/SharedUnityMenuModelTest.cppnew file+102

This diff is too big to show here.

tests/plugins/Unity/Indicators/UnityMenuModelStackTest.cppnew file+201

This diff is too big to show here.

tests/plugins/Unity/Launcher/CMakeLists.txtnew file+105

This diff is too big to show here.

tests/plugins/Unity/Launcher/appdrawermodeltest.cppnew file+68

This diff is too big to show here.

tests/plugins/Unity/Launcher/applications/abs-icon.desktopnew file+4

This diff is too big to show here.

tests/plugins/Unity/Launcher/applications/click-icon.desktopnew file+5

This diff is too big to show here.

tests/plugins/Unity/Launcher/applications/click-icon.svgnew file

No changes to the content.

tests/plugins/Unity/Launcher/applications/no-name.desktopnew file+3

This diff is too big to show here.

tests/plugins/Unity/Launcher/applications/rel-icon.desktopnew file+4

This diff is too big to show here.

tests/plugins/Unity/Launcher/applications/rel-icon.svgnew file

No changes to the content.

tests/plugins/Unity/Launcher/gsettings.cppnew file+45

This diff is too big to show here.

tests/plugins/Unity/Launcher/gsettings.hnew file+47

This diff is too big to show here.

tests/plugins/Unity/Launcher/launchermodeltest.cppnew file+836

This diff is too big to show here.

tests/plugins/Unity/Launcher/ualwrapper.cppnew file+58

This diff is too big to show here.

tests/plugins/Unity/Launcher/ualwrapper.hnew file+55

This diff is too big to show here.

tests/mocks/LightDM/single/GreeterPrivate.cpp → tests/plugins/Unity/Launcher/xdgwatcher.cpprenamed+17−20

This diff is too big to show here.

plugins/Unity/categoryfilter.h → tests/plugins/Unity/Launcher/xdgwatcher.hrenamed+15−24

This diff is too big to show here.

tests/plugins/Unity/Platform/CMakeLists.txtnew file+30

This diff is too big to show here.

tests/plugins/Unity/Platform/platformtest.cppnew file+142

This diff is too big to show here.

tests/plugins/Unity/Session/CMakeLists.txtnew file+72

This diff is too big to show here.

tests/plugins/Unity/Session/LightDMServer.cppnew file+29

This diff is too big to show here.

tests/plugins/Unity/Session/LightDMServer.hnew file+38

This diff is too big to show here.

tests/plugins/Unity/Session/LogindServer.cppnew file+43

This diff is too big to show here.

tests/plugins/Unity/Session/LogindServer.hnew file+48

This diff is too big to show here.

tests/plugins/Unity/Session/interfaces.xmlnew file+29

This diff is too big to show here.

tests/plugins/Unity/Session/preload.cnew file+43

This diff is too big to show here.

tests/plugins/Unity/Session/server.cppnew file+50

This diff is too big to show here.

tests/plugins/Unity/Session/sessionbackendtest.cppnew file+289

This diff is too big to show here.

tests/plugins/Utils/CMakeLists.txt+34−19

This diff is too big to show here.

tests/plugins/Utils/DeviceConfigParserTest.cppnew file+76

This diff is too big to show here.

tests/plugins/Utils/modeltest.cpp → tests/plugins/Utils/ModelTest.cpprenamed+25−42

This diff is too big to show here.

tests/plugins/Utils/modeltest.h → tests/plugins/Utils/ModelTest.hrenamed

The content is the same.

tests/plugins/Utils/qlimitproxymodeltest.cpp → tests/plugins/Utils/QLimitProxyModelTest.cpprenamed+176−36

This diff is too big to show here.

tests/plugins/Utils/URLDispatcherTest.cppnew file+78

This diff is too big to show here.

tests/plugins/Utils/qsortfilterproxymodeltest.cpp → tests/plugins/Utils/UnitySortFilterProxyModelTest.cpprenamed+25−25

This diff is too big to show here.

tests/plugins/Utils/WindowInputMonitorTest.cppnew file+461

This diff is too big to show here.

tests/plugins/Utils/WindowStateStorageTest.cppnew file+121

This diff is too big to show here.

tests/plugins/Utils/tst_UtilsStyle.qmlnew file+47

This diff is too big to show here.

tests/plugins/WindowManager/CMakeLists.txtnew file+36

This diff is too big to show here.

tests/plugins/WindowManager/UnityApplicationMocks.hnew file+211

This diff is too big to show here.

tests/plugins/WindowManager/tst_TopLevelWindowModel.cppnew file+193

This diff is too big to show here.

tests/plugins/Wizard/CMakeLists.txtnew file+24

This diff is too big to show here.

tests/plugins/Wizard/tst_pagelist.cppnew file+183

This diff is too big to show here.

tests/plugins/Wizard/tst_system.cppnew file+124

This diff is too big to show here.

tests/qmltests/ApplicationMenuDataLoader.qmlnew file+99

This diff is too big to show here.

tests/qmltests/ApplicationMenus/tst_MenuBar.qmlnew file+437

This diff is too big to show here.

tests/qmltests/ApplicationMenus/tst_MenuPopup.qmlnew file+361

This diff is too big to show here.

tests/qmltests/CMakeLists.txt+72−72

This diff is too big to show here.

tests/qmltests/Components/CMakeLists.txtnew file+51

This diff is too big to show here.

tests/qmltests/Components/RevealingRectangle.qmldeleted−78

This diff is too big to show here.

tests/qmltests/Components/tst_AnimationControllerWithSignals.qmldeleted−142

This diff is too big to show here.

tests/qmltests/Components/tst_Background.qmlnew file+91

This diff is too big to show here.

tests/qmltests/Components/tst_Carousel.qmldeleted−194

This diff is too big to show here.

tests/qmltests/Components/tst_CrossFadeImage.qmldeleted−125

This diff is too big to show here.

tests/qmltests/Components/tst_Dialogs.qmlnew file+112

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle.cppnew file+504

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle.qmlnew file+222

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle/BidirectionalShowable.qmlnew file+69

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle/BottomEdgeShowable.qml+108

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle/LeftEdgeShowable.qml+100

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle/RightEdgeShowable.qml+108

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle/SimpleButton.qml+15−14

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle/TopEdgeShowable.qml+100

This diff is too big to show here.

tests/qmltests/Components/tst_DraggingArea.qml+8−8

This diff is too big to show here.

tests/qmltests/Components/tst_EdgeDragEvaluator.cpp+166

This diff is too big to show here.

tests/qmltests/Components/tst_EdgeDragEvaluator.qml+9−7

This diff is too big to show here.

tests/qmltests/Components/tst_FilterGrid.qml−186

This diff is too big to show here.

tests/qmltests/Components/tst_LazyImage.qml+210

This diff is too big to show here.

tests/qmltests/Components/tst_LazyImage/ImageControls.qml+67

This diff is too big to show here.

tests/qmltests/Components/tst_LazyImage/portrait.png

This diff is too big to show here.

tests/qmltests/Components/tst_LazyImage/square.png

This diff is too big to show here.

tests/qmltests/Components/tst_LazyImage/wide.png

This diff is too big to show here.

tests/qmltests/Components/tst_ListViewWithPageHeader.qml−351

This diff is too big to show here.

tests/qmltests/Components/tst_Lockscreen.qml+474

This diff is too big to show here.

tests/qmltests/Components/tst_MathLocal.qml−91

This diff is too big to show here.

tests/qmltests/Components/tst_MediaServices.qml+231

This diff is too big to show here.

tests/qmltests/Components/tst_ModeSwitchWarningDialog.qml+75

This diff is too big to show here.

tests/qmltests/Components/tst_OpenEffect.qml−71

This diff is too big to show here.

tests/qmltests/Components/tst_PageHeader.qml−186

This diff is too big to show here.

tests/qmltests/Components/tst_PhysicalKeysMapper.qml+174

This diff is too big to show here.

tests/qmltests/Components/tst_Rating.qml+86

This diff is too big to show here.

tests/qmltests/Components/tst_RatingStars.qml−62

This diff is too big to show here.

tests/qmltests/Components/tst_ResponsiveFlowView.qml−192

This diff is too big to show here.

tests/qmltests/Components/tst_ResponsiveGridView.qml−193

This diff is too big to show here.

tests/qmltests/Components/tst_Revealer.qml−262

This diff is too big to show here.

tests/qmltests/Components/tst_SharingPicker.qml+73

This diff is too big to show here.

tests/qmltests/Components/tst_Showable.qml+43−3

This diff is too big to show here.

tests/qmltests/Components/tst_Stage.qml−278

This diff is too big to show here.

tests/qmltests/Components/tst_Stage/FakeApplicationScreenshot.qml−53

This diff is too big to show here.

tests/qmltests/Components/tst_Tile.qml−71

This diff is too big to show here.

tests/qmltests/Components/tst_TimeLocal.qml−117

This diff is too big to show here.

tests/qmltests/Components/tst_VirtualTouchPad.qml+197

This diff is too big to show here.

tests/qmltests/Components/tst_Wallpaper.qml+118

This diff is too big to show here.

tests/qmltests/Components/tst_WallpaperResolver.qml+161

This diff is too big to show here.

tests/qmltests/Components/tst_ZoomableImage.qml+204

This diff is too big to show here.

tests/qmltests/Dash/Apps/tst_RunningApplicationsGrid.qml−204

This diff is too big to show here.

tests/qmltests/Dash/People/tst_PeopleFilterGrid.qml−154

This diff is too big to show here.

tests/qmltests/Dash/qml/FakeLensView.qml−120

This diff is too big to show here.

tests/qmltests/Dash/qml/fake_lensView3.qml−24

This diff is too big to show here.

tests/qmltests/Dash/qml/fake_lensView4.qml−24

This diff is too big to show here.

tests/qmltests/Dash/tst_Dash.qml−133

This diff is too big to show here.

tests/qmltests/Dash/tst_DashBar.qml−111

This diff is too big to show here.

tests/qmltests/Dash/tst_DashContent.qml−206

This diff is too big to show here.

tests/qmltests/Dash/tst_DashPreview.qml−176

This diff is too big to show here.

tests/qmltests/Dash/tst_FilterGrids.qml−145

This diff is too big to show here.

tests/qmltests/Dash/tst_GenericLensView.qml−54

This diff is too big to show here.

tests/qmltests/Dash/tst_LensView.qml−52

This diff is too big to show here.

tests/qmltests/Dash/tst_PeoplePreview.qml−254

This diff is too big to show here.

tests/qmltests/EdgeBarrierControls.qml+97

This diff is too big to show here.

tests/qmltests/Greeter/TestView.qml+101

This diff is too big to show here.

tests/qmltests/Greeter/tst_Clock.qml+60−43

This diff is too big to show here.

tests/qmltests/Greeter/tst_Greeter.qml+683

This diff is too big to show here.

tests/qmltests/Greeter/tst_GreeterView.qml+1366

This diff is too big to show here.

tests/qmltests/Greeter/tst_Infographics.qml+83−18

This diff is too big to show here.

tests/qmltests/Greeter/tst_Lockscreen.qml−205

This diff is too big to show here.

tests/qmltests/Greeter/tst_Phone.qml−67

This diff is too big to show here.

tests/qmltests/Greeter/tst_Tablet.qml−328

This diff is too big to show here.

tests/qmltests/Hud/tst_Hud.qml−239

This diff is too big to show here.

tests/qmltests/Hud/tst_Result.qml−98

This diff is too big to show here.

tests/qmltests/Launcher/tst_Drawer.qml+520

This diff is too big to show here.

tests/qmltests/Launcher/tst_Launcher.qml+1578−52

This diff is too big to show here.

tests/qmltests/Notifications/Notification.qml+13−7

This diff is too big to show here.

tests/qmltests/Notifications/tst_Notifications.qml+811−271

This diff is too big to show here.

tests/qmltests/Notifications/tst_OptionToggle.qml+290

This diff is too big to show here.

tests/qmltests/Notifications/tst_SwipeToAct.qml+326

This diff is too big to show here.

tests/qmltests/Notifications/tst_VisualSnapDecisionsQueue.qml+232

This diff is too big to show here.

tests/qmltests/Panel/Indicators/tst_IndicatorItem.qml+205

This diff is too big to show here.

tests/qmltests/Panel/Indicators/tst_IndicatorMenuItemFactory.qml+828

This diff is too big to show here.

tests/qmltests/Panel/Indicators/tst_IndicatorsLight.qml+292

This diff is too big to show here.

tests/qmltests/Panel/Indicators/tst_MessageMenuItemFactory.qml+171

This diff is too big to show here.

tests/qmltests/Panel/Menus/tst_IndicatorMenuWindow.qml−68

This diff is too big to show here.

tests/qmltests/Panel/PanelTest.qml+70

This diff is too big to show here.

tests/qmltests/Panel/PanelUI.qml+286

This diff is too big to show here.

tests/qmltests/Panel/tst_ActiveCallHint.qml+198

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorItem.qml−67

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorRow.qml−259

This diff is too big to show here.

tests/qmltests/Panel/tst_Indicators.qml−212

This diff is too big to show here.

tests/qmltests/Panel/tst_MenuContent.qml+56−188

This diff is too big to show here.

tests/qmltests/Panel/tst_Overview.qml−142

This diff is too big to show here.

tests/qmltests/Panel/tst_Panel.qml+606−172

This diff is too big to show here.

tests/qmltests/Panel/tst_PanelBar.qml+240

This diff is too big to show here.

tests/qmltests/Panel/tst_PanelItemRow.qml+318

This diff is too big to show here.

tests/qmltests/Panel/tst_PanelMenu.qml+364

This diff is too big to show here.

tests/qmltests/Panel/tst_PanelMenuPage.qml+200

This diff is too big to show here.

tests/qmltests/Panel/tst_PanelSmallScreen.qml+133

This diff is too big to show here.

tests/qmltests/Panel/tst_SearchIndicator.qml−64

This diff is too big to show here.

tests/qmltests/SideStage/tst_SideStage.qml−52

This diff is too big to show here.

tests/qmltests/Stage/ApplicationCheckBox.qml+189

This diff is too big to show here.

tests/qmltests/Stage/SizeHintField.qml+14−14

This diff is too big to show here.

tests/qmltests/Stage/SurfaceManagerControls.qml+32

This diff is too big to show here.

tests/qmltests/Stage/SurfaceManagerField.qml+40

This diff is too big to show here.

tests/qmltests/Stage/tst_ApplicationWindow.qml+513

This diff is too big to show here.

tests/qmltests/Stage/tst_DecoratedWindow.qml+267

This diff is too big to show here.

tests/qmltests/Stage/tst_DesktopStage.qml+1085

This diff is too big to show here.

tests/qmltests/Stage/tst_PhoneStage.qml+624

This diff is too big to show here.

tests/qmltests/Stage/tst_QMLTopLevelWindowModel.qml+191

This diff is too big to show here.

tests/qmltests/Stage/tst_Splash.qml+131

This diff is too big to show here.

tests/qmltests/Stage/tst_SurfaceContainer.qml+258

This diff is too big to show here.

tests/qmltests/Stage/tst_TabletStage.qml+764

This diff is too big to show here.

tests/qmltests/Stage/tst_WindowDecoration.qml+244

This diff is too big to show here.

tests/qmltests/Stage/tst_WindowResizeArea.qml+465

This diff is too big to show here.

tests/qmltests/Tutorial/tst_Tutorial.qml+813

This diff is too big to show here.

tests/qmltests/UnityLogo.png

This diff is too big to show here.

tests/qmltests/Wizard/licenses/en_US.html+1

This diff is too big to show here.

tests/qmltests/Wizard/licenses/fr_CA.html+1

This diff is too big to show here.

tests/qmltests/Wizard/licenses/fr_FR.html+1

This diff is too big to show here.

tests/qmltests/Wizard/tst_Wizard.qml+487

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/CMakeLists.txt−53

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/IndicatorsModel.qml−76

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/indicators_fake.qrc−14

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/qml/FakeMenuPage.qml−37

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page1.qml−44

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page2.qml−44

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page3.qml−44

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page4.qml−44

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page5.qml−44

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget4.qml−23

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget5.qml−23

This diff is too big to show here.

tests/qmltests/modules/Unity/Indicators/qmldir−5

This diff is too big to show here.

tests/qmltests/plugins/CMakeLists.txt−2

This diff is too big to show here.

tests/qmltests/plugins/Dee/qmldir−3

This diff is too big to show here.

tests/qmltests/plugins/HudClient/CMakeLists.txt−46

This diff is too big to show here.

tests/qmltests/plugins/HudClient/fake_hud_plugin.cpp−39

This diff is too big to show here.

tests/qmltests/plugins/HudClient/fake_libhud_client.cpp−240

This diff is too big to show here.

tests/qmltests/plugins/HudClient/libhud_client_stub.cpp−93

This diff is too big to show here.

tests/qmltests/plugins/HudClient/libhud_client_stub.h−64

This diff is too big to show here.

tests/qmltests/plugins/HudClient/qmldir−1

This diff is too big to show here.

tests/qmltests/plugins/Unity/CMakeLists.txt−44

This diff is too big to show here.

tests/qmltests/plugins/Unity/fake_launchermodel.cpp−150

This diff is too big to show here.

tests/qmltests/plugins/Unity/fake_launchermodel.h−86

This diff is too big to show here.

tests/qmltests/plugins/Unity/fake_lens.cpp−167

This diff is too big to show here.

tests/qmltests/plugins/Unity/fake_lens.h−63

This diff is too big to show here.

tests/qmltests/plugins/Unity/fake_lenses.cpp−146

This diff is too big to show here.

tests/qmltests/plugins/Unity/fake_lenses.h−79

This diff is too big to show here.

tests/qmltests/plugins/Unity/fake_unity_plugin.cpp−46

This diff is too big to show here.

tests/qmltests/plugins/Unity/qmldir−2

This diff is too big to show here.

tests/qmltests/tst_DeviceConfiguration.qml+49

This diff is too big to show here.

tests/qmltests/tst_DisabledScreenNotice.qml+133

This diff is too big to show here.

tests/qmltests/tst_OrientedShell.qml+1705

This diff is too big to show here.

tests/qmltests/tst_Shell.qml+3382

This diff is too big to show here.

tests/qmltests/tst_ShellWithPin.qml+549

This diff is too big to show here.

tests/qmltests/utils/Unity/Test/MockObjectForInstanceOfTest.qml+1−1

This diff is too big to show here.

tests/qmltests/utils/Unity/Test/MockObjectForInstanceOfTestChild.qml+1−1

This diff is too big to show here.

tests/qmltests/utils/Unity/Test/tst_UnityTest.qml+36−8

This diff is too big to show here.

tests/scripts/README+9

This diff is too big to show here.

tests/scripts/alert-launcher-icon.sh+19

This diff is too big to show here.

tests/scripts/get-progress.sh+19

This diff is too big to show here.

tests/scripts/list-launcher-icons.sh+19

This diff is too big to show here.

tests/scripts/set-count-visible.sh+19

This diff is too big to show here.

tests/scripts/set-count.sh+19

This diff is too big to show here.

tests/scripts/set-progress.sh+19

This diff is too big to show here.

tests/uqmlscene/CMakeLists.txt+37

This diff is too big to show here.

tests/uqmlscene/README+3

This diff is too big to show here.

tests/uqmlscene/main.cpp+568

This diff is too big to show here.

tests/utils/modules/Unity/Test/CMakeLists.txt+26−10

This diff is too big to show here.

tests/utils/modules/Unity/Test/MouseTouchEmulationCheckbox.qml+23−17

This diff is too big to show here.

tests/utils/modules/Unity/Test/StageTestCase.qml+64

This diff is too big to show here.

tests/utils/modules/Unity/Test/TouchEventSequenceWrapper.cpp+23−2

This diff is too big to show here.

tests/utils/modules/Unity/Test/TouchEventSequenceWrapper.h+8−3

This diff is too big to show here.

tests/utils/modules/Unity/Test/UnityTestCase.qml+494−121

This diff is too big to show here.

tests/utils/modules/Unity/Test/plugin.cpp+25−2

This diff is too big to show here.

tests/utils/modules/Unity/Test/plugin.h+1−1

This diff is too big to show here.

tests/utils/modules/Unity/Test/qmldir+4

This diff is too big to show here.

tests/utils/modules/Unity/Test/testutil.cpp+49−6

This diff is too big to show here.

tests/utils/modules/Unity/Test/testutil.h+4−2

This diff is too big to show here.

tests/whitespace/CMakeLists.txt+1−1

This diff is too big to show here.

tests/whitespace/check_whitespace.py+22−12

This diff is too big to show here.

tools/CMakeLists.txt+4

This diff is too big to show here.

tools/indicatorsclient/CMakeLists.txt+1−7

This diff is too big to show here.

tools/indicatorsclient/indicatorsclient.cpp+83

This diff is too big to show here.

tools/indicatorsclient/indicatorsclient.h−2

This diff is too big to show here.

tools/indicatorsclient/main.cpp

This diff is too big to show here.

tools/menutool/CMakeLists.txt+5

This diff is too big to show here.

tools/menutool/README+11

This diff is too big to show here.

tools/menutool/menutool.cpp+62

This diff is too big to show here.

tools/menutool/menutool.qml+118

This diff is too big to show here.

tools/unlock-device+51

This diff is too big to show here.

unity8.qmlproject−24

This diff is too big to show here.