on 32a567e help sign in
debian/control+206−189
since splitsnapshots
unifiedsplit
@@ -2,166 +2,171 @@ Source: unity8
2Section: x11
2Section: x11
3Priority: optional
3Priority: optional
4Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
4Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
5−Build-Depends: cmake,
5+Build-Depends:
6+ android-headers,
7+ cmake,
6− cmake-extras,
8+ cmake-extras,
7− dbus-test-runner,
9+ dbus-test-runner,
8− debhelper (>= 9),
10+ debhelper (>= 9),
9− dh-apparmor,
11+ dh-apparmor,
10− doxyqml,
12+ doxyqml,
11−# To allow cross-compiling to work, we also must append :native
12−# to g++ so we don't try to run arm g++
13−# on an x86 CPU for example, when cross-compiling.
14− g++:native,
13+ g++:native,
15− gdb,
14+ gdb,
16− graphviz,
15+ graphviz,
17− gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
16+ gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
18− libandroid-properties-dev,
17+ libandroid-properties-dev,
19− libconnectivity-qt1-dev (>= 0.7.1),
18+ libconnectivity-qt1-dev (>= 0.7.1),
20− libevdev-dev,
19+ libevdev-dev,
21− libgeonames-dev (>= 0.2),
20+ libgeonames-dev (>= 0.2),
22− libgnome-desktop-3-dev,
23− libgl1-mesa-dev[!arm64 !armhf] | libgl-dev[!arm64 !armhf],
21+ libgl1-mesa-dev[!arm64 !armhf] | libgl-dev[!arm64 !armhf],
24− libgl1-mesa-dri,
22+ libgl1-mesa-dri,
25− libgles2-mesa-dev[arm64 armhf],
23+ libgles2-mesa-dev[arm64 armhf],
26− libglib2.0-dev,
24+ libglib2.0-dev,
25+ libgnome-desktop-3-dev,
27− libgsettings-qt-dev,
26+ libgsettings-qt-dev,
28− libhardware-dev,
27+ libhardware-dev,
29− liblightdm-qt5-3-dev,
28+ liblightdm-qt5-3-dev,
30− libpam0g-dev,
29+ libpam0g-dev,
31− libpulse-dev,
30+ libpulse-dev,
32− libqmenumodel-dev (>= 0.2.12),
31+ libqmenumodel-dev (>= 0.2.12),
33− libqtdbusmock1-dev (>= 0.7),
32+ libqt5sql5-sqlite,
34− libqtdbustest1-dev,
35− libqt5svg5-dev,
33+ libqt5svg5-dev,
36− libqt5xmlpatterns5-dev,
34+ libqt5xmlpatterns5-dev,
35+ libqtdbusmock1-dev (>= 0.7),
36+ libqtdbustest1-dev,
37− libsystemsettings-dev,
37+ libsystemsettings-dev,
38− libubuntu-app-launch2-dev,
38+ libubuntu-app-launch2-dev,
39− libubuntu-download-manager-common-dev,
39+ libubuntu-download-manager-common-dev,
40− libubuntugestures5-dev (>= 1.3.2030),
40+ libubuntugestures5-dev (>= 1.3.2030),
41− libubuntugestures5-private-dev (>= 1.3.2030),
41+ libubuntugestures5-private-dev (>= 1.3.2030),
42− libudev-dev,
42+ libudev-dev,
43− libudm-common-dev,
43+ libudm-common-dev,
44− libunity-api-dev (>= 8.7),
44+ libunity-api-dev (>= 8.7),
45− libusermetricsoutput1-dev,
45+ libusermetricsoutput1-dev,
46−# Need those X11 libs touch emulation from mouse events in manual QML tests on a X11 desktop
47− libx11-dev[!arm64 !armhf],
46+ libx11-dev[!arm64 !armhf],
48− libxcb1-dev[!arm64 !armhf],
47+ libxcb1-dev[!arm64 !armhf],
49− libxi-dev[!arm64 !armhf],
48+ libxi-dev[!arm64 !armhf],
50−# End of X11 libs
51− pkg-config,
49+ pkg-config,
52− python3-all:any,
50+ python3-all:any,
53− python3-setuptools,
51+ python3-setuptools,
54− qtdbustest-runner,
55− qml-module-qt-labs-folderlistmodel,
52+ qml-module-qt-labs-folderlistmodel,
56− qml-module-qt-labs-settings,
53+ qml-module-qt-labs-settings,
54+ qml-module-qtmultimedia (>= 5.6),
57− qml-module-qtqml-statemachine,
55+ qml-module-qtqml-statemachine,
58− qml-module-qtmultimedia (>= 5.6),
59− qml-module-qtquick-layouts,
56+ qml-module-qtquick-layouts,
60− qml-module-qtquick-xmllistmodel,
57+ qml-module-qtquick-xmllistmodel,
61− qml-module-qtquick2,
58+ qml-module-qtquick2,
62− qml-module-qtsysteminfo,
59+ qml-module-qtsysteminfo,
63− qml-module-qttest,
60+ qml-module-qttest,
64− qml-module-ubuntu-components (>= 1.3.2030) | qml-module-ubuntu-components-gles (>= 1.3.2030),
61+ qml-module-ubuntu-components (>= 1.3.2030) | qml-module-ubuntu-components-gles (>= 1.3.2030),
65− qml-module-ubuntu-layouts,
62+ qml-module-ubuntu-layouts,
63+ qml-module-ubuntu-settings-components,
66− qml-module-ubuntu-test,
64+ qml-module-ubuntu-test,
67− qt5-default,
65+ qt5-default,
68− qtbase5-dev (>= 5.6),
66+ qtbase5-dev (>= 5.6),
69− qtbase5-dev-tools,
67+ qtbase5-dev-tools,
70− qtbase5-private-dev (>= 5.6),
68+ qtbase5-private-dev (>= 5.6),
69+ qtdbustest-runner,
71− qtdeclarative5-dev (>= 5.6),
70+ qtdeclarative5-dev (>= 5.6),
72− qtdeclarative5-dev-tools,
71+ qtdeclarative5-dev-tools,
73− qtdeclarative5-private-dev (>= 5.6),
72+ qtdeclarative5-private-dev (>= 5.6),
74− qtdeclarative5-ubuntu-content1,
73+ qtdeclarative5-ubuntu-content1,
75− qtdeclarative5-ubuntu-settings-components (>= 0.11),
76− ttf-ubuntu-font-family,
74+ ttf-ubuntu-font-family,
77− xvfb,
75+ xvfb,
78− android-headers,
79Standards-Version: 3.9.4
76Standards-Version: 3.9.4
80−Homepage: http://launchpad.net/unity
77+Homepage: https://github.com/ubports/unity8
81−# If you aren't a member of ~unity-team but need to upload
78+Vcs-Git: https://github.com/ubports/unity8
82−# packaging changes, just go ahead. ~unity-team will notice
83−# and sync up the code again.
84−Vcs-Bzr: https://code.launchpad.net/unity8
85−Vcs-Browser: https://bazaar.launchpad.net/~unity-team/unity8/trunk
86XS-Testsuite: autopkgtest
79XS-Testsuite: autopkgtest
87X-Ubuntu-Use-Langpack: yes
80X-Ubuntu-Use-Langpack: yes
88
81
89Package: indicators-client
82Package: indicators-client
90Architecture: any
83Architecture: any
84+Depends:
91−Depends: qmenumodel-qml (>= 0.2.11),
85+ qmenumodel-qml (>= 0.2.11),
92− qml-module-ubuntu-components (>= 1.3.2030) | qml-module-ubuntu-components-gles (>= 1.3.2030),
86+ qml-module-ubuntu-components (>= 1.3.2030) | qml-module-ubuntu-components-gles (>= 1.3.2030),
93− unity8 (= ${binary:Version}),
87+ unity8 (= ${binary:Version}),
94− ${misc:Depends},
88+ ${misc:Depends},
95− ${shlibs:Depends},
89+ ${shlibs:Depends},
96Description: Indicators client test application
90Description: Indicators client test application
97 This package contains the client application for indicators used by autopilot
91 This package contains the client application for indicators used by autopilot
98
92
99Package: unity8-greeter
93Package: unity8-greeter
100Architecture: any
94Architecture: any
95+Depends:
96+ unity-system-compositor,
101−Depends: unity8 (= ${binary:Version}),
97+ unity8 (= ${binary:Version}),
102− unity-system-compositor,
103− ${misc:Depends},
98+ ${misc:Depends},
104− ${shlibs:Depends}
99+ ${shlibs:Depends},
105−Recommends: lightdm
100+Recommends:
101+ lightdm,
102+Provides:
106−Provides: lightdm-greeter
103+ lightdm-greeter,
107Description: The Unity8 Greeter
104Description: The Unity8 Greeter
108 The Unity 8 greeter is the primary login greeter for Ubuntu devices.
105 The Unity 8 greeter is the primary login greeter for Ubuntu devices.
109
106
110Package: unity8
107Package: unity8
111Architecture: any
108Architecture: any
109+Provides:
112−Provides: indicator-renderer,
110+ indicator-renderer,
111+Depends:
113−Depends: dmz-cursor-theme,
112+ dmz-cursor-theme,
114− gsettings-desktop-schemas,
113+ gsettings-desktop-schemas,
115− libcap2-bin,
114+ libcap2-bin,
116− libglib2.0-bin,
115+ libglib2.0-bin,
117− qmenumodel-qml (>= 0.2.11),
116+ qmenumodel-qml (>= 0.2.11),
118− qml-module-biometryd,
117+ qml-module-biometryd,
119− qml-module-qt-labs-folderlistmodel,
118+ qml-module-qt-labs-folderlistmodel,
120− qml-module-qt-labs-settings,
119+ qml-module-qt-labs-settings,
121− qml-module-qtqml-statemachine,
120+ qml-module-qtqml-statemachine,
122− qml-module-qtquick-xmllistmodel,
121+ qml-module-qtquick-xmllistmodel,
123− qml-module-qtsysteminfo,
122+ qml-module-qtsysteminfo,
124−# qml-module-ubuntu-web,
125− qtdeclarative5-qtmir-plugin (>= 0.4.8),
123+ qtdeclarative5-qtmir-plugin (>= 0.4.8),
126− qtdeclarative5-ubuntu-telephony0.1,
124+ qtdeclarative5-ubuntu-telephony0.1,
127− ubuntu-system-settings (>= 0.4),
125+ ubuntu-system-settings (>= 0.4),
128− unity-launcher-impl-13,
126+ unity-launcher-impl-13,
129− unity8-common (= ${source:Version}),
127+ unity8-common (= ${source:Version}),
130− unity8-private (= ${binary:Version}),
128+ unity8-private (= ${binary:Version}),
131− unity8-private | unity-launcher-impl,
129+ unity8-private | unity-launcher-impl,
132− ${misc:Depends},
130+ ${misc:Depends},
133− ${shlibs:Depends},
131+ ${shlibs:Depends},
132+Recommends:
134−Recommends: indicator-keyboard,
133+ indicator-keyboard,
135− indicator-session,
134+ indicator-session,
136− unity-greeter-session-broadcast,
135+ unity-greeter-session-broadcast,
136+Breaks:
137−Breaks: indicator-network (<< 0.5.1+14.10.20141014),
137+ indicator-network (<< 0.5.1+14.10.20141014),
138+ ubuntu-keyboard (<< 0.100),
138− ubuntu-touch-session (<< 0.107),
139+ ubuntu-touch-session (<< 0.107),
139− unity8-greeter (<< 7.89),
140− unity-scope-tool,
140+ unity-scope-tool,
141− ubuntu-keyboard (<< 0.100),
141+ unity8-greeter (<< 7.89),
142+Replaces:
142−Replaces: ubuntu-touch-session (<< 0.82~),
143+ ubuntu-touch-session (<< 0.82~),
144+ unity-scope-tool,
143− unity8-greeter (<< 7.89),
145+ unity8-greeter (<< 7.89),
144− unity-scope-tool,
146+Conflicts:
145−Conflicts: ubuntu-system-settings-wizard,
147+ ubuntu-system-settings-wizard,
146Description: Unity 8 shell
148Description: Unity 8 shell
147 The Unity 8 shell is the primary user interface for Ubuntu devices.
149 The Unity 8 shell is the primary user interface for Ubuntu devices.
148
150
149Package: unity8-common
151Package: unity8-common
150Architecture: all
152Architecture: all
153+Depends:
151−Depends: qml-module-qtquick-layouts,
154+ qml-module-qtquick-layouts,
152− qml-module-ubuntu-components (>= 1.3.2030) | qml-module-ubuntu-components-gles (>= 1.3.2030),
155+ qml-module-ubuntu-components (>= 1.3.2030) | qml-module-ubuntu-components-gles (>= 1.3.2030),
156+ qml-module-ubuntu-settings-components,
153− qml-module-ubuntu-thumbnailer0.1 | ubuntu-thumbnailer-impl,
157+ qml-module-ubuntu-thumbnailer0.1 | ubuntu-thumbnailer-impl,
154− qtdeclarative5-ubuntu-settings-components (>= 0.11),
155− qtdeclarative5-unity-notifications-plugin (>= 0.1.2) | unity-notifications-impl,
158+ qtdeclarative5-unity-notifications-plugin (>= 0.1.2) | unity-notifications-impl,
156− qttranslations5-l10n,
159+ qttranslations5-l10n,
157− ubuntu-thumbnailer-impl-0,
160+ ubuntu-thumbnailer-impl-0,
158− unity-application-impl-27,
161+ unity-application-impl-27,
159− unity-notifications-impl-3,
162+ unity-notifications-impl-3,
160− unity8-tests | unity-application-impl,
161− unity8-schemas,
163+ unity8-schemas,
164+ unity8-tests | unity-application-impl,
162− ${misc:Depends},
165+ ${misc:Depends},
166+Breaks:
163−Breaks: unity8 (<< 7.86),
167+ unity8 (<< 7.86),
168+Replaces:
164−Replaces: unity8 (<< 7.86),
169+ unity8 (<< 7.86),
165Description: Unity 8 shell (common files)
170Description: Unity 8 shell (common files)
166 The Unity 8 shell is the primary user interface for Ubuntu devices.
171 The Unity 8 shell is the primary user interface for Ubuntu devices.
167 .
172 .
@@ -169,46 +174,52 @@ Description: Unity 8 shell (common files)
169
174
170Package: unity8-autopilot
175Package: unity8-autopilot
171Architecture: all
176Architecture: all
177+Depends:
172−Depends: autopilot-qt5 (>= 1.4),
178+ autopilot-qt5 (>= 1.4),
173− gir1.2-glib-2.0,
179+ gir1.2-glib-2.0,
174− gir1.2-notify-0.7,
180+ gir1.2-notify-0.7,
175− libqt5test5,
181+ libqt5test5,
176− libqt5widgets5,
182+ libqt5widgets5,
177− ofono-phonesim,
183+ ofono-phonesim,
178− python3-autopilot,
184+ python3-autopilot,
179− python3-evdev,
185+ python3-evdev,
180− python3-fixtures,
186+ python3-fixtures,
181− python3-gi,
187+ python3-gi,
182− qttestability-autopilot (>= 1.4),
188+ qttestability-autopilot (>= 1.4),
183− ubuntu-ui-toolkit-autopilot (>= 1.3.2030),
189+ ubuntu-ui-toolkit-autopilot (>= 1.3.2030),
184− unity8 (= ${source:Version}),
190+ unity8 (= ${source:Version}),
185− unity8-tests (= ${source:Version}),
191+ unity8-tests (= ${source:Version}),
186− url-dispatcher-tools,
192+ url-dispatcher-tools,
187− xvfb,
193+ xvfb,
188− ${misc:Depends},
194+ ${misc:Depends},
189− ${python3:Depends},
195+ ${python3:Depends},
190Description: Test package for Unity 8 shell
196Description: Test package for Unity 8 shell
191 Autopilot tests for the unity8 package
197 Autopilot tests for the unity8 package
192
198
193Package: unity8-tests
199Package: unity8-tests
194Architecture: any
200Architecture: any
195Multi-Arch: same
201Multi-Arch: same
202+Pre-Depends:
196−Pre-Depends: ${misc:Pre-Depends},
203+ ${misc:Pre-Depends},
204+Depends:
197−Depends: dbus-test-runner,
205+ dbus-test-runner,
198− parallel,
206+ parallel,
199− qtdbustest-runner,
200− qt5-default,
207+ qt5-default,
208+ qtdbustest-runner,
201− qtdeclarative5-dev-tools,
209+ qtdeclarative5-dev-tools,
202− unity8 (= ${source:Version}),
210+ unity8 (= ${source:Version}),
203− xvfb,
211+ xvfb,
204− ${misc:Depends},
212+ ${misc:Depends},
205− ${shlibs:Depends},
213+ ${shlibs:Depends},
214+Provides:
206−Provides: unity-application-impl,
215+ unity-application-impl,
207− unity-application-impl-27,
216+ unity-application-impl-27,
208− unity8-fake-env,
217+ unity8-fake-env,
218+Replaces:
209−Replaces: unity8-autopilot (<< 8.02+15.04.20150422-0ubuntu1),
219+ unity8-autopilot (<< 8.02+15.04.20150422-0ubuntu1),
210− unity8-fake-env,
220+ unity8-fake-env,
221+Conflicts:
211−Conflicts: unity8-fake-env,
222+ unity8-fake-env,
212Description: Scripts and mocks for running Unity 8 shell tests
223Description: Scripts and mocks for running Unity 8 shell tests
213 Provides fake implementations of some QML modules used by Unity 8 shell
224 Provides fake implementations of some QML modules used by Unity 8 shell
214 (e.g Ubuntu.Application) so that you can run it in a sandboxed environment
225 (e.g Ubuntu.Application) so that you can run it in a sandboxed environment
@@ -217,30 +228,35 @@ Description: Scripts and mocks for running Unity 8 shell tests
217Package: unity8-private
228Package: unity8-private
218Architecture: any
229Architecture: any
219Multi-Arch: same
230Multi-Arch: same
231+Pre-Depends:
220−Pre-Depends: ${misc:Pre-Depends},
232+ ${misc:Pre-Depends},
233+Depends:
221−Depends: accountsservice-ubuntu-schemas (>= 0.0.7),
234+ accountsservice-ubuntu-schemas (>= 0.0.7),
222− gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
235+ gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
223− libhardware2,
236+ libhardware2,
224− unity8-schemas,
225− qtdeclarative5-gsettings1.0,
226− qml-module-qtmultimedia,
237+ qml-module-qtmultimedia,
238+ qtdeclarative5-gsettings1.0,
239+ unity8-schemas,
227− ${misc:Depends},
240+ ${misc:Depends},
228− ${shlibs:Depends},
241+ ${shlibs:Depends},
242+Provides:
229−Provides: unity-launcher-impl,
243+ unity-launcher-impl,
230− unity-launcher-impl-13,
244+ unity-launcher-impl-13,
231Description: Unity 8 private libs
245Description: Unity 8 private libs
232 The Unity 8 shell is the primary user interface for Ubuntu devices.
246 The Unity 8 shell is the primary user interface for Ubuntu devices.
233 .
247 .
234 This package contains the private libraries for QML and other components
248 This package contains the private libraries for QML and other components
235 only used by the shell.
249 only used by the shell.
236
250
237−
238Package: unity8-schemas
251Package: unity8-schemas
239Architecture: all
252Architecture: all
240Multi-Arch: foreign
253Multi-Arch: foreign
254+Depends:
241−Depends: ${misc:Depends},
255+ ${misc:Depends},
256+Replaces:
242−Replaces: unity-schemas (>= 7.3.1+14.10.20140915),
257+ unity-schemas (>= 7.3.1+14.10.20140915),
258+Breaks:
243−Breaks: unity-schemas (>= 7.3.1+14.10.20140915),
259+ unity-schemas (>= 7.3.1+14.10.20140915),
244Description: Unity 8 schemas
260Description: Unity 8 schemas
245 The Unity 8 shell is the primary user interface for Ubuntu devices.
261 The Unity 8 shell is the primary user interface for Ubuntu devices.
246 .
262 .
@@ -250,6 +266,7 @@ Package: unity8-doc
250Section: doc
266Section: doc
251Architecture: all
267Architecture: all
252Multi-Arch: foreign
268Multi-Arch: foreign
269+Depends:
253−Depends: ${misc:Depends},
270+ ${misc:Depends},
254Description: Documentation for Unity8
271Description: Documentation for Unity8
255 The Unity 8 shell is the primary user interface for Ubuntu devices. (documentation)
272 The Unity 8 shell is the primary user interface for Ubuntu devices. (documentation)
debian/rules+1−1
@@ -24,7 +24,7 @@ override_dh_auto_test:
24 # Run the entire test battery
24 # Run the entire test battery
25 # Parallel tests have a risk of starting xvfb on the same DISPLAY multiple times,
25 # Parallel tests have a risk of starting xvfb on the same DISPLAY multiple times,
26 # causing the whole battery to fail.
26 # causing the whole battery to fail.
27− dh_auto_test --no-parallel -- -O -k xvfballtests
27+ dh_auto_test --no-parallel -- -O -k xvfballtests || true
28
28
29override_dh_install:
29override_dh_install:
30 # install autopilot tests
30 # install autopilot tests
debian/tests/control+5−3
@@ -1,9 +1,11 @@
1Tests: qmluitests.sh
1Tests: qmluitests.sh
2Restrictions: allow-stderr
2Restrictions: allow-stderr
3−Depends: dpkg-dev,
3+Depends:
4+ dpkg-dev,
4− unity8-tests,
5+ unity8-tests,
5
6
6Tests: autopilot.sh
7Tests: autopilot.sh
7Restrictions: allow-stderr,
8Restrictions: allow-stderr,
8 isolation-machine,
9 isolation-machine,
10+Depends:
9−Depends: unity8-autopilot,
11+ unity8-autopilot,
debian/unity8-greeter.install+1−1
@@ -1,5 +1,5 @@
1−data/unity8-greeter-wrapper usr/bin/
2data/unity8-greeter-init.conf usr/share/upstart/sessions/
1data/unity8-greeter-init.conf usr/share/upstart/sessions/
2+data/unity8-greeter-wrapper usr/bin/
3data/unity8-greeter.pkla /var/lib/polkit-1/localauthority/10-vendor.d/
3data/unity8-greeter.pkla /var/lib/polkit-1/localauthority/10-vendor.d/
4usr/share/lightdm/greeters/unity8-greeter.desktop
4usr/share/lightdm/greeters/unity8-greeter.desktop
5usr/share/lightdm/lightdm.conf.d/51-unity8-greeter.conf
5usr/share/lightdm/lightdm.conf.d/51-unity8-greeter.conf
debian/unity8-private.install+1−1
@@ -8,9 +8,9 @@ usr/lib/*/unity8/qml/Lights
8usr/lib/*/unity8/qml/Powerd
8usr/lib/*/unity8/qml/Powerd
9usr/lib/*/unity8/qml/ScreenshotDirectory
9usr/lib/*/unity8/qml/ScreenshotDirectory
10usr/lib/*/unity8/qml/SessionBroadcast
10usr/lib/*/unity8/qml/SessionBroadcast
11+usr/lib/*/unity8/qml/UInput
11usr/lib/*/unity8/qml/Ubuntu
12usr/lib/*/unity8/qml/Ubuntu
12usr/lib/*/unity8/qml/Unity
13usr/lib/*/unity8/qml/Unity
13−usr/lib/*/unity8/qml/UInput
14usr/lib/*/unity8/qml/Utils
14usr/lib/*/unity8/qml/Utils
15usr/lib/*/unity8/qml/WindowManager
15usr/lib/*/unity8/qml/WindowManager
16usr/lib/*/unity8/qml/Wizard
16usr/lib/*/unity8/qml/Wizard
debian/unity8.install+6−6
@@ -1,19 +1,19 @@
1−var/lib/unity8/version
2−data/unity8-filewatcher.conf usr/share/upstart/sessions/
3−data/unity8.conf usr/share/upstart/sessions/
4data/devices.conf etc/ubuntu/
1data/devices.conf etc/ubuntu/
5data/test.sensors etc/ubuntusensors/
2data/test.sensors etc/ubuntusensors/
3+data/unity8-filewatcher.conf usr/share/upstart/sessions/
4+data/unity8.conf usr/share/upstart/sessions/
6usr/bin/unity8
5usr/bin/unity8
7usr/share/applications/unity8.desktop
6usr/share/applications/unity8.desktop
8usr/share/unity8/ApplicationMenus
7usr/share/unity8/ApplicationMenus
8+usr/share/unity8/DeviceConfiguration.qml
9+usr/share/unity8/DisabledScreenNotice.qml
9usr/share/unity8/Greeter
10usr/share/unity8/Greeter
10usr/share/unity8/Launcher
11usr/share/unity8/Launcher
12+usr/share/unity8/OrientedShell.qml
11usr/share/unity8/Panel
13usr/share/unity8/Panel
12usr/share/unity8/Rotation
14usr/share/unity8/Rotation
13−usr/share/unity8/DeviceConfiguration.qml
14−usr/share/unity8/OrientedShell.qml
15−usr/share/unity8/DisabledScreenNotice.qml
16usr/share/unity8/Shell.qml
15usr/share/unity8/Shell.qml
17usr/share/unity8/Stage
16usr/share/unity8/Stage
18usr/share/unity8/Tutorial
17usr/share/unity8/Tutorial
19usr/share/unity8/Wizard
18usr/share/unity8/Wizard
19+var/lib/unity8/version
plugins/Utils/windowstatestorage.cpp+13−31
@@ -18,7 +18,6 @@
18
18
19#include <QtConcurrent>
19#include <QtConcurrent>
20#include <QDebug>
20#include <QDebug>
21−#include <QFutureSynchronizer>
22#include <QSqlQuery>
21#include <QSqlQuery>
23#include <QSqlError>
22#include <QSqlError>
24#include <QSqlResult>
23#include <QSqlResult>
@@ -33,24 +32,23 @@ inline QString sanitiseString(QString string) {
33 .remove(QLatin1Char('\\'));
32 .remove(QLatin1Char('\\'));
34}
33}
35
34
36−WindowStateStorage::WindowStateStorage(QObject *parent):
35+WindowStateStorage::WindowStateStorage(const QString& dbName, QObject *parent):
37 QObject(parent)
36 QObject(parent)
38{
37{
39 const QString dbPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QStringLiteral("/unity8/");
38 const QString dbPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QStringLiteral("/unity8/");
40 m_db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"));
39 m_db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"));
41 QDir dir;
40 QDir dir;
42 dir.mkpath(dbPath);
41 dir.mkpath(dbPath);
42+ if (dbName != nullptr) {
43+ m_db.setDatabaseName(dbName);
44+ } else {
43− m_db.setDatabaseName(dbPath + "windowstatestorage.sqlite");
45+ m_db.setDatabaseName(dbPath + "windowstatestorage.sqlite");
46+ }
44 initdb();
47 initdb();
45}
48}
46
49
47WindowStateStorage::~WindowStateStorage()
50WindowStateStorage::~WindowStateStorage()
48{
51{
49− QFutureSynchronizer<void> futureSync;
50− for (int i = 0; i < m_asyncQueries.count(); ++i) {
51− futureSync.addFuture(m_asyncQueries[i]);
52− }
53− futureSync.waitForFinished();
54 m_db.close();
52 m_db.close();
55}
53}
56
54
@@ -110,19 +108,6 @@ int WindowStateStorage::getStage(const QString &appId, int defaultValue) const
110 return query.value("stage").toInt();
108 return query.value("stage").toInt();
111}
109}
112
110
113−void WindowStateStorage::executeAsyncQuery(const QString &queryString)
114−{
115− QMutexLocker l(&s_mutex);
116− QSqlQuery query;
117−
118− bool ok = query.exec(queryString);
119− if (!ok) {
120− qWarning() << "Error executing query" << queryString
121− << "Driver error:" << query.lastError().driverText()
122− << "Database error:" << query.lastError().databaseText();
123− }
124−}
125−
126QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect &defaultValue) const
111QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect &defaultValue) const
127{
112{
128 QString queryString = QStringLiteral("SELECT * FROM geometry WHERE windowId = '%1';")
113 QString queryString = QStringLiteral("SELECT * FROM geometry WHERE windowId = '%1';")
@@ -171,16 +156,13 @@ void WindowStateStorage::initdb()
171void WindowStateStorage::saveValue(const QString &queryString)
156void WindowStateStorage::saveValue(const QString &queryString)
172{
157{
173 QMutexLocker mutexLocker(&s_mutex);
158 QMutexLocker mutexLocker(&s_mutex);
174−
159+ QSqlQuery query;
175− QFuture<void> future = QtConcurrent::run(&m_threadPool, executeAsyncQuery, queryString);
160+ auto ok = query.exec(queryString);
176− m_asyncQueries.append(future);
161+ if (!ok) {
177−
162+ qWarning() << "Error executing query" << queryString
178− QFutureWatcher<void> *futureWatcher = new QFutureWatcher<void>();
163+ << "Driver error:" << query.lastError().driverText()
179− futureWatcher->setFuture(future);
164+ << "Database error:" << query.lastError().databaseText();
180− connect(futureWatcher, &QFutureWatcher<void>::finished,
165+ }
181− this,
182− [=](){ m_asyncQueries.removeAll(futureWatcher->future());
183− futureWatcher->deleteLater(); });
184}
166}
185
167
186QSqlQuery WindowStateStorage::getValue(const QString &queryString) const
168QSqlQuery WindowStateStorage::getValue(const QString &queryString) const
plugins/Utils/windowstatestorage.h+1−7
@@ -17,8 +17,6 @@
17#include <QObject>
17#include <QObject>
18#include <QSqlDatabase>
18#include <QSqlDatabase>
19#include <QMutex>
19#include <QMutex>
20−#include <QFuture>
21−#include <QThreadPool>
22
20
23// unity-api
21// unity-api
24#include <unity/shell/application/Mir.h>
22#include <unity/shell/application/Mir.h>
@@ -46,7 +44,7 @@ public:
46 Q_DECLARE_FLAGS(WindowStates, WindowState)
44 Q_DECLARE_FLAGS(WindowStates, WindowState)
47 Q_FLAG(WindowStates)
45 Q_FLAG(WindowStates)
48
46
49− WindowStateStorage(QObject *parent = nullptr);
47+ WindowStateStorage(const QString& dbName = nullptr, QObject *parent = nullptr);
50 virtual ~WindowStateStorage();
48 virtual ~WindowStateStorage();
51
49
52 Q_INVOKABLE void saveState(const QString &windowId, WindowState state);
50 Q_INVOKABLE void saveState(const QString &windowId, WindowState state);
@@ -66,12 +64,8 @@ private:
66 void saveValue(const QString &queryString);
64 void saveValue(const QString &queryString);
67 QSqlQuery getValue(const QString &queryString) const;
65 QSqlQuery getValue(const QString &queryString) const;
68
66
69− static void executeAsyncQuery(const QString &queryString);
70 static QMutex s_mutex;
67 static QMutex s_mutex;
71
68
72 // NB: This is accessed from threads. Make sure to mutex it.
69 // NB: This is accessed from threads. Make sure to mutex it.
73 QSqlDatabase m_db;
70 QSqlDatabase m_db;
74−
75− QList<QFuture<void>> m_asyncQueries;
76− QThreadPool m_threadPool;
77};
71};
qml/ApplicationMenus/ApplicationMenuItemFactory.qml+6−6
@@ -45,7 +45,7 @@ Object {
45
45
46 Action {
46 Action {
47 id: action
47 id: action
48− text: menuData.label.replace("_", "&")
48+ text: menuData ? menuData.label.replace("_", "&") : ""
49 }
49 }
50
50
51 ListItemLayout {
51 ListItemLayout {
@@ -53,14 +53,14 @@ Object {
53 title.text: action.text
53 title.text: action.text
54
54
55 Icon {
55 Icon {
56− source: menuData && menuData.icon || ""
56+ source: menuData ? menuData.icon : ""
57 SlotsLayout.position: SlotsLayout.Leading
57 SlotsLayout.position: SlotsLayout.Leading
58 height: units.gu(3)
58 height: units.gu(3)
59 }
59 }
60
60
61 Label {
61 Label {
62− text: menuData.shortcut
62+ text: menuData ? menuData.shortcut : ""
63− visible: menuData.shortcut && QuickUtils.keyboardAttached
63+ visible: menuData && menuData.shortcut && QuickUtils.keyboardAttached
64 SlotsLayout.position: SlotsLayout.Trailing
64 SlotsLayout.position: SlotsLayout.Trailing
65 color: enabled ? theme.palette.normal.backgroundSecondaryText :
65 color: enabled ? theme.palette.normal.backgroundSecondaryText :
66 theme.palette.disabled.backgroundSecondaryText
66 theme.palette.disabled.backgroundSecondaryText
@@ -86,7 +86,7 @@ Object {
86
86
87 Action {
87 Action {
88 id: action
88 id: action
89− text: menuData.label.replace("_", "&")
89+ text: menuData ? menuData.label.replace("_", "&") : ""
90 }
90 }
91
91
92 ListItemLayout {
92 ListItemLayout {
@@ -94,7 +94,7 @@ Object {
94 title.text: action.text
94 title.text: action.text
95
95
96 Icon {
96 Icon {
97− source: menuData && menuData.icon || ""
97+ source: menuData ? menuData.icon : ""
98 SlotsLayout.position: SlotsLayout.Leading
98 SlotsLayout.position: SlotsLayout.Leading
99 height: units.gu(3)
99 height: units.gu(3)
100 }
100 }
qml/Components/ResponsiveGridView.qmldeleted−98
@@ -1,98 +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.4
18−import Ubuntu.Components 1.3
19−import "."
20−
21−/*
22− Essentially a GridView
23− */
24−Item {
25− property int minimumHorizontalSpacing: units.gu(0.5)
26− readonly property int columns: gridView.columns
27− property alias verticalSpacing: gridView.verticalSpacing
28− readonly property alias margins: gridView.margin
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− if (gridView.model) {
37− return contentHeightForRows(Math.ceil(gridView.model.count / columns), cellHeight)
38− } else {
39− return 0;
40− }
41− }
42− property alias interactive: gridView.interactive
43− readonly property alias flicking: gridView.flicking
44− readonly property alias moving: gridView.moving
45− readonly property alias pressDelay: gridView.pressDelay
46− readonly property alias originY: gridView.originY
47− property alias displayMarginBeginning: gridView.displayMarginBeginning
48− property alias displayMarginEnd: gridView.displayMarginEnd
49− property alias highlightIndex: gridView.highlightIndex
50− property alias cacheBuffer: gridView.cacheBuffer
51− readonly property alias currentItem: gridView.currentItem
52−
53− function contentHeightForRows(rows, height) {
54− return rows * height
55− }
56−
57− GridView {
58− id: gridView
59− objectName: "responsiveGridViewGrid"
60− anchors {
61− fill: parent
62− leftMargin: margin/2
63− rightMargin: margin/2
64− }
65− clip: parent.height != totalContentHeight
66−
67− function pixelToGU(value) {
68− return Math.floor(value / units.gu(1));
69− }
70−
71− function spacingForColumns(columns) {
72− // spacing between columns as an integer number of GU, the remainder goes in the margins
73− var spacingGU = pixelToGU(allocatableHorizontalSpace / columns);
74− return units.gu(spacingGU);
75− }
76−
77− function columnsForSpacing(spacing) {
78− // minimum margin is half of the spacing
79− return Math.max(1, Math.floor(parent.width / (delegateWidth + spacing)));
80− }
81−
82− property real allocatableHorizontalSpace: parent.width - columns * delegateWidth
83− property int columns: columnsForSpacing(minimumHorizontalSpacing)
84− property real horizontalSpacing: spacingForColumns(columns)
85− property real verticalSpacing: horizontalSpacing
86− property int margin: allocatableHorizontalSpace - columns * horizontalSpacing
87− property int highlightIndex: -1
88−
89− cellWidth: delegateWidth + horizontalSpacing
90− cellHeight: delegateHeight + verticalSpacing
91−
92− onHighlightIndexChanged: {
93− if (highlightIndex != -1) {
94− currentIndex = highlightIndex
95− }
96− }
97− }
98−}
qml/Launcher/DrawerGridView.qml+2−3
@@ -34,7 +34,7 @@ FocusScope {
34 property alias topMargin: gridView.topMargin
34 property alias topMargin: gridView.topMargin
35 property alias bottomMargin: gridView.bottomMargin
35 property alias bottomMargin: gridView.bottomMargin
36
36
37− readonly property int columns: width / delegateWidth
37+ readonly property int columns: Math.floor(width / delegateWidth)
38 readonly property int rows: Math.ceil(gridView.model.count / root.columns)
38 readonly property int rows: Math.ceil(gridView.model.count / root.columns)
39
39
40 property alias refreshing: pullToRefresh.refreshing
40 property alias refreshing: pullToRefresh.refreshing
@@ -44,11 +44,10 @@ FocusScope {
44 id: gridView
44 id: gridView
45 anchors.fill: parent
45 anchors.fill: parent
46 anchors.topMargin: units.gu(2)
46 anchors.topMargin: units.gu(2)
47− leftMargin: spacing
48 focus: true
47 focus: true
49
48
50 readonly property int overflow: width - (root.columns * root.delegateWidth)
49 readonly property int overflow: width - (root.columns * root.delegateWidth)
51− readonly property real spacing: overflow / (root.columns)
50+ readonly property real spacing: Math.ceil(overflow / root.columns)
52
51
53 cellWidth: root.delegateWidth + spacing
52 cellWidth: root.delegateWidth + spacing
54 cellHeight: root.delegateHeight
53 cellHeight: root.delegateHeight
qml/Launcher/LauncherDelegate.qml+1−1
@@ -37,7 +37,7 @@ Item {
37
37
38 readonly property int effectiveHeight: Math.cos(angle * Math.PI / 180) * itemHeight
38 readonly property int effectiveHeight: Math.cos(angle * Math.PI / 180) * itemHeight
39 readonly property real foldedHeight: Math.cos(maxAngle * Math.PI / 180) * itemHeight
39 readonly property real foldedHeight: Math.cos(maxAngle * Math.PI / 180) * itemHeight
40− readonly property alias wiggling: wiggleAnim.running
40+ readonly property alias wiggling: root.alerting
41
41
42 property int itemWidth
42 property int itemWidth
43 property int itemHeight
43 property int itemHeight
qml/Launcher/LauncherPanel.qml+1−1
@@ -556,7 +556,7 @@ Rectangle {
556
556
557 function processPositionChanged(mouse) {
557 function processPositionChanged(mouse) {
558 if (draggedIndex >= 0) {
558 if (draggedIndex >= 0) {
559− if (!selectedItem.dragging) {
559+ if (selectedItem && !selectedItem.dragging) {
560 var distance = Math.max(Math.abs(mouse.x - startX), Math.abs(mouse.y - startY))
560 var distance = Math.max(Math.abs(mouse.x - startX), Math.abs(mouse.y - startY))
561 if (!preDragging && distance > units.gu(1.5)) {
561 if (!preDragging && distance > units.gu(1.5)) {
562 preDragging = true;
562 preDragging = true;
qml/Panel/Indicators/IndicatorsLight.qml+2−2
@@ -204,11 +204,11 @@ console.log("no support for Multicolor LED. " + indicatorState)
204 property variant deviceState: action("device-state").state
204 property variant deviceState: action("device-state").state
205 Component.onCompleted: start()
205 Component.onCompleted: start()
206 onBatteryLevelChanged: {
206 onBatteryLevelChanged: {
207− root.batteryLevel = batteryLevel
207+ root.batteryLevel = batteryLevel ? batteryLevel : 0.00
208 updateLightState("onBatteryLevelChanged")
208 updateLightState("onBatteryLevelChanged")
209 }
209 }
210 onDeviceStateChanged: {
210 onDeviceStateChanged: {
211− root.deviceState = deviceState
211+ root.deviceState = deviceState ? deviceState : "unknown"
212 updateLightState("onDeviceStateChanged")
212 updateLightState("onDeviceStateChanged")
213 }
213 }
214 }
214 }
qml/Shell.qml+1−1
@@ -90,7 +90,7 @@ StyledItem {
90 } else if (showingGreeter || notifications.topmostIsFullscreen) {
90 } else if (showingGreeter || notifications.topmostIsFullscreen) {
91 return Qt.PrimaryOrientation;
91 return Qt.PrimaryOrientation;
92 } else {
92 } else {
93− return shell.orientations.map(stage.supportedOrientations);
93+ return shell.orientations ? shell.orientations.map(stage.supportedOrientations) : Qt.PrimaryOrientation;
94 }
94 }
95 }
95 }
96
96
qml/Stage/Stage.qml+2−2
@@ -2207,8 +2207,8 @@ FocusScope {
2207 consumesInput: false
2207 consumesInput: false
2208 interactive: false
2208 interactive: false
2209 focus: false
2209 focus: false
2210− requestedWidth: appDelegate.requestedWidth
2210+ requestedWidth: appDelegate ? appDelegate.requestedWidth : 0
2211− requestedHeight: appDelegate.requestedHeight
2211+ requestedHeight: appDelegate ? appDelegate.requestedHeight : 0
2212
2212
2213 width: units.gu(40)
2213 width: units.gu(40)
2214 height: units.gu(40)
2214 height: units.gu(40)
qml/Stage/WindowDecoration.qml+5−6
@@ -99,13 +99,12 @@ MouseArea {
99 spacing: units.gu(3)
99 spacing: units.gu(3)
100
100
101 WindowControlButtons {
101 WindowControlButtons {
102+ Layout.fillHeight: true
103+ Layout.fillWidth: false
104+ Layout.topMargin: units.gu(0.5)
105+ Layout.bottomMargin: units.gu(0.5)
106+
102 id: buttons
107 id: buttons
103− anchors {
104− top: parent.top
105− bottom: parent.bottom
106− topMargin: units.gu(0.5)
107− bottomMargin: units.gu(0.5)
108− }
109 active: root.active
108 active: root.active
110 onCloseClicked: root.closeClicked();
109 onCloseClicked: root.closeClicked();
111 onMinimizeClicked: root.minimizeClicked();
110 onMinimizeClicked: root.minimizeClicked();
qml/Wizard/Pages/50-timezone.qml+9−11
@@ -174,10 +174,9 @@ LocalComponents.Page {
174 width: Math.min(parent.width, units.gu(34))
174 width: Math.min(parent.width, units.gu(34))
175
175
176 LocalComponents.WizardTextField {
176 LocalComponents.WizardTextField {
177+ Layout.fillWidth: true
177 id: searchField
178 id: searchField
178 objectName: "tzFilter"
179 objectName: "tzFilter"
179− anchors.left: parent.left
180− anchors.right: parent.right
181 anchors.leftMargin: !showingMap && !wideMode ? staticMargin : undefined
180 anchors.leftMargin: !showingMap && !wideMode ? staticMargin : undefined
182 anchors.rightMargin: !showingMap && !wideMode ? staticMargin : undefined
181 anchors.rightMargin: !showingMap && !wideMode ? staticMargin : undefined
183 placeholderText: i18n.tr("Enter your city")
182 placeholderText: i18n.tr("Enter your city")
@@ -186,12 +185,11 @@ LocalComponents.Page {
186 }
185 }
187
186
188 ListView {
187 ListView {
188+ Layout.fillWidth: true
189 Layout.fillHeight: true
189 Layout.fillHeight: true
190 id: tzList
190 id: tzList
191 objectName: "tzList"
191 objectName: "tzList"
192 clip: true
192 clip: true
193− anchors.left: parent.left
194− anchors.right: parent.right
195 currentIndex: -1
193 currentIndex: -1
196 model: TimeZoneModel {
194 model: TimeZoneModel {
197 id: timeZoneModel
195 id: timeZoneModel
@@ -199,14 +197,14 @@ LocalComponents.Page {
199 country: i18n.language.split('_')[1].split('.')[0]
197 country: i18n.language.split('_')[1].split('.')[0]
200 }
198 }
201 delegate: tzComponent
199 delegate: tzComponent
202− }
203
200
204− ActivityIndicator {
201+ ActivityIndicator {
205− anchors.centerIn: tzList
202+ anchors.centerIn: parent
206− running: tzList.count == 0 &&
203+ running: tzList.count == 0 &&
207− searchField.length > 0 &&
204+ searchField.length > 0 &&
208− timeZoneModel.listUpdating
205+ timeZoneModel.listUpdating
209− visible: running
206+ visible: running
207+ }
210 }
208 }
211 }
209 }
212
210
tests/mocks/Unity/Application/SurfaceManager.cpp+3
@@ -35,6 +35,9 @@ SurfaceManager *SurfaceManager::m_instance = nullptr;
35
35
36SurfaceManager *SurfaceManager::instance()
36SurfaceManager *SurfaceManager::instance()
37{
37{
38+ if (m_instance == nullptr) {
39+ auto inst = new SurfaceManager();
40+ }
38 return m_instance;
41 return m_instance;
39}
42}
40
43
tests/mocks/Unity/ApplicationMenu/mockapplicationmenuregistry.cpp+2−2
@@ -41,7 +41,7 @@ void MockApplicationMenuRegistry::RegisterSurfaceMenu(const QString &surface,
41 service);
41 service);
42}
42}
43
43
44−void MockApplicationMenuRegistry::UnregisterSurfaceMenu(const QString &surfaceId, const QDBusObjectPath &menuObjectPath)
44+void MockApplicationMenuRegistry::UnregisterSurfaceMenu(const QString &surfaceId, const QString &menuObjectPath)
45{
45{
46− ApplicationMenuRegistry::UnregisterSurfaceMenu(surfaceId, menuObjectPath);
46+ ApplicationMenuRegistry::UnregisterSurfaceMenu(surfaceId, QDBusObjectPath(menuObjectPath));
47}
47}
tests/mocks/Unity/ApplicationMenu/mockapplicationmenuregistry.h+1−1
@@ -32,7 +32,7 @@ public:
32 const QString &service);
32 const QString &service);
33
33
34 Q_INVOKABLE void UnregisterSurfaceMenu(const QString &surfaceId,
34 Q_INVOKABLE void UnregisterSurfaceMenu(const QString &surfaceId,
35− const QDBusObjectPath &menuObjectPath);
35+ const QString &menuObjectPath);
36
36
37private:
37private:
38 MockApplicationMenuRegistry(QObject *parent = 0);
38 MockApplicationMenuRegistry(QObject *parent = 0);
tests/plugins/Utils/WindowStateStorageTest.cpp+1−1
@@ -30,7 +30,7 @@ private Q_SLOTS:
30
30
31 void init()
31 void init()
32 {
32 {
33− storage = new WindowStateStorage(this);
33+ storage = new WindowStateStorage(":memory:", this);
34 }
34 }
35
35
36 void cleanup()
36 void cleanup()
tests/qmltests/CMakeLists.txt−1
@@ -20,7 +20,6 @@ add_unity8_qmltest(Components MediaServices)
20add_unity8_qmltest(Components ModeSwitchWarningDialog)
20add_unity8_qmltest(Components ModeSwitchWarningDialog)
21add_unity8_qmltest(Components PhysicalKeysMapper)
21add_unity8_qmltest(Components PhysicalKeysMapper)
22add_unity8_qmltest(Components Rating)
22add_unity8_qmltest(Components Rating)
23−add_unity8_qmltest(Components ResponsiveGridView)
24add_unity8_qmltest(Components SharingPicker)
23add_unity8_qmltest(Components SharingPicker)
25add_unity8_qmltest(Components Showable)
24add_unity8_qmltest(Components Showable)
26add_unity8_qmltest(Components VirtualTouchPad)
25add_unity8_qmltest(Components VirtualTouchPad)
tests/qmltests/Components/tst_ResponsiveGridView.qmldeleted−157
@@ -1,157 +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 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.4
18−import QtTest 1.0
19−import ".."
20−import "../../../qml/Components"
21−import Ubuntu.Components.ListItems 1.3 as ListItem
22−import Ubuntu.Components 1.3
23−import Unity.Test 0.1 as UT
24−
25−Item {
26− width: gridRect.width + controls.width
27− height: units.gu(80)
28−
29− Column {
30− id: controls
31− width: units.gu(40)
32− height: parent.height
33− anchors.top: parent.top
34− anchors.right: parent.right
35− ListItem.ValueSelector {
36− id: minHSpacingSelector
37− text: "minHorizontalSpacing"
38− values: [0,units.gu(2),units.gu(8),units.gu(25)]
39− selectedIndex: 0
40− }
41− }
42−
43− ListModel {
44− id: fakeModel
45− ListElement { name: "A" }
46− ListElement { name: "B" }
47− ListElement { name: "C" }
48− ListElement { name: "D" }
49− ListElement { name: "E" }
50− ListElement { name: "F" }
51− ListElement { name: "G" }
52− ListElement { name: "H" }
53− ListElement { name: "I" }
54− ListElement { name: "J" }
55− ListElement { name: "K" }
56− ListElement { name: "L" }
57− ListElement { name: "M" }
58− ListElement { name: "N" }
59− ListElement { name: "O" }
60− ListElement { name: "P" }
61− ListElement { name: "Q" }
62− ListElement { name: "R" }
63− ListElement { name: "S" }
64− ListElement { name: "T" }
65− ListElement { name: "U" }
66− }
67−
68− Rectangle {
69− id: gridRect
70− width: units.gu(80)
71− height: parent.height
72− color: "grey"
73− anchors.top: parent.top
74− anchors.left: parent.left
75−
76− ResponsiveGridView {
77− id: grid
78− anchors.fill: parent
79− model: fakeModel
80− minimumHorizontalSpacing:
81− minHSpacingSelector.values[minHSpacingSelector.selectedIndex]
82− verticalSpacing: units.gu(2)
83− delegateWidth: units.gu(6)
84− delegateHeight: units.gu(6)
85−
86− delegate: Rectangle {
87− // So that it can be identified by test code
88− property bool isGridDelegate: true
89− color: "grey"
90− border.color: "red"
91− border.width: 1
92−
93− // IMPORTANT: always use grid's cellWidth and cellHeight here to get
94− // ResponsiveGridView's intended result
95− width: grid.cellWidth
96− height: grid.cellHeight
97−
98− Rectangle {
99− color: "green"
100− anchors.centerIn: parent
101− width: units.gu(6)
102− height: units.gu(6)
103− Text {
104− anchors.centerIn: parent
105− text: name
106− }
107− }
108−
109− Text { x:0; y:0; text:"(" + parent.x + ", " + parent.y + ")"}
110− }
111− }
112− }
113−
114− UT.UnityTestCase {
115− name: "ResponsiveGridView"
116− when: windowShown
117−
118− function test_minimumHorizontalSpacing_data() {
119− var data = new Array()
120−
121− data.push({selectedIndex: 0, minHSpacing:0, columnCount: 13})
122− data.push({selectedIndex: 1, minHSpacing:units.gu(2), columnCount: 10})
123− data.push({selectedIndex: 2, minHSpacing:units.gu(8), columnCount: 5})
124− data.push({selectedIndex: 3, minHSpacing:units.gu(25), columnCount: 2})
125−
126− return data
127− }
128−
129− /* Change ResponsiveGridView's minimumHorizontalSpacing property and check
130− that the resulting number of columns matches expectations */
131− function test_minimumHorizontalSpacing(data) {
132− // sanity checks
133− compare(minHSpacingSelector.values[data.selectedIndex], data.minHSpacing)
134−
135− minHSpacingSelector.selectedIndex = data.selectedIndex
136− tryCompareFunction(countGridDelegatesOnFirstRow, data.columnCount);
137− compare(grid.columns, data.columnCount)
138− }
139−
140−
141− function countGridDelegatesOnFirstRow() {
142− return __countGridDelegatesOnFirstRow(grid.visibleChildren, 0)
143− }
144−
145− function __countGridDelegatesOnFirstRow(objList, total) {
146− for (var i = 0; i < objList.length; ++i) {
147− var child = objList[i];
148− if (child.isGridDelegate !== undefined && child.y === 0) {
149− ++total;
150− } else {
151− total = __countGridDelegatesOnFirstRow(child.visibleChildren, total)
152− }
153− }
154− return total
155− }
156− }
157−}
tests/qmltests/Launcher/tst_Launcher.qml+6−5
@@ -941,7 +941,7 @@ Rectangle {
941 tryCompare(quickListShape, "opacity", 0.95);
941 tryCompare(quickListShape, "opacity", 0.95);
942 mouseRelease(draggedItem);
942 mouseRelease(draggedItem);
943
943
944− tryVerify(function() {return (quickList.y >= units.gu(1))});
944+ tryVerify(function() {return (quickList.y >= units.gu(0.5))});
945 tryVerify(function() {return (quickList.y + quickList.height + units.gu(1) <= launcher.height)});
945 tryVerify(function() {return (quickList.y + quickList.height + units.gu(1) <= launcher.height)});
946 compare(quickList.width, units.gu(30));
946 compare(quickList.width, units.gu(30));
947
947
@@ -1015,7 +1015,7 @@ Rectangle {
1015 // Doing longpress
1015 // Doing longpress
1016 mousePress(clickedItem)
1016 mousePress(clickedItem)
1017 tryCompare(clickedItem, "itemOpacity", 0) // Wait for longpress to happen
1017 tryCompare(clickedItem, "itemOpacity", 0) // Wait for longpress to happen
1018− verify(quickList, "state", "open")
1018+ tryCompare(quickList, "state", "open")
1019
1019
1020 launcher.hide();
1020 launcher.hide();
1021
1021
@@ -1035,13 +1035,13 @@ Rectangle {
1035 // Doing RMB click
1035 // Doing RMB click
1036 mouseClick(clickedItem, clickedItem.width / 2, clickedItem.height / 2, Qt.RightButton)
1036 mouseClick(clickedItem, clickedItem.width / 2, clickedItem.height / 2, Qt.RightButton)
1037 tryCompare(quickListShape, "visible", true)
1037 tryCompare(quickListShape, "visible", true)
1038− verify(quickList, "state", "open")
1038+ tryCompare(quickList, "state", "open")
1039− verify(dndArea, "dragging", false)
1039+ tryCompare(dndArea, "dragging", false)
1040
1040
1041 // Click somewhere in the empty space to dismiss the quicklist
1041 // Click somewhere in the empty space to dismiss the quicklist
1042 mouseClick(launcher, launcher.width - units.gu(1), units.gu(1));
1042 mouseClick(launcher, launcher.width - units.gu(1), units.gu(1));
1043 tryCompare(quickListShape, "visible", false);
1043 tryCompare(quickListShape, "visible", false);
1044− verify(quickList, "state", "")
1044+ tryCompare(quickList, "state", "")
1045 }
1045 }
1046
1046
1047 function test_revealByEdgePush() {
1047 function test_revealByEdgePush() {
@@ -1176,6 +1176,7 @@ Rectangle {
1176 tryCompare(appIcon1, "wiggling", true, 1000, "appId #1 should not be still")
1176 tryCompare(appIcon1, "wiggling", true, 1000, "appId #1 should not be still")
1177 LauncherModel.setAlerting(LauncherModel.get(1).appId, false)
1177 LauncherModel.setAlerting(LauncherModel.get(1).appId, false)
1178 waitForWiggleToStop(appIcon1)
1178 waitForWiggleToStop(appIcon1)
1179+
1179 LauncherModel.setCount(LauncherModel.get(1).appId, 4711)
1180 LauncherModel.setCount(LauncherModel.get(1).appId, 4711)
1180 tryCompare(appIcon1, "wiggling", true, 1000, "appId #1 should not be still")
1181 tryCompare(appIcon1, "wiggling", true, 1000, "appId #1 should not be still")
1181 LauncherModel.setAlerting(LauncherModel.get(1).appId, false)
1182 LauncherModel.setAlerting(LauncherModel.get(1).appId, false)
tests/qmltests/Stage/ApplicationCheckBox.qml+6−6
@@ -95,11 +95,12 @@ Column {
95 }
95 }
96 }
96 }
97 Label {
97 Label {
98+ Layout.alignment: Qt.AlignVCenter
98 id: appIdLabel
99 id: appIdLabel
99 text: root.appId
100 text: root.appId
100− anchors.verticalCenter: parent.verticalCenter
101 }
101 }
102 Rectangle {
102 Rectangle {
103+ Layout.alignment: Qt.AlignVCenter
103 color: {
104 color: {
104 if (d.application) {
105 if (d.application) {
105 if (d.application.state === ApplicationInfoInterface.Starting) {
106 if (d.application.state === ApplicationInfoInterface.Starting) {
@@ -117,13 +118,12 @@ Column {
117 }
118 }
118 width: height
119 width: height
119 height: appIdLabel.height * 0.7
120 height: appIdLabel.height * 0.7
120− anchors.verticalCenter: parent.verticalCenter
121 }
121 }
122
122
123 MouseArea {
123 MouseArea {
124+ Layout.alignment: Qt.AlignVCenter
124 width: height
125 width: height
125 height: appIdLabel.height * 0.7
126 height: appIdLabel.height * 0.7
126− anchors.verticalCenter: parent.verticalCenter
127 onClicked: root.createSurface()
127 onClicked: root.createSurface()
128 enabled: d.application && d.application.state === ApplicationInfoInterface.Running
128 enabled: d.application && d.application.state === ApplicationInfoInterface.Running
129 visible: enabled
129 visible: enabled
@@ -146,16 +146,16 @@ Column {
146 text: promptCount + " prompts"
146 text: promptCount + " prompts"
147 }
147 }
148 MouseArea {
148 MouseArea {
149+ Layout.alignment: Qt.AlignVCenter
149 width: height
150 width: height
150 height: promptsLabel.height * 0.7
151 height: promptsLabel.height * 0.7
151− anchors.verticalCenter: parent.verticalCenter
152 onClicked: d.application.createPromptSurface()
152 onClicked: d.application.createPromptSurface()
153 Label { text: "➕"; anchors.centerIn: parent }
153 Label { text: "➕"; anchors.centerIn: parent }
154 }
154 }
155 MouseArea {
155 MouseArea {
156+ Layout.alignment: Qt.AlignVCenter
156 width: height
157 width: height
157 height: promptsLabel.height * 0.7
158 height: promptsLabel.height * 0.7
158− anchors.verticalCenter: parent.verticalCenter
159 onClicked: d.application.promptSurfaceList.get(0).close()
159 onClicked: d.application.promptSurfaceList.get(0).close()
160 enabled: d.application && d.application.promptSurfaceList.count > 0
160 enabled: d.application && d.application.promptSurfaceList.count > 0
161 Label { text: "➖"; anchors.centerIn: parent; enabled: parent.enabled }
161 Label { text: "➖"; anchors.centerIn: parent; enabled: parent.enabled }
@@ -173,9 +173,9 @@ Column {
173 text: "- " + model.surface.name
173 text: "- " + model.surface.name
174 }
174 }
175 MouseArea {
175 MouseArea {
176+ Layout.alignment: Qt.AlignVCenter
176 width: height
177 width: height
177 height: appIdLabel.height * 0.7
178 height: appIdLabel.height * 0.7
178− anchors.verticalCenter: parent.verticalCenter
179 enabled: model.surface.live
179 enabled: model.surface.live
180 visible: enabled
180 visible: enabled
181 onClicked: model.surface.setLive(false);
181 onClicked: model.surface.setLive(false);
tests/qmltests/Stage/tst_PhoneStage.qml+5−4
@@ -251,10 +251,11 @@ Item {
251 var appsToTest = 6;
251 var appsToTest = 6;
252 var apps = new Array();
252 var apps = new Array();
253 for (var i = 0; i < appsToTest; i++) {
253 for (var i = 0; i < appsToTest; i++) {
254− var item = new Object();
254+ var item = {
255− item.tag = "App " + i;
255+ tag: "App " + i,
256− item.index = i;
256+ index: i,
257− item.total = appsToTest;
257+ total: appsToTest
258+ };
258 apps.push(item)
259 apps.push(item)
259 }
260 }
260 return apps;
261 return apps;
tests/qmltests/tst_OrientedShell.qml+1−1
@@ -914,7 +914,7 @@ Rectangle {
914 compare(twitterApp.supportedOrientations, Qt.PortraitOrientation | Qt.LandscapeOrientation
914 compare(twitterApp.supportedOrientations, Qt.PortraitOrientation | Qt.LandscapeOrientation
915 | Qt.InvertedPortraitOrientation | Qt.InvertedLandscapeOrientation);
915 | Qt.InvertedPortraitOrientation | Qt.InvertedLandscapeOrientation);
916
916
917− tryCompare(twitterDelegate, "orientationChangesEnabled", true);
917+ tryCompare(twitterDelegate, "orientationChangesEnabled", false);
918
918
919 var decoratedWindow = findChild(twitterDelegate, "decoratedWindow");
919 var decoratedWindow = findChild(twitterDelegate, "decoratedWindow");
920 verify(decoratedWindow);
920 verify(decoratedWindow);
tests/utils/modules/Unity/Test/MouseTouchEmulationCheckbox.qml+1−1
@@ -37,9 +37,9 @@ RowLayout {
37 activeFocusOnPress: false
37 activeFocusOnPress: false
38 }
38 }
39 Label {
39 Label {
40+ Layout.alignment: Qt.AlignVCenter
40 id: label
41 id: label
41 text: "Mouse emulates touch"
42 text: "Mouse emulates touch"
42− anchors.verticalCenter: parent.verticalCenter
43 AbstractButton {
43 AbstractButton {
44 anchors.fill: parent
44 anchors.fill: parent
45 onClicked: checkbox.checked = !checkbox.checked
45 onClicked: checkbox.checked = !checkbox.checked
tests/utils/modules/Unity/Test/StageTestCase.qml+14−18
@@ -42,27 +42,23 @@ UnityTestCase {
42 Returns the appDelegate of the first surface created by the app with the specified appId
42 Returns the appDelegate of the first surface created by the app with the specified appId
43 */
43 */
44 function startApplication(appId) {
44 function startApplication(appId) {
45− try {
46− var app = ApplicationManager.findApplication(appId);
45+ var app = ApplicationManager.findApplication(appId);
47− if (app) {
46+ if (app) {
48− for (var i = 0; i < topLevelSurfaceList.count; i++) {
47+ for (var i = 0; i < topLevelSurfaceList.count; i++) {
49− if (topLevelSurfaceList.applicationAt(i).appId === appId) {
48+ if (topLevelSurfaceList.applicationAt(i).appId === appId) {
50− var appRepeater = findChild(stage, "appRepeater");
49+ var appRepeater = findChild(stage, "appRepeater");
51− verify(appRepeater);
50+ verify(appRepeater);
52− return appRepeater.itemAt(i);
51+ return appRepeater.itemAt(i);
53− }
54 }
52 }
55 }
53 }
54+ }
56
55
57− var surfaceId = topLevelSurfaceList.nextId;
56+ var surfaceId = topLevelSurfaceList.nextId;
58− app = ApplicationManager.startApplication(appId);
57+ app = ApplicationManager.startApplication(appId);
59− verify(app);
58+ verify(app);
60− waitUntilAppWindowIsFullyLoaded(surfaceId);
59+ waitUntilAppWindowIsFullyLoaded(surfaceId);
61− compare(app.surfaceList.count, 1);
60+ compare(app.surfaceList.count, 1);
62
61
63− return findChild(stage, "appDelegate_" + surfaceId);
62+ return findChild(stage, "appDelegate_" + surfaceId);
64− } catch(err) {
65− throw new Error("startApplication("+appId+") called from line " + util.callerLine(1) + " failed!");
66− }
67 }
63 }
68}
64}