Commit Graph

26218 Commits

Author SHA1 Message Date
Friedemann Kleint
910f719bd1 Refactor QStandardPaths for Desktop Windows.
Replace the large switch in QStandardPaths::writableLocation()
by a function mapping QStandardPaths::StandardLocation
to the int clsid required by SHGetSpecialFolderPath(). Warn if
SHGetSpecialFolderPath() fails for config location and append
prefixes (cache/application name/organization) only on success.

Change the logic in QStandardPaths::standardLocations() to append
the writable location first, avoiding the prepend().

Task-number: QTBUG-50570
Change-Id: I9d80e83d1ca7af3ea8d3ac2c720ee981b1b2c32a
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2016-01-28 19:01:20 +00:00
Marc Mutz
7236721bf8 QJsonObject has random-access iterators
... but they were only marked as bidirectional.

Fixed.

This change is slightly BiC, because if some class used tag
dispatching on this iterator type, a recompile might now
pick a different overload, and the old one may not be
available to a user anymore (no longer instantiated).

I do not think Qt uses that technique, yet, though. Not on
iterator categories, at least.

Change-Id: I75fb334af7e191f882d11575dec83c879a6b50ee
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-28 18:38:34 +00:00
Konstantin Ritt
5f472cae71 QFontCache: Centralize the engine type safety check
We depend on the assumption QFontCache::findEngine(key) for key.multi=1
returns a font engine of type QFontEngine::Multi;
guarantee that by checking it in a single place.

Change-Id: I287da4fd62deb22fc5520cde5b0505bc44547609
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
2016-01-28 18:24:08 +00:00
Anton Kudryavtsev
0f27d11285 Don't use QStringLiteral in comparisons
For QLatin1String, operator== is overloaded, so comparing to a latin-1
(C) string literal is efficient, since strlen() is comparatively fast.

OTOH, QStringLiteral, when not using RVO, litters the code with
QString dtor calls, which are not inline. Worse, absent lambdas,
it even allocates memory.

So, just compare using QLatin1String instead.

Change-Id: I761b2b26ab5b416bc695f524a9ee607dacf0a7b2
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2016-01-28 18:00:47 +00:00
Błażej Szczygieł
58f8dd4f92 QtWidgets: Allow to cover up the window container by another widget
When the window container already has a window handle, allow embedded
windows to use this handle as a parent. This change will allow proper
window stacking and clipping.

Task-number: QTBUG-50477
Change-Id: I8d656ecb99e0c42ae7a7ac461e5e5b5d801f5493
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
2016-01-28 17:40:53 +00:00
Tor Arne Vestbø
ee9621b9dc Move shortcut handling back into QGuiApplication
c7e5e1d9e0 assumed shortcut handling could be done at the QPA
level, but this fails on async platforms where there are e.g
activation events in the QPA queue and we then try to handle
the shortcut synchronously.

This commit restores the handling to QtGui for non-OS X platforms,
and we should fix OS X by adding callbacks through the IME for
the special case of OS X.

Task-number: QTBUG-50467
Change-Id: I7460184cc60d0319f07771eec487325a17d7e7e7
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
2016-01-28 16:30:26 +00:00
Tor Arne Vestbø
33bdb93ae1 Remove some old QT_MAC_USE_COCOA cruft
Change-Id: Ib9cb57563274c722023084e94f2cd439088366a8
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
2016-01-28 16:30:24 +00:00
Erik Verbruggen
3a30a2fcb3 Allow QFinalStatePrivate to be subclassed.
- put it in a separate private header
- add a protected QFinalState constructor that takes a
  QFinalStatePrivate
- when passing through, also export QStatePrivate, so the linker can
  find the symbol

Change-Id: I8563da16739731d9d6142be438a8769fc29de148
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2016-01-28 16:24:46 +00:00
Anton Kudryavtsev
97b448b152 Use QFile::exists(f) instead of QFile(f).exists().
It's faster.

Change-Id: Ie57619b4e0c53975aa955c83c833c34e1446e4c8
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-01-27 05:06:51 +00:00
Konstantin Ritt
c195fde37a QFont*: Optimize by caching the QFontCache::instance() result
The QFontCache instance is stored in QThreadStorage and thus calling
QFontCache::instance() isn't really cheap; avoid calling it multiple
times where possible.

Change-Id: I1b7a83089698a06c49dac08b2a3a8e9c3c75a500
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
2016-01-26 22:39:45 +00:00
Andy Shaw
ed70a645aa QWindowsVistaStyle: Reorder the if statement so the variable is checked first
Since the likelyhood that decoration_size is greater than 0 then we can
save time with explicitly ensuring that it does not call the functions.

Change-Id: Iaf991a6c77bbc4908c459307ca7e645cf3b3ca20
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
2016-01-26 22:34:28 +00:00
Shawn Rutledge
d2997b9266 on failure to load platform plugin, show the path(s) checked
The error message was not informative enough to troubleshoot.

Change-Id: Ib21fce238c80b31d21939d139fc173b48eb5ceb8
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
2016-01-26 16:04:20 +00:00
Shawn Rutledge
e3808072d9 add QDebug operator for QAction
Change-Id: Ie2554323a619ef1c3f9579862eff8fe704079ba5
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
2016-01-26 15:27:24 +00:00
Konstantin Ritt
c3b261f3f0 Deduplicate and clarify the code a bit
Makes it clear that the engine for font with no Latin WS support
won't be cached as "shared" engine and thus shouldn't be normally
expected in the cache, so don't even try to find it there.

Change-Id: I9e6275b4919607f4057a193b446825c98932bd23
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
2016-01-26 14:13:39 +00:00
Konstantin Ritt
f5e02d4128 Avoid needless string comparison
by inlining and reordering the condition.

Change-Id: I68a91e75071975a4cc26333094db3433afbaeb72
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
2016-01-26 14:13:36 +00:00
Marc Mutz
088eef5756 QStringBuilder: fix appending QLatin1String to QByteArray
The old code did the equivalent of strcpy(), thus stopping
at the first NUL byte, ignoring the QLatin1String's size().

That is not acceptable, for two reasons:

1. Appending QLatin1String to a QString uses the size(), too.

2. The QConcatenable claims an ExactSize = true, so
   it cannot go and write less data than it's own
   size() said it would. Even worse, it will happily
   write _more_ data, too, if the QLatin1String is
   not properly zero-terminated.

This change has low risk, because the equivalent change
to the QString branch has been applied between 5.2 and
5.3 (in fd0f1bc3), with no complaints from the user base.

It is also in a branch that is very unlikely to be taken:
Since QConcatenable<QLatin1String> is setting ConvertTo
to QString, any QStringBuilder expression containing it
will only implicitly convert to QString, not QByteArray.
In fact, I don't even know how to make it invoke the
changed code in normal operation...

Change-Id: I486a76352af7f318ba05da845d3afee7d826c92a
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2016-01-26 14:08:07 +00:00
Morten Johan Sørvig
5dbf8756ef Cocoa: Support high-dpi DnD pixmaps.
Set the NSImage size (which is in points/device
independent pixels) to inform Cocoa DnD about the
intended image visual size.

Change-Id: I6fadd77f4e0173e8e9773725fab3b35f70a055ff
Task-id: QTBUG-44179
Reviewed-by: Andy Shaw <andy.shaw@theqtcompany.com>
2016-01-26 14:03:47 +00:00
Edward Welbourne
e08fe31f55 Add DST-change test for a date derived via .toLocalTime().
Uses a time derived via .toUTC() to ensure the .toLocalTime() comes
out at the time we expect.

Task-number: QTBUG-49008
Change-Id: I2005127929c7eab1b7a3cbaba8d21df8c9585d17
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-26 13:50:09 +00:00
Edward Welbourne
4970a43676 Test .addDays() and .addMonths() are sensible around DST changes.
Task-number: QTBUG-49008
Change-Id: Ie3bf9dfeb67c96b18320e18c14b9680f03cb98e9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-26 13:50:04 +00:00
Friedemann Kleint
ae5c4500c5 Diaglib: Improve output of widgets.
- Make it possible to pass an optional root widget to dumpAllWidgets().
- Add option to output size constraints of widgets/windows.
- Output normal geometry of top levels.

Change-Id: Ib48809d070c5721fe4688a2ad39cb99f286618de
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2016-01-26 13:33:09 +00:00
Laszlo Agocs
8a3adfbed2 Install the static qtfreetype lib
Modules relying on font support via platformsupport (Qt Wayland) need
the static libqtfreetype.a. Add CONFIG+=installed to get it copied
during make install.

Task-number: QTBUG-50659
Change-Id: Ie6252e7f2dda1dc3da97fee258b9d53b7ca349c0
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-01-26 13:26:47 +00:00
Maurice Kalinowski
c88939ab05 winrt: fix typo
Change-Id: I621043b6be797e250fd2cd17de22a18d8773b01c
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
2016-01-26 13:04:06 +00:00
Maurice Kalinowski
6c70751013 winrt: update version settings in default manifest
10240 describes the first official non-preview Windows 10 SDK. 10586 was
the SDK for the first November update.

Change-Id: Ieb61b944295946eab594b3c7bf234155a67b752e
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
2016-01-26 13:03:48 +00:00
Maurice Kalinowski
7d30f502f8 winrt: Add mobile schema to default manifest
This allows users to add mobile specific features. Also it implicitly
enables support for continuum on Windows 10 Mobile.

Change-Id: I965123722f46df6e84fd279c3bfce478c1172632
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
2016-01-26 13:03:43 +00:00
BogDan Vatra
fd639b7adc Handle native views visibility properly.
Hide the native view in constructor and in destructor.

Task-number: QTBUG-40159
Change-Id: I200b28af9ac2928c38299b71395a97e39f1bbe6d
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
2016-01-26 12:41:14 +00:00
Nico Vertriest
397061a6a9 Doc: Added brief statement to XML examples
Task-number: QTBUG-50261
Change-Id: I0ba4bd630746612d0f1f1632e87c6fdd6aef160f
Reviewed-by: Topi Reiniö <topi.reinio@theqtcompany.com>
2016-01-26 09:39:33 +00:00
Nico Vertriest
149c659dc1 Doc: removed double occurrence of systray.qdoc
Task-number: QTBUG-50287
Change-Id: Iaf8602fc338dadcc0998f33d41ad9fbc827589e2
Reviewed-by: Topi Reiniö <topi.reinio@theqtcompany.com>
2016-01-26 09:39:21 +00:00
Nico Vertriest
d9bbf610a4 Doc: Added brief statement for examples overview page
Task-number: QTBUG-50261
Change-Id: Ia0daf0c5c7fc0b2e54904f0b7fe6ebe1220e5c4d
Reviewed-by: Martin Smith <martin.smith@theqtcompany.com>
2016-01-26 09:32:49 +00:00
BogDan Vatra
63c88ae809 Android: Probe for virtual keyboard height
Knowing the real virtual keyboard height will be easier for us to
decide if we pan or resize the current view.
The virtual keyboard is re-shown if current virtual keyboard height
is different from previous one.

Task-number: QTBUG-43739
Change-Id: I1bb41a70cced4c1d0e5f05a6c554831459b7a917
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
2016-01-26 09:01:28 +00:00
Thiago Macieira
a1ba281a26 Call out to QtDBus message spies in the main thread
Whenever there are spies installed, we call out to the main thread to
call to the kded/kiod message spies. This allows the spy code to do just
about anything, where previously it was restricted in what it could do
to avoid deadlocking or triggering assertions if it recursed back into
QDBusConnection code in the manager thread. After the spies are done,
the message is re-inserted into the QDBusConnection processing pipeline.

This commit moves the spy handling to after the check for disabled
dispatching, as doing otherwise would mean the message could get
postponed again for no good reason. It's also possible that the main
thread isn't done installing the hooks, so waiting until the dispatching
is enabled is a good idea.

For simplicity, this commit also restricts spying to method calls
only. Signals are no longer spyable.

Change-Id: I3d11545be52c43119f0fffff142b0e9d447415c2
Reviewed-by: David Faure <david.faure@kdab.com>
2016-01-25 07:32:04 +00:00
Dyami Caliri
5cac511908 Repaint QOpenGLWidget when screen changes
Commit 5c7f000cd4 greatly reduces the
number of repaints for QOpenGLWidget. Unfortunately, this included when
the widget changes screens.

Change-Id: Iaabcb94925e4519cb5d8561b47aaddcfdc7b01ac
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
2016-01-24 18:26:27 +00:00
Dyami Caliri
c820692fc0 Fix tlw source rect transformation for backingstore blit.
The srcRect is already in device window coordinates. Converting it
again via deviceRect(QRect, QWindow) causes it to be overly large.

Task-number: QTBUG-50613
Change-Id: Iaae390499c0d1add842bde6eec22fb07c8de663b
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
2016-01-24 18:26:20 +00:00
Marc Mutz
2fed43d843 Q*Application: don't allocate memory just to compare C strings
Instead of creating a QByteArray, possibly normalizing a leading
'--' (one allocation, plus possibly one copy), simply use the
old 'ol str(n)cmp, skipping the first character if the argument
starts with '--'.

It also fixes parsing of -stylesheet and other options which
were erroneously parsed using indexOf() != -1, when they
should have used startsWith().

Also saves 504/742/522b in text size for QtCore/QtGui/QtWidgets,
resp., on optimized GCC 5.3 Linux AMD64 builds.

Change-Id: Ida868badac3fb9b77285417ee537c861ccc4fc06
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-23 11:44:06 +00:00
BogDan Vatra
81d6906ad9 Android: Fix compile on arm64
Workaround Bionic bug.
Check https://code.google.com/p/android/issues/detail?id=194631 for more info.

Change-Id: Ib1abae37c94d4e76bb3bd633985c84128659bf4c
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-23 09:09:22 +00:00
Simon Hausmann
e782501532 Speed up QObject::connect with function pointers
When resolving the signal/slot of connect(&Foo::bar, ...) we place a meta-call
to map the address to the method index. Once we have found the index, we don't
need to continue but can return the result right away.

Change-Id: I67bb22df394d7c22dc1731367c0961b958ed77b3
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2016-01-22 21:50:01 +00:00
Rafael Roquetto
684e5587d5 QNX: Fix -developer-build
-developer-build enables -Werror=undef, which uncovered a bug inside
qcompilerdetection.h.

According to the Dinkum headers, it is necessary to account for three different states
concerning the values of the _HAS_* macros:

    1. undefined
    2. 0
    3. 1

Therefore, it is necessary to check both whether it is defined and if it is
not 0. Only checking whether a given macro is 0 will generate a trap by
-Werror=undef.

(__GLIBCXX__ is the sole exception).

Change-Id: Ib95e485698ee38858a1671d930d7e960b75bb041
Reviewed-by: James McDonnell <jmcdonnell@qnx.com>
Reviewed-by: Dan Cape <dcape@qnx.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-22 18:06:39 +00:00
Morten Johan Sørvig
db2675d6fd Cocoa: Update QWindow::screen() on expose/show.
This is needed to correctly handle show on non-primary
screens.

Change-Id: I80b13372b3a92786987a66f0da385af6b4a6a863
Task-number: QTBUG-47950
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
2016-01-22 13:16:59 +00:00
Thiago Macieira
7dceb22748 Autotest: make tst_QDateTime pass when LC_TIME != en_US
QDateTime::toString for Qt::TextDate unconditionally uses the system
locale (because QDate::shortDayName and QDate::shortMonthName do).
Setting the default QLocale has no effect. If you ask me, those two
QDate methods are buggy, but they are documented that way.

Change-Id: I408dcb81ba654c929f25ffff1427366b04da5a43
Reviewed-by: Edward Welbourne <edward.welbourne@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-22 03:37:54 +00:00
Thiago Macieira
d921a9bd15 Hide better the private API QTextCursor constructors
Both constructors were taking a pointer, so they participated in
overload resolution along with QTextDocument and QTextFrame pointers.

Instead, make them take references and move them to the private section
of QTextCursor. That necessitated adding a method to QTextCursorPrivate
to access that private constructor from non-friend classes.

Change-Id: I7e6338336dd6468ead24ffff1410e3bc534d77dd
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2016-01-22 03:36:16 +00:00
Tor Arne Vestbø
a44e4a6cfe Fix build with QT_NO_OPENGL
Change-Id: I3056d101967d94961b35ce10692dc9f390189b40
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
2016-01-21 21:53:49 +00:00
Tobias Koenig
a01146aac1 Use QFileInfo::exists(f) instead of QFileInfo(f).exists()
QFileInfo::exists(f) is somewhat faster than the version which creates an temporary object.

Change-Id: I5f931a86d9dfad57d99efe04ca115422de43def9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-21 21:21:47 +00:00
Allan Sandfeld Jensen
c7a86c5e0c Remove dead code from QOpenGLPaintEngine
These variables were never used or set to anything meaningfull.

Change-Id: Ic68ac5c38a3db28d7a5a05be004bcb6a554a1483
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
2016-01-21 20:17:30 +00:00
Frederik Gladhorn
f33c6f37a8 Work around MinGW-make's magic prefixing of paths.
When building QNX on MS-Windows, make magically adds the Msys root as
prefix to variables whose values look like paths; this applies to both
environment variables and variables given values on the command-line.
When we don't actually want to install under the Msys root, this is
unwelcome "help".  So (for MinGW's make) support a magic prefix of our
own, @msyshack@, that'll make a path value for INSTALL_ROOT not look
like a path to make; we can then strip it off when we come to use it.

Change-Id: I951ad3c8fe3e5cfb49e6e361d7fff779f3a9d716
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
2016-01-21 19:23:40 +00:00
Oswald Buddenhagen
2bb473c19a give the pkg-config wrapper a proper name
amends 282f15feaa.

Change-Id: I91fa244a9c33495365da4278b99d6312c1af299a
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2016-01-21 19:23:27 +00:00
Tobias Koenig
24d851dcd2 Avoid heap allocations in Median class
Create a MedianDouble class and V2 version of BlockSizeManager, which
use a fixed size array of double (since we always use 7 elements
to calculate the median anyway).

Change-Id: Ife90b90336a9a8c037b90726dee4cd2a1b8b6cd9
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2016-01-21 18:57:04 +00:00
Konstantin Ritt
c3850dd636 QString: optimize case conversion code
Handle special case mapping of length 1 explicitly;
Skip calculating of high surrogate for the same plane;
Optimize branch prediction with Q_LIKELY/Q_UNLIKELY;
Replace peekNext() + advance() with just next() in the caller function.

Change-Id: I0d37969749bd8ca855321242e6a0e72c405c5f8d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-21 15:20:41 +00:00
Laszlo Agocs
7edd488a5f eglfs: Detect llvmpipe and show a warning
Do ourselves and our users a favor by pointing out why Qt (Quick)
apps perform horribly on commonly used distros on the RPi. Using
a software rasterizer on such boards is not going to cut it.

Task-number: QTBUG-50533
Change-Id: I087f502ddb9c6bdde84343e6abd85c87cdc474f0
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
2016-01-21 09:16:26 +00:00
Christian Strømme
205987750d Make pkgConfigExecutable() work when a pkg-config is defined in the spec
Commit 6e6f27b6 made it possible to set the PKG_CONFIG variable using
CROSS_COMPILE as a prefix. The problem with that solution is that it makes
pkgConfigExecutable() skip the environment setup for pkg-config as well,
as it expects the pre-set command to be self-contained - which it isn't.
To avoid this problem we need to store the pkg-config define in the
device spec in a separate variable.

Change-Id: Id8ae7fb03d9253be55840e23fe73b30815ee86c3
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-01-21 08:53:05 +00:00
Edward Welbourne
1185c28f2f Fix some mis-guided fall-throughs #ifdef QT_BOOTSTRAPPED.
A switch had a case whose body was in a #ifndef; when that got elided,
this case fell through into an entirely misguided case.  Give the #if
a #else clause so that it break;s in the defined case.  Code review
revealed another, then I searched for more following the same pattern.

Change-Id: I57fb59b6c8d349604f3fc6c8b1d424fb3c775d50
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-21 08:34:27 +00:00
Dmitry Shachnev
19866d8861 Fix pixmap types in org.kde.StatusNotifierItem.xml
According to the spec, pixmap type is ARRAY(INT, INT, ARRAY BYTE).
This also matches our QXdgDBusImageVector typedef.
Also fix the D-Bus Introspection class info.

Change-Id: Ic13e8a078299b9c76d2742055d64cfdc54460d58
Reviewed-by: Dmitry Shachnev <mitya57@gmail.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
2016-01-21 07:36:47 +00:00