When cursor position or editor text changes many input method query attributes like
cursor rectangle, cursor position, surrounding text, current selection and anchor
position change as well. Checking in text control and editor classes what of those
related attributes have exactly changed before calling the update increases code
complexity unnecessarily for a little benefit. Qt::InputMethodQueries flag can still
be used to optimize more independent cases when attributes change individually, which is
more common for input methods hints, fonts, platform data, maximum length or enabled
attributes.
Change-Id: Ic9eee5f1edb6d33ef6c01d2c9c8ad582100c0150
Reviewed-on: http://codereview.qt-project.org/4739
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
It is incorrect to use QT_GUI_EXPORT to export symbols from any library
other than libQtGui. When used outside of libQtGui, QT_GUI_EXPORT
attempts to _import_ symbols rather than _export_ them.
Change-Id: I7489067f479edd3acd9bf08bcaa24ee4dea4c3cc
Reviewed-on: http://codereview.qt-project.org/4838
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Lincoln Ramsay <lincoln.ramsay@nokia.com>
a) don't detach until an occurrence found
b) don't memmove every time an occurrence found
c) truncate quickly )
well, numbers are better than words:
before:
RESULT : tst_QList::removeAll_primitive():
2,617,902 CPU ticks per iteration (total: 261,790,171, iterations: 100)
RESULT : tst_QList::removeAll_movable():
2,547,540 CPU ticks per iteration (total: 254,753,960, iterations: 100)
RESULT : tst_QList::removeAll_complex():
16,852,099 CPU ticks per iteration (total: 1,685,209,906, iterations: 100)
after:
RESULT : tst_QList::removeAll_primitive():
73,520 CPU ticks per iteration (total: 73,520,442, iterations: 1000)
RESULT : tst_QList::removeAll_movable():
90,422 CPU ticks per iteration (total: 90,422,464, iterations: 1000)
RESULT : tst_QList::removeAll_complex():
9,667,073 CPU ticks per iteration (total: 9,667,072,670, iterations: 1000)
Merge-request: 1285
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
(cherry picked from commit b209fe3b1a51f64541067917e96de99f14ad65f3)
Change-Id: Ia26036ed741cefcf4b5868b7b2fc5eae8130d3dc
Reviewed-on: http://codereview.qt-project.org/4577
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Without this, building OpenVG would fail because Q_OPENVG_EXPORT wasn't
defined at all, causing it to be treated as a variable name
Merge-request: 1256
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
(cherry picked from commit 8680ced782c5e225b2e15c50c05493a23410b119)
Change-Id: I0da36af8cdcf411325fad25fa5c4d2ab7764c0ee
Reviewed-on: http://codereview.qt-project.org/4573
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Use the new PCMPESTRM instruction (Parallel CoMPare Explicit-length
STRings with result in a Mask) which is added in SSE4.2 for
facilitating string operations. The "compare ranges" mode allows us to
search for characters outside the Latin 1 range and then use the
SSE4.1 PBLENDVB instruction to replace those with question marks.
Unlike previous SSE compare instructions, the PCMPxSTRx family allows
us to operate on unsigned 16-bit values. This saves us another
parallel add.
Reviewed-By: Samuel Rødal
(cherry picked from commit 45d2d36c9dbcbce403c78838ea52acd1ab111b68)
Change-Id: I0f9d864f9d19c0f0da43ccb6918dc28295074496
Reviewed-on: http://codereview.qt-project.org/4468
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
The new instruction is PBLENDVB, which creates a result by selecting
bytes from one of two registers, depending on whether the mask
contains a 1 (0xff) or a zero.
The SSE2 code requires three instructions (and, andnot, or).
The equivalent Neon instruction is VBSL (bit select).
Reviewed-by: Samuel Rødal
(cherry picked from commit bdad106358ae177d1345f5ff85c0e38cfeb5ca90)
Change-Id: I5b0d055a4be532f81c6f11181d710525cd6c3f25
Reviewed-on: http://codereview.qt-project.org/4466
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
Also set ImhMultiLine on QTextEdit
Change-Id: I04a5a1d69c2048ea94c24210e2b8374f334be1b6
Reviewed-on: http://codereview.qt-project.org/4414
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Results of the ongoing workshop in Oslo:
QInputPanel will be the application facing interface
for controlling the input context as well as querying
things like the position of the virtual keyboard.
QInputContext is significantly cleaned up and only there as
a compatibility API for existing code.
Change-Id: Ie8e2ee480930763f414bfaae63247b1fb6500c82
Reviewed-on: http://codereview.qt.nokia.com/4357
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Vesa Rantanen <vesa.rantanen@nokia.com>
Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
This change prepares for enabling native menus
on OS X.
Move code from src/widgets to cocoa:
- qcocoaapplicaiton
- qcocoaapplicaitondelegate
- qcocoamenuloader
- qcocoamenu
- qmenu_mac
- misc helpers to qcocoahelpers
Create a QNSApplication and
QCocoaApplicationDelegate at application startup.
New Lighthouse API:
- class QPlatformMenu
- class QPlatformMenuBar
- QPlatformIntegration::createPlatformMenu()
- QPlatformIntegration::createPlatformMenuBar()
Platforms that wants a native menu integration
subclasses QPlatformMenu[|Bar] and implements the
create function. The default implementation returns
0, which causes QMenu to use the standard Qt
menus.
This API is based on the current native menu
abstraction that Mac, Wince and S60 uses in Qt 4.
The main difference is that the platform classes are
proper standalone classes and not #ifdeffed into
QMenuPrivate.
Change-Id: I3da41f80b0ae903a476937908b1f9b88014b7954
Reviewed-on: http://codereview.qt.nokia.com/4068
Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
Many applications relied on the undefined behaviour that the
filesystem engines returned clean paths (despite the documentation
stating that they may not), and consequently suffered regressions with
Qt 4.8.
Unix paths are once again cleaned if necessary.
Windows/Symbian paths were already cleaned, but now use the utility
function to check if a path is dirty, to avoid duplicated code.
Task-number: QTBUG-19995
Change-Id: If8c18469f149291c9d079ae3da23bc2087bbd49a
Reviewed-on: http://codereview.qt.nokia.com/4154
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Prasanth Ullattil <prasanth.ullattil@nokia.com>
The build-key is an old mechanism to work around binary
incompatibilities in GCC 3.x versions. Modern GCC has not broken binary
compatibility since 3.4, making this mechanism obsolete.
The cache value stored now only includes Qt version, the debug/release
boolean, and the last modified time for the plugin. Old 4-value keys
will be replaced with new keys as the plugins are reloaded the first
time.
This also removes QLibraryInfo::buildKey(), which is a source-incompatible
change.
The UNIX and Windows configure tools have been updated to stop
outputting the QT_BUILD_KEY preprocessor directive.
See also:
http://lists.qt.nokia.com/pipermail/qt5-feedback/2011-August/000892.html
Change-Id: I7d06969a370d3d2c6de413c1230d9d6789cbf195
Reviewed-on: http://codereview.qt.nokia.com/3977
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
QDir::operator== was creating a clean absolute path for comparison
purposes if the original path was relative.
However original absolute paths were trusted, even though they could
be unclean. Now they are checked for cleanliness first.
Task-Number: QTBUG-19995
Task-Number: QTBUG-20495
Change-Id: I047a1a40ae5151e4604085e4ac87f30a4e4979c4
Reviewed-on: http://codereview.qt.nokia.com/4099
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Prasanth Ullattil <prasanth.ullattil@nokia.com>
http://www.unicode.org/reports/tr15/#Guaranteeing_Process_Stability:
> handle any code points that were not defined in the earlier version
> as if they were unassigned: such code points will not decompose or compose,
> and their Canonical_Combining_Class value will be zero.
since QChar::Unicode_Unassigned value is 0, it's less than any other
QChar::UnicodeVersion value and must ba handled explicitly
Change-Id: I6df025b4173d407660adae77ec5eeb98d15cb8ce
Reviewed-on: http://codereview.qt.nokia.com/4084
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
As the comment suggests, renaming this function avoids confusion with
libc's free().
Change-Id: Ia077b92c947d81ef9d78de940a1cd8ed022edb3c
Reviewed-on: http://codereview.qt.nokia.com/4063
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
This commit removed the function implementations, but not the
declarations.
This removes QListData::append2(T) but moves the optimized
QListData::append2(T) implementation to QListData::append(T)
Change-Id: I39b6dea31420a7cefe079b94a91a96eb16000d2a
Reviewed-on: http://codereview.qt.nokia.com/4062
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
The toUpper/Lower() methods in QString should not
be locale dependent, as this can lead to rather
hard to find bugs in at least a turkish locale.
Rather have explicit, locale dependend case conversions
available in QLocale.
Reviewed-by: Denis Dzyubenko
(cherry picked from commit da0e1e101bb4c44c25b6523357fa81ad1b2d6539)
Change-Id: I1cc3f341bef17ad573a736dc94c9c5d514ace54e
Reviewed-on: http://codereview.qt.nokia.com/3259
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
For property notify signals, QtDeclarative can manage connections
in a more special case - and more performant - way. This patch
adds a callback hook so that QtDeclarative can intercept signals
being emitted by declarative objects.
Change-Id: I72554e80df0a4257da65d81cc1c5db88a11446a4
Reviewed-on: http://codereview.qt.nokia.com/3363
Reviewed-by: Martin Jones <martin.jones@nokia.com>
use qBinaryFind() with a case-sensitive string comparison
instead of QHash. This also improves startup time and reduces
runtime memory consumption.
Change-Id: I5c5f7cae5e42acb3fa727acac19fe39c53310329
Reviewed-on: http://codereview.qt.nokia.com/3673
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
replacing the if-else trees with the switch statement
gives a 2x-3x parsing performance boost on parsing these
expressions.
Change-Id: Ia0e76ae4e1ab6930dbecf1d4a5232a4cc7198654
Reviewed-on: http://codereview.qt.nokia.com/3672
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
We had to leave the non-const operator== for binary compatibility.
Remove them all, just leave the const version in there. 100% source
compatible.
Change-Id: Ib7a70fb441fe51d5164d9cbf495cbeda0f48fafe
Reviewed-on: http://codereview.qt.nokia.com/2773
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Robert Griebl <robert.griebl@nokia.com>
Since we now have QBasicMutex as a POD, we can simplify the mutexpool.
This remove the call the the Q_GLOBAL_STATIC and some others tests that
are taking CPU cycles when activating a signal.
The QMutexPool class itself can't be simplified because its mutex are
recursive mutexes, and the size is dynamic. also it is harder to get all
the mutexes initialized to 0.
Change-Id: Ie781655635907d2ad620eb189099cba14638414f
Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
Reviewed-on: http://codereview.qt.nokia.com/2171
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Olivier Goffart <olivier.goffart@nokia.com>
And added a POD QBasicMutex. (QBasicMutex* can safely be
static_cast'ed to QMutex*)
The d pointer is not anymore always a QMutexPrivate.
If d == 0x0: the mutex is unlocked
If d == 0x1: the mutex is locked, uncontended
On linux:
if d == 0x3: the mutex is locked contended, waiting on a futex
If d is a pointer, it is a recursive mutex.
On non-linux platforms:
When a thread tries to lock a mutex for which d == 0x1, it will try to
assing it a QMutexPrivated (allocated from a freelist) in order to wait
for it.
Change-Id: Ie1431cd9402a576fdd9a693cfd747166eebf5622
Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
Reviewed-on: http://codereview.qt.nokia.com/2116
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Olivier Goffart <olivier.goffart@nokia.com>
QtDBus requires a QVariant argument to be passed to property reads and
writes. For performance reasons QtDeclarative does not do this. By
flagging the meta object as requiring this, QtDeclarative can do so only
required.
Task-number: QTBUG-15052
Change-Id: I032c946f079523f5f10217ed56642fb315265d9f
Reviewed-on: http://codereview.qt.nokia.com/2365
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Martin Jones <martin.jones@nokia.com>
The timer id allocator doesn't need a paylod (hence T=void), but we want
to tune the allocation 'strategy.' We allocate a maximum of 6 blocks
(like before), but the first block is twice as large as before and is
not static writable anymore. The initial value is 1 (0 is not a valid
timer id), but otherwise the constants are the same as the defaults.
Change-Id: Ied49ff4d7a6a8d69bc8c7bfa5475e4111446659f
Reviewed-on: http://codereview.qt.nokia.com/2161
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Olivier Goffart <olivier.goffart@nokia.com>