Commit Graph

22291 Commits

Author SHA1 Message Date
Morten Johan Sørvig
8bccf93300 Make the QPlatformTheme::keyBindings() search deterministic
QPlatformTheme::keyBindings() performs a binary search
into an ordered list of StandardKey -> Key Sequence
mappings where each StandardKey can have multiple
key sequences.

Previously the order of the Key Sequences in the
returned list would be indeterministic and, except
for the designated pri-1 key sequence, would not
necessarily correspond to the list order. (The
ordering was dependent on where the binary search
"hits", which again depends on the size of the list.)

This caused trouble when adding mappings, since it
would change the order in the returned key sequence
list for existing mappings and confusingly cause
(apparently) unrelated test failures.

Fix this by replacing the manually coded binary search
with std::equal_range.

One test case needed to be fixed up because it had the
result in the wrong order (verified by looking at
QPlatformTheme::keyBindings).

Change-Id: I555ca2736b1a8e6454dc79645a8246f80119cfc2
Done-with: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
2015-02-12 19:40:21 +00:00
Marc Mutz
c94d41d903 QDateTime: prepare for constexpr'ification
Make sure from{JulianDay,MSecsSinceStartOfDay}() are in a constexpr'able form
by introducing new private ctors that allow formulating these functions as
single expressions.

Change-Id: Iee98edb74e63c32e98781b885bbb2c5ef5867fd9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 19:40:14 +00:00
Marc Mutz
f2e3fdc803 examples: migrate to QString::asprintf
Not that many, if any, uses of sprintf here were idiomatic Qt,
but that's for another commit.

Change-Id: Ic34470d9799942f786770ba9541b29c34d67c6f8
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 19:40:09 +00:00
Marc Mutz
05c38a9111 QtCore: assorted migrations to QString::asprintf
Change-Id: Ie99d3eeeced89dd8336717954fd5ca7117bb20b4
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 19:40:04 +00:00
Marc Mutz
abcb5471b7 QCoreApplication (Windows): migrate to QString::(v)asprintf
Change-Id: I9628a96eee9b6afd7532ac65d61054d1117335ab
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 19:40:00 +00:00
Marc Mutz
09205f662e QtGui: assorted migrations to QString::asprintf
Change-Id: Ibb177b22064efcad56ace60935e9c8759a87a3c9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 19:39:54 +00:00
Marc Mutz
08a8a6a842 QtWidgets: assorted migrations to QString::asprintf
Change-Id: I1a9977f52e9ce098944f876bca19669dac44d2c1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 19:39:49 +00:00
Marc Mutz
dee800e9e9 QLogging: use return-by-value in qt_message
This also enables NRVO in almost all callers (a macro
prevents it in one case), saving one default construction
and one (move) assignment per call.

Effects on Linux GCC 4.9 stripped release builds:
 text   -896B
 data    +-0B
 relocs  +-0

Change-Id: Id3cde01057baaa408c4cbf95d8d15eaeeeec1604
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 19:39:35 +00:00
Marc Mutz
2cb7f28ec9 QtMiscUtils: make toHex*() constexpr
Bring them into a constexpr'able form, by indexing into the
string literal directly instead of into a static const char[],
which is a declaration not allowed in a C++11 constexpr
function, then mark the functions constexpr.

Change-Id: I6b32a55bf24f85caeb980c0c855b8db0952f914c
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-02-12 19:39:26 +00:00
Laszlo Agocs
44ab48db21 evdevtouch: fix the number of touch devices
We don't have any hotplugging support in evdevtouch so all we can do
is to increase the number of touch devices by one. This makes the
behavior compatible with libinput which already does the proper bookkeeping.

Change-Id: If2ab08dc931839c0b2e7080db766574a293edf4c
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
2015-02-12 19:31:32 +00:00
Laszlo Agocs
30153e1c52 Fix up the imx6 mkspecs
The comments at the top are simply out of date. With modern toolchains
-no-gcc-sysroot causes only trouble.

Similarly, enable hardfloat by default.

Change-Id: I80a1319ae26a6e0a8af71e07fbc43478a2b905ef
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
2015-02-12 19:31:06 +00:00
Friedemann Kleint
b6174340eb Fix Q_ENUM in QWizard.
Make QWizard::WizardStyle a Q_ENUM instead of WizardButton.

Fix startup warning of Qt Designer:
QMetaProperty::read: Unable to handle unregistered datatype 'WizardStyle' for property 'QWizard::wizardStyle'

Change-Id: Icb86e88b6ee2da301ef4ed9c003b54e0cc42efa5
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-02-12 19:00:37 +00:00
Oswald Buddenhagen
ab74cf09a8 move some functions into ProStringList for saner OO design
Change-Id: I60f00f38f459fc9f8eebee9187158e4198fc9546
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2015-02-12 19:00:36 +00:00
Oswald Buddenhagen
f76d14673f fix fallback for xcode specs
clearly, it's not very useful if nobody noticed it yet. anyway ...

Change-Id: Ieef1593e42031f8c17a3d7e9e67e3194ded9c066
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2015-02-12 18:59:27 +00:00
Oswald Buddenhagen
08b058af42 remove branches for no longer supported build tools
Change-Id: Ib40ed85b02afb7db8bfef7c6dacfba57b1ba4fe3
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2015-02-12 18:59:24 +00:00
Oswald Buddenhagen
985c3d474b make use of qtAddToolEnv() in pkgConfigExecutable()
Change-Id: I60e86ac869f670258c82520072836cdfff3b2dc2
Reviewed-by: Mark Brand <mabrand@mabrand.nl>
2015-02-12 18:59:19 +00:00
Oswald Buddenhagen
f59e2fe849 add /nologo to jom calls as well
Change-Id: I7de0483ae17377d6682a4279ff3914aa78fc11a9
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2015-02-12 18:57:24 +00:00
Oswald Buddenhagen
3c5f39b1ec fix sign mismatch warning
amends 5b27d02c3.

Change-Id: Ifcaab09619ba5b63ec7dfaba9bad2f1e7f270986
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2015-02-12 18:57:21 +00:00
Sune Vuorela
db631a88a0 Avoid hardcoding build date in qtcore and tools
To ensure QtCore can be rebuilt and get the exact same results,
it is undesirable to hardcode the build date into the library

Also deprecate QLibrayInfo::buildDate since it is relies on the build
date. QLibraryInfo::buildDate was originally meant for evaluation
licenses and such, but isn't used for that any longer.

Change-Id: I98e91ca3e55f877e6ac0e02de289dc29422fc9da
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-02-12 18:34:23 +00:00
Sune Vuorela
c030540f37 Make qdbusxml2cpp output reproducible
There doesn't seem to be a need for a timestamp in the include guard
anyway. The class name and similar stays the same, so it seems to just
add randomness to the build because it is possible.

Change-Id: I186d281d7ec4a3db08a128ca170e455132930cba
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 18:34:17 +00:00
Boris Dušek
07cd153c7e Fix accessibility lines on OS X
Make QTextView accessibility on OS X mirror that of NSTextView in terms
of translating between positions and line numbers.

Most significantly, we report softlines (i.e. "lines" resulting from
visual wrapping induced by text view's width) as individual lines, not
just hardlines (i.e. "lines" delimited by newline characters, a.k.a.
paragraphs).  This fixes keyboard echo when using just arrow up and down
(without VO prefix) as now in such case VoiceOver reads the softline
that the text cursor moved to; before this fix it read again the whole
paragraph (which it read no matter to which softline of paragraph we
moved to). This enables the user to search more effectively for the
softline they need (which they do very often when navigating text).

Further, we changed the behavior to report the trailing newline
character of a line as the last character of the line. This is
consistent with how NSTextView (and TextEdit) does things (and makes the
newline character be displayed on a braille display for the user to be
able to distinguish that this is really the end of paragraph), but could
be debated and changed as some important Apple apps do not include the
newline character in the line range (most notably Pages and Mail, both
in the document (or email text) text area). I asked about this here:
http://lists.apple.com/archives/accessibility-dev/2015/Jan/msg00000.html

This also fixes the case where empty line previously returned empty range
(length == 0) for AXRangeForLine and VoiceOver interpreted that as end of
document even if it was in the middle of document (e.g. in
examples/widgets/richtext/textedit, there is an empty line in "Lists" section
just before the last paragraph, if one attempted to move past it e.g with
VO-arrow down after interacting with the text using VO-Shift-arrow down, then
no luck).

The code is currently O(N) as the previous one, which could mean a performance
problem for bigger documents. As it seems QTextLayout has all the information
it needs to do AXLineForIndex and AXRangeForLine efficiently (I would presume
O(log N)), this should be eventually rewritten to take advantage of
that (but the required interfaces are not currently exposed through
QAccessibleTextInterface)

[ChangeLog][QtGui][Accessibility][OS X] QTextEdit now properly reports
to accessibility visual lines (softlines) as lines, instead of whole
paragraphs. This allows better VoiceOver user experience when reading
text line by line using arrows up/down.

Change-Id: Ie7f06eb919de31d0a083b3b30d26ccac4aa27301
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
2015-02-12 18:29:42 +00:00
Sergio Ahumada
e82d3b1a1e Update text to the new license header
Change-Id: I643049a865b0a8936e132e12f7845d5527f4f808
Reviewed-by: Jani Heikkinen <jani.heikkinen@theqtcompany.com>
Reviewed-by: André Klitzing <aklitzing@gmail.com>
2015-02-12 18:29:40 +00:00
Giuseppe D'Angelo
081d183d42 QOpenGLTexture: enable build on Windows CE
The various refactorings to this code allow it compile and work
on Windows CE, so we can enable the build there.

Change-Id: I8ac56e87dca13790a76f125330a5400e4b4f5d46
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Reviewed-by: Björn Breitmeyer <bjoern.breitmeyer@kdab.com>
2015-02-12 18:18:15 +00:00
Tobias Koenig
25d2e1232b Haiku: Enable usage of realpath implementation
Haiku supports the realpath implementation, but failed the
original #if check because of the wrong _POSIX_VERSION.

Change-Id: Ibad12de3bf7c1031b2dff3026b5c61e5afd3f3e6
Reviewed-by: Augustin Cavalier <waddlesplash@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 17:51:48 +00:00
Tobias Koenig
9c5b555bac Haiku: Adapt tst_qdir unit test to Haiku
Use an existing, non-symlinked directory for the unit test.

Change-Id: Ice9976a4fd10c42c3cb014614ccd699bcea1065f
Reviewed-by: Augustin Cavalier <waddlesplash@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 17:51:27 +00:00
Tobias Koenig
7b9b54b114 Haiku: Use setenv and unsetenv POSIX functions
The _POSIX_VERSION declared in Haiku is 199009L, so we have
to enable support for setenv/unsetenv explicitly until
Haiku POSIX version is updated.

Change-Id: Ic22374253b0512a6a816257db83b0c649be0585d
Reviewed-by: Augustin Cavalier <waddlesplash@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 17:51:15 +00:00
Liang Qi
be84381664 Use TabFocusBehavior in QStyleHints in widgets
qt_tab_all_widgets in qapplication.cpp was updated.

Change-Id: If7ce14fc132d8a752c0e97450c4c8ecd75526f87
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
2015-02-12 13:30:04 +00:00
Liang Qi
ce10188aa9 Expose TabFocusBehavior in QStyleHints
TabAllWidgets in QPlatformTheme is replaced by TabFocusBehavior.

[ChangeLog][QtGui] Expose TabFocusBehavior in QStyleHints

Change-Id: Iafaad7c6a5c6bc888d1e124e6ddcdbdc46f37b1c
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Paul Olav Tvete <paul.tvete@theqtcompany.com>
2015-02-12 13:30:01 +00:00
Shawn Rutledge
98aae7428d xcb: QSystemTrayIcon: grab background pixmap for compositing only once
Followup to 2203d9d93e: clearRegion takes
a little time, so doing grabWindow() too soon afterwards can result in
grabbing a pixmap with undesired leftovers.  And doing it every time
we render the icon causes flicker.  So, do clearRegion() ASAP when showing
the icon, wait for it to happen, then grabWindow() only the first time we
render, and reuse the resulting pixmap for all future calls to paintEvent().
(The downside is, if there is any corruption during the first grabWindow(),
it's going to stay there as long as the app is running.)

Task-number: QTBUG-35658
Change-Id: If881ab192dba43758dcbb0d080663ff42057fa4f
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
2015-02-12 13:24:33 +00:00
Shawn Rutledge
69d46a3e20 D-Bus tray icons: try to use them with QGenericUnixTheme
Until now, only the Gnome and KDE themes have done this.  But
the gtk2 theme is not the same as the gnome theme. Further, Ubuntu sets
the environment variable QT_QPA_PLATFORMTHEME=appmenu-qt5 if that
plugin is installed on the system; and then with a custom build of Qt
which cannot load the module (e.g. a static build), it will again
fall back to QGenericUnixTheme instead of the gnome theme. In both
cases we want to still try to use D-Bus StatusNotifier protocol
instead of XEmbed. In general it should always be safe to check
whether or not that is possible, before falling back to the XEmbed
tray icon implementation.

Change-Id: I86d6c6f6ad410ea31770d39166d0a7e3330365a0
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
2015-02-12 13:24:11 +00:00
Marc Mutz
f8dd268e50 qtimezone.h: include correct header
QSharedDataPointer is declared in qshareddata.h, not qsharedpointer.h

Change-Id: I4702f346ae01a8de07a6a9b50f951d2d4a89e1fb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 12:55:54 +00:00
Rafael Roquetto
86c6804a41 QNX: fix compiler detection.
Short version: fix build on QNX 6.5.0.

C++11 has been included on QNX 6.6.0's libcpp (Dinkum C++11 libs), while
continuing to be unsupported by the older QNX 6.5.0 toolchain.

This patch updates the mechanism for detecting the QNX's libcpp that is being
used during compile time, and also updates the list of C++11 features to be
disabled when QNX C++11 support is not present by adding
Q_COMPILER_UNICODE_STRINGS and Q_COMPILER_NOEXCEPT to it.

Change-Id: Iddb3626206a0d97d7103c1ff17ba0ae953e9a4b9
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2015-02-12 10:09:37 +00:00
Shawn Rutledge
317c341a66 QWheelEvent on OSX: phase changes to ScrollEnd after momentum phase
The phase changes to ScrollEnd as soon as the user's fingers
are lifted from the trackpad; then the OS can optionally continue
sending scroll events to simulate deceleration, which are translated
into more QWheelEvents with phase ScrollUpdate.  With this patch,
the phase of the final event after the momentum phase will be
ScrollEnd to indicate that the scrolling is completely finished.

[ChangeLog][QtGui][QWheelEvent] on OSX, trackpad wheel event phase
transitions occur in the order ScrollBegin, ScrollUpdate, ...,
ScrollEnd, ScrollUpdate, ..., ScrollEnd, where the second batch of
updates represent momentum events (inertial scrolling).

Change-Id: I7404ed6fbbeaff6b1fa63e226fe1800494986b7b
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
2015-02-12 10:08:22 +00:00
Kai Koehne
cd83859bd6 Network: Fix operator<<(QDebug, ...) operations
Use the

  QDebugStateSaver saver(debug);
  debug.resetFormat().nospace();

idiom to unify the formatting and whitespace handling.

Change-Id: Id346d63b3f589b60ca19e4459271d587f1a0c003
Reviewed-by: Richard J. Moore <rich@kde.org>
2015-02-12 10:08:20 +00:00
Konstantin Ritt
7997e56a2e [QWindowsFont*] Unify HFONT fallbacks
In case CreateFontIndirect() call fails, always fallback to a better
stock font provided by Windows (apparently, it is DEFAULT_GUI_FONT).

Change-Id: Ib78fe0d21ba4fccbba1152b81ed87c010e1220e0
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
2015-02-12 10:05:27 +00:00
Konstantin Ritt
01203a94b5 Update bundled HarfBuzz to 0.9.39
No significant changes, just stick to a released version.

Change-Id: Ib9c4ce6f7da07727e890a4ac3265fc4574e89821
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2015-02-12 10:05:24 +00:00
Marc Mutz
bdf43cac03 QProcess: remove a use of QString::sprintf()
Instead of using QString::sprintf() (and converting the result back to QByteArray),
simply do the conversion from uchar to octal digits ourselves, using QtMiscTools.

Change-Id: I452c085b717c71609cd1a9465e31d90e6a0ba54b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 09:58:49 +00:00
Marc Mutz
9400295a7c QTzTimeZonePrivate: replace an inefficient QList with QVector (IV)
The QTimeZonePrivate::Data type is larger than void*,
so holding them in QLists is horribly inefficient.

In addition, this type is held elsewhere in QVector,
so do that here, too.

As well as being faster, also saves 1.3K of text size on
optimized AMD64 builds.

Change-Id: I1ecf3ee0d955f6b19d2269204e2febc2ba2a9d9d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 09:58:45 +00:00
Marc Mutz
a1036990ff QTzTimeZonePrivate: replace an inefficient QList with QVector (III)
The implementation-private QTzType type is larger than void*,
so holding them in QLists is horribly inefficient.

Fix by  holding it in QVector instead (it was already marked
as a primitive type before).

Text size grows by ca. 0.5K, but of course we got rid of all
those pesky heap allocations.

Change-Id: I3b70ed36fa9947b695ffc87c6f6199daa13cb7cd
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 09:58:42 +00:00
Marc Mutz
ad67867d49 QTzTimeZonePrivate: replace an inefficient QList with QVector (II)
The implementation-private QTzTransition type is larger than void*,
so holding them in QLists is horribly inefficient.

Fix by declaring it as a primitive types (it just contains
various integers) and holding it in QVector instead.

Also optimize parseTzTransitions() by preallocating the expected
number of transitions and streaming directly into the container,
resizing to the number of successful read items on error.

Saves roughly 0.5K in text size, too.

Change-Id: Iadec7a7b0721893e477e1778c9fb54afd6e49544
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 09:58:38 +00:00
Marc Mutz
ddbf5f3c33 QTzTimeZonePrivate: replace some inefficient QLists with QVectors (I)
Both QTzTransitionTime and QTzTransitionRule are larger than void*,
so holding them in QLists is horribly inefficient.

Fix by declaring them as primitive types (they just contains
various integers) and holding them in QVector instead.

While we're at it, make the equality operator for QTzTransitionRule
a constexpr, noexcept non-member, and provide the inequality operator,
too.

As well as being faster, this also saves 1.5K of text size on optimized
AMD64 builds.

Change-Id: I37100522f19556101c334625818dcf8c9a712dd9
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-02-12 09:58:35 +00:00
Marc Mutz
1355ac5b05 Add Q_DECL_CONST_FUNCTION and Q_DECL_NOTHROW to qPopulationCount
Change-Id: I7602936b7064d6a87cd9fbfc4ab22a8fc881b9e9
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-02-12 09:58:29 +00:00
Marc Mutz
983fc2aa4a QFileInfoGatherer: fix race condition on fetchedRoot
Though only present in QT_BUILD_INTERNAL builds, accessing an unprotected
global bool is still a data race.

While the intended use of reset flag/start test/check flag is kosher
when it comes to the happens-before relation, this is no longer true when
users use two instances of QFileSystemModel at the same time.

To fix, make the bool an atomic int instead. Relaxed memory ordering
suffices, since the atomic int represents all the data. The races over
which model sets the variable is the job of the test case to resolve,
and doesn't affect other users.

Change-Id: I4d245b93a741e3457c42df6edd5b836a9bdacd83
Reviewed-by: Jason McDonald <macadder1@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 09:58:24 +00:00
Marc Mutz
08ab00e749 QString: optimize number() and setNum()
Previously, number() was implemented in terms of setNum().

That makes no sense whatsoever. It creates a temporary
value which requires the function to have an exception
table and an unwinding trampoline. It also introduces
a default constructor (in number()) and a copy assignment
(in setNum()), which breaks the chain of RVOs originating
in the QLocaleData functions.

Instead, implement setNum() in terms of number().

This makes setNum() such a premature pessimisation that
it's probably best to deprecate it in the near future.
There are not many users of it in qtbase left, and it
just pollutes the QString interface.

Effects on Linux GCC 4.9 stripped release builds:
 text   -708B
 data    +-0B
 relocs  +-0

Change-Id: I015c9ddb1ba9c98c2c55e38e54ef7894954ac4ca
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2015-02-12 09:58:17 +00:00
Marc Mutz
10d3f603f0 QLogging: prevent qt_message from being inlined into each of 14 callers
Effects on Linux GCC 4.9 stripped release builds:
 text  -2024B
 data    +-0B
 relocs  +-0

Change-Id: I1a315eb0f94ade2b40be62770c6ddcfc56da9ec0
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 09:58:13 +00:00
Marc Mutz
bcfb535e82 QLogging: avoid a needless check
QString::vasprintf() deals just fine with a nullptr format string,
so don't check manually.

The main advantage of dropping the check is that in two of three
cases, we can replace assignment with initialization, thus saving
one default ctor and one (move) assignment.

Change-Id: I08dd24111cd0b92f21ef9f1c3e352ede0f66afe0
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 09:58:10 +00:00
Marc Mutz
4b9a0c0a7c QLogging: migrate to QString::(v)asprintf
Change-Id: I63141c258c9409b03ce23cd77b90c4e4bc3487ab
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 09:58:06 +00:00
Marc Mutz
d251cae7b7 Long live QString::asprintf()!
asprintf() is a GNU extension that prints into a string it
allocates internally. Arguably, that's a better name for
QString::sprintf() since it also allocates memory internally.

The main problem with QString::sprintf() isn't that it's
dangerous to use (it is), but that it's not static. It also
returns a reference instead of by-value, breaking RVO.

There is a comment about removing this function completely
in Qt 6.0, but it remains the only printf-style function
in Qt that can allocate the target string, so it's vital
for logging, e.g., and the recommended replacement code
(http://linux.die.net/man/3/vsnprintf) is a nightmare.

So this patch adds static (v)asprintf() methods to replace it.

Further patches will fix up all in-tree callers and finally
deprecate the old (v)sprintf().

Test coverage is provided through the existing tests of
sprintf(), which is implemented in terms of asprintf().

Arguably, the in-tree callers show that QByteArray would
benefit from having an asprintf(), too, as most of the
in-tree code works around its lack with calls
to to{Latin1,Local8Bit}() after using the QString version.

[ChangeLog][QtCore][QString] Added asprintf(), vasprintf().

Change-Id: I8510f8d67c22230653ec0f1c252c01bc95f3c386
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 09:58:00 +00:00
Marc Mutz
63114f4d3c QNetworkInterface: remove a use of (native) sprintf
Instead of using sprintf (and #ifdef'ing our way around Windows warnings),
simply do the conversion from uchar to hex digits ourselves, using
QtMiscUtils.

Also used the Qt::Uninitialized QString ctor, as the result length is
exactly known ahead of time.

Change-Id: Ie42e5f11c608e7719f7dc33d72739c1e41901b3b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 09:57:56 +00:00
Marc Mutz
575029f09b QtMiscUtils: add to/fromOct
...mirroring to/fromHex.

Change-Id: Ie06bd3cc636b0afbc97606eadb8980079a7677a3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-12 09:57:51 +00:00