Commit Graph

34380 Commits

Author SHA1 Message Date
Allan Sandfeld Jensen
2c25a431d0 Use dependencies instead of CONFIG+=ordered
Also drops a few instances where the dependency was purely runtime,
especially for examples.

Change-Id: I2a0476f79928143596bdb3b8f01193af90574ae8
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
2017-12-02 11:09:15 +00:00
Martin Smith
beb9ca92df doc: Correct all remaining clangqdoc warnings in qpointer.cpp
This update corrects many qdoc warnings in qpointer.cpp caused by
incomplete \fn commands. Template stuff was added to the \fn commands.

Change-Id: I39bcd5db1cb4257d574918155dc49414a8b00c3d
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2017-12-02 09:38:53 +00:00
Martin Smith
6bc994f3fd doc: Correct all remaining clangqdoc warnings in qdebug.cpp
This update corrects many qdoc warnings in qdebug.cpp caused by
incomplete \fn commands. It also corrects many undocumented parameter
errors caused by clang's requirement that the formal parameter names
be the same in both the declaration in the include file and the \fn
command. The name changes don't seem to be objectionable in this file.

Change-Id: I0630a0e05e651b58608b2f2116df70dcf0e83a45
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2017-12-02 09:38:36 +00:00
Martin Smith
1ca60025d9 doc: Add missing template text and parameters
This update corrects many qdoc warnings in the documentation
for the QFuture classes caused by incomplete \fn commands.
Template text and parameters was added.

Change-Id: I360c9db191230b19a9b174a43468d3de1eb24549
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2017-12-02 09:38:12 +00:00
Martin Smith
e2cdfd54c9 doc: Fix qdoc errors for \fn commands in algorithm functions
This change updates the \fn commands in qalgorithms.qdoc.
clangqdoc now parses these \fn commands and expects to see
all the template stuff in the signatures.

Change-Id: Id9492bf80eca494eb2b5b8d7364b8485ed1a047e
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2017-12-02 09:37:49 +00:00
Martin Smith
bac26da9af Add template text to \fn commands in QPair
The \fn commands were not recognized by clang-qdoc because
the template stuff was missing from the \fn commands. This
update adds the correct template text and parameters.

Change-Id: I49302d0792c8a4c5a36c671142796a48d384b548
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2017-12-02 09:37:22 +00:00
Martin Smith
4411848026 Add template text to \fn commands in cache classes
The \fn commands were not recognized by clang-qdoc because
the template stuff was missing from the \fn commands. This
update adds the correct template text and parameters.
Removes about 150 qdoc warnings.

Change-Id: I63c6cae5613f0bb23527607230b6edf7fac33740
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2017-12-01 19:35:53 +00:00
Martin Smith
6530b036c7 Add template text to \fn commands in QVarLengthArray
The \fn commands were not recognized by clang-qdoc because
the template stuff was missing from the \fn commands. This
update adds the correct template text and parameters. This
change eliminates about 150 qdoc warnings.

Change-Id: I23632e739b529cd56a6cae1a29df2e7131a05292
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2017-12-01 19:35:37 +00:00
Alexander Volkov
7c7a95cd09 Revert "QApp: Method to check for native style usage."
This reverts commit 958a4c9087.

QApplicationPrivate::usesNativeStyle() introduced by that commit
was never used. We have an untested method that is furthermore
may return wrong results because it relies on the comparison
'app_style->objectName() != QApplicationPrivate::desktopStyleKey()',
but not all styles set their object names.

Conflicts:
    src/widgets/kernel/qapplication.cpp
    src/widgets/kernel/qapplication_p.h

Change-Id: I48d221f9387381db9ed51a7a068bfd0a0c2ed58d
Reviewed-by: Christoph Schleifenbaum <christoph.schleifenbaum@kdab.com>
2017-12-01 19:29:29 +00:00
Alexander Volkov
a6b7447058 Disable some implicit conversions with QT_RESTRICTED_CAST_FROM_ASCII
Non-const arrays are not literals, so their encoding may be
not defined at compile-time and they should be converted
explicitly.

Change-Id: I2a65e095224f48efafeaa97fd85134697a1e5bf0
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-12-01 19:29:14 +00:00
Marc Mutz
4c704fad08 QMetaObject::Connection: mark move ctors Q_DECL_NOTHROW
Drop the #ifdef Q_COMPILER_RVALUE_REFS - we require that since Qt 5.7.

Change-Id: Ib4c6f559b014915f43875ec6791bfda3f24a109b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-12-01 18:52:14 +00:00
Friedemann Kleint
15557a12de QImage: Output some bytes of first scanline on verbose debug streams
Change-Id: I1003c2b4109112fb2d2733a156120a041d7bd695
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
2017-12-01 18:08:09 +00:00
Andy Shaw
c4ba2b1c70 Copy the numericalPrecisionPolicy when copying the QSqlDatabase
As the numercialPrecisionPolicy can be set and subsequently retrieved
from the QSqlDatabase's driver, then when copying the QSqlDatabase, we
need to set that appropriately too.

Task-number: QTBUG-10452
Change-Id: I2c63748365ab4e9fbc29d8d460d80d2e2a0ee385
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2017-12-01 10:52:44 +00:00
Andy Shaw
33b03d99cd Remove code that refers to PostgreSQL 7.2 or older
We haven't had support for anything older than 7.3 for a long time, so
this removes the code to save having to maintain it any further.

Task-number: QTBUG-644
Change-Id: If0635f3bef5138a00a0e77011a70f23d0bffda32
Reviewed-by: Robert Szefner <robertsz27@interia.pl>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2017-12-01 10:52:32 +00:00
Martin Smith
b23c52ea81 Add template text to \fn commands in container classes
The \fn commands were not recognized by clang-qdoc because
the template stuff was missing from the \fn commands. This
update adds the correct template text and parameters. It
eliminates nearly 2000 qdoc warnings.

Change-Id: Ibe047424396a8f99f8bd64efea1b0d8cc7c7527d
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2017-12-01 10:48:22 +00:00
Gabriel de Dietrich
32326a4b3b macx-clang: Opt-in xcb QPA support with XQuartz
Enable xcb QPA plugin when XQuartz is available. This is done
in a single build, alongside the Cocoa version.

We delegate part of the configuration stage to pkg-config, so
this becomes a requirement. Ensure that

    PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig:/opt/X11/share/pkgconfig

is in your environment, or pkg-config is properly set up.

Tested with the following configure options:

configure \
   -pkg-config \
   -fontconfig -system-freetype \
   -system-xcb -xkb -no-opengl \
   -qt-xkbcommon -qt-xkbcommon-x11

Change-Id: I2eb5a0491172368afc4c629c540cbef08580348d
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
2017-12-01 01:19:46 +00:00
Gabriel de Dietrich
728c325a51 QtServiceSupport: Remove redundant condition
The condition for the 'services' sub-project in platformsupport.pro
was identical to the one guarding genericunix.pri in services.pro.

We can't remove the condition in platformsupport.pro because that
would result on an empty static library, which is not supported on
some platforms, like macOS.

Change-Id: I5c80737d9527bdd75dde44e33e5063f3d7aeecb7
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
2017-12-01 01:19:38 +00:00
Edward Welbourne
c27348985d Simplify date-time formatting in textForRole()
QAbstractItemDelegatePrivate::textForRole() was formatting date and
time separately, then gluing the parts back together with space.
QLocale can do that just fine itself (it has a toString() overload
that handles a QDateTime) and might even (some day) do it better.  To
my mild surprise, this proved sufficient to fix a problem with
date-time display in tool-tips, when the date-time includes a zone.

Extracted the date-time part of an existing selftest into a test of
its own and extended it to test times of each spec-type; verified that
the non-local spec cases of this all failed before this fix.

Task-number: QTBUG-61069
Change-Id: I6d6be0c27be9a557d8afc3ced200a10b2aaff816
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2017-11-30 20:21:42 +00:00
Edward Welbourne
454bbbe787 Clean up in TZP-Win's calculateTransitionLocalDate()
It's decoding a SYSTEMTIME in the slightly quirky manner of MS's
timezone APIs (year 0 means annual, with wDay as 1 through 4 for the
first through fourth, or 5 for the last, of a specified week-day
within a month) and the calculations to go with it were a little
opaque.  So clean it up, document what it's doing (and why) and assert
some things that should be true.  Also, only copy one int, instead of
a whole structure, to change from their day-numbering to ours.
Expand on a related TODO comment in its caller, at the same time.

Change-Id: Iffd95c094c37fc1081b73b2a267cfdcd29aeb4ae
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 20:20:40 +00:00
Edward Welbourne
205df620a0 Pull several structs and static functions into an anonymous namespace
The implementation of QWinTimeZonePrivate used many static functions
and at least one struct; to which I've added.  Put these all into an
anonymous namespace (thereby keeping the struct types out of the
linker's sight): make them local the C++ way, rather than the C way.

Change-Id: Ibdce0865234b5d4ebbdc90628cc4d9e790ed6321
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 20:20:35 +00:00
Edward Welbourne
92fad720af Add a check of selected time-zone offset data
Task-number: QTBUG-64122
Change-Id: I6b113f2f05db9659b8c542744846096e39f285ab
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 20:20:29 +00:00
Edward Welbourne
6deb0f0dcc Fake a "first transition" at the start of time
QTimeZonePrivate::dataForLocalTime() needs a transition before the
time it starts at; MS's time-zone data tends to omit old zones (before
2007, in the case of Win7 for Casablanca - which had interesting
transitions before that), so all we can do is extrapolate backwards
from there; but a first rule is indeed apt to be a no-transition rule,
describing the zone's status up to the first known transition.  So
fake a "start of time" transition to return for this case, that
describes this prefix of history.

Change-Id: Iaf178cbebc3b1e599cbde3437a0af75d9f6ca432
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 20:20:15 +00:00
Edward Welbourne
35176c2289 Avoid underflow on arithmetic with possibly-first transition times
A transition time may represent the beginning of time; as such,
arithmetic on it might underflow, e.g. on adding a negative zone
offset to compare with a given time.  So move the arithmetic to the
other side of the comparison in such cases.

Change-Id: I1697a03ebf74679ff86059664dd2b173b9c4c367
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 20:20:10 +00:00
Edward Welbourne
68bcccac22 Take account of single-transition hacks in MS time-zone APIs
When a year contains a real change of standard time without any DST,
MS's APIs still claim to have both a DST start and a DST end; one of
them is bogus and positioned on the start (or end) of the year,
producing no change in offset from the end of the previous (or into
the start of the next) year.  So code round that.

Task-number: QTBUG-42021
Change-Id: Ieb6161cfb77db8a57dc181097f117316f9d1c13c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 20:20:05 +00:00
Edward Welbourne
88d5ba5409 QWinTimeZonePrivate: make transition searches more efficient
Iterate rules (now that there's fewer of them than years) with only a
secondary iteration on years (when needed - in which case it should
never need more than two iterations).  In particular, avoid iterating
years to the MIN_YEAR and MAX_YEAR extremes on failure; fail faster !

Change-Id: I354af8e0cb1e484c8abda279991e6e1824f9f7d4
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 20:19:59 +00:00
Edward Welbourne
a99c773972 Refine handling of wMonth checks in QWinTimeZonePrivate
The MS API documents that the two TIME_ZONE_INFORMATION date fields
either both have wMonth clear (when there is no DST) or both have it
set (for each part of a DST pair).  This rule is followed even when
there's a standard time change without DST, with perverse results I'll
deal with in a later commit.  Add code in init() to verify the rule is
followed and qWarning() if not.

A year with no transitions doesn't imply no earlier or later year has
transitions, so don't give up on searches for transitions because of
it.  Also fix a potential uninitialized variable bug, related to
data() breaking out of a loop on such a year.

Change-Id: I1ad86c07e54b2eb835a2e02d18dc64022f52a0d9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 20:19:54 +00:00
Edward Welbourne
81ad5bc838 Tidy up QDateTimeParser code to make it easier to reason about
Note that the relevant cases are all numeric, eliminate a redundant
variable (the min of two others, one of which was provably <= the
other), invert and rename a boolean (that was always used negated),
eliminate a case that couldn't arise (and assert this).

Change-Id: I9ef9cedbeb608c7cd56ddc618ddfb921966edfbf
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 20:19:35 +00:00
Edward Welbourne
b4ef4469ba QDateTimeParser: reject all short values in fixed-width fields
Previously, a 1, 2 or 3 for "dd" would be rejected because 10, 20 or
30 would fit in the field and be valid; but 4 or more was accepted,
even though it was too short for the field, because no suffix could
make it valid within the field-width.

[ChangeLog][QtCore][QDateTime] When parsing dates and times from
strings, fixed-width date-time fields, such as a "dd" for day,
QDateTime now rejects all values that should be padded, rather
than only doing so when the value is a prefix of some value that
would fill the field-width.  Use a single letter for the field,
e.g. "d" for day, if you want to accept short
values. (QDateTimeEdit is not affected.)

Task-number: QTBUG-63072
Change-Id: I22d223c50057c3edab4ef7f01d9ed0f58e9139c1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
2017-11-30 20:19:29 +00:00
Edward Welbourne
a755c2e521 Raise the upper bound on years to 9999
Test-case taken from bug-report; fits in as an easy row in an existing
data-driven test.  Add similar tests for date-time and time; and an
isValid test on the end of year 9999.  The date-time parser was using
the end of year 7999 as maximum value for dates and date-times; extend
this to year 9999, as I can see no reason not to.

[ChangeLog][QtCore][QDateTime] Years up to 9999 can now be parsed
without error (previously 8000 and beyond were treated as invalid) in
all formats (not only in ISO format).  Widgets handling dates now
support dates to 9999, likewise.

Task-number: QTBUG-64401
Change-Id: I518cfa6c2cb4ecc5a85b896dc9e56b4fdd8a8bb1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 20:19:13 +00:00
Edward Welbourne
ba19363529 Mutex-lock QLocale's update of its globalLocaleData
For want of this, nothing that used QLocale::system(), inter alia,
could be thread-safe or re-entrant.

Task-number: QTBUG-49473
Change-Id: I3e017aa7d59c4c39828bb5cdc7ff0780ea66bafe
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 20:19:03 +00:00
Marc Mutz
a0faf9e236 Optimize QThread::isInterruptionRequested()
To signal a thread to cancel, nothing more than a std::atomic_flag is
needed, but the implementation actually used mutexes, and weird
run-state introspection, so we can't just swap it out for a
std::atomic_flag.

Instead, we retain the principal logic, however weird it is, and just
optimize the common case where isInterruptionRequested() is called
from the secondary thread, repeatedly. We add a fast-path that just
checks that d->interruptionRequested is not set. That requires nothing
more than a relaxed atomic load, because there's no new value read
that could be used as a signal to the secondary thread that some
condition changed.

"What signal?", you may ask. Well, one can think of users doing this:

  void cancel() {
      m_why = tr("&Canceled");
      requestIterruption();
  }

  void run() override {
      while (!isInterruptionRequested()) {
          doWork();
      }
      emit progress(100, 100, m_why);
  }

We need to keep this code working, at least until Qt 6.

But the code can already now only rely on synchronization if
isInterruptionRequested() returns true. If it returns false, then
requestInterruption() has not been called, yet, and any modifications
done prior to the requestInterruption() call are not visible in the
secondary thead.

So we still lock the mutex, and in general don't change the semantics
of the functions, except that we don't lock the mutex in the case
where the flag wasn't set in the first place.

This makes calling isInterruptionRequested() as cheap as it can get,
assuming a lock-free implementation, of course.

I opted to use a std::atomic<bool> instead of QAtomicInt, as the
latter does not have loadRelaxed()/storeRelaxed(), and because it
future-proofs the code.

Change-Id: I67faf36b8de73d2723f9cdd66c416010d0873d98
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2017-11-30 20:16:21 +00:00
Christian Ehrlicher
1c0fcbc887 QSortFilterProxyModel: Clear persistent indexes on source model change
When a new source model was set to QSortFilterProxyModel, the model
tried to remap the persistent indexes to the new model which was wrong.
The correct solution is to clear the persistent indexes with
_q_sourceModelDestroyed() since the old source model went away.

Task-number: QTBUG-44962
Change-Id: Id39e9ac83324250e8bfa434aae467a9206d2590e
Reviewed-by: Thorbjørn Lund Martsum <tmartsum@gmail.com>
2017-11-30 17:29:33 +00:00
Christian Ehrlicher
8a1f0d1f6c QItemSelectionRange: speedup intersects() in negative case
QItemSelectionRange::intersects() needs to check if the parent of both
QItemSelectionRanges is the same. This is a very expensive operation
which should be done last. Same goes for isValid() which itself calls
parent() for two indexes.
This rearrangement speeds up some worst-case usecases by at least 30%
as shown in the bug report.

Task-number: QTBUG-60940
Change-Id: If6111a73cb8b97a8a0d0640527b34448d21f3143
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Thorbjørn Lund Martsum <tmartsum@gmail.com>
2017-11-30 17:29:27 +00:00
Ulf Hermann
f0e9d268c2 Avoid compile warning in tst_qftp
setSession is only used if we have bearer management.

Change-Id: I64b9d29c01566e79bbca5d0dc11d6aee6d9b0bf0
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
2017-11-30 15:58:07 +00:00
Thiago Macieira
e1ffa594a1 Replace qrand() engine with C++11 <random> LCG and deprecate
Instead of trying to adapt to whatever the C library may have and using
QThreadLocalStorage, let's use a simple linear congruential generator
engine from <random>. We can't use a single instance because qsrand()
is documented to work per thread.

I thought of using QRandomEngine, but had to make the choice between
growing the QtCore code size and growing the per-thread data size. Code
is sharable and is actually smaller than the sizeof(QRandomEngine),
which is over 2500 bytes. sizeof(std::minstd_rand) is just
sizeof(uint_fast32_t).

Change-Id: I0a103569c81b4711a649fffd14ec8e641d02bf20
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2017-11-30 15:54:15 +00:00
Gatis Paeglis
09c1510060 qtest_gui.h: remove incorrect #ifdef
Originated from 6c06e14a49

Change-Id: Id93f33c8a00850c7b41593c85521d75e5293b36b
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2017-11-30 15:05:45 +00:00
Gatis Paeglis
75e583b3fc qtestmouse: do not qWait for mocked events on macOS
This logic initially was copied from QTest::mouse* widget overload
(by d130382776) which uses QCursor::setPos()
to generate mouse move events via the windowing system. The QCursor API was
later removed by 1762bf3394, but now the redundant
qWait logic remained. Later this stray qWait was incorrectly moved to apply
for all mouse event types (by 268f41ec70), when
originally it was needed (arguably) only for mouse move events due to usage
of QCursor.

This patch also removes the waitForEvents() function as it is not a documented
qtestlib API (in qtestlib only the documented functions should be considered
public API, no matter what you can find in the header files). Removal does not
affect binary compatibility as this is not an exported symbol. And if somebody
has used this non public API, updating code is trivial.

Change-Id: Id1dec10f5cf276cee1ac0e8c8f8ba2edc493b667
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2017-11-30 15:05:40 +00:00
James McDonnell
2bb443557d Create a QNX version of calculateUnixPriority
The standard calculateUnixPriority provides values that are almost
invariably inappropriate with even LowestPriority mapping to
something higher than the priority of any other thread on the
system.

[ChangeLog][QtCore][QThread] Changed how Qt thread priorities are
mapped to QNX system thread priorities.

Task-number: QTBUG-53357
Change-Id: I205035c4ca7dcafabda7a9a9b06cc52c67c6d2b2
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2017-11-30 14:40:47 +00:00
Marc Mutz
c6497e3eac Mark some functions as cold
Add Q_DECL_COLD_FUNCTION (__attribute__((cold))) to tell the compiler
that the following functions are not usually executed in normal programs:

- qWarning/qCritical/qFatal
- qTerminate
- assertion failure
- qBadAlloc

The effect of the attribute is that

1. These functions get put into their own section, .text.unlikely,
   and will be optimized for size, not speed.
2. Conditions that lead to one of these functions are automatically
   marked as unlikely (something we have done manually in the past)
3. (anecdotal) the compiler is less likely to inline these functions

Text size effect of this change over all of QtBase: ~27KiB text size
saved, of which 11KiB in QtCore alone.

Change-Id: If308d4a4b9ff8f7934316c54b161a78ebe3f4205
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 13:18:39 +00:00
Marc Mutz
7967c40303 QThread::requestInterruption(): move qWarning() out of critical section
We do not touch anything mutex-protected in the path towards the qWarning(), so
the mutex lock is not needed. It may actually be harmful, since a message handler
may check isInterruptionRequested(), which would then deadlock.

Otherwise, we're just decreasing the size of the critical section — always a
worthwhile goal.

Change-Id: I26aa7e3dc087ff7efaccff1d4dc788ba00ba183f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2017-11-30 13:18:36 +00:00
Martin Smith
4d80d634a6 doc: document the anonymous enum type correctly
clangqdoc now accepts an unnamed enum type, calls it "anonymous"
and allows it to be documented as a named enum type. In this
update, several instances appear in subclasses of QGraphicsItem.
This update documents them correctly.

Change-Id: Ide8026801269154a37e7677a1ce62e0cb392efea
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
Reviewed-by: Martin Smith <martin.smith@qt.io>
2017-11-30 13:08:32 +00:00
Giuseppe D'Angelo
259197d8df QTreeWidget::setHeaderItem: fix off-by-one in signal emissions
When setting a header item (that is, the item that provides the
QTreeWidget's column) the widget needs to manipulate the underlying
tree model and add or remove columns. This requires calling
the right QAbstractItemModel APIs for structural model changes.

The calculations done resulted in a off-by-one error:

* if the model had N columns and needs to grow to M(>N), then
one needs to begin insertion from N to M-1 (and not M);
* if the model had N columns and needs to shrink to L(<N), then
one needs to begin removal from L to N-1 (and not N).

Add the -1s needed.

Change-Id: Ic669788825a1c480376a08df0d7c9c10f91552ef
Reviewed-by: Thorbjørn Lund Martsum <tmartsum@gmail.com>
2017-11-30 13:01:48 +00:00
Giuseppe D'Angelo
bdcbbd7d5b QTreeWidgetItem::insertChildren: ignore out of bounds indexes
QTreeWidgetItem::insertChildren should behave like a more-optimized
QTreeWidgetItem::insertChild. Unlike the latter, the former lacks
out-of-bounds checks, resulting in successful insertions even
when using an invalid index (say, bigger than the row/column count).
Reintroduce some sanity checks instead. This allows to fix a "fixme"
left in the autotest.

[ChangeLog][QtWidgets][QTreeWidgetItem] QTreeWidgetItem::insertChildren
now ignores insertions happening at invalid indices, for
consistency with QTreeWidgetItem::insertChild.

Change-Id: I1532597768cc6aff96a6e8f356bc6075b582801d
Reviewed-by: Thorbjørn Lund Martsum <tmartsum@gmail.com>
2017-11-30 13:01:45 +00:00
Liang Qi
c35342ffeb Merge "Merge remote-tracking branch 'origin/5.10' into dev" into refs/staging/dev 2017-11-30 12:57:22 +00:00
Marc Mutz
7200572b39 QMimeMagicRule: fix inconsequential out-of-bounds access
The penultimate entry in mimeRuleTypes_strings is "byte", which, incl. the
terminating NUL character, has length five. But 65-59 == 6, so the last index
in magicRuleType_indices was off by one. No harm done, since there's one more
NUL (three in total...), but fix for the next reader of the code.

Change-Id: Ibdf855014a313a0486d013c9d06d55cea96435fd
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 12:54:55 +00:00
David Faure
648840c617 QMimeDatabase: handle removal of a mime directory
The previous commit didn't handle correctly the case where an entire
mime directory is deleted. The unittest wasn't testing that case,
now it is. We need to move providers into a new list, and then
delete those left over (i.e. now unused).

Change-Id: I04fd8b39b511a2331d706864f695ce5074acf916
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 12:54:52 +00:00
David Faure
7a5644d648 QMimeDatabase: redesign to use both binary and XML providers
Previously, we would use mime.cache in all mime directories if at
least one of them had such a file (other than the most-local one),
otherwise the "source" XML would be used in all directories.

Now it's possible to use mime.cache in those directories which
have one, and XML in those directories that don't.

Not only is this more correct, it will allow in a subsequent
commit to bundle the binary cache in QtCore's qrc rather than
the very big XML file.

The design change to allow this is that now every provider
only deals with a single directory, and QMimeDatabasePrivate
takes care of creating multiple providers, one for each dir.
This required to move most of the loops from the binary provider
up to QMimeDatabasePrivate itself.

Change-Id: Iac82d5f5836b80d45076e586b903d16fa2525b34
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 12:54:49 +00:00
David Faure
8835c0376b QMimeDatabase: move recheck test up from the mime providers
This is actually simpler (two calls to ensureLoaded are enough,
rather than one in every implementation method) and is necessary
for further refactoring steps (which will instanciate more provider
instances).

Change-Id: I9fb8acf3556515babecb88ba88e25af43937af5a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 12:54:45 +00:00
David Faure
916266a7b3 QMimeDatabase: ensure mutex is locked in provider()
This wasn't the case when called from QMimeType, or some
QMimeDatabase methods. Now fixed.

Change-Id: Ifd515c1520482e4a23c399f1f773269659c92359
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-11-30 12:54:43 +00:00
Andre de la Rocha
2c062546a2 macOS: Fix handling of multiple ampersands in menu items
If the text of a QAction in a menu item contained a sequence of multiple
ampersand characters, only one of them would be removed, which is
inconsistent with the way this situation is handled on Windows, where
every other ampersand is removed, which is also the way other widgets
such as tabs, buttons, etc. are handled on macOS and other platforms.

Task-number: QTBUG-63361
Change-Id: Ibd9a520afa37b3387f3b951a94a3c275742e7ad3
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
2017-11-30 12:54:00 +00:00