Commit Graph

15117 Commits

Author SHA1 Message Date
hjk
63a382a930 Add a static QFileInfo::exists(fileName) function
This avoids dynamic construction of the private class. According to
the benchmark we go from 4,550 to 3,900 instruction reads per iteration.
(without change 32629676 the baseline is 5,600)

Change-Id: I5df925e30dbd49bdde87173e481820574ce5abe1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2013-09-13 19:37:51 +02:00
hjk
4c709fb391 Add a note on symlink behavior of QFile::exists
Change-Id: I41ede0536f1b7093a7cde3d74a5e221df413aeea
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2013-09-13 19:37:14 +02:00
Thiago Macieira
aef44c7970 Don't use an extension to the C++ language in public headers
According to Clang 3.3, this is an extension:
qpalette.h:178:9: error: anonymous types declared in an anonymous union are an extension [-Werror,-Wnested-anon-types]
qsizepolicy.h:148:9: error: anonymous types declared in an anonymous union are an extension [-Werror,-Wnested-anon-types]

If you try to simply give the struct a name, it complains with:
qpalette.h:178:16: error: types cannot be declared in an anonymous union

Change-Id: I61c69b8e42a1f4c4a15a0733f2d7efa0b3e44864
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
2013-09-13 19:12:09 +02:00
Thiago Macieira
c1c715f800 Optimize QBitArray::count(bool)
Ever since 76e0223619, qPopulationCount
was extracted from QBitArray and moved elsewhere. That unfortunately
meant that the 24-bit loads are completely useless, since
qPopulationCount always operates on 32 bits.

Instead, do a full loop on 32-bit and then do 16-bit and finally 8-bit
(for which there are qPopulationCount overloads).

Change-Id: If945609f075095257d12877c39434909ac190e54
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2013-09-13 19:11:48 +02:00
Thiago Macieira
d7e424ee66 Remove unused QPF font engine support.
QWS is gone.

Change-Id: Ic04c4dcfff51522dd538bf2cb198dc2e02fe7572
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
Reviewed-by: Peter Kümmel <syntheticpp@gmx.net>
2013-09-13 19:10:31 +02:00
Paul Olav Tvete
07538de8b1 Make nativeOrientation available in the public API
The QtSensors module defines the coordinate system relative to
QPlatformScreen::nativeOrientation(). However, that is not part
of the public Qt API.

Task-number: QTBUG-32144

Change-Id: I6941c5b8589219064749f18880775b803f23fbbd
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-09-13 19:08:27 +02:00
Sergio Ahumada
f7837e28b5 Merge branch 'stable' into dev
Conflicts:
	src/concurrent/qtconcurrentmedian.h
	src/corelib/itemmodels/qabstractitemmodel.cpp

Change-Id: Iac46a90bbb2958cef7670031a4b59c3becd8538a
2013-09-13 18:04:17 +02:00
Laszlo Agocs
52e38509c6 Fix QWindow::moveEvent documentation
It handles window movement events, not mouse move events.

Change-Id: Ibc8fd0272756fcf87dfac210addbf2f87cfb39d5
Reviewed-by: aavit <eirik.aavitsland@digia.com>
2013-09-13 16:54:35 +02:00
Giuseppe D'Angelo
549c3248ec Remove qFill usages from uic
QtAlgorithms is getting deprecated,
see http://www.mail-archive.com/development@qt-project.org/msg01603.html

Change-Id: I58d0c78609381b20ffe8a68e36c8216689362ed5
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-09-13 16:53:14 +02:00
Stephen Kelly
8b0624182b MetaType: Fix operator{+,-}(int) with the type-erased const_iterators.
Make sure we don't modify the lhs. Instead copy it and advance the
copy.

Change-Id: I3440e8e175bfc299f8f83b816faca54fa3f79e43
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-09-13 14:37:41 +02:00
Stephen Kelly
a9770c4b6c Remove some unneeded constructors.
Change-Id: I34f86960dc0cfaada509957bca5466b2765e8239
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-09-13 14:37:32 +02:00
Martin Smith
93d7ee0da3 qdoc: Eliminate duplicate page warnings in some cases
Prevent qdoc from reporting duplicate pages for external pages with
the same URL and title.

Task-number: QTBUG-33462
Change-Id: Idabdb241aaa4fe105f7b3ea78229ff1ae8776ecf
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
2013-09-13 14:09:56 +02:00
Tor Arne Vestbø
59601e06d9 iOS: Interleave Qt application main() with iOS startup sequence
Our previous event loop integration had two unfortunate flaws:

  1. We would call qt_user_main() from a timer, after returning from
     didFinishLaunchingWithOptions. This had the effect of showing the
     iOS application window long before the Qt application UI had been
     set up, resulting in a 1-2 second flash of black/pink between the
     launch image disappearing and the actual application showing.

  2. We spun a nested event loop, where our implementation of the
     different event loop modes did not perfectly match the Apple
     implementation. This resulted in scrolling being busted in
     some cases such as when showing the virtual keyboard for
     Emoji characters.

These two issues have now been solved by calling the user's main()
from didFinishLaunchingWithOptions. Normally this would not work, as
the user's main would call QApplication::exec() at the end of their
main(), which would block and we would never return back from the
didFinishLaunchingWithOptions callback, resulting in no UI on screen.

We work around this by longjmp'ing out of QApplication::exec(), back
into didFinishLaunchingWithOptions, so that it can return. Again,
this would normally not work, as the call stack where QApplication
and friends would live would get smashed as the application
continued executing. We work around this by allocating a block
of stack space at the start of main(), which we then redirect the
stack pointer to before calling the user's main. This results in
the whole stack of the user's main() and below being preserved, even
if we longjmp out of the call stack (which then restores the
stack pointer).

This approach should work fine together with garbage-collection as
well, since the mark-and-sweep phase will walk the stack from the
stack pointer to the stack base, including sections of the stack
that were part of qt_user_main() and live in the reserved area.
One case where GC will fail though is if it happens as part of the
qt_user_main() call, where the GC will not mark anything in the
'real' callstack below UIApplicationMain(), but this is not
expected to happen.

The size of the reserved stack can be controlled through the
Info.plist key 'QtRunLoopIntegrationStackSize', as well as the
'QtRunLoopIntegrationDisableSeparateStack' key to disable the
separate stack approach completely. This will fall back to the
old approach. The amount of stack space used by the user's
main can be determined by enabling a special debugging mode,
using the 'QtRunLoopIntegrationDebugStackUsage' key.

Change-Id: I2af7a6cfe1a006a80fd220ed83d8a66d4c45b523
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2013-09-13 14:08:44 +02:00
hjk
52b827d11b Fix typo in note on symlink behavior of QFileInfo::exists
Change-Id: Iacd957cd9cd04e9153efd826bb42d872f8963f75
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2013-09-13 14:07:02 +02:00
Giuseppe D'Angelo
1119eb5742 Remove qSort usages from qdoc
QtAlgorithms is getting deprecated,
see http://www.mail-archive.com/development@qt-project.org/msg01603.html

Change-Id: I419d767ea18944917888037899e6ececdb014e82
Reviewed-by: Martin Smith <martin.smith@digia.com>
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2013-09-13 13:53:55 +02:00
Giuseppe D'Angelo
173ce3ab93 Fix Strict Weak Ordering in qdoc's comparator
If both n1 and n2 are "Private", the comment says they're equivalent,
but the function is actually stating that n1 < n2 AND n2 < n1.

Change-Id: I8e30b32c1e5240551ab1808baf6fc476841dfde4
Reviewed-by: Martin Smith <martin.smith@digia.com>
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2013-09-13 13:53:53 +02:00
Giuseppe D'Angelo
76ef6aac6a QDoc: properly initialize a member
Spotted by valgrind:

==14189== Conditional jump or move depends on uninitialised value(s)
==14189==    at 0x47B3FD: DocParser::parse(QString const&, DocPrivate*, QSet<QString> const&, QSet<QString> const&) (doc.cpp:1627)
==14189==    by 0x4818AC: Doc::Doc(Location const&, Location const&, QString const&, QSet<QString> const&, QSet<QString> const&) (doc.cpp:2755)
==14189==    by 0x4E6C3D: PureDocParser::processQdocComments() (puredocparser.cpp:140)
==14189==    by 0x4E6A9E: PureDocParser::parseSourceFile(Location const&, QString const&) (puredocparser.cpp:109)
==14189==    by 0x4D2E4C: processQdocconfFile(QString const&) (main.cpp:473)
==14189==    by 0x4D3B3C: main (main.cpp:656)
==14189==  Uninitialised value was created by a heap allocation
==14189==    at 0x4C2B1C7: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==14189==    by 0x474378: DocPrivate::constructExtra() (doc.cpp:415)
==14189==    by 0x47B975: DocParser::insertTarget(QString const&, bool) (doc.cpp:1676)
==14189==    by 0x476B52: DocParser::parse(QString const&, DocPrivate*, QSet<QString> const&, QSet<QString> const&) (doc.cpp:956)
==14189==    by 0x4818AC: Doc::Doc(Location const&, Location const&, QString const&, QSet<QString> const&, QSet<QString> const&) (doc.cpp:2755)
==14189==    by 0x4E6C3D: PureDocParser::processQdocComments() (puredocparser.cpp:140)
==14189==    by 0x4E6A9E: PureDocParser::parseSourceFile(Location const&, QString const&) (puredocparser.cpp:109)
==14189==    by 0x4D2E4C: processQdocconfFile(QString const&) (main.cpp:473)
==14189==    by 0x4D3B3C: main (main.cpp:656)

Change-Id: I5c50c6611a1d901cc19d12bc3757977c36b2a73b
Reviewed-by: Martin Smith <martin.smith@digia.com>
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2013-09-13 13:53:50 +02:00
Morten Johan Sørvig
44a58de2ae Fix highdpi CE_HeaderLabel pixmaps in fusion style
Make sure enough pixels is sourced by multiplying
the layout rect size with the pixmaps devicePixelRatio.

Task-number: QTBUG-31477

Change-Id: I742603c09a65a520587da3eef9479ef7f0c87022
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
2013-09-13 13:45:43 +02:00
Richard Moe Gustavsen
31b4461097 moc: add -M<key=value> to ease static qml plugin linking
A module plugin in qml belongs to a URI/namespace. This
uri is resolved run-time by QtDeclarative by knowing the
path of the qmldir that references the plugin.
For static plugins this becomes a problem, since we lost
the information regarding which plugin belongs to which
qmldir, since a static plugin has no file path.

To avoid pushing the responsibility of clarifying this
onto the application developer, it is better to embed this
information into the meta data of the plugins themselves.
Since this information can be resolved by the
build system, a new option to moc has been added:
-M<key=value>
that will let you add meta tags to the meta data from
the command line to each class that has an IID specified.
For the URI case, we can then e.g do:
-Muri=QtQuick.Controls -Muri=QtQuick.Controls.Private

Change-Id: I81a156660148fc94db6f3cac0473e9e1c8458c58
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-09-13 11:48:08 +02:00
Shawn Rutledge
209a5f1e8d Adding QPlatformMessageDialogHelper and QMessageDialogOptions
We plan to add support for native message/alert dialogs on Android
and iOS because it's otherwise impossible to have a true popup window.
Then we might as well have native message/alert dialogs on other
platforms too.  It will become an alternative implementation behind
QMessageBox and perhaps QErrorMessage.

Task-number: QTBUG-30883
Task-number: QTBUG-29462
Change-Id: I73dcfc6438e696189b6d37091874c7ad69b4ec68
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2013-09-13 11:47:06 +02:00
Teo Mrnjavac
060b862b61 Bring back Qt4 X11 session management functionality.
Added QXcbSessionManager to the Xcb plugin.
QXcbSessionManager inherits from QPlatformSessionManager, it's a port of
QSessionManager as it is in Qt 4.8.
Minor changes also in QPlatformSessionManager and QGuiApplication to
hook it up.

Task-number: QTBUG-28228
Task-number: QTBUG-30011
Task-number: QTBUG-33033
Change-Id: I50b33d05a1e32c5278dea339f693713acc870a70
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: David Faure <david.faure@kdab.com>
2013-09-13 11:47:06 +02:00
Thiago Macieira
f4ebb06189 Remove Q_PACKED from structures that do not need to be packed
These structures do not need to be packed. With some compilers, Q_PACKED
was defined to be empty, which means that the code was working fine
without packing. Or there were some lingering problems on those
platforms (MSVC) and we're now exposing them in all platforms.

Actually, it shouldn't be a problem anywhere. QCharAttributes, quint24
and QFontEngineQPA::Glyph have only char/uchar members, so they're
packed already (they have alignof == 1). The only platform where that
wasn't true was ARM OABI, which we don't support anymore.

QFontEngineQPA::Header seems to always come from a QByteArray, so it
doesn't neeed to be packed either. However, just to be sure, I'm
inserting a check for alignment.

And QFontEngineQPA::Block isn't used anywhere.

Change-Id: Iacfa25edf336ef2a03aeb6e40ae90937a21661ae
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-09-13 11:47:06 +02:00
Thiago Macieira
be8a76cffe Remove the empty definition of Q_PACKED
Structs defined with Q_PACKED *need* to be packed in all
platforms. Having an empty define means errors might go unnoticed for
a long time.

Change-Id: I9c388358fed27a8e018465f05375e4bbbee3484c
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-09-13 11:47:06 +02:00
Thiago Macieira
9cff511eb8 Remove Q_NO_PACKED_REFERENCE
Leftover. It's not used anywhere.

Change-Id: I023a390d84c9ed5dacd2699145f183e8a2317153
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-09-13 11:47:06 +02:00
Marc Mutz
48586b2bac QTest: use nth_element to calculate the median
Sorting is O(NlogN) complexity, while nth_element is linear.

Change-Id: Ic6596affe183494e87abe7bdaa7c9985f5b7cd58
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-09-13 11:47:06 +02:00
Marc Mutz
12bd604f24 QtConcurrent::Median: add some qMove()
In case this code is ever instantiated with a type that actually benefits from moving.

'value' is save to move since it was passed to the function by value.
'*mid' is save to move since it originates in a container that will be
 discarded on the next line anyway.

Change-Id: I13587be10974ba6cf95d56e0f8912ff88167b60b
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-09-13 11:47:06 +02:00
Laszlo Agocs
16a52882e7 Push updates to the QPA cursor even when a modal window is shown
Call QPlatformCursor::pointerEvent() even when the mouse event is
stopped due to being blocked by a modal window. This is necessary for
relatively dumb platforms, like eglfs, because the mouse cursor is
expected to be functional across the entire screen regardless of
having a modal dialog shown.

Platforms where the cursor is handled by the system (xcb, windows,
etc.) are not affected as they don't implement pointerEvent() anyway.

Change-Id: I4996ca0db23eb7f6ca3e2432d8d7abb1a5113dca
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-09-13 09:22:42 +02:00
Laszlo Agocs
e013eba203 eglfs: Set swap interval only when there is a context available
Mesa does not like eglSwapInterval calls without a current context.

Change-Id: I7ec2d4311586cf74da0461bc951a0e5d9399c35b
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-09-13 09:22:18 +02:00
Jędrzej Nowacki
5fd344389e Remove redundant checks in some tools classes
This is a simple optimisation allowed to us by the fact that all platforms
we run on use two's complement for the signed integers. The trick works as
long as one of the two signed integers is known beforehand to be
non-negative:

 - by definition, for any signed integer i, i <= INT_MAX
 - by definition, for any unsigned integer u, u >= 0
 - given a signed integer x >= 0, 0U <= uint(x) <= uint(INT_MAX)
 - therefore, given another signed integer y of whatever
   value, uint(x) < uint(y) ←→ x < y && y >= 0

The trick is an optimisation because the compiler doesn't know that one of
the two sides is always non-negative. Otherwise, it would do the
same optimisation.

Change-Id: If256ec0df4e06335805af8010bb67ce5fd3e065a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2013-09-13 09:22:15 +02:00
Laszlo Agocs
a26f47756b eglfs: Handle desktop and multiple windows gracefully
When trying to create more than one window, stop with a helpful error
message since this is not yet supported. Also, return a fake WId for
desktop windows.

Change-Id: I9859b62b1d4f6b6142982d2e5a90afc1fc3c6a28
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-09-13 09:22:13 +02:00
Jędrzej Nowacki
348b641fee Add assert if a global static is used after deletion.
Q_GLOBAL_STATIC accessor is documented to return dangling pointer if
called after destruction.

Change-Id: Ieafd5619b20ad256d9d5ad007d939f1430ef681f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-09-13 09:21:42 +02:00
Laszlo Agocs
a02e430db9 eglfs: Avoid glUniform calls with wrong type when drawing the cursor
It is not really fatal but fixing it gets rid of a Mesa warning.

Change-Id: I3045b2691e7457541d6524c3e3ff8a1882ca460b
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-09-13 09:21:39 +02:00
Thiago Macieira
23e89956c1 Fix new warnings under Clang 3.3
Probably added by a1898f4466.

qmetatype.h:70:29: error: inline function 'qMetaTypeId<QtMetaTypePrivate::QSequentialIterableImpl>' is not defined [-Werror,-Wundefined-inline]
qmetatype.h:1363:30: note: used here
            const int toId = qMetaTypeId<QtMetaTypePrivate::QSequentialIterableImpl>();

qmetatype.h:70:29: error: inline function 'qMetaTypeId<QtMetaTypePrivate::QAssociativeIterableImpl>' is not defined [-Werror,-Wundefined-inline]
qmetatype.h:1386:30: note: used here
            const int toId = qMetaTypeId<QtMetaTypePrivate::QAssociativeIterableImpl>();

Change-Id: I9afe1a3d50ab23eb701797e28b259966dc95a147
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
2013-09-13 07:20:40 +02:00
Aleix Pol
1864b485e4 Make QCollator more flexible to use in different platforms
So far we've known that we want QCollator as public API. It hasn't
been possible yet due to the strong dependency that QCollator used
to have on ICU.

This patch adds collation support for the platforms where ICU is not
the best option by using native collation API. Namely Windows and
Mac OS X.

Additionally a fallback POSIX back-end is added, so that we can make
sure it will work on any posix-compliant platform.

Change-Id: Ia1734acbf5f596698a81f2af927cc15636e4c908
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2013-09-13 05:48:10 +02:00
Aleix Pol
c517a6d6ff Refactor QCollator to be able to use it in different platforms
Propose the API to be changed so that we can implement QCollator in the
different platforms where Qt is available.

Change-Id: I7b3e933d7e3d1aa26c1b78d21ef75b71c692827f
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2013-09-13 05:47:55 +02:00
Lars Knoll
ec64d514fb Make the QCollator class public
The class missed the feature freeze for Qt 5.0, but has been ready
for quite a while. So make it public in time for Qt 5.2.

Change-Id: I9ac3f579ff5e371925fad40684762fff7ee4abd8
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-09-13 05:47:37 +02:00
Konstantin Ritt
ff0fdc0462 Warn if OpenType support missing for script of interest
Change-Id: I076cfc5244ca3c060fd005cc3fbf30b357604bc7
Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-09-13 02:29:10 +02:00
Konstantin Ritt
02651060b6 Decrease code duplication in QFontDatabase-s
Move scriptRequiresOpenType() body right into QFontEngine::supportsScript(),
thus centralizing use of this performance cheat.

Change-Id: I5f494b086f8f900b631c491f41e9cb800002c0f6
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-09-13 02:29:01 +02:00
Konstantin Ritt
741737b080 Implement QFontEngine::harfbuzzFont/Face() with HarfBuzz-NG
Change-Id: I5d4fed66d66e8aa650fe181e61dcc2345f0f907a
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-09-13 02:28:48 +02:00
Konstantin Ritt
75d06db873 QFontConfigDatabase: Minor code clean-up
Get rid of duplicated includes, useless defines, and private enums
that just duplicate a public ones; avoid variable names collisions.

Change-Id: I540e812b6cd510eb1ed441d97e9af377611d804a
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-09-13 02:28:41 +02:00
MyoungSeok Song
30a4114e60 QNX: new signals for foreign windows creation/closing
Implement the foreignWindowCreated and foreignWindow closed signals, emitted when foreign windows are created and closed, respectively.

Change-Id: I72dd5380e6061f191eb8362fda5dd8fb8e9ed06b
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com>
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
2013-09-13 01:48:07 +02:00
MyoungSeok Song
fddf76f2ac QNX: add nativeResourceForScreen
Implemented nativeResourceForScreen api to return QObject* which can be used to connect  foreignWindowCreated, foreignWindowClosed signal in QQnxScreen.
Usecase is to connect signal in custom QML component as below
	QObject * obs = interface->nativeResourceForScreen("QObject*", screen);
	connect(obs, SIGNAL(foreignWindowCreated(void*)), d, SLOT(newForeignWindowCreated(void*)));

Change-Id: I512c3b6d188a2e90ef7b8e89c413ca420a29dd9b
Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com>
Reviewed-by: Fabian Bumberger <fbumberger@rim.com>
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
2013-09-12 19:43:33 +02:00
Gabriel de Dietrich
e30bad8b24 Windows style: Support underlined mnemonics from Qt Quick Controls
We use the usual accessibility + private property combo pattern.

Task-number: QTBUG-33030
Change-Id: I7fbb704c949ff2df163536534f6f46d2e226402d
Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
2013-09-12 16:58:29 +02:00
Tor Arne Vestbø
40033ac299 iOS: Implement hasPendingEvents() in the event dispatcher
As we're using CFRunLoopIsWaiting() to check for the possible presence
of system events hasPendingEvents() will never return false if called
on the main thread. We assume clients will not use this function to
determine whether or not to call processEvents(), but instead use the
return value from processEvents.

Change-Id: Ifd63892c6d35bb7da204072616bfe3ee69ca1d85
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2013-09-12 16:48:00 +02:00
Tor Arne Vestbø
5d926657f4 iOS: Teach event-dispatcher to handle changes to run-loop mode at runtime
UIKit changes the run-loop mode during scrolling to UITrackingMode, which
presumably prioritizes touch events and other sources related to a
smooth scrolling experience. It signals this change by interrupting the
current run-loop pass, and the outer loop is responsible for re-entering
the run-loop in the new mode. Failing to enter the run-loop with this
new mode results in UIScrollViews losing their kinetic feel when
flicking. This can be observed by e.g. bringing up the Emoji keyboard
and scrolling it horizontally.

We keep track of the current run-loop mode by listening for push and pop
notifications on the UIApplication object. The current mode is then used
in our Q_FOREVER-loop when re-entering CFRunLoopRunInMode.

For now we don't add our posted event source or timer source to the
new modes, under the assumption that the system prefers to limit the
number of sources that will fire during scrolling. If this turns out
to give a bad user-experience for Qt applications we should consider
changing it.

Change-Id: I3a612b3cfc77c74b658963057732dc4d61684df8
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2013-09-12 16:47:54 +02:00
Marc Mutz
46df8921e7 QtConcurrent: fix median calculation
The median, for arrays of odd size, is found in [size/2], not [size/2+1].
For arrays of even size, the code doesn't work anyway, so nothing to do there.

Change-Id: Id23ff3fe9538c2d8ef8f88e23127cb92af08b444
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-09-12 14:48:58 +02:00
Marc Mutz
880b614c8f QtConcurrent: use nth_element to calculate the (correct) median
Sorting is O(NlogN) complexity, while nth_element is linear.
Also remove the errornous +1 when calculating the median position.

Change-Id: Ib39085b59a6c5d15a3a940b1ce3377080340bc09
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-09-12 14:12:30 +02:00
Tor Arne Vestbø
1ec3718432 iOS: Rewrite CoreFoundation event-dispatcher
Instead of having separate code-paths for QEventLoop::EventLoopExec
and the non-blocking processEvent() we now have a single Q_FOREVER
loop where the logic can be shared. We make multiple loop-passes,
each time calling CFRunLoopRunInMode with potentially different
arguments, depending on the result of the previous run.

For the EventLoopExec case we'll continue making loop-passes until
the event-loop has been interrupted. For the non-EventLoopExec case,
we respect interruption, but will continue making loop-passes only
until we've processed all events in the queue, optionally waiting
for the initial event if WaitForMoreEvents is set. Limitations in
the CoreFoundation APIs unfortunately force us to keep some state
on whether or not we've processed events and timers for a given
processEvents() pass (with corresponding deferred scheduling of
timers and event source signaling).

The way we handle timers has also been rewritten to no longer defer
the timer activation to a special timer source. The constraint of
CoreFoundation timers is that they can not recurse (re-fire) in a
callback, but that only applies per timer, so using multiple CF
timers allows us to recurse. We still only use a single CF timer
for all the Qt timers though, and only spawn a new CF timer if
the user calls processEvents() inside a timer callback.

This commit removes the logic related to dealing with UITrackingMode,
as that logic was slighly problematic, but the feature will be
added back in a follow-up commit, in line with the new approach.

The result of this commit is that we're passing all event-loop,
event-dispatcher, and timer auto-tests, both for the QtCore dispatcher
and the GUI event-dispatcher.

Change-Id: I3c56fbc7857a25110064681257abb47075b5bd2d
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2013-09-12 12:32:14 +02:00
Tor Arne Vestbø
fc538bce4a iOS: Bump minimum required deployment target to 5.0
Apple only provides simulators for 5.0+, and we now rely on 5.0+ APIs.

Change-Id: I9ec047767b5f5e1b33aeef186ec6aff2b9c70a05
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2013-09-12 12:29:38 +02:00
Tor Arne Vestbø
7c1bbde476 Move iOS makespec out of unsupported directory
It's a supported platform from 5.2, and we want build-scripts/CI/etc to
adapt to the change as soon as possible.

Change-Id: I8c78351191f59a6ecab33acc0829d2535379c787
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
Reviewed-by: Simo Fält <simo.falt@digia.com>
2013-09-12 12:29:33 +02:00