on xenial help sign in
merged with trunk
commitd9d659e43e51d8ad8aa6d8c0abbaf3c86e6d82a1 authorNick Dedekind <nicholas.dedekind@gmail.com> dateThu 4 Jul 2013, 15:47 (13 years ago) parenta104783b86111f
151 files changed+942−262
CMakeLists.txt+1−1 COPYING.LGPL+514 Components/PageHeader.qml+2−4 Hud/ToolBarIcon.qml+1−3 LGPL_EXCEPTION.txt+22 Notifications/Notification.qml+109−12 Notifications/Notifications.qml+10−13 Notifications/timings.js−23 debian/changelog+7 debian/control+46−50 debian/copyright+13−3 debian/rules+18−2 debian/scopes-recommends-generator+27 debian/unity8-autopilot.install+2−2 debian/unity8-fake-env.install+1−1 debian/unity8-private.install+6 debian/unity8.install+16−23 main.cpp+8−9 modules/CMakeLists.txt−1 modules/Unity/CMakeLists.txt−1 paths.h.in+8−9 plugins/HudClient/CMakeLists.txt+2−2 plugins/LightDM/CMakeLists.txt+2−2 plugins/ListViewWithPageHeader/CMakeLists.txt+2−2 plugins/Ubuntu/Gestures/CMakeLists.txt+2−2 plugins/Unity/CMakeLists.txt+4−2 modules/Unity/Indicators/CMakeLists.txt → plugins/Unity/Indicators/CMakeLists.txt+1−1 modules/Unity/Indicators/Messaging/CMakeLists.txt → plugins/Unity/Indicators/Messaging/CMakeLists.txt modules/Unity/Indicators/Messaging/qml/ActionButton.qml → plugins/Unity/Indicators/Messaging/qml/ActionButton.qml modules/Unity/Indicators/Messaging/qml/ActionTextField.qml → plugins/Unity/Indicators/Messaging/qml/ActionTextField.qml modules/Unity/Indicators/Messaging/qml/CMakeLists.txt → plugins/Unity/Indicators/Messaging/qml/CMakeLists.txt+2−2 modules/Unity/Indicators/Messaging/qml/GroupedMessage.qml → plugins/Unity/Indicators/Messaging/qml/GroupedMessage.qml modules/Unity/Indicators/Messaging/qml/HeroMessage.qml → plugins/Unity/Indicators/Messaging/qml/HeroMessage.qml modules/Unity/Indicators/Messaging/qml/HeroMessageHeader.qml → plugins/Unity/Indicators/Messaging/qml/HeroMessageHeader.qml modules/Unity/Indicators/Messaging/qml/MessageMenuItem.qml → plugins/Unity/Indicators/Messaging/qml/MessageMenuItem.qml modules/Unity/Indicators/Messaging/qml/QuickReply.qml → plugins/Unity/Indicators/Messaging/qml/QuickReply.qml modules/Unity/Indicators/Messaging/qml/SimpleTextMessage.qml → plugins/Unity/Indicators/Messaging/qml/SimpleTextMessage.qml modules/Unity/Indicators/Messaging/qml/SnapDecision.qml → plugins/Unity/Indicators/Messaging/qml/SnapDecision.qml modules/Unity/Indicators/Messaging/qml/TextMessage.qml → plugins/Unity/Indicators/Messaging/qml/TextMessage.qml modules/Unity/Indicators/Messaging/qml/qmldir → plugins/Unity/Indicators/Messaging/qml/qmldir modules/Unity/Indicators/Messaging/qml/utils.js → plugins/Unity/Indicators/Messaging/qml/utils.js modules/Unity/Indicators/Network/CMakeLists.txt → plugins/Unity/Indicators/Network/CMakeLists.txt+1−1 modules/Unity/Indicators/Network/networkagent.cpp → plugins/Unity/Indicators/Network/networkagent.cpp modules/Unity/Indicators/Network/networkagent.h → plugins/Unity/Indicators/Network/networkagent.h modules/Unity/Indicators/Network/plugin.cpp → plugins/Unity/Indicators/Network/plugin.cpp modules/Unity/Indicators/Network/plugin.h → plugins/Unity/Indicators/Network/plugin.h modules/Unity/Indicators/Network/qml/AccessPoint.qml → plugins/Unity/Indicators/Network/qml/AccessPoint.qml modules/Unity/Indicators/Network/qml/CMakeLists.txt → plugins/Unity/Indicators/Network/qml/CMakeLists.txt+2−2 modules/Unity/Indicators/Network/qml/PasswordPage.qml → plugins/Unity/Indicators/Network/qml/PasswordPage.qml modules/Unity/Indicators/Network/qml/PasswordTextField.qml → plugins/Unity/Indicators/Network/qml/PasswordTextField.qml modules/Unity/Indicators/Network/qml/WifiSection.qml → plugins/Unity/Indicators/Network/qml/WifiSection.qml modules/Unity/Indicators/Network/qml/qmldir → plugins/Unity/Indicators/Network/qml/qmldir modules/Unity/Indicators/Network/secret-agent.c → plugins/Unity/Indicators/Network/secret-agent.c modules/Unity/Indicators/Network/secret-agent.h → plugins/Unity/Indicators/Network/secret-agent.h modules/Unity/Indicators/flatmenuproxymodel.cpp → plugins/Unity/Indicators/flatmenuproxymodel.cpp modules/Unity/Indicators/flatmenuproxymodel.h → plugins/Unity/Indicators/flatmenuproxymodel.h modules/Unity/Indicators/indicator.cpp → plugins/Unity/Indicators/indicator.cpp modules/Unity/Indicators/indicator.h → plugins/Unity/Indicators/indicator.h modules/Unity/Indicators/indicators.h → plugins/Unity/Indicators/indicators.h modules/Unity/Indicators/indicatorsmanager.cpp → plugins/Unity/Indicators/indicatorsmanager.cpp modules/Unity/Indicators/indicatorsmanager.h → plugins/Unity/Indicators/indicatorsmanager.h modules/Unity/Indicators/indicatorsmodel.cpp → plugins/Unity/Indicators/indicatorsmodel.cpp modules/Unity/Indicators/indicatorsmodel.h → plugins/Unity/Indicators/indicatorsmodel.h modules/Unity/Indicators/plugin.cpp → plugins/Unity/Indicators/plugin.cpp modules/Unity/Indicators/plugin.h → plugins/Unity/Indicators/plugin.h modules/Unity/Indicators/qml/BasicMenuItem.qml → plugins/Unity/Indicators/qml/BasicMenuItem.qml modules/Unity/Indicators/qml/ButtonMenuItem.qml → plugins/Unity/Indicators/qml/ButtonMenuItem.qml modules/Unity/Indicators/qml/CMakeLists.txt → plugins/Unity/Indicators/qml/CMakeLists.txt+2−2 modules/Unity/Indicators/qml/DivMenuItem.qml → plugins/Unity/Indicators/qml/DivMenuItem.qml modules/Unity/Indicators/qml/HLine.qml → plugins/Unity/Indicators/qml/HLine.qml modules/Unity/Indicators/qml/IndicatorBase.qml → plugins/Unity/Indicators/qml/IndicatorBase.qml modules/Unity/Indicators/qml/IndicatorPage.qml → plugins/Unity/Indicators/qml/IndicatorPage.qml modules/Unity/Indicators/qml/IndicatorWidget.qml → plugins/Unity/Indicators/qml/IndicatorWidget.qml modules/Unity/Indicators/qml/MenuAction.qml → plugins/Unity/Indicators/qml/MenuAction.qml modules/Unity/Indicators/qml/MenuActionBinding.qml → plugins/Unity/Indicators/qml/MenuActionBinding.qml modules/Unity/Indicators/qml/MenuItem.qml → plugins/Unity/Indicators/qml/MenuItem.qml modules/Unity/Indicators/qml/MenuItemFactory.qml → plugins/Unity/Indicators/qml/MenuItemFactory.qml modules/Unity/Indicators/qml/ProgressMenuItem.qml → plugins/Unity/Indicators/qml/ProgressMenuItem.qml modules/Unity/Indicators/qml/RemoveBackground.qml → plugins/Unity/Indicators/qml/RemoveBackground.qml modules/Unity/Indicators/qml/SectionMenuItem.qml → plugins/Unity/Indicators/qml/SectionMenuItem.qml modules/Unity/Indicators/qml/SliderMenuItem.qml → plugins/Unity/Indicators/qml/SliderMenuItem.qml modules/Unity/Indicators/qml/SwitchMenuItem.qml → plugins/Unity/Indicators/qml/SwitchMenuItem.qml modules/Unity/Indicators/qml/qmldir → plugins/Unity/Indicators/qml/qmldir modules/Unity/Indicators/resources/artwork/messaging/default_app.svg → plugins/Unity/Indicators/resources/artwork/messaging/default_app.svg modules/Unity/Indicators/resources/artwork/messaging/default_contact.png → plugins/Unity/Indicators/resources/artwork/messaging/default_contact.png modules/Unity/Indicators/resources/artwork/messaging/message_sms01_54px.png → plugins/Unity/Indicators/resources/artwork/messaging/message_sms01_54px.png modules/Unity/Indicators/resources/indicators.qrc → plugins/Unity/Indicators/resources/indicators.qrc plugins/Utils/CMakeLists.txt+2−2 plugins/Utils/applicationpaths.h+2−2 run_on_device+2−3 src/Panel/Indicators/client/CMakeLists.txt−9 src/Panel/Indicators/client/indicatorsclient.cpp+1−1 tests/CMakeLists.txt−1 tests/autopilot/indicators_client/tests/__init__.py−2 tests/autopilot/setup.py+21 tests/autopilot/unity8/tests/__init__.py+6−4 tests/mocks/CMakeLists.txt+2 tests/qmltests/plugins/HudClient/CMakeLists.txt → tests/mocks/HudClient/CMakeLists.txt tests/qmltests/plugins/HudClient/fake_hud_plugin.cpp → tests/mocks/HudClient/fake_hud_plugin.cpp tests/qmltests/plugins/HudClient/fake_hud_plugin.h → tests/mocks/HudClient/fake_hud_plugin.h tests/qmltests/plugins/HudClient/fake_libhud_client.cpp → tests/mocks/HudClient/fake_libhud_client.cpp tests/qmltests/plugins/HudClient/libhud_client_stub.cpp → tests/mocks/HudClient/libhud_client_stub.cpp tests/qmltests/plugins/HudClient/libhud_client_stub.h → tests/mocks/HudClient/libhud_client_stub.h tests/qmltests/plugins/HudClient/qmldir → tests/mocks/HudClient/qmldir tests/mocks/LightDM/CMakeLists.txt+2−2 tests/mocks/LightDM/full/CMakeLists.txt+1−1 tests/mocks/LightDM/single-passphrase/CMakeLists.txt+1−1 tests/mocks/LightDM/single-pin/CMakeLists.txt+1−1 tests/mocks/LightDM/single/CMakeLists.txt+1−1 tests/mocks/Ubuntu/Application/CMakeLists.txt+2−2 tests/qmltests/plugins/Unity/CMakeLists.txt → tests/mocks/Unity/CMakeLists.txt+2 tests/qmltests/modules/Unity/Indicators/CMakeLists.txt → tests/mocks/Unity/Indicators/CMakeLists.txt+2−2 tests/qmltests/modules/Unity/Indicators/IndicatorsModel.qml → tests/mocks/Unity/Indicators/IndicatorsModel.qml tests/qmltests/modules/Unity/Indicators/fakeplugin.cpp → tests/mocks/Unity/Indicators/fakeplugin.cpp tests/qmltests/modules/Unity/Indicators/fakeplugin.h → tests/mocks/Unity/Indicators/fakeplugin.h tests/qmltests/modules/Unity/Indicators/indicators_fake.qrc → tests/mocks/Unity/Indicators/indicators_fake.qrc tests/qmltests/modules/Unity/Indicators/qml/FakeMenuPage.qml → tests/mocks/Unity/Indicators/qml/FakeMenuPage.qml tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page1.qml → tests/mocks/Unity/Indicators/qml/fake_menu_page1.qml tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page2.qml → tests/mocks/Unity/Indicators/qml/fake_menu_page2.qml tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page3.qml → tests/mocks/Unity/Indicators/qml/fake_menu_page3.qml tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page4.qml → tests/mocks/Unity/Indicators/qml/fake_menu_page4.qml tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page5.qml → tests/mocks/Unity/Indicators/qml/fake_menu_page5.qml tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget1.qml → tests/mocks/Unity/Indicators/qml/fake_menu_widget1.qml tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget2.qml → tests/mocks/Unity/Indicators/qml/fake_menu_widget2.qml tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget3.qml → tests/mocks/Unity/Indicators/qml/fake_menu_widget3.qml tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget4.qml → tests/mocks/Unity/Indicators/qml/fake_menu_widget4.qml tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget5.qml → tests/mocks/Unity/Indicators/qml/fake_menu_widget5.qml tests/qmltests/modules/Unity/Indicators/qmldir → tests/mocks/Unity/Indicators/qmldir tests/qmltests/plugins/Unity/Notifications/notification.js → tests/mocks/Unity/Notifications/notification.js tests/qmltests/plugins/Unity/Notifications/qmldir → tests/mocks/Unity/Notifications/qmldir tests/qmltests/plugins/Unity/fake_launchermodel.cpp → tests/mocks/Unity/fake_launchermodel.cpp tests/qmltests/plugins/Unity/fake_launchermodel.h → tests/mocks/Unity/fake_launchermodel.h tests/qmltests/plugins/Unity/fake_scope.cpp → tests/mocks/Unity/fake_scope.cpp tests/qmltests/plugins/Unity/fake_scope.h → tests/mocks/Unity/fake_scope.h tests/qmltests/plugins/Unity/fake_scopes.cpp → tests/mocks/Unity/fake_scopes.cpp tests/qmltests/plugins/Unity/fake_scopes.h → tests/mocks/Unity/fake_scopes.h tests/qmltests/plugins/Unity/fake_unity_plugin.cpp → tests/mocks/Unity/fake_unity_plugin.cpp tests/qmltests/plugins/Unity/fake_unity_plugin.h → tests/mocks/Unity/fake_unity_plugin.h tests/qmltests/plugins/Unity/qmldir → tests/mocks/Unity/qmldir tests/mocks/libusermetrics/CMakeLists.txt+1−1 tests/modules/CMakeLists.txt−1 tests/modules/Unity/CMakeLists.txt−1 tests/plugins/Unity/CMakeLists.txt+2 tests/modules/Unity/Indicators/CMakeLists.txt → tests/plugins/Unity/Indicators/CMakeLists.txt+1−1 tests/modules/Unity/Indicators/indicatorsmanagertest.cpp → tests/plugins/Unity/Indicators/indicatorsmanagertest.cpp tests/modules/Unity/Indicators/indicatorsmodeltest.cpp → tests/plugins/Unity/Indicators/indicatorsmodeltest.cpp tests/qmltests/CMakeLists.txt+11−14 tests/qmltests/Notifications/tst_Notifications.qml+48−7 tests/qmltests/plugins/CMakeLists.txt−3 tests/qmltests/plugins/Dee/DeeVariantText.qml−22 tests/qmltests/plugins/Dee/qmldir−3
CMakeLists.txt+1−1
@@ -57,6 +57,7 @@ find_package(Qt5DBus)
5757include(GNUInstallDirs)
5858
5959set(SHELL_APP_DIR ${CMAKE_INSTALL_DATADIR}/unity8)
60+set(SHELL_PRIVATE_LIBDIR ${CMAKE_INSTALL_LIBDIR}/unity8)
6061
6162configure_file(paths.h.in ${CMAKE_CURRENT_BINARY_DIR}/paths.h @ONLY)
6263
@@ -132,7 +133,6 @@ install(FILES ${QML_JS_FILES}
132133 )
133134
134135# add subdirectories to build
135−add_subdirectory(modules)
136136add_subdirectory(plugins)
137137add_subdirectory(src)
138138
COPYING.LGPLnew file+514
@@ -0,0 +1,514 @@
1+ GNU LESSER GENERAL PUBLIC LICENSE
2+
3+ The Qt Toolkit is Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
4+ Contact: http://www.qt-project.org/legal
5+
6+ You may use, distribute and copy the Qt GUI Toolkit under the terms of
7+ GNU Lesser General Public License version 2.1, which is displayed below.
8+
9+-------------------------------------------------------------------------
10+
11+ GNU LESSER GENERAL PUBLIC LICENSE
12+ Version 2.1, February 1999
13+
14+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
15+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16+ Everyone is permitted to copy and distribute verbatim copies
17+ of this license document, but changing it is not allowed.
18+
19+[This is the first released version of the Lesser GPL. It also counts
20+ as the successor of the GNU Library Public License, version 2, hence
21+ the version number 2.1.]
22+
23+ Preamble
24+
25+ The licenses for most software are designed to take away your
26+freedom to share and change it. By contrast, the GNU General Public
27+Licenses are intended to guarantee your freedom to share and change
28+free software--to make sure the software is free for all its users.
29+
30+ This license, the Lesser General Public License, applies to some
31+specially designated software packages--typically libraries--of the
32+Free Software Foundation and other authors who decide to use it. You
33+can use it too, but we suggest you first think carefully about whether
34+this license or the ordinary General Public License is the better
35+strategy to use in any particular case, based on the explanations below.
36+
37+ When we speak of free software, we are referring to freedom of use,
38+not price. Our General Public Licenses are designed to make sure that
39+you have the freedom to distribute copies of free software (and charge
40+for this service if you wish); that you receive source code or can get
41+it if you want it; that you can change the software and use pieces of
42+it in new free programs; and that you are informed that you can do
43+these things.
44+
45+ To protect your rights, we need to make restrictions that forbid
46+distributors to deny you these rights or to ask you to surrender these
47+rights. These restrictions translate to certain responsibilities for
48+you if you distribute copies of the library or if you modify it.
49+
50+ For example, if you distribute copies of the library, whether gratis
51+or for a fee, you must give the recipients all the rights that we gave
52+you. You must make sure that they, too, receive or can get the source
53+code. If you link other code with the library, you must provide
54+complete object files to the recipients, so that they can relink them
55+with the library after making changes to the library and recompiling
56+it. And you must show them these terms so they know their rights.
57+
58+ We protect your rights with a two-step method: (1) we copyright the
59+library, and (2) we offer you this license, which gives you legal
60+permission to copy, distribute and/or modify the library.
61+
62+ To protect each distributor, we want to make it very clear that
63+there is no warranty for the free library. Also, if the library is
64+modified by someone else and passed on, the recipients should know
65+that what they have is not the original version, so that the original
66+author's reputation will not be affected by problems that might be
67+introduced by others.
68+
69+ Finally, software patents pose a constant threat to the existence of
70+any free program. We wish to make sure that a company cannot
71+effectively restrict the users of a free program by obtaining a
72+restrictive license from a patent holder. Therefore, we insist that
73+any patent license obtained for a version of the library must be
74+consistent with the full freedom of use specified in this license.
75+
76+ Most GNU software, including some libraries, is covered by the
77+ordinary GNU General Public License. This license, the GNU Lesser
78+General Public License, applies to certain designated libraries, and
79+is quite different from the ordinary General Public License. We use
80+this license for certain libraries in order to permit linking those
81+libraries into non-free programs.
82+
83+ When a program is linked with a library, whether statically or using
84+a shared library, the combination of the two is legally speaking a
85+combined work, a derivative of the original library. The ordinary
86+General Public License therefore permits such linking only if the
87+entire combination fits its criteria of freedom. The Lesser General
88+Public License permits more lax criteria for linking other code with
89+the library.
90+
91+ We call this license the "Lesser" General Public License because it
92+does Less to protect the user's freedom than the ordinary General
93+Public License. It also provides other free software developers Less
94+of an advantage over competing non-free programs. These disadvantages
95+are the reason we use the ordinary General Public License for many
96+libraries. However, the Lesser license provides advantages in certain
97+special circumstances.
98+
99+ For example, on rare occasions, there may be a special need to
100+encourage the widest possible use of a certain library, so that it becomes
101+a de-facto standard. To achieve this, non-free programs must be
102+allowed to use the library. A more frequent case is that a free
103+library does the same job as widely used non-free libraries. In this
104+case, there is little to gain by limiting the free library to free
105+software only, so we use the Lesser General Public License.
106+
107+ In other cases, permission to use a particular library in non-free
108+programs enables a greater number of people to use a large body of
109+free software. For example, permission to use the GNU C Library in
110+non-free programs enables many more people to use the whole GNU
111+operating system, as well as its variant, the GNU/Linux operating
112+system.
113+
114+ Although the Lesser General Public License is Less protective of the
115+users' freedom, it does ensure that the user of a program that is
116+linked with the Library has the freedom and the wherewithal to run
117+that program using a modified version of the Library.
118+
119+ The precise terms and conditions for copying, distribution and
120+modification follow. Pay close attention to the difference between a
121+"work based on the library" and a "work that uses the library". The
122+former contains code derived from the library, whereas the latter must
123+be combined with the library in order to run.
124+
125+ GNU LESSER GENERAL PUBLIC LICENSE
126+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
127+
128+ 0. This License Agreement applies to any software library or other
129+program which contains a notice placed by the copyright holder or
130+other authorized party saying it may be distributed under the terms of
131+this Lesser General Public License (also called "this License").
132+Each licensee is addressed as "you".
133+
134+ A "library" means a collection of software functions and/or data
135+prepared so as to be conveniently linked with application programs
136+(which use some of those functions and data) to form executables.
137+
138+ The "Library", below, refers to any such software library or work
139+which has been distributed under these terms. A "work based on the
140+Library" means either the Library or any derivative work under
141+copyright law: that is to say, a work containing the Library or a
142+portion of it, either verbatim or with modifications and/or translated
143+straightforwardly into another language. (Hereinafter, translation is
144+included without limitation in the term "modification".)
145+
146+ "Source code" for a work means the preferred form of the work for
147+making modifications to it. For a library, complete source code means
148+all the source code for all modules it contains, plus any associated
149+interface definition files, plus the scripts used to control compilation
150+and installation of the library.
151+
152+ Activities other than copying, distribution and modification are not
153+covered by this License; they are outside its scope. The act of
154+running a program using the Library is not restricted, and output from
155+such a program is covered only if its contents constitute a work based
156+on the Library (independent of the use of the Library in a tool for
157+writing it). Whether that is true depends on what the Library does
158+and what the program that uses the Library does.
159+
160+ 1. You may copy and distribute verbatim copies of the Library's
161+complete source code as you receive it, in any medium, provided that
162+you conspicuously and appropriately publish on each copy an
163+appropriate copyright notice and disclaimer of warranty; keep intact
164+all the notices that refer to this License and to the absence of any
165+warranty; and distribute a copy of this License along with the
166+Library.
167+
168+ You may charge a fee for the physical act of transferring a copy,
169+and you may at your option offer warranty protection in exchange for a
170+fee.
171+
172+ 2. You may modify your copy or copies of the Library or any portion
173+of it, thus forming a work based on the Library, and copy and
174+distribute such modifications or work under the terms of Section 1
175+above, provided that you also meet all of these conditions:
176+
177+ a) The modified work must itself be a software library.
178+
179+ b) You must cause the files modified to carry prominent notices
180+ stating that you changed the files and the date of any change.
181+
182+ c) You must cause the whole of the work to be licensed at no
183+ charge to all third parties under the terms of this License.
184+
185+ d) If a facility in the modified Library refers to a function or a
186+ table of data to be supplied by an application program that uses
187+ the facility, other than as an argument passed when the facility
188+ is invoked, then you must make a good faith effort to ensure that,
189+ in the event an application does not supply such function or
190+ table, the facility still operates, and performs whatever part of
191+ its purpose remains meaningful.
192+
193+ (For example, a function in a library to compute square roots has
194+ a purpose that is entirely well-defined independent of the
195+ application. Therefore, Subsection 2d requires that any
196+ application-supplied function or table used by this function must
197+ be optional: if the application does not supply it, the square
198+ root function must still compute square roots.)
199+
200+These requirements apply to the modified work as a whole. If
201+identifiable sections of that work are not derived from the Library,
202+and can be reasonably considered independent and separate works in
203+themselves, then this License, and its terms, do not apply to those
204+sections when you distribute them as separate works. But when you
205+distribute the same sections as part of a whole which is a work based
206+on the Library, the distribution of the whole must be on the terms of
207+this License, whose permissions for other licensees extend to the
208+entire whole, and thus to each and every part regardless of who wrote
209+it.
210+
211+Thus, it is not the intent of this section to claim rights or contest
212+your rights to work written entirely by you; rather, the intent is to
213+exercise the right to control the distribution of derivative or
214+collective works based on the Library.
215+
216+In addition, mere aggregation of another work not based on the Library
217+with the Library (or with a work based on the Library) on a volume of
218+a storage or distribution medium does not bring the other work under
219+the scope of this License.
220+
221+ 3. You may opt to apply the terms of the ordinary GNU General Public
222+License instead of this License to a given copy of the Library. To do
223+this, you must alter all the notices that refer to this License, so
224+that they refer to the ordinary GNU General Public License, version 2,
225+instead of to this License. (If a newer version than version 2 of the
226+ordinary GNU General Public License has appeared, then you can specify
227+that version instead if you wish.) Do not make any other change in
228+these notices.
229+
230+ Once this change is made in a given copy, it is irreversible for
231+that copy, so the ordinary GNU General Public License applies to all
232+subsequent copies and derivative works made from that copy.
233+
234+ This option is useful when you wish to copy part of the code of
235+the Library into a program that is not a library.
236+
237+ 4. You may copy and distribute the Library (or a portion or
238+derivative of it, under Section 2) in object code or executable form
239+under the terms of Sections 1 and 2 above provided that you accompany
240+it with the complete corresponding machine-readable source code, which
241+must be distributed under the terms of Sections 1 and 2 above on a
242+medium customarily used for software interchange.
243+
244+ If distribution of object code is made by offering access to copy
245+from a designated place, then offering equivalent access to copy the
246+source code from the same place satisfies the requirement to
247+distribute the source code, even though third parties are not
248+compelled to copy the source along with the object code.
249+
250+ 5. A program that contains no derivative of any portion of the
251+Library, but is designed to work with the Library by being compiled or
252+linked with it, is called a "work that uses the Library". Such a
253+work, in isolation, is not a derivative work of the Library, and
254+therefore falls outside the scope of this License.
255+
256+ However, linking a "work that uses the Library" with the Library
257+creates an executable that is a derivative of the Library (because it
258+contains portions of the Library), rather than a "work that uses the
259+library". The executable is therefore covered by this License.
260+Section 6 states terms for distribution of such executables.
261+
262+ When a "work that uses the Library" uses material from a header file
263+that is part of the Library, the object code for the work may be a
264+derivative work of the Library even though the source code is not.
265+Whether this is true is especially significant if the work can be
266+linked without the Library, or if the work is itself a library. The
267+threshold for this to be true is not precisely defined by law.
268+
269+ If such an object file uses only numerical parameters, data
270+structure layouts and accessors, and small macros and small inline
271+functions (ten lines or less in length), then the use of the object
272+file is unrestricted, regardless of whether it is legally a derivative
273+work. (Executables containing this object code plus portions of the
274+Library will still fall under Section 6.)
275+
276+ Otherwise, if the work is a derivative of the Library, you may
277+distribute the object code for the work under the terms of Section 6.
278+Any executables containing that work also fall under Section 6,
279+whether or not they are linked directly with the Library itself.
280+
281+ 6. As an exception to the Sections above, you may also combine or
282+link a "work that uses the Library" with the Library to produce a
283+work containing portions of the Library, and distribute that work
284+under terms of your choice, provided that the terms permit
285+modification of the work for the customer's own use and reverse
286+engineering for debugging such modifications.
287+
288+ You must give prominent notice with each copy of the work that the
289+Library is used in it and that the Library and its use are covered by
290+this License. You must supply a copy of this License. If the work
291+during execution displays copyright notices, you must include the
292+copyright notice for the Library among them, as well as a reference
293+directing the user to the copy of this License. Also, you must do one
294+of these things:
295+
296+ a) Accompany the work with the complete corresponding
297+ machine-readable source code for the Library including whatever
298+ changes were used in the work (which must be distributed under
299+ Sections 1 and 2 above); and, if the work is an executable linked
300+ with the Library, with the complete machine-readable "work that
301+ uses the Library", as object code and/or source code, so that the
302+ user can modify the Library and then relink to produce a modified
303+ executable containing the modified Library. (It is understood
304+ that the user who changes the contents of definitions files in the
305+ Library will not necessarily be able to recompile the application
306+ to use the modified definitions.)
307+
308+ b) Use a suitable shared library mechanism for linking with the
309+ Library. A suitable mechanism is one that (1) uses at run time a
310+ copy of the library already present on the user's computer system,
311+ rather than copying library functions into the executable, and (2)
312+ will operate properly with a modified version of the library, if
313+ the user installs one, as long as the modified version is
314+ interface-compatible with the version that the work was made with.
315+
316+ c) Accompany the work with a written offer, valid for at
317+ least three years, to give the same user the materials
318+ specified in Subsection 6a, above, for a charge no more
319+ than the cost of performing this distribution.
320+
321+ d) If distribution of the work is made by offering access to copy
322+ from a designated place, offer equivalent access to copy the above
323+ specified materials from the same place.
324+
325+ e) Verify that the user has already received a copy of these
326+ materials or that you have already sent this user a copy.
327+
328+ For an executable, the required form of the "work that uses the
329+Library" must include any data and utility programs needed for
330+reproducing the executable from it. However, as a special exception,
331+the materials to be distributed need not include anything that is
332+normally distributed (in either source or binary form) with the major
333+components (compiler, kernel, and so on) of the operating system on
334+which the executable runs, unless that component itself accompanies
335+the executable.
336+
337+ It may happen that this requirement contradicts the license
338+restrictions of other proprietary libraries that do not normally
339+accompany the operating system. Such a contradiction means you cannot
340+use both them and the Library together in an executable that you
341+distribute.
342+
343+ 7. You may place library facilities that are a work based on the
344+Library side-by-side in a single library together with other library
345+facilities not covered by this License, and distribute such a combined
346+library, provided that the separate distribution of the work based on
347+the Library and of the other library facilities is otherwise
348+permitted, and provided that you do these two things:
349+
350+ a) Accompany the combined library with a copy of the same work
351+ based on the Library, uncombined with any other library
352+ facilities. This must be distributed under the terms of the
353+ Sections above.
354+
355+ b) Give prominent notice with the combined library of the fact
356+ that part of it is a work based on the Library, and explaining
357+ where to find the accompanying uncombined form of the same work.
358+
359+ 8. You may not copy, modify, sublicense, link with, or distribute
360+the Library except as expressly provided under this License. Any
361+attempt otherwise to copy, modify, sublicense, link with, or
362+distribute the Library is void, and will automatically terminate your
363+rights under this License. However, parties who have received copies,
364+or rights, from you under this License will not have their licenses
365+terminated so long as such parties remain in full compliance.
366+
367+ 9. You are not required to accept this License, since you have not
368+signed it. However, nothing else grants you permission to modify or
369+distribute the Library or its derivative works. These actions are
370+prohibited by law if you do not accept this License. Therefore, by
371+modifying or distributing the Library (or any work based on the
372+Library), you indicate your acceptance of this License to do so, and
373+all its terms and conditions for copying, distributing or modifying
374+the Library or works based on it.
375+
376+ 10. Each time you redistribute the Library (or any work based on the
377+Library), the recipient automatically receives a license from the
378+original licensor to copy, distribute, link with or modify the Library
379+subject to these terms and conditions. You may not impose any further
380+restrictions on the recipients' exercise of the rights granted herein.
381+You are not responsible for enforcing compliance by third parties with
382+this License.
383+
384+ 11. If, as a consequence of a court judgment or allegation of patent
385+infringement or for any other reason (not limited to patent issues),
386+conditions are imposed on you (whether by court order, agreement or
387+otherwise) that contradict the conditions of this License, they do not
388+excuse you from the conditions of this License. If you cannot
389+distribute so as to satisfy simultaneously your obligations under this
390+License and any other pertinent obligations, then as a consequence you
391+may not distribute the Library at all. For example, if a patent
392+license would not permit royalty-free redistribution of the Library by
393+all those who receive copies directly or indirectly through you, then
394+the only way you could satisfy both it and this License would be to
395+refrain entirely from distribution of the Library.
396+
397+If any portion of this section is held invalid or unenforceable under any
398+particular circumstance, the balance of the section is intended to apply,
399+and the section as a whole is intended to apply in other circumstances.
400+
401+It is not the purpose of this section to induce you to infringe any
402+patents or other property right claims or to contest validity of any
403+such claims; this section has the sole purpose of protecting the
404+integrity of the free software distribution system which is
405+implemented by public license practices. Many people have made
406+generous contributions to the wide range of software distributed
407+through that system in reliance on consistent application of that
408+system; it is up to the author/donor to decide if he or she is willing
409+to distribute software through any other system and a licensee cannot
410+impose that choice.
411+
412+This section is intended to make thoroughly clear what is believed to
413+be a consequence of the rest of this License.
414+
415+ 12. If the distribution and/or use of the Library is restricted in
416+certain countries either by patents or by copyrighted interfaces, the
417+original copyright holder who places the Library under this License may add
418+an explicit geographical distribution limitation excluding those countries,
419+so that distribution is permitted only in or among countries not thus
420+excluded. In such case, this License incorporates the limitation as if
421+written in the body of this License.
422+
423+ 13. The Free Software Foundation may publish revised and/or new
424+versions of the Lesser General Public License from time to time.
425+Such new versions will be similar in spirit to the present version,
426+but may differ in detail to address new problems or concerns.
427+
428+Each version is given a distinguishing version number. If the Library
429+specifies a version number of this License which applies to it and
430+"any later version", you have the option of following the terms and
431+conditions either of that version or of any later version published by
432+the Free Software Foundation. If the Library does not specify a
433+license version number, you may choose any version ever published by
434+the Free Software Foundation.
435+
436+ 14. If you wish to incorporate parts of the Library into other free
437+programs whose distribution conditions are incompatible with these,
438+write to the author to ask for permission. For software which is
439+copyrighted by the Free Software Foundation, write to the Free
440+Software Foundation; we sometimes make exceptions for this. Our
441+decision will be guided by the two goals of preserving the free status
442+of all derivatives of our free software and of promoting the sharing
443+and reuse of software generally.
444+
445+ NO WARRANTY
446+
447+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
448+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
449+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
450+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
451+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
452+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
453+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
454+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
455+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
456+
457+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
458+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
459+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
460+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
461+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
462+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
463+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
464+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
465+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
466+DAMAGES.
467+
468+ END OF TERMS AND CONDITIONS
469+
470+ How to Apply These Terms to Your New Libraries
471+
472+ If you develop a new library, and you want it to be of the greatest
473+possible use to the public, we recommend making it free software that
474+everyone can redistribute and change. You can do so by permitting
475+redistribution under these terms (or, alternatively, under the terms of the
476+ordinary General Public License).
477+
478+ To apply these terms, attach the following notices to the library. It is
479+safest to attach them to the start of each source file to most effectively
480+convey the exclusion of warranty; and each file should have at least the
481+"copyright" line and a pointer to where the full notice is found.
482+
483+ <one line to give the library's name and a brief idea of what it does.>
484+ Copyright (C) <year> <name of author>
485+
486+ This library is free software; you can redistribute it and/or
487+ modify it under the terms of the GNU Lesser General Public
488+ License as published by the Free Software Foundation; either
489+ version 2.1 of the License, or (at your option) any later version.
490+
491+ This library is distributed in the hope that it will be useful,
492+ but WITHOUT ANY WARRANTY; without even the implied warranty of
493+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
494+ Lesser General Public License for more details.
495+
496+ You should have received a copy of the GNU Lesser General Public
497+ License along with this library; if not, write to the Free Software
498+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
499+
500+Also add information on how to contact you by electronic and paper mail.
501+
502+You should also get your employer (if you work as a programmer) or your
503+school, if any, to sign a "copyright disclaimer" for the library, if
504+necessary. Here is a sample; alter the names:
505+
506+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
507+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
508+
509+ <signature of Ty Coon>, 1 April 1990
510+ Ty Coon, President of Vice
511+
512+That's all there is to it!
513+
514+
Components/PageHeader.qml+2−4
@@ -147,9 +147,8 @@ Item {
147147
148148 hasClearButton: false
149149
150− primaryItem: Button {
150+ primaryItem: AbstractButton {
151151 enabled: searchField.text != ""
152− color: "transparent"
153152 onClicked: {
154153 if (searchField.text != "") {
155154 searchHistory.addQuery(searchField.text)
@@ -271,8 +270,7 @@ Item {
271270
272271 // FIXME: this should go into the first item below, but enable: false
273272 // prevents mouse events propagation
274− Button {
275− color: "transparent"
273+ AbstractButton {
276274 anchors {
277275 top: parent.top
278276 right: parent.right
Hud/ToolBarIcon.qml+1−3
@@ -17,9 +17,7 @@
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
1919
20−Button {
21− color: "transparent"
22−
20+AbstractButton {
2321 property alias source: image.source
2422
2523 height: units.gu(4)
LGPL_EXCEPTION.txtnew file+22
@@ -0,0 +1,22 @@
1+Digia Qt LGPL Exception version 1.1
2+
3+As an additional permission to the GNU Lesser General Public License version
4+2.1, the object code form of a "work that uses the Library" may incorporate
5+material from a header file that is part of the Library. You may distribute
6+such object code under terms of your choice, provided that:
7+ (i) the header files of the Library have not been modified; and
8+ (ii) the incorporated material is limited to numerical parameters, data
9+ structure layouts, accessors, macros, inline functions and
10+ templates; and
11+ (iii) you comply with the terms of Section 6 of the GNU Lesser General
12+ Public License version 2.1.
13+
14+Moreover, you may apply this exception to a modified version of the Library,
15+provided that such modification does not involve copying material from the
16+Library into the modified Library's header files unless such material is
17+limited to (i) numerical parameters; (ii) data structure layouts;
18+(iii) accessors; and (iv) small macros, templates and inline functions of
19+five lines or less in length.
20+
21+Furthermore, you are not required to apply this additional permission to a
22+modified version of the Library.
Notifications/Notification.qml+109−12
@@ -30,10 +30,25 @@ UbuntuShape {
3030 property var type
3131 property var notification
3232
33− implicitHeight: childrenRect.height
33+ objectName: "background"
34+ implicitHeight: contentColumn.height + contentColumn.spacing * 2
3435 color: Qt.rgba(0, 0, 0, 0.85)
3536 opacity: 0
3637
38+ clip: true
39+
40+ Behavior on implicitHeight {
41+ id: heightBehavior
42+
43+ enabled: false
44+ UbuntuNumberAnimation {
45+ duration: UbuntuAnimation.SnapDuration
46+ }
47+ }
48+
49+ // delay enabling height behavior until the add transition is complete
50+ onOpacityChanged: if (opacity == 1) heightBehavior.enabled = true
51+
3752 MouseArea {
3853 id: interactiveArea
3954
@@ -52,7 +67,7 @@ UbuntuShape {
5267 top: parent.top
5368 margins: spacing
5469 }
55− height: childrenRect.height + spacing
70+
5671 spacing: units.gu(1)
5772
5873 Row {
@@ -125,30 +140,112 @@ UbuntuShape {
125140 }
126141 }
127142
128− Row {
143+ Item {
129144 id: buttonRow
130145
131146 objectName: "buttonRow"
132− spacing: contentColumn.spacing
133− layoutDirection: Qt.RightToLeft
147+ anchors {
148+ left: parent.left
149+ right: parent.right
150+ }
134151 visible: notification.type == Notification.SnapDecision
152+ height: units.gu(4)
153+
154+ property real buttonWidth: (width - contentColumn.spacing) / 2
155+ property bool expanded
156+
157+ Button {
158+ id: leftButton
159+
160+ objectName: "button1"
161+ width: parent.expanded ? parent.width : parent.buttonWidth
162+ anchors {
163+ top: parent.top
164+ bottom: parent.bottom
165+ }
166+ text: notification.type == Notification.SnapDecision && actionRepeater.count >= 2 ? actionRepeater.itemAt(1).actionLabel : ""
167+ color: "#cdcdcb"
168+ onClicked: {
169+ if (actionRepeater.count > 2) {
170+ buttonRow.expanded = !buttonRow.expanded
171+ } else {
172+ notification.notification.invokeAction(actionRepeater.itemAt(1).actionId)
173+ }
174+ }
175+
176+ Behavior on width {
177+ UbuntuNumberAnimation {
178+ duration: UbuntuAnimation.SnapDuration
179+ }
180+ }
181+ }
182+
183+ Button {
184+ id: rightButton
185+
186+ objectName: "button0"
187+ anchors {
188+ left: leftButton.right
189+ leftMargin: contentColumn.spacing
190+ right: parent.right
191+ }
192+ text: notification.type == Notification.SnapDecision && actionRepeater.count >= 1 ? actionRepeater.itemAt(0).actionLabel : ""
193+ anchors {
194+ top: parent.top
195+ bottom: parent.bottom
196+ }
197+ color: "#d85317"
198+ visible: width > 0
199+ onClicked: notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
200+ }
201+ }
202+
203+ Column {
204+ objectName: "buttonColumn"
205+ spacing: contentColumn.spacing
135206 anchors {
136207 left: parent.left
137208 right: parent.right
138209 }
139210
211+ // calculate initial position before Column takes over
212+ y: buttonRow.y + buttonRow.height + contentColumn.spacing
213+
214+ visible: notification.type == Notification.SnapDecision
215+ height: buttonRow.expanded ? implicitHeight : 0
216+
140217 Repeater {
141218 id: actionRepeater
219+
142220 model: notification.actions
221+ delegate: Loader {
222+ id: loader
143223
144− Button {
145− objectName: "button" + index
146− color: Positioner.isFirstItem ? "#d85317" : "#cdcdcb"
147− width: (buttonRow.width - buttonRow.spacing) / 2
148− height: units.gu(4)
149− text: label
150224 property string actionId: id
151− onClicked: notification.notification.invokeAction(id)
225+ property string actionLabel: label
226+
227+ anchors {
228+ left: parent.left
229+ right: parent.right
230+ }
231+
232+ Component {
233+ id: actionButton
234+
235+ Button {
236+ objectName: "button" + index
237+ anchors {
238+ left: parent.left
239+ right: parent.right
240+ }
241+
242+ text: loader.actionLabel
243+ height: units.gu(4)
244+ color: "#cdcdcb"
245+ onClicked: notification.notification.invokeAction(loader.actionId)
246+ }
247+ }
248+ sourceComponent: (index == 0 || index == 1) ? undefined : actionButton
152249 }
153250 }
154251 }
Notifications/Notifications.qml+10−13
@@ -17,7 +17,6 @@
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
1919import "../Components"
20−import "timings.js" as Timings
2120
2221ListView {
2322 id: notificationList
@@ -40,40 +39,38 @@ ListView {
4039 actions: model.actions
4140 notificationId: model.id
4241 notification: notificationList.model.getRaw(notificationId)
42+
43+ // make sure there's no opacity-difference between the several
44+ // elements in a notification
45+ layer.enabled: add.running || remove.running || populate.running
4346 }
4447
4548 populate: Transition {
46− NumberAnimation {
49+ UbuntuNumberAnimation {
4750 property: "opacity"
4851 to: 1
49− duration: Timings.snapBeat
50− easing.type: Timings.easing
52+ duration: UbuntuAnimation.SnapDuration
5153 }
5254 }
5355
5456 add: Transition {
55− NumberAnimation {
57+ UbuntuNumberAnimation {
5658 property: "opacity"
5759 to: 1
58− duration: Timings.snapBeat
59− easing.type: Timings.easing
60+ duration: UbuntuAnimation.SnapDuration
6061 }
6162 }
6263
6364 remove: Transition {
64− NumberAnimation {
65+ UbuntuNumberAnimation {
6566 property: "opacity"
6667 to: 0
67− duration: Timings.fastBeat
68− easing.type: Timings.easing
6968 }
7069 }
7170
7271 displaced: Transition {
73− NumberAnimation {
72+ UbuntuNumberAnimation {
7473 properties: "x,y"
75− duration: Timings.fastBeat
76− easing.type: Timings.easing
7774 }
7875 }
7976}
Notifications/timings.jsdeleted−23
@@ -1,23 +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−var rhythm = 700;
18−var fastBeat = 0.5 * rhythm;
19−var snapBeat = 0.5 * fastBeat;
20−var slowBeat = rhythm;
21−var sleepyBeat = slowBeat * 2;
22−
23−var easing = Easing.OutQuint;
debian/changelog+7
@@ -1,3 +1,10 @@
1+unity8 (7.81.3-0ubuntu1) UNRELEASED; urgency=low
2+
3+ * Clean packaging for entering saucy and following daily release guidelines
4+ * Automatic snapshot from revision 49 (bootstrap)
5+
6+ -- Didier Roche <didrocks@ubuntu.com> Wed, 26 Jun 2013 11:01:09 +0200
7+
18unity8 (7.81.3) UNRELEASED; urgency=low
29
310 * Choose more appropriate values for edge-drag gestures (LP: #1194150)
debian/control+46−50
@@ -1,10 +1,10 @@
11Source: unity8
22Section: x11
3−Priority: extra
3+Priority: optional
44Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
55Build-Depends: cmake,
66 debhelper (>= 9),
7− libc6-dev,
7+ libjson-perl,
88 libdee-qt5-dev (>= 3.0),
99 libgl1-mesa-dev[!armhf] | libgl-dev[!armhf],
1010 libgl1-mesa-dri,
@@ -21,6 +21,8 @@ Build-Depends: cmake,
2121 libxcb1-dev,
2222 pkg-config,
2323 python3,
24+ python (>= 2.7),
25+ python-setuptools,
2426 qt5-default,
2527 qtbase5-dev,
2628 qtbase5-private-dev,
@@ -32,81 +34,75 @@ Build-Depends: cmake,
3234 qtdeclarative5-ubuntu-ui-toolkit-plugin,
3335 qtdeclarative5-xmllistmodel-plugin,
3436 ttf-ubuntu-font-family,
35−Standards-Version: 3.9.3
37+ libunity-scopes-json-def-phone,
38+Standards-Version: 3.9.4
3639Homepage: http://launchpad.net/unity
3740# If you aren't a member of ~unity-team but need to upload
3841# packaging changes, just go ahead. ~unity-team will notice
3942# and sync up the code again.
40−Vcs-Bzr: https://code.launchpad.net/~unity-team/unity/phablet
41−Vcs-Browser: https://bazaar.launchpad.net/~unity-team/unity/phablet/files
43+Vcs-Bzr: https://code.launchpad.net/unity8
44+Vcs-Browser: https://bazaar.launchpad.net/~unity-team/unity8/trunk
4245
4346Package: unity8
44−Replaces: qml-phone-shell (<< 7.80~)
45−Breaks: qml-phone-shell (<< 7.80~)
46−Architecture: amd64 armhf i386
47−Depends: qmenumodel-qml,
47+Architecture: any
48+Depends: ${misc:Depends},
49+ ${shlibs:Depends},
50+ unity8-private (= ${binary:Version}),
51+ qmenumodel-qml,
4852 qtdeclarative5-dee-plugin,
4953 qtdeclarative5-ubuntu-ui-toolkit-plugin,
5054 qtdeclarative5-unity-notifications-plugin | unity-notifications-impl,
5155 unity-notifications-impl-1,
5256 qtdeclarative5-xmllistmodel-plugin,
53− qtubuntu,
54− ${misc:Depends},
57+ unity8-fake-env | qtubuntu-shell,
58+Recommends: ${unity-default-masterscopes},
59+Description: Unity 8 shell
60+ The Unity 8 shell is the primary user interface for Ubuntu devices.
61+
62+Package: unity8-private
63+Architecture: any
64+Multi-Arch: same
65+Pre-Depends: ${misc:Pre-Depends}
66+Depends: ${misc:Depends},
5567 ${shlibs:Depends},
56−Recommends: unity-scope-home,
57− unity-lens-applications,
58−Description: Ubuntu QML shell
59− The Ubuntu QML shell is the primary user interface for Ubuntu devices.
68+Description: Unity 8 private libs
69+ The Unity 8 shell is the primary user interface for Ubuntu devices.
70+ .
71+ This package contains the private libraries for QML and other components
72+ only used by the shell.
6073
61−Package: qml-phone-shell
62−Depends: unity8, ${misc:Depends}
63−Architecture: all
64−Description: transitional dummy package
65− This is a transitional dummy package. It can safely be removed.
74+Package: unity8-fake-env
75+Architecture: any
76+Multi-Arch: same
77+Pre-Depends: ${misc:Pre-Depends}
78+Depends: ${misc:Depends},
79+ ${shlibs:Depends},
80+Provides: qtubuntu-shell,
81+Description: Fake environment for running Unity 8 shell
82+ Provides fake implementations of some QML modules used by Unity 8 shell
83+ (e.g Ubuntu.Application) so that you can run it in a sandboxed environment.
6684
6785Package: indicators-client
6886Architecture: amd64 armhf i386
6987Depends: qmenumodel-qml,
7088 qtdeclarative5-ubuntu-ui-toolkit-plugin | qt-components-ubuntu,
71− unity8 (= ${source:Version}),
89+ unity8 (= ${binary:Version}),
7290 ${misc:Depends},
7391 ${shlibs:Depends},
7492Description: Indicators client test application
7593 This package contains the client application for indicators used by autopilot
7694
77−Package: unity8-fake-env
78−Replaces: qml-phone-shell-fake-env (<< 7.80~)
79−Breaks: qml-phone-shell-fake-env (<< 7.80~)
80−Architecture: amd64 armhf i386
81−Depends: ${misc:Depends}, ${shlibs:Depends}
82−Description: Fake environment for running Ubuntu QML shell
83− Provides fake implementations of some QML modules used by Ubuntu QML shell
84− (e.g Ubuntu.Application) so that you can run it in a sandboxed environment.
85−
86−Package: qml-phone-shell-fake-env
87−Depends: unity8-fake-env, ${misc:Depends}
88−Architecture: all
89−Description: transitional dummy package
90− This is a transitional dummy package. It can safely be removed.
91−
9295Package: unity8-autopilot
93−Replaces: qml-phone-shell-autopilot (<< 7.80~)
94−Breaks: qml-phone-shell-autopilot (<< 7.80~)
9596Architecture: all
96−Depends: indicators-client (= ${source:Version}),
97+Depends: ${misc:Depends},
98+ ${shlibs:Depends},
99+ ${python:Depends},
100+ indicators-client (>= ${source:Version}),
97101 libautopilot-qt,
98102 libqt5test5,
99103 libqt5widgets5,
100104 python-evdev,
101− unity8 (= ${source:Version}),
102− unity8-fake-env (= ${source:Version}),
103− ${misc:Depends},
104− ${shlibs:Depends},
105−Description: Test package for the shell
105+ unity8 (>= ${source:Version}),
106+ unity8-fake-env (>= ${source:Version}),
107+Description: Test package for Unity 8 shell
106108 Autopilot tests for the unity8 package
107−
108−Package: qml-phone-shell-autopilot
109−Depends: unity8-autopilot, ${misc:Depends}
110−Architecture: all
111−Description: transitional dummy package
112− This is a transitional dummy package. It can safely be removed.
debian/copyright+13−3
@@ -1,7 +1,9 @@
11Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
2+Upstream-Name: unity8
3+Source: http://launchpad.net/unity
24
35Files: *
4−Copyright: 2013 Canonical Ltd.
6+Copyright: 2011-2013 Canonical Ltd.
57License: GPL-3
68
79License: GPL-3
@@ -20,9 +22,17 @@ License: GPL-3
2022 On Debian systems, the full text of the GNU General Public License
2123 version 3 can be found in the file /usr/share/common-licenses/GPL-3.
2224
23−Files: tests/unittests/plugins/Utils/modeltest.*
25+Files: tests/mocks/LightDM/UsersModel.h tests/mocks/LightDM/Greeter.h
26+Copyright: 2013 Canonical Ltd.
27+ 2010-2011 David Edmundson
28+ 2010-2011 Robert Ancell
29+License: GPL-3
30+
31+Files: plugins/Utils/qvariantlistmodel.*
32+ tests/unittests/plugins/Utils/modeltest.*
33+ tests/plugins/Utils/modeltest.*
2434Copyright: 2013 Digia Plc and/or its subsidiary(-ies).
25−License:
35+License: LGPL-2.1 with Digia Qt LGPL Exception 1.1 or GPL-3
2636 Commercial License Usage
2737 Licensees holding valid commercial Qt licenses may use this file in
2838 accordance with the commercial license agreement provided with the
debian/rules+18−2
@@ -6,15 +6,31 @@
66export DPKG_GENSYMBOLS_CHECK_LEVEL=4
77export NO_PNG_PKG_MANGLE=1
88
9+SCOPES_RECOMMENDS := $(shell perl debian/scopes-recommends-generator /usr/share/unity/client-scopes.json)
10+
911%:
10− dh $@ --parallel
12+ dh $@ --parallel --fail-missing --with python2
1113
1214override_dh_auto_clean:
1315 dh_auto_clean
1416 rm -rf builddir
1517
1618override_dh_install:
17− dh_install --fail-missing
19+ # install autopilot tests
20+ cd tests/autopilot; \
21+ set -ex; for python in $(shell pyversions -r); do \
22+ $$python setup.py install --root=$(CURDIR)/debian/tmp --install-layout=deb; \
23+ done; \
24+ cd $(CURDIR)
25+ dh_install -X'*.pyc' --fail-missing
26+
27+# use private lib directories
28+override_dh_makeshlibs:
29+ dh_makeshlibs -Nunity8-private -Nunity8-fake-env
1830
31+# libMockLightDM-qml.so links against liblightdm-qt5-2.so which doesn't exist
1932override_dh_shlibdeps:
2033 dh_shlibdeps -XlibMockLightDM-qml.so
34+
35+override_dh_gencontrol:
36+ dh_gencontrol -- -Vunity-default-masterscopes="$(SCOPES_RECOMMENDS)"
debian/scopes-recommends-generatornew file+27
@@ -0,0 +1,27 @@
1+#!/usr/bin/perl -w
2+
3+use strict;
4+binmode STDOUT, ":utf8";
5+use utf8;
6+
7+use JSON;
8+
9+my $json;
10+{
11+ local $/; #Enable 'slurp' mode
12+ open my $fh, "<", $ARGV[0];
13+ $json = <$fh>;
14+ close $fh;
15+}
16+# get it to a scalar
17+my $j = "[" . $json . "]";
18+
19+my $decoded_json = decode_json( $j );
20+
21+my $recommends_list = "";
22+for my $record ( @$decoded_json ) {
23+ foreach my $key ( keys(%$record) ) {
24+ $recommends_list = $recommends_list . $key . ", ";
25+ }
26+}
27+print $recommends_list;
debian/unity8-autopilot.install+2−2
@@ -1,2 +1,2 @@
1−tests/autopilot/unity8/* usr/lib/python2.7/dist-packages/unity8/
2−tests/autopilot/indicators_client/* usr/lib/python2.7/dist-packages/indicators_client/
1+usr/lib/python*/*/unity*
2+usr/lib/python*/*/indicators_client
debian/unity8-fake-env.install+1−1
@@ -1 +1 @@
1−/usr/share/unity8/plugins/mocks/*
1+usr/lib/*/unity8/qml/mocks
debian/unity8-private.installnew file+6
@@ -0,0 +1,6 @@
1+usr/lib/*/unity8/qml/HudClient
2+usr/lib/*/unity8/qml/LightDM
3+usr/lib/*/unity8/qml/ListViewWithPageHeader
4+usr/lib/*/unity8/qml/Ubuntu
5+usr/lib/*/unity8/qml/Unity
6+usr/lib/*/unity8/qml/Utils
debian/unity8.install+16−23
@@ -1,23 +1,16 @@
1−/usr/bin/unity8
2−/usr/share/applications/unity8.desktop
3−/usr/share/locale/*
4−/usr/share/unity8/Applications/*
5−/usr/share/unity8/Bottombar/*
6−/usr/share/unity8/Components/*
7−/usr/share/unity8/Dash/*
8−/usr/share/unity8/Greeter/*
9−/usr/share/unity8/Hud/*
10−/usr/share/unity8/Launcher/*
11−/usr/share/unity8/Notifications/*
12−/usr/share/unity8/Panel/*
13−/usr/share/unity8/Shell.qml
14−/usr/share/unity8/SideStage/*
15−/usr/share/unity8/graphics/*
16−/usr/share/unity8/modules/Unity/Indicators/*
17−/usr/share/unity8/plugins/HudClient/*
18−/usr/share/unity8/plugins/LightDM/*
19−/usr/share/unity8/plugins/ListViewWithPageHeader/*
20−/usr/share/unity8/plugins/Ubuntu/*
21−/usr/share/unity8/plugins/Unity/*
22−/usr/share/unity8/plugins/Utils/*
23−/usr/share/unity8/unity/indicators/*
1+usr/bin/unity8
2+usr/share/applications/unity8.desktop
3+usr/share/locale
4+usr/share/unity8/Applications
5+usr/share/unity8/Bottombar
6+usr/share/unity8/Components
7+usr/share/unity8/Dash
8+usr/share/unity8/Greeter
9+usr/share/unity8/Hud
10+usr/share/unity8/Launcher
11+usr/share/unity8/Notifications
12+usr/share/unity8/Panel
13+usr/share/unity8/Shell.qml
14+usr/share/unity8/SideStage
15+usr/share/unity8/graphics
16+usr/share/unity8/unity/indicators/*
main.cpp+8−9
@@ -40,10 +40,10 @@ void prependImportPaths(QQmlEngine *engine, const QStringList &paths)
4040 // don't duplicate
4141 const QString& path = paths[i];
4242 QStringList::iterator iter = qFind(importPathList.begin(), importPathList.end(), path);
43− if (iter == importPathList.end())
44− importPathList.prepend(path);
43+ if (iter == importPathList.end()) {
44+ engine->addImportPath(path);
45+ }
4546 }
46− engine->setImportPathList(importPathList);
4747}
4848
4949/* When you append and import path to the list of import paths it will be the *last*
@@ -55,10 +55,10 @@ void appendImportPaths(QQmlEngine *engine, const QStringList &paths)
5555 Q_FOREACH(const QString& path, paths) {
5656 // don't duplicate
5757 QStringList::iterator iter = qFind(importPathList.begin(), importPathList.end(), path);
58− if (iter == importPathList.end())
58+ if (iter == importPathList.end()) {
5959 importPathList.append(path);
60+ }
6061 }
61− importPathList.append(paths);
6262 engine->setImportPathList(importPathList);
6363}
6464
@@ -80,7 +80,7 @@ int main(int argc, char** argv)
8080 setenv("QML_FORCE_THREADED_RENDERER", "1", 1);
8181 setenv("QML_FIXED_ANIMATION_STEP", "1", 1);
8282
83− QGuiApplication::setApplicationName("Qml Phone Shell");
83+ QGuiApplication::setApplicationName("Unity 8");
8484 QGuiApplication application(argc, argv);
8585
8686 resolveIconTheme();
@@ -133,9 +133,8 @@ int main(int argc, char** argv)
133133 view->setProperty("role", 2); // INDICATOR_ACTOR_ROLE
134134
135135 QUrl source("Shell.qml");
136− prependImportPaths(view->engine(), QStringList() << ::shellAppDirectory());
137− prependImportPaths(view->engine(), ::shellImportPaths());
138− appendImportPaths(view->engine(), QStringList() << ::fakePluginsImportPath());
136+ prependImportPaths(view->engine(), ::overrideImportPaths());
137+ appendImportPaths(view->engine(), ::fallbackImportPaths());
139138 view->setSource(source);
140139 view->setColor("transparent");
141140
modules/CMakeLists.txtdeleted−1
@@ -1 +0,0 @@
1−add_subdirectory(Unity)
modules/Unity/CMakeLists.txtdeleted−1
@@ -1 +0,0 @@
1−add_subdirectory(Indicators)
paths.h.in+8−9
@@ -47,24 +47,23 @@ inline QString shellAppDirectory() {
4747 }
4848}
4949
50−inline QStringList shellImportPaths() {
50+inline QStringList overrideImportPaths() {
5151 QStringList paths;
52− if (isRunningInstalled()) {
53− paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/plugins");
54− paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/modules");
55− } else {
52+ if (!isRunningInstalled()) {
5653 paths << QString("@CMAKE_BINARY_DIR@/plugins");
57− paths << QString("@CMAKE_BINARY_DIR@/modules");
5854 }
5955 return paths;
6056}
6157
62−inline QString fakePluginsImportPath() {
58+inline QStringList fallbackImportPaths() {
59+ QStringList paths;
6360 if (isRunningInstalled()) {
64− return QString("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/plugins/mocks");
61+ paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_PRIVATE_LIBDIR@/qml");
62+ paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_PRIVATE_LIBDIR@/qml/mocks");
6563 } else {
66− return QString("@CMAKE_BINARY_DIR@/tests/mocks");
64+ paths << QString("@CMAKE_BINARY_DIR@/tests/mocks");
6765 }
66+ return paths;
6867}
6968
7069inline QStringList shellDataDirs() {
plugins/HudClient/CMakeLists.txt+2−2
@@ -41,9 +41,9 @@ file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
4141 )
4242
4343install(TARGETS HudClientQml
44− DESTINATION ${SHELL_APP_DIR}/plugins/HudClient
44+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/HudClient
4545 )
4646
4747install(FILES qmldir
48− DESTINATION ${SHELL_APP_DIR}/plugins/HudClient
48+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/HudClient
4949 )
plugins/LightDM/CMakeLists.txt+2−2
@@ -38,9 +38,9 @@ file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
3838 )
3939
4040install(TARGETS LightDM-qml
41− DESTINATION ${SHELL_APP_DIR}/plugins/LightDM
41+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/LightDM
4242 )
4343
4444install(FILES qmldir
45− DESTINATION ${SHELL_APP_DIR}/plugins/LightDM
45+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/LightDM
4646 )
plugins/ListViewWithPageHeader/CMakeLists.txt+2−2
@@ -36,9 +36,9 @@ file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
3636 )
3737
3838install(TARGETS ListViewWithPageHeader-qml
39− DESTINATION ${SHELL_APP_DIR}/plugins/ListViewWithPageHeader
39+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/ListViewWithPageHeader
4040 )
4141
4242install(FILES qmldir
43− DESTINATION ${SHELL_APP_DIR}/plugins/ListViewWithPageHeader
43+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/ListViewWithPageHeader
4444 )
plugins/Ubuntu/Gestures/CMakeLists.txt+2−2
@@ -27,9 +27,9 @@ add_custom_target(UbuntuGestureQmlDirFile ALL
2727)
2828
2929install(TARGETS UbuntuGestureQml
30− DESTINATION ${SHELL_APP_DIR}/plugins/Ubuntu/Gestures
30+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/Ubuntu/Gestures
3131 )
3232
3333install(FILES qmldir
34− DESTINATION ${SHELL_APP_DIR}/plugins/Ubuntu/Gestures
34+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/Ubuntu/Gestures
3535 )
plugins/Unity/CMakeLists.txt+4−2
@@ -1,3 +1,5 @@
1+add_subdirectory(Indicators)
2+
13# Dependencies
24include(FindPkgConfig)
35pkg_check_modules(QTDEE REQUIRED libdee-qt5)
@@ -49,9 +51,9 @@ file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
4951 )
5052
5153install(TARGETS Unity-qml
52− DESTINATION ${SHELL_APP_DIR}/plugins/Unity
54+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/Unity
5355 )
5456
5557install(FILES qmldir
56− DESTINATION ${SHELL_APP_DIR}/plugins/Unity
58+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/Unity
5759 )
modules/Unity/Indicators/CMakeLists.txt → plugins/Unity/Indicators/CMakeLists.txtrenamed+1−1
@@ -48,5 +48,5 @@ target_link_libraries(IndicatorsQml
4848qt5_use_modules(IndicatorsQml Core Qml Quick)
4949
5050install(TARGETS IndicatorsQml
51− DESTINATION ${SHELL_APP_DIR}/modules/Unity/Indicators
51+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/Unity/Indicators
5252 )
modules/Unity/Indicators/Messaging/CMakeLists.txt → plugins/Unity/Indicators/Messaging/CMakeLists.txtrenamed

The content is the same.

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

The content is the same.

modules/Unity/Indicators/Messaging/qml/ActionTextField.qml → plugins/Unity/Indicators/Messaging/qml/ActionTextField.qmlrenamed

The content is the same.

modules/Unity/Indicators/Messaging/qml/CMakeLists.txt → plugins/Unity/Indicators/Messaging/qml/CMakeLists.txtrenamed+2−2
@@ -6,10 +6,10 @@ file(GLOB IndicatorsMessaging_QMLFILES
66
77# copy qml & qmldir files into build directory for shadow builds
88add_custom_target(UnityIndicatorsMessagingQmlFiles ALL
9− COMMAND cp ${IndicatorsMessaging_QMLFILES} ${CMAKE_BINARY_DIR}/modules/Unity/Indicators/Messaging
9+ COMMAND cp ${IndicatorsMessaging_QMLFILES} ${CMAKE_BINARY_DIR}/plugins/Unity/Indicators/Messaging
1010 DEPENDS ${IndicatorsMessaging_QMLFILES}
1111)
1212
1313install(FILES ${IndicatorsMessaging_QMLFILES}
14− DESTINATION ${SHELL_APP_DIR}/modules/Unity/Indicators/Messaging
14+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/Unity/Indicators/Messaging
1515)
modules/Unity/Indicators/Messaging/qml/GroupedMessage.qml → plugins/Unity/Indicators/Messaging/qml/GroupedMessage.qmlrenamed

The content is the same.

modules/Unity/Indicators/Messaging/qml/HeroMessage.qml → plugins/Unity/Indicators/Messaging/qml/HeroMessage.qmlrenamed

The content is the same.

modules/Unity/Indicators/Messaging/qml/HeroMessageHeader.qml → plugins/Unity/Indicators/Messaging/qml/HeroMessageHeader.qmlrenamed

The content is the same.

modules/Unity/Indicators/Messaging/qml/MessageMenuItem.qml → plugins/Unity/Indicators/Messaging/qml/MessageMenuItem.qmlrenamed

The content is the same.

modules/Unity/Indicators/Messaging/qml/QuickReply.qml → plugins/Unity/Indicators/Messaging/qml/QuickReply.qmlrenamed

The content is the same.

modules/Unity/Indicators/Messaging/qml/SimpleTextMessage.qml → plugins/Unity/Indicators/Messaging/qml/SimpleTextMessage.qmlrenamed

The content is the same.

modules/Unity/Indicators/Messaging/qml/SnapDecision.qml → plugins/Unity/Indicators/Messaging/qml/SnapDecision.qmlrenamed

The content is the same.

modules/Unity/Indicators/Messaging/qml/TextMessage.qml → plugins/Unity/Indicators/Messaging/qml/TextMessage.qmlrenamed

The content is the same.

modules/Unity/Indicators/Messaging/qml/qmldir → plugins/Unity/Indicators/Messaging/qml/qmldirrenamed

The content is the same.

modules/Unity/Indicators/Messaging/qml/utils.js → plugins/Unity/Indicators/Messaging/qml/utils.jsrenamed

The content is the same.

modules/Unity/Indicators/Network/CMakeLists.txt → plugins/Unity/Indicators/Network/CMakeLists.txtrenamed+1−1
@@ -33,7 +33,7 @@ if(LIBNM_GLIB_FOUND AND LIBNM_UTIL_FOUND AND GLIB_FOUND)
3333 )
3434
3535 install(TARGETS IndicatorsNetworkQml
36− DESTINATION ${SHELL_APP_DIR}/modules/Unity/Indicators/Network
36+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/Unity/Indicators/Network
3737 )
3838else()
3939 message(WARNING "Missing glib or libnm dependency for the network plugin, not building")
modules/Unity/Indicators/Network/networkagent.cpp → plugins/Unity/Indicators/Network/networkagent.cpprenamed

The content is the same.

modules/Unity/Indicators/Network/networkagent.h → plugins/Unity/Indicators/Network/networkagent.hrenamed

The content is the same.

modules/Unity/Indicators/Network/plugin.cpp → plugins/Unity/Indicators/Network/plugin.cpprenamed

The content is the same.

modules/Unity/Indicators/Network/plugin.h → plugins/Unity/Indicators/Network/plugin.hrenamed

The content is the same.

modules/Unity/Indicators/Network/qml/AccessPoint.qml → plugins/Unity/Indicators/Network/qml/AccessPoint.qmlrenamed

The content is the same.

modules/Unity/Indicators/Network/qml/CMakeLists.txt → plugins/Unity/Indicators/Network/qml/CMakeLists.txtrenamed+2−2
@@ -6,10 +6,10 @@ file(GLOB IndicatorsNetwork_QMLFILES
66
77# copy qml & qmldir files into build directory for shadow builds
88add_custom_target(UnityIndicatorsNetworkQmlFiles ALL
9− COMMAND cp ${IndicatorsNetwork_QMLFILES} ${CMAKE_BINARY_DIR}/modules/Unity/Indicators/Network
9+ COMMAND cp ${IndicatorsNetwork_QMLFILES} ${CMAKE_BINARY_DIR}/plugins/Unity/Indicators/Network
1010 DEPENDS ${IndicatorsNetwork_QMLFILES}
1111)
1212
1313install(FILES ${IndicatorsNetwork_QMLFILES}
14− DESTINATION ${SHELL_APP_DIR}/modules/Unity/Indicators/Network
14+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/Unity/Indicators/Network
1515)
modules/Unity/Indicators/Network/qml/PasswordPage.qml → plugins/Unity/Indicators/Network/qml/PasswordPage.qmlrenamed

The content is the same.

modules/Unity/Indicators/Network/qml/PasswordTextField.qml → plugins/Unity/Indicators/Network/qml/PasswordTextField.qmlrenamed

The content is the same.

modules/Unity/Indicators/Network/qml/WifiSection.qml → plugins/Unity/Indicators/Network/qml/WifiSection.qmlrenamed

The content is the same.

modules/Unity/Indicators/Network/qml/qmldir → plugins/Unity/Indicators/Network/qml/qmldirrenamed

The content is the same.

modules/Unity/Indicators/Network/secret-agent.c → plugins/Unity/Indicators/Network/secret-agent.crenamed

The content is the same.

modules/Unity/Indicators/Network/secret-agent.h → plugins/Unity/Indicators/Network/secret-agent.hrenamed

The content is the same.

modules/Unity/Indicators/flatmenuproxymodel.cpp → plugins/Unity/Indicators/flatmenuproxymodel.cpprenamed

The content is the same.

modules/Unity/Indicators/flatmenuproxymodel.h → plugins/Unity/Indicators/flatmenuproxymodel.hrenamed

The content is the same.

modules/Unity/Indicators/indicator.cpp → plugins/Unity/Indicators/indicator.cpprenamed

The content is the same.

modules/Unity/Indicators/indicator.h → plugins/Unity/Indicators/indicator.hrenamed

The content is the same.

modules/Unity/Indicators/indicators.h → plugins/Unity/Indicators/indicators.hrenamed

The content is the same.

modules/Unity/Indicators/indicatorsmanager.cpp → plugins/Unity/Indicators/indicatorsmanager.cpprenamed

The content is the same.

modules/Unity/Indicators/indicatorsmanager.h → plugins/Unity/Indicators/indicatorsmanager.hrenamed

The content is the same.

modules/Unity/Indicators/indicatorsmodel.cpp → plugins/Unity/Indicators/indicatorsmodel.cpprenamed

The content is the same.

modules/Unity/Indicators/indicatorsmodel.h → plugins/Unity/Indicators/indicatorsmodel.hrenamed

The content is the same.

modules/Unity/Indicators/plugin.cpp → plugins/Unity/Indicators/plugin.cpprenamed

The content is the same.

modules/Unity/Indicators/plugin.h → plugins/Unity/Indicators/plugin.hrenamed

The content is the same.

modules/Unity/Indicators/qml/BasicMenuItem.qml → plugins/Unity/Indicators/qml/BasicMenuItem.qmlrenamed

The content is the same.

modules/Unity/Indicators/qml/ButtonMenuItem.qml → plugins/Unity/Indicators/qml/ButtonMenuItem.qmlrenamed

The content is the same.

modules/Unity/Indicators/qml/CMakeLists.txt → plugins/Unity/Indicators/qml/CMakeLists.txtrenamed+2−2
@@ -5,10 +5,10 @@ file(GLOB Indicators_QMLFILES
55
66# copy qml & qmldir files into build directory for shadow builds
77add_custom_target(UnityIndicatorsQmlFiles ALL
8− COMMAND cp ${Indicators_QMLFILES} ${CMAKE_BINARY_DIR}/modules/Unity/Indicators
8+ COMMAND cp ${Indicators_QMLFILES} ${CMAKE_BINARY_DIR}/plugins/Unity/Indicators
99 DEPENDS ${Indicators_QMLFILES}
1010)
1111
1212install(FILES ${Indicators_QMLFILES}
13− DESTINATION ${SHELL_APP_DIR}/modules/Unity/Indicators
13+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/Unity/Indicators
1414)
modules/Unity/Indicators/qml/DivMenuItem.qml → plugins/Unity/Indicators/qml/DivMenuItem.qmlrenamed

The content is the same.

modules/Unity/Indicators/qml/HLine.qml → plugins/Unity/Indicators/qml/HLine.qmlrenamed

The content is the same.

modules/Unity/Indicators/qml/IndicatorBase.qml → plugins/Unity/Indicators/qml/IndicatorBase.qmlrenamed

The content is the same.

modules/Unity/Indicators/qml/IndicatorPage.qml → plugins/Unity/Indicators/qml/IndicatorPage.qmlrenamed

The content is the same.

modules/Unity/Indicators/qml/IndicatorWidget.qml → plugins/Unity/Indicators/qml/IndicatorWidget.qmlrenamed

The content is the same.

modules/Unity/Indicators/qml/MenuAction.qml → plugins/Unity/Indicators/qml/MenuAction.qmlrenamed

The content is the same.

modules/Unity/Indicators/qml/MenuActionBinding.qml → plugins/Unity/Indicators/qml/MenuActionBinding.qmlrenamed

The content is the same.

modules/Unity/Indicators/qml/MenuItem.qml → plugins/Unity/Indicators/qml/MenuItem.qmlrenamed

The content is the same.

modules/Unity/Indicators/qml/MenuItemFactory.qml → plugins/Unity/Indicators/qml/MenuItemFactory.qmlrenamed

The content is the same.

modules/Unity/Indicators/qml/ProgressMenuItem.qml → plugins/Unity/Indicators/qml/ProgressMenuItem.qmlrenamed

The content is the same.

modules/Unity/Indicators/qml/RemoveBackground.qml → plugins/Unity/Indicators/qml/RemoveBackground.qmlrenamed

The content is the same.

modules/Unity/Indicators/qml/SectionMenuItem.qml → plugins/Unity/Indicators/qml/SectionMenuItem.qmlrenamed

The content is the same.

modules/Unity/Indicators/qml/SliderMenuItem.qml → plugins/Unity/Indicators/qml/SliderMenuItem.qmlrenamed

The content is the same.

modules/Unity/Indicators/qml/SwitchMenuItem.qml → plugins/Unity/Indicators/qml/SwitchMenuItem.qmlrenamed

The content is the same.

modules/Unity/Indicators/qml/qmldir → plugins/Unity/Indicators/qml/qmldirrenamed

The content is the same.

modules/Unity/Indicators/resources/artwork/messaging/default_app.svg → plugins/Unity/Indicators/resources/artwork/messaging/default_app.svgrenamed

The content is the same.

modules/Unity/Indicators/resources/artwork/messaging/default_contact.png → plugins/Unity/Indicators/resources/artwork/messaging/default_contact.pngrenamed

Binary file not shown.

modules/Unity/Indicators/resources/artwork/messaging/message_sms01_54px.png → plugins/Unity/Indicators/resources/artwork/messaging/message_sms01_54px.pngrenamed

Binary file not shown.

modules/Unity/Indicators/resources/indicators.qrc → plugins/Unity/Indicators/resources/indicators.qrcrenamed

The content is the same.

plugins/Utils/CMakeLists.txt+2−2
@@ -29,9 +29,9 @@ file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
2929 )
3030
3131install(TARGETS Utils-qml
32− DESTINATION ${SHELL_APP_DIR}/plugins/Utils
32+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/Utils
3333 )
3434
3535install(FILES qmldir
36− DESTINATION ${SHELL_APP_DIR}/plugins/Utils
36+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/Utils
3737 )
plugins/Utils/applicationpaths.h+2−2
@@ -29,8 +29,8 @@ class ApplicationPaths : public QObject
2929public:
3030 Q_INVOKABLE bool isRunningInstalled() const { return ::isRunningInstalled(); }
3131 Q_INVOKABLE QString shellAppDirectory() const { return ::shellAppDirectory(); }
32− Q_INVOKABLE QStringList shellImportPaths() const { return ::shellImportPaths(); }
33− Q_INVOKABLE QString fakePluginsImportPath() const { return ::fakePluginsImportPath(); }
32+ Q_INVOKABLE QStringList overrideImportPaths() const { return ::overrideImportPaths(); }
33+ Q_INVOKABLE QStringList fallbackImportPaths() const { return ::fallbackImportPaths(); }
3434 Q_INVOKABLE QStringList shellDataDirs() const { return ::shellDataDirs(); }
3535 Q_INVOKABLE QString sourceDirectory() const { return ::sourceDirectory(); }
3636};
run_on_device+2−3
@@ -86,16 +86,15 @@ build() {
8686
8787run() {
8888 SERVICEFILE="${CHROOT_PREFIX}/etc/device-services"
89− adb shell "egrep '$BINARY|qml-phone-shell' $SERVICEFILE"
89+ adb shell "egrep '$BINARY' $SERVICEFILE"
9090 CONTAINS_SHELL=$?
9191 if [ $CONTAINS_SHELL -eq 0 ]; then
9292 echo "Modifying $SERVICEFILE on device. Old contents will be saved in $SERVICEFILE.backup"
9393 adb shell cp $SERVICEFILE $SERVICEFILE.backup
94− adb shell sed -i "/$BINARY\\\\\|qml-phone-shell/d" $SERVICEFILE
94+ adb shell sed -i "/$BINARY/d" $SERVICEFILE
9595 if $FLIPPED; then exec_with_adb /usr/bin/service ubuntu-touch-session restart
9696 else exec_with_adb /usr/bin/service ubuntu-session restart; fi
9797 fi
98− adb shell pkill qml-phone-shell
9998 adb shell pkill $BINARY
10099 ARGS="--nomousetouch"
101100 if $GDB; then
src/Panel/Indicators/client/CMakeLists.txt−9
@@ -23,12 +23,3 @@ set_target_properties(${INDICATORS_CLIENT_APP} PROPERTIES COMPILE_FLAGS -fPIC)
2323
2424install(TARGETS ${INDICATORS_CLIENT_APP}
2525 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
26−
27−file(GLOB IndicatorsClient_QMLFILES
28− *.qml
29− *.js
30−)
31−
32−install(FILES ${IndicatorsClient_QMLFILES}
33− DESTINATION ${SHELL_APP_DIR}/Panel/Indicators/client
34−)
src/Panel/Indicators/client/indicatorsclient.cpp+1−1
@@ -55,7 +55,7 @@ void IndicatorsClient::setupUI()
5555{
5656 m_view = new QQuickView;
5757 m_view->engine()->setBaseUrl(QUrl::fromLocalFile(::shellAppDirectory()+"Panel/Indicators/client/"));
58− prependImportPaths(m_view->engine(), ::shellImportPaths());
58+ prependImportPaths(m_view->engine(), ::overrideImportPaths());
5959
6060 m_view->setSource(QUrl("IndicatorsClient.qml"));
6161 m_view->setResizeMode(QQuickView::SizeRootObjectToView);
tests/CMakeLists.txt−1
@@ -11,6 +11,5 @@ add_subdirectory(qmltests)
1111add_subdirectory(mocks)
1212add_subdirectory(whitespace)
1313add_subdirectory(plugins)
14−add_subdirectory(modules)
1514add_subdirectory(utils)
1615add_subdirectory(uqmlscene)
tests/autopilot/indicators_client/tests/__init__.py−2
@@ -47,11 +47,9 @@ class IndicatorsTestCase(AutopilotTestCase):
4747 self.launch_test_local()
4848
4949 def launch_test_local(self):
50− os.environ['QML2_IMPORT_PATH'] = "../../builddir/plugins:../../builddir/modules"
5150 self.app = self.launch_test_application("../../builddir/src/Panel/Indicators/client/indicators-client", app_type='qt')
5251
5352 def launch_test_installed(self):
54− os.environ['QML2_IMPORT_PATH'] = "/usr/share/unity8/plugins:/usr/share/unity8/modules"
5553 self.app = self.launch_test_application("indicators-client", app_type='qt')
5654
5755 def skipWrapper(*args, **kwargs):
tests/autopilot/setup.pynew file+21
@@ -0,0 +1,21 @@
1+#!/usr/bin/python
2+
3+# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
4+# Copyright 2013 Canonical
5+#
6+# This program is free software: you can redistribute it and/or modify it
7+# under the terms of the GNU General Public License version 3, as published
8+# by the Free Software Foundation.
9+
10+
11+from distutils.core import setup
12+from setuptools import find_packages
13+
14+setup(
15+ name='unity',
16+ version='8.0',
17+ description='Unity 8 autopilot tests.',
18+ url='https://launchpad.net/unity',
19+ license='GPLv3',
20+ packages=find_packages(),
21+)
tests/autopilot/unity8/tests/__init__.py+6−4
@@ -8,6 +8,7 @@
88"""unity8 autopilot tests."""
99
1010import os.path
11+import sysconfig
1112
1213from autopilot.testcase import AutopilotTestCase
1314from autopilot.matchers import Eventually
@@ -23,6 +24,7 @@ class ShellTestCase(AutopilotTestCase):
2324
2425 """A common test case class that provides several useful methods for shell tests."""
2526
27+ libdir = "/usr/lib/{0}/unity8".format(sysconfig.get_config_var('MULTIARCH'))
2628 lightdm_mock = "full"
2729
2830 def setUp(self, geometry, grid_size):
@@ -39,8 +41,8 @@ class ShellTestCase(AutopilotTestCase):
3941 self.launch_test_local(geometry)
4042
4143 def launch_test_local(self, geometry):
42− os.environ['LD_LIBRARY_PATH'] = "../../../unity_build/build/lib:../../builddir/tests/mocks/libusermetrics:../../builddir/tests/mocks/LightDM/" + self.lightdm_mock
43− os.environ['QML2_IMPORT_PATH'] = "../../builddir/tests/mocks:../../builddir/plugins:../../builddir/modules"
44+ os.environ['LD_LIBRARY_PATH'] = "../../builddir/tests/mocks/libusermetrics:../../builddir/tests/mocks/LightDM" + self.lightdm_mock
45+ os.environ['QML2_IMPORT_PATH'] = "../../builddir/tests/mocks"
4446 if geometry != "0x0":
4547 self.app = self.launch_test_application(
4648 "../../builddir/unity8", "-geometry", geometry, "-frameless", app_type='qt')
@@ -49,8 +51,8 @@ class ShellTestCase(AutopilotTestCase):
4951 "../../builddir/unity8", "-fullscreen", app_type='qt')
5052
5153 def launch_test_installed(self, geometry):
52− os.environ['LD_LIBRARY_PATH'] = "/usr/share/unity8/plugins/mocks/libusermetrics:/usr/share/unity8/plugins/mocks/LightDM/" + self.lightdm_mock
53− os.environ['QML2_IMPORT_PATH'] = "/usr/share/unity8/plugins/mocks:/usr/share/unity8/plugins:/usr/share/unity8/modules"
54+ os.environ['LD_LIBRARY_PATH'] = "{0}/qml/mocks/libusermetrics:{0}/qml/mocks/LightDM/{1}".format(self.libdir, self.lightdm_mock)
55+ os.environ['QML2_IMPORT_PATH'] = "{0}/qml/mocks".format(self.libdir)
5456 if model() == 'Desktop' and geometry != "0x0":
5557 self.app = self.launch_test_application(
5658 "unity8", "-geometry", geometry, "-frameless", app_type='qt')
tests/mocks/CMakeLists.txt+2
@@ -1,3 +1,5 @@
11add_subdirectory(libusermetrics)
22add_subdirectory(LightDM)
33add_subdirectory(Ubuntu)
4+add_subdirectory(Unity)
5+add_subdirectory(HudClient)
tests/qmltests/plugins/HudClient/CMakeLists.txt → tests/mocks/HudClient/CMakeLists.txtrenamed

The content is the same.

tests/qmltests/plugins/HudClient/fake_hud_plugin.cpp → tests/mocks/HudClient/fake_hud_plugin.cpprenamed

The content is the same.

tests/qmltests/plugins/HudClient/fake_hud_plugin.h → tests/mocks/HudClient/fake_hud_plugin.hrenamed

The content is the same.

tests/qmltests/plugins/HudClient/fake_libhud_client.cpp → tests/mocks/HudClient/fake_libhud_client.cpprenamed

The content is the same.

tests/qmltests/plugins/HudClient/libhud_client_stub.cpp → tests/mocks/HudClient/libhud_client_stub.cpprenamed

The content is the same.

tests/qmltests/plugins/HudClient/libhud_client_stub.h → tests/mocks/HudClient/libhud_client_stub.hrenamed

The content is the same.

tests/qmltests/plugins/HudClient/qmldir → tests/mocks/HudClient/qmldirrenamed

The content is the same.

tests/mocks/LightDM/CMakeLists.txt+2−2
@@ -47,9 +47,9 @@ file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
4747 )
4848
4949install(TARGETS MockLightDM-qml
50− DESTINATION ${SHELL_APP_DIR}/plugins/mocks/LightDM
50+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/mocks/LightDM
5151 )
5252
5353install(FILES qmldir
54− DESTINATION ${SHELL_APP_DIR}/plugins/mocks/LightDM
54+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/mocks/LightDM
5555 )
tests/mocks/LightDM/full/CMakeLists.txt+1−1
@@ -14,5 +14,5 @@ set_target_properties(MockLightDM-full PROPERTIES
1414 OUTPUT_NAME lightdm-qt5-2)
1515
1616install(TARGETS MockLightDM-full
17− DESTINATION ${SHELL_APP_DIR}/plugins/mocks/LightDM/full
17+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/mocks/LightDM/full
1818 )
tests/mocks/LightDM/single-passphrase/CMakeLists.txt+1−1
@@ -15,5 +15,5 @@ set_target_properties(MockLightDM-single-passphrase PROPERTIES
1515 OUTPUT_NAME lightdm-qt5-2)
1616
1717install(TARGETS MockLightDM-single-passphrase
18− DESTINATION ${SHELL_APP_DIR}/plugins/mocks/LightDM/single-passphrase
18+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/mocks/LightDM/single-passphrase
1919 )
tests/mocks/LightDM/single-pin/CMakeLists.txt+1−1
@@ -15,5 +15,5 @@ set_target_properties(MockLightDM-single-pin PROPERTIES
1515 OUTPUT_NAME lightdm-qt5-2)
1616
1717install(TARGETS MockLightDM-single-pin
18− DESTINATION ${SHELL_APP_DIR}/plugins/mocks/LightDM/single-pin
18+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/mocks/LightDM/single-pin
1919 )
tests/mocks/LightDM/single/CMakeLists.txt+1−1
@@ -14,5 +14,5 @@ set_target_properties(MockLightDM-single PROPERTIES
1414 OUTPUT_NAME lightdm-qt5-2)
1515
1616install(TARGETS MockLightDM-single
17− DESTINATION ${SHELL_APP_DIR}/plugins/mocks/LightDM/single
17+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/mocks/LightDM/single
1818 )
tests/mocks/Ubuntu/Application/CMakeLists.txt+2−2
@@ -27,9 +27,9 @@ add_custom_target(InputFilterAreaQmlFile ALL
2727)
2828
2929install(TARGETS FakeUbuntuApplicationQml
30− DESTINATION ${SHELL_APP_DIR}/plugins/mocks/Ubuntu/Application
30+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/mocks/Ubuntu/Application
3131 )
3232
3333install(FILES qmldir InputFilterArea.qml
34− DESTINATION ${SHELL_APP_DIR}/plugins/mocks/Ubuntu/Application
34+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/mocks/Ubuntu/Application
3535 )
tests/qmltests/plugins/Unity/CMakeLists.txt → tests/mocks/Unity/CMakeLists.txtrenamed+2
@@ -1,5 +1,7 @@
11set(CMAKE_AUTOMOC ON)
22
3+add_subdirectory(Indicators)
4+
35include(FindPkgConfig)
46find_package(Qt5Core REQUIRED)
57find_package(Qt5Quick REQUIRED)
tests/qmltests/modules/Unity/Indicators/CMakeLists.txt → tests/mocks/Unity/Indicators/CMakeLists.txtrenamed+2−2
@@ -6,12 +6,12 @@ find_package(Qt5Quick REQUIRED)
66include_directories(
77 ${CMAKE_CURRENT_SOURCE_DIR}
88 ${CMAKE_CURRENT_BINARY_DIR}
9− ${CMAKE_SOURCE_DIR}/modules/Unity/Indicators
9+ ${CMAKE_SOURCE_DIR}/plugins/Unity/Indicators
1010)
1111
1212set(IndicatorsFakeQml_SOURCES
1313 fakeplugin.cpp
14− ${CMAKE_SOURCE_DIR}/modules/Unity/Indicators/indicators.h
14+ ${CMAKE_SOURCE_DIR}/plugins/Unity/Indicators/indicators.h
1515)
1616
1717set(IndicatorsFakeQml_RESOURCES
tests/qmltests/modules/Unity/Indicators/IndicatorsModel.qml → tests/mocks/Unity/Indicators/IndicatorsModel.qmlrenamed

The content is the same.

tests/qmltests/modules/Unity/Indicators/fakeplugin.cpp → tests/mocks/Unity/Indicators/fakeplugin.cpprenamed

The content is the same.

tests/qmltests/modules/Unity/Indicators/fakeplugin.h → tests/mocks/Unity/Indicators/fakeplugin.hrenamed

The content is the same.

tests/qmltests/modules/Unity/Indicators/indicators_fake.qrc → tests/mocks/Unity/Indicators/indicators_fake.qrcrenamed

The content is the same.

tests/qmltests/modules/Unity/Indicators/qml/FakeMenuPage.qml → tests/mocks/Unity/Indicators/qml/FakeMenuPage.qmlrenamed

The content is the same.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page1.qml → tests/mocks/Unity/Indicators/qml/fake_menu_page1.qmlrenamed

The content is the same.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page2.qml → tests/mocks/Unity/Indicators/qml/fake_menu_page2.qmlrenamed

The content is the same.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page3.qml → tests/mocks/Unity/Indicators/qml/fake_menu_page3.qmlrenamed

The content is the same.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page4.qml → tests/mocks/Unity/Indicators/qml/fake_menu_page4.qmlrenamed

The content is the same.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_page5.qml → tests/mocks/Unity/Indicators/qml/fake_menu_page5.qmlrenamed

The content is the same.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget1.qml → tests/mocks/Unity/Indicators/qml/fake_menu_widget1.qmlrenamed

The content is the same.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget2.qml → tests/mocks/Unity/Indicators/qml/fake_menu_widget2.qmlrenamed

The content is the same.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget3.qml → tests/mocks/Unity/Indicators/qml/fake_menu_widget3.qmlrenamed

The content is the same.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget4.qml → tests/mocks/Unity/Indicators/qml/fake_menu_widget4.qmlrenamed

The content is the same.

tests/qmltests/modules/Unity/Indicators/qml/fake_menu_widget5.qml → tests/mocks/Unity/Indicators/qml/fake_menu_widget5.qmlrenamed

The content is the same.

tests/qmltests/modules/Unity/Indicators/qmldir → tests/mocks/Unity/Indicators/qmldirrenamed

The content is the same.

tests/qmltests/plugins/Unity/Notifications/notification.js → tests/mocks/Unity/Notifications/notification.jsrenamed

The content is the same.

tests/qmltests/plugins/Unity/Notifications/qmldir → tests/mocks/Unity/Notifications/qmldirrenamed

The content is the same.

tests/qmltests/plugins/Unity/fake_launchermodel.cpp → tests/mocks/Unity/fake_launchermodel.cpprenamed

The content is the same.

tests/qmltests/plugins/Unity/fake_launchermodel.h → tests/mocks/Unity/fake_launchermodel.hrenamed

The content is the same.

tests/qmltests/plugins/Unity/fake_scope.cpp → tests/mocks/Unity/fake_scope.cpprenamed

The content is the same.

tests/qmltests/plugins/Unity/fake_scope.h → tests/mocks/Unity/fake_scope.hrenamed

The content is the same.

tests/qmltests/plugins/Unity/fake_scopes.cpp → tests/mocks/Unity/fake_scopes.cpprenamed

The content is the same.

tests/qmltests/plugins/Unity/fake_scopes.h → tests/mocks/Unity/fake_scopes.hrenamed

The content is the same.

tests/qmltests/plugins/Unity/fake_unity_plugin.cpp → tests/mocks/Unity/fake_unity_plugin.cpprenamed

The content is the same.

tests/qmltests/plugins/Unity/fake_unity_plugin.h → tests/mocks/Unity/fake_unity_plugin.hrenamed

The content is the same.

tests/qmltests/plugins/Unity/qmldir → tests/mocks/Unity/qmldirrenamed

The content is the same.

tests/mocks/libusermetrics/CMakeLists.txt+1−1
@@ -13,5 +13,5 @@ set_target_properties(MockUserMetrics PROPERTIES
1313 VERSION 1)
1414
1515install(TARGETS MockUserMetrics
16− DESTINATION ${SHELL_APP_DIR}/plugins/mocks/libusermetrics
16+ DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/mocks/libusermetrics
1717 )
tests/modules/CMakeLists.txtdeleted−1
@@ -1 +0,0 @@
1−add_subdirectory(Unity)
tests/modules/Unity/CMakeLists.txtdeleted−1
@@ -1 +0,0 @@
1−add_subdirectory(Indicators)
tests/plugins/Unity/CMakeLists.txt+2
@@ -1,3 +1,5 @@
1+add_subdirectory(Indicators)
2+
13pkg_check_modules(UNITYCORE REQUIRED unity-core-6.0)
24pkg_check_modules(LIBUNITYPROTO REQUIRED unity-protocol-private)
35
tests/modules/Unity/Indicators/CMakeLists.txt → tests/plugins/Unity/Indicators/CMakeLists.txtrenamed+1−1
@@ -1,6 +1,6 @@
11include_directories(
22 ${CMAKE_CURRENT_BINARY_DIR}
3− ${CMAKE_CURRENT_SOURCE_DIR}/../../../../modules/Unity/Indicators
3+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../../plugins/Unity/Indicators
44 )
55
66macro(run_tests)
tests/modules/Unity/Indicators/indicatorsmanagertest.cpp → tests/plugins/Unity/Indicators/indicatorsmanagertest.cpprenamed

The content is the same.

tests/modules/Unity/Indicators/indicatorsmodeltest.cpp → tests/plugins/Unity/Indicators/indicatorsmodeltest.cpprenamed

The content is the same.

tests/qmltests/CMakeLists.txt+11−14
@@ -1,14 +1,11 @@
11# add_qml_test macro
22include(QmlTest)
33
4−add_subdirectory(modules)
5−add_subdirectory(plugins)
64add_subdirectory(Components)
75
86set(qmltest_DEFAULT_IMPORT_PATHS
9− ${CMAKE_CURRENT_BINARY_DIR}/plugins
10− ${CMAKE_CURRENT_BINARY_DIR}/modules
117 ${CMAKE_BINARY_DIR}/tests/utils/modules
8+ ${CMAKE_BINARY_DIR}/tests/mocks
129)
1310
1411set(qmltest_DEFAULT_TARGETS qmlunittests)
@@ -45,26 +42,26 @@ add_qml_test(Dash DashBar IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${CMAKE_CURRE
4542add_qml_test(Dash DashContent IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS})
4643add_qml_test(Dash DashPreview)
4744add_qml_test(Dash GenericScopeView IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
48−add_qml_test(Dash ScopeView IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${CMAKE_CURRENT_BINARY_DIR}/plugins)
45+add_qml_test(Dash ScopeView IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
4946add_qml_test(Dash FilterGrids IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins ${CMAKE_CURRENT_SOURCE_DIR}/plugins
5047 ${CMAKE_BINARY_DIR}/tests/mocks)
5148add_qml_test(Dash/Apps RunningApplicationsGrid IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
52−add_qml_test(Greeter Lockscreen IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins ${CMAKE_BINARY_DIR}/tests/mocks
53− ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
54−add_qml_test(Greeter Tablet IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins ${CMAKE_BINARY_DIR}/tests/mocks
49+add_qml_test(Greeter Lockscreen IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
50+ PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
51+add_qml_test(Greeter Tablet IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
5552 ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
56−add_qml_test(Greeter Phone IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins ${CMAKE_BINARY_DIR}/tests/mocks
53+add_qml_test(Greeter Phone IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
5754 ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single")
58−add_qml_test(Greeter Infographics IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins ${CMAKE_BINARY_DIR}/tests/mocks
55+add_qml_test(Greeter Infographics IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
5956 ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
6057add_qml_test(Hud Hud)
6158add_qml_test(Hud Result)
6259add_qml_test(Launcher Launcher IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
63−add_qml_test(Notifications Notifications IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_CURRENT_SOURCE_DIR}/plugins)
64−add_qml_test(Panel IndicatorRow IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
60+add_qml_test(Notifications Notifications IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_SOURCE_DIR}/tests/mocks)
61+add_qml_test(Panel IndicatorRow)
6562add_qml_test(Panel Indicators IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
66−add_qml_test(Panel MenuContent IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
67−add_qml_test(Panel Overview IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
63+add_qml_test(Panel MenuContent)
64+add_qml_test(Panel Overview)
6865add_qml_test(Panel Panel IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
6966add_qml_test(Panel SearchIndicator)
7067add_qml_test(Panel/Menus IndicatorMenuWindow IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS})
tests/qmltests/Notifications/tst_Notifications.qml+48−7
@@ -53,7 +53,10 @@ Row {
5353 icon: "../graphics/avatars/funky.png",
5454 secondaryIcon: "../graphics/applicationIcons/facebook.png",
5555 actions: [{ id: "ok_id", label: "Ok"},
56− { id: "cancel_id", label: "Cancel"}]
56+ { id: "cancel_id", label: "Cancel"},
57+ { id: "notreally_id", label: "Not really"},
58+ { id: "noway_id", label: "No way"},
59+ { id: "nada_id", label: "Nada"}]
5760 }
5861
5962 mockModel.append(n)
@@ -132,7 +135,7 @@ Row {
132135 id: interactiveControls
133136
134137 width: units.gu(30)
135− height: units.gu(71)
138+ height: units.gu(81)
136139 color: "grey"
137140
138141 Column {
@@ -193,7 +196,10 @@ Row {
193196 icon: "../graphics/avatars/funky.png",
194197 secondaryIcon: "../graphics/applicationIcons/facebook.png",
195198 actions: [{ id: "ok_id", label: "Ok"},
196− { id: "cancel_id", label: "Cancel"}],
199+ { id: "cancel_id", label: "Cancel"},
200+ { id: "notreally_id", label: "Not really"},
201+ { id: "noway_id", label: "No way"},
202+ { id: "nada_id", label: "Nada"}],
197203 summaryVisible: true,
198204 bodyVisible: true,
199205 interactiveAreaEnabled: false,
@@ -341,15 +347,50 @@ Row {
341347 var buttonAccept = findChild(buttonRow, "button0")
342348
343349 waitForRendering(notification)
344− mouseClick(buttonCancel, buttonCancel.width / 2, buttonCancel.height / 2)
345− actionSpy.wait()
346− compare(actionSpy.signalArguments[0][0], data.actions[1]["id"], "got wrong id for negative action")
347− actionSpy.clear()
348350
351+ // only test the left/cancel-button if two actions have been passed in
352+ if (data.actions.length == 2) {
353+ mouseClick(buttonCancel, buttonCancel.width / 2, buttonCancel.height / 2)
354+ actionSpy.wait()
355+ compare(actionSpy.signalArguments[0][0], data.actions[1]["id"], "got wrong id for negative action")
356+ actionSpy.clear()
357+ }
358+
359+ // click the positive/right button
349360 mouseClick(buttonAccept, buttonAccept.width / 2, buttonAccept.height / 2)
350361 actionSpy.wait()
351362 compare(actionSpy.signalArguments[0][0], data.actions[0]["id"], "got wrong id positive action")
352363 actionSpy.clear()
364+
365+ // check if there's more than one negative choice
366+ if (data.actions.length > 2) {
367+ var initialHeight = notification.height
368+
369+ // click to expand
370+ mouseClick(buttonCancel, buttonCancel.width / 2, buttonCancel.height / 2)
371+ waitForRendering(notification)
372+ actionSpy.clear()
373+ 
374+ // test the additional buttons
375+ for (var i = 2; i < data.actions.length; i++) {
376+ waitForRendering(notification)
377+ var buttonColumn = findChild(notification, "buttonColumn")
378+ var button = findChild(buttonColumn, "button" + i)
379+ mouseClick(button, button.width / 2, button.height / 2)
380+ actionSpy.wait()
381+ compare(actionSpy.signalArguments[0][0], data.actions[i]["id"], "got wrong id for additional negative action")
382+ actionSpy.clear()
383+ }
384+
385+ // click to collapse
386+ mouseClick(buttonCancel, buttonCancel.width / 2, buttonCancel.height / 2)
387+ waitForRendering(notification)
388+ tryCompare(notification, "height", initialHeight)
389+ } else {
390+ mouseClick(buttonCancel, buttonCancel.width / 2, buttonCancel.height / 2)
391+ actionSpy.wait()
392+ compare(actionSpy.signalArguments[0][0], data.actions[1]["id"], "got wrong id for negative action")
393+ }
353394 }
354395 }
355396 }
tests/qmltests/plugins/CMakeLists.txtdeleted−3
@@ -1,3 +0,0 @@
1−add_subdirectory(HudClient)
2−add_subdirectory(Ubuntu)
3−add_subdirectory(Unity)
tests/qmltests/plugins/Dee/DeeVariantText.qmldeleted−22
@@ -1,22 +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 variant value
21− property string text
22−}
tests/qmltests/plugins/Dee/qmldirdeleted−3
@@ -1,3 +0,0 @@
1−module Dee
2−
3−DeeVariantText 3.0 DeeVariantText.qml