Commit Graph

22078 Commits

Author SHA1 Message Date
Allan Sandfeld Jensen
05feaeed43 Remove duplicated NAN/INF logic from tst_qstring
Qt already has solutions for cross platform isnan and isinf logic. We
should use that instead of duplicating it.

This should also fix compiling tst_qstring on MinGW with C++11.

Change-Id: I7b691fd47701a8f07e1a1fe08a95a0aca43ccca1
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-01-21 10:54:22 +01:00
Giuseppe D'Angelo
2ec2dbed67 QSslEllipticCurve: add fromLongName
Since the conversion to a long name was already there, also support
creation from a long name.

Change-Id: Iad712db7447fb0a0a18f600b7db54da5b5b87154
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2015-01-21 10:41:39 +01:00
Tobias Koenig
309c804239 Haiku: Add implementation for QStandardPaths
Change-Id: Ic64a5ab3a1ef711180b855ee99154177b7e25696
Reviewed-by: David Faure <david.faure@kdab.com>
2015-01-21 06:12:42 +01:00
Simon Hausmann
fc8adfea9f Introduce helper for QML to allow creating QWidget hierarchies
Commit 1259c5768e410361bcd8b5cf0c2057a2ebabda83 in qtdeclarative removed the
ability to create QWidgets in QML by giving them the correct parent, which
requires calling QWidget::setParent instead of QObject::setParent. This patch
introduces a hook that will allow QtQml to give widgets a proper parent.

Change-Id: I84c57ca5032582c43e405219343d55ac9cf2ffa0
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
2015-01-20 16:15:45 +01:00
Kai Koehne
463c559962 MSVC: Silence warning about right shift by too large amount
Silence the MSVC warning that got introduced in commit 62b752b3a2:

warning C4333: '>>' : right shift by too large amount, data loss
qdebug.cpp(316) : see reference to function template instantiation 'void putEscapedString<uchar>(QTextStreamPrivate *,const Char *,int,bool)' being compiled
with
[
Char=uchar
]
qdebug.cpp(270) : warning C4333: '>>' : right shift by too large amount, data loss

Change-Id: If1ee20b741feae3287a8d6a11c202b4296d429fb
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-01-20 16:15:06 +01:00
Alex Trotsenko
a373ffcda9 QIODevice: remove ineffective caching members
Most of the QIODevice functions already have a locally cached
"sequential" flag. Make the rest of them follow this strategy.
This eliminates the need to use private caching members.

Change-Id: I0edb2c9b7c5f411c5bee25c425e7b40e3c9021d3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: hjk <hjk@theqtcompany.com>
2015-01-20 10:37:59 +01:00
Arnaud Bienner
bdcb3f9aab QHeaderView: fix restoring Qt4 state.
When multiple sections were grouped together, sectionItem.size was the total size of grouped sections, not the size of one section.

Task-number: QTBUG-40462
Change-Id: I401a1583dd30880ccf5b4c105a237d6563f212e8
Reviewed-by: Thorbjørn Lund Martsum <tmartsum@gmail.com>
2015-01-20 10:30:54 +01:00
Eskil Abrahamsen Blomfeldt
2a86bf8ce0 Android: Fix canonical form of nonexistent paths
On some Android devices, the realpath() implementation will return
the full path even if the path does not exist. This breaks the
expectation of the canonical path, which should be empty for
nonexistent paths. A few autotests failed due to this.
To work around it, we query existence before getting the
canonical path.

[ChangeLog][Android] Fixed canonical path for nonexistent paths on
some devices.

Change-Id: I5c1dabb8b8394694bc74d2a91912800aaff6b9e3
Task-number: QTBUG-43705
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-01-19 12:21:19 +01:00
Maks Naumov
4c6ab8f9e2 QToolBox: remove redundant QAbstractButton::text() from paintEvent()
Change-Id: I95773096ca1b915468c086ba61eba2e3e551a7e3
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
2015-01-19 11:38:34 +01:00
Kai Koehne
ca6fb5436d MSVC: Disable warning C4996 for freetype
Change-Id: I22be0faca29989142cd2fa0eaed6846fc40d3f4b
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
2015-01-19 11:24:35 +01:00
Kai Koehne
826d108410 WinRT: Disable compiler warning 4996 for debug builds
Move compiler warning 4996 from level 3 to 4, like we did already for
desktop builds: 0a76b6bc7f .

Change-Id: Ic4bbaeb3104352a915b15eec7a9c9dda9a5cceec
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@theqtcompany.com>
2015-01-19 11:24:26 +01:00
Sérgio Martins
9087df6bd2 windowflags test: Fix showing which flags are set
The text edit that shows which flags we have set should be updated in
PreviewWindow::setWindowFlags() and PreviewWidget::setWindowFlags()
but QWidget::setWindowFlags() isn't virtual so only the base class
one was called.

Change-Id: I5c9d47d003d5701dde1ab63df0d349f641d66f44
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
2015-01-19 11:17:49 +01:00
Oswald Buddenhagen
553a3661c1 Bump version
Change-Id: I250fa893cdf831d03f9217b5dc0a5aa2f9a6a6b5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-01-19 10:54:37 +01:00
Ulf Hermann
0310cef332 FusionStyle: Don't try to draw null pixmaps
We have the same check for null already for PE_IndicatorHeaderArrow
which actually uses the same pixmap. If the file is not found the
pixmap will be null and the code dividing by its width or height will
thrown an arithmetic exception.

Task-number: QTBUG-43067
Change-Id: I13a5ee9f21f4189b7bbcfd57a6f5b52113de834d
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
2015-01-19 10:53:10 +01:00
Daniel Teske
c243dd5643 QIncrementalSleepTimer: Use QElapsedTimer instead of QTime
Since the former is monotonic and we need a monotonic timer here.

Change-Id: I34325da4fe0317e12f64629a6eef6a80990c3e1a
Reviewed-by: Daniel Teske <daniel.teske@theqtcompany.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-01-19 10:50:08 +01:00
Sze Howe Koh
c49641a117 Doc: Fix typos
Change-Id: I29d5576902a5d1ea25558e980081952d9157f7f0
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2015-01-19 10:48:03 +01:00
Sze Howe Koh
0f5b970894 Doc: Remove references to QOpenGLContext::destroy()
This function is private.

Task-number: QTBUG-35907
Change-Id: I370c0bfd8fda11c68ee76ee42967f117a81b381c
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
2015-01-19 10:48:00 +01:00
Pierre Rossi
890ae41d06 Fix a crash in QPlainTextEdit::documentChanged
The layout for an invalid block is very likely to be null, it
shouldn't be accessed without checking the block's validity first.
We can make the check a bit more conservative and simply check that
the block isn't empty.

Change-Id: Ic1459a6168b1b8ce36e9c6d019dc28653676efbe
Task-number: QTBUG-43562
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2015-01-19 10:47:28 +01:00
Andy Shaw
7c9497ad6a Respect the hotspot passed in for the cursor
When the hotspot is set to be QPoint(0,0) then QPoint will see this as
being a null QPoint. However, it is a valid position as far as the hot
spot for the cursor is concerned, so we default to QPoint(-1,-1) instead
and check for that.

Task-number: QTBUG-43787
Change-Id: Ibf6253033016c4b556b8a2a79c89819a4d5825cb
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
2015-01-19 10:44:54 +01:00
Andy Shaw
730d07df83 Account for pixmap's device pixel ratio when calculating the label size
When determining the size of the QPushButton's label then the device
pixel ratio of the pixmap used to represent the icon needs to be taken
into consideration so it is rendered correctly.

Change-Id: If32760b120d7a749a51e2c30592d621c0e63dace
Reviewed-by: Pierre Rossi <pierre.rossi@theqtcompany.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-01-19 10:44:48 +01:00
Andy Shaw
17cce24648 Only call ShowWindow() once when going from FullScreen to Maximized
Since going from FullScreen to Maximized is taken care of inside the
FullScreen block then we don't want to call ShowWindow() again in the
Maximized block. Therefore the Maximized block is moved so it is only
invoked if it is not coming or going to fullscreen.

As the minimized case is not accounted for in FullScreen that is left as
is in its own if block.

Task-number: QTBUG-43849
Change-Id: I3141347e072c50b2a4475098d7b8ee0b207578a7
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
2015-01-19 10:44:42 +01:00
Marc Mutz
b69c2e86de QFreeList: fix undefined behavior
Signed integer overflow is undefined behavior ([expr]/4),
but unsigned arithmetic doesn't overflow, so isn't
([basic.fundamental]/4, footnote there).

So, use unsigned arithmetic for the loop-around serial
number generation in incrementserial(). While we're at
it, also use it for the masking operation in the same
function.

Found by UBSan.

Change-Id: I500fae9d80fd3f6e39d06e79a53d271b82ea8df8
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-01-19 10:43:45 +01:00
Marc Mutz
62a96dbb53 QTextFormat: fix undefined behavior
Left-shifting of negative values is undefined ([expr.shift]/2).

Since hashValue is a uint already, rectify by casting it->key to
uint prior to shifting.

Found by UBSan.

Change-Id: I94a5311f5a4492f514f595b8fb79726df1e7d0de
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-01-19 10:41:57 +01:00
Marc Mutz
390ea21873 QByteArrayMatcher: fix undefined shift
The REHASH macro is used in qFindByteArray() with a char argument.
Applying the shift operator promotes (a) to int. The check in
REHASH, however, checks for the shift being permissible for
_unsigned_ ints.

Since hashHaystack is a uint, too, rectify by casting (a) to
uint prior to shifting.

Found by UBSan:

  src/corelib/tools/qbytearraymatcher.cpp:314:72: runtime error: left shift of 34 by 30 places cannot be represented in type 'int'

Change-Id: Id09c037d570ca70b49f87ad22bed31bbb7dcc7fb
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-01-19 10:41:22 +01:00
Marc Mutz
b18e6396bd QBenchmarkResult: fix uninitialized value
This manifested itself in a UBSan report about loading a non-enumerated
value from an enumeration variable:

   src/testlib/qbenchmark_p.h:95:7: runtime error: load of value 11091, which is not a valid value for type 'QBenchmarkMetric'

(or similar).

The chosen value is simply QTest::QBenchmarkMetric(0).

Change-Id: I8492a871a71d89fa6f7902d38f9eecee4b060646
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-01-19 10:41:09 +01:00
David Faure
7fc8c560e2 Fix QPrinter::setPaperSize regression when using QPrinter::DevicePixel
The QPageSize-based refactoring led to casting DevicePixel to a QPageSize::Unit
value of 6 (out of bounds). And then the switch in qt_nameForCustomSize
would leave the string empty, leading to "QString::arg: Argument missing: , 672"
warnings.

Change-Id: I85e97174cc8ead9beccaaa3ded6edfad80f8e360
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Andy Shaw <andy.shaw@digia.com>
2015-01-19 10:39:55 +01:00
Rainer Keller
20480070a6 Autotest: Selftests fail in UTC timezone
Selftests for testlib fail when executed in UTC timezone because local and
UTC are the same, but expected to be different. A custom timezone is used
instead.
Debug output of qCompare does only handle local and non-local timezones, using
new Qt5 features allows to show the correct timezone in format string.

Change-Id: I753884a12370952b7b62a90d62896db4f2d3d1b4
Reviewed-by: Jason McDonald <macadder1@gmail.com>
2015-01-19 10:21:26 +01:00
Tor Arne Vestbø
b2883a6acc Add QDebug support for NSObject and a few selected CoreFoundation types
Lets us print out the interface name in addition to the address when
doing:

  qDebug() << myNSObject;

Unfortunately, CFTypeRef is just a typedef to void*, so we can't add a
generic overload for CFTypeRef. For now, we provide operators for
commonly used Core Foundation and Core Graphics types. Additional
types may be added using Q_DECLARE_QDEBUG_OPERATOR_FOR_CF_TYPE.

Change-Id: I27b12ef9e62cb1be348b9771cb31657692903f6c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-01-18 19:59:27 +01:00
Marc Mutz
b8e46fce5c Add qHash() overload for QSet
...using qHashRangeCommutative(). Also add a test.

[ChangeLog][QtCore][QSet] Can now be used as the key in QSet, QHash.

Change-Id: Ie7c81d257a3b324fc03d394fa7c9fcf0c6fb062a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-01-18 19:36:06 +01:00
Alex Trotsenko
70e3935c38 QTcpServerPrivate: move class definition to the separate header
This allows further QTcpServer inheritance in library. Also,
add protected c'tor for this purpose.

Change-Id: I1a5c0cdedd64bcd41b028e09d7752248506296c7
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-01-18 10:19:04 +01:00
André Klitzing
962ea5690c Add elliptic curve support to QSsl
Add possibility to get length and other information of EC based
certificates. Also it is possible to parse those public/private
keys from PEM and DER encoded files.

Based on patch by Remco Bloemen

[ChangeLog][QtNetwork][SSL/TLS support] It is now possible to
parse elliptic curve certificates.

Change-Id: I4b11f726296aecda89c3cbd195d7c817ae6fc47b
Task-number: QTBUG-18972
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-01-18 10:18:43 +01:00
Rafael Roquetto
a6a865e249 QNX: Rename qcc-base-qnx-armv7le.conf mkspec.
The "new" convention uses armle-v7 instead of armv7le.

Change-Id: Ica7016b7b0b4e374771ff423b7b0bfec4851ee95
Reviewed-by: Wolfgang Bremer <wolfgang@w-bremer.de>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-01-18 00:13:09 +01:00
Rafael Roquetto
3f0ce8c0c8 QNX: Remove deprecated armv7le mkspecs.
Use the armle-v7 ones instead.

Change-Id: I981cb4bed7e14cae8f89112df2d1d014db314cd9
Reviewed-by: Wolfgang Bremer <wolfgang@w-bremer.de>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-01-18 00:12:34 +01:00
Giuseppe D'Angelo
e4d15b41e8 QOpenGLTexture: introduce texture comparison support
Shadow sampling is an old OpenGL feature (hello, OpenGL 1.3!), which
was missing from QOpenGLTexture. This commit adds the relevant support.

Change-Id: I9f6b552d806a356d24ee08121af6bc9ce684f2b5
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
2015-01-17 14:26:43 +01:00
Gunnar Sletta
ebdd4a0ba7 Introducing QPlatformHardwareCompositor.
Can be used by applications to send hardware buffers directly to the
hardware compositor, if available. The primary usecase right now
will be from QtWayland to 2D composition of surface by bypassing
the OpenGL composition.

Change-Id: Ibdcdcc744c34869d3abbc11aad448a755f87161f
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
2015-01-17 12:11:15 +01:00
Friedemann Kleint
205f68f8ad Fix assorted MSVC warnings in tests.
tst_collections.cpp
tst_collections.cpp(3138) : warning C4305: 'argument' : truncation from 'size_t' to 'bool'
        tst_collections.cpp(3190) : see reference to function template instantiation 'void testContainerTypedefs<QVector<int>>(Container)' being compiled
        with[Container=QVector<int>]
(repeated)
tst_qringbuffer.cpp(297) : warning C4267: 'argument' : conversion from 'size_t' to 'int', possible loss of data
tst_qringbuffer.cpp(300) : warning C4309: '=' : truncation of constant value
tst_qringbuffer.cpp(306) : warning C4267: 'argument' : conversion from 'size_t' to 'int', possible loss of data
tst_qrawfont.cpp(947) : warning C4309: 'argument' : truncation of constant value
tst_qsslsocket_onDemandCertificates_member.cpp(217) : warning C4189: 'rootCertLoadingAllowed' : local variable is initialized but not referenced

Change-Id: I6143d4ad121088a0d5bdd6dd2637eb3641a26096
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
2015-01-17 12:06:59 +01:00
Martin Smith
1bbcad9e5e qdoc: Fixed broken links for abstract QML types
When a QML base type is abstract, the documentation for its properties
is supposed to appear on the reference page for each QML type that
inherits the abstract type. And then links to those properties from
within the property documentation must refer to the documentation for
that property on the reference page for the particular inheriting QML
type. These links were dead, but this fix corrects the problem.

Change-Id: Icaf01d67edf44567099f5a6a59fd6348de8df380
Task-number: QTBUG-43200
Reviewed-by: Nico Vertriest <nico.vertriest@digia.com>
Reviewed-by: Tero Kojo <tero.kojo@digia.com>
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2015-01-17 11:04:40 +01:00
David Faure
70ed7c727a tst_qitemdelegate: remove more duplication.
Makes it easier to add new tests.

Change-Id: I5c2bca60e125259eac83a03860e60ca85b51db24
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
2015-01-17 10:25:31 +01:00
Marc Mutz
2173491f06 tst_QSizePolicy::getSetCheck: separate data generation from test
This is in preparation of adding more tests.

It makes the test run longer, because of the additional book-keeping,
but if something goes wrong, it can pinpoint the circumstances better.

Change-Id: I4be68fcfbffe48e8609b722ea551b1f7c36790a9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-01-17 10:21:06 +01:00
Boris Dušek
8a1e6f48f5 Fix qaccessibilitymac test (title vs. description)
We tested button's AXDescription, which is however used only for
non-textual buttons (e.g. buttons with an icon and without a visible
text). On the other hand, button's visible text (which is our case) is
exposed in AXTitle (and not in AXDescription).

Change-Id: Ie89c758cf94b72ade3a440561c5f3df61a4c4612
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
2015-01-17 09:58:14 +01:00
Jørgen Lind
37956e6605 Introducing QPlatformGraphicsBuffer
Change-Id: Idcf8f75bd151a877c7097b79df998c1ffd56871c
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
2015-01-17 08:03:34 +01:00
James Turner
517fb90268 Fix bugs generating PDF on Cocoa
Provide real implementations of:
	properties(), faceId() and getUnscaledGlyph

Task-number: QTBUG-10094
Change-Id: I5899f247742406de53c68c5cd04fee6fb9b6b7d2
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2015-01-17 06:32:40 +01:00
Giuseppe D'Angelo
e9ad46ed41 QSortFilterProxyModel: fix a regression
bec1854cc0 introduced a regression:
when sorting a tree model, children items would not follow the sorted
parents any more (they wouldn't be remapped correctly), resulting
in crashes.

So, the fix needs more reasoning; let's revert the fix,
but leave  the original test around for any subsequent attempt, and
introduce a new test which looks for the right behavior when
sorting trees.

This commit partially reverts bec1854cc0.

Task-number: QTBUG-43827
Change-Id: Ic83ac53aef639f870f6c36a8b4b2992f5b485b13
Reviewed-by: David Faure <david.faure@kdab.com>
Reviewed-by: Volker Krause <volker.krause@kdab.com>
2015-01-17 06:32:37 +01:00
Allan Sandfeld Jensen
fb22d54aa1 Improve performance of path clipping in rasterizer
This patch short cuts a common loop in the gray rasterizer where it
would iterate over cells it considers invalid.

This greatly speeds up clipping paths on large paint devices, but
probably has little benefit for the FreeType origin of our rasterizer.

Task-number: QTBUG-40559
Change-Id: I30845de0b82e53b619853c6c91903793b4267615
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
2015-01-17 06:32:29 +01:00
Giuseppe D'Angelo
0d65bf4f9f QOpenGLTexture: better document the depth/stencil features
For some reason these docs were missing, add them.

Change-Id: If17cf429925ee849a0817e0294a7db7f6dace79b
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
2015-01-17 06:32:27 +01:00
Sérgio Martins
e884ecf6d1 QColorDialog: Fix build with QT_SMALL_COLORDIALOG
nonTouchUI wasn't defined anywhere, this Q_WS_S60 codepath was partially
removed during the Qt4->Qt5 port, but some cruft remained.

It's not worth saving, because:

- QML is now the way to go for touch UI code
- It's ugly, didn't build, won't be missed

and more importantly:

The current layouting code is already very difficult to read, since we have
"normal" mode, QT_SMALL_COLORDIALOG normal and QT_SMALL_COLORDIALOG touch.
(and WINCE ifdefs in the mix)

This will make the ifdef hell a bit better.

Change-Id: I6daa07cbc8da94ccfe1d0c8d3e870c0678c541fc
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
2015-01-17 06:32:22 +01:00
David Faure
3c6f333634 QProgressDialog: don't require setValue(0) to be called.
1) everyone forgets to do so (proof: tst_qnetworkaccessmanager_and_qprogressdialog.cpp
forgot too, which led to a valgrind warning, the elapsed timer was never started)

2) setValue(0) makes no sense if the progress dialog goes from 50 to 60,
or any other non-zero minimum value.

Fixed by starting the timer in the constructor (most code doesn't reuse
progress dialogs, so this fixes the most common case), and by also starting
the timer when calling setValue(minimum()) for well-behaved dialogs.
setValue(0) special case kept for compatibility.

Task-number: QTBUG-17427
Task-number: QTBUG-25316

[ChangeLog][Important Behavior Changes][QProgressDialog] The timer for estimating
the duration of the progress dialog is now started in the constructor and in
setValue(minimum()), as well as when calling setValue(0), as previously documented.

Done-with: Marc Mutz <marc.mutz@kdab.com>
Change-Id: Ia8f7fc677438749191b99074fc334eab652ea36f
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2015-01-17 06:32:21 +01:00
Marc Mutz
3d8a10b960 QHash: only fetch qt_qhash_seed when detaching from a null QHash
The old code fetched QHashData::seed from qt_qhash_seed on every detach.

That is both unnecessary and wrong.

It is uneccessary, because if the detached-from QHashData isn't shared_null,
the seed has already been populated from qt_qhash_seed. It thus suffices to
fetch the seed from qt_qhash_seed only when we detach from shared_null.

It is wrong, because if qt_qhash_seed was changed between the detach from
shared_null and a following detach, d->seed is now different from this->seed,
but detach_helper simply clones the buckets 1:1 from this to d, leaving d
in a corrupt state.

By doing this change, we make QHash robust against on-the-fly changes
to qt_qhash_seed (e.g. for testing, or added security). It also opens up the
option to have API for changing the seed of a given QHash instance after it
has been created (detach, set new seed, rehash).

Change-Id: Ib251fc9a6204b42036e97a2fc66f644b379ab841
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-01-17 06:31:54 +01:00
Thiago Macieira
9d46189a64 Remove Q_C_CALLBACKS
This is useless. The C++ language does require callbacks passed to C
functions to also be extern "C". That's what this macro was doing.

But #ifdef'ing for the macro only made the code uglier. Just let the
extern "C" be there for all compilers.

PS: C++ classes can't be extern "C"...

Change-Id: Ic5d393bfd36e48a193fcffff13b9c9b3923443dd
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2015-01-17 06:31:20 +01:00
Thiago Macieira
ec9bc843d8 Fix compilation with Apple Clang 425
This version was based on Clang mainline between releases 3.1 and 3.2,
which means it has part of 3.2 features but not all. One of the missing
features is __builtin_bswap16.

Change-Id: Ic5d393bfd36e48a193fcffff13b95664c7f664de
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
2015-01-17 05:03:33 +01:00