Commit Graph

24203 Commits

Author SHA1 Message Date
Marc Mutz
aa79adef6f QAbstractTransition: don't hold QPointers in QList
QPointer is larger than a void*, so holding them in a QList is needlessly
inefficient. Worse, the code could come to depend on the fragile property
of (inefficient) QLists that references to elements therein never are
invalidated.

Change-Id: I52e83a26eda06fb9826e9c4773a7a0b84b0f59c7
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-06-24 13:15:05 +00:00
Marc Mutz
931f9c23ee QMacStyle: replace a QSet<QPointer> with QVector<QPointer>
Holding a mutable item in a QSet violates QSet invariants, namely that in
bucket N, all items have hash % size == N. If a value gets reset to
nullptr by external means, that invariant no longer holds. The code works
by pure luck.

Replace the set with a vector, which doesn't care whether elements change
under the hood, and will also outperform the typical QSet use due to
better locality of reference.

Change-Id: Ied7940e82525fd0da9f74dfb0bc36a320b45d172
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-06-24 13:14:35 +00:00
Marc Mutz
5b6fd71d3a tst_qzip: remove unused init()/cleanup() functions
Change-Id: I3502e8e20a4496051554dc6fb92ea9bd347cc0f7
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-06-24 12:57:20 +00:00
Kai Koehne
235292710b Doc: Improve code snippet in QTranslator overview
Use translator::load(QLocale(), ...) which loads the a translation mapping
the users preferred languages, instead of just hardcoding one. This is
arguably the more common (and interesting) case.

Also, QPushButton::tr() does place the string in the "QPushButton"
namespace, which is just wrong (TM).

Change-Id: Id22851556b3f876da3b756b452811e07fc7b173e
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-06-24 10:48:23 +00:00
Kai Koehne
fa09699918 QLocale: Fix example return value for uiLanguages()
The documentation (correctly) states that the first item in the list
is the most preferred one. Anyhow, then it doesn't make much sense to
list "en_US" after "en".

Change-Id: Ib88e5c97d4329b444d1cb49eeb49eaed2ddedad3
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2015-06-24 10:48:17 +00:00
Tim Blechmann
32ce3b0eaf cocoa: QNSView - guard implementation against deleted window
when embedding a QWindow into a native cocoa gui there are cases that the
QWindow is destroyed while the QNSView is still available. this patch
makes sure that the m_window pointer is cleared when the QWindow is
destroyed and adds checks to the implementation to avoid that m_window
is called when it has already been destroyed.

Change-Id: I7e0614969dedb87b54df74d542a8c1fb15d8acf0
Reviewed-by: Timur Pocheptsov <Timur.Pocheptsov@digia.com>
2015-06-24 07:25:28 +00:00
Sérgio Martins
fece7cdb5d widgets: Use QList::reserve(), reduces reallocations.
Change-Id: I49cc03f365c77f142f62c8e77505ec09723a44d9
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2015-06-23 15:35:59 +00:00
Sérgio Martins
a4d3af9614 dbus: Use QList::reserve(), reduces reallocations.
Change-Id: I5d60220c4d3014067a45a3d3553f0523c9fc7c74
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-06-23 12:46:36 +00:00
Thiago Macieira
f64736188f Don't document the IsGadget flag
There's still some discussion as to whether it's safe to use. Until
we're completely sure, don't let users use it. We can always bring it
back later.

Change-Id: I049a653beeb5454c9539ffff13e5e3e343da0e7d
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
2015-06-23 10:37:07 +00:00
Alex Trotsenko
19e63a207f Replace QVERIFY with QCOMPARE in QRingBuffer autotest
Gives more information to user in case of failure. Also, fix the
order of parameters for some QCOMPARE's.

Change-Id: I3ea91f9602d4d32ac79027b6093caea749633c01
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-06-23 05:59:13 +00:00
Andy Shaw
bac1116d49 Only require polling when running on Windows XP
Since the restriction for what gets notified for Wireless network
configurations is only on Windows XP then we only want to do polling on
Windows XP. This gives a performance boost as it does not query every 10
seconds for no reason.

Task-number: QTBUG-40332
Change-Id: I73e3903834abe9ffc5adc678de20f7428a578d89
Reviewed-by: Richard J. Moore <rich@kde.org>
2015-06-23 05:56:36 +00:00
Oliver Wolff
756d451a15 winrt: don't return invalidated timers in QEventDispatcherWinRT::registeredTimers
Change-Id: I0dbad7a78080cd8c18893fea8294cf540a5e9e5e
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@theqtcompany.com>
2015-06-23 05:47:17 +00:00
Oliver Wolff
bf24838c33 Use qthread_win.cpp for WinRT as well
Since of Windows (Phone) 8.1 most of the desktop's thread functionality
is also available, so we might be able to share the code and get rid of
the extra implementation for WinRT.

Task-number: QTBUG-43837
Change-Id: I0ce907cd94899834527f88c70e1e395bafdb14b3
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@theqtcompany.com>
2015-06-23 05:47:14 +00:00
Laszlo Agocs
4c99d785bc Revert "Handle context loss in window surface creation too"
This reverts commit e4f5278a4f.

Revert this for now until we figure out what exactly is needed for the
Windows 7 CI virtual machines.

Change-Id: Ibd5578eac1d172785fac5e94c4c5c7508f8ddb79
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
2015-06-23 04:08:47 +00:00
Laszlo Agocs
d40647922b Revert "windows: Disable D3D9/11 with ANGLE in VMs"
This reverts commit a6000e2b66.

Temporarily remove this to unblock the qtdeclarative dev CI.

While Windows 8 VMs are fixed by this patch, Windows 7 has different
problems.

Change-Id: I45ef064ed953cc4b7bbf19657300d4fc43d82452
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
2015-06-23 04:08:41 +00:00
Thiago Macieira
4ce05c6084 Disable C++11 thread_local with ICC on OS X
It appears the ABI is lacking support for this at this point in time,
even though __thread works. ICC 15 works, probably by making it an alias
to __thread, but neither ICC 16 beta nor Clang work with thread_local.

Intel-bug: DPD200371699
Intel-ID: 6000107242
Change-Id: I049a653beeb5454c9539ffff13e639bdb83b8843
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-06-22 22:52:40 +00:00
Thiago Macieira
741a7aef58 QtTest: Increase the size of the alternate stack
The default (8kB) isn't enough for modern Linux on x86-64. I can't
exactly account for it, as the size of the xsave area is 0x340 bytes,
plus the regular area it's still less than ~1.5 kB. But empirically we
can see that 8kB causes a SIGSEGV when a signal is delivered, while 16
kB works.

Since we're increasing the size, let's make sure it ends up in a
separate page from the rest of the .bss data.

Change-Id: I5d1e6f7607404caa96e4ffff13e84c87c33723c7
Reviewed-by: Jason McDonald <macadder1@gmail.com>
2015-06-22 22:22:51 +00:00
Marc Mutz
9e139ce099 QTextureGlyphCache: add some qMove()
Change-Id: I1965f4de0f1bf9efdb15d07142f882897e163cc5
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
2015-06-22 22:20:47 +00:00
Laszlo Agocs
706af26acc Do not claim TextureRGFormats on Mesa with GLES
Mesa provides GL ES 3.0 so using GL_RED in place of GL_ALPHA should work.
This is apparently not the case.

Task-number: QTBUG-46605
Change-Id: I4f661487b47e9cc11f5de110196ec37150c99c7f
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
2015-06-22 21:15:37 +00:00
Laszlo Agocs
8aaf8d33e1 Disable surfaceless QOffscreenSurface with Mesa
With Intel at least Mesa is unable to handle surfaceless contexts in
glReadPixels(). This cripples QOpenGLFramebufferObject::toImage() and
potentially others too.

Task-number: QTBUG-46605
Change-Id: I07c1015eca67b8add14496ec0df0e0c17ac3d896
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
2015-06-22 21:15:31 +00:00
Thiago Macieira
4dc597d96c Force Visual C++ math.h to define the M_ constants
That header defines those constants outside of the math.h include guard,
so if someone #define'd _USE_MATH_DEFINES and #include'd math.h later,
they would get VC++ warnings about constants like M_PI being redefined
with different values (ours have parentheses, VS2010's math.h don't).

Instead, let's define _USE_MATH_DEFINES ourselves so we get the M_*
macros from math.h. That way, we won't redefine them outselves.

Task-number: QTBUG-45935
Change-Id: Idf715b895bac4d56b4afffff13db2c98ba8345c2
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2015-06-22 15:13:13 +00:00
Friedemann Kleint
993889401b Revert "Windows: Use DND effect chosen in DragEnter/Move for Drop."
The change causes items in QListWidget and QTreeWidget to disappear during
InternalMove since the widgets modify the actions of the event
to remember an internal state.

This reverts commit 988f1b2e57.

Task-number: QTBUG-46642
Task-number: QTBUG-43466
Change-Id: I27d888d7a1fdfcf8eaf8806ccd4ca33b292b9d8c
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2015-06-22 14:32:44 +00:00
Ulf Hermann
68e31e4ab9 Replace #ifdefs with qmake feature checks.
This prevents the building of dysfunctional plugins that don't define
a loader function, or won't compile at all.

Change-Id: Ib62edb8db4a8917effa05292cb702bb4022f552c
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-06-22 14:21:25 +00:00
Ulf Hermann
b93d1f6b1f Don't try to resolve symbols for xcb if QT_NO_LIBRARY is set
Change-Id: I4bd5d8534abd9a585a4a641d01931de687eeae77
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
2015-06-22 14:21:11 +00:00
Ulf Hermann
b57387f6f8 Define openssl symbol resolution warning function only if necessary
Without library support we don't try to load any symbols and the
function is unused. This results in a compiler warning.

Change-Id: I82ad46a478debe48cf9a8311f5e5ec299baa1af8
Reviewed-by: Richard J. Moore <rich@kde.org>
2015-06-22 14:21:04 +00:00
Sérgio Martins
eca8f1bf98 gui: Add several QList::reserve() calls.
Reduces reallocations.

Change-Id: I0db16726f413a67b76a73fabd013f910ab5f5109
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2015-06-22 14:03:39 +00:00
Marc Mutz
307f551291 QMap: use constrained templates instead of static-ifs
Avoids warnings about constant expressions in ifs.

Task-number: QTBUG-46649
Change-Id: I56adf8e80091330d2e97327df7751e57411fbd70
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-06-22 13:08:07 +00:00
Martin Smith
5fe93057b2 doc: Fix qdoc errors in qstring.cpp
Fixed a few qdoc errors.

Change-Id: I9ede1c1d3b22e9613978e31722c8140ae966194e
Task-number: QTBUG-46796
Reviewed-by: Venugopal Shivashankar <venugopal.shivashankar@digia.com>
2015-06-22 13:03:42 +00:00
Martin Smith
470461da5e doc: Add missing comment delimiter
This prevents qdoc from getting lost and reporting
extraneous errors.

Change-Id: I8edf11dec67c39d7aa314fe6748acf6df4e646c8
Task-number: QTBUG-46794
Reviewed-by: Venugopal Shivashankar <venugopal.shivashankar@digia.com>
2015-06-22 12:46:23 +00:00
Allan Sandfeld Jensen
e0139718bb Export gamma setting and metadata in QImageReader
The PNG image plugin has the capability of applying gamma correction
to read PNGs, but doesn't do so by default, and we export no way of
accessing this through the qimagereader API.

This patch adds the ability to read the PNG file gamma, and overriding
decoded gamma to get gamma correction.

Change-Id: Iaf9eaac0827516db6bc02247c58026270cd1f610
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
2015-06-22 12:22:37 +00:00
Kai Koehne
c29383769a Core: Fix QProcess::errorString() output
Fix regression introduced in commit 5147f73ac3.

Change-Id: I336e13d5127c5e6e2f9e7afdfa7956fc89533766
Reviewed-by: Marcel Krems <m.krems@software-vision.eu>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-06-22 12:04:45 +00:00
Thiago Macieira
4fe865ac7a Doc: document future direction of QCoreApplication::notify()
It will definitely not be called for events outside the main thread, but
we haven't decided for the main thread, in Qt 6.

[ChangeLog][Future direction notices] In Qt 6,
QCoreApplication::notify() will not be called for events being delivered
to objects outside the main thread. The reason for that is that the main
application object may begin destruction while those threads are still
delivering events, which is undefined behavior. Applications that
currently override notify() and use that function outside the main
thread are advised to find other solutions in the mean time.

Change-Id: I27eaacb532114dd188c4ffff13d5a5c8df3bc85b
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
2015-06-22 12:04:15 +00:00
Tim Blechmann
b0a9eddf4d testlib: fix compile error with macosx10.8
[NSDate date] returns an id, so one needs to send a message instead of
accessing a property.

Backport commit 92b3397a from the 5.5 branch.

Change-Id: Id70915e1ac23994a081765e0a527802fef61b573
Reviewed-by: Tim Blechmann <tim@klingt.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
2015-06-22 12:03:57 +00:00
Laszlo Agocs
e4f5278a4f Handle context loss in window surface creation too
While this is not what the EGL spec says, we can get EGL_CONTEXT_LOST in
eglCreateWindowSurface too with ANGLE. Handle it the same way like we do
for eglMakeCurrent and eglSwapBuffers (no warning, just return the error
code silently since we may recover from this).

Change-Id: I6b6c57ffd4fca23e1a14a90ef7b18b33f4c96fd2
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
2015-06-22 12:02:45 +00:00
Marc Mutz
9e6a61447c QIcon: don't use a QList<QImage>
QImage is larger than a void*, so holding them in a QList is needlessly
inefficient.

Use QVector instead.

Change-Id: Ifcc9eca18a87e29327586506e3a3bb7874c8b3a7
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
2015-06-22 10:55:58 +00:00
Marc Mutz
3e6f36175a QTextDocumentLayout: don't hold QPointers in QList
QPointer is larger than a void*, so holding them in a QList is needlessly
inefficient. Worse, the code could come to depend on the fragile property
of (inefficient) QLists that references to elements therein never are
invalidated.

Change-Id: I104d11cc530c9c1579e82bf4e28e3353c00b34b4
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-06-22 10:45:11 +00:00
Marc Mutz
838478ccca qdoc: mark Location::StackEntry as movable and Location as complex
Location is self-referential, so explicitly mark it as Q_COMPLEX_TYPE.
Location::StackEntry is held in QVector, by way of QStack.

Change-Id: I4d9001b55b86f0387ae41b93da17d06fb2857ee4
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Martin Smith <martin.smith@digia.com>
2015-06-22 10:43:34 +00:00
Marc Mutz
426d9b9c3e QtIcoHandler: don't hold images in QList
QImage is larger than a void*, so holding them in a QList is needlessly
inefficient. Worse, the code could come to depend on the fragile property
of (inefficient) QLists that references to elements therein never are
invalidated.

Also added a reserve() call.

Change-Id: I36388f2efbc6ca025f123c30bc7f1dd312bf4ab2
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
2015-06-22 10:43:17 +00:00
Marc Mutz
831a7e06c0 qdoc: don't hold Location in QLists, don't even copy it
Location is a self-referential type that is very expensive to copy.
So don't.

Instead, just remember the iterator, and use value()->location()
(which returns a reference, so doesn't copy).

Change-Id: I9a2b72b05b8051e793cf67179a0195f2f3551a10
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Martin Smith <martin.smith@digia.com>
2015-06-22 10:43:11 +00:00
Marc Mutz
792f68adea QTextureGlyphCache: don't use a QList<QImage>
QImage is larger than a void*, so holding them in a QList is needlessly
inefficient.

In this case, the maximum size of the container is a small compile-time
constant, so the best container to hold those QImages is a C array, even
though it will default-construct all 12 QImages before even starting the
loop, since the QImage constructor does not allocate memory.

Change-Id: I83ca65aa1ca51c400ca696202d24cfaeab505a5b
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
2015-06-22 10:43:04 +00:00
Laszlo Agocs
f0fecf7b61 Fix incorrect warning message in QOpenGLWidget
Change-Id: I3b99894171a3e63b75a14357a1be0c0dd1f45e93
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
2015-06-22 08:28:28 +00:00
Laszlo Agocs
52c35c1ce7 xcb: make it possible to disable gl integrations
By setting QT_XCB_GL_INTEGRATION to the special value "none", no plugins
will be considered for loading. This matches what eglfs does with
QT_QPA_EGLFS_INTEGRATION.

This allows widget or raster-QWindow-only apps to start up faster by not
spending time on plugin loading and potential initialization steps there.

Task-number: QTBUG-46765
Change-Id: Ifeec3548a9b58f619a18e0be75fe4a9f489677a9
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
2015-06-22 08:28:24 +00:00
Eirik Aavitsland
03fd8fa463 Further tune curveThreshold setting based on strokeWidth
ad9698713f reduced the curvethreshold
for wide lines, to fix QTBUG-46151. But as a side effect, the
threshold was increased for lines of widths >=0 and <4.  This commit
fixes that, and also adds a lance test for the issue in QTBUG-46151.

Change-Id: I52507db622435fe1d2646640cb0bd9cd8222e453
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
2015-06-22 08:19:57 +00:00
Jochen Seemann
ee73df8363 allow running msvc2013 mkspecs from msvc2015 shell
Visual Studio 2015 integrates the Windows Runtime development
tools, including the msvc2013 compilers.
This patch fixes the error that mspdb120.dll is missing.
It is typically included through PATH variable of the shell,
which points to the "wrong" location in this case.

Change-Id: I46289721912d6b517c6083612582f67536d28b11
Reviewed-by: Andrew Knight <andrew.knight@intopalo.com>
2015-06-22 07:53:29 +00:00
Joerg Bornemann
346c756dea fix "install target not created" for WinRt builds
Commit 3ce99adf replaced DEPLOYMENT with INSTALLS and introduced
the "install target not created" warning when running qmake on
WinRt projects.
The code path in qt.prf that was responsible for filling the
DEPLOYMENT variable was never functional in Qt5. We're turning
the code path off until this is properly fixed.

Change-Id: If836ef648f9fb601b7597d39e3d00665d4cf01b0
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-06-22 07:53:12 +00:00
Gabriel de Dietrich
1fb3273cfd Detect and set Xcode 6.3 clang version
This becomes necessary to avoid compilation errors with
Xcode 7 and clang 7.0.0. (Note that its version information
doesn't state which LLVM version it's based on, though we
suspect it could be 3.7.0svn.)

Change-Id: I2bfc7f2b73ca7a61798b123cc2715037028f0e5f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-06-22 06:25:05 +00:00
Topi Reinio
fb46d63e41 Doc: Update the list of highlighted examples
Remove highlighting for a number of older and less relevant examples.
Add examples from new modules, and examples that have been visually
polished.

Task-number: QTBUG-37203
Change-Id: I4e9be9a54f1ecea3bb407c049c1d44a7c00333a6
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com>
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2015-06-22 06:24:59 +00:00
Oliver Wolff
dbddb1751e winrt: Fixed connectToHost, which is meant to be synchronous
Task-number: QTBUG-46339
Change-Id: I413fef39424a0815ef4604000f85ad37ac2b4dc2
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@theqtcompany.com>
2015-06-22 06:24:54 +00:00
Joerg Bornemann
059e1df345 fix PCH related regression in vcxproj generator
When PRECOMPILED_HEADER is set to foo/bar/stable.h and
PRECOMPILED_SOURCE is empty, then a C++ file foo/bar/stable.cpp
is generated that contains the include "stable.h".
We must pass the exact string "stable.h" to the /Yc compile
switch instead of "foo/bar/stable.h".
Commit dc612acdc6 introduced this
regression to allow to have PRECOMPILED_SOURCE in a different
directory than PRECOMPILED_HEADER.

Change-Id: I1a7e096c0455b946a5660d23c70c72abd4c7ac1b
Task-number: QTBUG-46679
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2015-06-22 06:24:47 +00:00
Marc Mutz
2422251ee5 qdoc: don't hold QQmlJS::AST::SourceLocation in QLists
QQmlJS::AST::SourceLocation wasn't marked as movable, and it is larger
than void*, so QList<SourceLocation> is horribly inefficient.

Fix by marking as movable primitive and holding in QVector instead.

The same fix probably is required in QtDeclarative, too.

Change-Id: I4e0d2cd32b7e03205d59cbc9900287f77045154a
Reviewed-by: Martin Smith <martin.smith@digia.com>
2015-06-21 13:42:49 +00:00