Merge remote-tracking branch 'origin/5.6' into dev
Change-Id: I5839bded07e23af65ced9491c4f50242f964dd31
This commit is contained in:
commit
6b8c0a5058
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env perl
|
||||
#############################################################################
|
||||
##
|
||||
## Copyright (C) 2015 Intel Corporation
|
||||
## Copyright (C) 2016 Intel Corporation
|
||||
## Contact: http://www.qt.io/licensing/
|
||||
##
|
||||
## This file is part of the build configuration tools of the Qt Toolkit.
|
||||
@ -33,40 +33,26 @@
|
||||
#############################################################################
|
||||
|
||||
use strict;
|
||||
my $syntax = "findclasslist.pl <file (containing private header list)>\n" .
|
||||
"Replaces \@CLASSLIST\@ with the classes found in the header files\n";
|
||||
|
||||
die("Expected exactly one argument") if (@ARGV != 1);
|
||||
|
||||
my @headers = ();
|
||||
|
||||
# Expand contents of the command-line arguments file
|
||||
open ARGFILE, "<$ARGV[0]" or die("Could not open arguments file $ARGV[0]: $!");
|
||||
while (my $line = <ARGFILE>) {
|
||||
chomp($line);
|
||||
push @headers, $line;
|
||||
}
|
||||
close ARGFILE;
|
||||
my $syntax = "findclasslist.pl\n" .
|
||||
"Replaces each \@FILE:filename\@ in stdin with the classes found in that file\n";
|
||||
|
||||
$\ = $/;
|
||||
while (<STDIN>) {
|
||||
chomp;
|
||||
unless (/\@CLASSLIST\@/) {
|
||||
unless (/\@FILE:(.*)\@/) {
|
||||
print;
|
||||
next;
|
||||
}
|
||||
|
||||
# Replace @CLASSLIST@ with the class list
|
||||
for my $header (@headers) {
|
||||
open HDR, "<$header" or die("Could not open header $header: $!");
|
||||
my $comment = " /* $header */";
|
||||
while (my $line = <HDR>) {
|
||||
# Match a struct or class declaration, but not a forward declaration
|
||||
$line =~ /^(?:struct|class) (?:Q_.*_EXPORT)? (\w+)(?!;)/ or next;
|
||||
print $comment if $comment;
|
||||
printf " *%d%s*;\n", length $1, $1;
|
||||
$comment = 0;
|
||||
}
|
||||
close HDR;
|
||||
# Replace this line with the class list
|
||||
open HDR, "<$1" or die("Could not open header $1: $!");
|
||||
my $comment = " /* $1 */";
|
||||
while (my $line = <HDR>) {
|
||||
# Match a struct or class declaration, but not a forward declaration
|
||||
$line =~ /^(?:struct|class) (?:Q_.*_EXPORT)? (\w+)(?!;)/ or next;
|
||||
print $comment if $comment;
|
||||
printf " *%d%s*;\n", length $1, $1;
|
||||
$comment = 0;
|
||||
}
|
||||
close HDR;
|
||||
}
|
||||
|
@ -11,13 +11,6 @@
|
||||
|
||||
!exists($$QMAKE_DOCS): error("Cannot find documentation specification file $$QMAKE_DOCS")
|
||||
|
||||
load(qt_build_paths)
|
||||
QMAKE_DOCS_BASE_OUTDIR = $$MODULE_BASE_OUTDIR/doc
|
||||
|
||||
QMAKE_DOCS_TARGET = $$replace(QMAKE_DOCS, ^(.*/)?(.*)\\.qdocconf$, \\2)
|
||||
isEmpty(QMAKE_DOCS_TARGETDIR): QMAKE_DOCS_TARGETDIR = $$QMAKE_DOCS_TARGET
|
||||
QMAKE_DOCS_OUTPUTDIR = $$QMAKE_DOCS_BASE_OUTDIR/$$QMAKE_DOCS_TARGETDIR
|
||||
|
||||
qtver.name = QT_VERSION
|
||||
qtver.value = $$VERSION
|
||||
isEmpty(qtver.value): qtver.value = $$MODULE_VERSION
|
||||
@ -31,6 +24,21 @@ qtdocs.value = $$[QT_INSTALL_DOCS/src]
|
||||
QT_TOOL_ENV = qtver qtmver qtvertag qtdocs
|
||||
qtPrepareTool(QDOC, qdoc)
|
||||
QT_TOOL_ENV =
|
||||
|
||||
!build_online_docs: qtPrepareTool(QHELPGENERATOR, qhelpgenerator)
|
||||
|
||||
# qtPrepareTool() must be called outside a build pass, as it protects
|
||||
# against concurrent wrapper creation by omitting it during build passes.
|
||||
# However, creating the actual targets is reserved to the build passes.
|
||||
debug_and_release:!build_pass: return()
|
||||
|
||||
load(qt_build_paths)
|
||||
QMAKE_DOCS_BASE_OUTDIR = $$MODULE_BASE_OUTDIR/doc
|
||||
|
||||
QMAKE_DOCS_TARGET = $$replace(QMAKE_DOCS, ^(.*/)?(.*)\\.qdocconf$, \\2)
|
||||
isEmpty(QMAKE_DOCS_TARGETDIR): QMAKE_DOCS_TARGETDIR = $$QMAKE_DOCS_TARGET
|
||||
QMAKE_DOCS_OUTPUTDIR = $$QMAKE_DOCS_BASE_OUTDIR/$$QMAKE_DOCS_TARGETDIR
|
||||
|
||||
QDOC += -outputdir $$shell_quote($$QMAKE_DOCS_OUTPUTDIR)
|
||||
!build_online_docs: \
|
||||
QDOC += -installdir $$shell_quote($$[QT_INSTALL_DOCS])
|
||||
@ -64,7 +72,6 @@ prepare_docs {
|
||||
}
|
||||
|
||||
!build_online_docs {
|
||||
qtPrepareTool(QHELPGENERATOR, qhelpgenerator)
|
||||
qch_docs.commands = $$QHELPGENERATOR $$shell_quote($$QMAKE_DOCS_OUTPUTDIR/$${QMAKE_DOCS_TARGET}.qhp) -o $$shell_quote($$QMAKE_DOCS_BASE_OUTDIR/$${QMAKE_DOCS_TARGET}.qch)
|
||||
|
||||
inst_html_docs.files = $$QMAKE_DOCS_OUTPUTDIR
|
||||
|
@ -29,17 +29,17 @@ QMAKE_EXTRA_TARGETS += docs
|
||||
contains(TEMPLATE, subdirs) {
|
||||
for(inst, DOC_TARGETS): \
|
||||
prepareRecursiveTarget($$inst)
|
||||
} else:debug_and_release:!build_pass {
|
||||
sub = $$first(BUILDS)
|
||||
for(inst, DOC_TARGETS) {
|
||||
$${inst}.CONFIG = recursive
|
||||
$${inst}.recurse = $$sub
|
||||
}
|
||||
} else {
|
||||
# apps and libs only generate docs if QMAKE_DOCS is set
|
||||
!isEmpty(QMAKE_DOCS) {
|
||||
# backwards compat hack
|
||||
load(qt_docs)
|
||||
debug_and_release:!build_pass {
|
||||
sub = $$first(BUILDS)
|
||||
for(inst, DOC_TARGETS) {
|
||||
$${inst}.CONFIG = recursive
|
||||
$${inst}.recurse = $$sub
|
||||
}
|
||||
}
|
||||
# Apps and libs request docs creation by setting QMAKE_DOCS.
|
||||
# This is a backwards compat hack - technically, the modules which need it
|
||||
# are supposed to load(qt_docs) themselves.
|
||||
!isEmpty(QMAKE_DOCS): load(qt_docs)
|
||||
}
|
||||
QMAKE_EXTRA_TARGETS += $$DOC_TARGETS
|
||||
|
@ -132,7 +132,6 @@ lib_bundle {
|
||||
}
|
||||
|
||||
mac {
|
||||
CONFIG += explicitlib
|
||||
macx-g++ {
|
||||
QMAKE_CFLAGS += -fconstant-cfstrings
|
||||
QMAKE_CXXFLAGS += -fconstant-cfstrings
|
||||
@ -200,7 +199,10 @@ android: CONFIG += qt_android_deps no_linker_version_script
|
||||
verscript_content = "Qt_$${QT_MAJOR_VERSION}_PRIVATE_API { *; };"
|
||||
} else {
|
||||
verscript_content = "Qt_$${QT_MAJOR_VERSION}_PRIVATE_API {" \
|
||||
" qt_private_api_tag*;" "@CLASSLIST@" "};"
|
||||
" qt_private_api_tag*;"
|
||||
for(header, SYNCQT.PRIVATE_HEADER_FILES): \
|
||||
verscript_content += " @FILE:$${_PRO_FILE_PWD_}/$$header@"
|
||||
verscript_content += "};"
|
||||
|
||||
current = Qt_$$QT_MAJOR_VERSION
|
||||
verscript_content += "$$current { *; };"
|
||||
@ -214,13 +216,12 @@ android: CONFIG += qt_android_deps no_linker_version_script
|
||||
else: verscript_content += "$$current {} $$previous;"
|
||||
}
|
||||
|
||||
# Add a post-processing step to replace the @CLASSLIST@
|
||||
verscriptprocess.commands = perl $${PWD}/data/unix/findclasslist.pl < $${verscript}.in $${verscript}.in.args > $@
|
||||
# Add a post-processing step to replace the @FILE:filename@
|
||||
verscriptprocess.commands = perl $${PWD}/data/unix/findclasslist.pl < $${verscript}.in > $@
|
||||
verscriptprocess.target = $$verscript
|
||||
for(header, SYNCQT.PRIVATE_HEADER_FILES): \
|
||||
verscriptprocess.depends += $${_PRO_FILE_PWD_}/$$header
|
||||
write_file($${verscript}.in.args, verscriptprocess.depends)|error("Aborting.")
|
||||
verscriptprocess.depends += $${verscript}.in $${verscript}.in.args
|
||||
verscriptprocess.depends += $${verscript}.in
|
||||
QMAKE_EXTRA_TARGETS += verscriptprocess
|
||||
PRE_TARGETDEPS += $$verscript
|
||||
verscript = $${verscript}.in
|
||||
@ -258,19 +259,18 @@ load(qt_targets)
|
||||
pclib_replace.replace = $$QMAKE_PKGCONFIG_LIBDIR
|
||||
pclib_replace.CONFIG = path
|
||||
QMAKE_PKGCONFIG_INSTALL_REPLACE += pclib_replace
|
||||
|
||||
unix {
|
||||
CONFIG += create_libtool explicitlib
|
||||
host_build: \
|
||||
QMAKE_LIBTOOL_LIBDIR = $$[QT_HOST_LIBS]
|
||||
else: \
|
||||
QMAKE_LIBTOOL_LIBDIR = "=$$[QT_INSTALL_LIBS/raw]"
|
||||
ltlib_replace.match = $$lib_replace.match
|
||||
!isEmpty(lib_replace.replace): \
|
||||
ltlib_replace.replace = $$QMAKE_LIBTOOL_LIBDIR
|
||||
ltlib_replace.CONFIG = path
|
||||
QMAKE_LIBTOOL_INSTALL_REPLACE += ltlib_replace
|
||||
}
|
||||
}
|
||||
!lib_bundle:unix {
|
||||
CONFIG += create_libtool
|
||||
host_build: \
|
||||
QMAKE_LIBTOOL_LIBDIR = $$[QT_HOST_LIBS]
|
||||
else: \
|
||||
QMAKE_LIBTOOL_LIBDIR = "=$$[QT_INSTALL_LIBS/raw]"
|
||||
ltlib_replace.match = $$lib_replace.match
|
||||
!isEmpty(lib_replace.replace): \
|
||||
ltlib_replace.replace = $$QMAKE_LIBTOOL_LIBDIR
|
||||
ltlib_replace.CONFIG = path
|
||||
QMAKE_LIBTOOL_INSTALL_REPLACE += ltlib_replace
|
||||
}
|
||||
|
||||
contains(QT_PRODUCT, OpenSource.*):DEFINES *= QT_OPENSOURCE
|
||||
|
@ -23,6 +23,7 @@ equals(QMAKE_HOST.os, Windows) {
|
||||
defineReplace(addGnuPath) {
|
||||
gnuPath = $$1
|
||||
!isEmpty(gnuPath):!isEmpty(gnutools.name) {
|
||||
QT_TOOL_NAME = $$1
|
||||
qtAddToolEnv(gnuPath, gnutools)
|
||||
silent: gnuPath = @echo generating sources from ${QMAKE_FILE_IN} && $$gnuPath
|
||||
}
|
||||
|
@ -336,7 +336,7 @@ if (NOT CMAKE_VERSION VERSION_LESS 2.8.9)
|
||||
set_property(TARGET ${_target} APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL QT_NO_DEBUG)
|
||||
if (Qt5_POSITION_INDEPENDENT_CODE
|
||||
AND (CMAKE_VERSION VERSION_LESS 2.8.12
|
||||
AND (NOT CMAKE_CXX_COMPILER_ID STREQUAL \"GNU\"
|
||||
AND (NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU"
|
||||
OR CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)))
|
||||
set_property(TARGET ${_target} PROPERTY POSITION_INDEPENDENT_CODE ${Qt5_POSITION_INDEPENDENT_CODE})
|
||||
endif()
|
||||
|
@ -152,9 +152,7 @@
|
||||
to be consistent in pixels-per-point across devices rather than
|
||||
defining 1 point as 1/72 inch.
|
||||
|
||||
\value AA_X11InitThreads Calls \c XInitThreads() as part of the QApplication
|
||||
construction in order to make Xlib calls thread-safe. This
|
||||
attribute must be set before QApplication is constructed.
|
||||
\value AA_X11InitThreads This value is obsolete and has no effect.
|
||||
|
||||
\value AA_SynthesizeTouchForUnhandledMouseEvents All mouse events
|
||||
that are not accepted by the application will be translated
|
||||
|
@ -121,7 +121,7 @@ inline QStringList QUrl::allQueryItemValues(const QString &key) const
|
||||
inline void QUrl::removeQueryItem(const QString &key)
|
||||
{ QUrlQuery q(*this); q.removeQueryItem(key); setQuery(q); }
|
||||
inline void QUrl::removeAllQueryItems(const QString &key)
|
||||
{ QUrlQuery q(*this); q.removeAllQueryItems(key); }
|
||||
{ QUrlQuery q(*this); q.removeAllQueryItems(key); setQuery(q); }
|
||||
|
||||
inline void QUrl::addEncodedQueryItem(const QByteArray &key, const QByteArray &value)
|
||||
{ QUrlQuery q(*this); q.addQueryItem(fromEncodedComponent_helper(key), fromEncodedComponent_helper(value)); setQuery(q); }
|
||||
@ -132,7 +132,7 @@ inline QByteArray QUrl::encodedQueryItemValue(const QByteArray &key) const
|
||||
inline void QUrl::removeEncodedQueryItem(const QByteArray &key)
|
||||
{ QUrlQuery q(*this); q.removeQueryItem(fromEncodedComponent_helper(key)); setQuery(q); }
|
||||
inline void QUrl::removeAllEncodedQueryItems(const QByteArray &key)
|
||||
{ QUrlQuery q(*this); q.removeAllQueryItems(fromEncodedComponent_helper(key)); }
|
||||
{ QUrlQuery q(*this); q.removeAllQueryItems(fromEncodedComponent_helper(key)); setQuery(q); }
|
||||
|
||||
inline void QUrl::setEncodedQueryItems(const QList<QPair<QByteArray, QByteArray> > &qry)
|
||||
{
|
||||
|
@ -3437,7 +3437,7 @@ static int numericCompare(const QVariant::Private *d1, const QVariant::Private *
|
||||
Q_ASSERT(ok);
|
||||
qreal r2 = qConvertToRealNumber(d2, &ok);
|
||||
Q_ASSERT(ok);
|
||||
if (qFuzzyCompare(r1, r2))
|
||||
if (r1 == r2 || qFuzzyCompare(r1, r2))
|
||||
return 0;
|
||||
return r1 < r2 ? -1 : 1;
|
||||
}
|
||||
|
@ -69,6 +69,30 @@
|
||||
#ifndef QT_NO_THREAD
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
#ifdef Q_OS_WINRT
|
||||
inline DWORD qWinRTTlsAlloc() {
|
||||
return FlsAlloc(0);
|
||||
}
|
||||
|
||||
inline bool qWinRTTlsFree(DWORD dwTlsIndex) {
|
||||
return FlsFree(dwTlsIndex);
|
||||
}
|
||||
|
||||
inline LPVOID qWinRTTlsGetValue(DWORD dwTlsIndex) {
|
||||
return FlsGetValue(dwTlsIndex);
|
||||
}
|
||||
|
||||
inline bool qWinRTTlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue) {
|
||||
return FlsSetValue(dwTlsIndex, lpTlsValue);
|
||||
}
|
||||
|
||||
#define TlsAlloc qWinRTTlsAlloc
|
||||
#define TlsFree qWinRTTlsFree
|
||||
#define TlsSetValue qWinRTTlsSetValue
|
||||
#define TlsGetValue qWinRTTlsGetValue
|
||||
|
||||
#endif // Q_OS_WINRT
|
||||
|
||||
void qt_watch_adopted_thread(const HANDLE adoptedThreadHandle, QThread *qthread);
|
||||
DWORD WINAPI qt_adopted_thread_watcher_function(LPVOID);
|
||||
|
||||
|
@ -585,7 +585,7 @@ int QDate::weekNumber(int *yearNumber) const
|
||||
Q_ASSERT(week == 52 || week == 53);
|
||||
} else if (week == 53) {
|
||||
// maybe first week of next year
|
||||
int w = (yday - 365 - (QDate::isLeapYear(year + 1) ? 1 : 0) - wday + 10) / 7;
|
||||
int w = (yday - 365 - (QDate::isLeapYear(year) ? 1 : 0) - wday + 10) / 7;
|
||||
if (w > 0) {
|
||||
++year;
|
||||
week = w;
|
||||
|
@ -286,8 +286,6 @@ DEFINEFUNC(const char* , dbus_message_get_sender, (DBusMessage *message),
|
||||
(message), return)
|
||||
DEFINEFUNC(dbus_uint32_t , dbus_message_get_serial, (DBusMessage *message),
|
||||
(message), return)
|
||||
DEFINEFUNC(dbus_uint32_t , dbus_message_get_reply_serial, (DBusMessage *message),
|
||||
(message), return)
|
||||
DEFINEFUNC(const char* , dbus_message_get_signature, (DBusMessage *message),
|
||||
(message), return)
|
||||
DEFINEFUNC(int , dbus_message_get_type, (DBusMessage *message),
|
||||
|
@ -130,11 +130,11 @@ static const int errorMessages_indices[] = {
|
||||
0, 6, 40, 76, 118, 153, 191, 231,
|
||||
273, 313, 349, 384, 421, 461, 501, 540,
|
||||
581, 617, 661, 705, 746, 789, 833, 874,
|
||||
916, 961, 1005, -1
|
||||
916, 961, 1005
|
||||
};
|
||||
|
||||
static const int errorMessages_count = sizeof errorMessages_indices /
|
||||
sizeof errorMessages_indices[0] - 1;
|
||||
sizeof errorMessages_indices[0];
|
||||
|
||||
static inline const char *get(QDBusError::ErrorType code)
|
||||
{
|
||||
|
@ -1818,8 +1818,8 @@ bool QDBusConnectionPrivate::send(const QDBusMessage& message)
|
||||
}
|
||||
|
||||
q_dbus_message_set_no_reply(msg, true); // the reply would not be delivered to anything
|
||||
emit messageNeedsSending(Q_NULLPTR, msg);
|
||||
qDBusDebug() << this << "sending message (no reply):" << message;
|
||||
emit messageNeedsSending(Q_NULLPTR, msg);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -2018,8 +2018,8 @@ QDBusPendingCallPrivate *QDBusConnectionPrivate::sendWithReplyAsync(const QDBusM
|
||||
lastError = error;
|
||||
processFinishedCall(pcall);
|
||||
} else {
|
||||
emit messageNeedsSending(pcall, msg, timeout);
|
||||
qDBusDebug() << this << "sending message:" << message;
|
||||
emit messageNeedsSending(pcall, msg, timeout);
|
||||
}
|
||||
return pcall;
|
||||
}
|
||||
|
@ -188,12 +188,7 @@ DBusMessage *QDBusMessagePrivate::toDBusMessage(const QDBusMessage &message, QDB
|
||||
|
||||
// check if everything is ok
|
||||
if (marshaller.ok)
|
||||
{
|
||||
QDBusMessage *m = (QDBusMessage*)&message;
|
||||
q_dbus_message_ref(msg);
|
||||
m->d_ptr->msg = msg;
|
||||
return msg;
|
||||
}
|
||||
|
||||
// not ok;
|
||||
q_dbus_message_unref(msg);
|
||||
@ -322,16 +317,6 @@ QDBusMessage QDBusMessagePrivate::makeLocalReply(const QDBusConnectionPrivate &c
|
||||
return QDBusMessage(); // failed
|
||||
}
|
||||
|
||||
uint QDBusMessagePrivate::serial()
|
||||
{
|
||||
return msg ? q_dbus_message_get_serial(msg) : reply ? q_dbus_message_get_serial(reply) : 0;
|
||||
}
|
||||
|
||||
uint QDBusMessagePrivate::replySerial()
|
||||
{
|
||||
return msg ? q_dbus_message_get_reply_serial(msg) : reply ? q_dbus_message_get_reply_serial(reply) : 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
\class QDBusMessage
|
||||
\inmodule QtDBus
|
||||
@ -647,32 +632,6 @@ QString QDBusMessage::signature() const
|
||||
return d_ptr->signature;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the serial of the message or 0 if undefined.
|
||||
|
||||
The serial number is a unique identifier of a message coming from a
|
||||
given connection.
|
||||
|
||||
The serial is set to a non zero value after the message has been sent
|
||||
over a D-Bus connection.
|
||||
*/
|
||||
uint QDBusMessage::serial() const
|
||||
{
|
||||
return d_ptr->serial();
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the serial of the message this is a reply to or 0 if undefined.
|
||||
|
||||
The serial number is a unique identifier of a message coming from a
|
||||
given connection and D-Bus messages of 'method return' or 'error' type
|
||||
use them to match the reply to the method call message.
|
||||
*/
|
||||
uint QDBusMessage::replySerial() const
|
||||
{
|
||||
return d_ptr->replySerial();
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the flag that indicates if this message should see a reply
|
||||
or not. This is only meaningful for \l {MethodCallMessage}{method
|
||||
@ -861,16 +820,10 @@ QDebug operator<<(QDebug dbg, const QDBusMessage &msg)
|
||||
msg.type() == QDBusMessage::SignalMessage)
|
||||
dbg.nospace() << ", path=" << msg.path()
|
||||
<< ", interface=" << msg.interface()
|
||||
<< ", member=" << msg.member()
|
||||
<< ", serial=" << msg.serial();
|
||||
<< ", member=" << msg.member();
|
||||
if (msg.type() == QDBusMessage::ErrorMessage)
|
||||
dbg.nospace() << ", error name=" << msg.errorName()
|
||||
<< ", error message=" << msg.errorMessage()
|
||||
<< ", serial=" << msg.serial()
|
||||
<< ", reply serial=" << msg.replySerial();
|
||||
else if (msg.type() == QDBusMessage::ReplyMessage)
|
||||
dbg.nospace() << ", serial=" << msg.serial()
|
||||
<< ", reply serial=" << msg.replySerial();
|
||||
<< ", error message=" << msg.errorMessage();
|
||||
dbg.nospace() << ", signature=" << msg.signature()
|
||||
<< ", contents=(";
|
||||
debugVariantList(dbg, msg.arguments());
|
||||
|
@ -104,8 +104,6 @@ public:
|
||||
QString errorMessage() const;
|
||||
MessageType type() const;
|
||||
QString signature() const;
|
||||
uint serial() const;
|
||||
uint replySerial() const;
|
||||
|
||||
bool isReplyRequired() const;
|
||||
|
||||
|
@ -93,8 +93,6 @@ public:
|
||||
const QDBusMessage &asSent);
|
||||
static QDBusMessage makeLocalReply(const QDBusConnectionPrivate &conn,
|
||||
const QDBusMessage &asSent);
|
||||
uint serial();
|
||||
uint replySerial();
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -4623,32 +4623,7 @@ QImage QImage::transformed(const QTransform &matrix, Qt::TransformationMode mode
|
||||
|
||||
if (complex_xform || mode == Qt::SmoothTransformation) {
|
||||
if (d->format < QImage::Format_RGB32 || !hasAlphaChannel()) {
|
||||
switch(d->format) {
|
||||
case QImage::Format_RGB16:
|
||||
target_format = Format_ARGB8565_Premultiplied;
|
||||
break;
|
||||
case QImage::Format_RGB555:
|
||||
target_format = Format_ARGB8555_Premultiplied;
|
||||
break;
|
||||
case QImage::Format_RGB666:
|
||||
target_format = Format_ARGB6666_Premultiplied;
|
||||
break;
|
||||
case QImage::Format_RGB444:
|
||||
target_format = Format_ARGB4444_Premultiplied;
|
||||
break;
|
||||
case QImage::Format_RGBX8888:
|
||||
target_format = Format_RGBA8888_Premultiplied;
|
||||
break;
|
||||
case QImage::Format_BGR30:
|
||||
target_format = Format_A2BGR30_Premultiplied;
|
||||
break;
|
||||
case QImage::Format_RGB30:
|
||||
target_format = Format_A2RGB30_Premultiplied;
|
||||
break;
|
||||
default:
|
||||
target_format = Format_ARGB32_Premultiplied;
|
||||
break;
|
||||
}
|
||||
target_format = qt_alphaVersion(d->format);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -161,10 +161,45 @@ inline int qt_depthForFormat(QImage::Format format)
|
||||
}
|
||||
return depth;
|
||||
}
|
||||
|
||||
#if defined(_M_ARM)
|
||||
#pragma optimize("", on)
|
||||
#endif
|
||||
|
||||
inline QImage::Format qt_alphaVersion(QImage::Format format)
|
||||
{
|
||||
switch (format) {
|
||||
case QImage::Format_RGB16:
|
||||
return QImage::Format_ARGB8565_Premultiplied;
|
||||
case QImage::Format_RGB555:
|
||||
return QImage::Format_ARGB8555_Premultiplied;
|
||||
case QImage::Format_RGB666:
|
||||
return QImage::Format_ARGB6666_Premultiplied;
|
||||
case QImage::Format_RGB444:
|
||||
return QImage::Format_ARGB4444_Premultiplied;
|
||||
case QImage::Format_RGBX8888:
|
||||
return QImage::Format_RGBA8888_Premultiplied;
|
||||
case QImage::Format_BGR30:
|
||||
return QImage::Format_A2BGR30_Premultiplied;
|
||||
case QImage::Format_RGB30:
|
||||
return QImage::Format_A2RGB30_Premultiplied;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return QImage::Format_ARGB32_Premultiplied;
|
||||
}
|
||||
|
||||
inline QImage::Format qt_alphaVersionForPainting(QImage::Format format)
|
||||
{
|
||||
QImage::Format toFormat = qt_alphaVersion(format);
|
||||
#if defined(__ARM_NEON__) || defined(__SSE2__)
|
||||
// If we are switching depth anyway and we have optimized ARGB32PM routines, upgrade to that.
|
||||
if (qt_depthForFormat(format) != qt_depthForFormat(toFormat))
|
||||
toFormat = QImage::Format_ARGB32_Premultiplied;
|
||||
#endif
|
||||
return toFormat;
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QIMAGE_P_H
|
||||
|
@ -178,20 +178,7 @@ void QRasterPlatformPixmap::fill(const QColor &color)
|
||||
int alpha = color.alpha();
|
||||
if (alpha != 255) {
|
||||
if (!image.hasAlphaChannel()) {
|
||||
QImage::Format toFormat;
|
||||
#if !(defined(__ARM_NEON__) || defined(__SSE2__))
|
||||
if (image.format() == QImage::Format_RGB16)
|
||||
toFormat = QImage::Format_ARGB8565_Premultiplied;
|
||||
else if (image.format() == QImage::Format_RGB666)
|
||||
toFormat = QImage::Format_ARGB6666_Premultiplied;
|
||||
else if (image.format() == QImage::Format_RGB555)
|
||||
toFormat = QImage::Format_ARGB8555_Premultiplied;
|
||||
else if (image.format() == QImage::Format_RGB444)
|
||||
toFormat = QImage::Format_ARGB4444_Premultiplied;
|
||||
else
|
||||
#endif
|
||||
toFormat = QImage::Format_ARGB32_Premultiplied;
|
||||
|
||||
QImage::Format toFormat = qt_alphaVersionForPainting(image.format());
|
||||
if (!image.isNull() && qt_depthForFormat(image.format()) == qt_depthForFormat(toFormat)) {
|
||||
image.detach();
|
||||
image.d->format = toFormat;
|
||||
@ -314,17 +301,7 @@ void QRasterPlatformPixmap::createPixmapForImage(QImage &sourceImage, Qt::ImageC
|
||||
: QImage::Format_RGB32;
|
||||
} else {
|
||||
QImage::Format opaqueFormat = QNativeImage::systemFormat();
|
||||
QImage::Format alphaFormat = QImage::Format_ARGB32_Premultiplied;
|
||||
|
||||
#if !defined(__ARM_NEON__) && !defined(__SSE2__)
|
||||
switch (opaqueFormat) {
|
||||
case QImage::Format_RGB16:
|
||||
alphaFormat = QImage::Format_ARGB8565_Premultiplied;
|
||||
break;
|
||||
default: // We don't care about the others...
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
QImage::Format alphaFormat = qt_alphaVersionForPainting(opaqueFormat);
|
||||
|
||||
if (!sourceImage.hasAlphaChannel()) {
|
||||
format = opaqueFormat;
|
||||
|
@ -4193,7 +4193,7 @@ protected:
|
||||
|
||||
void QGradientCache::generateGradientColorTable(const QGradient& gradient, QRgba64 *colorTable, int size, int opacity) const
|
||||
{
|
||||
QGradientStops stops = gradient.stops();
|
||||
const QGradientStops stops = gradient.stops();
|
||||
int stopCount = stops.count();
|
||||
Q_ASSERT(stopCount > 0);
|
||||
|
||||
|
@ -426,8 +426,8 @@
|
||||
|
||||
\value ReuseAddressHint Provides a hint to QAbstractSocket that it should try
|
||||
to rebind the service even if the address and port are already bound by
|
||||
another socket. On Windows, this is equivalent to the SO_REUSEADDR
|
||||
socket option. On Unix, this option is ignored.
|
||||
another socket. On Windows and Unix, this is equivalent to the SO_REUSEADDR
|
||||
socket option.
|
||||
|
||||
\value DefaultForPlatform The default option for the current platform.
|
||||
On Unix and OS X, this is equivalent to (DontShareAddress
|
||||
|
@ -1,5 +1,7 @@
|
||||
mac {
|
||||
HEADERS += $$PWD/qmacmime_p.h
|
||||
OBJECTIVE_SOURCES += $$PWD/qmacmime.mm
|
||||
|
||||
osx: LIBS_PRIVATE += -framework AppKit
|
||||
}
|
||||
|
||||
|
@ -107,7 +107,7 @@ QIOSIntegration::QIOSIntegration()
|
||||
m_touchDevice = new QTouchDevice;
|
||||
m_touchDevice->setType(QTouchDevice::TouchScreen);
|
||||
QTouchDevice::Capabilities touchCapabilities = QTouchDevice::Position | QTouchDevice::NormalizedPosition;
|
||||
if ([mainScreen respondsToSelector:@selector(traitCollection)]) {
|
||||
if (QSysInfo::MacintoshVersion >= QSysInfo::MV_IOS_9_0) {
|
||||
if (mainScreen.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)
|
||||
touchCapabilities |= QTouchDevice::Pressure;
|
||||
}
|
||||
|
@ -286,10 +286,14 @@
|
||||
|
||||
QTouchDevice *touchDevice = QIOSIntegration::instance()->touchDevice();
|
||||
QTouchDevice::Capabilities touchCapabilities = touchDevice->capabilities();
|
||||
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)
|
||||
touchCapabilities |= QTouchDevice::Pressure;
|
||||
else
|
||||
touchCapabilities &= ~QTouchDevice::Pressure;
|
||||
|
||||
if (QSysInfo::MacintoshVersion >= QSysInfo::MV_IOS_9_0) {
|
||||
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)
|
||||
touchCapabilities |= QTouchDevice::Pressure;
|
||||
else
|
||||
touchCapabilities &= ~QTouchDevice::Pressure;
|
||||
}
|
||||
|
||||
touchDevice->setCapabilities(touchCapabilities);
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Qt built-in GPU driver blacklist",
|
||||
"version": "5.5",
|
||||
"version": "5.6",
|
||||
"entries": [
|
||||
{
|
||||
"id": 1,
|
||||
|
@ -405,14 +405,29 @@ void QWindowsContext::setTabletAbsoluteRange(int a)
|
||||
#endif
|
||||
}
|
||||
|
||||
int QWindowsContext::processDpiAwareness()
|
||||
{
|
||||
#ifndef Q_OS_WINCE
|
||||
int result;
|
||||
if (QWindowsContext::shcoredll.getProcessDpiAwareness
|
||||
&& SUCCEEDED(QWindowsContext::shcoredll.getProcessDpiAwareness(NULL, &result))) {
|
||||
return result;
|
||||
}
|
||||
#endif // !Q_OS_WINCE
|
||||
return -1;
|
||||
}
|
||||
|
||||
void QWindowsContext::setProcessDpiAwareness(QtWindows::ProcessDpiAwareness dpiAwareness)
|
||||
{
|
||||
#ifndef Q_OS_WINCE
|
||||
qCDebug(lcQpaWindows) << __FUNCTION__ << dpiAwareness;
|
||||
if (QWindowsContext::shcoredll.isValid()) {
|
||||
const HRESULT hr = QWindowsContext::shcoredll.setProcessDpiAwareness(dpiAwareness);
|
||||
if (FAILED(hr))
|
||||
qWarning() << "SetProcessDpiAwareness failed:" << QWindowsContext::comErrorString(hr);
|
||||
if (FAILED(hr)) {
|
||||
qWarning().noquote().nospace() << "SetProcessDpiAwareness("
|
||||
<< dpiAwareness << ") failed: " << QWindowsContext::comErrorString(hr)
|
||||
<< ", using " << QWindowsContext::processDpiAwareness();
|
||||
}
|
||||
} else {
|
||||
if (dpiAwareness != QtWindows::ProcessDpiUnaware && QWindowsContext::user32dll.setProcessDPIAware) {
|
||||
if (!QWindowsContext::user32dll.setProcessDPIAware())
|
||||
|
@ -148,7 +148,7 @@ struct QWindowsShcoreDLL {
|
||||
void init();
|
||||
inline bool isValid() const { return getProcessDpiAwareness && setProcessDpiAwareness && getDpiForMonitor; }
|
||||
|
||||
typedef HRESULT (WINAPI *GetProcessDpiAwareness)(HANDLE,int);
|
||||
typedef HRESULT (WINAPI *GetProcessDpiAwareness)(HANDLE,int *);
|
||||
typedef HRESULT (WINAPI *SetProcessDpiAwareness)(int);
|
||||
typedef HRESULT (WINAPI *GetDpiForMonitor)(HMONITOR,int,UINT *,UINT *);
|
||||
|
||||
@ -219,6 +219,7 @@ public:
|
||||
|
||||
void setTabletAbsoluteRange(int a);
|
||||
void setProcessDpiAwareness(QtWindows::ProcessDpiAwareness dpiAwareness);
|
||||
static int processDpiAwareness();
|
||||
|
||||
// Returns a combination of SystemInfoFlags
|
||||
unsigned systemInfo() const;
|
||||
|
@ -224,7 +224,8 @@ QWindowsIntegrationPrivate::QWindowsIntegrationPrivate(const QStringList ¶mL
|
||||
if (!QCoreApplication::testAttribute(Qt::AA_PluginApplication)) {
|
||||
m_context.setProcessDpiAwareness(dpiAwareness);
|
||||
qCDebug(lcQpaWindows)
|
||||
<< __FUNCTION__ << "DpiAwareness=" << dpiAwareness;
|
||||
<< __FUNCTION__ << "DpiAwareness=" << dpiAwareness
|
||||
<< "effective process DPI awareness=" << QWindowsContext::processDpiAwareness();
|
||||
}
|
||||
dpiAwarenessSet = true;
|
||||
}
|
||||
|
@ -46,6 +46,7 @@
|
||||
#define EGL_EGLEXT_PROTOTYPES
|
||||
#include <EGL/eglext.h>
|
||||
|
||||
#include <QOffscreenSurface>
|
||||
#include <QOpenGLContext>
|
||||
#include <QtPlatformSupport/private/qeglconvenience_p.h>
|
||||
|
||||
@ -54,9 +55,6 @@ QT_BEGIN_NAMESPACE
|
||||
struct WinRTEGLDisplay
|
||||
{
|
||||
WinRTEGLDisplay() {
|
||||
eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
|
||||
if (Q_UNLIKELY(eglDisplay == EGL_NO_DISPLAY))
|
||||
qCritical("Failed to initialize EGL display: 0x%x", eglGetError());
|
||||
}
|
||||
~WinRTEGLDisplay() {
|
||||
eglTerminate(eglDisplay);
|
||||
@ -117,9 +115,17 @@ void QWinRTEGLContext::initialize()
|
||||
if (Q_UNLIKELY(g->eglDisplay == EGL_NO_DISPLAY))
|
||||
qCritical("Failed to initialize EGL display: 0x%x", eglGetError());
|
||||
|
||||
if (Q_UNLIKELY(!eglInitialize(g->eglDisplay, nullptr, nullptr)))
|
||||
qCritical("Failed to initialize EGL: 0x%x", eglGetError());
|
||||
|
||||
// eglInitialize checks for EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE
|
||||
// which adds a suspending handler. This needs to be added from the Xaml
|
||||
// thread itself, otherwise it will not be invoked. add_Suspending does
|
||||
// not return an error unfortunately, so it silently fails and causes
|
||||
// applications to not quit when the system wants to terminate the app
|
||||
// after suspend.
|
||||
hr = QEventDispatcherWinRT::runOnXamlThread([]() {
|
||||
if (!eglInitialize(g->eglDisplay, nullptr, nullptr))
|
||||
qCritical("Failed to initialize EGL: 0x%x", eglGetError());
|
||||
return S_OK;
|
||||
});
|
||||
d->eglConfig = q_configFromGLFormat(g->eglDisplay, d->format);
|
||||
|
||||
const EGLint flags = d->format.testOption(QSurfaceFormat::DebugContext)
|
||||
@ -142,6 +148,9 @@ bool QWinRTEGLContext::makeCurrent(QPlatformSurface *windowSurface)
|
||||
Q_D(QWinRTEGLContext);
|
||||
Q_ASSERT(windowSurface->surface()->supportsOpenGL());
|
||||
|
||||
if (windowSurface->surface()->surfaceClass() == QSurface::Offscreen)
|
||||
return false;
|
||||
|
||||
QWinRTWindow *window = static_cast<QWinRTWindow *>(windowSurface);
|
||||
if (window->eglSurface() == EGL_NO_SURFACE)
|
||||
window->createEglSurface(g->eglDisplay, d->eglConfig);
|
||||
|
@ -49,6 +49,8 @@
|
||||
#include <QtGui/QOpenGLContext>
|
||||
#include <qfunctions_winrt.h>
|
||||
|
||||
#include <qpa/qplatformoffscreensurface.h>
|
||||
|
||||
#include <functional>
|
||||
#include <wrl.h>
|
||||
#include <windows.ui.xaml.h>
|
||||
@ -124,7 +126,7 @@ QWinRTIntegration::QWinRTIntegration() : d_ptr(new QWinRTIntegrationPrivate)
|
||||
IID_PPV_ARGS(&d->application));
|
||||
Q_ASSERT_SUCCEEDED(hr);
|
||||
hr = d->application->add_Suspending(Callback<SuspendHandler>(this, &QWinRTIntegration::onSuspended).Get(),
|
||||
&d->applicationTokens[&ICoreApplication::remove_Resuming]);
|
||||
&d->applicationTokens[&ICoreApplication::remove_Suspending]);
|
||||
Q_ASSERT_SUCCEEDED(hr);
|
||||
hr = d->application->add_Resuming(Callback<ResumeHandler>(this, &QWinRTIntegration::onResume).Get(),
|
||||
&d->applicationTokens[&ICoreApplication::remove_Resuming]);
|
||||
@ -180,10 +182,15 @@ QWinRTIntegration::~QWinRTIntegration()
|
||||
Q_ASSERT_SUCCEEDED(hr);
|
||||
}
|
||||
#endif
|
||||
// Do not execute this on Windows Phone as the application is already
|
||||
// shutting down and trying to unregister suspending/resume handler will
|
||||
// cause exceptions and assert in debug mode
|
||||
#ifndef Q_OS_WINPHONE
|
||||
for (QHash<CoreApplicationCallbackRemover, EventRegistrationToken>::const_iterator i = d->applicationTokens.begin(); i != d->applicationTokens.end(); ++i) {
|
||||
hr = (d->application.Get()->*i.key())(i.value());
|
||||
Q_ASSERT_SUCCEEDED(hr);
|
||||
}
|
||||
#endif
|
||||
destroyScreen(d->mainScreen);
|
||||
Windows::Foundation::Uninitialize();
|
||||
}
|
||||
@ -349,4 +356,14 @@ HRESULT QWinRTIntegration::onResume(IInspectable *, IInspectable *)
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
QPlatformOffscreenSurface *QWinRTIntegration::createPlatformOffscreenSurface(QOffscreenSurface *surface) const
|
||||
{
|
||||
// This is only used for shutdown of applications.
|
||||
// In case we do not return an empty surface the scenegraph will try
|
||||
// to create a new native window during application exit causing crashes
|
||||
// or assertions.
|
||||
return new QPlatformOffscreenSurface(surface);
|
||||
}
|
||||
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -98,6 +98,7 @@ public:
|
||||
QStringList themeNames() const Q_DECL_OVERRIDE;
|
||||
QPlatformTheme *createPlatformTheme(const QString &name) const Q_DECL_OVERRIDE;
|
||||
|
||||
QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const Q_DECL_OVERRIDE;
|
||||
private:
|
||||
#ifdef Q_OS_WINPHONE
|
||||
HRESULT onBackButtonPressed(IInspectable *, ABI::Windows::Phone::UI::Input::IBackPressedEventArgs *args);
|
||||
|
@ -779,6 +779,7 @@ void QWinRTScreen::addWindow(QWindow *window)
|
||||
d->visibleWindows.prepend(window);
|
||||
QWindowSystemInterface::handleWindowActivated(window, Qt::OtherFocusReason);
|
||||
handleExpose();
|
||||
QWindowSystemInterface::flushWindowSystemEvents();
|
||||
}
|
||||
|
||||
void QWinRTScreen::removeWindow(QWindow *window)
|
||||
@ -796,6 +797,7 @@ void QWinRTScreen::removeWindow(QWindow *window)
|
||||
if (wasTopWindow)
|
||||
QWindowSystemInterface::handleWindowActivated(window, Qt::OtherFocusReason);
|
||||
handleExpose();
|
||||
QWindowSystemInterface::flushWindowSystemEvents();
|
||||
}
|
||||
|
||||
void QWinRTScreen::raise(QWindow *window)
|
||||
|
@ -51,6 +51,7 @@
|
||||
#include <qscreen.h>
|
||||
#include <QtGui/private/qhighdpiscaling_p.h>
|
||||
#include <qpa/qplatformgraphicsbuffer.h>
|
||||
#include <private/qimage_p.h>
|
||||
|
||||
#include <algorithm>
|
||||
QT_BEGIN_NAMESPACE
|
||||
@ -172,6 +173,9 @@ QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size, uint depth, QI
|
||||
qWarning() << "QXcbBackingStore: Error while marking the shared memory segment to be destroyed";
|
||||
}
|
||||
|
||||
if (QImage::toPixelFormat(format).alphaUsage() == QPixelFormat::IgnoresAlpha)
|
||||
format = qt_alphaVersionForPainting(format);
|
||||
|
||||
m_qimage = QImage( (uchar*) m_xcb_image->data, m_xcb_image->width, m_xcb_image->height, m_xcb_image->stride, format);
|
||||
m_graphics_buffer = new QXcbShmGraphicsBuffer(&m_qimage);
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ QXcbVirtualDesktop::~QXcbVirtualDesktop()
|
||||
QXcbScreen *QXcbVirtualDesktop::screenAt(const QPoint &pos) const
|
||||
{
|
||||
foreach (QXcbScreen *screen, connection()->screens()) {
|
||||
if (screen->virtualDesktop() == this && screen->nativeGeometry().contains(pos))
|
||||
if (screen->virtualDesktop() == this && screen->geometry().contains(pos))
|
||||
return screen;
|
||||
}
|
||||
return Q_NULLPTR;
|
||||
@ -198,17 +198,15 @@ QXcbScreen::QXcbScreen(QXcbConnection *connection, QXcbVirtualDesktop *virtualDe
|
||||
} else if (xineramaScreenInfo) {
|
||||
m_geometry = QRect(xineramaScreenInfo->x_org, xineramaScreenInfo->y_org,
|
||||
xineramaScreenInfo->width, xineramaScreenInfo->height);
|
||||
m_nativeGeometry = m_geometry;
|
||||
m_availableGeometry = m_geometry & m_virtualDesktop->workArea();
|
||||
m_sizeMillimeters = sizeInMillimeters(m_geometry.size(), virtualDpi());
|
||||
if (xineramaScreenIdx > -1)
|
||||
m_outputName += QLatin1Char('-') + QString::number(xineramaScreenIdx);
|
||||
}
|
||||
|
||||
if (m_geometry.isEmpty()) {
|
||||
if (m_geometry.isEmpty())
|
||||
m_geometry = QRect(QPoint(), m_virtualSize);
|
||||
m_nativeGeometry = QRect(QPoint(), m_virtualSize);
|
||||
}
|
||||
|
||||
if (m_availableGeometry.isEmpty())
|
||||
m_availableGeometry = m_geometry;
|
||||
|
||||
@ -557,7 +555,6 @@ void QXcbScreen::updateGeometry(const QRect &geom, uint8_t rotation)
|
||||
qreal dpi = xGeometry.width() / physicalSize().width() * qreal(25.4);
|
||||
m_pixelDensity = qRound(dpi/96);
|
||||
m_geometry = QRect(xGeometry.topLeft(), xGeometry.size());
|
||||
m_nativeGeometry = QRect(xGeometry.topLeft(), xGeometry.size());
|
||||
m_availableGeometry = xGeometry & m_virtualDesktop->workArea();
|
||||
QWindowSystemInterface::handleScreenGeometryChange(QPlatformScreen::screen(), m_geometry, m_availableGeometry);
|
||||
}
|
||||
@ -828,9 +825,7 @@ QDebug operator<<(QDebug debug, const QXcbScreen *screen)
|
||||
debug << ", screenNumber=" << screen->screenNumber();
|
||||
debug << ", virtualSize=" << screen->virtualSize().width() << 'x' << screen->virtualSize().height() << " (";
|
||||
formatSizeF(debug, screen->virtualSize());
|
||||
debug << "), nativeGeometry=";
|
||||
formatRect(debug, screen->nativeGeometry());
|
||||
debug << ", orientation=" << screen->orientation();
|
||||
debug << "), orientation=" << screen->orientation();
|
||||
debug << ", depth=" << screen->depth();
|
||||
debug << ", refreshRate=" << screen->refreshRate();
|
||||
debug << ", root=" << hex << screen->root();
|
||||
|
@ -114,7 +114,6 @@ public:
|
||||
QWindow *topLevelAt(const QPoint &point) const Q_DECL_OVERRIDE;
|
||||
|
||||
QRect geometry() const Q_DECL_OVERRIDE { return m_geometry; }
|
||||
QRect nativeGeometry() const { return m_nativeGeometry; }
|
||||
QRect availableGeometry() const Q_DECL_OVERRIDE {return m_availableGeometry;}
|
||||
int depth() const Q_DECL_OVERRIDE { return screen()->root_depth; }
|
||||
QImage::Format format() const Q_DECL_OVERRIDE;
|
||||
@ -186,7 +185,6 @@ private:
|
||||
QSizeF m_outputSizeMillimeters;
|
||||
QSizeF m_sizeMillimeters;
|
||||
QRect m_geometry;
|
||||
QRect m_nativeGeometry;
|
||||
QRect m_availableGeometry;
|
||||
QSize m_virtualSize;
|
||||
QSizeF m_virtualSizeMillimeters;
|
||||
|
@ -167,7 +167,6 @@ public:
|
||||
|
||||
virtual void create();
|
||||
virtual void destroy();
|
||||
QXcbScreen *screenForNativeGeometry(const QRect &newGeometry) const;
|
||||
|
||||
public Q_SLOTS:
|
||||
void updateSyncRequestCounter();
|
||||
|
@ -203,7 +203,7 @@ int QDesktopWidget::screenNumber(const QWidget *w) const
|
||||
return primaryScreen();
|
||||
|
||||
// If there is more than one virtual desktop
|
||||
if (screens.count() != screens.first()->virtualSiblings().count()) {
|
||||
if (screens.count() != screens.constFirst()->virtualSiblings().count()) {
|
||||
// Find the root widget, get a QScreen from it and use the
|
||||
// virtual siblings for checking the window position.
|
||||
const QWidget *root = w;
|
||||
|
@ -432,7 +432,7 @@ void QCompletionEngine::filter(const QStringList& parts)
|
||||
|
||||
QModelIndex parent;
|
||||
for (int i = 0; i < curParts.count() - 1; i++) {
|
||||
QString part = curParts[i];
|
||||
QString part = curParts.at(i);
|
||||
int emi = filter(part, parent, -1).exactMatchIndex;
|
||||
if (emi == -1)
|
||||
return;
|
||||
@ -442,10 +442,10 @@ void QCompletionEngine::filter(const QStringList& parts)
|
||||
// Note that we set the curParent to a valid parent, even if we have no matches
|
||||
// When filtering is disabled, we show all the items under this parent
|
||||
curParent = parent;
|
||||
if (curParts.last().isEmpty())
|
||||
if (curParts.constLast().isEmpty())
|
||||
curMatch = QMatchData(QIndexMapper(0, model->rowCount(curParent) - 1), -1, false);
|
||||
else
|
||||
curMatch = filter(curParts.last(), curParent, 1); // build at least one
|
||||
curMatch = filter(curParts.constLast(), curParent, 1); // build at least one
|
||||
curRow = curMatch.isValid() ? 0 : -1;
|
||||
}
|
||||
|
||||
|
@ -261,7 +261,7 @@ void QDialogButtonBoxPrivate::layoutButtons()
|
||||
if (center)
|
||||
buttonLayout->addStretch();
|
||||
|
||||
QList<QAbstractButton *> acceptRoleList = buttonLists[QPlatformDialogHelper::AcceptRole];
|
||||
const QList<QAbstractButton *> &acceptRoleList = buttonLists[QPlatformDialogHelper::AcceptRole];
|
||||
|
||||
while (*currentLayout != QPlatformDialogHelper::EOL) {
|
||||
int role = (*currentLayout & ~QPlatformDialogHelper::Reverse);
|
||||
|
@ -8,6 +8,8 @@ find_package(Qt5Widgets)
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
|
||||
|
||||
add_executable(test_interface_exe WIN32 main.cpp mainwindow.cpp)
|
||||
|
||||
# No need to specify include directories, compile definitions, the PIC flag, or to
|
||||
|
@ -9,5 +9,5 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
|
||||
|
||||
add_subdirectory(subdir1)
|
||||
|
||||
add_executable(exe1 "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp")
|
||||
include_directories(${Qt5Core_INCLUDE_DIRS})
|
||||
add_executable(exe1 main.cpp)
|
||||
target_link_libraries(exe1 Qt5::Core)
|
||||
|
@ -2,4 +2,4 @@
|
||||
find_package(Qt5Core REQUIRED)
|
||||
|
||||
add_executable(exe2 "${CMAKE_CURRENT_SOURCE_DIR}/../main.cpp")
|
||||
include_directories(${Qt5Core_INCLUDE_DIRS})
|
||||
target_link_libraries(exe2 Qt5::Core)
|
||||
|
@ -11,3 +11,4 @@ add_definitions(${Qt5Core_DEFINITIONS})
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
|
||||
|
||||
add_executable(myobject main.cpp)
|
||||
target_link_libraries(myobject Qt5::Core)
|
||||
|
@ -12,5 +12,7 @@ add_executable(three three.cpp)
|
||||
|
||||
find_package(Qt5Core)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
|
||||
|
||||
qt5_use_modules(two Test)
|
||||
qt5_use_modules(three Gui Test)
|
||||
|
@ -1736,12 +1736,16 @@ void tst_QVariant::compareNumbers_data() const
|
||||
QTest::newRow("float3") << qVariantFromValue(0.f) << qVariantFromValue(-1.f) << +1;
|
||||
QTest::newRow("float4") << qVariantFromValue(-float(qInf())) << qVariantFromValue(0.f) << -1;
|
||||
QTest::newRow("float5") << qVariantFromValue(0.f) << qVariantFromValue(-float(qInf())) << +1;
|
||||
QTest::newRow("float6") << qVariantFromValue(-float(qInf())) << qVariantFromValue(-float(qInf())) << 0;
|
||||
QTest::newRow("float7") << qVariantFromValue(float(qInf())) << qVariantFromValue(float(qInf())) << 0;
|
||||
|
||||
QTest::newRow("double1") << qVariantFromValue(0.) << qVariantFromValue(0.) << 0;
|
||||
QTest::newRow("double2") << qVariantFromValue(-1.) << qVariantFromValue(0.) << -1;
|
||||
QTest::newRow("double3") << qVariantFromValue(0.) << qVariantFromValue(-1.) << +1;
|
||||
QTest::newRow("double4") << qVariantFromValue(-qInf()) << qVariantFromValue(0.) << -1;
|
||||
QTest::newRow("double5") << qVariantFromValue(0.) << qVariantFromValue(-qInf()) << +1;
|
||||
QTest::newRow("double6") << qVariantFromValue(-double(qInf())) << qVariantFromValue(-qInf()) << 0;
|
||||
QTest::newRow("double7") << qVariantFromValue(qInf()) << qVariantFromValue(qInf()) << 0;
|
||||
|
||||
// mixed comparisons
|
||||
// fp + fp
|
||||
@ -1750,6 +1754,8 @@ void tst_QVariant::compareNumbers_data() const
|
||||
QTest::newRow("float+double3") << qVariantFromValue(0.f) << qVariantFromValue(-1.) << +1;
|
||||
QTest::newRow("float+double4") << qVariantFromValue(-float(qInf())) << qVariantFromValue(0.) << -1;
|
||||
QTest::newRow("float+double5") << qVariantFromValue(0.f) << qVariantFromValue(-qInf()) << +1;
|
||||
QTest::newRow("float+double6") << qVariantFromValue(-float(qInf())) << qVariantFromValue(qInf()) << 0;
|
||||
QTest::newRow("float+double7") << qVariantFromValue(float(qInf())) << qVariantFromValue(qInf()) << 0;
|
||||
|
||||
// fp + int
|
||||
QTest::newRow("float+int1") << qVariantFromValue(0.f) << qVariantFromValue(0) << 0;
|
||||
@ -1760,6 +1766,7 @@ void tst_QVariant::compareNumbers_data() const
|
||||
QTest::newRow("double+int3") << qVariantFromValue(0.) << qVariantFromValue(-1) << +1;
|
||||
QTest::newRow("float+int4") << qVariantFromValue(1.5f) << qVariantFromValue(1) << +1;
|
||||
QTest::newRow("double+int4") << qVariantFromValue(1.5) << qVariantFromValue(1) << +1;
|
||||
QTest::newRow("double+int5") << qVariantFromValue(qInf()) << qVariantFromValue(1) << +1;
|
||||
|
||||
// fp + uint
|
||||
QTest::newRow("float+uint1") << qVariantFromValue(0.f) << qVariantFromValue(0U) << 0;
|
||||
|
@ -392,16 +392,37 @@ void tst_QDate::weekNumber_data()
|
||||
QTest::addColumn<int>("month");
|
||||
QTest::addColumn<int>("day");
|
||||
|
||||
//next we fill it with data
|
||||
QTest::newRow( "data0" ) << 10 << 2002 << 2002 << 3 << 8;
|
||||
QTest::newRow( "data1" ) << 10 << 2002 << 2002 << 3 << 8;
|
||||
QTest::newRow( "data2" ) << 52 << 1999 << 2000 << 1 << 1;
|
||||
QTest::newRow( "data3" ) << 52 << 1999 << 1999 << 12 << 31;
|
||||
QTest::newRow( "data4" ) << 1 << 2001 << 2001 << 1 << 1;
|
||||
QTest::newRow( "data5" ) << 53 << 1998 << 1998 << 12 << 31;
|
||||
QTest::newRow( "data6" ) << 1 << 1985 << 1984 << 12 << 31;
|
||||
QTest::newRow( "data7" ) << 52 << 2006 << 2006 << 12 << 31;
|
||||
QTest::newRow( "data8" ) << 53 << 2004 << 2005 << 1 << 1;
|
||||
enum { Thursday = 4 };
|
||||
bool wasLastYearLong = false; // 1999 was not a long (53-week) year
|
||||
bool isLongYear;
|
||||
|
||||
// full 400-year cycle for Jan 1, 4 and Dec 28, 31
|
||||
for (int yr = 2000; yr < 2400; ++yr, wasLastYearLong = isLongYear) {
|
||||
QByteArray yrstr = QByteArray::number(yr);
|
||||
int wday = QDate(yr, 1, 1).dayOfWeek();
|
||||
|
||||
// the year is 53-week long if Jan 1 is Thursday or, if it's a leap year, a Wednesday
|
||||
isLongYear = (wday == Thursday) || (QDate::isLeapYear(yr) && wday == Thursday - 1);
|
||||
|
||||
// Jan 4 is always on week 1
|
||||
QTest::newRow(yrstr + "-01-04") << 1 << yr << yr << 1 << 4;
|
||||
|
||||
// Dec 28 is always on the last week
|
||||
QTest::newRow(yrstr + "-12-28") << (52 + isLongYear) << yr << yr << 12 << 28;
|
||||
|
||||
// Jan 1 is on either on week 1 or on the last week of the previous year
|
||||
QTest::newRow(yrstr + "-01-01")
|
||||
<< (wday <= Thursday ? 1 : 52 + wasLastYearLong)
|
||||
<< (wday <= Thursday ? yr : yr - 1)
|
||||
<< yr << 1 << 1;
|
||||
|
||||
// Dec 31 is either on the last week or week 1 of the next year
|
||||
wday = QDate(yr, 12, 31).dayOfWeek();
|
||||
QTest::newRow(yrstr + "-12-31")
|
||||
<< (wday >= Thursday ? 52 + isLongYear : 1)
|
||||
<< (wday >= Thursday ? yr : yr + 1)
|
||||
<< yr << 12 << 31;
|
||||
}
|
||||
}
|
||||
|
||||
void tst_QDate::weekNumber()
|
||||
|
@ -68,6 +68,7 @@ private slots:
|
||||
void timeSpec();
|
||||
void toTime_t_data();
|
||||
void toTime_t();
|
||||
void daylightSavingsTimeChange_data();
|
||||
void daylightSavingsTimeChange();
|
||||
void springForward_data();
|
||||
void springForward();
|
||||
@ -1563,36 +1564,47 @@ void tst_QDateTime::toTime_t()
|
||||
}
|
||||
}
|
||||
|
||||
void tst_QDateTime::daylightSavingsTimeChange_data()
|
||||
{
|
||||
QTest::addColumn<QDate>("inDST");
|
||||
QTest::addColumn<QDate>("outDST");
|
||||
QTest::newRow("Autumn") << QDate(2006, 8, 1) << QDate(2006, 12, 1);
|
||||
QTest::newRow("Spring") << QDate(2006, 5, 1) << QDate(2006, 2, 1);
|
||||
}
|
||||
|
||||
void tst_QDateTime::daylightSavingsTimeChange()
|
||||
{
|
||||
// This is a regression test for an old bug where starting with a date in
|
||||
// DST and then moving to a date outside it (or vice-versa) caused 1-hour
|
||||
// jumps in time when addSecs() was called.
|
||||
// This has grown from a regression test for an old bug where starting with
|
||||
// a date in DST and then moving to a date outside it (or vice-versa) caused
|
||||
// 1-hour jumps in time when addSecs() was called.
|
||||
//
|
||||
// The bug was caused by QDateTime knowing more than it lets show.
|
||||
// Internally, if it knows, QDateTime stores a flag indicating if the time is
|
||||
// DST or not. If it doesn't, it sets to "LocalUnknown". The problem happened
|
||||
// because some functions did not reset the flag when moving in or out of DST.
|
||||
|
||||
// WARNING: This test only works if there's a Daylight Savings Time change
|
||||
// in the current locale between 2006-11-06 and 2006-10-16
|
||||
// This is true for Central European Time
|
||||
// WARNING: This only tests anything if there's a Daylight Savings Time change
|
||||
// in the current locale between inDST and outDST.
|
||||
// This is true for Central European Time and may be elsewhere.
|
||||
|
||||
if (!europeanTimeZone)
|
||||
QSKIP("Not tested with timezone other than Central European (CET/CEST)");
|
||||
QFETCH(QDate, inDST);
|
||||
QFETCH(QDate, outDST);
|
||||
|
||||
QDateTime dt = QDateTime(QDate(2006, 11, 6), QTime(0, 0, 0), Qt::LocalTime);
|
||||
dt.setDate(QDate(2006, 10, 16));
|
||||
// First with simple construction
|
||||
QDateTime dt = QDateTime(outDST, QTime(0, 0, 0), Qt::LocalTime);
|
||||
int outDSTsecs = dt.toTime_t();
|
||||
|
||||
dt.setDate(inDST);
|
||||
dt = dt.addSecs(1);
|
||||
QCOMPARE(dt.date(), QDate(2006, 10, 16));
|
||||
QCOMPARE(dt.time(), QTime(0, 0, 1));
|
||||
QCOMPARE(dt, QDateTime(inDST, QTime(0, 0, 1)));
|
||||
|
||||
// now using fromTime_t
|
||||
dt = QDateTime::fromTime_t(1162767600); // 2006-11-06 00:00:00 +0100
|
||||
dt.setDate(QDate(2006, 10, 16));
|
||||
dt = dt.addSecs (1);
|
||||
QCOMPARE(dt.date(), QDate(2006, 10, 16));
|
||||
QCOMPARE(dt.time(), QTime(0, 0, 1));
|
||||
dt = QDateTime::fromTime_t(outDSTsecs);
|
||||
QCOMPARE(dt, QDateTime(outDST, QTime(0, 0, 0)));
|
||||
|
||||
dt.setDate(inDST);
|
||||
dt = dt.addSecs(60);
|
||||
QCOMPARE(dt, QDateTime(inDST, QTime(0, 1, 0)));
|
||||
}
|
||||
|
||||
void tst_QDateTime::springForward_data()
|
||||
|
@ -71,7 +71,6 @@ void tst_QDBusConnection::noConnection()
|
||||
QVERIFY(con.callWithCallback(msg, &spy, SLOT(asyncReply)) == 0);
|
||||
|
||||
QDBusMessage reply = con.call(msg);
|
||||
QCOMPARE(msg.serial(), reply.replySerial());
|
||||
QCOMPARE(reply.type(), QDBusMessage::ErrorMessage);
|
||||
|
||||
QDBusReply<void> voidreply(reply);
|
||||
@ -153,7 +152,6 @@ void tst_QDBusConnection::send()
|
||||
|
||||
QDBusMessage reply = con.call(msg);
|
||||
|
||||
QCOMPARE(msg.serial(), reply.replySerial());
|
||||
QCOMPARE(reply.arguments().count(), 1);
|
||||
QCOMPARE(reply.arguments().at(0).typeName(), "QStringList");
|
||||
QVERIFY(reply.arguments().at(0).toStringList().contains(con.baseService()));
|
||||
@ -173,7 +171,6 @@ void tst_QDBusConnection::sendWithGui()
|
||||
|
||||
QDBusMessage reply = con.call(msg, QDBus::BlockWithGui);
|
||||
|
||||
QCOMPARE(msg.serial(), reply.replySerial());
|
||||
QCOMPARE(reply.arguments().count(), 1);
|
||||
QCOMPARE(reply.arguments().at(0).typeName(), "QStringList");
|
||||
QVERIFY(reply.arguments().at(0).toStringList().contains(con.baseService()));
|
||||
@ -843,7 +840,6 @@ void tst_QDBusConnection::callSelf()
|
||||
QString(), "test3");
|
||||
msg << 44;
|
||||
reply = connection.call(msg);
|
||||
QCOMPARE(msg.serial(), reply.replySerial());
|
||||
QCOMPARE(reply.arguments().value(0).toInt(), 45);
|
||||
}
|
||||
|
||||
@ -911,7 +907,6 @@ void tst_QDBusConnection::callSelfByAnotherName()
|
||||
QString(), "test0");
|
||||
QDBusMessage reply = con.call(msg, QDBus::Block, 1000);
|
||||
|
||||
QCOMPARE(msg.serial(), reply.replySerial());
|
||||
QCOMPARE(reply.type(), QDBusMessage::ReplyMessage);
|
||||
}
|
||||
|
||||
@ -927,7 +922,6 @@ void tst_QDBusConnection::multipleInterfacesInQObject()
|
||||
QDBusMessage msg = QDBusMessage::createMethodCall(con.baseService(), "/p1",
|
||||
"local.BaseObject", "anotherMethod");
|
||||
QDBusMessage reply = con.call(msg, QDBus::Block);
|
||||
QCOMPARE(msg.serial(), reply.replySerial());
|
||||
QCOMPARE(reply.type(), QDBusMessage::ReplyMessage);
|
||||
QCOMPARE(reply.arguments().count(), 0);
|
||||
}
|
||||
@ -1208,7 +1202,6 @@ void tst_QDBusConnection::callVirtualObjectLocal()
|
||||
|
||||
QDBusMessage message = QDBusMessage::createMethodCall(con.baseService(), path, QString(), "hello");
|
||||
QDBusMessage reply = con.call(message, QDBus::Block, 5000);
|
||||
QCOMPARE(message.serial(), reply.replySerial());
|
||||
QCOMPARE(obj.callCount, 1);
|
||||
QCOMPARE(obj.lastMessage.service(), con.baseService());
|
||||
QCOMPARE(obj.lastMessage.interface(), QString());
|
||||
|
@ -3,6 +3,8 @@ SOURCES += ../tst_qclipboard.cpp
|
||||
TARGET = ../tst_qclipboard
|
||||
QT += testlib
|
||||
|
||||
osx: LIBS += -framework AppKit
|
||||
|
||||
win32 {
|
||||
CONFIG(debug, debug|release) {
|
||||
TARGET = ../../debug/tst_qclipboard
|
||||
|
@ -805,7 +805,6 @@ void tst_QGLThreads::painterOnFboInThread()
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QApplication::setAttribute(Qt::AA_X11InitThreads);
|
||||
QApplication app(argc, argv);
|
||||
QTEST_DISABLE_KEYPAD_NAVIGATION \
|
||||
|
||||
|
@ -6,4 +6,6 @@ HEADERS += guitest.h
|
||||
|
||||
QT = core-private widgets-private testlib
|
||||
|
||||
osx: LIBS += -framework ApplicationServices
|
||||
|
||||
requires(mac)
|
||||
|
@ -3,3 +3,4 @@ TARGET = tst_qlineedit
|
||||
QT += gui-private core-private widgets widgets-private testlib
|
||||
SOURCES += tst_qlineedit.cpp
|
||||
|
||||
osx: LIBS += -framework AppKit
|
||||
|
@ -9,3 +9,4 @@ INCLUDEPATH += ../
|
||||
HEADERS +=
|
||||
SOURCES += tst_qplaintextedit.cpp
|
||||
|
||||
osx: LIBS += -framework AppKit
|
||||
|
@ -4,3 +4,5 @@ TARGET = tst_qtextedit
|
||||
QT += widgets widgets-private gui-private core-private testlib
|
||||
|
||||
SOURCES += tst_qtextedit.cpp
|
||||
|
||||
osx: LIBS += -framework AppKit
|
||||
|
@ -48,9 +48,10 @@
|
||||
namespace QtDiag {
|
||||
|
||||
struct DumpContext {
|
||||
DumpContext() : indentation(0) {}
|
||||
DumpContext() : indentation(0), parent(0) {}
|
||||
|
||||
int indentation;
|
||||
HWND parent;
|
||||
QSharedPointer<QTextStream> stream;
|
||||
};
|
||||
|
||||
@ -64,11 +65,19 @@ static void formatNativeWindow(HWND hwnd, QTextStream &str)
|
||||
RECT rect;
|
||||
if (GetWindowRect(hwnd, &rect)) {
|
||||
str << ' ' << (rect.right - rect.left) << 'x' << (rect.bottom - rect.top)
|
||||
<< '+' << rect.left << '+' << rect.top;
|
||||
<< forcesign << rect.left << rect.top << noforcesign;
|
||||
}
|
||||
if (IsWindowVisible(hwnd))
|
||||
str << " [visible]";
|
||||
|
||||
wchar_t buf[512];
|
||||
if (GetWindowText(hwnd, buf, sizeof(buf)/sizeof(buf[0])) && buf[0])
|
||||
str << " title=\"" << QString::fromWCharArray(buf) << "\"/";
|
||||
else
|
||||
str << ' ';
|
||||
if (GetClassName(hwnd, buf, sizeof(buf)/sizeof(buf[0])))
|
||||
str << '"' << QString::fromWCharArray(buf) << '"';
|
||||
|
||||
str << hex << showbase;
|
||||
if (const LONG_PTR style = GetWindowLongPtr(hwnd, GWL_STYLE)) {
|
||||
str << " style=" << style;
|
||||
@ -121,13 +130,31 @@ static void formatNativeWindow(HWND hwnd, QTextStream &str)
|
||||
debugWinStyle(str, exStyle, WS_EX_COMPOSITED)
|
||||
debugWinStyle(str, exStyle, WS_EX_NOACTIVATE)
|
||||
}
|
||||
|
||||
if (const ULONG_PTR classStyle = GetClassLongPtr(hwnd, GCL_STYLE)) {
|
||||
str << " classStyle=" << classStyle;
|
||||
debugWinStyle(str, classStyle, CS_BYTEALIGNCLIENT)
|
||||
debugWinStyle(str, classStyle, CS_BYTEALIGNWINDOW)
|
||||
debugWinStyle(str, classStyle, CS_CLASSDC)
|
||||
debugWinStyle(str, classStyle, CS_DBLCLKS)
|
||||
debugWinStyle(str, classStyle, CS_DROPSHADOW)
|
||||
debugWinStyle(str, classStyle, CS_GLOBALCLASS)
|
||||
debugWinStyle(str, classStyle, CS_HREDRAW)
|
||||
debugWinStyle(str, classStyle, CS_NOCLOSE)
|
||||
debugWinStyle(str, classStyle, CS_OWNDC)
|
||||
debugWinStyle(str, classStyle, CS_PARENTDC)
|
||||
debugWinStyle(str, classStyle, CS_SAVEBITS)
|
||||
debugWinStyle(str, classStyle, CS_VREDRAW)
|
||||
}
|
||||
|
||||
if (const ULONG_PTR wndProc = GetClassLongPtr(hwnd, GCLP_WNDPROC))
|
||||
str << " wndProc=" << wndProc;
|
||||
|
||||
str << noshowbase << dec;
|
||||
|
||||
wchar_t buf[512];
|
||||
if (GetWindowText(hwnd, buf, sizeof(buf)/sizeof(buf[0])))
|
||||
str << " title=\"" << QString::fromWCharArray(buf) << '"';
|
||||
if (GetClassName(hwnd, buf, sizeof(buf)/sizeof(buf[0])))
|
||||
str << " class=\"" << QString::fromWCharArray(buf) << '"';
|
||||
if (GetWindowModuleFileName(hwnd, buf, sizeof(buf)/sizeof(buf[0])))
|
||||
str << " module=\"" << QString::fromWCharArray(buf) << '"';
|
||||
|
||||
str << '\n';
|
||||
}
|
||||
|
||||
@ -135,7 +162,11 @@ static void dumpNativeWindowRecursion(HWND hwnd, DumpContext *dc);
|
||||
|
||||
BOOL CALLBACK dumpWindowEnumChildProc(HWND hwnd, LPARAM lParam)
|
||||
{
|
||||
dumpNativeWindowRecursion(hwnd, reinterpret_cast<DumpContext *>(lParam));
|
||||
DumpContext *dumpContext = reinterpret_cast<DumpContext *>(lParam);
|
||||
// EnumChildWindows enumerates grand children as well, skip these to
|
||||
// get the hierarchical formatting right.
|
||||
if (GetAncestor(hwnd, GA_PARENT) == dumpContext->parent)
|
||||
dumpNativeWindowRecursion(hwnd, dumpContext);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -145,6 +176,7 @@ static void dumpNativeWindowRecursion(HWND hwnd, DumpContext *dc)
|
||||
formatNativeWindow(hwnd, *dc->stream);
|
||||
DumpContext nextLevel = *dc;
|
||||
nextLevel.indentation += 2;
|
||||
nextLevel.parent = hwnd;
|
||||
EnumChildWindows(hwnd, dumpWindowEnumChildProc, reinterpret_cast<LPARAM>(&nextLevel));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user