on xenial help sign in
1889 files changed+230816−53491
since splitsnapshots
unifiedsplit
.bazaar/Makefile−6 .bazaar/plugins/makecheck_unity_phablet.py−43 .bzr-builddeb/default.conf−2 .bzrignore−10 .crossbuilder/post_deploy+1 .gitignore+7 .project+17 .pydevproject+10 .settings/Autopilot List.launch+14 .settings/Autopilot Run.launch+14 ApplicationArguments.h−49 Applications/Application.qml−54 Applications/applications.js−115 Bottombar/Bottombar.qml−106 Bottombar/HudButton.qml−64 Bottombar/graphics/hud@20.png Bottombar/graphics/hud_invoke_button_active@20.png CMakeLists.txt+112−74 CODING+119−60 Components/AnimationControllerWithSignals.qml−64 Components/ApplicationManagerWrapper.qml−139 Components/ApplicationScreenshot.qml−61 Components/Carousel.qml−323 Components/CrossFadeImage.qml−151 Components/EdgeDragArea.qml−36 Components/FilterGrid.qml−107 Components/IconUtil.js−42 Components/ListItems/Base.qml−125 Components/ListItems/Header.qml−84 Components/ListItems/Highlight.qml−46 Components/ListItems/graphics/ListItemDividerHorizontal@18.png Components/ListItems/graphics/ListItemDividerVertical@18.png Components/OpenEffect.qml−138 Components/PageHeader.qml−345 Components/RatingStars.qml−41 Components/ResponsiveFlowView.qml−81 Components/ResponsiveGridView.qml−82 Components/Revealer.qml−242 Components/Stage.qml−554 Components/Tile.qml−87 Components/Time.js−49 Components/UbuntuShapeForItem.qml−45 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/AppInfo.qml−89 Dash/Apps/AppPreview.qml−200 Dash/Apps/AppReviews.qml−191 Dash/Apps/ApplicationsFilterGrid.qml−56 Dash/Apps/AppsAvailableForDownloadModel.qml−81 Dash/Apps/CloseIcon.qml−62 Dash/Apps/FrequentlyUsedAppsModel.qml−80 Dash/Apps/RunningApplicationTile.qml−138 Dash/Apps/RunningApplicationsGrid.qml−84 Dash/Apps/graphics/close_btn@9.png Dash/Dash.qml−90 Dash/DashApps.qml−55 Dash/DashBar.qml−129 Dash/DashContent.qml−148 Dash/DashMusic.qml−96 Dash/DashPreview.qml−188 Dash/DashVideos.qml−201 Dash/Generic/GenericCarousel.qml−58 Dash/Generic/GenericFilterGrid.qml−58 Dash/Generic/GenericPreview.qml−106 Dash/GenericScopeView.qml−281 Dash/Music/AlbumTile.qml−116 Dash/Music/MusicFilterGrid.qml−47 Dash/PreviewDelegateMapper.qml−36 Dash/ScopeDelegateMapper.qml−34 Dash/ScopeView.qml−56 Dash/SearchableResultModel.qml−40 Dash/Video/VideoInfo.qml−84 Dash/Video/VideoPreview.qml−210 Dash/Video/VideosFilterGrid.qml−50 Dash/Video/graphics/icon_button_amazon@20.png Dash/Video/graphics/icon_button_u1@20.png Dash/graphics/header_handlearrow2@20.png Dash/graphics/header_handlearrow@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/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/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−119 Greeter/GreeterContent.qml−134 Greeter/Lockscreen.qml−156 Greeter/LoginList.qml−293 Greeter/PassphraseLockscreen.qml−87 Greeter/PinLockscreen.qml−180 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−100 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 Launcher/Launcher.qml−243 Launcher/LauncherDelegate.qml−203 Launcher/LauncherPanel.qml−512 Launcher/graphics/highlight@18.png Launcher/graphics/home@18.png Launcher/graphics/launcher_bg@30.png Launcher/graphics/launcher_bg@30.sci−5 Launcher/graphics/non-selected@18.png Launcher/graphics/non-selected@18.sci−5 Launcher/graphics/notification@30.png Launcher/graphics/notification@30.sci−5 Launcher/graphics/progressbar-fill@30.png Launcher/graphics/progressbar-fill@30.sci−5 Launcher/graphics/progressbar-trough@30.png Launcher/graphics/progressbar-trough@30.sci−5 Launcher/graphics/selected@18.png Launcher/graphics/selected@18.sci−5 Launcher/graphics/triangle@18.png MouseTouchAdaptor.cpp−136 Notifications/Notification.qml−254 Notifications/Notifications.qml−77 Panel/IndicatorItem.qml−62 Panel/IndicatorRow.qml−91 Panel/Indicators.qml−371 Panel/Indicators/DatetimeIndicatorPage.qml−97 Panel/Indicators/DatetimeIndicatorWidget.qml−65 Panel/Indicators/DefaultIndicatorWidget.qml−80 Panel/Indicators/DefaultIndicatorWidget2.qml−76 Panel/Indicators/NetworkIndicatorPage.qml−83 Panel/Indicators/NetworkIndicatorPage2.qml−82 Panel/Indicators/NetworkIndicatorWidget.qml−109 Panel/Indicators/client/IndicatorsPage.qml−91 Panel/Indicators/client/IndicatorsTree.qml−62 Panel/IndicatorsDataModel.qml−73 Panel/MenuContent.qml−133 Panel/Panel.qml−152 Panel/SearchIndicator.qml−81 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−706 SideStage/SideStage.qml−68 SideStage/graphics/sidestage_handle@20.png build−77 build.sh+82 clickable.yaml+153 cmake/modules/Plugins.cmake−67 cmake/modules/QmlTest.cmake+469−101 cmake/modules/autopilot.cmake+7−2 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+6593−16 debian/control+240−93 debian/copyright+21 debian/indicators-client.install+1 debian/rules+34−14 debian/scopes-recommends-generator−27 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+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+13−2 debian/unity8-schemas.install+1 debian/unity8-tests.install+9 debian/unity8-tests.lintian-overrides+1 debian/unity8.install+13−10 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/clock@18.png graphics/phone_background.jpg graphics/tablet_background.jpg include/CMakeLists.txt+1 include/paths.h.in+175 main.cpp−156 paths.h.in−87 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−5 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 plugins/Unity/Indicators/Network/plugin.cpp → plugins/GlobalShortcut/plugin.cpp+7−11 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 tests/mocks/Unity/fake_unity_plugin.h → plugins/Greeter/Unity/Launcher/plugin.h+6−8 plugins/Greeter/Unity/Launcher/qmldir+3 plugins/Unity/Launcher/common/quicklistentry.cpp → plugins/Greeter/Unity/Launcher/quicklistentry.cpp+1−4 plugins/Unity/Launcher/common/quicklistentry.h → plugins/Greeter/Unity/Launcher/quicklistentry.h+1−4 plugins/Greeter/Unity/Launcher/quicklistmodel.cpp+72 plugins/Greeter/Unity/Launcher/quicklistmodel.h+55 plugins/HudClient/CMakeLists.txt−43 plugins/HudClient/hudclient.cpp−309 plugins/HudClient/hudclient.h−71 plugins/HudClient/hudtoolbarmodel.cpp−98 plugins/HudClient/hudtoolbarmodel.h−44 plugins/HudClient/qmldir−2 plugins/HudClient/volumepeakdetector.cpp−223 plugins/HudClient/volumepeakdetector.h−78 plugins/LightDM/CMakeLists.txt+12−26 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+182−36 plugins/LightDM/Greeter.h+35−13 plugins/LightDM/GreeterPrivate.h+45 plugins/LightDM/IntegratedLightDM/CMakeLists.txt+33 tests/mocks/Unity/Indicators/qml/fake_menu_widget3.qml → plugins/LightDM/IntegratedLightDM/QLightDM/Greeter+2−8 plugins/LightDM/IntegratedLightDM/QLightDM/SessionsModel+17 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+47−9 plugins/LightDM/plugin.h+4−6 plugins/LightDM/qmldir+3−3 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/ListViewWithPageHeader/CMakeLists.txt−42 plugins/ListViewWithPageHeader/listviewwithpageheader.cpp−1252 plugins/ListViewWithPageHeader/listviewwithpageheader.h−211 plugins/ListViewWithPageHeader/qmldir−3 plugins/Powerd/CMakeLists.txt+8−4 plugins/Powerd/Powerd.cpp+67−13 plugins/Powerd/Powerd.h+25−9 plugins/Powerd/plugin.cpp+1−1 plugins/Powerd/plugin.h+1−1 plugins/Powerd/qmldir+1−1 plugins/ScreenshotDirectory/CMakeLists.txt+9 plugins/ScreenshotDirectory/ScreenGrabber.qmltypes+17 plugins/ScreenshotDirectory/ScreenshotDirectory.cpp+64 plugins/ScreenshotDirectory/ScreenshotDirectory.h+39 tests/mocks/LightDM/single-pin/UsersModelPrivate.cpp → plugins/ScreenshotDirectory/plugin.cpp+7−14 plugins/Unity/IndicatorsLegacy/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/DownloadDaemonListener/CMakeLists.txt+7−9 plugins/Ubuntu/DownloadDaemonListener/DownloadTracker.cpp+9−8 plugins/Ubuntu/DownloadDaemonListener/DownloadTracker.h+3−2 plugins/Ubuntu/DownloadDaemonListener/interface/downloadtrackeradaptor.cpp+2−2 plugins/Ubuntu/DownloadDaemonListener/interface/downloadtrackeradaptor.h+82−15 plugins/Ubuntu/DownloadDaemonListener/interface/metatypes.h+3−6 plugins/Ubuntu/DownloadDaemonListener/plugin.cpp+1−1 plugins/Ubuntu/DownloadDaemonListener/plugin.h+2−2 plugins/Ubuntu/DownloadDaemonListener/qmldir+1−1 plugins/Ubuntu/Gestures/AxisVelocityCalculator.cpp+9−18 plugins/Ubuntu/Gestures/AxisVelocityCalculator.h+11−18 plugins/Ubuntu/Gestures/CMakeLists.txt+32−10 plugins/Ubuntu/Gestures/Damper.h−87 plugins/Ubuntu/Gestures/Direction.cpp+11−4 plugins/Ubuntu/Gestures/Direction.h+8−5 plugins/Ubuntu/Gestures/DirectionalDragArea.cpp−461 plugins/Ubuntu/Gestures/DirectionalDragArea.h−251 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 plugins/Ubuntu/Gestures/UbuntuGesturesGlobal.h → plugins/Ubuntu/Gestures/UbuntuGesturesQmlGlobal.h+3−3 plugins/Ubuntu/Gestures/plugin.cpp+11−4 plugins/Ubuntu/Gestures/plugin.h+2−2 plugins/Ubuntu/Gestures/qmldir+2−2 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+5−67 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+14−19 plugins/Unity/IndicatorsLegacy/Messaging/qml/ActionButton.qml → plugins/Unity/Indicators/Messaging/qml/ActionButton.qml plugins/Unity/Indicators/Network/CMakeLists.txt−45 plugins/Unity/Indicators/Network/networkagent.cpp−146 plugins/Unity/Indicators/Network/networkagent.h−65 plugins/Unity/Indicators/Network/plugin.h−32 plugins/Unity/Indicators/Network/qml/AccessPoint.qml−62 plugins/Unity/Indicators/Network/qml/CMakeLists.txt−5 plugins/Unity/Indicators/Network/qml/PasswordPage.qml−88 plugins/Unity/Indicators/Network/qml/PasswordTextField.qml−68 plugins/Unity/Indicators/Network/qml/qmldir−9 plugins/Unity/Indicators/Network/secret-agent.c−382 plugins/Unity/Indicators/Network/secret-agent.h−102 plugins/Unity/Indicators/actionrootstate.cpp+97 plugins/Unity/Indicators/actionrootstate.h+55 plugins/Unity/Indicators/indicator.cpp+24−20 plugins/Unity/Indicators/indicator.h+5−5 plugins/Unity/Indicators/indicators.h+6−11 plugins/Unity/Indicators/indicatorsmanager.cpp+45−56 plugins/Unity/Indicators/indicatorsmanager.h+9−5 plugins/Unity/Indicators/indicatorsmodel.cpp+50−75 plugins/Unity/Indicators/indicatorsmodel.h+21−15 plugins/Unity/Indicators/menucontentactivator.cpp+6−7 plugins/Unity/Indicators/menucontentactivator.h+2−2 plugins/Unity/Indicators/modelactionrootstate.cpp+204 plugins/Unity/Indicators/rootactionstate.h → plugins/Unity/Indicators/modelactionrootstate.h+24−34 plugins/Unity/Indicators/modelprinter.cpp+30−15 plugins/Unity/Indicators/modelprinter.h+4−3 plugins/Unity/Indicators/plugin.cpp+19−11 plugins/Unity/Indicators/plugin.h+2−2 plugins/Unity/Indicators/qml/ButtonMenuItem.qml−49 plugins/Unity/Indicators/qml/CMakeLists.txt−5 plugins/Unity/Indicators/qml/CachedUnityMenuModel.qml−60 plugins/Unity/Indicators/qml/FramedMenuItem.qml−41 plugins/Unity/Indicators/qml/HLine.qml−29 plugins/Unity/Indicators/qml/IndicatorPage.qml−160 plugins/Unity/Indicators/qml/MenuAction.qml−59 plugins/Unity/Indicators/qml/MenuItemFactory.qml−95 plugins/Unity/Indicators/qml/RemoveBackground.qml−55 plugins/Unity/Indicators/qml/SectionMenuItem.qml−54 plugins/Unity/Indicators/qml/SliderMenuItem.qml−120 plugins/Unity/Indicators/qml/StandardMenuItem.qml−76 plugins/Unity/Indicators/qml/SwitchMenuItem.qml−58 plugins/Unity/Indicators/qml/qmldir−24 plugins/Unity/Indicators/qmldir+3 plugins/Unity/Indicators/rootactionstate.cpp−249 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/Unity/Indicators/unitymenumodelcache.cpp+32−9 plugins/Unity/Indicators/unitymenumodelcache.h+12−6 plugins/Unity/Indicators/unitymenumodelstack.cpp+100−9 plugins/Unity/Indicators/unitymenumodelstack.h+11−3 plugins/Unity/IndicatorsLegacy/CMakeLists.txt−49 plugins/Unity/IndicatorsLegacy/Messaging/CMakeLists.txt−1 plugins/Unity/IndicatorsLegacy/Messaging/qml/ActionTextField.qml−66 plugins/Unity/IndicatorsLegacy/Messaging/qml/CMakeLists.txt−5 plugins/Unity/IndicatorsLegacy/Messaging/qml/GroupedMessage.qml−96 plugins/Unity/IndicatorsLegacy/Messaging/qml/HeroMessage.qml−120 plugins/Unity/IndicatorsLegacy/Messaging/qml/HeroMessageHeader.qml−161 plugins/Unity/IndicatorsLegacy/Messaging/qml/MessageMenuItem.qml−96 plugins/Unity/IndicatorsLegacy/Messaging/qml/QuickReply.qml−160 plugins/Unity/IndicatorsLegacy/Messaging/qml/SimpleTextMessage.qml−97 plugins/Unity/IndicatorsLegacy/Messaging/qml/SnapDecision.qml−142 plugins/Unity/IndicatorsLegacy/Messaging/qml/qmldir−12 plugins/Unity/IndicatorsLegacy/Messaging/qml/utils.js−27 plugins/Unity/IndicatorsLegacy/Network/CMakeLists.txt−45 plugins/Unity/IndicatorsLegacy/Network/networkagent.cpp−146 plugins/Unity/IndicatorsLegacy/Network/networkagent.h−65 plugins/Unity/IndicatorsLegacy/Network/qml/AccessPoint.qml−68 plugins/Unity/IndicatorsLegacy/Network/qml/CMakeLists.txt−5 plugins/Unity/IndicatorsLegacy/Network/qml/PasswordPage.qml−88 plugins/Unity/IndicatorsLegacy/Network/qml/PasswordTextField.qml−68 plugins/Unity/IndicatorsLegacy/Network/qml/qmldir−9 plugins/Unity/IndicatorsLegacy/Network/secret-agent.c−382 plugins/Unity/IndicatorsLegacy/Network/secret-agent.h−102 plugins/Unity/IndicatorsLegacy/flatmenuproxymodel.cpp−288 plugins/Unity/IndicatorsLegacy/flatmenuproxymodel.h−93 plugins/Unity/IndicatorsLegacy/modelprinter.cpp−114 plugins/Unity/IndicatorsLegacy/modelprinter.h−50 plugins/Unity/IndicatorsLegacy/plugin.cpp−42 plugins/Unity/IndicatorsLegacy/qml/BasicMenuItem.qml−48 plugins/Unity/IndicatorsLegacy/qml/ButtonMenuItem.qml−47 plugins/Unity/IndicatorsLegacy/qml/CMakeLists.txt−5 plugins/Unity/IndicatorsLegacy/qml/HLine.qml−29 plugins/Unity/IndicatorsLegacy/qml/IndicatorBase.qml−59 plugins/Unity/IndicatorsLegacy/qml/IndicatorPage.qml−191 plugins/Unity/IndicatorsLegacy/qml/IndicatorWidget.qml−68 plugins/Unity/IndicatorsLegacy/qml/MenuAction.qml−86 plugins/Unity/IndicatorsLegacy/qml/MenuActionBinding.qml−106 plugins/Unity/IndicatorsLegacy/qml/MenuItem.qml−40 plugins/Unity/IndicatorsLegacy/qml/MenuItemFactory.qml−110 plugins/Unity/IndicatorsLegacy/qml/ProgressMenuItem.qml−65 plugins/Unity/IndicatorsLegacy/qml/RemoveBackground.qml−55 plugins/Unity/IndicatorsLegacy/qml/SectionMenuItem.qml−57 plugins/Unity/IndicatorsLegacy/qml/SliderMenuItem.qml−64 plugins/Unity/IndicatorsLegacy/qml/qmldir−21 plugins/Unity/IndicatorsLegacy/resources/artwork/messaging/default_app.svg−42 plugins/Unity/IndicatorsLegacy/resources/artwork/messaging/default_contact.png plugins/Unity/IndicatorsLegacy/resources/artwork/messaging/message_sms01_54px.png plugins/Unity/IndicatorsLegacy/resources/indicators.qrc−7 plugins/Unity/InputInfo/CMakeLists.txt+38 plugins/Unity/InputInfo/linux/qinputdeviceinfo_linux.cpp+296 plugins/Unity/InputInfo/linux/qinputdeviceinfo_linux_p.h+96 Panel/Indicators/MessagingIndicatorWidget.qml → plugins/Unity/InputInfo/plugin.cpp+15−8 plugins/Unity/Indicators/Network/qml/WifiSection.qml → plugins/Unity/InputInfo/plugin.h+13−11 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+34−8 plugins/Unity/Launcher/appdrawermodel.cpp+192 plugins/Unity/Launcher/appdrawermodel.h+64 plugins/Unity/Launcher/asadapter.cpp+67 Panel/Indicators/MessagingIndicatorPage.qml → plugins/Unity/Launcher/asadapter.h+28−17 plugins/Unity/Launcher/backend/launcherbackend.cpp−145 plugins/Unity/Launcher/backend/launcherbackend.h−132 plugins/Unity/Launcher/dbusinterface.cpp+226 plugins/Unity/Launcher/dbusinterface.h+49 plugins/Unity/Launcher/gsettings.cpp+80 plugins/Unity/IndicatorsLegacy/qml/SwitchMenuItem.qml → plugins/Unity/Launcher/gsettings.h+25−21 plugins/Unity/Launcher/launcheritem.cpp+149−12 plugins/Unity/Launcher/launcheritem.h+38−22 plugins/Unity/Launcher/launchermodel.cpp+464−53 plugins/Unity/Launcher/launchermodel.h+49−23 plugins/Unity/Launcher/plugin.cpp+8−7 plugins/Unity/Launcher/plugin.h+1−1 plugins/Unity/Launcher/qmldir+1−1 plugins/Unity/Launcher/quicklistentry.cpp+85 plugins/Unity/Launcher/quicklistentry.h+56 plugins/Unity/Launcher/quicklistmodel.cpp+24−2 plugins/Unity/Launcher/quicklistmodel.h+7−4 plugins/Unity/Launcher/ualwrapper.cpp+74 plugins/Unity/IndicatorsLegacy/Network/plugin.h → plugins/Unity/Launcher/ualwrapper.h+16−12 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 tests/mocks/LightDM/demo/UsersModelPrivate.cpp → plugins/Unity/Platform/plugin.cpp+7−13 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/abstractfilteroption.h−58 plugins/Unity/applicationpreview.cpp−96 plugins/Unity/applicationpreview.h−66 plugins/Unity/bottombarvisibilitycommunicatorshell.h−53 plugins/Unity/categories.cpp−230 plugins/Unity/categories.h−86 plugins/Unity/categoryresults.cpp−96 plugins/Unity/categoryresults.h−67 plugins/Unity/checkoptionfilter.cpp−63 plugins/Unity/checkoptionfilter.h−57 plugins/Unity/filter.cpp−129 plugins/Unity/filter.h−74 plugins/Unity/filteroption.cpp−91 plugins/Unity/filteroption.h−61 plugins/Unity/filters.cpp−165 plugins/Unity/filters.h−77 plugins/Unity/genericoptionsmodel.cpp−170 plugins/Unity/genericoptionsmodel.h−77 plugins/Unity/moviepreview.cpp−67 plugins/Unity/moviepreview.h−60 plugins/Unity/multirangefilter.cpp−63 plugins/Unity/multirangefilter.h−60 plugins/Unity/musicpreview.cpp−54 plugins/Unity/musicpreview.h−62 plugins/Unity/plugin.cpp−71 plugins/Unity/preview.cpp−184 plugins/Unity/preview.h−84 plugins/Unity/previewaction.cpp−75 plugins/Unity/previewaction.h−71 plugins/Unity/previewinfohint.cpp−67 plugins/Unity/previewinfohint.h−58 plugins/Unity/qmldir−3 plugins/Unity/radiooptionfilter.cpp−59 plugins/Unity/radiooptionfilter.h−59 plugins/Unity/ratingfilteroption.cpp−62 plugins/Unity/ratingfilteroption.h−53 plugins/Unity/ratingoptionsmodel.cpp−33 plugins/Unity/ratingsfilter.cpp−72 plugins/Unity/ratingsfilter.h−66 plugins/Unity/scope.cpp−322 plugins/Unity/scope.h−138 plugins/Unity/scopes.cpp−176 plugins/Unity/scopes.h−94 plugins/Unity/signalslist.cpp−39 plugins/Unity/signalslist.h−38 plugins/Unity/socialpreview.cpp−83 plugins/Unity/socialpreview.h−63 plugins/Unity/socialpreviewcomment.cpp−63 plugins/Unity/socialpreviewcomment.h−57 plugins/Unity/unityoptionsmodel.cpp−67 plugins/Unity/unityoptionsmodel.h−49 plugins/Unity/variantutils.cpp−42 plugins/Unity/variantutils.h−32 plugins/Utils/CMakeLists.txt+36−8 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−38 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+62−15 plugins/Utils/plugin.h+1−1 plugins/Utils/qlimitproxymodelqml.cpp+17−17 plugins/Utils/qlimitproxymodelqml.h+2−2 plugins/Utils/qmldir+3−1 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 plugins/ListViewWithPageHeader/plugin.h → plugins/Wizard/Utils/plugin.h+4−4 plugins/Wizard/Utils/qmldir+2 plugins/Utils/qsortfilterproxymodelqml.cpp → plugins/Wizard/Utils/qsortfilterproxymodelqml.cpp+44 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+1188−174 po/ast.po+1408 po/az.po+852−131 po/be.po+1253 po/bg.po+780−146 po/bn.po+1062 po/br.po+1348 po/bs.po+1146 po/ca.po+1375−166 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+1374−169 po/el.po+1249−163 po/en_AU.po+1367−171 po/en_GB.po+1326−169 po/en_US.po+814 po/eo.po+797−120 po/es.po+1364−170 po/et.po+816 po/eu.po+1246 po/fa.po+1453 po/fi.po+1365−175 po/fo.po+795−132 po/fr.po+1388−163 po/ga.po+1109 po/gd.po+1461 po/gl.po+1358−170 po/gu.po+814 po/gv.po+918 po/he.po+1018−175 po/hi.po+850 po/hr.po+1305−171 po/hu.po+1359−170 po/hy.po+848−144 po/ia.po+1409 po/id.po+882−121 po/is.po+999 po/it.po+1370−168 po/ja.po+889−124 po/kk.po+841 po/km.po+1071 po/kn.po+714−129 po/ko.po+1170−172 po/ku.po+978 po/ky.po+714−129 po/lo.po+834 po/lt.po+1034 po/lv.po+1089−135 po/ml.po+871 po/mr.po+864 po/ms.po+1376 po/my.po+789−131 po/nb.po+1349−171 po/ne.po+834 po/nl.po+1360−170 po/nn.po+816 po/oc.po+1276 po/or.po+816 po/pa.po+1153 po/pl.po+1355−172 po/pt.po+1435 po/pt_BR.po+1148−163 po/ro.po+1137−133 po/ru.po+1361−171 po/sc.po+904 po/shn.po+816 po/si.po+758−120 po/sk.po+1352 po/sl.po+1317−162 po/sq.po+1048 po/sr.po+1324−159 po/sv.po+1357−173 po/sw.po+1087 po/ta.po+872 po/te.po+743−121 po/th.po+709−112 po/tr.po+1348−167 po/ug.po+1181−163 po/uk.po+1358−172 po/unity8.pot+684−116 po/update-unity-pot+31−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+1308−175 po/zh_HK.po+897 po/zh_TW.po+1255−175 qml/ApplicationMenus/ApplicationMenuItemFactory.qml+135 Dash/ScopeListView.qml → qml/ApplicationMenus/ApplicationMenusLimits.qml+7−6 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 Hud/ToolBarIcon.qml → qml/Components/BlurLayer.qml+18−11 qml/Components/BrightnessControl.qml+54 qml/Components/Dialogs.qml+328 Components/DragHandle.qml → qml/Components/DragHandle.qml+69−54 Components/DraggingArea.qml → qml/Components/DraggingArea.qml+7−4 qml/Components/EdgeBarrier.qml+114 qml/Components/EdgeBarrierController.qml+74 Components/EdgeDragEvaluator.qml → qml/Components/EdgeDragEvaluator.qml+20−11 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+46−9 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+1−1 qml/Components/ZoomableImage.qml+157 Components/carousel.js → qml/Components/carousel.js Components/Math.js → qml/Components/flickableUtils.js+10−8 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 Dash/Generic/GenericFilterGridPotrait.qml → qml/Greeter/FullLightDMImpl.qml+12−11 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+117−137 Dash/Music/MusicCarousel.qml → qml/Greeter/IntegratedLightDMImpl.qml+12−16 qml/Greeter/LightDMService.qml+54 tests/mocks/Unity/Indicators/qml/fake_menu_page3.qml → qml/Greeter/LoginAreaContainer.qml+18−16 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 Launcher/FoldingLauncherDelegate.qml → qml/Launcher/FoldingLauncherDelegate.qml+37−26 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/Music/CarouselDelegateMusic.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 plugins/Unity/Indicators/qml/IndicatorBase.qml → qml/Panel/Indicators/IndicatorBase.qml+14−20 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+15−6 Panel/Indicators/client/IndicatorsList.qml → qml/Panel/Indicators/client/IndicatorsList.qml+25−19 plugins/Unity/Indicators/qml/IndicatorWidget.qml → qml/Panel/Indicators/client/IndicatorsTree.qml+16−8 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 tests/mocks/Unity/Indicators/qml/fake_menu_page2.qml → qml/Rotation/ImmediateRotationAction.qml+14−16 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/Video/CarouselDelegateVideo.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 Dash/Video/VideosCarousel.qml → qml/Stage/WindowedFullscreenPolicy.qml+12−15 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−72 run_on_device−145 runtests.sh+5−14 src/ApplicationArguments.cpp+22 src/ApplicationArguments.h+58 src/CMakeLists.txt+64−1 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/Panel/CMakeLists.txt−1 src/Panel/Indicators/CMakeLists.txt−2 src/Panel/Indicators/servicefiles/CMakeLists.txt−14 src/Panel/Indicators/servicefiles/com.canonical.indicator.messages−10 src/SecondaryWindow.cpp+40 tests/plugins/Unity/signalslisttest.h → src/SecondaryWindow.h+8−8 src/ShellApplication.cpp+231 src/ShellApplication.h+61 src/ShellView.cpp+85 plugins/Unity/ratingoptionsmodel.h → src/ShellView.h+11−10 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 tests/mocks/Unity/Indicators/qml/fake_menu_page1.qml → src/qmldebuggerutils.h+14−17 tests/CMakeLists.txt+148−9 tests/autopilot/setup.py+2−2 tests/autopilot/unity8/__init__.py+60−4 tests/autopilot/unity8/shell/emulators/__init__.py → tests/autopilot/unity8/application_lifecycle/__init__.py+2−7 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/fixture_setup.py+329 tests/autopilot/unity8/greeter/__init__.py+97 tests/autopilot/unity8/shell/emulators/launcher.py → tests/autopilot/unity8/greeter/tests/__init__.py+8−18 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/indicators_client/__init__.py−8 tests/autopilot/unity8/indicators_client/emulators/__init__.py−31 tests/autopilot/unity8/indicators_client/emulators/common.py−14 tests/autopilot/unity8/indicators_client/emulators/main_window.py−27 tests/autopilot/unity8/indicators_client/tests/__init__.py−91 tests/autopilot/unity8/indicators_client/tests/test_battery.py−114 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+240−13 tests/autopilot/unity8/shell/create_interactive_notification.py+101 tests/autopilot/unity8/shell/emulators/greeter.py → tests/autopilot/unity8/shell/emulators.py+25−18 tests/autopilot/unity8/shell/emulators/dash.py−52 tests/autopilot/unity8/shell/emulators/hud.py−80 tests/autopilot/unity8/shell/emulators/main_window.py−92 tests/autopilot/unity8/shell/fixture_setup.py+65 tests/autopilot/unity8/shell/tests/__init__.py+219−84 tests/autopilot/unity8/shell/tests/test_helpers.py+44 tests/autopilot/unity8/shell/tests/test_hud.py−151 tests/autopilot/unity8/shell/tests/test_lock_screen.py+47−77 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/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+4−4 tests/data/unity/indicators/com.canonical.indicator.fake2+4−4 tests/data/unity/indicators/com.canonical.indicator.fake3+4−4 tests/data/unity/indicators/com.canonical.indicator.fake4+4−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 tests/graphics/clock@18.png Dash/graphics/phone/screenshots/gallery@12.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 Components/ListItems/ThinDivider.qml → tests/mocks/Biometryd/MockDevice.cpp+11−9 tests/mocks/Biometryd/MockDevice.h+40 tests/mocks/Biometryd/MockIdentifier.cpp+28 tests/mocks/Biometryd/MockIdentifier.h+36 tests/mocks/Biometryd/MockObserver.cpp+22 tests/plugins/Unity/previewbindingstest.h → tests/mocks/Biometryd/MockObserver.h+14−12 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+47−2 tests/mocks/Cursor/CMakeLists.txt+1 tests/mocks/Cursor/Cursor.qml+34 tests/mocks/Cursor/qmldir+2 tests/mocks/GSettings.1.0/CMakeLists.txt+2−6 tests/mocks/GSettings.1.0/fake_gsettings.cpp+335−20 tests/mocks/GSettings.1.0/fake_gsettings.h+104−14 tests/mocks/GSettings.1.0/plugin.cpp+1−1 tests/mocks/GSettings.1.0/plugin.h+1−1 tests/mocks/GSettings.1.0/qmldir+1 tests/mocks/HudClient/CMakeLists.txt−41 tests/mocks/HudClient/fake_hud_plugin.cpp−39 tests/mocks/HudClient/fake_libhud_client.cpp−240 tests/mocks/HudClient/libhud_client_stub.cpp−93 tests/mocks/HudClient/libhud_client_stub.h−64 tests/mocks/HudClient/qmldir−1 tests/mocks/LightDM/CMakeLists.txt−55 tests/mocks/LightDM/QLightDM/Greeter−1 tests/mocks/LightDM/QLightDM/InfographicModel−1 tests/mocks/LightDM/QLightDM/UsersModel−1 tests/mocks/LightDM/demo/InfographicModelPrivate.cpp−91 tests/mocks/LightDM/full/CMakeLists.txt−18 tests/mocks/LightDM/full/InfographicModelPrivate.cpp−182 tests/mocks/LightDM/full/UsersModelPrivate.cpp−52 tests/mocks/LightDM/single-passphrase/CMakeLists.txt−19 tests/mocks/LightDM/single-passphrase/GreeterPrivate.cpp−53 tests/mocks/LightDM/single-passphrase/InfographicModelPrivate.cpp−61 tests/mocks/LightDM/single-pin/CMakeLists.txt−19 tests/mocks/LightDM/single-pin/GreeterPrivate.cpp−53 tests/mocks/LightDM/single-pin/InfographicModelPrivate.cpp−61 tests/mocks/LightDM/single/CMakeLists.txt−18 tests/mocks/LightDMController/CMakeLists.txt+14 tests/mocks/LightDMController/plugin.cpp+35 tests/mocks/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/HudClient/plugin.cpp → tests/mocks/Lights/plugin.cpp+12−15 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 plugins/HudClient/plugin.h → tests/mocks/MeeGo/QOfono/plugin.h+7−7 tests/mocks/MeeGo/QOfono/qmldir+3 tests/mocks/Powerd/CMakeLists.txt+2−13 tests/mocks/Powerd/Powerd.cpp+15−1 tests/mocks/Powerd/Powerd.h+17−8 tests/mocks/Powerd/plugin.cpp+1−1 tests/mocks/Powerd/plugin.h+1−1 tests/mocks/Powerd/qmldir+1 tests/mocks/QMenuModel/CMakeLists.txt+22−8 tests/mocks/QMenuModel/QDBusActionGroup.qml+30−5 plugins/Unity/genericpreview.cpp → tests/mocks/QMenuModel/UnityMenuAction.qml+11−12 tests/mocks/QMenuModel/actiondata.h+54 Panel/PanelBackground.qml → tests/mocks/QMenuModel/actionstateparser.cpp+3−5 plugins/Unity/genericpreview.h → tests/mocks/QMenuModel/actionstateparser.h+11−22 plugins/Unity/Indicators/qml/DivMenuItem.qml → tests/mocks/QMenuModel/dbus-enums.h+32−7 tests/mocks/QMenuModel/plugin.cpp+43 tests/mocks/QMenuModel/plugin.h+34 tests/mocks/QMenuModel/qmldir+4 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/ListViewWithPageHeader/plugin.cpp → tests/mocks/SessionBroadcast/plugin.cpp+10−8 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−92 tests/mocks/Ubuntu/Application/ApplicationInfo.h−103 tests/mocks/Ubuntu/Application/ApplicationManager.cpp−453 tests/mocks/Ubuntu/Application/ApplicationManager.h−127 tests/mocks/Ubuntu/Application/CMakeLists.txt−29 tests/mocks/Ubuntu/Application/plugin.cpp−38 tests/mocks/Ubuntu/Application/qmldir−3 tests/mocks/Ubuntu/CMakeLists.txt+5−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+2−10 tests/mocks/Ubuntu/DownloadDaemonListener/MockDownloadTracker.cpp+8−1 tests/mocks/Ubuntu/DownloadDaemonListener/MockDownloadTracker.h+2−1 tests/mocks/Ubuntu/DownloadDaemonListener/plugin.cpp−1 tests/mocks/Ubuntu/DownloadDaemonListener/plugin.h+1−1 tests/mocks/Ubuntu/DownloadDaemonListener/qmldir+1 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/mocks/Unity/Indicators/qml/fake_menu_widget1.qml → tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/MockKeyboardPlugin.qml+4−6 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 plugins/Unity/IndicatorsLegacy/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 Dash/DashHome.qml → tests/mocks/Ubuntu/SystemSettings/TimeDate/MockTimeDate.qml+14−16 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 tests/mocks/Ubuntu/Telephony/ContactWatcherData.h+46 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_scopeView1.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/Ubuntu/Application/plugin.h → tests/mocks/Unity/Application/plugin.h+3−2 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+6−39 tests/mocks/Unity/Connectivity/CMakeLists.txt+10 plugins/Unity/abstractfilteroption.cpp → tests/mocks/Unity/Connectivity/MockConnectivity.cpp+8−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+13−23 tests/mocks/Unity/Indicators/IndicatorsModel.qml+230−73 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+25−2 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/indicators_fake.qrc−14 tests/mocks/Unity/Indicators/qml/FakeMenuPage.qml−37 tests/mocks/Unity/Indicators/qml/fake_menu_page4.qml−36 tests/mocks/Unity/Indicators/qml/fake_menu_page5.qml−36 tests/mocks/Unity/Indicators/qml/fake_menu_widget4.qml−23 tests/mocks/Unity/Indicators/qml/fake_menu_widget5.qml−23 tests/mocks/Unity/Indicators/qmldir+3−1 tests/mocks/Unity/InputInfo/CMakeLists.txt+31 plugins/Unity/IndicatorsLegacy/Network/qml/WifiSection.qml → tests/mocks/Unity/InputInfo/mockcontroller.cpp+16−15 tests/mocks/Unity/InputInfo/mockcontroller.h+34 tests/mocks/Unity/InputInfo/plugin.cpp+46 Panel/Indicators/SoundIndicatorWidget.qml → tests/mocks/Unity/InputInfo/plugin.h+14−9 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+7−9 tests/mocks/Unity/Launcher/MockAppDrawerModel.cpp+98 tests/mocks/Unity/Launcher/MockAppDrawerModel.h+43 tests/mocks/Unity/Launcher/MockLauncherItem.cpp+95−1 tests/mocks/Unity/Launcher/MockLauncherItem.h+36−15 tests/mocks/Unity/Launcher/MockLauncherModel.cpp+125−6 tests/mocks/Unity/Launcher/MockLauncherModel.h+23−9 tests/mocks/Unity/Launcher/MockQuickListModel.cpp+6−2 tests/mocks/Unity/Launcher/MockQuickListModel.h+4−2 tests/mocks/Unity/Launcher/plugin.cpp+4 tests/mocks/Unity/Launcher/plugin.h+1−1 tests/mocks/Unity/Launcher/qmldir+1 tests/mocks/Unity/Notifications/CMakeLists.txt+13−8 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 tests/mocks/Unity/Notifications/notification.js−23 plugins/Unity/IndicatorsLegacy/Messaging/qml/TextMessage.qml → tests/mocks/Unity/Notifications/plugin.cpp+13−15 tests/mocks/Unity/Notifications/plugin.h+34 tests/mocks/Unity/Notifications/qmldir+3−1 tests/mocks/Unity/Platform/CMakeLists.txt+1 tests/qmltests/Dash/qml/fake_generic_scopeView.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/Unity/fake_categories.cpp−181 tests/mocks/Unity/fake_categories.h−70 tests/mocks/Unity/fake_scope.cpp−200 tests/mocks/Unity/fake_scope.h−95 tests/mocks/Unity/fake_scopes.cpp−146 tests/mocks/Unity/fake_scopes.h−79 tests/mocks/Unity/fake_unity_plugin.cpp−43 tests/mocks/Unity/qmldir−2 tests/mocks/Utils/CMakeLists.txt+61 tests/mocks/Utils/EdgeBarrierSettings.qml+22 tests/mocks/Utils/Style.js+37 tests/mocks/LightDM/single-passphrase/UsersModelPrivate.cpp → tests/mocks/Utils/URLDispatcher.cpp+16−11 tests/mocks/Utils/URLDispatcher.h+47 SideStage/SidestageHandle.qml → tests/mocks/Utils/WindowInputMonitor.qml+6−5 plugins/Unity/IndicatorsLegacy/qml/DivMenuItem.qml → tests/mocks/Utils/constants.cpp+10−12 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/LightDM/demo/CMakeLists.txt → tests/mocks/liblightdm/demo/CMakeLists.txt+1−2 tests/mocks/LightDM/demo/GreeterPrivate.cpp → tests/mocks/liblightdm/demo/GreeterPrivate.cpp+6−2 tests/mocks/LightDM/single/UsersModelPrivate.cpp → tests/mocks/liblightdm/demo/UsersModelPrivate.cpp+11−3 tests/mocks/LightDM/qmldir → tests/mocks/liblightdm/qmldir+1 tests/mocks/libusermetrics/CMakeLists.txt+7−2 tests/mocks/libusermetrics/ColorTheme.cpp+4 tests/mocks/libusermetrics/ColorTheme.h+2−1 tests/mocks/libusermetrics/UserMetrics.cpp+55−21 tests/mocks/libusermetrics/UserMetrics.h+2 tests/mocks/libusermetrics/libusermetricsoutput/ColorTheme.h−1 tests/mocks/libusermetrics/libusermetricsoutput/UserMetrics.h−1 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+9−2 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/qmltests/Components/tst_DragHandle/TestButton.qml → tests/plugins/GlobalShortcut/shortcut.qml+17−19 tests/plugins/Greeter/CMakeLists.txt+1 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/ListViewWithPageHeader/CMakeLists.txt−36 tests/plugins/ListViewWithPageHeader/listviewwithpageheadertest.cpp−1671 tests/plugins/ListViewWithPageHeader/listviewwithpageheadertestsection.cpp−2092 tests/plugins/ListViewWithPageHeader/test.qml−96 tests/plugins/ListViewWithPageHeader/test_section.qml−106 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/mocks/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+5−5 tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cpp−551 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+3−47 tests/plugins/Unity/Indicators/CMakeLists.txt+41−23 tests/plugins/Unity/Indicators/IndicatorsManagerTest.cpp+54−9 tests/plugins/Unity/Indicators/IndicatorsModelTest.cpp+141 tests/plugins/Unity/Indicators/MenuContentActivatorTest.cpp+4−4 tests/plugins/Unity/Indicators/RootActionStateTest.cpp+95 tests/plugins/Unity/Indicators/SharedUnityMenuModelTest.cpp+102 tests/plugins/Unity/Indicators/UnityMenuModelStackTest.cpp+201 tests/plugins/Unity/Indicators/indicatorsmodeltest.cpp−109 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+21−21 tests/plugins/Unity/Launcher/gsettings.h+24−19 tests/plugins/Unity/Launcher/launchermodeltest.cpp+836 tests/plugins/Unity/Launcher/ualwrapper.cpp+58 tests/plugins/Unity/Launcher/ualwrapper.h+55 tests/plugins/Unity/Launcher/xdgwatcher.cpp+17−18 tests/plugins/Unity/Launcher/xdgwatcher.h+15−18 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/Unity/filtersbindingstest.cpp−484 tests/plugins/Unity/filtersbindingstest.h−47 tests/plugins/Unity/previewbindingstest.cpp−167 tests/plugins/Unity/signalslisttest.cpp−57 tests/plugins/Utils/CMakeLists.txt+34−19 tests/plugins/Utils/DeviceConfigParserTest.cpp+76 tests/plugins/Utils/ModelTest.cpp+25−42 tests/plugins/Utils/ModelTest.h tests/plugins/Utils/QLimitProxyModelTest.cpp+31−31 tests/plugins/Utils/URLDispatcherTest.cpp+78 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+71−70 tests/qmltests/Components/CMakeLists.txt+41−13 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+175−66 tests/qmltests/Components/tst_DragHandle.qml+133−57 tests/qmltests/Components/tst_DragHandle/BidirectionalShowable.qml+69 tests/qmltests/Components/tst_DragHandle/BottomEdgeShowable.qml+108 tests/qmltests/Components/tst_DragHandle/LeftEdgeShowable.qml+8−8 tests/qmltests/Components/tst_DragHandle/RightEdgeShowable.qml+108 tests/qmltests/Components/tst_DragHandle/SimpleButton.qml+11−23 tests/qmltests/Components/tst_DragHandle/TopEdgeShowable.qml+15−15 tests/qmltests/Components/tst_DragHandle/UnityLogo.png 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−151 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_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_AppPreview.qml−166 tests/qmltests/Dash/Apps/tst_RunningApplicationsGrid.qml−204 tests/qmltests/Dash/Video/tst_VideoPreview.qml−63 tests/qmltests/Dash/qml/FakeScopeView.qml−120 tests/qmltests/Dash/qml/fake_scopeView2.qml−24 tests/qmltests/Dash/qml/fake_scopeView3.qml−24 tests/qmltests/Dash/qml/fake_scopeView4.qml−24 tests/qmltests/Dash/tst_Dash.qml−133 tests/qmltests/Dash/tst_DashBar.qml−111 tests/qmltests/Dash/tst_DashContent.qml−209 tests/qmltests/Dash/tst_DashPreview.qml−155 tests/qmltests/Dash/tst_FilterGrids.qml−144 tests/qmltests/Dash/tst_GenericScopeView.qml−54 tests/qmltests/Dash/tst_ScopeView.qml−52 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−212 tests/qmltests/Greeter/tst_Phone.qml−106 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+1387−156 tests/qmltests/Notifications/Notification.qml+13−6 tests/qmltests/Notifications/tst_Notifications.qml+796−326 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/PanelTest.qml+70 tests/qmltests/Panel/PanelUI.qml+286 tests/qmltests/Panel/tst_ActiveCallHint.qml+198 tests/qmltests/Panel/tst_IndicatorItem.qml−61 tests/qmltests/Panel/tst_IndicatorRow.qml−244 tests/qmltests/Panel/tst_Indicators.qml−162 tests/qmltests/Panel/tst_MenuContent.qml+38−85 tests/qmltests/Panel/tst_Panel.qml+601−159 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−62 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/tst_DeviceConfiguration.qml+49 tests/qmltests/tst_DisabledScreenNotice.qml+133 tests/qmltests/tst_OrientedShell.qml+1705 tests/qmltests/tst_Shell.qml+3256−214 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+21−2 tests/uqmlscene/README+3−1 tests/uqmlscene/main.cpp+39−14 tests/utils/modules/Unity/Test/CMakeLists.txt+27−7 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+472−108 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+22−50 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−25
.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−43
@@ -1,43 +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 -C builddir test'.."
27− os.environ['CTEST_OUTPUT_ON_FAILURE'] = "1"
28− if (subprocess.call("make -C builddir test", shell=True) != 0):
29−
30− print("\n\n*** Warning ***\n\nBasic tests failed. This commit will not pass continuous integration.")
31−
32− branch = local_branch or master_branch
33− revision = branch.repository.get_revision(future_revision_id)
34− msg_file = open('message.txt', 'w')
35− msg_file.write(revision.message)
36− msg_file.close()
37−
38− print("\n\nSaved commit message to $SRC_DIR/message.txt.")
39− print("You can uncommit this revision, fix the tests and reuse your message running:\n\nbzr commit -F message.txt\n\n")
40− elif os.path.isfile("message.txt"):
41− os.remove("message.txt")
42−
43−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−10
@@ -1,10 +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
10−message.txt
.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>
ApplicationArguments.hdeleted−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− * Authored by: Nick Dedekind <nick.dedekind@canonical.com>
17− */
18−
19−
20−#ifndef APPLICATION_ARGUMENTS_H
21−#define APPLICATION_ARGUMENTS_H
22−
23−#include <QObject>
24−#include <QSize>
25−#include <QStringList>
26−
27−class ApplicationArguments : public QObject
28−{
29− Q_OBJECT
30−public:
31− ApplicationArguments(const QStringList& args) {
32− if (args.contains(QLatin1String("-geometry")) && args.size() > args.indexOf(QLatin1String("-geometry")) + 1) {
33− QStringList geometryArg = args.at(args.indexOf(QLatin1String("-geometry")) + 1).split('x');
34− if (geometryArg.size() == 2) {
35− m_size.rwidth() = geometryArg.at(0).toInt();
36− m_size.rheight() = geometryArg.at(1).toInt();
37− }
38− }
39− }
40−
41− Q_INVOKABLE bool hasGeometry() const { return m_size.isValid(); }
42− Q_INVOKABLE int width() const { return m_size.width(); }
43− Q_INVOKABLE int height() const { return m_size.height(); }
44−
45−private:
46− QSize m_size;
47−};
48−
49−#endif // APPLICATION_ARGUMENTS_H
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/calendar-app.desktop': {
74− 'name': i18n.tr("Calendar"),
75− 'icon': 'calendar',
76− 'exec': '/usr/bin/qmlscene /usr/share/calendar-app/calendar.qml',
77− 'stage': SideStage
78− },
79− '/usr/share/applications/mediaplayer-app.desktop': {
80− 'name': i18n.tr("Media Player"),
81− 'icon': 'mediaplayer-app',
82− 'fullscreen': true,
83− 'exec': '/usr/bin/mediaplayer-app'
84− },
85− '/usr/share/applications/evernote.desktop': {
86− 'name': i18n.tr("Evernote"),
87− 'icon': 'evernote',
88− 'exec': ''
89− },
90− '/usr/share/applications/map.desktop': {
91− 'name': i18n.tr("Map"),
92− 'icon': 'map',
93− 'exec': ''
94− },
95− '/usr/share/applications/pinterest.desktop': {
96− 'name': i18n.tr("Pinterest"),
97− 'icon': 'pinterest',
98− 'exec': ''
99− },
100− '/usr/share/applications/soundcloud.desktop': {
101− 'name': i18n.tr("SoundCloud"),
102− 'icon': 'soundcloud',
103− 'exec': ''
104− },
105− '/usr/share/applications/wikipedia.desktop': {
106− 'name': i18n.tr("Wikipedia"),
107− 'icon': 'wikipedia',
108− 'exec': ''
109− },
110− '/usr/share/applications/youtube.desktop': {
111− 'name': i18n.tr("YouTube"),
112− 'icon': 'youtube',
113− 'exec': ''
114− },
115−}
Bottombar/Bottombar.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 "../Components"
19−import "../Components/Math.js" as MathLocal
20−import Unity 0.1
21−import Ubuntu.Gestures 0.1
22−
23−Item {
24− id: bottombar
25−
26− // Whether there's an application on foreground (as opposed to have shell's Dash on foreground)
27− property bool applicationIsOnForeground
28−
29− property variant theHud
30− property bool enabled: false
31− readonly property real bottomEdgeButtonCenterDistance: units.gu(34)
32−
33− state: dragArea.status === DirectionalDragArea.Recognized ? "shown" : "hidden"
34−
35− HudButton {
36− id: hudButton
37−
38− x: MathLocal.clamp(dragArea.touchStartX - (width / 2), 0, bottombar.width - width)
39− y: bottombar.height - bottomEdgeButtonCenterDistance - (height / 2) - bottomMargin
40−
41− mouseOver: {
42− if (dragArea.status === DirectionalDragArea.Recognized) {
43− var touchLocal = mapFromItem(dragArea, dragArea.touchX, dragArea.touchY)
44− return touchLocal.x > 0 && touchLocal.x < width
45− && touchLocal.y > 0 && touchLocal.y < height
46− } else {
47− return false
48− }
49− }
50−
51− onClicked: theHud.show()
52−
53− Behavior on bottomMargin {
54− NumberAnimation{duration: hudButton.opacity < 0.01 ? 200 : 70; easing.type: Easing.OutQuart}
55− }
56−
57− Behavior on opacity {
58− NumberAnimation{ duration: 200; easing.type: Easing.OutCubic}
59− }
60− }
61−
62− Connections {
63− target: theHud
64− onShownChanged: bottomBarVisibilityCommunicatorShell.forceHidden = theHud.shown
65− }
66−
67− EdgeDragArea {
68− id: dragArea
69− width: parent.width
70− height: distanceThreshold
71− anchors.bottom: parent.bottom
72−
73− enabled: !theHud.shown && bottombar.enabled && applicationIsOnForeground
74− direction: Direction.Upwards
75−
76− property int previousStatus: -1
77− property real touchStartX: -1
78−
79− onStatusChanged: {
80− if (status === DirectionalDragArea.WaitingForTouch) {
81− if (previousStatus == DirectionalDragArea.Recognized) {
82− if (hudButton.mouseOver) {
83− hudButton.clicked()
84− }
85− }
86− } else if (status === DirectionalDragArea.Undecided) {
87− touchStartX = touchX
88− }
89− previousStatus = status
90− }
91− }
92−
93− states: [
94− State {
95− name: "hidden"
96− PropertyChanges { target: hudButton; opacity: 0}
97− PropertyChanges { target: hudButton; bottomMargin: units.gu(-1)}
98− },
99− State {
100− name: "shown"
101− PropertyChanges { target: hudButton; opacity: 1}
102− PropertyChanges { target: hudButton; bottomMargin: units.gu(0)}
103− }
104− ]
105−
106−}
Bottombar/HudButton.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−import Ubuntu.Components 0.1
19−
20−Item {
21− id: item
22−
23− property bool mouseOver
24−
25− property int bottomMargin: units.gu(2)
26−
27− signal clicked()
28−
29− readonly property real scaleOnMouseOver: 1.2
30−
31− width: hudButton.width * scaleOnMouseOver
32− height: hudButton.height * scaleOnMouseOver
33−
34− Item {
35− id: hudButton
36− property alias actionButton: actionButton
37−
38− anchors.centerIn: parent
39− height: units.gu(12)
40− width: height
41− opacity: item.mouseOver ? 1 : 0.7
42− scale: item.mouseOver ? scaleOnMouseOver : 1
43− Behavior on opacity {NumberAnimation{duration: 200; easing.type: Easing.OutQuart}}
44− Behavior on scale {NumberAnimation{duration: 200; easing.type: Easing.OutQuart}}
45−
46− UbuntuShape {
47− id: actionButton
48− anchors.fill: parent
49−
50− borderSource: ""
51− image: Image {
52− source: "graphics/hud_invoke_button_active.png"
53− }
54− }
55−
56− Image {
57− width: units.gu(4)
58− height: width
59− source: "graphics/hud.png"
60− anchors.centerIn: parent
61− fillMode: Image.PreserveAspectFit
62− }
63− }
64−}
Bottombar/graphics/hud@20.pngdeleted

Binary file not shown.

Bottombar/graphics/hud_invoke_button_active@20.pngdeleted

Binary file not shown.

CMakeLists.txt+112−74
@@ -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,11 +62,41 @@ 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(Qt5Core)
52−find_package(Qt5Qml)
53−find_package(Qt5Quick)
54−find_package(Qt5Gui)
55−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
56100
57101# Standard install paths
58102include(GNUInstallDirs)
@@ -60,16 +104,23 @@ include(GNUInstallDirs)
60104set(SHELL_APP_DIR ${CMAKE_INSTALL_DATADIR}/unity8)
61105set(SHELL_PRIVATE_LIBDIR ${CMAKE_INSTALL_LIBDIR}/unity8)
62106
63−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()
64111
65−include_directories(
66− ${CMAKE_CURRENT_BINARY_DIR}
67− ${CMAKE_CURRENT_SOURCE_DIR}
68− ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
69− )
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()
70116
71117set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
72118
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+
73124set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-permissive -pedantic -Wall -Wextra")
74125
75126if ("${CMAKE_BUILD_TYPE}" STREQUAL "release" OR "${CMAKE_BUILD_TYPE}" STREQUAL "relwithdebinfo")
@@ -86,85 +137,72 @@ endif()
86137# "signals" and "slots"
87138add_definitions(-DQT_NO_KEYWORDS)
88139
89−# Tests
90−include(CTest)
91−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)
92145
93146# Autopilot tests
94147include(autopilot)
95148declare_autopilot_test(shell unity8.shell ${CMAKE_SOURCE_DIR}/tests/autopilot/)
96−declare_autopilot_test(indicators_client unity8.indicators_client ${CMAKE_SOURCE_DIR}/tests/autopilot/)
97149
98150set(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)
99154
100−set(shell_app_HDRS
101− )
102−
103−add_executable(${SHELL_APP}
104− ${shellapplication_MOC_SRCS}
105− ApplicationArguments.h
106− main.cpp
107− MouseTouchAdaptor.cpp
108− )
109−
110−qt5_use_modules(${SHELL_APP} Qml Quick Test)
111−pkg_check_modules(XCB REQUIRED xcb)
112−
113−if (NOT "${XCB_INCLUDE_DIRS}" STREQUAL "")
114− 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")
115165endif()
116166
117−target_link_libraries(${SHELL_APP}
118− ${Qt5Qml_LIBRARIES}
119− ${Qt5Quick_LIBRARIES}
120− ${XCB_LDFLAGS}
121− )
122−
123−# install binaries
124−install(TARGETS ${SHELL_APP}
125− RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
126− )
127−
128−# install top level qml and js files
129−file(GLOB QML_JS_FILES *.qml *.js)
130−
131−install(FILES ${QML_JS_FILES}
132− DESTINATION ${SHELL_APP_DIR}
133− )
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()
134176
135177# add subdirectories to build
136−add_subdirectory(tests)
137−add_subdirectory(plugins)
178+add_subdirectory(include)
138179add_subdirectory(src)
180+add_subdirectory(tools)
181+add_subdirectory(qml)
139182
140−# install subdirectories
141−set(QML_DIRS
142− Applications
143− Bottombar
144− Components
145− Dash
146− graphics
147− Greeter
148− Hud
149− Panel
150− Launcher
151− SideStage
152− Notifications
153− )
154−
155−install(DIRECTORY ${QML_DIRS}
156− DESTINATION ${SHELL_APP_DIR}
157− )
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()
158192
159−# generate desktop file
160−configure_file(${SHELL_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop @ONLY)
193+add_subdirectory(plugins)
161194
162−# install desktop file
163−install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop
164− DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
165− )
195+#
196+# Data files
197+#
198+add_subdirectory(data)
166199
167200#
168201# Translation
169202#
170203add_subdirectory(po)
204+
205+#
206+# Documentation
207+#
208+add_subdirectory(doc)
CODING+119−60
@@ -1,7 +1,7 @@
11Building Unity 8
22================
33
4−Only Ubuntu 13.10 (saucy) is supported as a developement environment.
4+Only Ubuntu 14.04 (trusty) is supported as a developement environment.
55
66download source
77---------------
@@ -15,23 +15,17 @@ download source
1515 $ bzr branch lp:unity8 ~/unity8/trunk
1616 $ cd ~/unity8/trunk
1717
18−install dependencies
18+install dependencies and build Unity 8
1919--------------------
20−If its your first time, install build dependencies
2120
2221$ cd ~/unity8/trunk
23−$ ./build --setup
22+$ ./build.sh
2423
25− this will:
26− - install the required dependencies to build, as well as run on the desktop
27− - it should also install unity-scope-home and unity-lens-application which
28− are technically "recommends", not strict dependencies
29−
30−build Unity 8
31−-------------
24+ If its your first time, this will install the required dependencies to build and
25+ build it.
3226
33−$ cd ~/unity8/trunk
34−$ ./build
27+ You might want to also install unity-scope-home and unity-scope-click which
28+ are technically "recommends", not strict dependencies
3529
3630You may also rebuild with the -c for clean, which just deletes the build
3731directory.
@@ -43,17 +37,21 @@ Running Unity 8 on your desktop
4337run the Unity 8 shell
4438---------------------
4539$ cd ~/unity8/trunk
46−$ ./run
40+$ cd builddir
4741
48−Options can be passed to test the lock screen
49−$ ./run -p OR -k
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
5047
51−-p is for pin lock, for which the default prompt answer is "1234"
52−-k is for keylock passphrase, for which the default prompt answer is "password"
48+Check out the tests/qmltests/ directory for a list of things that can be ran.
5349
5450Notes
5551-----
5652- 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.
5755- to get the translations work, currently you have to do make install to
5856 put the *.mo files into correct structure. We'll look for a better solution
5957 later.
@@ -68,50 +66,15 @@ Notes
6866
6967Running Unity 8 on devices
7068==========================
71−- Ubuntu Touch builds are currently only available in 13.10 flavour
72−- supported hardware should match one of those listed here
73− https://wiki.ubuntu.com/Touch/Devices#Running_fine
74−- follow the Ubuntu Touch install instructions for your chosen device
75− https://wiki.ubuntu.com/Touch/Install
76−- make sure your device is connected to a network
77−- also make sure you have your SSH key in ~/.ssh/id_rsa.pub (or install one
78− on the device yourself)
79−
80−$ cd ~/unity/trunk
81−$ ./run_on_device --setup
82− this will:
83− - install your public SSH key on the device
84− - install the needed dependencies
8569
86−$ ./run_on_device
87− this will:
88− - rsync the code to the device
89− - build on the device
90− - replace the running shell
91−
92−Options can be passed to test the lock screen
93−$ ./run_on_device -p OR -k
94−
95−-p is for pin lock, for which the default prompt answer is "1234"
96−-k is for keylock passphrase, for which the default prompt answer is "password"
97−
98−Notes
99−-----
100−- using adb over TCP has some advantages, Google will be of help here
101− - NOTE: this is not yet available for flipped images
102− - TL;DR: `adb tcpip 5555; adb connect $your_device_ip`
103− - you can persist the above via `adb shell setprop persist.adb.tcp.port 5555`
104− - it's unsafe - anyone can connect to your device
105− - with TCP the Nexus 10 doesn't drop the adb connection when locking
106− the screen
107−- exporting ANDROID_SERIAL=$your_device_serial or
108− ANDROID_SERIAL=$your_device_ip:5555 will make adb not complain about
109− multiple devices
110−- you can export TARGET_IP=$your_device_ip TARGET_SSH_PORT=22 for run_on_device
111− to not use adb forwarding - useful if you use multiple devices
112−- using Ninja (package ninja-build - run_on_device -s installs this now)
113− will improve 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.
11475
76+unity8 will automatically restart on the phone once deployment
77+has finished due to post-build-steps set up in this repository.
11578
11679Coding guidelines
11780=================
@@ -127,3 +90,99 @@ Unity 8.
12790If using VIM, make sure you install some syntax highlighting for QML, like
12891https://github.com/peterhoeg/vim-qml
12992
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.
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−139
@@ -1,139 +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− property bool fake: ApplicationManager.fake ? ApplicationManager.fake : false
33−
34− Component.onCompleted: {
35− // Start the watcher so that the ApplicationManager applications model can be populated.
36− ApplicationManager.startWatcher();
37− }
38−
39− function activateApplication(desktopFile, argument) {
40− var application;
41− application = getApplicationFromDesktopFile(desktopFile, ApplicationInfo.MainStage);
42− if (application == null) {
43− application = getApplicationFromDesktopFile(desktopFile, ApplicationInfo.SideStage);
44− }
45− if (application != null) {
46− return application;
47− }
48−
49− var execFlags = sideStageEnabled ? ApplicationManager.NoFlag : ApplicationManager.ForceMainStage;
50−
51− if (argument) {
52− return ApplicationManager.startProcess(desktopFile, execFlags, [argument]);
53− } else {
54− return ApplicationManager.startProcess(desktopFile, execFlags);
55− }
56− }
57−
58− function stopProcess(application) {
59− ApplicationManager.stopProcess(application)
60− }
61−
62− function focusApplication(application) {
63− if (application == null || application == undefined) {
64− return;
65− }
66−
67− ApplicationManager.focusApplication(application.handle);
68− }
69−
70− function unfocusCurrentApplication() {
71− ApplicationManager.unfocusCurrentApplication(ApplicationInfo.MainStage);
72− }
73−
74− function moveRunningApplicationStackPosition(from, to, stage) {
75− var applications;
76− if (stage == ApplicationInfo.SideStage) {
77− applications = ApplicationManager.sideStageApplications;
78− } else {
79− applications = ApplicationManager.mainStageApplications;
80− }
81− // FIXME: applications.move(0, 0) crashes
82− if (from !== to && from >= 0 && to >= 0) applications.move(from, to);
83− }
84−
85− function getApplicationFromDesktopFile(desktopFile, stage) {
86− var foundSideStageApp, foundMainStageApp;
87−
88− foundMainStageApp = __find(desktopFile, ApplicationManager.mainStageApplications)
89− if (stage == ApplicationInfo.MainStage) {
90− return foundMainStageApp;
91− }
92− foundSideStageApp = __find(desktopFile, ApplicationManager.sideStageApplications)
93− if (stage == ApplicationInfo.SideStage) {
94− return foundSideStageApp;
95− }
96−
97− // if stage not specified, return whichever app running on either stage
98− return (foundMainStageApp) ? foundMainStageApp : foundSideStageApp;
99−
100−
101− function __find(desktopFile, applications) {
102− for (var i = 0; i < applications.count; i++ ) {
103− var application = applications.get(i);
104− if (application.desktopFile == desktopFile) {
105− return application;
106− }
107− }
108− return null;
109− }
110− }
111−
112− Connections {
113− target: ApplicationManager
114− onFocusRequested: {
115− // FIXME: hardcoded mapping from ApplicationManager.FavoriteApplications
116− // enum to desktop files
117− var desktopFile
118− if (favoriteApplication == ApplicationManager.CameraApplication) {
119− desktopFile = "/usr/share/applications/camera-app.desktop"
120− } else if (favoriteApplication == ApplicationManager.GalleryApplication) {
121− desktopFile = "/usr/share/applications/gallery-app.desktop"
122− } else if (favoriteApplication == ApplicationManager.ShareApplication) {
123− desktopFile = "/usr/share/applications/share-app.desktop"
124− } else if (favoriteApplication == ApplicationManager.BrowserApplication) {
125− desktopFile = "/usr/share/applications/webbrowser-app.desktop"
126− } else if (favoriteApplication == ApplicationManager.PhoneApplication) {
127− desktopFile = "/usr/share/applications/phone-app.desktop"
128− } else if (favoriteApplication == ApplicationManager.DialerApplication) {
129− desktopFile = "/usr/share/applications/dialer-app.desktop"
130− } else if (favoriteApplication == ApplicationManager.MessagingApplication) {
131− desktopFile = "/usr/share/applications/messaging-app.desktop"
132− } else if (favoriteApplication == ApplicationManager.AddressbookApplication) {
133− desktopFile = "/usr/share/applications/address-book-app.desktop"
134− }
135−
136− applicationManager.focusRequested(desktopFile);
137− }
138− }
139−}
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" // FIXME should use normal background color of Suru theme
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−323
@@ -1,323 +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− clip: true // Don't leak horizontally to other dashes
28−
29− /// The component to be used as delegate. This component has to be derived from BaseCarouselDelegate
30− property Component itemComponent
31− /// Model for the Carousel, which has to be a model usable by a ListView
32− property alias model: listView.model
33− /// A minimal width of a tile can be set here. Per default a best fit will be calculated
34− property alias minimumTileWidth: listView.minimumTileWidth
35− /// Sets the number of tiles that are visible
36− property alias pathItemCount: listView.pathItemCount
37− /// Aspect ratio of the tiles width/height
38− property alias tileAspectRatio: listView.tileAspectRatio
39− /// Used to cache some delegates for performance reasons. See the ListView documentation for details
40− property alias cacheBuffer: listView.cacheBuffer
41− /// Width of the "draw buffer" in pixel. The drawBuffer is an additional area at start/end where
42− /// items drawn, even if it is not in the visible area.
43− /// cacheBuffer controls only the to retain delegates outside the visible area (and is used on top of the drawBuffer)
44− /// see https://bugreports.qt-project.org/browse/QTBUG-29173
45− property int drawBuffer: width / pathItemCount // an "ok" value - but values used from the listView cause loops
46− /// The selected item can be shown in a different size controlled by selectedItemScaleFactor
47− property real selectedItemScaleFactor: 1.1
48−
49− /// Emitted when the user clicked on an item
50− /// @param index is the index of the clicked item
51− /// @param delegateItem is the clicked component/delegate itself
52− /// @param itemY is y of the clicked delegate
53− signal clicked(int index, var delegateItem, real itemY)
54−
55− /// Emitted when the user pressed and held on an item
56− /// @param index is the index of the held item
57− /// @param delegateItem is the held component/delegate itself
58− /// @param itemY is y of the held delegate
59− signal pressAndHold(int index, var delegateItem, real itemY)
60−
61− implicitHeight: listView.tileHeight * selectedItemScaleFactor
62−
63− /* Basic idea behind the carousel effect is to move the items of the delegates (compacting /stuffing them).
64− One drawback is, that more delegates have to be drawn than usually. As some items are moved from the
65− invisible to the visible area. Setting the cacheBuffer does not fix this.
66− See https://bugreports.qt-project.org/browse/QTBUG-29173
67− Therefore the ListView has negative left and right anchors margins, and in addition a header
68− and footer item to compensate that.
69−
70− The scaling of the items is controlled by the variable continuousIndex, described below. */
71− ListView {
72− id: listView
73−
74− property real minimumTileWidth: 0
75− property real newContentX: -1
76− property real pathItemCount: referenceWidth / referenceTileWidth
77− property real tileAspectRatio: 1
78−
79− /* The positioning and scaling of the items in the carousel is based on the variable
80− 'continuousIndex', a continuous real variable between [0, 'carousel.model.count'],
81− roughly representing the index of the item that is prioritised over the others.
82− 'continuousIndex' is not linear, but is weighted depending on if it is close
83− to the beginning of the content (beginning phase), in the middle (middle phase)
84− or at the end (end phase).
85− Each tile is scaled and transformed in proportion to the difference between
86− its own index and continuousIndex.
87− To efficiently calculate continuousIndex, we have these values:
88− - 'gapToMiddlePhase' gap in pixels between beginning and middle phase
89− - 'gapToEndPhase' gap in pixels between middle and end phase
90− - 'kGapEnd' constant used to calculate 'continuousIndex' in end phase
91− - 'kMiddleIndex' constant used to calculate 'continuousIndex' in middle phase
92− - 'kXBeginningEnd' constant used to calculate 'continuousIndex' in beginning and end phase
93− - 'realContentWidth' the width of all the delegates only (without header/footer)
94− - 'realContentX' the 'contentX' of the listview ignoring the 'drawBuffer'
95− - 'realWidth' the 'width' of the listview, as it is used as component. */
96−
97− readonly property real gapToMiddlePhase: Math.min(realWidth / 2 - tileWidth / 2, (realContentWidth - realWidth) / 2)
98− readonly property real gapToEndPhase: realContentWidth - realWidth - gapToMiddlePhase
99− readonly property real kGapEnd: kMiddleIndex * (1 - gapToEndPhase / gapToMiddlePhase)
100− readonly property real kMiddleIndex: (realWidth / 2) / tileWidth - 0.5
101− readonly property real kXBeginningEnd: 1 / tileWidth + kMiddleIndex / gapToMiddlePhase
102− readonly property real maximumItemTranslation: (listView.tileWidth * 3) / listView.scaleFactor
103− readonly property real realContentWidth: contentWidth - 2 * carousel.drawBuffer
104− readonly property real realContentX: contentX + carousel.drawBuffer
105− readonly property real realPathItemCount: Math.min(realWidth / tileWidth, pathItemCount)
106− readonly property real realWidth: carousel.width
107− readonly property real referenceGapToMiddlePhase: realWidth / 2 - tileWidth / 2
108− readonly property real referencePathItemCount: referenceWidth / referenceTileWidth
109− readonly property real referenceWidth: 848
110− readonly property real referenceTileWidth: 175
111− readonly property real scaleFactor: tileWidth / referenceTileWidth
112− readonly property real tileWidth: Math.max(realWidth / pathItemCount, minimumTileWidth)
113− readonly property real tileHeight: tileWidth / tileAspectRatio
114− readonly property real translationXViewFactor: 0.2 * (referenceGapToMiddlePhase / gapToMiddlePhase)
115− readonly property real verticalMargin: (parent.height - tileHeight) / 2
116− readonly property real visibleTilesScaleFactor: realPathItemCount / referencePathItemCount
117−
118− anchors {
119− fill: parent
120− topMargin: verticalMargin
121− bottomMargin: verticalMargin
122− // extending the "drawing area"
123− leftMargin: -carousel.drawBuffer
124− rightMargin: -carousel.drawBuffer
125− }
126−
127− /* The header and footer help to "extend" the area, the listview draws items.
128− This together with anchors.leftMargin and anchors.rightMargin. */
129− header: Item {
130− width: carousel.drawBuffer
131− height: listView.tileHeight
132− }
133− footer: Item {
134− width: carousel.drawBuffer
135− height: listView.tileHeight
136− }
137−
138− boundsBehavior: Flickable.StopAtBounds
139− cacheBuffer: carousel.cacheBuffer
140− flickDeceleration: Math.max(1500 * Math.pow(realWidth / referenceWidth, 1.5), 1500) // 1500 is platform default
141− maximumFlickVelocity: Math.max(2500 * Math.pow(realWidth / referenceWidth, 1.5), 2500) // 2500 is platform default
142− orientation: ListView.Horizontal
143−
144− function itemClicked(index, delegateItem) {
145− var x = CarouselJS.getXFromContinuousIndex(index,
146− realWidth,
147− realContentWidth,
148− tileWidth,
149− gapToMiddlePhase,
150− gapToEndPhase,
151− carousel.drawBuffer)
152−
153− if (Math.abs(x - contentX) < 1) {
154− /* We're clicking the selected item and
155− we're in the neighbourhood of radius 1 pixel from it.
156− Let's emit the clicked signal. */
157− carousel.clicked(index, delegateItem, delegateItem.y)
158− return
159− }
160−
161− stepAnimation.stop()
162− newContentXAnimation.stop()
163−
164− newContentX = x
165− newContentXAnimation.start()
166− }
167−
168− function itemPressAndHold(index, delegateItem) {
169− var x = CarouselJS.getXFromContinuousIndex(index,
170− realWidth,
171− realContentWidth,
172− tileWidth,
173− gapToMiddlePhase,
174− gapToEndPhase,
175− carousel.drawBuffer);
176−
177− if (Math.abs(x - contentX) < 1) {
178− /* We're pressAndHold the selected item and
179− we're in the neighbourhood of radius 1 pixel from it.
180− Let's emit the pressAndHold signal. */
181− carousel.pressAndHold(index, delegateItem, delegateItem.y);
182− return;
183− }
184−
185− stepAnimation.stop();
186− newContentXAnimation.stop();
187−
188− newContentX = x;
189− newContentXAnimation.start();
190− }
191−
192− onMovementStarted: {
193− stepAnimation.stop()
194− newContentXAnimation.stop()
195− newContentX = -1
196− }
197− onMovementEnded: {
198− if (realContentX > 0 && realContentX < realContentWidth - realWidth)
199− stepAnimation.start()
200− }
201−
202− SmoothedAnimation {
203− id: stepAnimation
204−
205− target: listView
206− property: "contentX"
207− to: CarouselJS.getXFromContinuousIndex(listView.selectedIndex,
208− listView.realWidth,
209− listView.realContentWidth,
210− listView.tileWidth,
211− listView.gapToMiddlePhase,
212− listView.gapToEndPhase,
213− carousel.drawBuffer)
214− duration: 450
215− velocity: 200
216− easing.type: Easing.InOutQuad
217− }
218−
219− SequentialAnimation {
220− id: newContentXAnimation
221−
222− NumberAnimation {
223− target: listView
224− property: "contentX"
225− from: listView.contentX
226− to: listView.newContentX
227− duration: 300
228− easing.type: Easing.InOutQuad
229− }
230− ScriptAction {
231− script: listView.newContentX = -1
232− }
233− }
234−
235− readonly property int selectedIndex: Math.round(continuousIndex)
236− readonly property real continuousIndex: CarouselJS.getContinuousIndex(listView.realContentX,
237− listView.tileWidth,
238− listView.gapToMiddlePhase,
239− listView.gapToEndPhase,
240− listView.kGapEnd,
241− listView.kMiddleIndex,
242− listView.kXBeginningEnd)
243−
244− property real viewTranslation: CarouselJS.getViewTranslation(listView.realContentX,
245− listView.tileWidth,
246− listView.gapToMiddlePhase,
247− listView.gapToEndPhase,
248− listView.translationXViewFactor)
249−
250− delegate: Loader {
251− property bool explicitlyScaled: explicitScaleFactor == carousel.selectedItemScaleFactor
252− property real explicitScaleFactor: explicitScale ? carousel.selectedItemScaleFactor : 1.0
253− readonly property bool explicitScale: (!listView.moving ||
254− listView.realContentX <= 0 ||
255− listView.realContentX >= listView.realContentWidth - listView.realWidth) &&
256− listView.newContentX < 0 &&
257− index === listView.selectedIndex
258− readonly property real cachedTiles: listView.realPathItemCount + carousel.drawBuffer / listView.tileWidth
259− readonly property real distance: listView.continuousIndex - index
260− readonly property real itemTranslationScale: CarouselJS.getItemScale(0.5,
261− (index + 0.5), // good approximation of scale while changing selected item
262− listView.count,
263− listView.visibleTilesScaleFactor)
264− readonly property real itemScale: CarouselJS.getItemScale(distance,
265− listView.continuousIndex,
266− listView.count,
267− listView.visibleTilesScaleFactor)
268− readonly property real translationX: CarouselJS.getItemTranslation(index,
269− listView.selectedIndex,
270− distance,
271− itemScale,
272− itemTranslationScale,
273− listView.maximumItemTranslation)
274−
275− width: listView.tileWidth
276− height: listView.tileHeight
277− scale: itemScale * explicitScaleFactor
278− sourceComponent: itemComponent
279− z: cachedTiles - Math.abs(index - listView.selectedIndex)
280−
281− transform: Translate {
282− x: listView.viewTranslation + translationX * listView.scaleFactor
283− }
284−
285− Behavior on explicitScaleFactor {
286− SequentialAnimation {
287− ScriptAction {
288− script: if (!explicitScale)
289− explicitlyScaled = false
290− }
291− NumberAnimation {
292− duration: explicitScaleFactor === 1.0 ? 250 : 150
293− easing.type: Easing.InOutQuad
294− }
295− ScriptAction {
296− script: if (explicitScale)
297− explicitlyScaled = true
298− }
299− }
300− }
301−
302− onLoaded: {
303− item.explicitlyScaled = Qt.binding(function() { return explicitlyScaled; })
304− item.model = Qt.binding(function() { return model; })
305− }
306−
307− MouseArea {
308− id: mouseArea
309−
310− anchors.fill: parent
311−
312− onClicked: {
313− listView.itemClicked(index, item)
314− }
315−
316− onPressAndHold: {
317− listView.itemPressAndHold(index, item)
318− }
319−
320− }
321− }
322− }
323−}
Components/CrossFadeImage.qmldeleted−151
@@ -1,151 +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 || __nextImage.status == Image.Error) {
89− swapImages();
90− }
91− }
92− }
93−
94− Image {
95− id: image1
96− anchors.fill: parent
97− cache: false
98− asynchronous: true
99− fillMode: Image.PreserveAspectCrop
100− z: 1
101− }
102−
103− Image {
104− id: image2
105− anchors.fill: parent
106− cache: false
107− asynchronous: true
108− fillMode: Image.PreserveAspectCrop
109− z: 0
110− }
111−
112− NumberAnimation {
113− id: nextImageFadeIn
114− target: __nextImage
115− property: "opacity"
116− duration: 400
117− to: 1.0
118− easing.type: Easing.InOutQuad
119−
120− onRunningChanged: {
121− if (!running) {
122− __nextImage.source = "";
123− }
124− }
125− }
126−
127− ParallelAnimation {
128− id: crossFadeImages
129− NumberAnimation {
130− target: __nextImage
131− property: "opacity"
132− duration: 400
133− to: 1.0
134− easing.type: Easing.InOutQuad
135− }
136−
137− NumberAnimation {
138− target: __currentImage
139− property: "opacity"
140− duration: 400
141− to: 0
142− easing.type: Easing.InOutQuad
143− }
144−
145− onRunningChanged: {
146− if (!running) {
147− __nextImage.source = "";
148− }
149− }
150− }
151−}
Components/EdgeDragArea.qmldeleted−36
@@ -1,36 +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.Gestures 0.1
20−
21−/*
22− A DirectionalDragArea wrapper that provides some well-chosen defaults
23− for its gesture recognition parameters.
24−*/
25−DirectionalDragArea {
26−
27− // TODO: Re-evaluate those or even the recognition heuristics itself once
28− // we have gesture cancelling/forwarding in place.
29− //
30− // The idea here is that it's better having lax rules than false negatives.
31− // False negatives are very frustrating to the user.
32− maxDeviation: units.gu(3)
33− wideningAngle: 50
34− distanceThreshold: units.gu(1.5)
35− minSpeed: units.gu(0) // some people were getting false negatives with it enabled.
36−}
Components/FilterGrid.qmldeleted−107
@@ -1,107 +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− readonly property bool expandable: model.count > collapsedRowCount * iconTileGrid.columns
39−
40− property var model: null
41−
42− /* Maximum number of rows to be show when filter=true. */
43− property int collapsedRowCount: 2
44− readonly property int collapsedHeight: {
45− return iconTileGrid.contentHeightForRows(Math.min(collapsedRowCount, Math.ceil(model.count / columns)))
46− }
47− readonly property int uncollapsedHeight: {
48− return iconTileGrid.contentHeightForRows(Math.ceil(model.count / columns))
49− }
50−
51− property alias minimumHorizontalSpacing: iconTileGrid.minimumHorizontalSpacing
52− property alias maximumNumberOfColumns: iconTileGrid.maximumNumberOfColumns
53− property alias columns: iconTileGrid.columns
54− property alias delegateWidth: iconTileGrid.delegateWidth
55− property alias delegateHeight: iconTileGrid.delegateHeight
56− property alias verticalSpacing: iconTileGrid.verticalSpacing
57− property alias delegate: iconTileGrid.delegate
58− property alias cellWidth: iconTileGrid.cellWidth
59− property alias cellHeight: iconTileGrid.cellHeight
60− readonly property alias flicking: iconTileGrid.flicking
61− readonly property alias moving: iconTileGrid.moving
62− readonly property alias pressDelay: iconTileGrid.pressDelay
63−
64− height: !filterAnimation.running ? childrenRect.height : height
65− clip: filterAnimation.running
66−
67− NumberAnimation {
68− property bool filterEndValue
69− id: filterAnimation
70− target: root
71− property: "height"
72− to: filterEndValue ? root.collapsedHeight : root.uncollapsedHeight
73− // Duration and easing here match the ListViewWithPageHeader::m_contentYAnimation
74− // otherwise since both animations can run at the same time you'll get
75− // some visual weirdness.
76− duration: 200
77− easing.type: Easing.InOutQuad
78− onStopped: {
79− root.filter = filterEndValue;
80− }
81− }
82−
83− function startFilterAnimation(filter) {
84− filterAnimation.filterEndValue = filter
85− filterAnimation.start();
86− }
87−
88− ResponsiveGridView {
89− id: iconTileGrid
90−
91− anchors { left: parent.left; right: parent.right }
92− height: totalContentHeight
93− interactive: false
94−
95− minimumHorizontalSpacing: units.gu(0.5)
96− maximumNumberOfColumns: 6
97− delegateWidth: units.gu(11)
98− delegateHeight: units.gu(9.5)
99− verticalSpacing: units.gu(2)
100−
101− model: LimitProxyModel {
102− model: root.model
103− limit: (filter && !filterAnimation.running) ? collapsedRowCount * iconTileGrid.columns : -1
104− }
105−
106− }
107−}
Components/IconUtil.jsdeleted−42
@@ -1,42 +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−// FIXME: a quick hack to get icons out of gicons and fallback to
20−// base icon for annotated icons. Doesn't correctly handle all icons.
21−// Proper global solution needed.
22−function from_gicon(name) {
23− var icon_name = name;
24− var annotated_re = /^. UnityProtocolAnnotatedIcon/;
25− if (annotated_re.test(name)) {
26− var base_icon_re = /'base-icon':.+?'(.+?)'/;
27− var base_icon = name.toString().match(base_icon_re);
28− icon_name = base_icon[1];
29− } else {
30− var themed_re = /^. GThemedIcon\s*([^\s]+)\s*/;
31− var themed = name.match(themed_re);
32− if (themed) {
33− return "image://gicon/" + themed[1];
34− }
35− }
36− var name_re = /^[a-z0-9\._-]+$/;
37− if (name_re.test(icon_name)) {
38− return "image://gicon/" + icon_name;
39− } else {
40− return icon_name;
41− }
42−}
Components/ListItems/Base.qmldeleted−125
@@ -1,125 +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− var model = null;
58− if (typeof ListViewWithPageHeader !== 'undefined') {
59− if (typeof ListViewWithPageHeader.model !== 'undefined') {
60− model = ListViewWithPageHeader.model;
61− }
62− } else if (ListView.view !== null) {
63− model = ListView.view.model;
64− }
65− // if we're last item in ListView don't show divider
66− if (model && index === model.count - 1) return false;
67−
68− return true;
69− }
70−
71− /* Relevant really only for ListViewWithPageHeader case: specify how many pixels we can overlap with the section header */
72− readonly property int allowedOverlap: units.dp(1)
73−
74− property real __heightToClip: {
75− // Check this is in position where clipping is needed
76− if (typeof ListViewWithPageHeader !== 'undefined') {
77− if (typeof heightToClip !== 'undefined') {
78− if (heightToClip >= allowedOverlap) {
79− return heightToClip - allowedOverlap;
80− }
81− }
82− }
83− return 0;
84− }
85−
86− /*!
87− \internal
88− Reparent so that the visuals of the children does not
89− occlude the bottom divider line.
90− */
91− default property alias children: body.children
92−
93− Item {
94− id: clippingContainer
95− height: parent.height - __heightToClip
96− anchors { left: parent.left; right: parent.right; bottom: parent.bottom }
97− clip: __heightToClip > 0
98−
99− Item {
100− id: body
101− anchors {
102− left: parent.left
103− right: parent.right
104− bottom: bottomDividerLine.top
105− }
106− height: childrenRect.height
107− }
108−
109− ThinDivider {
110− id: bottomDividerLine
111− anchors.bottom: parent.bottom
112− visible: showDivider
113− }
114−
115− Highlight {
116− anchors {
117− top: parent.top
118− left: parent.left
119− right: parent.right
120− bottom: bottomDividerLine.top
121− }
122− pressed: (emptyListItem.selected || (emptyListItem.highlightWhenPressed && emptyListItem.pressed)) ? "pressed" : ""
123− }
124− }
125−}
Components/ListItems/Header.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 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− property alias image: image.source
28−
29− signal clicked(variant mouse)
30−
31− height: units.gu(4.5)
32−
33− Item {
34− anchors {
35− left: parent.left
36− right: parent.right
37− rightMargin: units.gu(0.5)
38− top: parent.top
39− bottom: bottomBorder.top
40− }
41−
42− Label {
43− id: label
44− anchors {
45− left: parent.left
46− leftMargin: units.gu(2)
47− verticalCenter: parent.verticalCenter
48− }
49−
50− color: Theme.palette.selected.backgroundText //at 60%
51− opacity: 0.6
52− font.family: "Ubuntu"
53− fontSize: "medium"
54− elide: Text.ElideRight
55− textFormat: Text.PlainText
56− style: Text.Raised
57− styleColor: "black"
58− width: parent.width - image.width - image.leftMargin - anchors.leftMargin
59− }
60−
61− Image {
62− id: image
63− readonly property double leftMargin: units.gu(1)
64− x: label.x + label.contentWidth + leftMargin
65− anchors {
66− verticalCenter: parent.verticalCenter
67− }
68− }
69− }
70−
71− ThinDivider {
72− id: bottomBorder
73− anchors {
74− left: parent.left
75− right: parent.right
76− bottom: parent.bottom
77− }
78− }
79−
80− MouseArea {
81− anchors.fill: parent
82− onClicked: parent.clicked(mouse)
83− }
84−}
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/OpenEffect.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−
19−Item {
20− id: effect
21− property bool enabled: topGapPx != positionPx || bottomGapPx != positionPx
22− property alias live: effectSource.live
23− property Item sourceItem
24− property ShaderEffectSource source: ShaderEffectSource {
25− id: effectSource
26− sourceItem: effect.enabled ? effect.sourceItem : null
27− hideSource: effect.enabled
28− live: false
29− sourceRect: {
30− if (effect.enabled) {
31− Qt.rect(0, -effect.topOverflow, sourceItem.width, sourceItem.height + effect.topOverflow + effect.bottomOverflow)
32− } else {
33− Qt.rect(0, 0, 0, 0)
34− }
35− }
36− }
37−
38− onEnabledChanged: if (!live && enabled) scheduleUpdate()
39−
40− /*!
41− \qmlproperty real positionPx
42− The y coordinate of where to perform the split.
43−
44− \qmlproperty real topGapPx
45− Gap's top edge.
46−
47− \qmlproperty real bottomGapPx
48− Gap's bottom edge.
49−
50− \qmlproperty real topOverflow
51− How much of the sourceItem should be sourced above its bounds.
52−
53− \qmlproperty real bottomOverflow
54− How much of the sourceItem should be sourced below its bounds.
55− */
56−
57− property real positionPx: 0
58− property real topGapPx: 0
59− property real bottomGapPx: height
60− property real topOverflow: 0.0
61− property real bottomOverflow: 0.0
62− property real topOpacity: 1.0
63− property real bottomOpacity: 1.0
64−
65− property real __roundedPositionPx: Math.round(positionPx)
66−
67− function scheduleUpdate() {
68− source.scheduleUpdate();
69− }
70−
71− ShaderEffect {
72− id: top
73− visible: effect.enabled
74− opacity: topOpacity
75− property ShaderEffectSource source: effect.source
76− property real positionPx: __roundedPositionPx
77− property real factor: effect.height / height
78−
79− clip: true
80−
81− anchors {
82− top: parent.top
83− left: parent.left
84− right: parent.right
85− topMargin: -topOverflow - positionPx + topGapPx
86− }
87− height: topOverflow + positionPx
88−
89− vertexShader: "
90− uniform highp mat4 qt_Matrix;
91− attribute highp vec4 qt_Vertex;
92− attribute highp vec2 qt_MultiTexCoord0;
93− varying highp vec2 qt_TexCoord0;
94− uniform highp float factor;
95−
96− void main() {
97− highp vec4 pos = qt_Vertex;
98− pos.y *= factor;
99− gl_Position = qt_Matrix * pos;
100− qt_TexCoord0 = qt_MultiTexCoord0;
101− }
102− "
103− }
104−
105− ShaderEffect {
106− id: bottom
107− visible: effect.enabled
108− opacity: bottomOpacity
109− property ShaderEffectSource source: effect.source
110− property real offset: effect.topOverflow + __roundedPositionPx
111− property real factor: effect.height / height
112−
113− clip: true
114−
115− anchors {
116− left: parent.left
117− right: parent.right
118− }
119− y: topOverflow + bottomGapPx
120− height: sourceItem.height - positionPx + bottomOverflow
121−
122− vertexShader: "
123− uniform highp mat4 qt_Matrix;
124− attribute highp vec4 qt_Vertex;
125− attribute highp vec2 qt_MultiTexCoord0;
126− varying highp vec2 qt_TexCoord0;
127− uniform highp float factor;
128− uniform highp float offset;
129−
130− void main() {
131− highp vec4 pos = qt_Vertex;
132− pos.y = (pos.y * factor) - offset;
133− gl_Position = qt_Matrix * pos;
134− qt_TexCoord0 = qt_MultiTexCoord0;
135− }
136− "
137− }
138−}
Components/PageHeader.qmldeleted−345
@@ -1,345 +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: Theme.palette.selected.backgroundText
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: AbstractButton {
151− enabled: searchField.text != ""
152− onClicked: {
153− if (searchField.text != "") {
154− searchHistory.addQuery(searchField.text)
155− searchField.text = ""
156− }
157− }
158− height: parent.height
159− width: height
160−
161− Image {
162− id: primaryImage
163− anchors {
164− verticalCenter: parent.verticalCenter
165− left: parent.left
166− leftMargin: units.gu(0.5)
167− }
168− width: units.gu(3)
169− height: units.gu(3)
170− }
171−
172− Item {
173− id: pointerPositioner
174− anchors.left: parent.right
175− anchors.leftMargin: units.gu(0.5)
176− anchors.top: parent.bottom
177− }
178− }
179−
180− onTextChanged: {
181− if (text != "") searchContainer.closePopover()
182− else if (text == "" && activeFocus) searchContainer.openPopover()
183− }
184−
185− onActiveFocusChanged: {
186− if (!activeFocus) searchContainer.closePopover()
187− }
188− }
189−
190− states: [
191− State {
192− name: "wide"
193− AnchorChanges { target: textContainer; anchors.top: headerContainer.top }
194− AnchorChanges { target: searchContainer; anchors.left: undefined; anchors.top: textContainer.top }
195− },
196− State {
197− name: "narrow"
198− PropertyChanges { target: searchField; highlighted: true }
199− AnchorChanges { target: textContainer; anchors.top: searchContainer.bottom }
200− AnchorChanges { target: searchContainer; anchors.left: headerContainer.left; anchors.top: headerContainer.top }
201− },
202− State {
203− name: "active"
204− extend: "wide"
205− PropertyChanges { target: searchContainer; width: units.gu(40) }
206− PropertyChanges { target: primaryImage; source: searchField.text ? "../Dash/graphics/icon_clear.png" : "../Dash/graphics/icon_search_active.png" }
207− PropertyChanges { target: searchField; highlighted: true }
208− },
209− State {
210− name: "inactive"
211− extend: "wide"
212− PropertyChanges { target: searchContainer; width: units.gu(25) }
213− PropertyChanges { target: primaryImage; source: "../Dash/graphics/icon_search_inactive.png" }
214− PropertyChanges { target: searchField; highlighted: false }
215− },
216− State {
217− name: "narrowActive"
218− extend: "narrow"
219− PropertyChanges { target: header; contentY: 0 }
220− PropertyChanges { target: primaryImage; source: searchField.text ? "../Dash/graphics/icon_clear.png" : "../Dash/graphics/icon_search_active.png" }
221− },
222− State {
223− name: "narrowInactive"
224− extend: "narrow"
225− PropertyChanges { target: header; contentY: header.height }
226− PropertyChanges { target: primaryImage; source: searchField.text ? "../Dash/graphics/icon_clear.png" : "../Dash/graphics/icon_search_active.png" }
227− }
228− ]
229−
230− transitions: [
231− Transition {
232− to: "active"
233− SequentialAnimation {
234− ParallelAnimation {
235− NumberAnimation { targets: [searchContainer, searchField]; property: "width"; duration: 200; easing.type: Easing.InOutQuad }
236− PropertyAction { target: primaryImage; property: "source" }
237− AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
238− }
239− ScriptAction { script: searchContainer.openPopover() }
240− }
241− },
242− Transition {
243− to: "inactive"
244− ScriptAction { script: searchContainer.closePopover() }
245− NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.InOutQuad }
246− AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
247− },
248− Transition {
249− to: "narrowActive"
250− SequentialAnimation {
251− ParallelAnimation {
252− NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.OutQuad }
253− AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
254− }
255− ScriptAction { script: searchContainer.openPopover() }
256− }
257− },
258− Transition {
259− to: "narrowInactive"
260− ScriptAction { script: searchContainer.closePopover() }
261− NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.OutQuad }
262− AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
263− }
264− ]
265−
266− Component {
267− id: popoverComponent
268− Popover {
269− id: popover
270−
271− // FIXME: this should go into the first item below, but enable: false
272− // prevents mouse events propagation
273− AbstractButton {
274− anchors {
275− top: parent.top
276− right: parent.right
277− }
278− height: units.gu(6)
279− width: height
280−
281− onClicked: searchContainer.closePopover()
282−
283− Image {
284− anchors.centerIn: parent
285− width: units.gu(2)
286− height: units.gu(2)
287− source: "../Dash/graphics/icon_listview_clear.png"
288− }
289− }
290−
291− Column {
292− anchors {
293− top: parent.top
294− left: parent.left
295− right: parent.right
296− }
297−
298− ListItem.Standard { enabled: false; text: i18n.tr("Recent searches") }
299−
300− Repeater {
301− id: recentSearches
302− model: searchHistory
303−
304− delegate: ListItem.Standard {
305− showDivider: index < recentSearches.count - 1
306− text: query
307− onClicked: {
308− searchHistory.addQuery(text)
309− searchField.text = text
310− }
311− }
312− }
313− }
314− }
315− }
316−
317− InverseMouseArea {
318− enabled: searchField.activeFocus
319−
320− anchors {
321− top: parent.top
322− left: parent.left
323− right: parent.right
324− }
325−
326− height: searchContainer.popover ? parent.height + searchContainer.popover.contentHeight + units.gu(2) : parent.height
327−
328− onPressed: searchField.focus = false
329− }
330− }
331− }
332− }
333−
334− BorderImage {
335− id: bottomBorder
336− anchors {
337− top: header.bottom
338− left: parent.left
339− right: parent.right
340− bottom: parent.bottom
341− }
342−
343− source: "graphics/PageHeaderBaseDivider.sci"
344− }
345−}
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−82
@@ -1,82 +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: {
36− return contentHeightForRows(Math.ceil(gridView.model.count / columns))
37− }
38− property alias interactive: gridView.interactive
39− readonly property alias flicking: gridView.flicking
40− readonly property alias moving: gridView.moving
41− readonly property alias pressDelay: gridView.pressDelay
42−
43− function contentHeightForRows(rows) {
44− return rows * cellHeight + verticalSpacing
45− }
46−
47− GridView {
48− id: gridView
49− objectName: "responsiveGridViewGrid"
50− anchors {
51− fill: parent
52− leftMargin: margin/2
53− rightMargin: margin/2
54− topMargin: verticalSpacing
55− }
56− clip: parent.height != totalContentHeight
57−
58− function pixelToGU(value) {
59− return Math.floor(value / units.gu(1));
60− }
61−
62− function spacingForColumns(columns) {
63− // spacing between columns as an integer number of GU, the remainder goes in the margins
64− var spacingGU = pixelToGU(allocatableHorizontalSpace / columns);
65− return units.gu(spacingGU);
66− }
67−
68− function columnsForSpacing(spacing) {
69− // minimum margin is half of the spacing
70− return Math.floor((parent.width - spacing/2) / (delegateWidth + spacing));
71− }
72−
73− property real allocatableHorizontalSpace: parent.width - columns * delegateWidth
74− property int columns: Math.min(columnsForSpacing(minimumHorizontalSpacing), maximumNumberOfColumns)
75− property real horizontalSpacing: spacingForColumns(columns)
76− property real verticalSpacing: horizontalSpacing
77− property int margin: allocatableHorizontalSpace - columns * horizontalSpacing
78−
79− cellWidth: delegateWidth + horizontalSpacing
80− cellHeight: delegateHeight + verticalSpacing
81− }
82−}
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−554
@@ -1,554 +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− property bool fullyHidden: true
43− readonly property var focusedApplication:
44− type == ApplicationInfo.MainStage ? applicationManager.mainStageFocusedApplication
45− : applicationManager.sideStageFocusedApplication
46− property bool shouldUseScreenshots: true
47−
48− /* Will be true whenever application screenshots are being shown.
49− i.e. during application window transitions */
50− readonly property bool usingScreenshots: {
51− if (newApplicationScreenshot.application != null && oldApplicationScreenshot.application != null) {
52− return newApplicationScreenshot.ready && oldApplicationScreenshot.ready;
53− } else {
54− return newApplicationScreenshot.ready || oldApplicationScreenshot.ready;
55− }
56− }
57−
58− property bool rightEdgeEnabled: true
59− property bool switchingFromFullscreenToFullscreen: false
60−
61− property alias rightEdgeDraggingAreaWidth: rightEdgeDraggingArea.width
62−
63− // Y coordinate for non-fullscreen applications
64− property int normalApplicationY: 0
65−
66− function activateApplication(desktopFile, addDelay) {
67− var application = applicationManager.getApplicationFromDesktopFile(desktopFile, stage.type);
68− if (application != null && application == stage.focusedApplication) {
69− stage.show();
70− return;
71− }
72−
73− showStartingApplicationAnimation.prepare(application);
74− if (!stage.fullyShown) {
75− // if launching this app reveals the stage, make new application screenshot visible
76− newApplicationScreenshot.visible = true;
77− stage.show();
78− } else {
79− showStartingApplicationAnimation.start();
80− }
81−
82− if (addDelay) {
83− stage.__startingApplicationDesktopFile = desktopFile;
84− }
85− }
86−
87− /* Keep a reference to the focused application so that we can safely
88− unfocus it when the stage is not fully shown and refocus it when the stage
89− is fully shown again.
90− */
91− property var focusedApplicationWhenUsingScreenshots
92− onShouldUseScreenshotsChanged: {
93− if (showStartingApplicationAnimation.running || switchToApplicationAnimation.running) {
94− return;
95− }
96−
97− if (shouldUseScreenshots) {
98− stage.__focusApplicationUsingScreenshots(stage.focusedApplication);
99− } else {
100− stage.__focusActualApplication(stage.focusedApplicationWhenUsingScreenshots);
101− }
102− }
103−
104−
105− property Item newApplicationScreenshot: ApplicationScreenshot {
106− parent: stage
107− width: stage.width
108− height: stage.height - y
109− }
110− property Item oldApplicationScreenshot: ApplicationScreenshot {
111− parent: stage
112− width: stage.width
113− height: stage.height - y
114− }
115−
116− function __getApplicationIndex(application) {
117− if (!application)
118− return -1
119− for (var i = 0; i < stage.applications.count; i++ ) {
120− if (stage.applications.get(i).desktopFile == application.desktopFile) {
121− return i
122− }
123− }
124− return -1
125− }
126−
127−
128− property string __startingApplicationDesktopFile
129−
130− Timer {
131− id: delayedHideScreenshots
132− interval: 500 // on Galaxy Nexus, Telephony app is slowest application to draw a frame so needs this delay
133− onTriggered: {
134− __hideScreenshots();
135− }
136− }
137−
138− function __hideScreenshots() {
139− newApplicationScreenshot.clearApplication();
140− oldApplicationScreenshot.clearApplication();
141− newApplicationScreenshot.visible = false;
142− oldApplicationScreenshot.visible = false;
143− }
144−
145− function __focusApplication(application) {
146− if (!application) return
147− if (shouldUseScreenshots) {
148− stage.__focusApplicationUsingScreenshots(application);
149− } else {
150− stage.__focusActualApplication(application);
151− }
152− }
153−
154−
155− function __focusActualApplication(application) {
156− if (application == null) {
157− return;
158− }
159−
160− if (stage.focusedApplication == application) {
161− /* FIXME: this case is reached when showing the sidestage, we
162− need to refocus the side stage app in order to show it.
163− FIXME: this case is reached when doing a right edge swipe
164− while in the dash to bring back the stage.
165− FIXME: this case is reached when showStartingApplicationAnimation
166− finishes after the newly started application has been focused
167− automatically by the ApplicationManager.
168− */
169− if (stage.type == ApplicationInfo.SideStage) {
170− applicationManager.focusApplication(application);
171− }
172− if (!delayedHideScreenshots.running) {
173− stage.__hideScreenshots();
174− }
175− } else {
176− /* FIXME: calling ApplicationManager::focusApplication does not focus
177− the application immediately nor show the application's surface
178− immediately. Delay hiding the screenshots until it has done so.
179− */
180− delayedHideScreenshots.stop();
181− applicationManager.focusApplication(application);
182− }
183− stage.focusedApplicationWhenUsingScreenshots = null;
184− }
185−
186− function __focusApplicationUsingScreenshots(application) {
187− delayedHideScreenshots.stop();
188− if (application == null) {
189− return;
190− }
191−
192− if (newApplicationScreenshot.application != null) {
193− stage.focusedApplicationWhenUsingScreenshots = application;
194− return;
195− }
196−
197− newApplicationScreenshot.setApplication(application);
198− newApplicationScreenshot.scheduleUpdate();
199− newApplicationScreenshot.opacity = 1.0;
200− newApplicationScreenshot.x = 0.0;
201− newApplicationScreenshot.y = __getApplicationY(application);
202− newApplicationScreenshot.scale = 1.0;
203− newApplicationScreenshot.visible = true;
204− stage.focusedApplicationWhenUsingScreenshots = application;
205− stage.switchingFromFullscreenToFullscreen = false;
206− }
207−
208− function __getApplicationY(application) {
209− return Qt.binding( function(){
210− return (application && application.fullscreen
211− && application.stage !== ApplicationInfo.SideStage)
212− ? 0 : normalApplicationY;
213− } )
214− }
215−
216− /* FIXME: should hide the screenshots when the focused application's surface
217− is visible. There is no API in QtUbuntu to support that yet.
218− */
219− Connections {
220− target: stage
221− onFocusedApplicationChanged: {
222− if (stage.focusedApplication != null) {
223− /* Move application to the beginning of the list of running applications */
224− var index = stage.__getApplicationIndex(stage.focusedApplication);
225− applicationManager.moveRunningApplicationStackPosition(index, 0, stage.type);
226−
227− var startingApplication = applicationManager.getApplicationFromDesktopFile(
228− stage.__startingApplicationDesktopFile, stage.type);
229−
230− if (stage.focusedApplication == startingApplication) {
231− stage.__startingApplicationDesktopFile = "";
232−
233− /* Screenshots might still be in use at this point and their
234− use can be stopped before delayedHideScreenshots is complete.
235− Prepare for that case by setting appropriately
236− stage.focusedApplicationWhenUsingScreenshots.
237− */
238− stage.focusedApplicationWhenUsingScreenshots = stage.focusedApplication;
239−
240− /* FIXME: should hide the screenshots when the focused application's window
241− is visible. There is no API in qtubuntu to support that yet. Therefore
242− we delay their hiding to avoid a state where neither the screenshot nor
243− the application's window is visible.
244− */
245− delayedHideScreenshots.start();
246− } else {
247− stage.__hideScreenshots();
248− }
249− }
250− }
251− }
252−
253− Connections {
254− target: stage.applications
255− onCountChanged: { __discardObsoleteScreenshots(); }
256− ignoreUnknownSignals: true
257− }
258− onFullyHiddenChanged: { __discardObsoleteScreenshots(); }
259− function __discardObsoleteScreenshots() {
260− if (stage.fullyHidden && stage.applications && stage.applications.count == 0) {
261− stage.focusedApplicationWhenUsingScreenshots = undefined;
262− stage.__hideScreenshots();
263− }
264− }
265−
266−
267− SequentialAnimation {
268− id: showStartingApplicationAnimation
269−
270− function prepare(newApplication) {
271− var oldApplication = stage.focusedApplication;
272− newApplicationScreenshot.setApplication(newApplication);
273− newApplicationScreenshot.updateFromCache();
274− oldApplicationScreenshot.setApplication(oldApplication);
275− oldApplicationScreenshot.scheduleUpdate();
276− newApplicationScreenshot.withBackground = true; // FIXME: should be withBackground = newApplication.state == Application.Starting
277− newApplicationScreenshot.y = __getApplicationY(newApplication);
278− oldApplicationScreenshot.y = __getApplicationY(oldApplication);
279− stage.focusedApplicationWhenUsingScreenshots = newApplication;
280− stage.switchingFromFullscreenToFullscreen = false;
281− }
282−
283− PropertyAction {target: newApplicationScreenshot; property: "visible"; value: false}
284− PropertyAction {target: oldApplicationScreenshot; property: "visible"; value: false}
285− PropertyAction {target: newApplicationScreenshot; property: "z"; value: 0}
286− PropertyAction {target: oldApplicationScreenshot; property: "z"; value: 1}
287− PropertyAction {target: newApplicationScreenshot; property: "scale"; value: 0.8}
288− PropertyAction {target: oldApplicationScreenshot; property: "scale"; value: 1.0}
289− PropertyAction {target: newApplicationScreenshot; property: "opacity"; value: 0.0}
290− PropertyAction {target: oldApplicationScreenshot; property: "opacity"; value: 1.0}
291− PropertyAction {target: newApplicationScreenshot; property: "x"; value: 0.0}
292− PropertyAction {target: oldApplicationScreenshot; property: "x"; value: 0.0}
293−
294− ParallelAnimation {
295− PropertyAction {target: newApplicationScreenshot; property: "visible"; value: true}
296− NumberAnimation {
297− target: newApplicationScreenshot
298− property: "scale"
299− duration: 500
300− easing.type: Easing.OutQuad
301− to: 1.0
302− }
303− NumberAnimation {
304− target: newApplicationScreenshot
305− property: "opacity"
306− duration: 500
307− easing.type: Easing.OutQuad
308− to: 1.0
309− }
310−
311− PropertyAction {target: oldApplicationScreenshot; property: "visible"; value: true}
312−
313− NumberAnimation {
314− target: oldApplicationScreenshot
315− property: "x"
316− duration: 400
317− easing.type: Easing.OutQuad
318− to: stage.width
319− }
320− }
321−
322− ScriptAction {
323− script: {
324− if (!stage.focusedApplicationWhenUsingScreenshots) {
325− // FIXME: only here to support case where application does
326− // not exist yet but is about to
327− return;
328− }
329−
330− stage.__focusApplication(stage.focusedApplicationWhenUsingScreenshots);
331− }
332− }
333− }
334−
335−
336− SequentialAnimation {
337− id: switchToApplicationAnimation
338−
339− function prepare(newApplication) {
340− var oldApplication = stage.focusedApplication;
341− newApplicationScreenshot.setApplication(newApplication);
342− newApplicationScreenshot.updateFromCache();
343− oldApplicationScreenshot.setApplication(oldApplication);
344− oldApplicationScreenshot.scheduleUpdate();
345− newApplicationScreenshot.withBackground = false;
346− newApplicationScreenshot.y = __getApplicationY(newApplication);
347− oldApplicationScreenshot.y = __getApplicationY(oldApplication);
348− stage.focusedApplicationWhenUsingScreenshots = newApplication;
349− stage.switchingFromFullscreenToFullscreen = newApplication && newApplication.fullscreen;
350− }
351−
352− PropertyAction {target: newApplicationScreenshot; property: "visible"; value: false}
353− PropertyAction {target: oldApplicationScreenshot; property: "visible"; value: false}
354− PropertyAction {target: newApplicationScreenshot; property: "z"; value: 1}
355− PropertyAction {target: oldApplicationScreenshot; property: "z"; value: 0}
356− PropertyAction {target: newApplicationScreenshot; property: "scale"; value: 1.0}
357− PropertyAction {target: oldApplicationScreenshot; property: "scale"; value: 1.0}
358− PropertyAction {target: newApplicationScreenshot; property: "opacity"; value: 1.0}
359− PropertyAction {target: oldApplicationScreenshot; property: "opacity"; value: 1.0}
360− PropertyAction {target: newApplicationScreenshot; property: "x"; value: stage.width}
361− PropertyAction {target: oldApplicationScreenshot; property: "x"; value: 0.0}
362− PropertyAction {target: newApplicationScreenshot; property: "visible"; value: true}
363− PropertyAction {target: oldApplicationScreenshot; property: "visible"; value: true}
364−
365− ParallelAnimation {
366− NumberAnimation {
367− target: oldApplicationScreenshot
368− property: "scale"
369− duration: 500
370− easing.type: Easing.OutQuad
371− to: 0.8
372− }
373− NumberAnimation {
374− target: oldApplicationScreenshot
375− property: "opacity"
376− duration: 500
377− easing.type: Easing.OutQuad
378− to: 0.0
379− }
380−
381− NumberAnimation {
382− target: newApplicationScreenshot
383− property: "x"
384− duration: 500
385− easing.type: Easing.OutQuad
386− to: 0
387− }
388− }
389−
390− ScriptAction {
391− script: {
392− // move previously focused application to the end of the list of running applications
393− var oldApplication = oldApplicationScreenshot.application;
394− if (oldApplication != null) {
395− var oldApplicationIndex = stage.__getApplicationIndex(oldApplicationScreenshot.application);
396− applicationManager.moveRunningApplicationStackPosition(
397− oldApplicationIndex, stage.applications.count - 1, stage.type);
398− }
399−
400− stage.__focusApplication(stage.focusedApplicationWhenUsingScreenshots);
401− }
402− }
403− }
404−
405−
406− function __dragValueToProgress(dragValue, startValue, applicationsCount) {
407− if (applicationsCount == 0) {
408− return 0;
409− } else if (applicationsCount == 1) {
410− // prevent the current app from moving more than 1/4 of the screen
411− var elasticValue = __elastic(dragValue, startValue/4);
412− return elasticValue / startValue;
413− } else {
414− return dragValue / startValue;
415− }
416− }
417−
418− function __elastic(x, limit) {
419− return limit * ( 1 - Math.pow( ( limit - 1 ) / limit, x ) )
420− }
421−
422− property real __startValue: stage.width
423−
424− AnimationControllerWithSignals {
425− id: switchToApplicationAnimationController
426−
427− onAnimationCompletedAtBeginning: {
428− animation = null;
429− stage.__focusApplication(oldApplicationScreenshot.application);
430− }
431− }
432−
433− EdgeDragEvaluator {
434− id: dragEvaluator
435− trackedPosition: rightEdgeDraggingArea.touchX
436− direction: rightEdgeDraggingArea.direction
437− maxDragDistance: stage.width
438− }
439−
440− EdgeDragArea {
441− id: rightEdgeDraggingArea
442−
443− enabled: {
444− if (status == DirectionalDragArea.WaitingForTouch) {
445− return switchToApplicationAnimationController.completed
446− && stage.applications.count > 0 && stage.rightEdgeEnabled
447− && !delayedHideScreenshots.running
448− } else {
449− return true
450− }
451− }
452− width: units.gu(2)
453− anchors.top: parent.top
454− anchors.bottom: parent.bottom
455− anchors.right: parent.right
456−
457− direction: Direction.Leftwards
458−
459− onDistanceChanged: {
460− if (status !== DirectionalDragArea.Recognized)
461− return
462−
463− var targetProgress = __dragValueToProgress(-distance, __startValue,
464− stage.applications.count)
465− var delta = targetProgress - switchToApplicationAnimationController.progress
466−
467− // When the gesture finally gets recognized, the finger will likely be
468− // reasonably far from the edge. If we made the progress immediately
469− // follow the finger position it would be visually unpleasant as there
470− // would be a jump to meet the finger's current position.
471− //
472− // The trick is not to go all the way (1.0) as it would cause the
473− // aforementioned jump.
474− switchToApplicationAnimationController.progress += 0.4 * delta
475− }
476−
477− property bool gotRejected: false
478−
479− onStatusChanged: {
480− if (status == DirectionalDragArea.Undecided) {
481− gotRejected = false
482− onUndecided();
483− } else if (status == DirectionalDragArea.Rejected) {
484− switchToApplicationAnimationController.completeToBeginningWithSignal();
485− gotRejected = true;
486− } else if (status == DirectionalDragArea.WaitingForTouch) {
487− if (!gotRejected)
488− onGestureEnded()
489− }
490− }
491−
492− function onUndecided() {
493− dragEvaluator.reset();
494−
495− var nextApplication = null;
496− if (stage.applications.count > 1) {
497− nextApplication = stage.applications.get(1);
498− }
499− switchToApplicationAnimationController.progress = 0
500− switchToApplicationAnimation.prepare(nextApplication);
501− switchToApplicationAnimationController.animation = switchToApplicationAnimation;
502−
503− }
504−
505− function onGestureEnded() {
506− if (stage.applications.count > 1 && dragEvaluator.shouldAutoComplete()) {
507− switchToApplicationAnimationController.completeToEndWithSignal();
508− } else {
509− switchToApplicationAnimationController.completeToBeginningWithSignal();
510− }
511− }
512− }
513−
514−
515− // FIXME: very bad hack to detect when an application was closed or crashed
516− property var __previouslyFocusedApplication
517− Connections {
518− target: stage
519− onFocusedApplicationChanged: {
520− if (stage.focusedApplication == null
521− && __getApplicationIndex(stage.__previouslyFocusedApplication) == -1) {
522− stage.__onFocusedApplicationClosed();
523− }
524− stage.__previouslyFocusedApplication = stage.focusedApplication;
525− }
526− }
527−
528− function __onFocusedApplicationClosed() {
529− if (!stage.shown) {
530− return;
531− }
532−
533− if (stage.applications.count > 0) {
534− // Do not change the focused application from within onFocusedApplicationChanged.
535− // This causes binding loop warnings besides being a bad practice in general
536− // (setting a property from within its "changed" signal handling)
537− // Hence the timer.
538− focusTopmostAppTimer.start();
539− } else {
540− stage.hide();
541− }
542− }
543−
544− Timer {
545− id: focusTopmostAppTimer
546− interval: 1; repeat: false
547− onTriggered: {
548− if (stage.applications.count > 0) {
549− stage.__focusApplication(stage.applications.get(0));
550− }
551− }
552− }
553−
554−}
Components/Tile.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−
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: "radius_pressed.sci"
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: Theme.palette.selected.backgroundText
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−}
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−45
@@ -1,45 +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−/* 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: root
28−
29− property alias radius: shape.radius
30− property alias image: source.sourceItem
31−
32− ShaderEffectSource {
33− id: source
34− width: 1
35− height: 1
36− hideSource: true
37− }
38−
39− Shape {
40− id: shape
41− image: source
42−
43− anchors.fill: parent
44− }
45−}
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/AppInfo.qmldeleted−89
@@ -1,89 +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−Row {
22− id: root
23− property alias icon: image.source
24− property alias appName: appNameLabel.text
25− property alias rating: ratingStars.rating
26− property int rated: 0
27− property int reviews: 0
28−
29− spacing: units.gu(2)
30−
31− UbuntuShape {
32− id: imageShape
33− width: units.gu(6)
34− height: units.gu(6)
35− image: Image {
36− id: image
37− sourceSize { width: imageShape.width; height: imageShape.height }
38− asynchronous: true
39− fillMode: Image.PreserveAspectFit
40− }
41− }
42−
43− Column {
44− spacing: units.gu(1)
45−
46− Label {
47− id: appNameLabel
48− fontSize: "large"
49− color: "white"
50− style: Text.Raised
51− styleColor: "black"
52− opacity: .9
53− }
54−
55− Row {
56− visible: root.rating >= 0
57− spacing: units.gu(1)
58−
59− RatingStars {
60− id: ratingStars
61− maximumRating: 10
62− }
63−
64− Label {
65− id: ratedLabel
66− objectName: "ratedLabel"
67− fontSize: "medium"
68− color: "white"
69− style: Text.Raised
70− styleColor: "black"
71− opacity: .6
72− //TRANSLATORS: Number of persons who rated this app
73− text: i18n.tr("(%1)").arg(root.rated)
74− }
75−
76− Label {
77− id: reviewsLabel
78− objectName: "reviewsLabel"
79− fontSize: "medium"
80− color: "white"
81− style: Text.Raised
82− styleColor: "black"
83− opacity: .6
84− //TRANSLATORS: Number of persons who wrote reviews for this app
85− text: i18n.tr("%1 review", "%1 reviews", root.reviews).arg(root.reviews)
86− }
87− }
88− }
89−}
Dash/Apps/AppPreview.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 Ubuntu.Components.ListItems 0.1 as ListItem
20−import Ubuntu.DownloadDaemonListener 0.1
21−import ".."
22−import "../../Components"
23−import "../../Components/IconUtil.js" as IconUtil
24−
25−DashPreview {
26− id: root
27−
28− signal sendUserReview(string review)
29−
30− title: root.previewData.title
31−
32− header: ListView {
33− spacing: units.gu(1)
34− orientation: ListView.Horizontal
35− height: units.gu(22)
36− anchors {
37− left: parent.left
38− right: parent.right
39− margins: units.gu(1)
40− }
41− model: previewData.infoMap["more-screenshots"] != null ? previewData.infoMap["more-screenshots"].value : [previewData.image]
42−
43− delegate: UbuntuShape {
44− id: shape
45− anchors {
46− top: parent.top
47− bottom: parent.bottom
48− }
49− width: units.gu(12)
50− radius: "medium"
51− borderSource: ""
52− image: Image {
53− asynchronous: true
54− sourceSize { width: shape.width; height: shape.height }
55− source: modelData ? modelData : ""
56− fillMode: Image.PreserveAspectCrop
57− }
58− }
59− }
60−
61− Component {
62− id: buttonsComponent
63−
64− GridView {
65− id: buttonsGrid
66− objectName: "gridButtons"
67−
68− property int numOfRows: (count + 1) / 2
69− property int spacing: units.gu(1)
70− height: Math.max(units.gu(5), units.gu(5)*numOfRows + spacing*(numOfRows - 1))
71−
72− interactive: false
73− cellWidth: Math.max(units.gu(9), width / 2)
74− cellHeight: buttonHeight + spacing
75− property int buttonWidth: count > 1 ? Math.max(0, width / 2 - spacing) : width
76− property int buttonHeight: units.gu(5)
77−
78− delegate: Button {
79− width: Math.max(units.gu(4), buttonsGrid.buttonWidth)
80− height: buttonsGrid.buttonHeight
81− color: Theme.palette.selected.foreground
82− text: modelData.displayName
83− iconSource: modelData.iconHint
84− iconPosition: "right"
85− onClicked: root.previewData.execute(modelData.id, { })
86− }
87− }
88− }
89−
90− Component {
91− id: progressComponent
92−
93− ProgressBar {
94− id: progressBar
95− objectName: "progressBar"
96− value: 0
97− maximumValue: 100
98− height: units.gu(5)
99−
100− property var model
101−
102− DownloadTracker {
103− service: "com.canonical.applications.Downloader"
104− dbusPath: root.previewData.infoMap["progressbar_source"] ? root.previewData.infoMap["progressbar_source"].value : ""
105−
106− onProgress: {
107− var percentage = parseInt(received * 100 / total);
108− progressBar.value = percentage;
109− }
110−
111− onFinished: {
112− root.previewData.execute(progressBar.model[0].id, { })
113− }
114− }
115−
116− }
117− }
118−
119− buttons: Loader {
120− anchors {
121− left: parent.left
122− right: parent.right
123− }
124−
125− sourceComponent: root.previewData.infoMap["show_progressbar"] ? progressComponent : buttonsComponent
126−
127− onLoaded: {
128− item.model = root.previewData.actions;
129− }
130− }
131−
132− body: Column {
133− spacing: units.gu(1)
134−
135− AppInfo {
136− objectName: "appInfo"
137− anchors { left: parent.left; right: parent.right }
138−
139− appName: root.previewData.title
140− icon: IconUtil.from_gicon(root.previewData.appIcon)
141− rating: Math.round(root.previewData.rating * 10)
142− reviews: root.previewData.numRatings
143− rated: root.previewData.infoMap["rated"] ? root.previewData.infoMap["rated"].value : 0
144− }
145−
146− Label {
147− anchors { left: parent.left; right: parent.right }
148− text: root.previewData.description
149− fontSize: "medium"
150− color: Theme.palette.selected.backgroundText
151− opacity: .6
152− wrapMode: Text.WordWrap
153− style: Text.Raised
154− styleColor: "black"
155− }
156−
157− Column {
158− visible: root.previewData.rating >= 0
159− anchors { left: parent.left; right: parent.right }
160− spacing: parent.spacing
161−
162− ListItem.ThinDivider { }
163−
164− Item {
165− anchors { left: parent.left; right: parent.right }
166− height: rateLabel.height
167−
168− Label {
169− id: rateLabel
170− fontSize: "medium"
171− color: "white"
172− style: Text.Raised
173− styleColor: "black"
174− opacity: .9
175− text: i18n.tr("Rate this")
176−
177− anchors.left: parent.left
178− anchors.verticalCenter: parent.verticalCenter
179− }
180−
181− // FIXME these need to be made interactive and connected to the scope
182− RatingStars {
183− anchors.right: parent.right
184− anchors.verticalCenter: parent.verticalCenter
185− }
186− }
187−
188− ListItem.ThinDivider { }
189−
190− AppReviews {
191− objectName: "appReviews"
192− anchors { left: parent.left; right: parent.right }
193−
194− model: root.previewData.infoMap["comments"] ? root.previewData.infoMap["comments"].value : undefined
195−
196− onSendReview: root.sendUserReview(review);
197− }
198− }
199− }
200−}
Dash/Apps/AppReviews.qmldeleted−191
@@ -1,191 +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.ListItems 0.1 as ListItem
20−import "../../Components"
21−
22−Column {
23− id: root
24−
25− property var model
26−
27− signal sendReview(string review)
28−
29− spacing: units.gu(2)
30− state: ""
31−
32− states: [
33− State {
34− name: ""
35− PropertyChanges { target: reviewField; width: root.width }
36− PropertyChanges { target: sendButton; opacity: 0 }
37− PropertyChanges { target: inverseArea; enabled: false }
38− },
39− State {
40− name: "editing"
41− PropertyChanges { target: reviewField; width: (root.width - row.spacing - sendButton.width) }
42− PropertyChanges { target: sendButton; opacity: 1 }
43− PropertyChanges { target: inverseArea; enabled: true }
44− }
45− ]
46−
47− transitions: [
48− Transition {
49− from: ""
50− to: "editing"
51− SequentialAnimation {
52− UbuntuNumberAnimation { target: reviewField; properties: "width"; duration: UbuntuAnimation.SlowDuration }
53− UbuntuNumberAnimation { target: sendButton; properties: "opacity"; duration: UbuntuAnimation.SlowDuration }
54− }
55− },
56− Transition {
57− from: "editing"
58− to: ""
59− SequentialAnimation {
60− UbuntuNumberAnimation { target: sendButton; properties: "opacity"; duration: UbuntuAnimation.SlowDuration }
61− UbuntuNumberAnimation { target: reviewField; properties: "width"; duration: UbuntuAnimation.SlowDuration }
62− }
63− }
64− ]
65−
66− Label {
67− fontSize: "medium"
68− color: "white"
69− style: Text.Raised
70− styleColor: "black"
71− opacity: .9
72− text: i18n.tr("Add a review")
73− }
74−
75− Row {
76− id: row
77− spacing: units.gu(1)
78− width: root.width
79−
80− // FIXME: needs to react to Qt.inputMethod geometry
81− TextArea {
82− id: reviewField
83− objectName: "reviewField"
84− placeholderText: i18n.tr("Review")
85− width: parent.width
86− verticalAlignment: Text.AlignVCenter
87− autoSize: true
88− maximumLineCount: 5
89−
90− Behavior on height { UbuntuNumberAnimation { duration: UbuntuAnimation.SnapDuration } }
91−
92− onFocusChanged: {
93− if(reviewField.focus){
94− root.state = "editing";
95− reviewField.selectAll();
96− }
97− }
98−
99− // FIXME: not active when in wide mode
100− InverseMouseArea {
101− id: inverseArea
102− anchors.fill: parent
103− enabled: false
104− onPressed: {
105− reviewField.focus = false;
106− root.state = "";
107− }
108− }
109− }
110−
111− Button {
112− id: sendButton
113− objectName: "sendButton"
114− width: units.gu(10)
115− height: units.gu(4)
116− anchors.bottom: reviewField.bottom
117− color: Theme.palette.selected.foreground
118− text: i18n.tr("Send")
119− opacity: 0
120−
121− onClicked: {
122− root.sendReview(reviewField.text);
123− reviewField.text = ""
124− }
125− }
126− }
127−
128− ListItem.ThinDivider {}
129−
130− Label {
131− fontSize: "medium"
132− color: "white"
133− style: Text.Raised
134− styleColor: "black"
135− opacity: .9
136− text: i18n.tr("Comments:")
137− }
138−
139− Repeater {
140− objectName: "commentsArea"
141− model: root.model
142−
143− Column {
144− anchors { left: parent.left; right: parent.right }
145−
146− Column {
147− anchors { left: parent.left; right: parent.right }
148−
149− Label {
150− anchors { left: parent.left; right: parent.right }
151− text: modelData[0]
152− fontSize: "medium"
153− color: "white"
154− opacity: .8
155− wrapMode: Text.WordWrap
156− style: Text.Raised
157− styleColor: "black"
158− }
159−
160− Row {
161− spacing: units.gu(1)
162−
163− RatingStars {
164− maximumRating: 10
165− rating: modelData[1]
166− }
167−
168− Label {
169− text: modelData[2]
170− fontSize: "medium"
171− color: Theme.palette.selected.backgroundText
172− opacity: .6
173− style: Text.Raised
174− styleColor: "black"
175− }
176− }
177− }
178−
179− Label {
180− anchors { left: parent.left; right: parent.right }
181− text: modelData[3]
182− fontSize: "medium"
183− color: Theme.palette.selected.backgroundText
184− opacity: .6
185− wrapMode: Text.WordWrap
186− style: Text.Raised
187− styleColor: "black"
188− }
189− }
190− }
191−}
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−import "../../Components/IconUtil.js" as IconUtil
21−
22−FilterGrid {
23− id: filterGrid
24−
25− filter: 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.dndUri ? stripProtocol(model.dndUri) : 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.icon ? model.icon : "../../graphics/applicationIcons/" + application.icon + ".png" // FIXME: this is temporary
47−
48− width: filterGrid.cellWidth
49− height: filterGrid.cellHeight
50− text: model.title ? model.title : application.name // FIXME: this is temporary
51− imageWidth: units.gu(8)
52− imageHeight: units.gu(7.5)
53− source: IconUtil.from_gicon(icon)
54− onClicked: filterGrid.clicked(index, application.desktopFile);
55− }
56−}
Dash/Apps/AppsAvailableForDownloadModel.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 "../../Applications"
19−
20−ListModel {
21− ListElement {
22− uri: "application://evernote.desktop"
23− icon: "../../graphics/applicationIcons/evernote.png"
24− category: 0
25− mimetype: "application/x-desktop"
26− title: "Evernote"
27− comment: ""
28− dndUri: "file:///usr/share/applications/evernote.desktop"
29− metadata: ""
30− }
31− ListElement {
32− uri: "application://map.desktop"
33− icon: "../../graphics/applicationIcons/map.png"
34− category: 0
35− mimetype: "application/x-desktop"
36− title: "Map"
37− comment: ""
38− dndUri: "file:///usr/share/applications/map.desktop"
39− metadata: ""
40− }
41− ListElement {
42− uri: "application://pinterest.desktop"
43− icon: "../../graphics/applicationIcons/pinterest.png"
44− category: 0
45− mimetype: "application/x-desktop"
46− title: "Pinterest"
47− comment: ""
48− dndUri: "file:///usr/share/applications/pinterest.desktop"
49− metadata: ""
50− }
51− ListElement {
52− uri: "application://soundcloud.desktop"
53− icon: "../../graphics/applicationIcons/soundcloud.png"
54− category: 0
55− mimetype: "application/x-desktop"
56− title: "Soundcloud"
57− comment: ""
58− dndUri: "file:///usr/share/applications/soundcloud.desktop"
59− metadata: ""
60− }
61− ListElement {
62− uri: "application://wikipedia.desktop"
63− icon: "../../graphics/applicationIcons/wikipedia.png"
64− category: 0
65− mimetype: "application/x-desktop"
66− title: "Wikipedia"
67− comment: ""
68− dndUri: "file:///usr/share/applications/wikipedia.desktop"
69− metadata: ""
70− }
71− ListElement {
72− uri: "application://youtube.desktop"
73− icon: "../../graphics/applicationIcons/youtube.png"
74− category: 0
75− mimetype: "application/x-desktop"
76− title: "Youtube"
77− comment: ""
78− dndUri: "file:///usr/share/applications/youtube.desktop"
79− metadata: ""
80− }
81−}
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−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−
19−ListModel {
20− ListElement {
21− uri: "application:///usr/share/applications/camera-app.desktop"
22− icon: "../../graphics/applicationIcons/camera.png"
23− category: 0
24− mimetype: "application/x-desktop"
25− title: "Camera"
26− comment: ""
27− dndUri: "file:///usr/share/applications/camera-app.desktop"
28− metadata: ""
29− }
30− ListElement {
31− uri: "application:///usr/share/applications/phone-app.desktop"
32− icon: "../../graphics/applicationIcons/phone-app.png"
33− category: 0
34− mimetype: "application/x-desktop"
35− title: "Phone"
36− comment: ""
37− dndUri: "file:///usr/share/applications/phone-app.desktop"
38− metadata: ""
39− }
40− ListElement {
41− uri: "application:///usr/share/applications/gallery-app.desktop"
42− icon: "../../graphics/applicationIcons/gallery.png"
43− category: 0
44− mimetype: "application/x-desktop"
45− title: "Gallery"
46− comment: ""
47− dndUri: "file:///usr/share/applications/gallery.desktop"
48− metadata: ""
49− }
50− ListElement {
51− uri: "application:///usr/share/applications/facebook-webapp.desktop"
52− icon: "../../graphics/applicationIcons/facebook.png"
53− category: 0
54− mimetype: "application/x-desktop"
55− title: "Facebook"
56− comment: ""
57− dndUri: "file:///usr/share/applications/facebook-webapp.desktop"
58− metadata: ""
59− }
60− ListElement {
61− uri: "application:///usr/share/applications/webbrowser-app.desktop"
62− icon: "../../graphics/applicationIcons/browser.png"
63− category: 0
64− mimetype: "application/x-desktop"
65− title: "Browser"
66− comment: ""
67− dndUri: "file:///usr/share/applications/webbrowser-app.desktop"
68− metadata: ""
69− }
70− ListElement {
71− uri: "application:///usr/share/applications/gmail-webapp.desktop"
72− icon: "../../graphics/applicationIcons/gmail.png"
73− category: 0
74− mimetype: "application/x-desktop"
75− title: "GMail"
76− comment: ""
77− dndUri: "file:///usr/share/applications/gmail-webapp.desktop"
78− metadata: ""
79− }
80−}
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: "radius_pressed.sci"
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: Theme.palette.selected.backgroundText
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−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 "../../Components"
19−
20−ResponsiveFlowView {
21− id: root
22− clip: true
23−
24− signal updateScreenshots
25−
26− Connections {
27− target: shell
28− onDashShownChanged: if (shell.dashShown && shell.stageScreenshotsReady) updateScreenshots();
29− onStageScreenshotsReadyChanged: if (shell.dashShown && shell.stageScreenshotsReady) updateScreenshots();
30− }
31−
32− Behavior on height { NumberAnimation { duration: 200; easing.type: Easing.InOutQuad } }
33−
34− property bool canEnableTerminationMode: true
35−
36− onCanEnableTerminationModeChanged: {
37− if (!canEnableTerminationMode)
38− terminationModeEnabled = false
39− }
40−
41− // when false, it means it's on activation mode
42− property bool terminationModeEnabled: false
43−
44− maximumNumberOfColumns: 10
45− minimumHorizontalSpacing: units.gu(2)
46− referenceDelegateWidth: units.gu(11)
47− verticalSpacing: units.gu(2)
48−
49− delegate: Item {
50− width: runningAppTile.width + root.horizontalSpacing
51− height: runningAppTile.height + root.verticalSpacing
52−
53− RunningApplicationTile {
54− id: runningAppTile
55− objectName: "runningAppTile " + model.application.name
56− anchors {
57− top: parent.top
58− horizontalCenter: parent.horizontalCenter
59− }
60− application: model.application
61− onRequestedActivationMode: { root.terminationModeEnabled = false }
62− onRequestedTerminationMode: {
63− if (canEnableTerminationMode)
64− root.terminationModeEnabled = true
65− }
66− onRequestedApplicationTermination: {
67− shell.applicationManager.stopProcess(application)
68− }
69− onRequestedApplicationActivation: {
70− shell.activateApplication(application.desktopFile)
71− }
72−
73− terminationModeEnabled: root.terminationModeEnabled
74−
75− Component.onCompleted: {
76− root.updateScreenshots.connect(updateScreenshotFromCache);
77− }
78− }
79− }
80−
81− move: Transition {
82− NumberAnimation { properties: "x,y"; duration: 400; easing.type: Easing.OutCubic }
83− }
84−}
Dash/Apps/graphics/close_btn@9.pngdeleted

Binary file not shown.

Dash/Dash.qmldeleted−90
@@ -1,90 +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 showScopeOnLoaded: "home.scope"
28− property real contentScale: 1.0
29−
30− function setCurrentScope(scopeId, animate, reset) {
31− var scopeIndex = filteredScopes.findFirst(Scopes.RoleId, scopeId)
32−
33− if (scopeIndex == -1) {
34− console.warn("No match for scope with id: %1".arg(scopeId))
35− return
36− }
37−
38− if (scopeIndex == dashContent.currentIndex && !reset) {
39− // the scope is already the current one
40− return
41− }
42−
43− dashContent.setCurrentScopeAtIndex(scopeIndex, animate, reset)
44− }
45−
46− SortFilterProxyModel {
47− id: filteredScopes
48− model: Scopes {
49− id: scopes
50− }
51− dynamicSortFilter: true
52−
53− filterRole: Scopes.RoleVisible
54− filterRegExp: RegExp("^true$")
55− }
56−
57− DashContent {
58− id: dashContent
59− objectName: "dashContent"
60− anchors.fill: parent
61− model: filteredScopes
62− scopes: scopes
63− onMovementStarted: dashbar.startNavigation()
64− onMovementEnded: dashbar.stopNavigation()
65− onContentFlickStarted: dashbar.finishNavigation()
66− onContentEndReached: dashbar.finishNavigation()
67− onPreviewShown: dashbar.finishNavigation()
68− onScopeLoaded: {
69− if (scopeId == dash.showScopeOnLoaded) {
70− dash.setCurrentScope(scopeId, false, false)
71− dash.showScopeOnLoaded = ""
72− }
73− }
74− scale: dash.contentScale
75− clip: scale != 1.0
76− }
77−
78− DashBar {
79− id: dashbar
80− objectName: "dashbar"
81− anchors.bottom: parent.bottom
82− anchors.left: parent.left
83− anchors.right: parent.right
84− model: filteredScopes
85− currentIndex: dashContent.currentIndex
86− onItemSelected: dashContent.setCurrentScopeAtIndex(index, true, false)
87− opacity: dash.contentScale == 1.0 ? 1.0 : 0.0
88− Behavior on opacity { NumberAnimation { easing.type: Easing.OutQuad; duration: 150 } }
89− }
90−}
Dash/DashApps.qmldeleted−55
@@ -1,55 +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−
25−GenericScopeView {
26− id: scopeView
27−
28− // FIXME: a way to aggregate these models would be ideal
29− property var mainStageApplicationsModel: shell.applicationManager.mainStageApplications
30− property var sideStageApplicationModel: shell.applicationManager.sideStageApplications
31−
32− ListModel {
33− id: dummyVisibilityModifier
34−
35− ListElement { name: "running-apps" }
36− }
37−
38− SortFilterProxyModel {
39− id: runningApplicationsModel
40−
41− property var firstModel: mainStageApplicationsModel
42− property var secondModel: sideStageApplicationModel
43− property bool canEnableTerminationMode: scopeView.isCurrent
44−
45− model: dummyVisibilityModifier
46− filterRole: 0
47− filterRegExp: invertMatch ? ((mainStageApplicationsModel.count === 0 &&
48− sideStageApplicationModel.count === 0) ? RegExp("running-apps") : RegExp("")) : RegExp("disabled")
49− invertMatch: scopeView.scope.searchQuery.length == 0
50− }
51−
52− onScopeChanged: {
53− scopeView.scope.categories.overrideResults("recent", runningApplicationsModel);
54− }
55−}
Dash/DashBar.qmldeleted−129
@@ -1,129 +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(3.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− source: scope.iconHint
101− sourceSize { width: iconSize; height: iconSize }
102− // opacity: index == currentIndex ? 1 : 1 // same opacity for now
103− }
104− }
105− }
106− }
107− }
108−
109− Rectangle {
110− anchors {
111− left: parent.left
112− right: parent.right
113− bottom: parent.bottom
114− }
115− height: dashBar.lineHeight
116− color: "black"
117−
118− Rectangle {
119− id: highlightLine
120− color: Theme.palette.selected.foreground
121− height: parent.height
122− anchors.bottom: parent.bottom
123− z: 1
124−
125− Behavior on x {NumberAnimation { duration: 150; easing.type: Easing.OutCubic}}
126− Behavior on width {NumberAnimation { duration: 150; easing.type: Easing.OutCubic}}
127− }
128− }
129−}
Dash/DashContent.qmldeleted−148
@@ -1,148 +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−
24− property var model: null
25− property var scopes: null
26− property real contentProgress: Math.max(0, Math.min(dashContentList.contentX / (dashContentList.contentWidth - dashContentList.width), units.dp(1)))
27− property alias currentIndex: dashContentList.currentIndex
28−
29− property ScopeDelegateMapper scopeMapper : ScopeDelegateMapper {}
30−
31− signal movementStarted()
32− signal movementEnded()
33− signal contentFlickStarted()
34− signal contentEndReached()
35− signal previewShown()
36− signal scopeLoaded(string scopeId)
37− signal positionedAtBeginning()
38−
39− // If we set the current scope index before the scopes have been added,
40− // then we need to wait until the loaded signals gets emitted from the scopes
41− property var set_current_index: undefined
42− Connections {
43− target: scopes
44− onLoadedChanged: {
45− if (scopes.loaded && set_current_index != undefined) {
46− setCurrentScopeAtIndex(set_current_index[0], set_current_index[1], set_current_index[2]);
47− set_current_index = undefined;
48− }
49− }
50− }
51−
52− function setCurrentScopeAtIndex(index, animate, reset) {
53− var storedMoveDuration = dashContentList.highlightMoveDuration
54− var storedMoveSpeed = dashContentList.highlightMoveVelocity
55− if (!animate) {
56− dashContentList.highlightMoveVelocity = units.gu(4167)
57− dashContentList.highlightMoveDuration = 0
58− }
59−
60− // if the scopes haven't loaded yet, then wait until they are.
61− if (!scopes.loaded) {
62− set_current_index = [ index, animate, reset ]
63− return;
64− }
65− set_current_index = undefined;
66−
67− if (dashContentList.count > index)
68− {
69− dashContentList.currentIndex = index
70−
71− if (reset) {
72− dashContent.positionedAtBeginning()
73− }
74− }
75−
76− if (!animate) {
77− dashContentList.highlightMoveDuration = storedMoveDuration
78− dashContentList.highlightMoveVelocity = storedMoveSpeed
79− }
80− }
81−
82− ListView {
83− id: dashContentList
84− objectName: "dashContentList"
85−
86− interactive: dashContent.scopes.loaded
87−
88− anchors.fill: parent
89− model: dashContent.model
90− orientation: ListView.Horizontal
91− boundsBehavior: Flickable.DragAndOvershootBounds
92− flickDeceleration: units.gu(625)
93− maximumFlickVelocity: width * 5
94− snapMode: ListView.SnapOneItem
95− highlightMoveDuration: 250
96− highlightRangeMode: ListView.StrictlyEnforceRange
97− /* FIXME: workaround rendering issue due to use of ShaderEffectSource in
98− UbuntuShape. While switching from the home scope to the People scope the
99− rendering would block midway.
100− */
101− cacheBuffer: 2147483647
102− onMovementStarted: dashContent.movementStarted()
103− onMovementEnded: dashContent.movementEnded()
104−
105− // If the number of items is less than the current index, then need to reset to another item.
106− onCountChanged: {
107− if (currentIndex >= count)
108− dashContent.setCurrentScopeAtIndex(count-1, true, true)
109− }
110−
111− delegate:
112− Loader {
113− width: ListView.view.width
114− height: ListView.view.height
115− asynchronous: true
116− source: scopeMapper.map(scope.id)
117−
118− // these are needed for autopilot tests
119− readonly property string scopeId: scope.id
120− readonly property bool isCurrent: ListView.isCurrentItem
121− readonly property bool isLoaded: status == Loader.Ready
122−
123− onLoaded: {
124− item.scope = Qt.binding(function() { return scope })
125− item.isCurrent = Qt.binding(function() { return ListView.isCurrentItem })
126− item.searchHistory = Qt.binding(function() { return shell.searchHistory })
127− dashContentList.movementStarted.connect(item.movementStarted)
128− dashContent.positionedAtBeginning.connect(item.positionedAtBeginning)
129− dashContent.scopeLoaded(item.scope.id)
130− }
131− Connections {
132− target: item
133− ignoreUnknownSignals: true
134− onEndReached: contentEndReached()
135− onPreviewShownChanged: {
136− if (item.previewShown) {
137− previewShown()
138− dashContentList.interactive = false
139− } else {
140− dashContentList.interactive = true
141− }
142− }
143− }
144−
145− Component.onDestruction: active = false
146− }
147− }
148−}
Dash/DashMusic.qmldeleted−96
@@ -1,96 +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−ScopeView {
24− id: scopeView
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: scopeView.scope
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− function getRenderer(categoryId) {
54− switch (categoryId) {
55− case "featured": return "Music/MusicCarousel.qml"
56− default: return "Music/MusicFilterGrid.qml"
57− }
58− }
59−
60− ScopeListView {
61− id: categoryView
62− anchors.fill: parent
63− model: scopeView.categories
64−
65− onAtYEndChanged: if (atYEnd) endReached()
66− onMovingChanged: if (moving && atYEnd) endReached()
67−
68− delegate: ListItems.Base {
69− id: base
70− highlightWhenPressed: false
71−
72− property string categoryId: model.categoryId
73−
74− Loader {
75− anchors { top: parent.top; left: parent.left; right: parent.right }
76− source: scopeView.getRenderer(base.categoryId)
77− onLoaded: {
78− item.model = results
79− }
80− }
81− }
82−
83− sectionProperty: "name"
84− sectionDelegate: ListItems.Header {
85− width: categoryView.width
86− text: i18n.tr(section)
87− }
88− pageHeader: PageHeader {
89− id: pageHeader
90− width: categoryView.width
91− text: i18n.tr("Music")
92− searchEntryEnabled: true
93− searchHistory: scopeView.searchHistory
94− }
95− }
96−}
Dash/DashPreview.qmldeleted−188
@@ -1,188 +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−
23− property var previewData
24−
25− property string title: ""
26− property real previewWidthRatio: 0.5
27−
28− property Component header
29− property Component buttons
30− property Component body
31−
32− readonly property bool narrowMode: width <= height
33− readonly property int contentSpacing: units.gu(3)
34−
35− signal close()
36− signal previewImageClicked()
37−
38− color: Qt.rgba(0, 0, 0, .3)
39− clip: true
40−
41− Connections {
42− target: shell.applicationManager
43− onMainStageFocusedApplicationChanged: {
44− root.close();
45− }
46− onSideStageFocusedApplicationChanged: {
47− root.close();
48− }
49− }
50−
51− MouseArea {
52− anchors.fill: parent
53− }
54−
55− Item {
56− id: headerRow
57− height: units.gu(4)
58− anchors {
59− top: parent.top
60− left: parent.left
61− right: parent.right
62− margins: root.contentSpacing
63− }
64−
65− MouseArea {
66− anchors {
67− fill: parent
68− leftMargin: -root.contentSpacing
69− rightMargin: -root.contentSpacing
70− topMargin: -root.contentSpacing
71− }
72−
73− onClicked: root.close();
74− }
75−
76− Item {
77− id: labelItem
78− anchors {
79− fill: parent
80− rightMargin: closePreviewImage.width + spacing
81− }
82−
83− property int spacing: units.gu(2)
84−
85− Label {
86− id: title
87− objectName: "titleLabel"
88− anchors {
89− left: parent.left
90− right: parent.right
91− }
92−
93− elide: Text.ElideRight
94− fontSize: "x-large"
95− font.weight: Font.Light
96− color: Theme.palette.selected.backgroundText
97− opacity: 0.9
98− text: root.title
99− style: Text.Raised
100− styleColor: "black"
101− }
102− Image {
103− id: closePreviewImage
104− source: "graphics/tablet/icon_close_preview.png"
105− width: units.gu(4)
106− height: units.gu(1.5)
107− anchors {
108− bottom: title.bottom
109− bottomMargin: units.dp(7)
110− left: parent.left
111− leftMargin: title.paintedWidth + labelItem.spacing
112− }
113− }
114− }
115− }
116−
117− Row {
118− id: contentRow
119− anchors {
120− left: parent.left
121− right: parent.right
122− top: headerRow.bottom
123− bottom: parent.bottom
124− margins: root.contentSpacing
125− }
126−
127− spacing: units.gu(2)
128−
129− Flickable {
130− id: leftFlickable
131− anchors.top: parent.top
132− anchors.bottom: parent.bottom
133− width: root.narrowMode ? contentRow.width : contentRow.width * root.previewWidthRatio
134− contentHeight: leftColumn.height
135− clip: true
136−
137− Column {
138− id: leftColumn
139− objectName: "leftColumn"
140− anchors {
141− left: parent.left
142− right: parent.right
143− }
144− height: childrenRect.height
145− spacing: units.gu(1)
146−
147− Loader {
148− id: headerLoader
149− anchors.left: parent.left
150− anchors.right: parent.right
151− sourceComponent: root.header
152− }
153− Loader {
154− id: buttonLoader
155− anchors.left: parent.left
156− anchors.right: parent.right
157− sourceComponent: root.buttons
158− }
159− }
160− }
161−
162− Flickable {
163− id: rightFlickable
164− anchors.top: parent.top
165− anchors.bottom: parent.bottom
166− width: narrowMode ? 0 : (contentRow.width - leftColumn.width - contentRow.spacing)
167− contentHeight: rightColumn.height
168− clip: true
169−
170− Column {
171− id: rightColumn
172− objectName: "rightColumn"
173− height: childrenRect.height
174− anchors {
175− left: parent.left
176− right: parent.right
177− }
178− }
179− }
180− }
181−
182− Loader {
183− parent: root.narrowMode ? leftColumn : rightColumn
184− anchors.left: parent.left
185− anchors.right: parent.right
186− sourceComponent: root.body
187− }
188−}
Dash/DashVideos.qmldeleted−201
@@ -1,201 +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−ScopeView {
24− id: scopeView
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: scopeView.scope
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− function getRenderer(categoryId) {
55− switch (categoryId) {
56− case "featured": return "Video/VideosCarousel.qml"
57− default: return "Video/VideosFilterGrid.qml"
58− }
59− }
60−
61− OpenEffect {
62− id: effect
63− anchors {
64− fill: parent
65− bottomMargin: -bottomOverflow
66− }
67− sourceItem: categoryView
68−
69− enabled: gap > 0.0
70−
71− topGapPx: (1 - gap) * positionPx
72− topOpacity: Math.max(0, (1 - gap * 1.2))
73− bottomGapPx: positionPx + gap * (targetBottomGapPx - positionPx)
74− bottomOverflow: units.gu(6)
75− bottomOpacity: 1 - (gap * 0.8)
76−
77− property int targetBottomGapPx: height - units.gu(8) - bottomOverflow
78− property real gap: previewLoader.open ? 1.0 : 0.0
79−
80− Behavior on gap {
81− NumberAnimation {
82− duration: 200
83− easing.type: Easing.InOutQuad
84− onRunningChanged: {
85− if (!previewLoader.open && !running) {
86− previewLoader.onScreen = false;
87− }
88− }
89− }
90− }
91− }
92−
93− ScopeListView {
94− id: categoryView
95− anchors.fill: parent
96− model: scopeView.categories
97− forceNoClip: previewLoader.onScreen
98−
99− onAtYEndChanged: if (atYEnd) endReached()
100− onMovingChanged: if (moving && atYEnd) endReached()
101−
102− delegate: ListItems.Base {
103− id: base
104− highlightWhenPressed: false
105− property string categoryId: model.categoryId
106−
107− Loader {
108− id: loader
109− anchors { top: parent.top; left: parent.left; right: parent.right }
110− source: scopeView.getRenderer(base.categoryId)
111− onLoaded: {
112− item.model = results
113− }
114−
115− Connections {
116− target: loader.item
117− onClicked: {
118− var dataItem;
119− // VideosCarousel and VideosFilterGrid have different
120− // clicked signals, accomodate for that
121− if (categoryId == "featured") {
122− var fileUri = delegateItem.model.uri.replace(/^[^:]+:/, "")
123− dataItem = {fileUri: fileUri, nfoUri: delegateItem.model.comment}
124− } else {
125− dataItem = data;
126− }
127− if (dataItem.nfoUri != "") {
128− previewLoader.videoData = dataItem;
129− previewLoader.open = true;
130− effect.positionPx = mapToItem(categoryView, 0, itemY).y;
131− }
132− }
133− }
134− }
135− }
136−
137− sectionProperty: "name"
138− sectionDelegate: ListItems.Header {
139− width: categoryView.width
140− text: i18n.tr(section)
141− }
142−
143− pageHeader: PageHeader {
144− id: pageHeader
145− width: categoryView.width
146− text: i18n.tr("Videos")
147− searchEntryEnabled: true
148− searchHistory: scopeView.searchHistory
149− }
150− }
151−
152− Loader {
153− id: previewLoader
154− height: effect.bottomGapPx - effect.topGapPx
155− anchors {
156− top: parent.top
157− topMargin: effect.topGapPx
158− left: parent.left
159− right: parent.right
160− }
161− sourceComponent: onScreen ? previewComponent : undefined
162−
163− property bool open: false
164− property bool onScreen: false
165− property var videoData
166−
167−
168− onOpenChanged: {
169− if (open) {
170− onScreen = true;
171− }
172− }
173−
174− onLoaded: {
175− item.item = videoData;
176− }
177− }
178−
179− Component {
180− id: previewComponent
181−
182− VideoPreview {
183− id: preview
184− anchors.fill: parent
185− onClose: open = false;
186− }
187− }
188−
189− // TODO: Move as InverseMouseArea to DashPreview
190− MouseArea {
191− enabled: previewLoader.onScreen
192− anchors {
193− fill: parent
194− topMargin: effect.bottomGapPx
195− }
196− onClicked: {
197− previewLoader.open = false;
198− }
199− }
200−
201−}
Dash/Generic/GenericCarousel.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 Ubuntu.Components 0.1
19−import "../../Components"
20−import "../../Components/IconUtil.js" as IconUtil
21−
22−Carousel {
23− id: genericCarousel
24−
25− tileAspectRatio: 198 / 288
26− minimumTileWidth: units.gu(13)
27− itemComponent: carouselDelegateGeneric
28− selectedItemScaleFactor: 1.14
29− cacheBuffer: 1404 // 18px * 13gu * 6
30− height: implicitHeight + units.gu(6)
31−
32− Component {
33− id: carouselDelegateGeneric
34−
35− BaseCarouselDelegate {
36− id: item
37−
38− UbuntuShape {
39− anchors.fill: parent
40− radius: "medium"
41− borderSource: ""
42− image: Image {
43− asynchronous: true
44− sourceSize { width: item.width; height: item.height }
45− source: model ? IconUtil.from_gicon(model.icon) : ""
46− }
47− }
48−
49− BorderImage {
50− anchors.centerIn: parent
51− opacity: 0.6
52− source: "../../Components/graphics/non-selected.sci"
53− width: parent.width + units.gu(1.5)
54− height: parent.height + units.gu(1.5)
55− }
56− }
57− }
58−}
Dash/Generic/GenericFilterGrid.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 "../../Components"
19−import "../../Components/IconUtil.js" as IconUtil
20−
21−FilterGrid {
22− id: filtergrid
23−
24− minimumHorizontalSpacing: units.gu(0.5)
25− delegateWidth: units.gu(11)
26− delegateHeight: units.gu(9.5)
27− verticalSpacing: units.gu(2)
28−
29− property int iconWidth: units.gu(8)
30− property int iconHeight: units.gu(7.5)
31−
32− signal clicked(int index, var delegateItem, real itemY)
33− signal pressAndHold(int index, var delegateItem, real itemY)
34−
35− delegate: Tile {
36− id: tile
37− objectName: "delegate" + index
38− width: filtergrid.cellWidth
39− height: filtergrid.cellHeight
40− text: model.title
41− imageWidth: filtergrid.iconWidth
42− imageHeight: filtergrid.iconHeight
43−
44− source: IconUtil.from_gicon(model.icon)
45−
46− fillMode: Image.PreserveAspectCrop
47−
48− onClicked: {
49− var data = { model: model }
50− filtergrid.clicked(index, data, tile.y)
51− }
52−
53− onPressAndHold: {
54− var data = { model: model }
55− filtergrid.pressAndHold(index, data, tile.y)
56− }
57− }
58−}
Dash/Generic/GenericPreview.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−import "../../Components"
20−import "../../Components/ListItems" as ListItems
21−import "../../Components/IconUtil.js" as IconUtil
22−import ".."
23−
24−DashPreview {
25− id: genericPreview
26−
27− title: previewData.title
28− previewWidthRatio: 0.6
29−
30− property url url: IconUtil.from_gicon(previewData.image)
31−
32− header: UbuntuShape {
33− id: urlLoader
34− anchors.left: parent.left
35− anchors.right: parent.right
36− height: width * previewImage.sourceSize.height / previewImage.sourceSize.width
37− radius: "medium"
38− image: Image {
39− id: previewImage
40− asynchronous: true
41− source: genericPreview.url
42− fillMode: Image.PreserveAspectCrop
43− }
44− }
45−
46− buttons: GridView {
47− id: buttons
48− model: genericPreview.previewData.actions
49−
50− property int numOfRows: (count + 1) / 2
51− property int spacing: units.gu(1)
52− height: Math.max(units.gu(4), units.gu(4)*numOfRows + spacing*(numOfRows - 1))
53−
54− cellWidth: Math.max(units.gu(9), width / 2)
55− cellHeight: buttonHeight + spacing
56− property int buttonWidth: Math.max(0, width / 2 - spacing)
57− property int buttonHeight: units.gu(4)
58−
59− delegate: Button {
60− width: Math.max(units.gu(4), buttons.buttonWidth)
61− height: buttons.buttonHeight
62− color: "#dd4814"
63− text: modelData.displayName
64− iconSource: modelData.iconHint
65− iconPosition: "right"
66− visible: true
67− onClicked: {
68− genericPreview.previewData.execute(modelData.id, { })
69− }
70− }
71− focus: false
72− }
73− body: Column {
74− spacing: units.gu(2)
75−
76− Label {
77− anchors { left: parent.left; right: parent.right }
78− visible: text != ""
79− fontSize: "medium"
80− opacity: 0.6
81− color: "white"
82− text: previewData.subtitle.replace(/[\r\n]+/g, "<br />")
83− style: Text.Raised
84− styleColor: "black"
85− wrapMode: Text.WordWrap
86− textFormat: Text.RichText
87− // FIXME: workaround for https://bugreports.qt-project.org/browse/QTBUG-33020
88− onWidthChanged: { wrapMode = Text.NoWrap; wrapMode = Text.WordWrap }
89− }
90−
91− Label {
92− anchors { left: parent.left; right: parent.right }
93− visible: text != ""
94− fontSize: "small"
95− opacity: 0.6
96− color: "white"
97− text: previewData.description.replace(/[\r\n]+/g, "<br />")
98− style: Text.Raised
99− styleColor: "black"
100− wrapMode: Text.WordWrap
101− textFormat: Text.RichText
102− // FIXME: workaround for https://bugreports.qt-project.org/browse/QTBUG-33020
103− onWidthChanged: { wrapMode = Text.NoWrap; wrapMode = Text.WordWrap }
104− }
105− }
106−}
Dash/GenericScopeView.qmldeleted−281
@@ -1,281 +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 "../Components/IconUtil.js" as IconUtil
22−
23−ScopeView {
24− id: scopeView
25− property alias previewShown: previewLoader.onScreen
26−
27− onIsCurrentChanged: {
28− pageHeader.resetSearch();
29− }
30−
31− onMovementStarted: categoryView.showHeader()
32−
33− Binding {
34− target: scopeView.scope
35− property: "searchQuery"
36− value: pageHeader.searchQuery
37− }
38−
39− Connections {
40− target: panel
41− onSearchClicked: if (isCurrent) {
42− pageHeader.triggerSearch()
43− categoryView.showHeader()
44− }
45− }
46−
47− ScopeListView {
48− id: categoryView
49− anchors.fill: parent
50− model: scopeView.categories
51− forceNoClip: previewLoader.onScreen
52−
53− onAtYEndChanged: if (atYEnd) endReached()
54− onMovingChanged: if (moving && atYEnd) endReached()
55−
56− property int expandedIndex: -1
57−
58− delegate: ListItems.Base {
59− highlightWhenPressed: false
60−
61− readonly property bool expandable: rendererLoader.item ? rendererLoader.item.expandable : false
62− readonly property bool filtered: rendererLoader.item ? rendererLoader.item.filter : true
63−
64− Loader {
65− id: rendererLoader
66− anchors {
67− top: parent.top
68− left: parent.left
69− right: parent.right
70− }
71−
72− source: getRenderer(model.renderer, model.contentType)
73−
74− onLoaded: {
75− if (source.toString().indexOf("Apps/RunningApplicationsGrid.qml") != -1) {
76− // TODO: the running apps grid doesn't support standard scope results model yet
77− item.firstModel = results.firstModel
78− item.secondModel = results.secondModel
79− } else {
80− item.model = results
81− }
82− item.objectName = categoryId
83− }
84−
85− Connections {
86− target: rendererLoader.item
87− onClicked: {
88− effect.positionPx = mapToItem(categoryView, 0, itemY).y
89− scopeView.scope.activate(delegateItem.model.uri,
90− delegateItem.model.icon,
91− delegateItem.model.category,
92− 0,
93− delegateItem.model.mimetype,
94− delegateItem.model.title,
95− delegateItem.model.comment,
96− delegateItem.model.dndUri,
97− delegateItem.model.metadata)
98− }
99− onPressAndHold: {
100− effect.positionPx = mapToItem(categoryView, 0, itemY).y
101− scopeView.scope.preview( delegateItem.model.uri,
102− delegateItem.model.icon,
103− delegateItem.model.category,
104− 0,
105− delegateItem.model.mimetype,
106− delegateItem.model.title,
107− delegateItem.model.comment,
108− delegateItem.model.dndUri,
109− delegateItem.model.metadata)
110− }
111− }
112− Connections {
113− target: categoryView
114− onExpandedIndexChanged: {
115− var item = rendererLoader.item;
116− if (item.expandable) {
117− var shouldFilter = index != categoryView.expandedIndex;
118− if (shouldFilter != item.filter) {
119− // If the filter animation will be seen start it, otherwise, just flip the switch
120− var shrinkingVisible = shouldFilter && y + item.collapsedHeight < categoryView.height;
121− var growingVisible = !shouldFilter && y + height < categoryView.height;
122− if (shrinkingVisible || growingVisible) {
123− item.startFilterAnimation(shouldFilter)
124− } else {
125− item.filter = shouldFilter;
126− }
127− if (!shouldFilter) {
128− categoryView.maximizeVisibleArea(index, item.uncollapsedHeight);
129− }
130− }
131− }
132− }
133− }
134− }
135− }
136−
137− sectionProperty: "name"
138− sectionDelegate: ListItems.Header {
139− property var delegate: categoryView.item(delegateIndex)
140− width: categoryView.width
141− text: section
142− image: {
143− if (delegate && delegate.expandable)
144− return delegate.filtered ? "graphics/header_handlearrow.png" : "graphics/header_handlearrow2.png"
145− return "";
146− }
147− onClicked: {
148− if (categoryView.expandedIndex != delegateIndex)
149− categoryView.expandedIndex = delegateIndex;
150− else
151− categoryView.expandedIndex = -1;
152− }
153− }
154− pageHeader: PageHeader {
155− id: pageHeader
156− objectName: "pageHeader"
157− width: categoryView.width
158− text: scopeView.scope.name
159− searchEntryEnabled: true
160− }
161− }
162−
163− function getDefaultRendererId(contentType) {
164− switch (contentType) {
165− default: return "grid";
166− }
167− }
168−
169− function getRenderer(rendererId, contentType) {
170− if (rendererId == "default") {
171− rendererId = getDefaultRendererId(contentType);
172− }
173− switch (rendererId) {
174− case "grid": {
175− switch (contentType) {
176− case "video": return "Generic/GenericFilterGridPotrait.qml";
177− default: return "Generic/GenericFilterGrid.qml";
178− }
179− }
180− case "carousel": return "Generic/GenericCarousel.qml";
181− case "special": {
182− switch (contentType) {
183− case "apps": return "Apps/RunningApplicationsGrid.qml";
184− default: return "Generic/GenericFilterGrid.qml";
185− }
186− }
187− default: return "Generic/GenericFilterGrid.qml";
188− }
189− }
190−
191− OpenEffect {
192− id: effect
193− anchors {
194− fill: parent
195− bottomMargin: -bottomOverflow
196− }
197− sourceItem: categoryView
198−
199− enabled: gap > 0.0
200−
201− topGapPx: (1 - gap) * positionPx
202− topOpacity: (1 - gap * 1.2)
203− bottomGapPx: positionPx + gap * (targetBottomGapPx - positionPx)
204− bottomOverflow: units.gu(20)
205− bottomOpacity: 1 - (gap * 0.8)
206−
207− property int targetBottomGapPx: height - units.gu(8) - bottomOverflow
208− property real gap: previewLoader.open ? 1.0 : 0.0
209−
210− Behavior on gap {
211− NumberAnimation {
212− duration: 200
213− easing.type: Easing.InOutQuad
214− onRunningChanged: {
215− if (!previewLoader.open && !running) {
216− previewLoader.onScreen = false
217− }
218− }
219− }
220− }
221− }
222−
223− Connections {
224− target: scopeView.scope
225− onPreviewReady: {
226− previewLoader.previewData = preview
227− previewLoader.open = true
228− }
229− }
230−
231− PreviewDelegateMapper {
232− id: previewDelegateMapper
233− }
234−
235− Connections {
236− ignoreUnknownSignals: true
237− target: previewLoader.valid ? previewLoader.item : null
238− onClose: {
239− previewLoader.open = false
240− }
241− }
242−
243− Loader {
244− id: previewLoader
245− property var previewData
246− height: effect.bottomGapPx - effect.topGapPx
247− anchors {
248− top: parent.top
249− topMargin: effect.topGapPx
250− left: parent.left
251− right: parent.right
252− }
253− source: onScreen ? previewDelegateMapper.map(previewLoader.previewData.rendererName) : ""
254−
255− property bool open: false
256− property bool onScreen: false
257− property bool valid: item !== null
258−
259− onOpenChanged: {
260− if (open) {
261− onScreen = true
262− }
263− }
264−
265− onLoaded: {
266− item.previewData = Qt.binding(function() { return previewLoader.previewData })
267− }
268− }
269−
270− // TODO: Move as InverseMouseArea to DashPreview
271− MouseArea {
272− enabled: previewLoader.onScreen
273− anchors {
274− fill: parent
275− topMargin: effect.bottomGapPx
276− }
277− onClicked: {
278− previewLoader.open = false;
279− }
280− }
281−}
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: "radius_pressed.sci"
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: Theme.palette.selected.backgroundText
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: Theme.palette.selected.backgroundText
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−47
@@ -1,47 +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− minimumHorizontalSpacing: units.gu(2)
24− maximumNumberOfColumns: 5
25− delegateWidth: units.gu(17)
26− delegateHeight: iconHeight + units.gu(3.5)
27− verticalSpacing: units.gu(2)
28−
29− readonly property int iconWidth: (width / columns) * 0.8
30− readonly property int iconHeight: iconWidth
31−
32− signal clicked(int index)
33−
34− delegate: AlbumTile {
35− objectName: "delegate" + index
36− width: filterGrid.cellWidth
37− height: filterGrid.cellHeight
38− iconWidth: filterGrid.iconWidth
39− iconHeight: filterGrid.iconHeight
40− artist: model.title
41− album: model.comment
42− source: model.icon
43− onClicked: {
44− filterGrid.clicked(index);
45− }
46− }
47−}
Dash/PreviewDelegateMapper.qmldeleted−36
@@ -1,36 +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 d: QtObject {
21− readonly property string genericPreview: "Generic/GenericPreview.qml"
22− readonly property string appPreview: "Apps/AppPreview.qml"
23− property var previewDelegateMapping: {"preview-generic": genericPreview,
24− "preview-application": appPreview,
25− }
26− }
27−
28− function map(rendererName) {
29− var customPreview = d.previewDelegateMapping[rendererName]
30− if (customPreview != undefined) {
31− return customPreview
32− }
33− console.debug("Renderer "+rendererName+" not found, using preview-generic")
34− return d.genericPreview
35− }
36−}
Dash/ScopeDelegateMapper.qmldeleted−34
@@ -1,34 +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 scopeDelegateMapping: {"mockmusicmaster.scope": "DashMusic.qml",
21− "applications.scope": "DashApps.qml",
22− "home.scope": "DashHome.qml",
23− "mockvideosmaster.scope": "DashVideos.qml"
24− }
25− property string genericScope: "GenericScopeView.qml"
26−
27− function map(scopeId) {
28− var customScope = scopeDelegateMapping[scopeId]
29− if (customScope != undefined) {
30− return customScope
31− }
32− return genericScope
33− }
34−}
Dash/ScopeView.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 Utils 0.1
19−import Unity 0.1
20−
21−FocusScope {
22− property Scope scope
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, note that
32− // removing this will break ScopeView::test_changeScope
33− onScopeChanged: {
34− timer.restart();
35− scope.activateApplication.connect(activateApp);
36− }
37−
38− function activateApp(desktopFilePath) {
39− shell.activateApplication(desktopFilePath);
40− }
41−
42− Timer {
43− id: timer
44− interval: 2000
45− onTriggered: scope.searchQuery = ""
46− }
47−
48− SortFilterProxyModel {
49− id: categoryFilter
50− model: scope.categories
51− dynamicSortFilter: true
52− filterRole: Categories.RoleCount
53− filterRegExp: /^0$/
54− invertMatch: true
55− }
56−}
Dash/SearchableResultModel.qmldeleted−40
@@ -1,40 +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 Utils 0.1
18−import Unity 0.1
19−
20−SortFilterProxyModel {
21− id: root
22−
23− property string searchQuery: ""
24− property bool hideOnSearch: false
25−
26− filterRole: CategoryResults.RoleTitle
27−
28− onSearchQueryChanged: {
29− if (searchQuery.length == 0) {
30− filterRegExp = RegExp("");
31− filterCaseSensitivity = Qt.CaseInsensitive;
32− } else if (!hideOnSearch) {
33− setFilterWildcard(searchQuery);
34− filterCaseSensitivity = Qt.CaseInsensitive;
35− } else {
36− filterRegExp = /^$/;
37− filterCaseSensitivity = Qt.CaseInsensitive;
38− }
39− }
40−}
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−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 ".."
20−import "../../Components"
21−
22−DashPreview {
23− id: root
24−
25− property var item
26− property alias ready: nfo.ready
27− property bool playable: fileUri != ""
28− readonly property url fileUri: item ? item.fileUri : ""
29− property url url: item ? item.nfoUri.replace(/\.nfo$/, "-fanart.jpg") : ""
30−
31− VideoInfo {
32− id: nfo
33− source: item ? item.nfoUri : ""
34− }
35−
36− title: nfo.ready ? nfo.video.title : ""
37− previewWidthRatio: 0.6
38−
39− onPreviewImageClicked: {
40− if (playable) {
41− shell.activateApplication('/usr/share/applications/mediaplayer-app.desktop', root.fileUri);
42− }
43− }
44−
45− // TODO: replace this UbuntuShape with the Video component once that lands
46− // with the player.
47− header: UbuntuShape {
48− id: urlLoader
49− anchors.left: parent.left
50− anchors.right: parent.right
51− height: width * previewImage.sourceSize.height / previewImage.sourceSize.width
52− radius: "medium"
53− image: Image {
54− id: previewImage
55− asynchronous: true
56− source: root.url
57− fillMode: Image.PreserveAspectCrop
58− }
59−
60− Image {
61− objectName: "playButton"
62− anchors.centerIn: parent
63− visible: root.playable
64− readonly property bool bigButton: parent.width > units.gu(40)
65− width: bigButton ? units.gu(8) : units.gu(4.5)
66− height: width
67− source: "../graphics/play_button%1%2.png".arg(previewImageMouseArea.pressed ? "_active" : "").arg(bigButton ? "_big" : "")
68− }
69−
70− MouseArea {
71− id: previewImageMouseArea
72− anchors.fill: parent
73− onClicked: root.previewImageClicked()
74− }
75− }
76−
77− buttons: Row {
78− spacing: units.gu(2)
79−
80− property int buttonWidth: Math.min(units.gu(22), (width - spacing) / 2)
81− Button {
82− width: parent.buttonWidth
83− color: Theme.palette.selected.foreground
84− text: nfo.ready && nfo.video.buyPrice != "" ? "Buy for " + nfo.video.buyPrice : ""
85− visible: text != ""
86− iconSource: "graphics/icon_button_amazon.png"
87− iconPosition: "right"
88− }
89− Button {
90− width: parent.buttonWidth
91− color: Theme.palette.selected.foreground
92− text: nfo.ready && nfo.video.buyPrice != "" ? "Rent for " + nfo.video.rentPrice : ""
93− visible: text != ""
94− iconSource: "graphics/icon_button_u1.png"
95− iconPosition: "right"
96− }
97− }
98−
99− body: Column {
100− spacing: units.gu(2)
101− RatingStars {
102− maximumRating: 10 // FIXME: this should happen on the backend side
103− rating: nfo.ready ? nfo.video.rating: 0
104− }
105−
106− Label {
107− text: nfo.ready ? nfo.video.plot : ""
108− color: Theme.palette.selected.backgroundText
109− opacity: .6
110− fontSize: "medium"
111− width: parent.width
112− wrapMode: Text.WordWrap
113− style: Text.Raised
114− styleColor: "black"
115− }
116−
117− Grid {
118− columns: 2
119− spacing: units.gu(1)
120− width: parent.width
121− property int firstColWidth: units.gu(9)
122− property int secondColWidth: width - firstColWidth - spacing
123− Label {
124− visible: directedLabel.visible
125− fontSize: "small"
126− opacity: 0.9
127− color: "white"
128− horizontalAlignment: Text.AlignRight
129− width: parent.firstColWidth
130− text: i18n.tr("Directed by:")
131− style: Text.Raised
132− styleColor: "black"
133− }
134− Label {
135− id: directedLabel
136− visible: text != ""
137− fontSize: "small"
138− opacity: 0.6
139− color: "white"
140− width: parent.secondColWidth
141− text: nfo.ready ? nfo.video.director : ""
142− style: Text.Raised
143− styleColor: "black"
144− wrapMode: Text.WordWrap
145− }
146− Label {
147− visible: starringLabel.visible
148− fontSize: "small"
149− opacity: 0.9
150− horizontalAlignment: Text.AlignRight
151− color: "white"
152− width: parent.firstColWidth
153− text: i18n.tr("Starring:")
154− style: Text.Raised
155− styleColor: "black"
156− }
157− Label {
158− id: starringLabel
159− visible: text != ""
160− fontSize: "small"
161− opacity: 0.6
162− color: "white"
163− width: parent.secondColWidth
164− text: nfo.ready ? nfo.getActors().join(", ") : ""
165− wrapMode: Text.WordWrap
166− style: Text.Raised
167− styleColor: "black"
168− }
169− Label {
170− visible: authorLabel.visible
171− fontSize: "small"
172− opacity: 0.9
173− horizontalAlignment: Text.AlignRight
174− color: "white"
175− width: parent.firstColWidth
176− text: i18n.tr("Author:")
177− style: Text.Raised
178− styleColor: "black"
179− }
180− Label {
181− id: authorLabel
182− visible: text != ""
183− fontSize: "small"
184− opacity: 0.6
185− color: "white"
186− width: parent.secondColWidth
187− text: nfo.ready ? nfo.video.author : ""
188− wrapMode: Text.WordWrap
189− style: Text.Raised
190− styleColor: "black"
191− }
192− }
193−
194− Label {
195− fontSize: "small"
196− opacity: 0.6
197− color: "white"
198− text: {
199− var parts = []
200− if (nfo.ready) {
201− if (nfo.video.year) parts.push(nfo.video.year)
202− if (nfo.video.runtime) parts.push("%1 minutes".arg(nfo.video.runtime))
203− }
204− return parts.join(", ");
205− }
206− style: Text.Raised
207− styleColor: "black"
208− }
209− }
210−}
Dash/Video/VideosFilterGrid.qmldeleted−50
@@ -1,50 +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− minimumHorizontalSpacing: units.gu(0.5)
24− maximumNumberOfColumns: 5
25− delegateWidth: units.gu(11)
26− delegateHeight: iconHeight + units.gu(2.5)
27− verticalSpacing: units.gu(2)
28−
29− readonly property int iconWidth: (width / columns) * 0.8
30− readonly property int iconHeight: iconWidth * 16 / 11
31−
32− signal clicked(int index, var data, real itemY)
33−
34− delegate: Tile {
35− id: tile
36− objectName: "delegate" + index
37− width: filtergrid.cellWidth
38− height: filtergrid.cellHeight
39− text: model.title
40− imageWidth: filtergrid.iconWidth
41− imageHeight: filtergrid.iconHeight
42− source: model.icon
43− fillMode: Image.PreserveAspectCrop
44− onClicked: {
45− var fileUri = model.uri.replace(/^[^:]+:/, "")
46− var data = {fileUri: fileUri, nfoUri: model.comment}
47− filtergrid.clicked(index, data, tile.y);
48− }
49− }
50−}
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/header_handlearrow2@20.pngdeleted

Binary file not shown.

Dash/graphics/header_handlearrow@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/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/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−119
@@ -1,119 +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.Gestures 0.1
20−import LightDM 0.1 as LightDM
21−import "../Components"
22−import "../Components/Math.js" as MathLocal
23−
24−Showable {
25− id: greeter
26− enabled: shown
27− created: greeterContentLoader.status == Loader.Ready && greeterContentLoader.item.ready
28−
29− // 1 when fully shown and 0 when fully hidden
30− property real showProgress: MathLocal.clamp((width + x) / width, 0, 1)
31−
32− showAnimation: StandardAnimation { property: "x"; to: 0 }
33− hideAnimation: StandardAnimation { property: "x"; to: -width }
34−
35− property alias dragHandleWidth: dragHandle.width
36− property alias model: greeterContentLoader.model
37− property bool locked: shown && !LightDM.Greeter.promptless
38−
39− readonly property bool narrowMode: !multiUser && width <= units.gu(60)
40− readonly property bool multiUser: LightDM.Users.count > 1
41−
42− readonly property bool leftTeaserPressed: greeterContentLoader.status == Loader.Ready &&
43− greeterContentLoader.item.leftTeaserPressed
44− readonly property bool rightTeaserPressed: greeterContentLoader.status == Loader.Ready &&
45− greeterContentLoader.item.rightTeaserPressed
46−
47− signal selected(int uid)
48− signal unlocked(int uid)
49−
50− onRightTeaserPressedChanged: {
51− if (rightTeaserPressed && !locked) {
52− teasingTimer.start();
53− }
54− }
55−
56− Loader {
57− id: greeterContentLoader
58− objectName: "greeterContentLoader"
59− anchors.fill: parent
60− property var model: LightDM.Users
61− property int currentIndex: 0
62− property var infographicModel: LightDM.Infographic
63−
64− source: required ? "GreeterContent.qml" : ""
65−
66−
67− Connections {
68− target: greeterContentLoader.item
69−
70− onSelected: greeter.selected(uid);
71− onUnlocked: greeter.unlocked(uid);
72− }
73− }
74−
75− Timer {
76− id: teasingTimer
77− interval: 200
78− }
79−
80− states: [
81− State {
82− name: "teasing"
83− when: teasingTimer.running
84− PropertyChanges {
85− target: greeter
86− x: -units.gu(2)
87− }
88− }
89− ]
90− transitions: [
91− Transition {
92− from: "*"
93− to: "*"
94− NumberAnimation {
95− target: greeter
96− property: "x"
97− duration: 300
98− easing.type: Easing.OutCubic
99− }
100− }
101− ]
102−
103− DragHandle {
104− id: dragHandle
105−
106− anchors.top: parent.top
107− anchors.bottom: parent.bottom
108− anchors.right: parent.right
109−
110− // no need for requiring a directional drag since we are covering the screen
111− // anyway (i.e., no change user could be trying to interact with some other
112− // UI element)
113− distanceThreshold: 0
114−
115− enabled: greeter.narrowMode || !greeter.locked
116−
117− direction: Direction.Leftwards
118− }
119−}
Greeter/GreeterContent.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 LightDM 0.1 as LightDM
20−import "../Components"
21−
22−MouseArea {
23− id: root
24− anchors.fill: parent
25−
26− property bool ready: wallpaper.status == Image.Ready
27− property bool leftTeaserPressed: teasingMouseArea.pressed &&
28− teasingMouseArea.mouseX < teasingMouseArea.width / 2
29− property bool rightTeaserPressed: teasingMouseArea.pressed &&
30− teasingMouseArea.mouseX > teasingMouseArea.width / 2
31−
32− signal selected(int uid)
33− signal unlocked(int uid)
34−
35− CrossFadeImage {
36− id: wallpaper
37−
38− source: shell.background
39− anchors.fill: parent
40− fadeInFirst: false
41− }
42−
43− Rectangle {
44− anchors.fill: parent
45− color: "black"
46− opacity: 0.4
47− }
48−
49− Clock {
50− id: clock
51− visible: narrowMode
52−
53− anchors {
54− top: parent.top
55− topMargin: units.gu(2)
56− horizontalCenter: parent.horizontalCenter
57− }
58− }
59−
60− MouseArea {
61− id: teasingMouseArea
62− anchors.fill: parent
63− }
64−
65− Loader {
66− id: loginLoader
67− objectName: "loginLoader"
68− anchors {
69− left: parent.left
70− leftMargin: Math.min(parent.width * 0.16, units.gu(20))
71− verticalCenter: parent.verticalCenter
72− }
73− width: units.gu(29)
74− height: parent.height
75−
76− // TODO: Once we have a system API for determining which mode we are
77− // in, tablet/phone/desktop, that should be used instead of narrowMode.
78− source: greeter.narrowMode ? "" : "LoginList.qml"
79−
80− onLoaded: {
81− item.currentIndex = greeterContentLoader.currentIndex;
82− selected(item.currentIndex);
83− item.resetAuthentication();
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− greeterContentLoader.infographicModel.readyForDataChangeSlot();
126− }
127−
128− anchors {
129− verticalCenter: parent.verticalCenter
130− left: narrowMode ? root.left : loginLoader.right
131− right: root.right
132− }
133− }
134−}
Greeter/Lockscreen.qmldeleted−156
@@ -1,156 +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− onRequiredChanged: {
45− if (required && pinPadLoader.item) {
46− pinPadLoader.item.clear(false);
47− }
48− }
49−
50− function reset() {
51− // This causes the loader below to destry and recreate the source
52− pinPadLoader.resetting = true;
53− pinPadLoader.resetting = false;
54− }
55−
56− Image {
57− anchors.fill: parent
58− source: root.required ? root.background : ""
59− fillMode: Image.PreserveAspectCrop
60− }
61−
62− MouseArea {
63− anchors.fill: root
64− }
65−
66− Loader {
67− id: pinPadLoader
68− objectName: "pinPadLoader"
69− anchors {
70− left: parent.left
71− right: parent.right
72− verticalCenter: parent.verticalCenter
73− verticalCenterOffset: root.alphaNumeric ? -units.gu(10) : -units.gu(4)
74− }
75− property bool resetting: false
76−
77− source: (!resetting && root.required) ? (root.alphaNumeric ? "PassphraseLockscreen.qml" : "PinLockscreen.qml") : ""
78−
79− Connections {
80− target: pinPadLoader.item
81−
82− onEntered: {
83− LightDM.Greeter.respond(passphrase);
84− }
85−
86− onCancel: {
87− root.cancel()
88− }
89− }
90−
91− Binding {
92− target: pinPadLoader.item
93− property: "pinLength"
94− value: root.pinLength
95− }
96− Binding {
97− target: pinPadLoader.item
98− property: "placeholderText"
99− value: root.placeholderText
100− }
101− Binding {
102− target: pinPadLoader.item
103− property: "username"
104− value: root.username
105− }
106− }
107−
108− Column {
109− anchors {
110− left: parent.left
111− bottom: parent.bottom
112− bottomMargin: units.gu(4)
113− right: parent.right
114− }
115− height: childrenRect.height
116− spacing: units.gu(1)
117−
118− Icon {
119− objectName: "emergencyCallIcon"
120− height: units.gu(3)
121− width: height
122− anchors.horizontalCenter: parent.horizontalCenter
123− name: "phone-app-call-symbolic"
124− color: "#f3f3e7"
125− opacity: 0.6
126−
127− MouseArea {
128− anchors.fill: parent
129− onClicked: root.emergencyCall()
130− }
131− }
132−
133− Label {
134− text: i18n.tr("Emergency Call")
135− color: "#f3f3e7"
136− opacity: 0.6
137− fontSize: "medium"
138− anchors.horizontalCenter: parent.horizontalCenter
139− }
140− }
141−
142− Connections {
143− target: LightDM.Greeter
144−
145− onAuthenticationComplete: {
146− if (LightDM.Greeter.promptless) {
147− return;
148− }
149− if (LightDM.Greeter.authenticated) {
150− root.unlocked();
151− } else {
152− pinPadLoader.item.clear(true);
153− }
154− }
155− }
156−}
Greeter/LoginList.qmldeleted−293
@@ -1,293 +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− onCurrentIndexChanged: {
70− if (LightDM.Greeter.authenticationUser != userList.model.data(currentIndex, LightDM.UserRoles.NameRole)) {
71− root.resetAuthentication();
72− }
73− }
74−
75− onMovingInternallyChanged: {
76− // Only emit the selected signal once we stop moving to avoid frequent background changes
77− if (!movingInternally) {
78− root.selected(userList.currentIndex);
79− }
80− }
81−
82− delegate: Item {
83− width: parent.width
84− height: root.cellHeight
85−
86− readonly property bool belowHighlight: (userList.currentIndex < 0 && index > 0) || (userList.currentIndex >= 0 && index > userList.currentIndex)
87− readonly property int belowOffset: root.highlightedHeight - root.cellHeight
88−
89− opacity: {
90− // The goal here is to make names less and less opaque as they
91− // leave the highlight area. Can't simply use index, because
92− // that can change quickly if the user clicks at edges of
93− // list. So we use actual pixel distance.
94− var highlightDist = 0;
95− var realY = y - userList.contentY;
96− if (belowHighlight)
97− realY += belowOffset;
98− if (realY + height <= highlightItem.y)
99− highlightDist = realY + height - highlightItem.y;
100− else if (realY >= highlightItem.y + root.highlightedHeight)
101− highlightDist = realY - highlightItem.y - root.highlightedHeight;
102− else
103− return 1;
104− return 1 - Math.min(1, (Math.abs(highlightDist) + root.cellHeight) / ((root.numAboveBelow + 1) * root.cellHeight))
105− }
106−
107− Label {
108− objectName: "username" + index
109−
110− anchors {
111− left: parent.left
112− leftMargin: units.gu(2)
113− right: parent.right
114− rightMargin: units.gu(2)
115− top: parent.top
116− // Add an offset to topMargin for any items below the highlight
117− topMargin: units.gu(1) + (parent.belowHighlight ? parent.belowOffset : 0)
118− }
119− text: realName
120− color: "white"
121− elide: Text.ElideRight
122−
123− Behavior on anchors.topMargin { NumberAnimation { duration: root.moveDuration; easing.type: Easing.InOutQuad; } }
124− }
125−
126− MouseArea {
127− anchors {
128− left: parent.left
129− right: parent.right
130− top: parent.top
131− // Add an offset to topMargin for any items below the highlight
132− topMargin: parent.belowHighlight ? parent.belowOffset : 0
133− }
134− height: parent.height
135− enabled: userList.currentIndex !== index
136− onClicked: {
137− moveTimer.start();
138− userList.currentIndex = index;
139− }
140−
141− Behavior on anchors.topMargin { NumberAnimation { duration: root.moveDuration; easing.type: Easing.InOutQuad; } }
142− }
143− }
144−
145− // This is needed because ListView.moving is not true if the ListView
146− // moves because of an internal event (e.g. currentIndex has changed)
147− Timer {
148− id: moveTimer
149− running: false
150− repeat: false
151− interval: root.moveDuration
152− }
153− }
154−
155− Label {
156− id: infoLabel
157− objectName: "infoLabel"
158− anchors {
159− bottom: passwordInput.top
160− left: parent.left
161− topMargin: units.gu(1)
162− bottomMargin: units.gu(1)
163− leftMargin: units.gu(2)
164− rightMargin: units.gu(1)
165− }
166−
167− color: "white"
168− width: root.width - anchors.leftMargin - anchors.rightMargin
169− fontSize: "small"
170− textFormat: Text.StyledText
171− clip: true
172−
173− opacity: (userList.movingInternally || text == "") ? 0 : 1
174− Behavior on opacity {
175− NumberAnimation { duration: 100 }
176− }
177− }
178−
179− TextField {
180− id: passwordInput
181− objectName: "passwordInput"
182− anchors {
183− bottom: highlightItem.bottom
184− horizontalCenter: parent.horizontalCenter
185− margins: units.gu(1)
186− }
187− height: units.gu(4.5)
188− width: parent.width - anchors.margins * 2
189− opacity: userList.movingInternally ? 0 : 1
190−
191− Behavior on opacity {
192− NumberAnimation { duration: 100 }
193− }
194−
195− onAccepted: {
196− if (!enabled)
197− return;
198− root.focus = true; // so that it can handle Escape presses for us
199− enabled = false;
200− LightDM.Greeter.respond(text);
201− }
202− Keys.onEscapePressed: root.resetAuthentication()
203−
204− Image {
205− anchors {
206− right: parent.right
207− rightMargin: units.gu(2)
208− verticalCenter: parent.verticalCenter
209− }
210− visible: LightDM.Greeter.promptless
211− source: "graphics/icon_arrow.png"
212− }
213−
214− WrongPasswordAnimation {
215− id: wrongPasswordAnimation
216− target: passwordInput
217− }
218−
219− Connections {
220− target: Qt.inputMethod
221− onVisibleChanged: {
222− if (!Qt.inputMethod.visible) {
223− passwordInput.focus = false;
224− }
225− }
226− }
227−
228− }
229−
230− MouseArea {
231− anchors.fill: passwordInput
232− enabled: LightDM.Greeter.promptless
233− onClicked: {
234− if (LightDM.Greeter.authenticated)
235− root.unlocked(userList.currentIndex);
236− else
237− root.resetAuthentication();
238− }
239− }
240−
241− function resetAuthentication() {
242− if (!userList.currentItem) {
243− return;
244− }
245− infoLabel.text = "";
246− passwordInput.placeholderText = "";
247− passwordInput.text = "";
248− passwordInput.focus = false;
249− passwordInput.enabled = true;
250− root.wasPrompted = false;
251− LightDM.Greeter.authenticate(userList.model.data(currentIndex, LightDM.UserRoles.NameRole));
252− }
253−
254− Connections {
255− target: LightDM.Greeter
256−
257− onShowMessage: {
258− // inefficient, but we only rarely deal with messages
259− text = text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\n/g, "<br>");
260− if (isError)
261− text = "<font color=\"#df382c\">" + text + "</font>"
262− if (infoLabel.text == "")
263− infoLabel.text = text;
264− else
265− infoLabel.text = infoLabel.text + "<br>" + text;
266− }
267−
268− onShowPrompt: {
269− passwordInput.text = "";
270− passwordInput.placeholderText = text;
271− passwordInput.enabled = true;
272− passwordInput.echoMode = isSecret ? TextInput.Password : TextInput.Normal;
273− if (root.wasPrompted) // stay in text field if second prompt
274− passwordInput.focus = true;
275− root.wasPrompted = true;
276− }
277−
278− onAuthenticationComplete: {
279− if (LightDM.Greeter.promptless) {
280− passwordInput.placeholderText = LightDM.Greeter.authenticated ? "Tap to unlock" : "Retry";
281− return;
282− }
283− if (LightDM.Greeter.authenticated) {
284− root.unlocked(userList.currentIndex);
285− } else {
286− wrongPasswordAnimation.start();
287− root.resetAuthentication();
288− passwordInput.focus = true;
289− }
290− passwordInput.text = "";
291− }
292− }
293−}
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−180
@@ -1,180 +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.ListItems 0.1
20−import "../Components"
21−
22−Column {
23− id: root
24− anchors.centerIn: parent
25− spacing: units.gu(3.5)
26−
27− property alias placeholderText: pinentryField.placeholderText
28− property int padWidth: units.gu(34)
29− property int padHeight: units.gu(28)
30− property int pinLength: 4
31−
32− signal entered(string passphrase)
33− signal cancel()
34−
35− function clear(playAnimation) {
36− pinentryField.text = "";
37− if (playAnimation) {
38− wrongPasswordAnimation.start();
39− }
40− }
41−
42−
43− UbuntuShape {
44− id: pinentryField
45− objectName: "pinentryField"
46− anchors.horizontalCenter: parent.horizontalCenter
47− color: "#55000000"
48− width:root.padWidth
49− height: units.gu(5)
50− radius: "medium"
51− property string text: ""
52− property string placeholderText: ""
53− onTextChanged: {
54− pinentryFieldLabel.text = "";
55− for (var i = 0; i < text.length; ++i) {
56− pinentryFieldLabel.text += "•";
57− }
58− if (text.length === root.pinLength) {
59− root.entered(text);
60− }
61− }
62−
63− Label {
64− id: pinentryFieldLabel
65− anchors.centerIn: parent
66− font.pixelSize: units.dp(44)
67− color: "#f3f3e7"
68− opacity: 0.6
69− }
70− Label {
71− id: pinentryFieldPlaceHolder
72− anchors.centerIn: parent
73− color: "grey"
74− text: parent.placeholderText
75− visible: pinentryFieldLabel.text.length == 0
76− }
77− }
78−
79− UbuntuShape {
80− anchors {
81− left: parent.left
82− right: parent.right
83− margins: (parent.width - root.padWidth) / 2
84− }
85− height: root.padHeight
86− color: "#55000000"
87− radius: "medium"
88−
89− ThinDivider {
90− anchors {
91− left: parent.left
92− right: parent.right
93− top: parent.top
94− topMargin: root.padHeight / 4
95− }
96− }
97− ThinDivider {
98− anchors {
99− left: parent.left
100− right: parent.right
101− verticalCenter: parent.verticalCenter
102− }
103− }
104− ThinDivider {
105− anchors {
106− left: parent.left
107− right: parent.right
108− bottom: parent.bottom
109− bottomMargin: root.padHeight / 4
110− }
111− }
112−
113− ThinDivider {
114− anchors.centerIn: parent
115− anchors.horizontalCenterOffset: -root.padWidth / 6
116− width: root.padHeight
117− rotation: -90
118− }
119− ThinDivider {
120− anchors.centerIn: parent
121− anchors.horizontalCenterOffset: root.padWidth / 6
122− width: root.padHeight
123− rotation: -90
124− }
125−
126− Grid {
127− anchors {
128− left: parent.left
129− right: parent.right
130− margins: (parent.width - root.padWidth) / 2
131− }
132−
133− columns: 3
134−
135− Repeater {
136− model: 9
137−
138− PinPadButton {
139− objectName: "pinPadButton" + (index + 1)
140− width: root.padWidth / 3
141− height: root.padHeight / 4
142− text: index + 1
143−
144− onClicked: {
145− pinentryField.text = pinentryField.text + text;
146− }
147− }
148− }
149−
150− PinPadButton {
151− objectName: "pinPadButtonBack"
152− width: root.padWidth / 3
153− height: root.padHeight / 4
154− iconName: "back"
155− onClicked: root.cancel();
156− }
157−
158− PinPadButton {
159− objectName: "pinPadButton0"
160− width: root.padWidth / 3
161− height: root.padHeight / 4
162− text: "0"
163− onClicked: pinentryField.text = pinentryField.text + text
164− }
165−
166− PinPadButton {
167− objectName: "pinPadButtonErase"
168− width: root.padWidth / 3
169− height: root.padHeight / 4
170− iconName: "erase"
171− onClicked: pinentryField.text = pinentryField.text.substring(0, pinentryField.text.length-1)
172− }
173− }
174− }
175−
176− WrongPasswordAnimation {
177− id: wrongPasswordAnimation
178− target: pinentryField
179− }
180−}
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−100
@@ -1,100 +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− Item {
59− id: primary
60− height: searchBar.height
61− width: height
62−
63− Image {
64− id: magnifierImage
65− height: imageSize
66− width: height
67− anchors.centerIn: parent
68− source: "graphics/icon_search.png"
69− visible: !activityIndicator.visible && !clearImage.visible
70− }
71−
72− Image {
73− id: clearImage
74− height: imageSize
75− width: height
76− anchors.centerIn: parent
77− source: "graphics/icon_clear.png"
78− visible: !activityIndicator.visible && searchBar.text != ""
79− MouseArea {
80− anchors.fill: parent
81− onClicked: searchBar.text = ""
82− }
83− }
84− }
85−
86− primaryItem: primary
87− secondaryItem: MouseArea {
88− height: searchBar.height
89− width: height
90− onClicked: microphoneClicked()
91−
92− Image {
93− height: imageSize
94− width: height
95− anchors.centerIn: parent
96− source: "graphics/microphone.png"
97− }
98− }
99− }
100−}
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()
Launcher/Launcher.qmldeleted−243
@@ -1,243 +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−import Unity.Launcher 0.1
23−
24−Item {
25− id: root
26−
27− property bool available: true // can be used to disable all interactions
28−
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− switchToNextState("")
54− }
55−
56− function switchToNextState(state) {
57− animateTimer.nextState = state
58− animateTimer.start();
59− }
60−
61− function tease() {
62− if (available) {
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.preventHiding) {
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− MouseArea {
101− id: launcherDragArea
102− enabled: root.state == "visible"
103− anchors.fill: panel
104− anchors.rightMargin: -units.gu(2)
105− drag {
106− axis: Drag.XAxis
107− maximumX: 0
108− target: panel
109− }
110−
111− onReleased: {
112− if (panel.x < -panel.width/3) {
113− root.switchToNextState("")
114− } else {
115− root.switchToNextState("visible")
116− }
117− }
118−
119− }
120− MouseArea {
121− id: closeMouseArea
122− anchors {
123− left: launcherDragArea.right
124− top: parent.top
125− right: parent.right
126− bottom: parent.bottom
127− }
128− enabled: root.state == "visible"
129− onPressed: {
130− root.state = ""
131− }
132− }
133−
134− Rectangle {
135− id: backgroundShade
136− anchors.fill: parent
137− color: "black"
138− opacity: root.state == "visible" ? 0.6 : 0
139−
140− Behavior on opacity { NumberAnimation { duration: UbuntuAnimation.BriskDuration } }
141− }
142−
143− LauncherPanel {
144− id: panel
145− objectName: "launcherPanel"
146− width: root.panelWidth
147− anchors {
148− top: parent.top
149− bottom: parent.bottom
150− }
151− x: -width
152− model: LauncherModel
153−
154− property bool animate: true
155−
156− onApplicationSelected: {
157− root.state = ""
158− launcherApplicationSelected(desktopFile)
159− }
160− onDashItemSelected: {
161− root.state = ""
162− root.dashItemSelected(index)
163− }
164−
165− onPreventHidingChanged: {
166− if (dismissTimer.running) {
167− dismissTimer.restart();
168− }
169− }
170−
171− Behavior on x {
172− NumberAnimation {
173− // Disabling animation when dragging
174− duration: dragArea.dragging || launcherDragArea.drag.active ? 0 : 300;
175− easing.type: Easing.OutCubic
176− }
177− }
178− }
179−
180− EdgeDragArea {
181− id: dragArea
182−
183− direction: Direction.Rightwards
184−
185− enabled: root.available && root.state !== "visible"
186− width: root.dragAreaWidth
187− height: root.height
188−
189− onTouchXChanged: {
190− if (status !== DirectionalDragArea.Recognized)
191− return;
192−
193− // When the gesture finally gets recognized, the finger will likely be
194− // reasonably far from the edge. If we made the panel immediately
195− // follow the finger position it would be visually unpleasant as it
196− // would appear right next to the user's finger out of nowhere.
197− // Instead, we make the panel go towards the user's finger in several
198− // steps. ie., in an animated way.
199− var targetPanelX = Math.min(0, touchX - panel.width)
200− var delta = targetPanelX - panel.x
201− // the trick is not to go all the way (1.0) as it would cause a sudden jump
202− panel.x += 0.4 * delta
203− }
204−
205− onDraggingChanged: {
206− if (!dragging) {
207− if (distance > panel.width / 2) {
208− root.switchToNextState("visible")
209− if (distance > panel.width * 2) {
210− root.dash()
211− }
212− } else {
213− root.switchToNextState("")
214− }
215− }
216− }
217− }
218−
219− states: [
220− State {
221− name: "" // hidden state. Must be the default state ("") because "when:" falls back to this.
222− PropertyChanges {
223− target: panel
224− x: -root.panelWidth
225− }
226− },
227− State {
228− name: "visible"
229− PropertyChanges {
230− target: panel
231− x: 0
232− }
233− },
234− State {
235− name: "teasing"
236− when: teaseTimer.running
237− PropertyChanges {
238− target: panel
239− x: -root.panelWidth + units.gu(2)
240− }
241− }
242− ]
243−}
Launcher/LauncherDelegate.qmldeleted−203
@@ -1,203 +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− property int count: -1
25− property int progress: -1
26− property bool highlighted: false
27− property real maxAngle: 0
28− property bool inverted: false
29−
30− readonly property int effectiveHeight: Math.cos(angle * Math.PI / 180) * itemHeight
31− readonly property real foldedHeight: Math.cos(maxAngle * Math.PI / 180) * itemHeight
32−
33− property int itemWidth
34− property int itemHeight
35− // The angle used for rotating
36− property real angle: 0
37− // This is the offset that keeps the items inside the panel
38− property real offset: 0
39− property real itemOpacity: 1
40− property real brightness: 0
41−
42− onIconNameChanged: shaderEffectSource.scheduleUpdate();
43− onCountChanged: shaderEffectSource.scheduleUpdate();
44− onProgressChanged: shaderEffectSource.scheduleUpdate();
45− onHighlightedChanged: shaderEffectSource.scheduleUpdate();
46−
47− Item {
48− id: iconItem
49− width: parent.itemWidth
50− height: parent.itemHeight
51− anchors.centerIn: parent
52−
53− UbuntuShape {
54− id: iconShape
55− anchors.fill: parent
56− anchors.margins: units.gu(0.5)
57− radius: "medium"
58−
59− image: Image {
60− id: iconImage
61− sourceSize.width: iconShape.width
62− sourceSize.height: iconShape.height
63− source: "../graphics/applicationIcons/" + root.iconName + ".png"
64− }
65− }
66−
67− BorderImage {
68− id: overlayHighlight
69− anchors.centerIn: iconItem
70− rotation: inverted ? 180 : 0
71− source: root.highlighted ? "graphics/selected.sci" : "graphics/non-selected.sci"
72− width: root.itemWidth + units.gu(0.5)
73− height: root.itemHeight + units.gu(0.5)
74− }
75−
76− BorderImage {
77− objectName: "countEmblem"
78− anchors {
79− right: parent.right
80− top: parent.top
81− margins: -units.dp(1)
82− }
83− width: Math.min(units.gu(7.5), Math.max(units.gu(3), countLabel.implicitWidth + units.gu(2.5)))
84− height: units.gu(3)
85− source: "graphics/notification.sci"
86− visible: root.count > 0
87−
88− Label {
89− id: countLabel
90− text: root.count
91− anchors.centerIn: parent
92− width: units.gu(6)
93− horizontalAlignment: Text.AlignHCenter
94− elide: Text.ElideRight
95− color: "white"
96− fontSize: "small"
97− font.bold: true
98− }
99− }
100−
101− BorderImage {
102− id: progressOverlay
103− objectName: "progressOverlay"
104− anchors {
105− left: iconItem.left
106− right: iconItem.right
107− bottom: iconItem.bottom
108− leftMargin: units.gu(0.5)
109− rightMargin: units.gu(0.5)
110− bottomMargin: units.gu(0.5)
111− }
112− height: units.gu(1.5)
113− visible: root.progress > -1
114− source: "graphics/progressbar-trough.sci"
115−
116− // For fill calculation we need to remove the 2 units of border defined in .sci file
117− property int adjustedWidth: width - units.gu(2)
118−
119− Item {
120− anchors {
121− left: parent.left
122− top: parent.top
123− bottom: parent.bottom
124− }
125− width: Math.min(100, root.progress) / 100 * parent.adjustedWidth + units.gu(1)
126− clip: true
127−
128− BorderImage {
129− anchors {
130− left: parent.left
131− top: parent.top
132− bottom: parent.bottom
133− }
134− width: progressOverlay.width
135− source: "graphics/progressbar-fill.sci"
136− }
137− }
138− }
139− }
140−
141− ShaderEffect {
142− id: transformEffect
143− anchors.centerIn: parent
144− anchors.verticalCenterOffset: root.offset
145− width: parent.itemWidth
146− height: parent.itemHeight
147− property real itemOpacity: root.itemOpacity
148− property real brightness: Math.max(-1, root.brightness)
149− property real angle: root.angle
150− rotation: root.inverted ? 180 : 0
151−
152− property variant source: ShaderEffectSource {
153− id: shaderEffectSource
154− sourceItem: iconItem
155− hideSource: true
156− live: false
157− }
158−
159− transform: [
160− // Rotating 3 times at top/bottom because that increases the perspective.
161− // This is a hack, but as QML does not support real 3D coordinates
162− // getting a higher perspective can only be done by a hack. This is the most
163− // readable/understandable one I could come up with.
164− Rotation {
165− axis { x: 1; y: 0; z: 0 }
166− origin { x: iconItem.width / 2; y: angle > 0 ? 0 : iconItem.height; z: 0 }
167− angle: root.angle * 0.7
168− },
169− Rotation {
170− axis { x: 1; y: 0; z: 0 }
171− origin { x: iconItem.width / 2; y: angle > 0 ? 0 : iconItem.height; z: 0 }
172− angle: root.angle * 0.7
173− },
174− Rotation {
175− axis { x: 1; y: 0; z: 0 }
176− origin { x: iconItem.width / 2; y: angle > 0 ? 0 : iconItem.height; z: 0 }
177− angle: root.angle * 0.7
178− },
179− // Because rotating it 3 times moves it more to the front/back, i.e. it gets
180− // bigger/smaller and we need a scale to compensate that again.
181− Scale {
182− xScale: 1 - (Math.abs(angle) / 500)
183− yScale: 1 - (Math.abs(angle) / 500)
184− origin { x: iconItem.width / 2; y: iconItem.height / 2}
185− }
186− ]
187−
188− // Using a fragment shader instead of QML's opacity and BrightnessContrast
189− // to be able to do both in one step which gives quite some better performance
190− fragmentShader: "
191− varying highp vec2 qt_TexCoord0;
192− uniform sampler2D source;
193− uniform lowp float brightness;
194− uniform lowp float itemOpacity;
195− void main(void)
196− {
197− highp vec4 sourceColor = texture2D(source, qt_TexCoord0);
198− sourceColor.rgb = mix(sourceColor.rgb, vec3(step(0.0, brightness)), abs(brightness));
199− sourceColor *= itemOpacity;
200− gl_FragColor = sourceColor;
201− }"
202− }
203−}
Launcher/LauncherPanel.qmldeleted−512
@@ -1,512 +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.ListItems 0.1 as ListItems
20−import Unity 0.1
21−import Unity.Launcher 0.1
22−import Ubuntu.Components.Popups 0.1
23−import "../Components/ListItems"
24−
25−Item {
26− id: root
27−
28− rotation: inverted ? 180 : 0
29−
30− property var model
31− property bool inverted: true
32− property bool dragging: false
33− property bool moving: launcherListView.moving || launcherListView.flicking
34− property bool preventHiding: moving || dndArea.draggedIndex >= 0 || dndArea.quickListPopover !== null || dndArea.pressed
35− property int highlightIndex: -1
36−
37− signal applicationSelected(string desktopFile)
38− signal dashItemSelected(int index)
39−
40− BorderImage {
41− id: background
42− source: "graphics/launcher_bg.sci"
43− anchors.fill: parent
44− anchors.rightMargin: root.inverted ? 0 : -units.gu(1)
45− anchors.leftMargin: root.inverted ? -units.gu(1) : 0
46− rotation: root.rotation
47− }
48−
49− Column {
50− id: mainColumn
51− anchors {
52− fill: parent
53− leftMargin: units.gu(0.5)
54− rightMargin: units.gu(0.5)
55− }
56−
57− MouseArea {
58− id: dashItem
59− width: parent.width
60− height: units.gu(7)
61− onClicked: root.dashItemSelected(0)
62− z: 1
63− Image {
64− objectName: "dashItem"
65− width: units.gu(5.5)
66− height: width
67− anchors.centerIn: parent
68− source: "graphics/home.png"
69− rotation: root.rotation
70− }
71− }
72− ThinDivider {
73− anchors {
74− left: parent.left
75− right: parent.right
76− margins: -mainColumn.anchors.leftMargin
77− }
78− rotation: root.rotation
79− }
80−
81− Item {
82− anchors.left: parent.left
83− anchors.right: parent.right
84− height: parent.height - dashItem.height - parent.spacing*2
85−
86− Item {
87− anchors.fill: parent
88− clip: true
89−
90− ListView {
91− id: launcherListView
92− objectName: "launcherListView"
93− anchors {
94− fill: parent
95− topMargin: -extensionSize + units.gu(0.5)
96− bottomMargin: -extensionSize + units.gu(1)
97− }
98− topMargin: extensionSize
99− bottomMargin: extensionSize
100− height: parent.height - dashItem.height - parent.spacing*2
101− model: root.model
102− cacheBuffer: itemHeight * 3
103− snapMode: interactive ? ListView.SnapToItem : ListView.NoSnap
104− highlightRangeMode: ListView.ApplyRange
105− preferredHighlightBegin: (height - itemHeight) / 2
106− preferredHighlightEnd: (height + itemHeight) / 2
107− spacing: units.gu(0.5)
108−
109− // The size of the area the ListView is extended to make sure items are not
110− // destroyed when dragging them outside the list. This needs to be at least
111− // itemHeight to prevent folded items from disappearing and DragArea limits
112− // need to be smaller than this size to avoid breakage.
113− property int extensionSize: itemHeight * 3
114−
115− // The height of the area where icons start getting folded
116− property int foldingAreaHeight: itemHeight * 0.75
117− property int itemWidth: width
118− property int itemHeight: width * 7.5 / 8
119− property int clickFlickSpeed: units.gu(60)
120− property int draggedIndex: dndArea.draggedIndex
121− property real realContentY: contentY - originY + topMargin
122− property int realItemHeight: itemHeight + spacing
123−
124− // In case the start dragging transition is running, we need to delay the
125− // move because the displaced transition would clash with it and cause items
126− // to be moved to wrong places
127− property bool draggingTransitionRunning: false
128− property int scheduledMoveTo: -1
129−
130− displaced: Transition {
131− NumberAnimation { properties: "x,y"; duration: UbuntuAnimation.FastDuration; easing: UbuntuAnimation.StandardEasing }
132− }
133−
134− delegate: FoldingLauncherDelegate {
135− id: launcherDelegate
136− objectName: "launcherDelegate" + index
137− itemHeight: launcherListView.itemHeight
138− itemWidth: launcherListView.itemWidth
139− width: itemWidth
140− height: itemHeight
141− iconName: model.icon
142− count: model.count
143− progress: model.progress
144− inverted: root.inverted
145− highlighted: dragging && index === root.highlightIndex
146− z: -Math.abs(offset)
147− maxAngle: 60
148− property bool dragging: false
149−
150− ThinDivider {
151− id: dropIndicator
152− objectName: "dropIndicator"
153− anchors.centerIn: parent
154− width: parent.width + mainColumn.anchors.leftMargin + mainColumn.anchors.rightMargin
155− opacity: 0
156− }
157−
158− states: [
159− State {
160− name: "selected"
161− when: dndArea.selectedItem === launcherDelegate && fakeDragItem.visible && !dragging
162− PropertyChanges {
163− target: launcherDelegate
164− itemOpacity: 0
165− }
166− },
167− State {
168− name: "dragging"
169− when: dragging
170− PropertyChanges {
171− target: launcherDelegate
172− height: units.gu(1)
173− itemOpacity: 0
174− }
175− PropertyChanges {
176− target: dropIndicator
177− opacity: 1
178− }
179− },
180− State {
181− name: "expanded"
182− when: dndArea.draggedIndex >= 0 && (dndArea.preDragging || dndArea.dragging || dndArea.postDragging) && dndArea.draggedIndex != index
183− PropertyChanges {
184− target: launcherDelegate
185− angle: 0
186− offset: 0
187− itemOpacity: 0.6
188− }
189− }
190− ]
191−
192− transitions: [
193− Transition {
194− from: ""
195− to: "selected"
196− NumberAnimation { properties: "itemOpacity"; duration: UbuntuAnimation.FastDuration }
197− },
198− Transition {
199− from: "*"
200− to: "expanded"
201− NumberAnimation { properties: "itemOpacity"; duration: UbuntuAnimation.FastDuration }
202− UbuntuNumberAnimation { properties: "angle,offset" }
203− },
204− Transition {
205− from: "expanded"
206− to: ""
207− NumberAnimation { properties: "itemOpacity"; duration: UbuntuAnimation.BriskDuration }
208− UbuntuNumberAnimation { properties: "angle,offset" }
209− },
210− Transition {
211− id: draggingTransition
212− from: "selected"
213− to: "dragging"
214− SequentialAnimation {
215− PropertyAction { target: launcherListView; property: "draggingTransitionRunning"; value: true }
216− ParallelAnimation {
217− UbuntuNumberAnimation { properties: "height" }
218− NumberAnimation { target: dropIndicator; properties: "opacity"; duration: UbuntuAnimation.FastDuration }
219− }
220− ScriptAction {
221− script: {
222− if (launcherListView.scheduledMoveTo > -1) {
223− launcherListView.model.move(dndArea.draggedIndex, launcherListView.scheduledMoveTo)
224− dndArea.draggedIndex = launcherListView.scheduledMoveTo
225− launcherListView.scheduledMoveTo = -1
226− }
227− }
228− }
229− PropertyAction { target: launcherListView; property: "draggingTransitionRunning"; value: false }
230− }
231− },
232− Transition {
233− from: "dragging"
234− to: "*"
235− NumberAnimation { target: dropIndicator; properties: "opacity"; duration: UbuntuAnimation.FastDuration }
236− NumberAnimation { properties: "itemOpacity"; duration: UbuntuAnimation.BriskDuration }
237− SequentialAnimation {
238− UbuntuNumberAnimation { properties: "height" }
239− PropertyAction { target: dndArea; property: "postDragging"; value: false }
240− PropertyAction { target: dndArea; property: "draggedIndex"; value: -1 }
241− }
242− }
243− ]
244− }
245−
246− MouseArea {
247− id: dndArea
248− objectName: "dndArea"
249− anchors {
250− fill: parent
251− topMargin: launcherListView.topMargin
252− bottomMargin: launcherListView.bottomMargin
253− }
254− drag.minimumY: -launcherListView.topMargin
255− drag.maximumY: height + launcherListView.bottomMargin
256−
257− property int draggedIndex: -1
258− property var selectedItem
259− property bool preDragging: false
260− property bool dragging: selectedItem !== undefined && selectedItem !== null && selectedItem.dragging
261− property bool postDragging: false
262− property int startX
263− property int startY
264− property var quickListPopover: null
265−
266− onPressed: {
267− selectedItem = launcherListView.itemAt(mouseX, mouseY + launcherListView.realContentY)
268− if (selectedItem !== null) {
269− selectedItem.highlighted = true
270− }
271− }
272−
273− onClicked: {
274− var index = Math.floor((mouseY + launcherListView.realContentY) / launcherListView.realItemHeight);
275− var clickedItem = launcherListView.itemAt(mouseX, mouseY + launcherListView.realContentY)
276−
277− // Check if we actually clicked an item or only at the spacing in between
278− if (clickedItem === null) {
279− return;
280− }
281−
282− // First/last item do the scrolling at more than 12 degrees
283− if (index == 0 || index == launcherListView.count - 1) {
284− if (clickedItem.angle > 12) {
285− launcherListView.flick(0, -launcherListView.clickFlickSpeed);
286− } else if (clickedItem.angle < -12) {
287− launcherListView.flick(0, launcherListView.clickFlickSpeed);
288− } else {
289− root.applicationSelected(LauncherModel.get(index).desktopFile);
290− }
291− return;
292− }
293−
294− // the rest launches apps up to an angle of 30 degrees
295− if (clickedItem.angle > 30) {
296− launcherListView.flick(0, -launcherListView.clickFlickSpeed);
297− } else if (clickedItem.angle < -30) {
298− launcherListView.flick(0, launcherListView.clickFlickSpeed);
299− } else {
300− root.applicationSelected(LauncherModel.get(index).desktopFile);
301− }
302− }
303−
304− onCanceled: {
305− selectedItem.highlighted = false
306− selectedItem = undefined;
307− preDragging = false;
308− postDragging = false;
309− }
310−
311− onReleased: {
312− var droppedIndex = draggedIndex;
313− if (dragging) {
314− postDragging = true;
315− } else {
316− draggedIndex = -1;
317− }
318−
319− if (!selectedItem) {
320− return;
321− }
322−
323− selectedItem.highlighted = false
324− selectedItem.dragging = false;
325− selectedItem = undefined;
326− preDragging = false;
327−
328− drag.target = undefined
329−
330− progressiveScrollingTimer.stop();
331− launcherListView.interactive = true;
332− if (droppedIndex >= launcherListView.count - 2 && postDragging) {
333− launcherListView.flick(0, -launcherListView.clickFlickSpeed);
334− }
335− }
336−
337− onPressAndHold: {
338− if (Math.abs(selectedItem.angle) > 30) {
339− return;
340− }
341−
342− draggedIndex = Math.floor((mouseY + launcherListView.realContentY) / launcherListView.realItemHeight);
343−
344− // Opening QuickList
345− var quickListModel = launcherListView.model.get(draggedIndex).quickList
346− var quickListAppId = launcherListView.model.get(draggedIndex).appId
347−
348− quickListPopover = PopupUtils.open(popoverComponent, selectedItem,
349− {model: quickListModel, appId: quickListAppId})
350−
351− launcherListView.interactive = false
352−
353− var yOffset = draggedIndex > 0 ? (mouseY + launcherListView.realContentY) % (draggedIndex * launcherListView.realItemHeight) : mouseY + launcherListView.realContentY
354−
355− fakeDragItem.iconName = launcherListView.model.get(draggedIndex).icon
356− fakeDragItem.x = 0
357− fakeDragItem.y = mouseY - yOffset + launcherListView.anchors.topMargin + launcherListView.topMargin
358− fakeDragItem.angle = selectedItem.angle * (root.inverted ? -1 : 1)
359− fakeDragItem.offset = selectedItem.offset * (root.inverted ? -1 : 1)
360− fakeDragItem.count = LauncherModel.get(draggedIndex).count
361− fakeDragItem.progress = LauncherModel.get(draggedIndex).progress
362− fakeDragItem.flatten()
363− drag.target = fakeDragItem
364−
365− startX = mouseX
366− startY = mouseY
367− }
368−
369− onPositionChanged: {
370− if (draggedIndex >= 0) {
371− if (!selectedItem.dragging) {
372− var distance = Math.max(Math.abs(mouseX - startX), Math.abs(mouseY - startY))
373− if (!preDragging && distance > units.gu(1.5)) {
374− preDragging = true;
375− PopupUtils.close(quickListPopover)
376− }
377− if (distance > launcherListView.itemHeight) {
378− selectedItem.dragging = true
379− preDragging = false;
380− }
381− }
382− if (!selectedItem.dragging) {
383− return
384− }
385−
386− var itemCenterY = fakeDragItem.y + fakeDragItem.height / 2
387−
388− // Move it down by the the missing size to compensate index calculation with only expanded items
389− itemCenterY += (launcherListView.itemHeight - selectedItem.height) / 2
390−
391− if (mouseY > launcherListView.height - launcherListView.topMargin - launcherListView.bottomMargin - launcherListView.realItemHeight) {
392− progressiveScrollingTimer.downwards = false
393− progressiveScrollingTimer.start()
394− } else if (mouseY < launcherListView.realItemHeight) {
395− progressiveScrollingTimer.downwards = true
396− progressiveScrollingTimer.start()
397− } else {
398− progressiveScrollingTimer.stop()
399− }
400−
401− var newIndex = (itemCenterY + launcherListView.realContentY) / launcherListView.realItemHeight
402−
403− if (newIndex > draggedIndex + 1) {
404− newIndex = draggedIndex + 1
405− } else if (newIndex < draggedIndex) {
406− newIndex = draggedIndex -1
407− } else {
408− return
409− }
410−
411− if (newIndex >= 0 && newIndex < launcherListView.count) {
412− if (launcherListView.draggingTransitionRunning) {
413− launcherListView.scheduledMoveTo = newIndex
414− } else {
415− launcherListView.model.move(draggedIndex, newIndex)
416− draggedIndex = newIndex
417− }
418− }
419− }
420− }
421− }
422− Timer {
423− id: progressiveScrollingTimer
424− interval: 2
425− repeat: true
426− running: false
427− property bool downwards: true
428− onTriggered: {
429− if (downwards) {
430− var minY = -launcherListView.topMargin
431− if (launcherListView.contentY > minY) {
432− launcherListView.contentY = Math.max(launcherListView.contentY - units.dp(2), minY)
433− }
434− } else {
435− var maxY = launcherListView.contentHeight - launcherListView.height + launcherListView.topMargin + launcherListView.originY
436− if (launcherListView.contentY < maxY) {
437− launcherListView.contentY = Math.min(launcherListView.contentY + units.dp(2), maxY)
438− }
439− }
440− }
441− }
442− }
443− }
444−
445− LauncherDelegate {
446− id: fakeDragItem
447− objectName: "fakeDragItem"
448− visible: dndArea.draggedIndex >= 0 && !dndArea.postDragging
449− itemWidth: launcherListView.itemWidth
450− itemHeight: launcherListView.itemHeight
451− height: itemHeight
452− width: itemWidth
453− rotation: root.rotation
454− highlighted: true
455− itemOpacity: 0.8
456−
457− function flatten() {
458− fakeDragItemAnimation.start();
459− }
460−
461− UbuntuNumberAnimation {
462− id: fakeDragItemAnimation
463− target: fakeDragItem;
464− properties: "angle,offset";
465− to: 0
466− }
467− }
468− }
469− }
470−
471− Component {
472− id: popoverComponent
473−
474− Popover {
475− id: popover
476− property var model
477− property string appId
478− contentWidth: quickListColumn.width
479−
480− // FIXME: There's a bug in the Popover positioning that it covers the item in case it is rotated.
481− // https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1204470
482− // For now, let's move the Popover around with callerMargin.
483− // Remove popupMargin once the bug is fixed.
484− property int popupMargin: root.inverted ? launcherListView.itemHeight : 0;
485−
486− callerMargin: units.gu(1) + popupMargin
487−
488− Column {
489− id: quickListColumn
490− width: units.gu(30)
491− height: childrenRect.height
492−
493− Repeater {
494− model: popover.model
495−
496− ListItems.Standard {
497− objectName: "quickListEntry" + index
498− text: (model.clickable ? "" : "<b>") + model.label + (model.clickable ? "" : "</b>")
499− highlightWhenPressed: model.clickable
500− onClicked: {
501− if (!model.clickable) {
502− return;
503− }
504− LauncherModel.quickListActionInvoked(appId, index);
505− PopupUtils.close(popover);
506− }
507− }
508− }
509− }
510− }
511− }
512−}
Launcher/graphics/highlight@18.pngdeleted

Binary file not shown.

Launcher/graphics/home@18.pngdeleted

Binary file not shown.

Launcher/graphics/launcher_bg@30.pngdeleted

Binary file not shown.

Launcher/graphics/launcher_bg@30.scideleted−5
@@ -1,5 +0,0 @@
1−border.left: 4
2−border.top: 4
3−border.bottom: 4
4−border.right: 66
5−source: launcher_bg@30.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/notification@30.pngdeleted

Binary file not shown.

Launcher/graphics/notification@30.scideleted−5
@@ -1,5 +0,0 @@
1−border.left: 36
2−border.top: 36
3−border.bottom: 36
4−border.right: 36
5−source: notification@30.png
Launcher/graphics/progressbar-fill@30.pngdeleted

Binary file not shown.

Launcher/graphics/progressbar-fill@30.scideleted−5
@@ -1,5 +0,0 @@
1−border.left: 36
2−border.top: 16
3−border.bottom: 28
4−border.right: 36
5−source: progressbar-fill@30.png
Launcher/graphics/progressbar-trough@30.pngdeleted

Binary file not shown.

Launcher/graphics/progressbar-trough@30.scideleted−5
@@ -1,5 +0,0 @@
1−border.left: 36
2−border.top: 16
3−border.bottom: 26
4−border.right: 36
5−source: progressbar-trough@30.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−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 Ubuntu.Components 0.1
19−import Unity.Notifications 1.0
20−
21−UbuntuShape {
22− id: notification
23−
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− property var notificationId
30− property var type
31− property var hints
32− property var notification
33−
34− objectName: "background"
35− implicitHeight: contentColumn.height + contentColumn.spacing * 2
36− color: Qt.rgba(0, 0, 0, 0.85)
37− opacity: 0
38−
39− clip: true
40−
41− Behavior on implicitHeight {
42− id: heightBehavior
43−
44− enabled: false
45− UbuntuNumberAnimation {
46− duration: UbuntuAnimation.SnapDuration
47− }
48− }
49−
50− // delay enabling height behavior until the add transition is complete
51− onOpacityChanged: if (opacity == 1) heightBehavior.enabled = true
52−
53− MouseArea {
54− id: interactiveArea
55−
56− anchors.fill: contentColumn
57− objectName: "interactiveArea"
58− enabled: notification.type == Notification.Interactive
59− onClicked: notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
60− }
61−
62− Column {
63− id: contentColumn
64−
65− anchors {
66− left: parent.left
67− right: parent.right
68− top: parent.top
69− margins: spacing
70− }
71−
72− spacing: units.gu(1)
73−
74− Row {
75− id: topRow
76−
77− spacing: contentColumn.spacing
78− anchors {
79− left: parent.left
80− right: parent.right
81− }
82−
83− UbuntuShape {
84− id: icon
85−
86− objectName: "icon"
87− width: units.gu(6)
88− height: units.gu(6)
89− visible: iconSource !== undefined && iconSource != ""
90− image: Image {
91− id: avatarIcon
92−
93− fillMode: Image.PreserveAspectCrop
94− }
95− }
96−
97− Image {
98− id: secondaryIcon
99−
100− objectName: "secondaryIcon"
101− width: units.gu(2)
102− height: units.gu(2)
103− visible: source !== undefined && source != ""
104− fillMode: Image.PreserveAspectCrop
105− }
106−
107− Column {
108− id: labelColumn
109− width: parent.width - x
110−
111− Label {
112− id: summaryLabel
113−
114− objectName: "summaryLabel"
115− anchors {
116− left: parent.left
117− right: parent.right
118− }
119− fontSize: "medium"
120− font.bold: true
121− color: Theme.palette.selected.backgroundText
122− elide: Text.ElideRight
123− }
124−
125− Label {
126− id: bodyLabel
127−
128− objectName: "bodyLabel"
129− anchors {
130− left: parent.left
131− right: parent.right
132− }
133− visible: body != ""
134− fontSize: "small"
135− color: Theme.palette.selected.backgroundText
136− opacity: 0.6
137− wrapMode: Text.WordWrap
138− maximumLineCount: 10
139− elide: Text.ElideRight
140− }
141− }
142− }
143−
144− Item {
145− id: buttonRow
146−
147− objectName: "buttonRow"
148− anchors {
149− left: parent.left
150− right: parent.right
151− }
152− visible: notification.type == Notification.SnapDecision
153− height: units.gu(4)
154−
155− property real buttonWidth: (width - contentColumn.spacing) / 2
156− property bool expanded
157−
158− Button {
159− id: leftButton
160−
161− objectName: "button1"
162− width: parent.expanded ? parent.width : parent.buttonWidth
163− anchors {
164− top: parent.top
165− bottom: parent.bottom
166− }
167− text: notification.type == Notification.SnapDecision && actionRepeater.count >= 2 ? actionRepeater.itemAt(1).actionLabel : ""
168− gradient: UbuntuColors.greyGradient
169− onClicked: {
170− if (actionRepeater.count > 2) {
171− buttonRow.expanded = !buttonRow.expanded
172− } else {
173− notification.notification.invokeAction(actionRepeater.itemAt(1).actionId)
174− }
175− }
176−
177− Behavior on width {
178− UbuntuNumberAnimation {
179− duration: UbuntuAnimation.SnapDuration
180− }
181− }
182− }
183−
184− Button {
185− id: rightButton
186−
187− objectName: "button0"
188− anchors {
189− left: leftButton.right
190− leftMargin: contentColumn.spacing
191− right: parent.right
192− }
193− text: notification.type == Notification.SnapDecision && actionRepeater.count >= 1 ? actionRepeater.itemAt(0).actionLabel : ""
194− anchors {
195− top: parent.top
196− bottom: parent.bottom
197− }
198− gradient: notification.hints == Notification.ButtonTint ? UbuntuColors.orangeGradient : UbuntuColors.greyGradient
199− visible: width > 0
200− onClicked: notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
201− }
202− }
203−
204− Column {
205− objectName: "buttonColumn"
206− spacing: contentColumn.spacing
207− anchors {
208− left: parent.left
209− right: parent.right
210− }
211−
212− // calculate initial position before Column takes over
213− y: buttonRow.y + buttonRow.height + contentColumn.spacing
214−
215− visible: notification.type == Notification.SnapDecision
216− height: buttonRow.expanded ? implicitHeight : 0
217−
218− Repeater {
219− id: actionRepeater
220−
221− model: notification.actions
222− delegate: Loader {
223− id: loader
224−
225− property string actionId: id
226− property string actionLabel: label
227−
228− anchors {
229− left: parent.left
230− right: parent.right
231− }
232−
233− Component {
234− id: actionButton
235−
236− Button {
237− objectName: "button" + index
238− anchors {
239− left: parent.left
240− right: parent.right
241− }
242−
243− text: loader.actionLabel
244− height: units.gu(4)
245− gradient: UbuntuColors.greyGradient
246− onClicked: notification.notification.invokeAction(loader.actionId)
247− }
248− }
249− sourceComponent: (index == 0 || index == 1) ? undefined : actionButton
250− }
251− }
252− }
253− }
254−}
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−
21−ListView {
22− id: notificationList
23−
24− objectName: "notificationList"
25− interactive: false
26−
27− spacing: units.gu(.5)
28− delegate: Notification {
29− objectName: "notification" + index
30− anchors {
31− left: parent.left
32− right: parent.right
33− }
34− type: model.type
35− hints: model.hints
36− iconSource: model.icon
37− secondaryIconSource: model.secondaryIcon
38− summary: model.summary
39− body: model.body
40− actions: model.actions
41− notificationId: model.id
42− notification: notificationList.model.getRaw(notificationId)
43−
44− // make sure there's no opacity-difference between the several
45− // elements in a notification
46− layer.enabled: add.running || remove.running || populate.running
47− }
48−
49− populate: Transition {
50− UbuntuNumberAnimation {
51− property: "opacity"
52− to: 1
53− duration: UbuntuAnimation.SnapDuration
54− }
55− }
56−
57− add: Transition {
58− UbuntuNumberAnimation {
59− property: "opacity"
60− to: 1
61− duration: UbuntuAnimation.SnapDuration
62− }
63− }
64−
65− remove: Transition {
66− UbuntuNumberAnimation {
67− property: "opacity"
68− to: 0
69− }
70− }
71−
72− displaced: Transition {
73− UbuntuNumberAnimation {
74− properties: "x,y"
75− }
76− }
77−}
Panel/IndicatorItem.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−import Ubuntu.Components 0.1
19−import Unity.Indicators 0.1 as Indicators
20−import "../Components"
21−
22−Item {
23− id: indicatorItem
24−
25− property alias widgetSource: loader.source
26− property bool highlighted: false
27− property bool dimmed: false
28− property var indicatorProperties: undefined
29−
30− opacity: dimmed ? 0.4 : 1
31− Behavior on opacity { StandardAnimation {} }
32−
33− // only visible when non-empty
34− visible: loader.item != undefined && loader.status == Loader.Ready ? loader.item.enabled : false
35− width: visible ? loader.item.width : 0
36−
37− Loader {
38− id: loader
39−
40− onLoaded: {
41− item.height = Qt.binding(function() { return indicatorItem.height; });
42−
43− for(var pName in indicatorProperties) {
44− if (item.hasOwnProperty(pName)) {
45− item[pName] = indicatorProperties[pName];
46− }
47− }
48− }
49− }
50−
51− Rectangle {
52− color: Theme.palette.selected.foreground
53− objectName: "highlight"
54− height: units.dp(2)
55− width: parent.width
56− anchors.top: parent.bottom
57− visible: highlighted
58−
59− opacity: highlighted ? 1 : 0
60− Behavior on opacity { StandardAnimation {} }
61− }
62−}
Panel/IndicatorRow.qmldeleted−91
@@ -1,91 +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: indicatorRow
23−
24− property QtObject currentItem : null
25− readonly property int currentItemIndex: currentItem ? currentItem.ownIndex : -1
26− property alias row: row
27− property QtObject indicatorsModel: null
28−
29− width: units.gu(40)
30− height: units.gu(3)
31−
32− function setDefaultItem() {
33− // The leftmost indicator
34− setCurrentItem(0);
35− }
36−
37− function setCurrentItem(index) {
38− if (currentItemIndex !== index) {
39− currentItem = rowRepeater.itemAt(index);
40− }
41− }
42−
43− Row {
44− id: row
45−
46− width: children.width
47− height: parent.height
48− anchors.right: parent.right
49−
50− Repeater {
51− id: rowRepeater
52− objectName: "rowRepeater"
53− model: indicatorsModel ? indicatorsModel : undefined
54−
55− Item {
56− id: itemWrapper
57− height: indicatorRow.height
58− width: childrenRect.width
59−
60− property int ownIndex: index
61− property alias highlighted: indicatorItem.highlighted
62− property alias dimmed: indicatorItem.dimmed
63−
64− IndicatorItem {
65− id: indicatorItem
66− height: parent.height
67−
68− highlighted: indicatorRow.state != "initial" ? itemWrapper.ownIndex == indicatorRow.currentItemIndex : false
69− dimmed: indicatorRow.state != "initial" ? itemWrapper.ownIndex != indicatorRow.currentItemIndex : false
70−
71− widgetSource: model.widgetSource
72− indicatorProperties : model.indicatorProperties
73− }
74−
75− opacity: {
76− if (!indicatorItem.highlighted && (indicatorRow.state == "locked" || indicatorRow.state == "commit")) {
77− return 0.0;
78− } else {
79− return 1.0;
80− }
81− }
82− Behavior on opacity {
83− StandardAnimation {
84− // flow away from current index
85− duration: (rowRepeater.count - Math.abs(indicatorRow.currentItemIndex - index)) * (500/rowRepeater.count)
86− }
87− }
88− }
89− }
90− }
91−}
Panel/Indicators.qmldeleted−371
@@ -1,371 +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.Gestures 0.1
20−
21−import "../Components"
22−import "../Components/ListItems"
23−import "../Components/Math.js" as MathLocal
24−
25−Showable {
26− id: indicators
27−
28− property real openedHeight: units.gu(71)
29− property int panelHeight: units.gu(3)
30− property bool pinnedMode: true //should be set true if indicators menu can cover whole screen
31−
32− property int hintValue
33− readonly property int lockThreshold: openedHeight / 2
34− property bool fullyOpened: height == openedHeight
35− property bool partiallyOpened: height > panelHeight && !fullyOpened
36− property real visualBottom: Math.max(y+height, y+indicatorRow.y+indicatorRow.height)
37−
38− // TODO: Perhaps we need a animation standard for showing/hiding? Each showable seems to
39− // use its own values. Need to ask design about this.
40− showAnimation: StandardAnimation {
41− property: "height"
42− duration: 350
43− to: openedHeight
44− easing.type: Easing.OutCubic
45−
46− // Re-size if we've changed the openHeight while shown.
47− onToChanged: {
48− if (indicators.shown) {
49− indicators.show();
50− }
51− }
52− }
53−
54− hideAnimation: StandardAnimation {
55− property: "height"
56− duration: 350
57− to: panelHeight
58− easing.type: Easing.OutCubic
59− }
60−
61− height: panelHeight
62−
63− onHeightChanged: {
64− // need to use handle.get_height(). As the handle height depends on indicators.height changes (but this is called first!)
65− var revealProgress = indicators.height - panelHeight
66− if (!showAnimation.running && !hideAnimation.running) {
67− if (revealProgress == 0) {
68− indicators.state = "initial";
69− } else if (revealProgress <= hintValue) {
70− indicators.state = "hint";
71− } else if (revealProgress > hintValue && revealProgress < lockThreshold) {
72− indicators.state = "reveal";
73− } else if (revealProgress >= lockThreshold && lockThreshold > 0) {
74− indicators.state = "locked";
75− }
76− }
77−
78− if (revealProgress == 0) {
79− menuContent.releaseContent();
80− }
81− }
82−
83− function calculateCurrentItem(xValue, useBuffer) {
84− var rowCoordinates;
85− var itemCoordinates;
86− var currentItem;
87− var distanceFromRightEdge;
88− var bufferExceeded = false;
89−
90− if (indicators.state == "commit" || indicators.state == "locked" || showAnimation.running || hideAnimation.running) return;
91−
92− /*
93− If user drags the indicator handle bar down a distance hintValue or less, this is 0.
94− If bar is dragged down a distance greater than or equal to lockThreshold, this is 1.
95− Otherwise it contains the bar's location as a fraction of the distance between hintValue (is 0) and lockThreshold (is 1).
96− */
97− var verticalProgress =
98− MathLocal.clamp((indicators.height - handle.height - hintValue) /
99− (lockThreshold - hintValue), 0, 1);
100−
101− /*
102− Vertical velocity check. Don't change the indicator if we're moving too quickly.
103− */
104− var verticalSpeed = Math.abs(yVelocityCalculator.calculate());
105− if (verticalSpeed >= 0.05 && indicatorRow.currentItem!=null) {
106− return;
107− }
108−
109− /*
110− Percentage of an indicator icon's width the user's press can stray horizontally from the
111− focused icon before we change focus to another icon. E.g. a value of 0.5 means you must
112− go right a distance of half an icon's width before focus moves to the icon on the right
113− */
114− var maxBufferThreshold = 0.5;
115−
116− /*
117− To help users find the indicator of their choice while opening the indicators, we add logic to add a
118− left/right buffer to each icon so it is harder for the focus to be moved accidentally to another icon,
119− as the user moves their finger down, but yet allows them to switch indicator if they want.
120− This buffer is wider the further the user's finger is from the top of the screen.
121− */
122− var effectiveBufferThreshold = maxBufferThreshold * verticalProgress;
123−
124− rowCoordinates = indicatorRow.mapToItem(indicatorRow.row, xValue, 0);
125− // get the current delegate
126− currentItem = indicatorRow.row.childAt(rowCoordinates.x, 0);
127− if (currentItem && currentItem != indicatorRow.currentItem ) {
128− itemCoordinates = indicatorRow.row.mapToItem(currentItem, rowCoordinates.x, 0);
129− distanceFromRightEdge = (currentItem.width - itemCoordinates.x) / (currentItem.width);
130− if (Math.abs(currentItem.ownIndex - indicatorRow.currentItemIndex) > 1) {
131− bufferExceeded = true;
132− } else {
133− if (indicatorRow.currentItemIndex < currentItem.ownIndex && distanceFromRightEdge < (1 - effectiveBufferThreshold)) {
134− bufferExceeded = true;
135− } else if (indicatorRow.currentItemIndex > currentItem.ownIndex && distanceFromRightEdge > effectiveBufferThreshold) {
136− bufferExceeded = true;
137− }
138− }
139− if ((!useBuffer || (useBuffer && bufferExceeded)) || indicatorRow.currentItem < 0 || indicatorRow.currentItem == null) {
140− indicatorRow.currentItem = currentItem;
141− }
142− } else if (!currentItem) {
143− indicatorRow.setDefaultItem();
144− }
145− }
146−
147− // eater
148− MouseArea {
149− anchors {
150− top: parent.top
151− bottom: handle.bottom
152− left: parent.left
153− right: parent.right
154− }
155− }
156−
157− VerticalThinDivider {
158− anchors {
159− top: indicators.top
160− topMargin: panelHeight
161− bottom: handle.bottom
162− right: indicators.left
163− }
164− width: units.dp(2)
165− source: "graphics/VerticalDivider.png"
166− }
167−
168− MenuContent {
169− id: menuContent
170− objectName: "menuContent"
171−
172− anchors {
173− left: parent.left
174− right: parent.right
175− top: indicatorRow.bottom
176− bottom: handle.top
177− }
178− indicatorsModel: indicatorsModel
179− clip: !indicators.fullyOpened
180− activeHeader: indicators.state == "hint" || indicators.state == "reveal"
181−
182− Connections {
183− target: indicatorRow
184− onCurrentItemIndexChanged: {
185− menuContent.setCurrentMenuIndex(indicatorRow.currentItemIndex);
186− }
187− }
188−
189− //small shadow gradient at bottom of menu
190− Rectangle {
191− anchors {
192− left: parent.left
193− right: parent.right
194− bottom: parent.bottom
195− }
196− height: units.gu(0.5)
197− gradient: Gradient {
198− GradientStop { position: 0.0; color: "transparent" }
199− GradientStop { position: 1.0; color: "black" }
200− }
201− opacity: 0.4
202− }
203− }
204−
205− Rectangle {
206− id: handle
207−
208− color: menuContent.backgroundColor
209−
210− anchors {
211− left: parent.left
212− right: parent.right
213− bottom: parent.bottom
214− }
215− height: get_height()
216− clip: height < handleImage.height
217−
218− function get_height() {
219− return Math.max(Math.min(handleImage.height, indicators.height - handleImage.height), 0);
220− }
221−
222− BorderImage {
223− id: handleImage
224− source: "graphics/handle.sci"
225− height: panelHeight
226− anchors {
227− left: parent.left
228− right: parent.right
229− bottom: parent.bottom
230− }
231− }
232− MouseArea { //prevent clicks passing through
233− anchors.fill: parent
234− }
235− }
236−
237− PanelBackground {
238− anchors.fill: indicatorRow
239− }
240−
241− IndicatorsDataModel {
242− id: indicatorsModel
243− }
244−
245− IndicatorRow {
246− id: indicatorRow
247− objectName: "indicatorRow"
248− anchors {
249− left: parent.left
250− right: parent.right
251− }
252− height: indicators.panelHeight
253− indicatorsModel: indicatorsModel
254− state: indicators.state
255−
256− Connections {
257− target: menuContent
258− onCurrentMenuIndexChanged: {
259− indicatorRow.setCurrentItem(menuContent.currentMenuIndex);
260− }
261− }
262− }
263−
264− Connections {
265− target: showAnimation
266− onRunningChanged: {
267− if (showAnimation.running) {
268− indicators.state = "commit";
269− }
270− }
271− }
272−
273− Connections {
274− target: hideAnimation
275− onRunningChanged: {
276− if (hideAnimation.running) {
277− indicators.state = "initial";
278− indicatorRow.currentItem = null;
279− }
280− }
281− }
282−
283− property var activeDragHandle: showDragHandle.dragging ? showDragHandle : hideDragHandle.dragging ? hideDragHandle : null
284− // connections to the active drag handle
285− Connections {
286− target: activeDragHandle
287− onTouchXChanged: {
288− indicators.calculateCurrentItem(activeDragHandle.touchX, true);
289− }
290− onTouchSceneYChanged: {
291− yVelocityCalculator.trackedPosition = activeDragHandle.touchSceneY;
292− }
293− }
294−
295− DragHandle {
296− id: showDragHandle
297− anchors.bottom: parent.bottom
298− // go beyond parent so that it stays reachable, at the top of the screen.
299− anchors.bottomMargin: pinnedMode ? 0 : -panelHeight
300− anchors.left: parent.left
301− anchors.right: parent.right
302− height: panelHeight
303− direction: Direction.Downwards
304− enabled: !indicators.shown
305− hintDisplacement: pinnedMode ? indicators.hintValue : 0
306− autoCompleteDragThreshold: maxTotalDragDistance / 2
307− stretch: true
308− maxTotalDragDistance: openedHeight - panelHeight
309− distanceThreshold: pinnedMode ? 0 : units.gu(3)
310−
311− onStatusChanged: {
312− if (status === DirectionalDragArea.Recognized) {
313− menuContent.activateContent();
314− }
315− }
316− }
317− DragHandle {
318− id: hideDragHandle
319− anchors.fill: handle
320− direction: Direction.Upwards
321− enabled: indicators.shown
322− hintDisplacement: indicators.hintValue
323− autoCompleteDragThreshold: maxTotalDragDistance / 6
324− stretch: true
325− maxTotalDragDistance: openedHeight - panelHeight
326− distanceThreshold: 0
327− }
328−
329− AxisVelocityCalculator {
330− id: yVelocityCalculator
331− }
332−
333− states: [
334− State {
335− name: "initial"
336− },
337− State {
338− name: "hint"
339− PropertyChanges {
340− target: indicatorRow;
341− y: pinnedMode ? 0 : panelHeight
342− }
343− StateChangeScript {
344− script: {
345− if (activeDragHandle) {
346− calculateCurrentItem(activeDragHandle.touchX, false);
347− }
348− }
349− }
350− },
351− State {
352− name: "reveal"
353− extend: "hint"
354− },
355− State {
356− name: "locked"
357− extend: "hint"
358− },
359− State {
360− name: "commit"
361− extend: "hint"
362− }
363− ]
364− state: "initial"
365−
366− transitions: [
367− Transition {
368− NumberAnimation {targets: [indicatorRow, menuContent]; property: "y"; duration: 300; easing.type: Easing.OutCubic}
369− }
370− ]
371−}
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: Theme.palette.selected.backgroundText
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: Theme.palette.selected.backgroundText
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.IndicatorsLegacy 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: Theme.palette.selected.backgroundText
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.IndicatorsLegacy 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: Theme.palette.selected.backgroundText
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.ActionState.Label];
77− iconSource = "image://gicon/" + action.state[Indicators.ActionState.IconSource];
78− enabled = action.state[Indicators.ActionState.Visible];
79− }
80−}
Panel/Indicators/DefaultIndicatorWidget2.qmldeleted−76
@@ -1,76 +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: Theme.palette.selected.backgroundText
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 (actionState == undefined) {
66− label = "";
67− iconSource = "";
68− enabled = false;
69− return;
70− }
71−
72− label = actionState.label;
73− iconSource = actionState.icon;
74− enabled = actionState.visible;
75− }
76−}
Panel/Indicators/NetworkIndicatorPage.qmldeleted−83
@@ -1,83 +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.IndicatorsLegacy 0.1 as Indicators
22−import Unity.IndicatorsLegacy.Network 0.1 as ICNetwork
23−import Ubuntu.Components 0.1
24−
25−PageStack {
26− id: networkPage
27− // Stops the search for a parent tree node.
28− // We don't want it going up to the indicator tabs.
29− // FIXME: need a better way of doing this.
30− // https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1211704
31− __propagated: null
32−
33− property alias title: _mainPage.title
34− property alias emptyText: pluginItem.emptyText
35− property alias busType: pluginItem.busType
36− property alias busName: pluginItem.busName
37− property alias actionsObjectPath : pluginItem.actionsObjectPath
38− property alias menuObjectPaths : pluginItem.menuObjectPaths
39−
40− anchors.fill: parent
41−
42− Page {
43− id: _mainPage
44−
45− Indicators.IndicatorPage {
46− id: pluginItem
47− anchors.fill: parent
48− }
49− }
50−
51− Component {
52− id: passwordPageComponent
53−
54− ICNetwork.PasswordPage {
55− agent: networkAgent
56− }
57− }
58−
59− ICNetwork.NetworkAgent {
60− id: networkAgent
61−
62− onSecretRequested: {
63− networkPage.push(passwordPageComponent, {"token": token});
64− }
65− }
66−
67− function start()
68− {
69− push(_mainPage);
70− pluginItem.start();
71− }
72−
73− function stop()
74− {
75− clear();
76− pluginItem.stop();
77− }
78−
79− function reset()
80− {
81− pluginItem.reset();
82− }
83−}
Panel/Indicators/NetworkIndicatorPage2.qmldeleted−82
@@ -1,82 +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: networkPage
27− // Stops the search for a parent tree node.
28− // We don't want it going up to the indicator tabs.
29− // FIXME: need a better way of doing this.
30− // https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1211704
31− __propagated: null
32−
33− property alias title: _mainPage.title
34− property alias emptyText: pluginItem.emptyText
35− property alias busName: pluginItem.busName
36− property alias actionsObjectPath : pluginItem.actionsObjectPath
37− property alias menuObjectPaths : pluginItem.menuObjectPaths
38−
39− anchors.fill: parent
40−
41− Page {
42− id: _mainPage
43−
44− Indicators.IndicatorPage {
45− id: pluginItem
46− anchors.fill: parent
47− }
48− }
49−
50− Component {
51− id: passwordPageComponent
52−
53− ICNetwork.PasswordPage {
54− agent: networkAgent
55− }
56− }
57−
58− ICNetwork.NetworkAgent {
59− id: networkAgent
60−
61− onSecretRequested: {
62− networkPage.push(passwordPageComponent, {"token": token});
63− }
64− }
65−
66− function start()
67− {
68− push(_mainPage);
69− pluginItem.start();
70− }
71−
72− function stop()
73− {
74− clear();
75− pluginItem.stop();
76− }
77−
78− function reset()
79− {
80− pluginItem.reset();
81− }
82−}
Panel/Indicators/NetworkIndicatorWidget.qmldeleted−109
@@ -1,109 +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.IndicatorsLegacy 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− rootMenuType: "com.canonical.indicator.root.network"
32−
33− // FIXME : Should us Ubuntu.Icon . results in low res images
34− Image {
35− id: networkIcon
36− objectName: "itemImage"
37− source: get_icon_for_signal(connectionState, signalStrength)
38− visible: source != ""
39− height: indicatorWidget.iconSize
40− width: indicatorWidget.iconSize
41− anchors.centerIn: parent
42− }
43−
44− onActionStateChanged: {
45− if (action == undefined || !action.valid) {
46− return;
47− }
48−
49− if (action.state == undefined) {
50− connectionState = 0;
51− return;
52− }
53−
54− connectionState = action.state[Indicators.NetworkActionState.Connection];
55− if (connectionState == Indicators.NetworkConnection.Activated) {
56− signalStrength = action.state[Indicators.NetworkActionState.SignalStrength];
57− }
58− }
59−
60− NumberAnimation {
61− id: activation_animation
62− target: indicatorWidget
63− property: "signalStrength"
64− from: 0
65− to: 100
66− duration: 2500 // 5 states in 2.5 seconds
67− loops: Animation.Infinite
68− }
69−
70− states: [
71− State {
72− name: "unknown"
73− when: connectionState < Indicators.NetworkConnection.Activating || connectionState > Indicators.NetworkConnection.Deactivating
74− PropertyChanges { target: activation_animation; running: false }
75− },
76− State {
77− name: "activating"
78− when: connectionState == Indicators.NetworkConnection.Activating
79− PropertyChanges { target: activation_animation; running: true }
80− },
81− State {
82− name: "activated"
83− when: connectionState == Indicators.NetworkConnection.Activated
84− PropertyChanges { target: activation_animation; running: false }
85− },
86− State {
87− name: "deactivating"
88− when: connectionState == Indicators.NetworkConnection.Deactivating
89− PropertyChanges { target: activation_animation; running: true }
90− }
91− ]
92−
93−
94− function get_icon_for_signal(con_state, value) {
95− if (con_state >= Indicators.NetworkConnection.Activating && con_state <= Indicators.NetworkConnection.Deactivating) {
96− if (value == 0) {
97− return "image://gicon/nm-signal-00";
98− } else if (value <= 25) {
99− return "image://gicon/nm-signal-25";
100− } else if (value <= 50) {
101− return "image://gicon/nm-signal-50";
102− } else if (value <= 75) {
103− return "image://gicon/nm-signal-75";
104− }
105− return "image://gicon/nm-signal-100";
106− }
107− return "image://gicon/wifi-none";
108− }
109−}
Panel/Indicators/client/IndicatorsPage.qmldeleted−91
@@ -1,91 +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−import QtQuick 2.0
22−import Ubuntu.Components 0.1
23−import Ubuntu.Components.ListItems 0.1 as ListItem
24−
25−Page {
26− id: page
27−
28− title: indicatorProperties && indicatorProperties.title ? indicatorProperties.title : ""
29− property variant indicatorProperties
30− property string pageSource : pageLoader.source
31−
32− anchors.fill: parent
33−
34− ListItem.Standard {
35− id: visualCheckItem
36− text: "Enable Visual Representation"
37− control: Switch {
38− id: visualCheck
39− checked: true
40− }
41− }
42−
43− Loader {
44− id: pageLoader
45− objectName: "pageLoader"
46− clip:true
47−
48− Rectangle {
49− anchors.fill: pageLoader
50− color: "#221e1c" // FIXME not in palette yet
51− }
52−
53− anchors {
54− top: visualCheckItem.bottom
55− left: parent.left
56− right: parent.right
57− bottom: buttons.top
58− topMargin: units.gu(2)
59− bottomMargin: units.gu(2)
60− }
61− source : visualCheck.checked ? page.pageSource : "IndicatorsTree.qml"
62−
63− onLoaded: {
64− for(var pName in indicatorProperties) {
65− if (item.hasOwnProperty(pName)) {
66− item[pName] = indicatorProperties[pName];
67− }
68− }
69− item.start();
70− }
71− }
72−
73− Item {
74− id: buttons
75− anchors {
76− left: parent.left
77− right: parent.right
78− bottom: parent.bottom
79− margins: units.gu(1)
80− }
81− height: childrenRect.height
82−
83− Button {
84− anchors {
85− left: parent.left
86− }
87− text: "Back"
88− onClicked: page.pageStack.reset()
89− }
90− }
91−}
Panel/Indicators/client/IndicatorsTree.qmldeleted−62
@@ -1,62 +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.dededkind@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−import Unity.Indicators 0.1 as Indicators
23−import QMenuModel 0.1
24−import Ubuntu.Components.ListItems 0.1 as ListItem
25−
26−Page {
27− id: page
28− anchors.fill: parent
29−
30− property string busName: unityModel.busName
31− property string actionsObjectPath
32− property var menuObjectPaths: undefined
33− readonly property string device: "phone"
34−
35− property string deviceMenuObjectPath: menuObjectPaths.hasOwnProperty(device) ? menuObjectPaths[device] : ""
36−
37− function start() {
38− }
39−
40− UnityMenuModel {
41− id: unityModel
42− busName: page.busName
43− actions: { "indicator": page.actionsObjectPath }
44− menuObjectPath: page.deviceMenuObjectPath
45− }
46−
47− Indicators.ModelPrinter {
48− id: printer
49− model: unityModel
50− }
51−
52− Flickable {
53− anchors.fill: parent
54− contentHeight: all_data.height
55− clip:true
56− Text {
57− id: all_data
58− color: "white"
59− text: printer.text
60− }
61− }
62−}
Panel/IndicatorsDataModel.qmldeleted−73
@@ -1,73 +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− indicatorData : {
30− 'indicator-bluetooth' : {
31− 'title': 'Bluetooth',
32− 'description' : '',
33− 'widgetSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorWidget2.qml',
34− 'pageSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorPage2.qml'
35− },
36− 'indicator-messages' : {
37− 'title': 'Messaging',
38− 'description' : '',
39− 'widgetSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/MessagingIndicatorWidget.qml',
40− 'pageSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/MessagingIndicatorPage.qml'
41− },
42− 'indicator-sound' : {
43− 'title': 'Sound',
44− 'description' : '',
45− 'widgetSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorWidget2.qml',
46− 'pageSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorPage2.qml'
47− },
48− 'indicator-network' : {
49− 'title': 'Networks',
50− 'description' : '',
51− 'widgetSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorWidget2.qml',
52− 'pageSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/NetworkIndicatorPage2.qml'
53− },
54− 'indicator-power' : {
55− 'title': 'Battery',
56− 'description' : '',
57− 'widgetSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorWidget2.qml',
58− 'pageSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorPage2.qml'
59− },
60− 'indicator-session' : {
61− 'title': 'Session',
62− 'description' : '',
63− 'widgetSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorWidget2.qml',
64− 'pageSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorPage2.qml'
65− },
66− 'indicator-datetime' : {
67− 'title': 'Date and Time',
68− 'description' : '',
69− 'widgetSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorWidget2.qml',
70− 'pageSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorPage2.qml'
71− }
72− }
73−}
Panel/MenuContent.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 Unity.Indicators 0.1 as Indicators
20−import "../Components"
21−
22−// FIXME : We dont want to use MainView.
23−// Need a regular Item which can have tabs with local header.
24−// https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1211704
25−MainView {
26− id: content
27−
28− property QtObject indicatorsModel: null
29− property bool __contentActive: false
30− readonly property int currentMenuIndex : tabs.selectedTabIndex
31− backgroundColor: "#221e1c" // FIXME not in palette yet
32− property int contentReleaseInterval: 20000
33− property bool activeHeader: false
34−
35− width: units.gu(40)
36− height: units.gu(42)
37−
38− function setCurrentMenuIndex(index) {
39− if (currentMenuIndex !== index) {
40− if (currentMenuIndex == -1) {
41− tabs.tabBar.animate = false;
42− }
43− tabs.selectedTabIndex = index;
44− tabs.tabBar.animate = true;
45− }
46− }
47−
48− function activateContent() {
49− contentReleaseTimer.stop();
50− __contentActive = true;
51− }
52−
53− function releaseContent() {
54− if (__contentActive) {
55− contentReleaseTimer.restart();
56− }
57− }
58−
59− onActiveHeaderChanged: {
60− tabs.tabBar.selectionMode = activeHeader;
61− tabs.tabBar.alwaysSelectionMode = activeHeader;
62− }
63−
64− Tabs {
65− id: tabs
66− objectName: "tabs"
67− anchors.fill: parent
68− selectedTabIndex: -1
69−
70− Repeater {
71− id: repeater
72− model: indicatorsModel
73− objectName: "menus"
74−
75− // FIXME: This is needed because tabs dont handle repeaters well.
76− // Due to the child ordering happening after child insertion.
77− // QTBUG-32438
78− onItemAdded: {
79− parent.childrenChanged();
80− }
81−
82− Tab {
83− id: tab
84− objectName: model.identifier
85− title: model.title
86−
87− page: Page {
88− Loader {
89− clip: true
90− anchors.fill: parent
91− source: pageSource
92− asynchronous: true
93−
94− property bool contentActive: content.__contentActive
95−
96− onContentActiveChanged: {
97− if (contentActive && item) {
98− item.start()
99− } else if (!contentActive && item) {
100− item.stop()
101− }
102− }
103−
104− onVisibleChanged: {
105− // Reset the indicator states
106− if (!visible && item && item["reset"]) {
107− item.reset()
108− }
109− }
110−
111− onLoaded: {
112− for(var pName in indicatorProperties) {
113− if (item.hasOwnProperty(pName)) {
114− item[pName] = indicatorProperties[pName]
115− }
116− }
117− if (contentActive && menus.visible) {
118− item.start()
119− }
120− }
121− }
122− }
123− }
124− }
125− }
126−
127− Timer {
128− id: contentReleaseTimer
129−
130− interval: contentReleaseInterval
131− onTriggered: content.__contentActive = false
132− }
133−}
Panel/Panel.qmldeleted−152
@@ -1,152 +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− readonly property real panelHeight: units.gu(3) + units.dp(2)
24− property real indicatorsMenuWidth: (shell.width > units.gu(60)) ? units.gu(40) : shell.width
25− property alias indicators: indicatorsMenu
26− property bool fullscreenMode: false
27− property bool searchVisible: true
28−
29− readonly property real separatorLineHeight: leftSeparatorLine.height
30− readonly property real __panelMinusSeparatorLineHeight: panelHeight - separatorLineHeight
31−
32− signal searchClicked
33−
34− PanelBackground {
35− id: panelBackground
36− anchors {
37− left: parent.left
38− right: parent.right
39− }
40− height: __panelMinusSeparatorLineHeight
41− y: 0
42−
43− Behavior on y { StandardAnimation {} }
44− }
45−
46− PanelSeparatorLine {
47− id: leftSeparatorLine
48− anchors {
49− top: panelBackground.bottom
50− left: parent.left
51− right: indicatorsMenu.left
52− }
53− saturation: 1 - indicatorsMenu.unitProgress
54− }
55−
56− Rectangle {
57− id: darkenedArea
58− property real darkenedOpacity: 0.6
59− anchors {
60− left: parent.left
61− right: parent.right
62− top: panelBackground.bottom
63− bottom: parent.bottom
64− }
65− color: "black"
66− opacity: indicatorsMenu.unitProgress * darkenedOpacity
67− MouseArea {
68− anchors.fill: parent
69− enabled: indicatorsMenu.shown
70− onClicked: if (indicatorsMenu.fullyOpened) indicatorsMenu.hide();
71− }
72− }
73−
74− Indicators {
75− id: indicatorsMenu
76−
77− anchors.right: parent.right
78− y: panelBackground.y
79− width: root.indicatorsMenuWidth
80− shown: false
81− hintValue: __panelMinusSeparatorLineHeight * 3
82− panelHeight: __panelMinusSeparatorLineHeight
83− openedHeight: parent.height + (pinnedMode ? 0 : root.panelHeight)
84− pinnedMode: !fullscreenMode
85−
86− property real unitProgress: (height - panelHeight) / (openedHeight - panelHeight)
87− }
88−
89− PanelSeparatorLine {
90− id: indicatorsSeparatorLine
91− visible: true
92− anchors {
93− left: indicatorsMenu.left
94− right: indicatorsMenu.right
95− }
96− y: indicatorsMenu.visualBottom
97− }
98−
99− BorderImage {
100− id: dropShadow
101− anchors {
102− top: indicators.top
103− bottom: indicatorsSeparatorLine.bottom
104− left: indicators.left
105− right: indicators.right
106− margins: -units.gu(1)
107− }
108− visible: indicatorsMenu.height > indicatorsMenu.panelHeight
109− source: "graphics/rectangular_dropshadow.sci"
110− }
111−
112− SearchIndicator {
113− id: search
114− objectName: "search"
115− enabled: root.searchVisible
116−
117− state: {
118− if (parent.width < indicatorsMenu.width + width) {
119− if (indicatorsMenu.state != "initial") {
120− return "hidden";
121− }
122− }
123− if (root.searchVisible) {
124− return "visible";
125− }
126−
127− return "hidden";
128− }
129−
130− width: units.gu(13)
131− height: __panelMinusSeparatorLineHeight
132− anchors {
133− top: panelBackground.top
134− left: panelBackground.left
135− }
136−
137− onClicked: root.searchClicked()
138− }
139−
140− states: [
141− State {
142− name: "in" //fully opaque and visible at top edge of screen
143− when: !fullscreenMode
144− PropertyChanges { target: panelBackground; y: 0 }
145− },
146− State {
147− name: "out" //pushed off screen
148− when: fullscreenMode
149− PropertyChanges { target: panelBackground; y: -panelHeight }
150− }
151− ]
152−}
Panel/SearchIndicator.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−import "../Components"
20−
21−Item {
22− id: search
23−
24− width: units.gu(9)
25− height: units.gu(3)
26−
27− property string headerText: i18n.tr("Search")
28−
29− signal clicked
30−
31− // eater
32− MouseArea {
33− anchors.fill: parent
34− onClicked: search.clicked()
35− }
36−
37− Item {
38− id: container
39− objectName: "container"
40−
41− width: parent.width
42− height: parent.height
43−
44− Behavior on opacity { StandardAnimation {} }
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− opacity: 1
71− }
72− },
73− State {
74− name: "hidden"
75− PropertyChanges {
76− target: container
77− opacity: 0
78− }
79− }
80− ]
81−}
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−706
@@ -1,706 +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 GSettings 1.0
19−import Ubuntu.Application 0.1
20−import Ubuntu.Components 0.1
21−import Ubuntu.Gestures 0.1
22−import LightDM 0.1 as LightDM
23−import Powerd 0.1
24−import "Dash"
25−import "Greeter"
26−import "Launcher"
27−import "Panel"
28−import "Hud"
29−import "Components"
30−import "Components/Math.js" as MathLocal
31−import "Bottombar"
32−import "SideStage"
33−import "Notifications"
34−import Unity.Notifications 1.0 as NotificationBackend
35−
36−FocusScope {
37− id: shell
38−
39− // this is only here to select the width / height of the window if not running fullscreen
40− property bool tablet: false
41− width: tablet ? units.gu(160) : applicationArguments.hasGeometry() ? applicationArguments.width() : units.gu(40)
42− height: tablet ? units.gu(100) : applicationArguments.hasGeometry() ? applicationArguments.height() : units.gu(71)
43−
44− property real edgeSize: units.gu(2)
45− property url defaultBackground: shell.width >= units.gu(60) ? "graphics/tablet_background.jpg" : "graphics/phone_background.jpg"
46− property url background
47− readonly property real panelHeight: panel.panelHeight
48−
49− property bool dashShown: dash.shown
50− property bool stageScreenshotsReady: {
51− if (sideStage.shown) {
52− if (mainStage.applications.count > 0) {
53− return mainStage.usingScreenshots && sideStage.usingScreenshots;
54− } else {
55− return sideStage.usingScreenshots;
56− }
57− } else {
58− return mainStage.usingScreenshots;
59− }
60− }
61−
62− property ListModel searchHistory: SearchHistoryModel {}
63−
64− property var applicationManager: ApplicationManagerWrapper {}
65−
66− Component.onCompleted: {
67− Theme.name = "Ubuntu.Components.Themes.SuruGradient"
68−
69− applicationManager.sideStageEnabled = Qt.binding(function() { return sideStage.enabled })
70−
71− // FIXME: if application focused before shell starts, shell draws on top of it only.
72− // We should detect already running applications on shell start and bring them to the front.
73− applicationManager.unfocusCurrentApplication();
74− }
75−
76− readonly property bool fullscreenMode: {
77− if (greeter.shown || lockscreen.shown) {
78− return false;
79− } else if (mainStage.usingScreenshots) { // Window Manager animating so want to re-evaluate fullscreen mode
80− return mainStage.switchingFromFullscreenToFullscreen;
81− } else if (applicationManager.mainStageFocusedApplication) {
82− return applicationManager.mainStageFocusedApplication.fullscreen;
83− } else {
84− return false;
85− }
86− }
87−
88− Connections {
89− target: applicationManager
90− ignoreUnknownSignals: true
91− onFocusRequested: {
92− // TODO: this should be protected to only unlock for certain applications / certain usecases
93− // potentially only in connection with a notification
94− greeter.hide();
95− shell.activateApplication(desktopFile);
96− }
97− }
98−
99− function activateApplication(desktopFile, argument) {
100− if (applicationManager) {
101− // For newly started applications, as it takes them time to draw their first frame
102− // we add a delay before we hide the animation screenshots to compensate.
103− var addDelay = !applicationManager.getApplicationFromDesktopFile(desktopFile);
104−
105− var application;
106− application = applicationManager.activateApplication(desktopFile, argument);
107− if (application == null) {
108− return;
109− }
110− if (application.stage == ApplicationInfo.MainStage || !sideStage.enabled) {
111− mainStage.activateApplication(desktopFile, addDelay);
112− } else {
113− sideStage.activateApplication(desktopFile, addDelay);
114− }
115− stages.show();
116− }
117− }
118−
119− GSettings {
120− id: backgroundSettings
121− schema.id: "org.gnome.desktop.background"
122− }
123− property url gSettingsPicture: backgroundSettings.pictureUri != undefined && backgroundSettings.pictureUri.length > 0 ? backgroundSettings.pictureUri : shell.defaultBackground
124− onGSettingsPictureChanged: {
125− shell.background = gSettingsPicture
126− }
127−
128− // This is a dummy image that is needed to determine if the picture url
129− // in backgroundSettings points to a valid picture file.
130− // We can't do this with the real background image because setting a
131− // new source in onStatusChanged triggers a binding loop detection
132− // inside Image, which causes it not to render even though a valid source
133− // would be set. We don't mind about this image staying black and just
134− // use it for verification to populate the source for the real
135− // background image.
136− Image {
137− source: shell.background
138− height: 0
139− width: 0
140− sourceSize.height: 0
141− sourceSize.width: 0
142− onStatusChanged: {
143− if (status == Image.Error && source != shell.defaultBackground) {
144− shell.background = defaultBackground
145− }
146− }
147− }
148−
149− VolumeControl {
150− id: volumeControl
151− }
152−
153− Keys.onVolumeUpPressed: volumeControl.volumeUp()
154− Keys.onVolumeDownPressed: volumeControl.volumeDown()
155−
156− Item {
157− id: underlay
158− objectName: "underlay"
159− anchors.fill: parent
160−
161− // Whether the underlay is fully covered by opaque UI elements.
162− property bool fullyCovered: panel.indicators.fullyOpened && shell.width <= panel.indicatorsMenuWidth
163−
164− // Whether the user should see the topmost application surface (if there's one at all).
165− property bool applicationSurfaceShouldBeSeen:
166− (mainStage.applications && mainStage.applications.count > 0)
167− && (!stages.fullyHidden && !mainStage.usingScreenshots)
168−
169− // NB! Application surfaces are stacked behing the shell one. So they can only be seen by the user
170− // through the translucent parts of the shell surface.
171− visible: !fullyCovered && !applicationSurfaceShouldBeSeen
172−
173− CrossFadeImage {
174− id: backgroundImage
175− objectName: "backgroundImage"
176−
177− anchors.fill: parent
178− source: shell.background
179− }
180−
181− Rectangle {
182− anchors.fill: parent
183− color: "black"
184− opacity: dash.disappearingAnimationProgress
185− }
186−
187− Dash {
188− id: dash
189− objectName: "dash"
190−
191− available: !greeter.shown && !lockscreen.shown
192− hides: [stages, launcher, panel.indicators]
193− shown: disappearingAnimationProgress !== 1.0
194− enabled: disappearingAnimationProgress === 0.0
195− // FIXME: unfocus all applications when going back to the dash
196− onEnabledChanged: {
197− if (enabled) {
198− shell.applicationManager.unfocusCurrentApplication()
199− }
200− }
201−
202− anchors {
203− fill: parent
204− topMargin: panel.panelHeight
205− }
206−
207− contentScale: 1.0 - 0.2 * disappearingAnimationProgress
208− opacity: 1.0 - disappearingAnimationProgress
209− property real disappearingAnimationProgress: {
210− if (greeter.shown) {
211− return greeter.showProgress;
212− } else {
213− return stagesOuterContainer.showProgress;
214− }
215− }
216−
217− // FIXME: only necessary because stagesOuterContainer.showProgress and
218− // greeterRevealer.animatedProgress are not animated
219− Behavior on disappearingAnimationProgress { SmoothedAnimation { velocity: 5 }}
220− }
221− }
222−
223− Item {
224− id: stagesOuterContainer
225−
226− width: parent.width
227− height: parent.height
228− x: launcher.progress
229− Behavior on x {SmoothedAnimation{velocity: 600}}
230−
231− property real showProgress:
232− MathLocal.clamp(1 - (x + stages.x) / shell.width, 0, 1)
233−
234− Showable {
235− id: stages
236− objectName: "stages"
237−
238− x: width
239−
240− property bool fullyShown: shown && x == 0 && parent.x == 0
241− property bool fullyHidden: !shown && x == width
242− available: !greeter.shown
243− hides: [launcher, panel.indicators]
244− shown: false
245− opacity: 1.0
246− showAnimation: StandardAnimation { property: "x"; duration: 350; to: 0; easing.type: Easing.OutCubic }
247− hideAnimation: StandardAnimation { property: "x"; duration: 350; to: width; easing.type: Easing.OutCubic }
248−
249− width: parent.width
250− height: parent.height
251−
252− // close the stages when no focused application remains
253− Connections {
254− target: shell.applicationManager
255− onMainStageFocusedApplicationChanged: stages.closeIfNoApplications()
256− onSideStageFocusedApplicationChanged: stages.closeIfNoApplications()
257− ignoreUnknownSignals: true
258− }
259−
260− function closeIfNoApplications() {
261− if (!shell.applicationManager.mainStageFocusedApplication
262− && !shell.applicationManager.sideStageFocusedApplication
263− && shell.applicationManager.mainStageApplications.count == 0
264− && shell.applicationManager.sideStageApplications.count == 0) {
265− stages.hide();
266− }
267− }
268−
269− // show the stages when an application gets the focus
270− Connections {
271− target: shell.applicationManager
272− onMainStageFocusedApplicationChanged: {
273− if (shell.applicationManager.mainStageFocusedApplication) {
274− mainStage.show();
275− stages.show();
276− }
277− }
278− onSideStageFocusedApplicationChanged: {
279− if (shell.applicationManager.sideStageFocusedApplication) {
280− sideStage.show();
281− stages.show();
282− }
283− }
284− ignoreUnknownSignals: true
285− }
286−
287− Stage {
288− id: mainStage
289−
290− anchors.fill: parent
291− fullyShown: stages.fullyShown
292− fullyHidden: stages.fullyHidden
293− shouldUseScreenshots: !fullyShown
294− rightEdgeEnabled: !sideStage.enabled
295−
296− applicationManager: shell.applicationManager
297− rightEdgeDraggingAreaWidth: shell.edgeSize
298− normalApplicationY: shell.panelHeight
299−
300− shown: true
301− function show() {
302− stages.show();
303− }
304− function hide() {
305− }
306−
307− // FIXME: workaround the fact that focusing a main stage application
308− // raises its surface on top of all other surfaces including the ones
309− // that belong to side stage applications.
310− onFocusedApplicationChanged: {
311− if (focusedApplication && sideStage.focusedApplication && sideStage.fullyShown) {
312− shell.applicationManager.focusApplication(sideStage.focusedApplication);
313− }
314− }
315− }
316−
317− SideStage {
318− id: sideStage
319−
320− applicationManager: shell.applicationManager
321− rightEdgeDraggingAreaWidth: shell.edgeSize
322− normalApplicationY: shell.panelHeight
323−
324− onShownChanged: {
325− if (!shown && mainStage.applications.count == 0) {
326− stages.hide();
327− }
328− }
329− // FIXME: when hiding the side stage, refocus the main stage
330− // application so that it goes in front of the side stage
331− // application and hides it
332− onFullyShownChanged: {
333− if (!fullyShown && stages.fullyShown && sideStage.focusedApplication != null) {
334− shell.applicationManager.focusApplication(mainStage.focusedApplication);
335− }
336− }
337−
338− enabled: shell.width >= units.gu(60)
339− visible: enabled
340− fullyShown: stages.fullyShown && shown
341− && sideStage[sideStageRevealer.boundProperty] == sideStageRevealer.openedValue
342− shouldUseScreenshots: !fullyShown || mainStage.usingScreenshots || sideStageRevealer.pressed
343−
344− available: !greeter.shown && !lockscreen.shown && enabled
345− hides: [launcher, panel.indicators]
346− shown: false
347− showAnimation: StandardAnimation { property: "x"; duration: 350; to: sideStageRevealer.openedValue; easing.type: Easing.OutQuint }
348− hideAnimation: StandardAnimation { property: "x"; duration: 350; to: sideStageRevealer.closedValue; easing.type: Easing.OutQuint }
349−
350− width: units.gu(40)
351− height: stages.height
352− handleExpanded: sideStageRevealer.pressed
353− }
354−
355− Revealer {
356− id: sideStageRevealer
357−
358− enabled: mainStage.applications.count > 0 && sideStage.applications.count > 0
359− && sideStage.available
360− direction: Qt.RightToLeft
361− openedValue: parent.width - sideStage.width
362− hintDisplacement: units.gu(3)
363− /* The size of the sidestage handle needs to be bigger than the
364− typical size used for edge detection otherwise it is really
365− hard to grab.
366− */
367− handleSize: sideStage.shown ? units.gu(4) : shell.edgeSize
368− closedValue: parent.width + sideStage.handleSizeCollapsed
369− target: sideStage
370− x: parent.width - width
371− width: sideStage.width + handleSize * 0.7
372− height: sideStage.height
373− orientation: Qt.Horizontal
374− }
375−
376− DragHandle {
377− id: stagesDragHandle
378−
379− anchors.top: parent.top
380− anchors.bottom: parent.bottom
381− anchors.right: parent.left
382−
383− width: shell.edgeSize
384− direction: Direction.Leftwards
385− property bool haveApps: mainStage.applications.count > 0 || sideStage.applications.count > 0
386−
387− maxTotalDragDistance: haveApps ? parent.width : parent.width * 0.7
388− // Make autocompletion impossible when !haveApps
389− edgeDragEvaluator.minDragDistance: haveApps ? maxTotalDragDistance * 0.1 : Number.MAX_VALUE
390− }
391− }
392− }
393−
394− Lockscreen {
395− id: lockscreen
396− hides: [launcher, panel.indicators, hud]
397− shown: false
398− enabled: true
399− showAnimation: StandardAnimation { property: "opacity"; to: 1 }
400− hideAnimation: StandardAnimation { property: "opacity"; to: 0 }
401− y: panel.panelHeight
402− x: required ? 0 : - width
403− width: parent.width
404− height: parent.height - panel.panelHeight
405− background: shell.background
406−
407− onUnlocked: lockscreen.hide()
408− onCancel: greeter.show()
409−
410− Component.onCompleted: {
411− if (LightDM.Users.count == 1) {
412− LightDM.Greeter.authenticate(LightDM.Users.data(0, LightDM.UserRoles.NameRole))
413− }
414− }
415− }
416−
417− Connections {
418− target: LightDM.Greeter
419−
420− onShowPrompt: {
421− if (LightDM.Users.count == 1) {
422− // TODO: There's no better way for now to determine if its a PIN or a passphrase.
423− if (text == "PIN") {
424− lockscreen.alphaNumeric = false
425− } else {
426− lockscreen.alphaNumeric = true
427− }
428− lockscreen.placeholderText = i18n.tr("Please enter %1").arg(text);
429− lockscreen.show();
430− }
431− }
432− }
433−
434− Greeter {
435− id: greeter
436− objectName: "greeter"
437−
438− available: true
439− hides: [launcher, panel.indicators, hud]
440− shown: true
441−
442− y: panel.panelHeight
443− width: parent.width
444− height: parent.height - panel.panelHeight
445−
446− dragHandleWidth: shell.edgeSize
447−
448− onShownChanged: {
449− if (shown) {
450− lockscreen.reset();
451− // If there is only one user, we start authenticating with that one here.
452− // If there are more users, the Greeter will handle that
453− if (LightDM.Users.count == 1) {
454− LightDM.Greeter.authenticate(LightDM.Users.data(0, LightDM.UserRoles.NameRole));
455− }
456− greeter.forceActiveFocus();
457− }
458− }
459−
460− onUnlocked: greeter.hide()
461−
462− onLeftTeaserPressedChanged: {
463− if (leftTeaserPressed) {
464− launcher.tease();
465− }
466− }
467− }
468−
469− InputFilterArea {
470− anchors.fill: parent
471− blockInput: greeter.shown || lockscreen.shown
472− }
473−
474− Connections {
475− id: powerConnection
476− target: Powerd
477−
478− property var previousMainApp: null
479− property var previousSideApp: null
480−
481− function setFocused(focused) {
482− if (!focused) {
483− // FIXME: *FocusedApplication are not updated when unfocused, hence the need to check whether
484− // the stage was actually shown
485− if (mainStage.fullyShown) powerConnection.previousMainApp = applicationManager.mainStageFocusedApplication;
486− if (sideStage.fullyShown) powerConnection.previousSideApp = applicationManager.sideStageFocusedApplication;
487− applicationManager.unfocusCurrentApplication();
488− } else {
489− if (powerConnection.previousMainApp) {
490− applicationManager.focusApplication(powerConnection.previousMainApp);
491− powerConnection.previousMainApp = null;
492− }
493− if (powerConnection.previousSideApp) {
494− applicationManager.focusApplication(powerConnection.previousSideApp);
495− powerConnection.previousSideApp = null;
496− }
497− }
498− }
499−
500− onDisplayPowerStateChange: {
501− // We ignore any display-off signals when the proximity sensor
502− // is active. This usually indicates something like a phone call.
503− if (status == Powerd.Off && (flags & Powerd.UseProximity) == 0) {
504− powerConnection.setFocused(false);
505− greeter.show();
506− } else if (status == Powerd.On) {
507− powerConnection.setFocused(true);
508− }
509− }
510− }
511−
512− Item {
513− id: overlay
514−
515− anchors.fill: parent
516−
517− Panel {
518− id: panel
519− anchors.fill: parent //because this draws indicator menus
520− indicatorsMenuWidth: parent.width > units.gu(60) ? units.gu(40) : parent.width
521− indicators {
522− hides: [launcher]
523− }
524− fullscreenMode: shell.fullscreenMode
525− searchVisible: !greeter.shown && !lockscreen.shown
526−
527− InputFilterArea {
528− anchors.fill: parent
529− blockInput: panel.indicators.shown
530− }
531− }
532−
533− Hud {
534− id: hud
535−
536− width: parent.width > units.gu(60) ? units.gu(40) : parent.width
537− height: parent.height
538−
539− available: !greeter.shown && !panel.indicators.shown && !lockscreen.shown
540− shown: false
541− showAnimation: StandardAnimation { property: "y"; duration: hud.showableAnimationDuration; to: 0; easing.type: Easing.Linear }
542− hideAnimation: StandardAnimation { property: "y"; duration: hud.showableAnimationDuration; to: hudRevealer.closedValue; easing.type: Easing.Linear }
543−
544− Connections {
545− target: shell.applicationManager
546− onMainStageFocusedApplicationChanged: hud.hide()
547− onSideStageFocusedApplicationChanged: hud.hide()
548− }
549−
550− InputFilterArea {
551− anchors.fill: parent
552− blockInput: hud.shown
553− }
554− }
555−
556− Revealer {
557− id: hudRevealer
558−
559− enabled: hud.shown
560− width: hud.width
561− anchors.left: hud.left
562− height: parent.height
563− target: hud.revealerTarget
564− closedValue: height
565− openedValue: 0
566− direction: Qt.RightToLeft
567− orientation: Qt.Vertical
568− handleSize: hud.handleHeight
569− onCloseClicked: target.hide()
570− }
571−
572− Bottombar {
573− theHud: hud
574− anchors.fill: parent
575− enabled: !panel.indicators.shown
576− applicationIsOnForeground: applicationManager.mainStageFocusedApplication
577− || applicationManager.sideStageFocusedApplication
578− }
579−
580− InputFilterArea {
581− blockInput: launcher.shown
582− anchors {
583− top: parent.top
584− bottom: parent.bottom
585− left: parent.left
586− }
587− width: launcher.width
588− }
589−
590− Launcher {
591− id: launcher
592−
593− anchors.top: parent.top
594− anchors.bottom: parent.bottom
595− width: parent.width
596− dragAreaWidth: shell.edgeSize
597− available: !greeter.shown || greeter.narrowMode
598− onDashItemSelected: {
599− greeter.hide()
600− // Animate if moving between application and dash
601− if (!stages.shown) {
602− dash.setCurrentScope("home.scope", true, false)
603− } else {
604− dash.setCurrentScope("home.scope", false, false)
605− }
606− stages.hide();
607− }
608− onDash: {
609− if (stages.shown) {
610− dash.setCurrentScope("applications.scope", true, false)
611− stages.hide();
612− launcher.hide();
613− }
614− }
615− onLauncherApplicationSelected:{
616− greeter.hide()
617− shell.activateApplication(desktopFile)
618− }
619− onShownChanged: {
620− if (shown) {
621− panel.indicators.hide()
622− hud.hide()
623− }
624− }
625− }
626−
627− Notifications {
628− id: notifications
629−
630− model: NotificationBackend.Model
631− anchors {
632− top: parent.top
633− right: parent.right
634− bottom: parent.bottom
635− leftMargin: units.gu(1)
636− rightMargin: units.gu(1)
637− topMargin: panel.panelHeight + units.gu(1)
638− }
639− states: [
640− State {
641− name: "narrow"
642− when: overlay.width <= units.gu(60)
643− AnchorChanges { target: notifications; anchors.left: parent.left }
644− },
645− State {
646− name: "wide"
647− when: overlay.width > units.gu(60)
648− AnchorChanges { target: notifications; anchors.left: undefined }
649− PropertyChanges { target: notifications; width: units.gu(38) }
650− }
651− ]
652− }
653− }
654−
655− focus: true
656−
657− InputFilterArea {
658− anchors {
659− top: parent.top
660− bottom: parent.bottom
661− left: parent.left
662− }
663− width: shell.edgeSize
664− blockInput: true
665− }
666−
667− InputFilterArea {
668− anchors {
669− top: parent.top
670− bottom: parent.bottom
671− right: parent.right
672− }
673− width: shell.edgeSize
674− blockInput: true
675− }
676−
677− Binding {
678− target: i18n
679− property: "domain"
680− value: "unity8"
681− }
682−
683− //FIXME: This should be handled in the input stack, keyboard shouldnt propagate
684− MouseArea {
685− anchors.bottom: parent.bottom
686− anchors.left: parent.left
687− anchors.right: parent.right
688− height: shell.applicationManager ? shell.applicationManager.keyboardHeight : 0
689−
690− enabled: shell.applicationManager && shell.applicationManager.keyboardVisible
691− }
692−
693− Label {
694− anchors.centerIn: parent
695− visible: applicationManager.fake
696− text: "EARLY ALPHA\nNOT READY FOR USE"
697− color: "lightgrey"
698− opacity: 0.2
699− font.weight: Font.Black
700− horizontalAlignment: Text.AlignHCenter
701− verticalAlignment: Text.AlignVCenter
702− fontSizeMode: Text.Fit
703− rotation: -45
704− scale: Math.min(parent.width, parent.height) / width
705− }
706−}
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−77
@@ -1,77 +0,0 @@
1−#!/bin/sh
2−
3−SETUP=false
4−CLEAN=false
5−NUM_JOBS=$(( `grep -c ^processor /proc/cpuinfo` + 1 ))
6−CODE_DIR=$( dirname `readlink -f $0` )
7−
8−usage() {
9− echo "usage: build [OPTIONS] [BUILD_TYPE]\n" >&2
10− echo "Script to build the shell. If BUILD_TYPE is not specified, it defaults to \"debug\".\n" >&2
11− echo "OPTIONS:" >&2
12− echo " -s, --setup Setup the build environment and branch Unity" >&2
13− echo " -c, --clean Clean the build tree before building" >&2
14− echo >&2
15− exit 1
16−}
17−
18−ARGS=`getopt -n$0 -u -a --longoptions="setup,clean,help" -o "sch" -- "$@"`
19−[ $? -ne 0 ] && usage
20−eval set -- "$ARGS"
21−
22−while [ $# -gt 0 ]
23−do
24− case "$1" in
25− -s|--setup) SETUP=true;;
26− -c|--clean) CLEAN=true;;
27− -h|--help) usage;;
28− --) shift;break;;
29− esac
30− shift
31−done
32−
33−[ $# -gt 1 ] && usage
34−
35−BUILD_TYPE="debug"
36−[ $# -eq 1 ] && BUILD_TYPE="$1"
37−
38−install_dependencies() {
39− sudo apt-get update || exit 4
40− echo "Installing Unity 8 dependencies.."
41− sudo apt-get install devscripts \
42− equivs \
43− gsettings-desktop-schemas \
44− qmenumodel-qml \
45− qtdeclarative5-dee-plugin \
46− qtdeclarative5-gsettings1.0 \
47− qtdeclarative5-ubuntu-ui-toolkit-plugin \
48− unity-notifications-impl \
49− qtdeclarative5-xmllistmodel-plugin \
50− ubuntu-mobile-icons \
51− unity-scope-home \
52− unity-lens-applications \
53− || exit 5
54−}
55−
56−mk_build_deps() {
57− [ ! -f unity8-build-deps*deb -o $CODE_DIR/debian/control -nt unity8-build-deps*deb ] && mk-build-deps --install --root-cmd sudo $CODE_DIR/debian/control
58−}
59−
60−if [ -f "/usr/bin/ninja" ] ; then
61− GENERATOR="-G Ninja"
62− BUILD_COMMAND="ninja -j$NUM_JOBS"
63−else
64− GENERATOR=
65− BUILD_COMMAND="make -j$NUM_JOBS"
66−fi
67−
68−if $SETUP; then
69− install_dependencies
70−else
71− if $CLEAN; then rm -rf builddir; fi
72− mkdir -p builddir
73− cd builddir
74− mk_build_deps
75− cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE $CODE_DIR ${GENERATOR} || exit 6
76− ${BUILD_COMMAND} || exit 7
77−fi
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
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/Plugins.cmakedeleted−67
@@ -1,67 +0,0 @@
1−find_program(qmlplugindump_exe qmlplugindump)
2−
3−if(NOT qmlplugindump_exe)
4− msg(FATAL_ERROR "Could not locate qmlplugindump.")
5−endif()
6−
7−# Creates target for copying and installing qmlfiles
8−#
9−# export_qmlfiles(plugin sub_path)
10−#
11−#
12−# Target to be created:
13−# - plugin-qmlfiles - Copies the qml files (*.qml, *.js, qmldir) into the shadow build folder.
14−
15−macro(export_qmlfiles PLUGIN PLUGIN_SUBPATH)
16−
17− file(GLOB QMLFILES
18− *.qml
19− *.js
20− qmldir
21− )
22−
23− # copy the qmldir file
24− add_custom_target(${PLUGIN}-qmlfiles ALL
25− COMMAND cp ${QMLFILES} ${CMAKE_BINARY_DIR}/plugins/${PLUGIN_SUBPATH}
26− DEPENDS ${QMLFILES}
27− )
28−
29− # install the qmlfiles file.
30− install(FILES ${QMLFILES}
31− DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/${PLUGIN_SUBPATH}
32− )
33−endmacro(export_qmlfiles)
34−
35−
36−# Creates target for generating the qmltypes file for a plugin and installs plugin files
37−#
38−# export_qmlplugin(plugin version sub_path [TARGETS target1 [target2 ...]])
39−#
40−# TARGETS additional install targets (eg the plugin shared object)
41−#
42−# Target to be created:
43−# - plugin-qmltypes - Generates the qmltypes file in the shadow build folder.
44−
45−macro(export_qmlplugin PLUGIN VERSION PLUGIN_SUBPATH)
46− set(multi_value_keywords TARGETS)
47− cmake_parse_arguments(qmlplugin "" "" "${multi_value_keywords}" ${ARGN})
48−
49− # Only try to generate .qmltypes if not cross compiling
50− if(NOT CMAKE_CROSSCOMPILING)
51− # create the plugin.qmltypes file
52− add_custom_target(${PLUGIN}-qmltypes ALL
53− COMMAND ${qmlplugindump_exe} -notrelocatable ${PLUGIN} ${VERSION} ${CMAKE_BINARY_DIR}/plugins > ${CMAKE_BINARY_DIR}/plugins/${PLUGIN_SUBPATH}/plugin.qmltypes
54− )
55− add_dependencies(${PLUGIN}-qmltypes ${PLUGIN}-qmlfiles ${qmlplugin_TARGETS})
56−
57− # install the qmltypes file.
58− install(FILES ${CMAKE_BINARY_DIR}/plugins/${PLUGIN_SUBPATH}/plugin.qmltypes
59− DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/${PLUGIN_SUBPATH}
60− )
61− endif()
62−
63− # install the additional targets
64− install(TARGETS ${qmlplugin_TARGETS}
65− DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/${PLUGIN_SUBPATH}
66− )
67−endmacro(export_qmlplugin)
cmake/modules/QmlTest.cmake+469−101
@@ -1,121 +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+# )
1142#
12−# Two targets will be created:
13−# - testComponentName - Runs the test with qmltestrunner
14−# - tryComponentName - Runs the test with uqmlscene, for manual interaction
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+# )
61+#
62+# Install file called ${component_name} (or ${component_name}.qml) under
63+# ${path}.
64+
65+function(add_qml_test_data PATH COMPONENT_NAME)
66+ cmake_parse_arguments(TEST "" "DESTINATION" "" ${ARGN})
67+
68+ set(filename "${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/${COMPONENT_NAME}")
69+
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()
80+
81+ if (NOT EXISTS "${filename}")
82+ set(filename "${filename}.qml")
83+ set(COMPONENT_NAME "${COMPONENT_NAME}.qml")
84+ endif()
85+
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()
95+
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}")
101+ endif()
102+
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.
15113#
16−# To change/set a default value for the whole test suite, prior to calling add_qml_test, set:
17−# qmltest_DEFAULT_NO_ADD_TEST (default: FALSE)
18−# qmltest_DEFAULT_TARGETS
19−# qmltest_DEFAULT_IMPORT_PATHS
20−# qmltest_DEFAULT_PROPERTIES
21−
22−find_program(qmltestrunner_exe qmltestrunner)
23−
24−if(NOT qmltestrunner_exe)
25− msg(FATAL_ERROR "Could not locate qmltestrunner.")
26−endif()
27−
28−set(qmlscene_exe ${CMAKE_BINARY_DIR}/tests/uqmlscene/uqmlscene)
29−
30−macro(add_manual_qml_test SUBPATH COMPONENT_NAME)
31− set(options NO_ADD_TEST NO_TARGETS)
32− set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
33−
34− cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
35−
36− set(qmlscene_TARGET try${COMPONENT_NAME})
37− set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME})
38−
39− set(qmlscene_imports "")
40− if(NOT "${qmltest_IMPORT_PATHS}" STREQUAL "")
41− foreach(IMPORT_PATH ${qmltest_IMPORT_PATHS})
42− list(APPEND qmlscene_imports "-I")
43− list(APPEND qmlscene_imports ${IMPORT_PATH})
44− endforeach(IMPORT_PATH)
45− elseif(NOT "${qmltest_DEFAULT_IMPORT_PATHS}" STREQUAL "")
46− foreach(IMPORT_PATH ${qmltest_DEFAULT_IMPORT_PATHS})
47− list(APPEND qmlscene_imports "-I")
48− list(APPEND qmlscene_imports ${IMPORT_PATH})
49− endforeach(IMPORT_PATH)
50− endif()
51−
52− set(qmlscene_command
53− env ${qmltest_ENVIRONMENT}
54− ${qmlscene_exe} ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
55− ${qmlscene_imports}
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}
56122 )
57− add_custom_target(${qmlscene_TARGET} ${qmlscene_command})
58123
59−endmacro(add_manual_qml_test)
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+
60129
61−macro(add_qml_test SUBPATH COMPONENT_NAME)
62− set(options NO_ADD_TEST NO_TARGETS)
63− set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
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.
64138
65− cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
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})
66142
67− set(qmltest_TARGET test${COMPONENT_NAME})
68− set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME})
143+ add_manual_test(${COMPONENT_NAME} qmlscene
144+ ${ARGN}
145+ ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml ${QMLTEST_ARGS}
146+ )
69147
70− set(qmltestrunner_imports "")
71− if(NOT "${qmltest_IMPORT_PATHS}" STREQUAL "")
72− foreach(IMPORT_PATH ${qmltest_IMPORT_PATHS})
73− list(APPEND qmltestrunner_imports "-import")
74− list(APPEND qmltestrunner_imports ${IMPORT_PATH})
75− endforeach(IMPORT_PATH)
76− elseif(NOT "${qmltest_DEFAULT_IMPORT_PATHS}" STREQUAL "")
77− foreach(IMPORT_PATH ${qmltest_DEFAULT_IMPORT_PATHS})
78− list(APPEND qmltestrunner_imports "-import")
79− list(APPEND qmltestrunner_imports ${IMPORT_PATH})
80− endforeach(IMPORT_PATH)
148+ if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml")
149+ add_qml_test_data("${PATH}" "tst_${COMPONENT_NAME}.qml")
81150 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})
82185
83186 set(qmltest_command
84− env ${qmltest_ENVIRONMENT}
85− ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
86− ${qmltestrunner_imports}
87− -o ${CMAKE_BINARY_DIR}/${qmltest_TARGET}.xml,xunitxml
88− -o -,txt
187+ $<TARGET_FILE:${TARGET}>
188+ ${QMLTEST_ARGS}
189+ ${args}
89190 )
90− add_custom_target(${qmltest_TARGET} ${qmltest_command})
91191
92− if(NOT "${qmltest_PROPERTIES}" STREQUAL "")
93− set_target_properties(${qmltest_TARGET} PROPERTIES ${qmltest_PROPERTIES})
94− elseif(NOT "${qmltest_DEFAULT_PROPERTIES}" STREQUAL "")
95− set_target_properties(${qmltest_TARGET} PROPERTIES ${qmltest_DEFAULT_PROPERTIES})
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+ )
96215 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
97229
98− if("${qmltest_NO_ADD_TEST}" STREQUAL FALSE AND NOT "${qmltest_DEFAULT_NO_ADD_TEST}" STREQUAL "TRUE")
99− add_test(${qmltest_TARGET} ${qmltest_command})
230+function(add_manual_test COMPONENT_NAME TARGET)
231+ import_executables(gdb OPTIONAL)
100232
101− if(NOT "${qmltest_UNPARSED_ARGUMENTS}" STREQUAL "")
102− set_tests_properties(${qmltest_TARGET} PROPERTIES ${qmltest_PROPERTIES})
103− elseif(NOT "${qmltest_DEFAULT_PROPERTIES}" STREQUAL "")
104− set_tests_properties(${qmltest_TARGET} PROPERTIES ${qmltest_DEFAULT_PROPERTIES})
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}
242+ )
243+
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})
270+
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")
276+ endif()
277+
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")
317+
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")
105379 endif()
106− endif("${qmltest_NO_ADD_TEST}" STREQUAL FALSE AND NOT "${qmltest_DEFAULT_NO_ADD_TEST}" STREQUAL "TRUE")
107−
108− if("${qmltest_NO_TARGETS}" STREQUAL "FALSE")
109− if(NOT "${qmltest_TARGETS}" STREQUAL "")
110− foreach(TARGET ${qmltest_TARGETS})
111− add_dependencies(${TARGET} ${qmltest_TARGET})
112− endforeach(TARGET)
113− elseif(NOT "${qmltest_DEFAULT_TARGETS}" STREQUAL "")
114− foreach(TARGET ${qmltest_DEFAULT_TARGETS})
115− add_dependencies(${TARGET} ${qmltest_TARGET})
116− 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})
117466 endif()
118− endif("${qmltest_NO_TARGETS}" STREQUAL "FALSE")
467+ endforeach()
468+ set(xvfb_targets "${xvfb_targets}" PARENT_SCOPE)
469+endmacro()
470+
119471
120− add_manual_qml_test(${SUBPATH} ${COMPONENT_NAME} ${ARGN})
121−endmacro(add_qml_test)
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+7−2
@@ -2,10 +2,15 @@ add_custom_target(autopilot)
22
33function(declare_autopilot_test TEST_NAME TEST_SUITE WORKING_DIR)
44 add_custom_target(autopilot-${TEST_NAME}
5− COMMAND LANG=C UBUNTU_ICON_THEME=ubuntu-mobile QML2_IMPORT_PATH=${SHELL_PRIVATE_LIBDIR}/qml/mocks autopilot run ${TEST_SUITE}
5+ COMMAND UNITY_TESTING=1 LANG=C QML2_IMPORT_PATH=${SHELL_INSTALL_QML}/mocks python3 -m autopilot.run run ${TEST_SUITE}
66 WORKING_DIRECTORY ${WORKING_DIR}
7− DEPENDS install
7+ DEPENDS fake_install
8+ )
9+
10+ add_custom_target(fake_install
11+ COMMAND cmake --build ${CMAKE_BINARY_DIR} --target install
812 )
913
1014 add_dependencies(autopilot autopilot-${TEST_NAME})
15+
1116endfunction()
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+6593−16

This diff is too big to show here.

debian/control+240−93

This diff is too big to show here.

debian/copyright+21

This diff is too big to show here.

debian/indicators-client.install+1

This diff is too big to show here.

debian/rules+34−14

This diff is too big to show here.

debian/scopes-recommends-generatordeleted−27

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+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.install+13−2

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+13−10

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/clock@18.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−156

This diff is too big to show here.

paths.h.indeleted−87

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−5

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.

plugins/Unity/Indicators/Network/plugin.cpp → plugins/GlobalShortcut/plugin.cpprenamed+7−11

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.

tests/mocks/Unity/fake_unity_plugin.h → plugins/Greeter/Unity/Launcher/plugin.hrenamed+6−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/Unity/Launcher/common/quicklistentry.cpp → plugins/Greeter/Unity/Launcher/quicklistentry.cpprenamed+1−4

This diff is too big to show here.

plugins/Unity/Launcher/common/quicklistentry.h → plugins/Greeter/Unity/Launcher/quicklistentry.hrenamed+1−4

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−43

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−2

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+12−26

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+182−36

This diff is too big to show here.

plugins/LightDM/Greeter.h+35−13

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/mocks/Unity/Indicators/qml/fake_menu_widget3.qml → plugins/LightDM/IntegratedLightDM/QLightDM/Greeterrenamed+2−8

This diff is too big to show here.

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

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+47−9

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−3

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/ListViewWithPageHeader/CMakeLists.txtdeleted−42

This diff is too big to show here.

plugins/ListViewWithPageHeader/listviewwithpageheader.cppdeleted−1252

This diff is too big to show here.

plugins/ListViewWithPageHeader/listviewwithpageheader.hdeleted−211

This diff is too big to show here.

plugins/ListViewWithPageHeader/qmldirdeleted−3

This diff is too big to show here.

plugins/Powerd/CMakeLists.txt+8−4

This diff is too big to show here.

plugins/Powerd/Powerd.cpp+67−13

This diff is too big to show here.

plugins/Powerd/Powerd.h+25−9

This diff is too big to show here.

plugins/Powerd/plugin.cpp+1−1

This diff is too big to show here.

plugins/Powerd/plugin.h+1−1

This diff is too big to show here.

plugins/Powerd/qmldir+1−1

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-pin/UsersModelPrivate.cpp → plugins/ScreenshotDirectory/plugin.cpprenamed+7−14

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/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/DownloadDaemonListener/CMakeLists.txt+7−9

This diff is too big to show here.

plugins/Ubuntu/DownloadDaemonListener/DownloadTracker.cpp+9−8

This diff is too big to show here.

plugins/Ubuntu/DownloadDaemonListener/DownloadTracker.h+3−2

This diff is too big to show here.

plugins/Ubuntu/DownloadDaemonListener/interface/downloadtrackeradaptor.cpp+2−2

This diff is too big to show here.

plugins/Ubuntu/DownloadDaemonListener/interface/downloadtrackeradaptor.h+82−15

This diff is too big to show here.

plugins/Ubuntu/DownloadDaemonListener/interface/metatypes.h+3−6

This diff is too big to show here.

plugins/Ubuntu/DownloadDaemonListener/plugin.cpp+1−1

This diff is too big to show here.

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

This diff is too big to show here.

plugins/Ubuntu/DownloadDaemonListener/qmldir+1−1

This diff is too big to show here.

plugins/Ubuntu/Gestures/AxisVelocityCalculator.cpp+9−18

This diff is too big to show here.

plugins/Ubuntu/Gestures/AxisVelocityCalculator.h+11−18

This diff is too big to show here.

plugins/Ubuntu/Gestures/CMakeLists.txt+32−10

This diff is too big to show here.

plugins/Ubuntu/Gestures/Damper.hdeleted−87

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

plugins/Ubuntu/Gestures/DirectionalDragArea.cppdeleted−461

This diff is too big to show here.

plugins/Ubuntu/Gestures/DirectionalDragArea.hdeleted−251

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.

plugins/Ubuntu/Gestures/UbuntuGesturesGlobal.h → plugins/Ubuntu/Gestures/UbuntuGesturesQmlGlobal.hrenamed+3−3

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−2

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+5−67

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.txt+14−19

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Messaging/qml/ActionButton.qml → plugins/Unity/Indicators/Messaging/qml/ActionButton.qmlrenamed

The content is the same.

plugins/Unity/Indicators/Network/CMakeLists.txtdeleted−45

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

plugins/Unity/Indicators/Network/plugin.hdeleted−32

This diff is too big to show here.

plugins/Unity/Indicators/Network/qml/AccessPoint.qmldeleted−62

This diff is too big to show here.

plugins/Unity/Indicators/Network/qml/CMakeLists.txtdeleted−5

This diff is too big to show here.

plugins/Unity/Indicators/Network/qml/PasswordPage.qmldeleted−88

This diff is too big to show here.

plugins/Unity/Indicators/Network/qml/PasswordTextField.qmldeleted−68

This diff is too big to show here.

plugins/Unity/Indicators/Network/qml/qmldirdeleted−9

This diff is too big to show here.

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

This diff is too big to show here.

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

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.

plugins/Unity/Indicators/indicator.cpp+24−20

This diff is too big to show here.

plugins/Unity/Indicators/indicator.h+5−5

This diff is too big to show here.

plugins/Unity/Indicators/indicators.h+6−11

This diff is too big to show here.

plugins/Unity/Indicators/indicatorsmanager.cpp+45−56

This diff is too big to show here.

plugins/Unity/Indicators/indicatorsmanager.h+9−5

This diff is too big to show here.

plugins/Unity/Indicators/indicatorsmodel.cpp+50−75

This diff is too big to show here.

plugins/Unity/Indicators/indicatorsmodel.h+21−15

This diff is too big to show here.

plugins/Unity/Indicators/menucontentactivator.cpp+6−7

This diff is too big to show here.

plugins/Unity/Indicators/menucontentactivator.h+2−2

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/rootactionstate.h → plugins/Unity/Indicators/modelactionrootstate.hrenamed+24−34

This diff is too big to show here.

plugins/Unity/Indicators/modelprinter.cpp+30−15

This diff is too big to show here.

plugins/Unity/Indicators/modelprinter.h+4−3

This diff is too big to show here.

plugins/Unity/Indicators/plugin.cpp+19−11

This diff is too big to show here.

plugins/Unity/Indicators/plugin.h+2−2

This diff is too big to show here.

plugins/Unity/Indicators/qml/ButtonMenuItem.qmldeleted−49

This diff is too big to show here.

plugins/Unity/Indicators/qml/CMakeLists.txtdeleted−5

This diff is too big to show here.

plugins/Unity/Indicators/qml/CachedUnityMenuModel.qmldeleted−60

This diff is too big to show here.

plugins/Unity/Indicators/qml/FramedMenuItem.qmldeleted−41

This diff is too big to show here.

plugins/Unity/Indicators/qml/HLine.qmldeleted−29

This diff is too big to show here.

plugins/Unity/Indicators/qml/IndicatorPage.qmldeleted−160

This diff is too big to show here.

plugins/Unity/Indicators/qml/MenuAction.qmldeleted−59

This diff is too big to show here.

plugins/Unity/Indicators/qml/MenuItemFactory.qmldeleted−95

This diff is too big to show here.

plugins/Unity/Indicators/qml/RemoveBackground.qmldeleted−55

This diff is too big to show here.

plugins/Unity/Indicators/qml/SectionMenuItem.qmldeleted−54

This diff is too big to show here.

plugins/Unity/Indicators/qml/SliderMenuItem.qmldeleted−120

This diff is too big to show here.

plugins/Unity/Indicators/qml/StandardMenuItem.qmldeleted−76

This diff is too big to show here.

plugins/Unity/Indicators/qml/SwitchMenuItem.qmldeleted−58

This diff is too big to show here.

plugins/Unity/Indicators/qml/qmldirdeleted−24

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/rootactionstate.cppdeleted−249

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/Unity/Indicators/unitymenumodelcache.cpp+32−9

This diff is too big to show here.

plugins/Unity/Indicators/unitymenumodelcache.h+12−6

This diff is too big to show here.

plugins/Unity/Indicators/unitymenumodelstack.cpp+100−9

This diff is too big to show here.

plugins/Unity/Indicators/unitymenumodelstack.h+11−3

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/CMakeLists.txtdeleted−49

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Messaging/CMakeLists.txtdeleted−1

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Messaging/qml/ActionTextField.qmldeleted−66

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Messaging/qml/CMakeLists.txtdeleted−5

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Messaging/qml/GroupedMessage.qmldeleted−96

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Messaging/qml/HeroMessage.qmldeleted−120

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Messaging/qml/HeroMessageHeader.qmldeleted−161

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Messaging/qml/MessageMenuItem.qmldeleted−96

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Messaging/qml/QuickReply.qmldeleted−160

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Messaging/qml/SimpleTextMessage.qmldeleted−97

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Messaging/qml/SnapDecision.qmldeleted−142

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Messaging/qml/qmldirdeleted−12

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Messaging/qml/utils.jsdeleted−27

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Network/CMakeLists.txtdeleted−45

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Network/networkagent.cppdeleted−146

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Network/networkagent.hdeleted−65

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Network/qml/AccessPoint.qmldeleted−68

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Network/qml/CMakeLists.txtdeleted−5

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Network/qml/PasswordPage.qmldeleted−88

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Network/qml/PasswordTextField.qmldeleted−68

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Network/qml/qmldirdeleted−9

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Network/secret-agent.cdeleted−382

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Network/secret-agent.hdeleted−102

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/flatmenuproxymodel.cppdeleted−288

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/flatmenuproxymodel.hdeleted−93

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/modelprinter.cppdeleted−114

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/modelprinter.hdeleted−50

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/plugin.cppdeleted−42

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/qml/BasicMenuItem.qmldeleted−48

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/qml/ButtonMenuItem.qmldeleted−47

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/qml/CMakeLists.txtdeleted−5

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/qml/HLine.qmldeleted−29

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/qml/IndicatorBase.qmldeleted−59

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/qml/IndicatorPage.qmldeleted−191

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/qml/IndicatorWidget.qmldeleted−68

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/qml/MenuAction.qmldeleted−86

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/qml/MenuActionBinding.qmldeleted−106

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/qml/MenuItem.qmldeleted−40

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/qml/MenuItemFactory.qmldeleted−110

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/qml/ProgressMenuItem.qmldeleted−65

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/qml/RemoveBackground.qmldeleted−55

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/qml/SectionMenuItem.qmldeleted−57

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/qml/SliderMenuItem.qmldeleted−64

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/qml/qmldirdeleted−21

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/resources/artwork/messaging/default_app.svgdeleted−42

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/resources/artwork/messaging/default_contact.pngdeleted

Binary file not shown.

plugins/Unity/IndicatorsLegacy/resources/artwork/messaging/message_sms01_54px.pngdeleted

Binary file not shown.

plugins/Unity/IndicatorsLegacy/resources/indicators.qrcdeleted−7

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.

Panel/Indicators/MessagingIndicatorWidget.qml → plugins/Unity/InputInfo/plugin.cpprenamed+15−8

This diff is too big to show here.

plugins/Unity/Indicators/Network/qml/WifiSection.qml → plugins/Unity/InputInfo/plugin.hrenamed+13−11

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.txt+34−8

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.

Panel/Indicators/MessagingIndicatorPage.qml → plugins/Unity/Launcher/asadapter.hrenamed+28−17

This diff is too big to show here.

plugins/Unity/Launcher/backend/launcherbackend.cppdeleted−145

This diff is too big to show here.

plugins/Unity/Launcher/backend/launcherbackend.hdeleted−132

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/IndicatorsLegacy/qml/SwitchMenuItem.qml → plugins/Unity/Launcher/gsettings.hrenamed+25−21

This diff is too big to show here.

plugins/Unity/Launcher/launcheritem.cpp+149−12

This diff is too big to show here.

plugins/Unity/Launcher/launcheritem.h+38−22

This diff is too big to show here.

plugins/Unity/Launcher/launchermodel.cpp+464−53

This diff is too big to show here.

plugins/Unity/Launcher/launchermodel.h+49−23

This diff is too big to show here.

plugins/Unity/Launcher/plugin.cpp+8−7

This diff is too big to show here.

plugins/Unity/Launcher/plugin.h+1−1

This diff is too big to show here.

plugins/Unity/Launcher/qmldir+1−1

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.cpp+24−2

This diff is too big to show here.

plugins/Unity/Launcher/quicklistmodel.h+7−4

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/IndicatorsLegacy/Network/plugin.h → plugins/Unity/Launcher/ualwrapper.hrenamed+16−12

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.

tests/mocks/LightDM/demo/UsersModelPrivate.cpp → plugins/Unity/Platform/plugin.cpprenamed+7−13

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/abstractfilteroption.hdeleted−58

This diff is too big to show here.

plugins/Unity/applicationpreview.cppdeleted−96

This diff is too big to show here.

plugins/Unity/applicationpreview.hdeleted−66

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−230

This diff is too big to show here.

plugins/Unity/categories.hdeleted−86

This diff is too big to show here.

plugins/Unity/categoryresults.cppdeleted−96

This diff is too big to show here.

plugins/Unity/categoryresults.hdeleted−67

This diff is too big to show here.

plugins/Unity/checkoptionfilter.cppdeleted−63

This diff is too big to show here.

plugins/Unity/checkoptionfilter.hdeleted−57

This diff is too big to show here.

plugins/Unity/filter.cppdeleted−129

This diff is too big to show here.

plugins/Unity/filter.hdeleted−74

This diff is too big to show here.

plugins/Unity/filteroption.cppdeleted−91

This diff is too big to show here.

plugins/Unity/filteroption.hdeleted−61

This diff is too big to show here.

plugins/Unity/filters.cppdeleted−165

This diff is too big to show here.

plugins/Unity/filters.hdeleted−77

This diff is too big to show here.

plugins/Unity/genericoptionsmodel.cppdeleted−170

This diff is too big to show here.

plugins/Unity/genericoptionsmodel.hdeleted−77

This diff is too big to show here.

plugins/Unity/moviepreview.cppdeleted−67

This diff is too big to show here.

plugins/Unity/moviepreview.hdeleted−60

This diff is too big to show here.

plugins/Unity/multirangefilter.cppdeleted−63

This diff is too big to show here.

plugins/Unity/multirangefilter.hdeleted−60

This diff is too big to show here.

plugins/Unity/musicpreview.cppdeleted−54

This diff is too big to show here.

plugins/Unity/musicpreview.hdeleted−62

This diff is too big to show here.

plugins/Unity/plugin.cppdeleted−71

This diff is too big to show here.

plugins/Unity/preview.cppdeleted−184

This diff is too big to show here.

plugins/Unity/preview.hdeleted−84

This diff is too big to show here.

plugins/Unity/previewaction.cppdeleted−75

This diff is too big to show here.

plugins/Unity/previewaction.hdeleted−71

This diff is too big to show here.

plugins/Unity/previewinfohint.cppdeleted−67

This diff is too big to show here.

plugins/Unity/previewinfohint.hdeleted−58

This diff is too big to show here.

plugins/Unity/qmldirdeleted−3

This diff is too big to show here.

plugins/Unity/radiooptionfilter.cppdeleted−59

This diff is too big to show here.

plugins/Unity/radiooptionfilter.hdeleted−59

This diff is too big to show here.

plugins/Unity/ratingfilteroption.cppdeleted−62

This diff is too big to show here.

plugins/Unity/ratingfilteroption.hdeleted−53

This diff is too big to show here.

plugins/Unity/ratingoptionsmodel.cppdeleted−33

This diff is too big to show here.

plugins/Unity/ratingsfilter.cppdeleted−72

This diff is too big to show here.

plugins/Unity/ratingsfilter.hdeleted−66

This diff is too big to show here.

plugins/Unity/scope.cppdeleted−322

This diff is too big to show here.

plugins/Unity/scope.hdeleted−138

This diff is too big to show here.

plugins/Unity/scopes.cppdeleted−176

This diff is too big to show here.

plugins/Unity/scopes.hdeleted−94

This diff is too big to show here.

plugins/Unity/signalslist.cppdeleted−39

This diff is too big to show here.

plugins/Unity/signalslist.hdeleted−38

This diff is too big to show here.

plugins/Unity/socialpreview.cppdeleted−83

This diff is too big to show here.

plugins/Unity/socialpreview.hdeleted−63

This diff is too big to show here.

plugins/Unity/socialpreviewcomment.cppdeleted−63

This diff is too big to show here.

plugins/Unity/socialpreviewcomment.hdeleted−57

This diff is too big to show here.

plugins/Unity/unityoptionsmodel.cppdeleted−67

This diff is too big to show here.

plugins/Unity/unityoptionsmodel.hdeleted−49

This diff is too big to show here.

plugins/Unity/variantutils.cppdeleted−42

This diff is too big to show here.

plugins/Unity/variantutils.hdeleted−32

This diff is too big to show here.

plugins/Utils/CMakeLists.txt+36−8

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−38

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+62−15

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+17−17

This diff is too big to show here.

plugins/Utils/qlimitproxymodelqml.h+2−2

This diff is too big to show here.

plugins/Utils/qmldir+3−1

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.

plugins/ListViewWithPageHeader/plugin.h → plugins/Wizard/Utils/plugin.hrenamed+4−4

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+44

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+1188−174

This diff is too big to show here.

po/ast.ponew file+1408

This diff is too big to show here.

po/az.po+852−131

This diff is too big to show here.

po/be.ponew file+1253

This diff is too big to show here.

po/bg.po+780−146

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+1375−166

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+1374−169

This diff is too big to show here.

po/el.po+1249−163

This diff is too big to show here.

po/en_AU.po+1367−171

This diff is too big to show here.

po/en_GB.po+1326−169

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+797−120

This diff is too big to show here.

po/es.po+1364−170

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+1365−175

This diff is too big to show here.

po/fo.po+795−132

This diff is too big to show here.

po/fr.po+1388−163

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+1358−170

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+1018−175

This diff is too big to show here.

po/hi.ponew file+850

This diff is too big to show here.

po/hr.po+1305−171

This diff is too big to show here.

po/hu.po+1359−170

This diff is too big to show here.

po/hy.po+848−144

This diff is too big to show here.

po/ia.ponew file+1409

This diff is too big to show here.

po/id.po+882−121

This diff is too big to show here.

po/is.ponew file+999

This diff is too big to show here.

po/it.po+1370−168

This diff is too big to show here.

po/ja.po+889−124

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+714−129

This diff is too big to show here.

po/ko.po+1170−172

This diff is too big to show here.

po/ku.ponew file+978

This diff is too big to show here.

po/ky.po+714−129

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+1089−135

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+789−131

This diff is too big to show here.

po/nb.po+1349−171

This diff is too big to show here.

po/ne.ponew file+834

This diff is too big to show here.

po/nl.po+1360−170

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+1355−172

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+1148−163

This diff is too big to show here.

po/ro.po+1137−133

This diff is too big to show here.

po/ru.po+1361−171

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+758−120

This diff is too big to show here.

po/sk.ponew file+1352

This diff is too big to show here.

po/sl.po+1317−162

This diff is too big to show here.

po/sq.ponew file+1048

This diff is too big to show here.

po/sr.po+1324−159

This diff is too big to show here.

po/sv.po+1357−173

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+743−121

This diff is too big to show here.

po/th.po+709−112

This diff is too big to show here.

po/tr.po+1348−167

This diff is too big to show here.

po/ug.po+1181−163

This diff is too big to show here.

po/uk.po+1358−172

This diff is too big to show here.

po/unity8.pot+684−116

This diff is too big to show here.

po/update-unity-pot+31−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+1308−175

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+1255−175

This diff is too big to show here.

qml/ApplicationMenus/ApplicationMenuItemFactory.qmlnew file+135

This diff is too big to show here.

Dash/ScopeListView.qml → qml/ApplicationMenus/ApplicationMenusLimits.qmlrenamed+7−6

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.

Hud/ToolBarIcon.qml → qml/Components/BlurLayer.qmlrenamed+18−11

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.

Components/DragHandle.qml → qml/Components/DragHandle.qmlrenamed+69−54

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.

Components/EdgeDragEvaluator.qml → qml/Components/EdgeDragEvaluator.qmlrenamed+20−11

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+46−9

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+1−1

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.

Components/Math.js → qml/Components/flickableUtils.jsrenamed+10−8

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.

Dash/Generic/GenericFilterGridPotrait.qml → qml/Greeter/FullLightDMImpl.qmlrenamed+12−11

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+117−137

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.

tests/mocks/Unity/Indicators/qml/fake_menu_page3.qml → qml/Greeter/LoginAreaContainer.qmlrenamed+18−16

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.

Launcher/FoldingLauncherDelegate.qml → qml/Launcher/FoldingLauncherDelegate.qmlrenamed+37−26

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/Music/CarouselDelegateMusic.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.

plugins/Unity/Indicators/qml/IndicatorBase.qml → qml/Panel/Indicators/IndicatorBase.qmlrenamed+14−20

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+15−6

This diff is too big to show here.

Panel/Indicators/client/IndicatorsList.qml → qml/Panel/Indicators/client/IndicatorsList.qmlrenamed+25−19

This diff is too big to show here.

plugins/Unity/Indicators/qml/IndicatorWidget.qml → qml/Panel/Indicators/client/IndicatorsTree.qmlrenamed+16−8

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.

tests/mocks/Unity/Indicators/qml/fake_menu_page2.qml → qml/Rotation/ImmediateRotationAction.qmlrenamed+14−16

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/Video/CarouselDelegateVideo.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.

Dash/Video/VideosCarousel.qml → qml/Stage/WindowedFullscreenPolicy.qmlrenamed+12−15

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−72

This diff is too big to show here.

run_on_devicedeleted−145

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.txt+64−1

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/Panel/CMakeLists.txtdeleted−1

This diff is too big to show here.

src/Panel/Indicators/CMakeLists.txtdeleted−2

This diff is too big to show here.

src/Panel/Indicators/servicefiles/CMakeLists.txtdeleted−14

This diff is too big to show here.

src/Panel/Indicators/servicefiles/com.canonical.indicator.messagesdeleted−10

This diff is too big to show here.

src/SecondaryWindow.cppnew file+40

This diff is too big to show here.

tests/plugins/Unity/signalslisttest.h → src/SecondaryWindow.hrenamed+8−8

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.

plugins/Unity/ratingoptionsmodel.h → src/ShellView.hrenamed+11−10

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.

tests/mocks/Unity/Indicators/qml/fake_menu_page1.qml → src/qmldebuggerutils.hrenamed+14−17

This diff is too big to show here.

tests/CMakeLists.txt+148−9

This diff is too big to show here.

tests/autopilot/setup.py+2−2

This diff is too big to show here.

tests/autopilot/unity8/__init__.py+60−4

This diff is too big to show here.

tests/autopilot/unity8/shell/emulators/__init__.py → tests/autopilot/unity8/application_lifecycle/__init__.pyrenamed+2−7

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/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/shell/emulators/launcher.py → tests/autopilot/unity8/greeter/tests/__init__.pyrenamed+8−18

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/indicators_client/__init__.pydeleted−8

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/autopilot/unity8/indicators_client/emulators/main_window.pydeleted−27

This diff is too big to show here.

tests/autopilot/unity8/indicators_client/tests/__init__.pydeleted−91

This diff is too big to show here.

tests/autopilot/unity8/indicators_client/tests/test_battery.pydeleted−114

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__.py+240−13

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/greeter.py → tests/autopilot/unity8/shell/emulators.pyrenamed+25−18

This diff is too big to show here.

tests/autopilot/unity8/shell/emulators/dash.pydeleted−52

This diff is too big to show here.

tests/autopilot/unity8/shell/emulators/hud.pydeleted−80

This diff is too big to show here.

tests/autopilot/unity8/shell/emulators/main_window.pydeleted−92

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__.py+219−84

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_hud.pydeleted−151

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_lock_screen.py+47−77

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/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.png

Binary file not shown.

tests/data/unity/backgrounds/red.png

Binary file not shown.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/data/unity/indicators/com.canonical.indicator.fake4+4−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.

tests/graphics/clock@18.pngnew file

Binary file not shown.

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

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.

Components/ListItems/ThinDivider.qml → tests/mocks/Biometryd/MockDevice.cpprenamed+11−9

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.

tests/mocks/Biometryd/MockObserver.cppnew file+22

This diff is too big to show here.

tests/plugins/Unity/previewbindingstest.h → tests/mocks/Biometryd/MockObserver.hrenamed+14−12

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+47−2

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.txt+2−6

This diff is too big to show here.

tests/mocks/GSettings.1.0/fake_gsettings.cpp+335−20

This diff is too big to show here.

tests/mocks/GSettings.1.0/fake_gsettings.h+104−14

This diff is too big to show here.

tests/mocks/GSettings.1.0/plugin.cpp+1−1

This diff is too big to show here.

tests/mocks/GSettings.1.0/plugin.h+1−1

This diff is too big to show here.

tests/mocks/GSettings.1.0/qmldir+1

This diff is too big to show here.

tests/mocks/HudClient/CMakeLists.txtdeleted−41

This diff is too big to show here.

tests/mocks/HudClient/fake_hud_plugin.cppdeleted−39

This diff is too big to show here.

tests/mocks/HudClient/fake_libhud_client.cppdeleted−240

This diff is too big to show here.

tests/mocks/HudClient/libhud_client_stub.cppdeleted−93

This diff is too big to show here.

tests/mocks/HudClient/libhud_client_stub.hdeleted−64

This diff is too big to show here.

tests/mocks/HudClient/qmldirdeleted−1

This diff is too big to show here.

tests/mocks/LightDM/CMakeLists.txtdeleted−55

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/InfographicModelPrivate.cppdeleted−91

This diff is too big to show here.

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

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−19

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−19

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−18

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/mocks/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/HudClient/plugin.cpp → tests/mocks/Lights/plugin.cpprenamed+12−15

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.

plugins/HudClient/plugin.h → tests/mocks/MeeGo/QOfono/plugin.hrenamed+7−7

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.txt+2−13

This diff is too big to show here.

tests/mocks/Powerd/Powerd.cpp+15−1

This diff is too big to show here.

tests/mocks/Powerd/Powerd.h+17−8

This diff is too big to show here.

tests/mocks/Powerd/plugin.cpp+1−1

This diff is too big to show here.

tests/mocks/Powerd/plugin.h+1−1

This diff is too big to show here.

tests/mocks/Powerd/qmldir+1

This diff is too big to show here.

tests/mocks/QMenuModel/CMakeLists.txt+22−8

This diff is too big to show here.

tests/mocks/QMenuModel/QDBusActionGroup.qml+30−5

This diff is too big to show here.

plugins/Unity/genericpreview.cpp → tests/mocks/QMenuModel/UnityMenuAction.qmlrenamed+11−12

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.

plugins/Unity/genericpreview.h → tests/mocks/QMenuModel/actionstateparser.hrenamed+11−22

This diff is too big to show here.

plugins/Unity/Indicators/qml/DivMenuItem.qml → tests/mocks/QMenuModel/dbus-enums.hrenamed+32−7

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/qmldir+4

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/ListViewWithPageHeader/plugin.cpp → tests/mocks/SessionBroadcast/plugin.cpprenamed+10−8

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−92

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−453

This diff is too big to show here.

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

This diff is too big to show here.

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

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+5−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.txt+2−10

This diff is too big to show here.

tests/mocks/Ubuntu/DownloadDaemonListener/MockDownloadTracker.cpp+8−1

This diff is too big to show here.

tests/mocks/Ubuntu/DownloadDaemonListener/MockDownloadTracker.h+2−1

This diff is too big to show here.

tests/mocks/Ubuntu/DownloadDaemonListener/plugin.cpp−1

This diff is too big to show here.

tests/mocks/Ubuntu/DownloadDaemonListener/plugin.h+1−1

This diff is too big to show here.

tests/mocks/Ubuntu/DownloadDaemonListener/qmldir+1

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/mocks/Unity/Indicators/qml/fake_menu_widget1.qml → tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/MockKeyboardPlugin.qmlrenamed+4−6

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.

plugins/Unity/IndicatorsLegacy/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.

Dash/DashHome.qml → tests/mocks/Ubuntu/SystemSettings/TimeDate/MockTimeDate.qmlrenamed+14−16

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.

tests/mocks/Ubuntu/Telephony/ContactWatcherData.hnew file+46

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_scopeView1.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/Ubuntu/Application/plugin.h → tests/mocks/Unity/Application/plugin.hrenamed+3−2

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.txt+6−39

This diff is too big to show here.

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

This diff is too big to show here.

plugins/Unity/abstractfilteroption.cpp → tests/mocks/Unity/Connectivity/MockConnectivity.cpprenamed+8−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.txt+13−23

This diff is too big to show here.

tests/mocks/Unity/Indicators/IndicatorsModel.qml+230−73

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.cpp+25−2

This diff is too big to show here.

tests/mocks/Unity/Indicators/fakeplugin.h+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/indicators_fake.qrcdeleted−14

This diff is too big to show here.

tests/mocks/Unity/Indicators/qml/FakeMenuPage.qmldeleted−37

This diff is too big to show here.

tests/mocks/Unity/Indicators/qml/fake_menu_page4.qmldeleted−36

This diff is too big to show here.

tests/mocks/Unity/Indicators/qml/fake_menu_page5.qmldeleted−36

This diff is too big to show here.

tests/mocks/Unity/Indicators/qml/fake_menu_widget4.qmldeleted−23

This diff is too big to show here.

tests/mocks/Unity/Indicators/qml/fake_menu_widget5.qmldeleted−23

This diff is too big to show here.

tests/mocks/Unity/Indicators/qmldir+3−1

This diff is too big to show here.

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

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Network/qml/WifiSection.qml → tests/mocks/Unity/InputInfo/mockcontroller.cpprenamed+16−15

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.

Panel/Indicators/SoundIndicatorWidget.qml → tests/mocks/Unity/InputInfo/plugin.hrenamed+14−9

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.txt+7−9

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.cpp+95−1

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockLauncherItem.h+36−15

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockLauncherModel.cpp+125−6

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockLauncherModel.h+23−9

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockQuickListModel.cpp+6−2

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockQuickListModel.h+4−2

This diff is too big to show here.

tests/mocks/Unity/Launcher/plugin.cpp+4

This diff is too big to show here.

tests/mocks/Unity/Launcher/plugin.h+1−1

This diff is too big to show here.

tests/mocks/Unity/Launcher/qmldir+1

This diff is too big to show here.

tests/mocks/Unity/Notifications/CMakeLists.txt+13−8

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.

tests/mocks/Unity/Notifications/notification.jsdeleted−23

This diff is too big to show here.

plugins/Unity/IndicatorsLegacy/Messaging/qml/TextMessage.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/qmldir+3−1

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_scopeView.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/Unity/fake_categories.cppdeleted−181

This diff is too big to show here.

tests/mocks/Unity/fake_categories.hdeleted−70

This diff is too big to show here.

tests/mocks/Unity/fake_scope.cppdeleted−200

This diff is too big to show here.

tests/mocks/Unity/fake_scope.hdeleted−95

This diff is too big to show here.

tests/mocks/Unity/fake_scopes.cppdeleted−146

This diff is too big to show here.

tests/mocks/Unity/fake_scopes.hdeleted−79

This diff is too big to show here.

tests/mocks/Unity/fake_unity_plugin.cppdeleted−43

This diff is too big to show here.

tests/mocks/Unity/qmldirdeleted−2

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.

tests/mocks/LightDM/single-passphrase/UsersModelPrivate.cpp → tests/mocks/Utils/URLDispatcher.cpprenamed+16−11

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.

plugins/Unity/IndicatorsLegacy/qml/DivMenuItem.qml → tests/mocks/Utils/constants.cpprenamed+10−12

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/LightDM/demo/CMakeLists.txt → tests/mocks/liblightdm/demo/CMakeLists.txtrenamed+1−2

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/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.txt+7−2

This diff is too big to show here.

tests/mocks/libusermetrics/ColorTheme.cpp+4

This diff is too big to show here.

tests/mocks/libusermetrics/ColorTheme.h+2−1

This diff is too big to show here.

tests/mocks/libusermetrics/UserMetrics.cpp+55−21

This diff is too big to show here.

tests/mocks/libusermetrics/UserMetrics.h+2

This diff is too big to show here.

tests/mocks/libusermetrics/libusermetricsoutput/ColorTheme.hdeleted−1

This diff is too big to show here.

tests/mocks/libusermetrics/libusermetricsoutput/UserMetrics.hdeleted−1

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+9−2

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/qmltests/Components/tst_DragHandle/TestButton.qml → tests/plugins/GlobalShortcut/shortcut.qmlrenamed+17−19

This diff is too big to show here.

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

This diff is too big to show here.

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/ListViewWithPageHeader/CMakeLists.txtdeleted−36

This diff is too big to show here.

tests/plugins/ListViewWithPageHeader/listviewwithpageheadertest.cppdeleted−1671

This diff is too big to show here.

tests/plugins/ListViewWithPageHeader/listviewwithpageheadertestsection.cppdeleted−2092

This diff is too big to show here.

tests/plugins/ListViewWithPageHeader/test.qmldeleted−96

This diff is too big to show here.

tests/plugins/ListViewWithPageHeader/test_section.qmldeleted−106

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/mocks/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+5−5

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cppdeleted−551

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.qml+90

This diff is too big to show here.

tests/plugins/Unity/CMakeLists.txt+3−47

This diff is too big to show here.

tests/plugins/Unity/Indicators/CMakeLists.txt+41−23

This diff is too big to show here.

tests/plugins/Unity/Indicators/IndicatorsManagerTest.cpp+54−9

This diff is too big to show here.

tests/plugins/Unity/Indicators/IndicatorsModelTest.cpp+141

This diff is too big to show here.

tests/plugins/Unity/Indicators/MenuContentActivatorTest.cpp+4−4

This diff is too big to show here.

tests/plugins/Unity/Indicators/RootActionStateTest.cpp+95

This diff is too big to show here.

tests/plugins/Unity/Indicators/SharedUnityMenuModelTest.cpp+102

This diff is too big to show here.

tests/plugins/Unity/Indicators/UnityMenuModelStackTest.cpp+201

This diff is too big to show here.

tests/plugins/Unity/Indicators/indicatorsmodeltest.cpp−109

This diff is too big to show here.

tests/plugins/Unity/Launcher/CMakeLists.txt+105

This diff is too big to show here.

tests/plugins/Unity/Launcher/appdrawermodeltest.cpp+68

This diff is too big to show here.

tests/plugins/Unity/Launcher/applications/abs-icon.desktop+4

This diff is too big to show here.

tests/plugins/Unity/Launcher/applications/click-icon.desktop+5

This diff is too big to show here.

tests/plugins/Unity/Launcher/applications/click-icon.svg

This diff is too big to show here.

tests/plugins/Unity/Launcher/applications/no-name.desktop+3

This diff is too big to show here.

tests/plugins/Unity/Launcher/applications/rel-icon.desktop+4

This diff is too big to show here.

tests/plugins/Unity/Launcher/applications/rel-icon.svg

This diff is too big to show here.

tests/plugins/Unity/Launcher/gsettings.cpp+21−21

This diff is too big to show here.

tests/plugins/Unity/Launcher/gsettings.h+24−19

This diff is too big to show here.

tests/plugins/Unity/Launcher/launchermodeltest.cpp+836

This diff is too big to show here.

tests/plugins/Unity/Launcher/ualwrapper.cpp+58

This diff is too big to show here.

tests/plugins/Unity/Launcher/ualwrapper.h+55

This diff is too big to show here.

tests/plugins/Unity/Launcher/xdgwatcher.cpp+17−18

This diff is too big to show here.

tests/plugins/Unity/Launcher/xdgwatcher.h+15−18

This diff is too big to show here.

tests/plugins/Unity/Platform/CMakeLists.txt+30

This diff is too big to show here.

tests/plugins/Unity/Platform/platformtest.cpp+142

This diff is too big to show here.

tests/plugins/Unity/Session/CMakeLists.txt+72

This diff is too big to show here.

tests/plugins/Unity/Session/LightDMServer.cpp+29

This diff is too big to show here.

tests/plugins/Unity/Session/LightDMServer.h+38

This diff is too big to show here.

tests/plugins/Unity/Session/LogindServer.cpp+43

This diff is too big to show here.

tests/plugins/Unity/Session/LogindServer.h+48

This diff is too big to show here.

tests/plugins/Unity/Session/interfaces.xml+29

This diff is too big to show here.

tests/plugins/Unity/Session/preload.c+43

This diff is too big to show here.

tests/plugins/Unity/Session/server.cpp+50

This diff is too big to show here.

tests/plugins/Unity/Session/sessionbackendtest.cpp+289

This diff is too big to show here.

tests/plugins/Unity/filtersbindingstest.cpp−484

This diff is too big to show here.

tests/plugins/Unity/filtersbindingstest.h−47

This diff is too big to show here.

tests/plugins/Unity/previewbindingstest.cpp−167

This diff is too big to show here.

tests/plugins/Unity/signalslisttest.cpp−57

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.cpp+76

This diff is too big to show here.

tests/plugins/Utils/ModelTest.cpp+25−42

This diff is too big to show here.

tests/plugins/Utils/ModelTest.h

This diff is too big to show here.

tests/plugins/Utils/QLimitProxyModelTest.cpp+31−31

This diff is too big to show here.

tests/plugins/Utils/URLDispatcherTest.cpp+78

This diff is too big to show here.

tests/plugins/Utils/UnitySortFilterProxyModelTest.cpp+25−25

This diff is too big to show here.

tests/plugins/Utils/WindowInputMonitorTest.cpp+461

This diff is too big to show here.

tests/plugins/Utils/WindowStateStorageTest.cpp+121

This diff is too big to show here.

tests/plugins/Utils/tst_UtilsStyle.qml+47

This diff is too big to show here.

tests/plugins/WindowManager/CMakeLists.txt+36

This diff is too big to show here.

tests/plugins/WindowManager/UnityApplicationMocks.h+211

This diff is too big to show here.

tests/plugins/WindowManager/tst_TopLevelWindowModel.cpp+193

This diff is too big to show here.

tests/plugins/Wizard/CMakeLists.txt+24

This diff is too big to show here.

tests/plugins/Wizard/tst_pagelist.cpp+183

This diff is too big to show here.

tests/plugins/Wizard/tst_system.cpp+124

This diff is too big to show here.

tests/qmltests/ApplicationMenuDataLoader.qml+99

This diff is too big to show here.

tests/qmltests/ApplicationMenus/tst_MenuBar.qml+437

This diff is too big to show here.

tests/qmltests/ApplicationMenus/tst_MenuPopup.qml+361

This diff is too big to show here.

tests/qmltests/CMakeLists.txt+71−70

This diff is too big to show here.

tests/qmltests/Components/CMakeLists.txt+41−13

This diff is too big to show here.

tests/qmltests/Components/RevealingRectangle.qml−78

This diff is too big to show here.

tests/qmltests/Components/tst_AnimationControllerWithSignals.qml−142

This diff is too big to show here.

tests/qmltests/Components/tst_Background.qml+91

This diff is too big to show here.

tests/qmltests/Components/tst_Carousel.qml−194

This diff is too big to show here.

tests/qmltests/Components/tst_CrossFadeImage.qml−125

This diff is too big to show here.

tests/qmltests/Components/tst_Dialogs.qml+112

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle.cpp+175−66

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle.qml+133−57

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle/BidirectionalShowable.qml+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+8−8

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+11−23

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle/TopEdgeShowable.qml+15−15

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle/UnityLogo.png

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−151

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_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_AppPreview.qml−166

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/Video/tst_VideoPreview.qml−63

This diff is too big to show here.

tests/qmltests/Dash/qml/FakeScopeView.qml−120

This diff is too big to show here.

tests/qmltests/Dash/qml/fake_scopeView2.qml−24

This diff is too big to show here.

tests/qmltests/Dash/qml/fake_scopeView3.qml−24

This diff is too big to show here.

tests/qmltests/Dash/qml/fake_scopeView4.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−209

This diff is too big to show here.

tests/qmltests/Dash/tst_DashPreview.qml−155

This diff is too big to show here.

tests/qmltests/Dash/tst_FilterGrids.qml−144

This diff is too big to show here.

tests/qmltests/Dash/tst_GenericScopeView.qml−54

This diff is too big to show here.

tests/qmltests/Dash/tst_ScopeView.qml−52

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−212

This diff is too big to show here.

tests/qmltests/Greeter/tst_Phone.qml−106

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+1387−156

This diff is too big to show here.

tests/qmltests/Notifications/Notification.qml+13−6

This diff is too big to show here.

tests/qmltests/Notifications/tst_Notifications.qml+796−326

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/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−61

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorRow.qml−244

This diff is too big to show here.

tests/qmltests/Panel/tst_Indicators.qml−162

This diff is too big to show here.

tests/qmltests/Panel/tst_MenuContent.qml+38−85

This diff is too big to show here.

tests/qmltests/Panel/tst_Panel.qml+601−159

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−62

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/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+3256−214

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+21−2

This diff is too big to show here.

tests/uqmlscene/README+3−1

This diff is too big to show here.

tests/uqmlscene/main.cpp+39−14

This diff is too big to show here.

tests/utils/modules/Unity/Test/CMakeLists.txt+27−7

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+472−108

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+22−50

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−25

This diff is too big to show here.