Merge remote-tracking branch 'origin/5.9' into dev
Conflicts: src/corelib/io/qwindowspipewriter.cpp src/widgets/styles/qcommonstyle.cpp Change-Id: I0d33efdc4dc256e234abc490a18ccda72cd1d9e6
This commit is contained in:
commit
407302fb1b
@ -1,4 +1,4 @@
|
|||||||
requires(if(wince|embedded|x11):qtHaveModule(gui))
|
requires(if(embedded|x11):qtHaveModule(gui))
|
||||||
|
|
||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
SUBDIRS = styleexample raycasting flickable digiflip
|
SUBDIRS = styleexample raycasting flickable digiflip
|
||||||
|
@ -16,9 +16,3 @@ EXAMPLE_FILES = animation.gif
|
|||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/network/multistreamserver
|
target.path = $$[QT_INSTALL_EXAMPLES]/network/multistreamserver
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
wince*: {
|
|
||||||
addFiles.files += *.gif
|
|
||||||
addFiles.path = .
|
|
||||||
DEPLOYMENT += addFiles
|
|
||||||
}
|
|
||||||
|
@ -8,14 +8,12 @@ qtHaveModule(widgets) {
|
|||||||
SUBDIRS += contextinfo \
|
SUBDIRS += contextinfo \
|
||||||
threadedqopenglwidget \
|
threadedqopenglwidget \
|
||||||
2dpainting \
|
2dpainting \
|
||||||
hellogl2
|
hellogl2 \
|
||||||
|
qopenglwidget \
|
||||||
!wince: SUBDIRS += \
|
cube \
|
||||||
qopenglwidget \
|
textures \
|
||||||
cube \
|
hellogles3 \
|
||||||
textures \
|
computegles31
|
||||||
hellogles3 \
|
|
||||||
computegles31
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EXAMPLE_FILES += \
|
EXAMPLE_FILES += \
|
||||||
|
@ -3,12 +3,10 @@ requires(qtHaveModule(concurrent))
|
|||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
SUBDIRS = imagescaling \
|
SUBDIRS = imagescaling \
|
||||||
map \
|
map \
|
||||||
|
progressdialog \
|
||||||
runfunction \
|
runfunction \
|
||||||
wordcount
|
wordcount
|
||||||
|
|
||||||
!wince* {
|
|
||||||
SUBDIRS += progressdialog
|
|
||||||
}
|
|
||||||
|
|
||||||
!qtHaveModule(gui) {
|
!qtHaveModule(gui) {
|
||||||
SUBDIRS -= \
|
SUBDIRS -= \
|
||||||
|
@ -10,11 +10,3 @@ QT += sql widgets widgets
|
|||||||
|
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/sql/books
|
target.path = $$[QT_INSTALL_EXAMPLES]/sql/books
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
|
|
||||||
wince {
|
|
||||||
CONFIG(debug, debug|release):sqlPlugins.files = $$QT_BUILD_TREE/plugins/sqldrivers/*d4.dll
|
|
||||||
CONFIG(release, debug|release):sqlPlugins.files = $$QT_BUILD_TREE/plugins/sqldrivers/*[^d]4.dll
|
|
||||||
sqlPlugins.path = sqldrivers
|
|
||||||
INSTALLS += sqlPlugins
|
|
||||||
}
|
|
||||||
|
@ -4,16 +4,14 @@ TEMPLATE = subdirs
|
|||||||
|
|
||||||
SUBDIRS = books \
|
SUBDIRS = books \
|
||||||
drilldown \
|
drilldown \
|
||||||
cachedtable \
|
cachedtable \
|
||||||
relationaltablemodel \
|
|
||||||
sqlwidgetmapper
|
|
||||||
|
|
||||||
!wince:qtHaveModule(xml): SUBDIRS += masterdetail
|
|
||||||
|
|
||||||
!wince: SUBDIRS += \
|
|
||||||
querymodel \
|
querymodel \
|
||||||
|
relationaltablemodel \
|
||||||
|
sqlwidgetmapper \
|
||||||
tablemodel
|
tablemodel
|
||||||
|
|
||||||
|
qtHaveModule(xml): SUBDIRS += masterdetail
|
||||||
|
|
||||||
!cross_compile:{
|
!cross_compile:{
|
||||||
contains(QT_BUILD_PARTS, tools):{
|
contains(QT_BUILD_PARTS, tools):{
|
||||||
SUBDIRS += sqlbrowser
|
SUBDIRS += sqlbrowser
|
||||||
|
@ -10,5 +10,3 @@ RESOURCES += configdialog.qrc
|
|||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/dialogs/configdialog
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/dialogs/configdialog
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
wince50standard-x86-msvc2005: LIBS += libcmt.lib corelibc.lib ole32.lib oleaut32.lib uuid.lib commctrl.lib coredll.lib winsock.lib ws2.lib
|
|
||||||
|
@ -3,17 +3,13 @@ QT_FOR_CONFIG += widgets
|
|||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
SUBDIRS = classwizard \
|
SUBDIRS = classwizard \
|
||||||
configdialog \
|
configdialog \
|
||||||
|
extension \
|
||||||
|
findfiles \
|
||||||
|
licensewizard \
|
||||||
standarddialogs \
|
standarddialogs \
|
||||||
tabdialog \
|
tabdialog \
|
||||||
trivialwizard
|
trivialwizard
|
||||||
|
|
||||||
!wince {
|
|
||||||
SUBDIRS += \
|
|
||||||
licensewizard \
|
|
||||||
extension \
|
|
||||||
findfiles
|
|
||||||
}
|
|
||||||
|
|
||||||
!qtHaveModule(printsupport): SUBDIRS -= licensewizard
|
!qtHaveModule(printsupport): SUBDIRS -= licensewizard
|
||||||
!qtConfig(wizard) {
|
!qtConfig(wizard) {
|
||||||
SUBDIRS -= trivialwizard licensewizard classwizard
|
SUBDIRS -= trivialwizard licensewizard classwizard
|
||||||
|
@ -7,5 +7,3 @@ SOURCES = dialog.cpp \
|
|||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/dialogs/standarddialogs
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/dialogs/standarddialogs
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
wince50standard-x86-msvc2005: LIBS += libcmt.lib corelibc.lib ole32.lib oleaut32.lib uuid.lib commctrl.lib coredll.lib winsock.lib ws2.lib
|
|
||||||
|
@ -7,5 +7,3 @@ SOURCES = main.cpp \
|
|||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/dialogs/tabdialog
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/dialogs/tabdialog
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
wince50standard-x86-msvc2005: LIBS += libcmt.lib corelibc.lib ole32.lib oleaut32.lib uuid.lib commctrl.lib coredll.lib winsock.lib ws2.lib
|
|
||||||
|
@ -10,10 +10,3 @@ EXAMPLE_FILES = frank.xbel jennifer.xbel
|
|||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/xml/dombookmarks
|
target.path = $$[QT_INSTALL_EXAMPLES]/xml/dombookmarks
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
wince {
|
|
||||||
addFiles.files = frank.xbel jennifer.xbel
|
|
||||||
addFiles.path = "\\My Documents"
|
|
||||||
INSTALLS += addFiles
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -6,12 +6,6 @@ RESOURCES = resources.qrc
|
|||||||
|
|
||||||
win32: CONFIG += console
|
win32: CONFIG += console
|
||||||
|
|
||||||
wince {
|
|
||||||
htmlfiles.files = *.html
|
|
||||||
htmlfiles.path = .
|
|
||||||
INSTALLS += htmlfiles
|
|
||||||
}
|
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/xml/htmlinfo
|
target.path = $$[QT_INSTALL_EXAMPLES]/xml/htmlinfo
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
@ -12,9 +12,3 @@ EXAMPLE_FILES = frank.xbel jennifer.xbel
|
|||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/xml/saxbookmarks
|
target.path = $$[QT_INSTALL_EXAMPLES]/xml/saxbookmarks
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
wince {
|
|
||||||
addFiles.files = frank.xbel jennifer.xbel
|
|
||||||
addFiles.path = "\\My Documents"
|
|
||||||
INSTALLS += addFiles
|
|
||||||
}
|
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
!macx-xcode {
|
!macx-xcode {
|
||||||
QMAKE_CC = @echo compiling $< && $$QMAKE_CC
|
msvc {
|
||||||
QMAKE_CXX = @echo compiling $< && $$QMAKE_CXX
|
QMAKE_CC = @$$QMAKE_CC
|
||||||
|
QMAKE_CXX = @$$QMAKE_CXX
|
||||||
|
} else {
|
||||||
|
QMAKE_CC = @echo compiling $< && $$QMAKE_CC
|
||||||
|
QMAKE_CXX = @echo compiling $< && $$QMAKE_CXX
|
||||||
|
}
|
||||||
!contains(QMAKE_LINK, "@:"):QMAKE_LINK = @echo linking $@ && $$QMAKE_LINK
|
!contains(QMAKE_LINK, "@:"):QMAKE_LINK = @echo linking $@ && $$QMAKE_LINK
|
||||||
QMAKE_LINK_SHLIB = @echo linking $@ && $$QMAKE_LINK_SHLIB
|
QMAKE_LINK_SHLIB = @echo linking $@ && $$QMAKE_LINK_SHLIB
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the documentation of the Qt Toolkit.
|
** This file is part of the documentation of the Qt Toolkit.
|
||||||
@ -1809,6 +1809,14 @@
|
|||||||
|
|
||||||
\note Most of the time, the default \c{Info.plist} is good enough.
|
\note Most of the time, the default \c{Info.plist} is good enough.
|
||||||
|
|
||||||
|
\section1 QMAKE_IOS_DEPLOYMENT_TARGET
|
||||||
|
|
||||||
|
\note This variable is used on the iOS platform only.
|
||||||
|
|
||||||
|
Specifies the hard minimum version of iOS that the application supports.
|
||||||
|
|
||||||
|
For more information, see \l {Expressing Supported iOS Versions}.
|
||||||
|
|
||||||
\section1 QMAKE_LFLAGS
|
\section1 QMAKE_LFLAGS
|
||||||
|
|
||||||
Specifies a general set of flags that are passed to
|
Specifies a general set of flags that are passed to
|
||||||
@ -2101,12 +2109,11 @@
|
|||||||
|
|
||||||
\section1 QMAKE_MACOSX_DEPLOYMENT_TARGET
|
\section1 QMAKE_MACOSX_DEPLOYMENT_TARGET
|
||||||
|
|
||||||
This variable only takes effect when building on \macos. On that
|
\note This variable is used on the \macos platform only.
|
||||||
platform, the variable will be forwarded to the MACOSX_DEPLOYMENT_TARGET
|
|
||||||
environment variable, which is interpreted by the compiler or linker.
|
Specifies the hard minimum version of \macos that the application supports.
|
||||||
For more information, see the
|
|
||||||
\l{Qt for macOS - Deployment#macOS Version Dependencies}{Deploying
|
For more information, see \l{macOS Version Dependencies}.
|
||||||
an Application on \macos} document.
|
|
||||||
|
|
||||||
\section1 QMAKE_MAKEFILE
|
\section1 QMAKE_MAKEFILE
|
||||||
|
|
||||||
@ -2251,6 +2258,22 @@
|
|||||||
This is only utilized if the \l{VERSION} or \l{RC_ICONS} variable is set
|
This is only utilized if the \l{VERSION} or \l{RC_ICONS} variable is set
|
||||||
and the \l{RC_FILE} and \l{RES_FILE} variables are not set.
|
and the \l{RC_FILE} and \l{RES_FILE} variables are not set.
|
||||||
|
|
||||||
|
\section1 QMAKE_TVOS_DEPLOYMENT_TARGET
|
||||||
|
|
||||||
|
\note This variable is used on the tvOS platform only.
|
||||||
|
|
||||||
|
Specifies the hard minimum version of tvOS that the application supports.
|
||||||
|
|
||||||
|
For more information, see \l {Expressing Supported iOS Versions}.
|
||||||
|
|
||||||
|
\section1 QMAKE_WATCHOS_DEPLOYMENT_TARGET
|
||||||
|
|
||||||
|
\note This variable is used on the watchOS platform only.
|
||||||
|
|
||||||
|
Specifies the hard minimum version of watchOS that the application supports.
|
||||||
|
|
||||||
|
For more information, see \l {Expressing Supported iOS Versions}.
|
||||||
|
|
||||||
\section1 QT
|
\section1 QT
|
||||||
|
|
||||||
Specifies the \l{All Modules}{Qt modules} that are used by your project. For
|
Specifies the \l{All Modules}{Qt modules} that are used by your project. For
|
||||||
|
@ -62,7 +62,7 @@ QUrl url = QUrl::fromEncoded("http://qt-project.org/List%20of%20holidays.xml");
|
|||||||
//! [2]
|
//! [2]
|
||||||
bool checkUrl(const QUrl &url) {
|
bool checkUrl(const QUrl &url) {
|
||||||
if (!url.isValid()) {
|
if (!url.isValid()) {
|
||||||
qDebug(QString("Invalid URL: %1").arg(url.toString()));
|
qDebug("Invalid URL: %s", qUtf8Printable(url.toString()));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3148,98 +3148,6 @@ Q_CORE_EXPORT Q_DECL_CONST_FUNCTION unsigned int qt_int_sqrt(unsigned int n)
|
|||||||
void *qMemCopy(void *dest, const void *src, size_t n) { return memcpy(dest, src, n); }
|
void *qMemCopy(void *dest, const void *src, size_t n) { return memcpy(dest, src, n); }
|
||||||
void *qMemSet(void *dest, int c, size_t n) { return memset(dest, c, n); }
|
void *qMemSet(void *dest, int c, size_t n) { return memset(dest, c, n); }
|
||||||
|
|
||||||
#if !defined(Q_OS_WIN) && !defined(QT_NO_THREAD) && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_QNX) && \
|
|
||||||
defined(_POSIX_THREAD_SAFE_FUNCTIONS) && _POSIX_VERSION >= 200112L
|
|
||||||
namespace {
|
|
||||||
// There are two incompatible versions of strerror_r:
|
|
||||||
// a) the XSI/POSIX.1 version, which returns an int,
|
|
||||||
// indicating success or not
|
|
||||||
// b) the GNU version, which returns a char*, which may or may not
|
|
||||||
// be the beginning of the buffer we used
|
|
||||||
// The GNU libc manpage for strerror_r says you should use the XSI
|
|
||||||
// version in portable code. However, it's impossible to do that if
|
|
||||||
// _GNU_SOURCE is defined so we use C++ overloading to decide what to do
|
|
||||||
// depending on the return type
|
|
||||||
static inline Q_DECL_UNUSED QString fromstrerror_helper(int, const QByteArray &buf)
|
|
||||||
{
|
|
||||||
return QString::fromLocal8Bit(buf.constData());
|
|
||||||
}
|
|
||||||
static inline Q_DECL_UNUSED QString fromstrerror_helper(const char *str, const QByteArray &)
|
|
||||||
{
|
|
||||||
return QString::fromLocal8Bit(str);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QString qt_error_string(int errorCode)
|
|
||||||
{
|
|
||||||
const char *s = 0;
|
|
||||||
QString ret;
|
|
||||||
if (errorCode == -1) {
|
|
||||||
#if defined(Q_OS_WIN)
|
|
||||||
errorCode = GetLastError();
|
|
||||||
#else
|
|
||||||
errorCode = errno;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
switch (errorCode) {
|
|
||||||
case 0:
|
|
||||||
break;
|
|
||||||
case EACCES:
|
|
||||||
s = QT_TRANSLATE_NOOP("QIODevice", "Permission denied");
|
|
||||||
break;
|
|
||||||
case EMFILE:
|
|
||||||
s = QT_TRANSLATE_NOOP("QIODevice", "Too many open files");
|
|
||||||
break;
|
|
||||||
case ENOENT:
|
|
||||||
s = QT_TRANSLATE_NOOP("QIODevice", "No such file or directory");
|
|
||||||
break;
|
|
||||||
case ENOSPC:
|
|
||||||
s = QT_TRANSLATE_NOOP("QIODevice", "No space left on device");
|
|
||||||
break;
|
|
||||||
default: {
|
|
||||||
#if defined(Q_OS_WIN)
|
|
||||||
// Retrieve the system error message for the last-error code.
|
|
||||||
# ifndef Q_OS_WINRT
|
|
||||||
wchar_t *string = 0;
|
|
||||||
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER,
|
|
||||||
NULL,
|
|
||||||
errorCode,
|
|
||||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
|
||||||
(LPWSTR)&string,
|
|
||||||
0,
|
|
||||||
NULL);
|
|
||||||
ret = QString::fromWCharArray(string);
|
|
||||||
LocalFree((HLOCAL)string);
|
|
||||||
# else // !Q_OS_WINRT
|
|
||||||
__declspec(thread) static wchar_t errorString[4096];
|
|
||||||
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
||||||
NULL,
|
|
||||||
errorCode,
|
|
||||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
|
||||||
errorString,
|
|
||||||
ARRAYSIZE(errorString),
|
|
||||||
NULL);
|
|
||||||
ret = QString::fromWCharArray(errorString);
|
|
||||||
# endif // Q_OS_WINRT
|
|
||||||
|
|
||||||
if (ret.isEmpty() && errorCode == ERROR_MOD_NOT_FOUND)
|
|
||||||
ret = QString::fromLatin1("The specified module could not be found.");
|
|
||||||
#elif !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && _POSIX_VERSION >= 200112L && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_QNX)
|
|
||||||
QByteArray buf(1024, '\0');
|
|
||||||
ret = fromstrerror_helper(strerror_r(errorCode, buf.data(), buf.size()), buf);
|
|
||||||
#else
|
|
||||||
ret = QString::fromLocal8Bit(strerror(errorCode));
|
|
||||||
#endif
|
|
||||||
break; }
|
|
||||||
}
|
|
||||||
if (s)
|
|
||||||
// ######## this breaks moc build currently
|
|
||||||
// ret = QCoreApplication::translate("QIODevice", s);
|
|
||||||
ret = QString::fromLatin1(s);
|
|
||||||
return ret.trimmed();
|
|
||||||
}
|
|
||||||
|
|
||||||
// In the C runtime on all platforms access to the environment is not thread-safe. We
|
// In the C runtime on all platforms access to the environment is not thread-safe. We
|
||||||
// add thread-safety for the Qt wrappers.
|
// add thread-safety for the Qt wrappers.
|
||||||
static QBasicMutex environmentMutex;
|
static QBasicMutex environmentMutex;
|
||||||
|
@ -267,6 +267,9 @@
|
|||||||
# if !defined(__MAC_10_12)
|
# if !defined(__MAC_10_12)
|
||||||
# define __MAC_10_12 101200
|
# define __MAC_10_12 101200
|
||||||
# endif
|
# endif
|
||||||
|
# if !defined(__MAC_10_13)
|
||||||
|
# define __MAC_10_13 101300
|
||||||
|
# endif
|
||||||
# if !defined(MAC_OS_X_VERSION_10_7)
|
# if !defined(MAC_OS_X_VERSION_10_7)
|
||||||
# define MAC_OS_X_VERSION_10_7 1070
|
# define MAC_OS_X_VERSION_10_7 1070
|
||||||
# endif
|
# endif
|
||||||
@ -285,6 +288,9 @@
|
|||||||
# if !defined(MAC_OS_X_VERSION_10_12)
|
# if !defined(MAC_OS_X_VERSION_10_12)
|
||||||
# define MAC_OS_X_VERSION_10_12 101200
|
# define MAC_OS_X_VERSION_10_12 101200
|
||||||
# endif
|
# endif
|
||||||
|
# if !defined(MAC_OS_X_VERSION_10_13)
|
||||||
|
# define MAC_OS_X_VERSION_10_13 101300
|
||||||
|
# endif
|
||||||
#
|
#
|
||||||
# if !defined(__IPHONE_4_3)
|
# if !defined(__IPHONE_4_3)
|
||||||
# define __IPHONE_4_3 40300
|
# define __IPHONE_4_3 40300
|
||||||
@ -337,6 +343,18 @@
|
|||||||
# if !defined(__IPHONE_10_0)
|
# if !defined(__IPHONE_10_0)
|
||||||
# define __IPHONE_10_0 100000
|
# define __IPHONE_10_0 100000
|
||||||
# endif
|
# endif
|
||||||
|
# if !defined(__IPHONE_10_1)
|
||||||
|
# define __IPHONE_10_1 100100
|
||||||
|
# endif
|
||||||
|
# if !defined(__IPHONE_10_2)
|
||||||
|
# define __IPHONE_10_2 100200
|
||||||
|
# endif
|
||||||
|
# if !defined(__IPHONE_10_3)
|
||||||
|
# define __IPHONE_10_3 100300
|
||||||
|
# endif
|
||||||
|
# if !defined(__IPHONE_11_0)
|
||||||
|
# define __IPHONE_11_0 110000
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __LSB_VERSION__
|
#ifdef __LSB_VERSION__
|
||||||
|
@ -677,6 +677,17 @@ bool QAbstractFileEngine::setPermissions(uint perms)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\since 5.9
|
||||||
|
|
||||||
|
Return an identifier that (hopefully) uniquely identifies this file in the
|
||||||
|
system. Returns an invalid QByteArray() if that cannot be calculated.
|
||||||
|
*/
|
||||||
|
QByteArray QAbstractFileEngine::id() const
|
||||||
|
{
|
||||||
|
return QByteArray();
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Return the file engine's current file name in the format
|
Return the file engine's current file name in the format
|
||||||
specified by \a file.
|
specified by \a file.
|
||||||
|
@ -141,6 +141,7 @@ public:
|
|||||||
virtual QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const;
|
virtual QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const;
|
||||||
virtual FileFlags fileFlags(FileFlags type=FileInfoAll) const;
|
virtual FileFlags fileFlags(FileFlags type=FileInfoAll) const;
|
||||||
virtual bool setPermissions(uint perms);
|
virtual bool setPermissions(uint perms);
|
||||||
|
virtual QByteArray id() const;
|
||||||
virtual QString fileName(FileName file=DefaultName) const;
|
virtual QString fileName(FileName file=DefaultName) const;
|
||||||
virtual uint ownerId(FileOwner) const;
|
virtual uint ownerId(FileOwner) const;
|
||||||
virtual QString owner(FileOwner) const;
|
virtual QString owner(FileOwner) const;
|
||||||
|
@ -571,7 +571,9 @@ QFile::rename(const QString &newName)
|
|||||||
// Note: this does not take file engines into account.
|
// Note: this does not take file engines into account.
|
||||||
QByteArray targetId = QFileSystemEngine::id(QFileSystemEntry(newName));
|
QByteArray targetId = QFileSystemEngine::id(QFileSystemEntry(newName));
|
||||||
if (!targetId.isNull()) {
|
if (!targetId.isNull()) {
|
||||||
QByteArray fileId = QFileSystemEngine::id(QFileSystemEntry(d->fileName));
|
QByteArray fileId = d->fileEngine ?
|
||||||
|
d->fileEngine->id() :
|
||||||
|
QFileSystemEngine::id(QFileSystemEntry(d->fileName));
|
||||||
if (fileId != targetId || d->fileName.compare(newName, Qt::CaseInsensitive)) {
|
if (fileId != targetId || d->fileName.compare(newName, Qt::CaseInsensitive)) {
|
||||||
// ### Race condition. If a file is moved in after this, it /will/ be
|
// ### Race condition. If a file is moved in after this, it /will/ be
|
||||||
// overwritten. On Unix, the proper solution is to use hardlinks:
|
// overwritten. On Unix, the proper solution is to use hardlinks:
|
||||||
|
@ -92,6 +92,7 @@ public:
|
|||||||
QFileSystemMetaData::MetaDataFlags what);
|
QFileSystemMetaData::MetaDataFlags what);
|
||||||
#if defined(Q_OS_UNIX)
|
#if defined(Q_OS_UNIX)
|
||||||
static bool fillMetaData(int fd, QFileSystemMetaData &data); // what = PosixStatFlags
|
static bool fillMetaData(int fd, QFileSystemMetaData &data); // what = PosixStatFlags
|
||||||
|
static QByteArray id(int fd);
|
||||||
static bool setPermissions(int fd, QFile::Permissions permissions, QSystemError &error,
|
static bool setPermissions(int fd, QFile::Permissions permissions, QSystemError &error,
|
||||||
QFileSystemMetaData *data = nullptr);
|
QFileSystemMetaData *data = nullptr);
|
||||||
#endif
|
#endif
|
||||||
@ -104,6 +105,7 @@ public:
|
|||||||
QFileSystemMetaData::MetaDataFlags what);
|
QFileSystemMetaData::MetaDataFlags what);
|
||||||
static bool fillPermissions(const QFileSystemEntry &entry, QFileSystemMetaData &data,
|
static bool fillPermissions(const QFileSystemEntry &entry, QFileSystemMetaData &data,
|
||||||
QFileSystemMetaData::MetaDataFlags what);
|
QFileSystemMetaData::MetaDataFlags what);
|
||||||
|
static QByteArray id(HANDLE fHandle);
|
||||||
static QString owner(const QFileSystemEntry &entry, QAbstractFileEngine::FileOwner own);
|
static QString owner(const QFileSystemEntry &entry, QAbstractFileEngine::FileOwner own);
|
||||||
static QString nativeAbsoluteFilePath(const QString &path);
|
static QString nativeAbsoluteFilePath(const QString &path);
|
||||||
#endif
|
#endif
|
||||||
|
@ -327,6 +327,20 @@ QByteArray QFileSystemEngine::id(const QFileSystemEntry &entry)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//static
|
||||||
|
QByteArray QFileSystemEngine::id(int id)
|
||||||
|
{
|
||||||
|
QT_STATBUF statResult;
|
||||||
|
if (QT_FSTAT(id, &statResult)) {
|
||||||
|
qErrnoWarning("fstat() failed for fd %d", id);
|
||||||
|
return QByteArray();
|
||||||
|
}
|
||||||
|
QByteArray result = QByteArray::number(quint64(statResult.st_dev), 16);
|
||||||
|
result += ':';
|
||||||
|
result += QByteArray::number(quint64(statResult.st_ino));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//static
|
//static
|
||||||
QString QFileSystemEngine::resolveUserName(uint userId)
|
QString QFileSystemEngine::resolveUserName(uint userId)
|
||||||
{
|
{
|
||||||
|
@ -561,19 +561,21 @@ typedef struct _FILE_ID_INFO {
|
|||||||
// File ID for Windows up to version 7.
|
// File ID for Windows up to version 7.
|
||||||
static inline QByteArray fileId(HANDLE handle)
|
static inline QByteArray fileId(HANDLE handle)
|
||||||
{
|
{
|
||||||
QByteArray result;
|
|
||||||
#ifndef Q_OS_WINRT
|
#ifndef Q_OS_WINRT
|
||||||
BY_HANDLE_FILE_INFORMATION info;
|
BY_HANDLE_FILE_INFORMATION info;
|
||||||
if (GetFileInformationByHandle(handle, &info)) {
|
if (GetFileInformationByHandle(handle, &info)) {
|
||||||
result = QByteArray::number(uint(info.nFileIndexLow), 16);
|
char buffer[sizeof "01234567:0123456701234567"];
|
||||||
result += ':';
|
qsnprintf(buffer, sizeof(buffer), "%lx:%08lx%08lx",
|
||||||
result += QByteArray::number(uint(info.nFileIndexHigh), 16);
|
info.dwVolumeSerialNumber,
|
||||||
|
info.nFileIndexHigh,
|
||||||
|
info.nFileIndexLow);
|
||||||
|
return buffer;
|
||||||
}
|
}
|
||||||
#else // !Q_OS_WINRT
|
#else // !Q_OS_WINRT
|
||||||
Q_UNUSED(handle);
|
Q_UNUSED(handle);
|
||||||
Q_UNIMPLEMENTED();
|
Q_UNIMPLEMENTED();
|
||||||
#endif // Q_OS_WINRT
|
#endif // Q_OS_WINRT
|
||||||
return result;
|
return QByteArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
// File ID for Windows starting from version 8.
|
// File ID for Windows starting from version 8.
|
||||||
@ -609,13 +611,19 @@ QByteArray QFileSystemEngine::id(const QFileSystemEntry &entry)
|
|||||||
FILE_SHARE_READ, OPEN_EXISTING, NULL);
|
FILE_SHARE_READ, OPEN_EXISTING, NULL);
|
||||||
#endif // Q_OS_WINRT
|
#endif // Q_OS_WINRT
|
||||||
if (handle != INVALID_HANDLE_VALUE) {
|
if (handle != INVALID_HANDLE_VALUE) {
|
||||||
result = QOperatingSystemVersion::current() >= QOperatingSystemVersion::Windows8 ?
|
result = id(handle);
|
||||||
fileIdWin8(handle) : fileId(handle);
|
|
||||||
CloseHandle(handle);
|
CloseHandle(handle);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//static
|
||||||
|
QByteArray QFileSystemEngine::id(HANDLE fHandle)
|
||||||
|
{
|
||||||
|
return QOperatingSystemVersion::current() >= QOperatingSystemVersion::Windows8 ?
|
||||||
|
fileIdWin8(HANDLE(fHandle)) : fileId(HANDLE(fHandle));
|
||||||
|
}
|
||||||
|
|
||||||
//static
|
//static
|
||||||
QString QFileSystemEngine::owner(const QFileSystemEntry &entry, QAbstractFileEngine::FileOwner own)
|
QString QFileSystemEngine::owner(const QFileSystemEntry &entry, QAbstractFileEngine::FileOwner own)
|
||||||
{
|
{
|
||||||
|
@ -277,7 +277,7 @@ bool QFSFileEnginePrivate::openFh(QIODevice::OpenMode openMode, FILE *fh)
|
|||||||
|
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
q->setError(errno == EMFILE ? QFile::ResourceError : QFile::OpenError,
|
q->setError(errno == EMFILE ? QFile::ResourceError : QFile::OpenError,
|
||||||
qt_error_string(int(errno)));
|
QSystemError::stdString());
|
||||||
|
|
||||||
this->openMode = QIODevice::NotOpen;
|
this->openMode = QIODevice::NotOpen;
|
||||||
this->fh = 0;
|
this->fh = 0;
|
||||||
@ -341,7 +341,7 @@ bool QFSFileEnginePrivate::openFd(QIODevice::OpenMode openMode, int fd)
|
|||||||
|
|
||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
q->setError(errno == EMFILE ? QFile::ResourceError : QFile::OpenError,
|
q->setError(errno == EMFILE ? QFile::ResourceError : QFile::OpenError,
|
||||||
qt_error_string(int(errno)));
|
QSystemError::stdString());
|
||||||
|
|
||||||
this->openMode = QIODevice::NotOpen;
|
this->openMode = QIODevice::NotOpen;
|
||||||
this->fd = -1;
|
this->fd = -1;
|
||||||
@ -400,7 +400,7 @@ bool QFSFileEnginePrivate::closeFdFh()
|
|||||||
if (!flushed || !closed) {
|
if (!flushed || !closed) {
|
||||||
if (flushed) {
|
if (flushed) {
|
||||||
// If not flushed, we want the flush error to fall through.
|
// If not flushed, we want the flush error to fall through.
|
||||||
q->setError(QFile::UnspecifiedError, qt_error_string(errno));
|
q->setError(QFile::UnspecifiedError, QSystemError::stdString());
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -452,7 +452,7 @@ bool QFSFileEnginePrivate::flushFh()
|
|||||||
|
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
q->setError(errno == ENOSPC ? QFile::ResourceError : QFile::WriteError,
|
q->setError(errno == ENOSPC ? QFile::ResourceError : QFile::WriteError,
|
||||||
qt_error_string(errno));
|
QSystemError::stdString());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -567,14 +567,14 @@ bool QFSFileEnginePrivate::seekFdFh(qint64 pos)
|
|||||||
} while (ret != 0 && errno == EINTR);
|
} while (ret != 0 && errno == EINTR);
|
||||||
|
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
q->setError(QFile::ReadError, qt_error_string(int(errno)));
|
q->setError(QFile::ReadError, QSystemError::stdString());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Unbuffered stdio mode.
|
// Unbuffered stdio mode.
|
||||||
if (QT_LSEEK(fd, QT_OFF_T(pos), SEEK_SET) == -1) {
|
if (QT_LSEEK(fd, QT_OFF_T(pos), SEEK_SET) == -1) {
|
||||||
qWarning("QFile::at: Cannot set file position %lld", pos);
|
qWarning("QFile::at: Cannot set file position %lld", pos);
|
||||||
q->setError(QFile::PositionError, qt_error_string(errno));
|
q->setError(QFile::PositionError, QSystemError::stdString());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -616,7 +616,7 @@ qint64 QFSFileEnginePrivate::readFdFh(char *data, qint64 len)
|
|||||||
Q_Q(QFSFileEngine);
|
Q_Q(QFSFileEngine);
|
||||||
|
|
||||||
if (len < 0 || len != qint64(size_t(len))) {
|
if (len < 0 || len != qint64(size_t(len))) {
|
||||||
q->setError(QFile::ReadError, qt_error_string(EINVAL));
|
q->setError(QFile::ReadError, QSystemError::stdString(EINVAL));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -662,7 +662,7 @@ qint64 QFSFileEnginePrivate::readFdFh(char *data, qint64 len)
|
|||||||
|
|
||||||
if (!eof && readBytes == 0) {
|
if (!eof && readBytes == 0) {
|
||||||
readBytes = -1;
|
readBytes = -1;
|
||||||
q->setError(QFile::ReadError, qt_error_string(errno));
|
q->setError(QFile::ReadError, QSystemError::stdString());
|
||||||
}
|
}
|
||||||
|
|
||||||
return readBytes;
|
return readBytes;
|
||||||
@ -708,7 +708,7 @@ qint64 QFSFileEnginePrivate::readLineFdFh(char *data, qint64 maxlen)
|
|||||||
// solves this.
|
// solves this.
|
||||||
if (!fgets(data, int(maxlen + 1), fh)) {
|
if (!fgets(data, int(maxlen + 1), fh)) {
|
||||||
if (!feof(fh))
|
if (!feof(fh))
|
||||||
q->setError(QFile::ReadError, qt_error_string(int(errno)));
|
q->setError(QFile::ReadError, QSystemError::stdString());
|
||||||
return -1; // error
|
return -1; // error
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -748,7 +748,7 @@ qint64 QFSFileEnginePrivate::writeFdFh(const char *data, qint64 len)
|
|||||||
Q_Q(QFSFileEngine);
|
Q_Q(QFSFileEngine);
|
||||||
|
|
||||||
if (len < 0 || len != qint64(size_t(len))) {
|
if (len < 0 || len != qint64(size_t(len))) {
|
||||||
q->setError(QFile::WriteError, qt_error_string(EINVAL));
|
q->setError(QFile::WriteError, QSystemError::stdString(EINVAL));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -785,7 +785,7 @@ qint64 QFSFileEnginePrivate::writeFdFh(const char *data, qint64 len)
|
|||||||
|
|
||||||
if (len && writtenBytes == 0) {
|
if (len && writtenBytes == 0) {
|
||||||
writtenBytes = -1;
|
writtenBytes = -1;
|
||||||
q->setError(errno == ENOSPC ? QFile::ResourceError : QFile::WriteError, qt_error_string(errno));
|
q->setError(errno == ENOSPC ? QFile::ResourceError : QFile::WriteError, QSystemError::stdString());
|
||||||
} else {
|
} else {
|
||||||
// reset the cached size, if any
|
// reset the cached size, if any
|
||||||
metaData.clearFlags(QFileSystemMetaData::SizeAttribute);
|
metaData.clearFlags(QFileSystemMetaData::SizeAttribute);
|
||||||
|
@ -93,6 +93,7 @@ public:
|
|||||||
QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const Q_DECL_OVERRIDE;
|
QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const Q_DECL_OVERRIDE;
|
||||||
FileFlags fileFlags(FileFlags type) const Q_DECL_OVERRIDE;
|
FileFlags fileFlags(FileFlags type) const Q_DECL_OVERRIDE;
|
||||||
bool setPermissions(uint perms) Q_DECL_OVERRIDE;
|
bool setPermissions(uint perms) Q_DECL_OVERRIDE;
|
||||||
|
QByteArray id() const override;
|
||||||
QString fileName(FileName file) const Q_DECL_OVERRIDE;
|
QString fileName(FileName file) const Q_DECL_OVERRIDE;
|
||||||
uint ownerId(FileOwner) const Q_DECL_OVERRIDE;
|
uint ownerId(FileOwner) const Q_DECL_OVERRIDE;
|
||||||
QString owner(FileOwner) const Q_DECL_OVERRIDE;
|
QString owner(FileOwner) const Q_DECL_OVERRIDE;
|
||||||
|
@ -542,6 +542,14 @@ QAbstractFileEngine::FileFlags QFSFileEngine::fileFlags(FileFlags type) const
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QByteArray QFSFileEngine::id() const
|
||||||
|
{
|
||||||
|
Q_D(const QFSFileEngine);
|
||||||
|
if (d->fd != -1)
|
||||||
|
return QFileSystemEngine::id(d->fd);
|
||||||
|
return QFileSystemEngine::id(d->fileEntry);
|
||||||
|
}
|
||||||
|
|
||||||
QString QFSFileEngine::fileName(FileName file) const
|
QString QFSFileEngine::fileName(FileName file) const
|
||||||
{
|
{
|
||||||
Q_D(const QFSFileEngine);
|
Q_D(const QFSFileEngine);
|
||||||
|
@ -285,7 +285,7 @@ qint64 QFSFileEnginePrivate::nativeSize() const
|
|||||||
filled = doStat(QFileSystemMetaData::SizeAttribute);
|
filled = doStat(QFileSystemMetaData::SizeAttribute);
|
||||||
|
|
||||||
if (!filled) {
|
if (!filled) {
|
||||||
thatQ->setError(QFile::UnspecifiedError, qt_error_string(errno));
|
thatQ->setError(QFile::UnspecifiedError, QSystemError::stdString());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return metaData.size();
|
return metaData.size();
|
||||||
@ -352,7 +352,7 @@ qint64 QFSFileEnginePrivate::nativeRead(char *data, qint64 maxlen)
|
|||||||
if (fh || fd != -1) {
|
if (fh || fd != -1) {
|
||||||
// stdio / stdlib mode.
|
// stdio / stdlib mode.
|
||||||
if (fh && nativeIsSequential() && feof(fh)) {
|
if (fh && nativeIsSequential() && feof(fh)) {
|
||||||
q->setError(QFile::ReadError, qt_error_string(int(errno)));
|
q->setError(QFile::ReadError, QSystemError::stdString());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -751,6 +751,24 @@ QAbstractFileEngine::FileFlags QFSFileEngine::fileFlags(QAbstractFileEngine::Fil
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QByteArray QFSFileEngine::id() const
|
||||||
|
{
|
||||||
|
Q_D(const QFSFileEngine);
|
||||||
|
HANDLE h = d->fileHandle;
|
||||||
|
if (h == INVALID_HANDLE_VALUE) {
|
||||||
|
int localFd = d->fd;
|
||||||
|
if (d->fh && d->fileEntry.isEmpty())
|
||||||
|
localFd = QT_FILENO(d->fh);
|
||||||
|
if (localFd != -1)
|
||||||
|
h = HANDLE(_get_osfhandle(localFd));
|
||||||
|
}
|
||||||
|
if (h != INVALID_HANDLE_VALUE)
|
||||||
|
return QFileSystemEngine::id(h);
|
||||||
|
|
||||||
|
// file is not open, try by path
|
||||||
|
return QFileSystemEngine::id(d->fileEntry);
|
||||||
|
}
|
||||||
|
|
||||||
QString QFSFileEngine::fileName(FileName file) const
|
QString QFSFileEngine::fileName(FileName file) const
|
||||||
{
|
{
|
||||||
Q_D(const QFSFileEngine);
|
Q_D(const QFSFileEngine);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtCore module of the Qt Toolkit.
|
** This file is part of the QtCore module of the Qt Toolkit.
|
||||||
@ -334,12 +334,11 @@ bool QLoggingCategory::isEnabled(QtMsgType msgtype) const
|
|||||||
/*!
|
/*!
|
||||||
Changes the message type \a type for the category to \a enable.
|
Changes the message type \a type for the category to \a enable.
|
||||||
|
|
||||||
\note Changes only affect the current QLoggingCategory object, and won't
|
This method is meant to be used only from inside a filter
|
||||||
change the settings of other objects for the same category name.
|
installed by \l installFilter(). See \l {Configuring Categories} for
|
||||||
Use either \l setFilterRules() or \l installFilter() to change the
|
an overview on how to configure categories globally.
|
||||||
configuration globally.
|
|
||||||
|
|
||||||
\note \c QtFatalMsg cannot be changed. It will always return \c true.
|
\note \c QtFatalMsg cannot be changed. It will always remain \c true.
|
||||||
*/
|
*/
|
||||||
void QLoggingCategory::setEnabled(QtMsgType type, bool enable)
|
void QLoggingCategory::setEnabled(QtMsgType type, bool enable)
|
||||||
{
|
{
|
||||||
@ -411,8 +410,8 @@ QLoggingCategory *QLoggingCategory::defaultCategory()
|
|||||||
filter is free to change the respective category configuration with
|
filter is free to change the respective category configuration with
|
||||||
\l setEnabled().
|
\l setEnabled().
|
||||||
|
|
||||||
The filter might be called concurrently from different threads, and
|
The filter might be called from different threads, but never concurrently.
|
||||||
therefore has to be reentrant.
|
The filter shall not call any static functions of QLoggingCategory.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
\snippet qloggingcategory/main.cpp 21
|
\snippet qloggingcategory/main.cpp 21
|
||||||
|
@ -53,6 +53,7 @@
|
|||||||
#include <qshareddata.h>
|
#include <qshareddata.h>
|
||||||
#include <qplatformdefs.h>
|
#include <qplatformdefs.h>
|
||||||
#include "private/qabstractfileengine_p.h"
|
#include "private/qabstractfileengine_p.h"
|
||||||
|
#include "private/qsystemerror_p.h"
|
||||||
|
|
||||||
#ifdef Q_OS_UNIX
|
#ifdef Q_OS_UNIX
|
||||||
# include "private/qcore_unix_p.h"
|
# include "private/qcore_unix_p.h"
|
||||||
@ -1282,7 +1283,7 @@ bool QResourceFileEngine::open(QIODevice::OpenMode flags)
|
|||||||
return false;
|
return false;
|
||||||
d->uncompress();
|
d->uncompress();
|
||||||
if (!d->resource.isValid()) {
|
if (!d->resource.isValid()) {
|
||||||
d->errorString = qt_error_string(ENOENT);
|
d->errorString = QSystemError::stdString(ENOENT);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -57,7 +57,7 @@ void QWindowsPipeReader::Overlapped::clear()
|
|||||||
QWindowsPipeReader::QWindowsPipeReader(QObject *parent)
|
QWindowsPipeReader::QWindowsPipeReader(QObject *parent)
|
||||||
: QObject(parent),
|
: QObject(parent),
|
||||||
handle(INVALID_HANDLE_VALUE),
|
handle(INVALID_HANDLE_VALUE),
|
||||||
overlapped(this),
|
overlapped(nullptr),
|
||||||
readBufferMaxSize(0),
|
readBufferMaxSize(0),
|
||||||
actualReadBufferSize(0),
|
actualReadBufferSize(0),
|
||||||
stopped(true),
|
stopped(true),
|
||||||
@ -74,6 +74,7 @@ QWindowsPipeReader::QWindowsPipeReader(QObject *parent)
|
|||||||
QWindowsPipeReader::~QWindowsPipeReader()
|
QWindowsPipeReader::~QWindowsPipeReader()
|
||||||
{
|
{
|
||||||
stop();
|
stop();
|
||||||
|
delete overlapped;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -95,14 +96,16 @@ void QWindowsPipeReader::stop()
|
|||||||
{
|
{
|
||||||
stopped = true;
|
stopped = true;
|
||||||
if (readSequenceStarted) {
|
if (readSequenceStarted) {
|
||||||
if (!CancelIoEx(handle, &overlapped)) {
|
overlapped->pipeReader = nullptr;
|
||||||
|
if (!CancelIoEx(handle, overlapped)) {
|
||||||
const DWORD dwError = GetLastError();
|
const DWORD dwError = GetLastError();
|
||||||
if (dwError != ERROR_NOT_FOUND) {
|
if (dwError != ERROR_NOT_FOUND) {
|
||||||
qErrnoWarning(dwError, "QWindowsPipeReader: qt_cancelIo on handle %x failed.",
|
qErrnoWarning(dwError, "QWindowsPipeReader: CancelIoEx on handle %p failed.",
|
||||||
handle);
|
handle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
waitForNotification(-1);
|
overlapped = nullptr; // The object will be deleted in the I/O callback.
|
||||||
|
readSequenceStarted = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -223,8 +226,10 @@ void QWindowsPipeReader::startAsyncRead()
|
|||||||
|
|
||||||
stopped = false;
|
stopped = false;
|
||||||
readSequenceStarted = true;
|
readSequenceStarted = true;
|
||||||
overlapped.clear();
|
if (!overlapped)
|
||||||
if (!ReadFileEx(handle, ptr, bytesToRead, &overlapped, &readFileCompleted)) {
|
overlapped = new Overlapped(this);
|
||||||
|
overlapped->clear();
|
||||||
|
if (!ReadFileEx(handle, ptr, bytesToRead, overlapped, &readFileCompleted)) {
|
||||||
readSequenceStarted = false;
|
readSequenceStarted = false;
|
||||||
|
|
||||||
const DWORD dwError = GetLastError();
|
const DWORD dwError = GetLastError();
|
||||||
@ -251,7 +256,10 @@ void QWindowsPipeReader::readFileCompleted(DWORD errorCode, DWORD numberOfBytesT
|
|||||||
OVERLAPPED *overlappedBase)
|
OVERLAPPED *overlappedBase)
|
||||||
{
|
{
|
||||||
Overlapped *overlapped = static_cast<Overlapped *>(overlappedBase);
|
Overlapped *overlapped = static_cast<Overlapped *>(overlappedBase);
|
||||||
overlapped->pipeReader->notified(errorCode, numberOfBytesTransfered);
|
if (overlapped->pipeReader)
|
||||||
|
overlapped->pipeReader->notified(errorCode, numberOfBytesTransfered);
|
||||||
|
else
|
||||||
|
delete overlapped;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -105,7 +105,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
HANDLE handle;
|
HANDLE handle;
|
||||||
Overlapped overlapped;
|
Overlapped *overlapped;
|
||||||
qint64 readBufferMaxSize;
|
qint64 readBufferMaxSize;
|
||||||
QRingBuffer readBuffer;
|
QRingBuffer readBuffer;
|
||||||
qint64 actualReadBufferSize;
|
qint64 actualReadBufferSize;
|
||||||
|
@ -56,7 +56,7 @@ void QWindowsPipeWriter::Overlapped::clear()
|
|||||||
QWindowsPipeWriter::QWindowsPipeWriter(HANDLE pipeWriteEnd, QObject *parent)
|
QWindowsPipeWriter::QWindowsPipeWriter(HANDLE pipeWriteEnd, QObject *parent)
|
||||||
: QObject(parent),
|
: QObject(parent),
|
||||||
handle(pipeWriteEnd),
|
handle(pipeWriteEnd),
|
||||||
overlapped(this),
|
overlapped(nullptr),
|
||||||
pendingBytesWrittenValue(0),
|
pendingBytesWrittenValue(0),
|
||||||
stopped(true),
|
stopped(true),
|
||||||
writeSequenceStarted(false),
|
writeSequenceStarted(false),
|
||||||
@ -71,6 +71,7 @@ QWindowsPipeWriter::QWindowsPipeWriter(HANDLE pipeWriteEnd, QObject *parent)
|
|||||||
QWindowsPipeWriter::~QWindowsPipeWriter()
|
QWindowsPipeWriter::~QWindowsPipeWriter()
|
||||||
{
|
{
|
||||||
stop();
|
stop();
|
||||||
|
delete overlapped;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QWindowsPipeWriter::waitForWrite(int msecs)
|
bool QWindowsPipeWriter::waitForWrite(int msecs)
|
||||||
@ -121,7 +122,10 @@ void QWindowsPipeWriter::writeFileCompleted(DWORD errorCode, DWORD numberOfBytes
|
|||||||
OVERLAPPED *overlappedBase)
|
OVERLAPPED *overlappedBase)
|
||||||
{
|
{
|
||||||
Overlapped *overlapped = static_cast<Overlapped *>(overlappedBase);
|
Overlapped *overlapped = static_cast<Overlapped *>(overlappedBase);
|
||||||
overlapped->pipeWriter->notified(errorCode, numberOfBytesTransfered);
|
if (overlapped->pipeWriter)
|
||||||
|
overlapped->pipeWriter->notified(errorCode, numberOfBytesTransfered);
|
||||||
|
else
|
||||||
|
delete overlapped;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -183,12 +187,14 @@ bool QWindowsPipeWriter::write(const QByteArray &ba)
|
|||||||
if (writeSequenceStarted)
|
if (writeSequenceStarted)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
overlapped.clear();
|
if (!overlapped)
|
||||||
|
overlapped = new Overlapped(this);
|
||||||
|
overlapped->clear();
|
||||||
buffer = ba;
|
buffer = ba;
|
||||||
stopped = false;
|
stopped = false;
|
||||||
writeSequenceStarted = true;
|
writeSequenceStarted = true;
|
||||||
if (!WriteFileEx(handle, buffer.constData(), buffer.size(),
|
if (!WriteFileEx(handle, buffer.constData(), buffer.size(),
|
||||||
&overlapped, &writeFileCompleted)) {
|
overlapped, &writeFileCompleted)) {
|
||||||
writeSequenceStarted = false;
|
writeSequenceStarted = false;
|
||||||
buffer.clear();
|
buffer.clear();
|
||||||
qErrnoWarning("QWindowsPipeWriter::write failed.");
|
qErrnoWarning("QWindowsPipeWriter::write failed.");
|
||||||
@ -204,14 +210,16 @@ void QWindowsPipeWriter::stop()
|
|||||||
bytesWrittenPending = false;
|
bytesWrittenPending = false;
|
||||||
pendingBytesWrittenValue = 0;
|
pendingBytesWrittenValue = 0;
|
||||||
if (writeSequenceStarted) {
|
if (writeSequenceStarted) {
|
||||||
if (!CancelIoEx(handle, &overlapped)) {
|
overlapped->pipeWriter = nullptr;
|
||||||
|
if (!CancelIoEx(handle, overlapped)) {
|
||||||
const DWORD dwError = GetLastError();
|
const DWORD dwError = GetLastError();
|
||||||
if (dwError != ERROR_NOT_FOUND) {
|
if (dwError != ERROR_NOT_FOUND) {
|
||||||
qErrnoWarning(dwError, "QWindowsPipeWriter: qt_cancelIo on handle %x failed.",
|
qErrnoWarning(dwError, "QWindowsPipeWriter: CancelIoEx on handle %p failed.",
|
||||||
handle);
|
handle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
waitForNotification(-1);
|
overlapped = nullptr; // The object will be deleted in the I/O callback.
|
||||||
|
writeSequenceStarted = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
HANDLE handle;
|
HANDLE handle;
|
||||||
Overlapped overlapped;
|
Overlapped *overlapped;
|
||||||
QByteArray buffer;
|
QByteArray buffer;
|
||||||
qint64 pendingBytesWrittenValue;
|
qint64 pendingBytesWrittenValue;
|
||||||
bool stopped;
|
bool stopped;
|
||||||
|
@ -101,6 +101,11 @@ static QString windowsErrorString(int errorCode)
|
|||||||
|
|
||||||
if (ret.isEmpty() && errorCode == ERROR_MOD_NOT_FOUND)
|
if (ret.isEmpty() && errorCode == ERROR_MOD_NOT_FOUND)
|
||||||
ret = QString::fromLatin1("The specified module could not be found.");
|
ret = QString::fromLatin1("The specified module could not be found.");
|
||||||
|
if (ret.endsWith(QLatin1String("\r\n")))
|
||||||
|
ret.chop(2);
|
||||||
|
if (ret.isEmpty())
|
||||||
|
ret = QString::fromLatin1("Unknown error 0x%1.")
|
||||||
|
.arg(unsigned(errorCode), 8, 16, QLatin1Char('0'));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -126,7 +131,7 @@ static QString standardLibraryErrorString(int errorCode)
|
|||||||
break;
|
break;
|
||||||
default: {
|
default: {
|
||||||
#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && _POSIX_VERSION >= 200112L && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_QNX)
|
#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && _POSIX_VERSION >= 200112L && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_QNX)
|
||||||
QByteArray buf(1024, '\0');
|
QByteArray buf(1024, Qt::Uninitialized);
|
||||||
ret = fromstrerror_helper(strerror_r(errorCode, buf.data(), buf.size()), buf);
|
ret = fromstrerror_helper(strerror_r(errorCode, buf.data(), buf.size()), buf);
|
||||||
#else
|
#else
|
||||||
ret = QString::fromLocal8Bit(strerror(errorCode));
|
ret = QString::fromLocal8Bit(strerror(errorCode));
|
||||||
@ -141,7 +146,7 @@ static QString standardLibraryErrorString(int errorCode)
|
|||||||
return ret.trimmed();
|
return ret.trimmed();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QSystemError::toString() const
|
QString QSystemError::string(ErrorScope errorScope, int errorCode)
|
||||||
{
|
{
|
||||||
switch(errorScope) {
|
switch(errorScope) {
|
||||||
case NativeError:
|
case NativeError:
|
||||||
@ -161,5 +166,26 @@ QString QSystemError::toString() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QString QSystemError::stdString(int errorCode)
|
||||||
|
{
|
||||||
|
return standardLibraryErrorString(errorCode == -1 ? errno : errorCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
QString QSystemError::windowsString(int errorCode)
|
||||||
|
{
|
||||||
|
return windowsErrorString(errorCode == -1 ? GetLastError() : errorCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString qt_error_string(int code)
|
||||||
|
{
|
||||||
|
return windowsErrorString(code == -1 ? GetLastError() : code);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
QString qt_error_string(int code)
|
||||||
|
{
|
||||||
|
return standardLibraryErrorString(code == -1 ? errno : code);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
@ -69,10 +69,16 @@ public:
|
|||||||
inline QSystemError(int error, ErrorScope scope);
|
inline QSystemError(int error, ErrorScope scope);
|
||||||
inline QSystemError();
|
inline QSystemError();
|
||||||
|
|
||||||
QString toString() const;
|
inline QString toString() const;
|
||||||
inline ErrorScope scope() const;
|
inline ErrorScope scope() const;
|
||||||
inline int error() const;
|
inline int error() const;
|
||||||
|
|
||||||
|
static QString string(ErrorScope errorScope, int errorCode);
|
||||||
|
static QString stdString(int errorCode = -1);
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
static QString windowsString(int errorCode = -1);
|
||||||
|
#endif
|
||||||
|
|
||||||
//data members
|
//data members
|
||||||
int errorCode;
|
int errorCode;
|
||||||
ErrorScope errorScope;
|
ErrorScope errorScope;
|
||||||
@ -90,6 +96,11 @@ QSystemError::QSystemError()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString QSystemError::toString() const
|
||||||
|
{
|
||||||
|
return string(errorScope, errorCode);
|
||||||
|
}
|
||||||
|
|
||||||
QSystemError::ErrorScope QSystemError::scope() const
|
QSystemError::ErrorScope QSystemError::scope() const
|
||||||
{
|
{
|
||||||
return errorScope;
|
return errorScope;
|
||||||
@ -100,7 +111,6 @@ int QSystemError::error() const
|
|||||||
return errorCode;
|
return errorCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // QSYSTEMERROR_P_H
|
#endif // QSYSTEMERROR_P_H
|
||||||
|
@ -48,6 +48,7 @@
|
|||||||
#include <qmutex.h>
|
#include <qmutex.h>
|
||||||
#include <qmap.h>
|
#include <qmap.h>
|
||||||
#include <private/qcoreapplication_p.h>
|
#include <private/qcoreapplication_p.h>
|
||||||
|
#include <private/qsystemerror_p.h>
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
# include <private/qcore_mac_p.h>
|
# include <private/qcore_mac_p.h>
|
||||||
#endif
|
#endif
|
||||||
@ -237,7 +238,7 @@ static bool findPatternUnloaded(const QString &library, QLibraryPrivate *lib)
|
|||||||
lib->errorString = file.errorString();
|
lib->errorString = file.errorString();
|
||||||
if (qt_debug_component()) {
|
if (qt_debug_component()) {
|
||||||
qWarning("%s: %s", (const char*) QFile::encodeName(library),
|
qWarning("%s: %s", (const char*) QFile::encodeName(library),
|
||||||
qPrintable(qt_error_string(errno)));
|
qPrintable(QSystemError::stdString()));
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -373,7 +373,7 @@ public:
|
|||||||
typedef const T *pointer;
|
typedef const T *pointer;
|
||||||
typedef const T &reference;
|
typedef const T &reference;
|
||||||
|
|
||||||
inline const_iterator() : i(Q_NULLPTR) { }
|
Q_DECL_CONSTEXPR inline const_iterator() : i(Q_NULLPTR) { }
|
||||||
explicit inline const_iterator(void *node)
|
explicit inline const_iterator(void *node)
|
||||||
: i(reinterpret_cast<QHashData::Node *>(node)) { }
|
: i(reinterpret_cast<QHashData::Node *>(node)) { }
|
||||||
#ifdef QT_STRICT_ITERATORS
|
#ifdef QT_STRICT_ITERATORS
|
||||||
@ -387,8 +387,8 @@ public:
|
|||||||
inline const T &value() const { return concrete(i)->value; }
|
inline const T &value() const { return concrete(i)->value; }
|
||||||
inline const T &operator*() const { return concrete(i)->value; }
|
inline const T &operator*() const { return concrete(i)->value; }
|
||||||
inline const T *operator->() const { return &concrete(i)->value; }
|
inline const T *operator->() const { return &concrete(i)->value; }
|
||||||
inline bool operator==(const const_iterator &o) const { return i == o.i; }
|
Q_DECL_CONSTEXPR inline bool operator==(const const_iterator &o) const { return i == o.i; }
|
||||||
inline bool operator!=(const const_iterator &o) const { return i != o.i; }
|
Q_DECL_CONSTEXPR inline bool operator!=(const const_iterator &o) const { return i != o.i; }
|
||||||
|
|
||||||
inline const_iterator &operator++() {
|
inline const_iterator &operator++() {
|
||||||
i = QHashData::nextNode(i);
|
i = QHashData::nextNode(i);
|
||||||
|
@ -473,7 +473,7 @@ public:
|
|||||||
typedef const T *pointer;
|
typedef const T *pointer;
|
||||||
typedef const T &reference;
|
typedef const T &reference;
|
||||||
|
|
||||||
inline const_iterator() : i(Q_NULLPTR) { }
|
Q_DECL_CONSTEXPR inline const_iterator() : i(Q_NULLPTR) { }
|
||||||
inline const_iterator(const Node *node) : i(node) { }
|
inline const_iterator(const Node *node) : i(node) { }
|
||||||
#ifdef QT_STRICT_ITERATORS
|
#ifdef QT_STRICT_ITERATORS
|
||||||
explicit inline const_iterator(const iterator &o)
|
explicit inline const_iterator(const iterator &o)
|
||||||
@ -486,8 +486,8 @@ public:
|
|||||||
inline const T &value() const { return i->value; }
|
inline const T &value() const { return i->value; }
|
||||||
inline const T &operator*() const { return i->value; }
|
inline const T &operator*() const { return i->value; }
|
||||||
inline const T *operator->() const { return &i->value; }
|
inline const T *operator->() const { return &i->value; }
|
||||||
inline bool operator==(const const_iterator &o) const { return i == o.i; }
|
Q_DECL_CONSTEXPR inline bool operator==(const const_iterator &o) const { return i == o.i; }
|
||||||
inline bool operator!=(const const_iterator &o) const { return i != o.i; }
|
Q_DECL_CONSTEXPR inline bool operator!=(const const_iterator &o) const { return i != o.i; }
|
||||||
|
|
||||||
inline const_iterator &operator++() {
|
inline const_iterator &operator++() {
|
||||||
i = i->nextNode();
|
i = i->nextNode();
|
||||||
|
@ -45,6 +45,8 @@
|
|||||||
#include <QtCore/qvector.h>
|
#include <QtCore/qvector.h>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
|
#include <locale>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
typedef QMap<QByteArray, QByteArray> OidNameMap;
|
typedef QMap<QByteArray, QByteArray> OidNameMap;
|
||||||
@ -82,6 +84,27 @@ static OidNameMap createOidMap()
|
|||||||
}
|
}
|
||||||
Q_GLOBAL_STATIC_WITH_ARGS(OidNameMap, oidNameMap, (createOidMap()))
|
Q_GLOBAL_STATIC_WITH_ARGS(OidNameMap, oidNameMap, (createOidMap()))
|
||||||
|
|
||||||
|
static bool stringToNonNegativeInt(const QByteArray &asnString, int *val)
|
||||||
|
{
|
||||||
|
// Helper function for toDateTime(), which handles chunking of the original
|
||||||
|
// string into smaller sub-components, so we expect the whole 'asnString' to
|
||||||
|
// be a valid non-negative number.
|
||||||
|
Q_ASSERT(val);
|
||||||
|
|
||||||
|
// We want the C locale, as used by QByteArray; however, no leading sign is
|
||||||
|
// allowed (which QByteArray would accept), so we have to check the data:
|
||||||
|
const std::locale localeC;
|
||||||
|
for (char v : asnString) {
|
||||||
|
if (!std::isdigit(v, localeC))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ok = false;
|
||||||
|
*val = asnString.toInt(&ok);
|
||||||
|
Q_ASSERT(ok && *val >= 0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
QAsn1Element::QAsn1Element(quint8 type, const QByteArray &value)
|
QAsn1Element::QAsn1Element(quint8 type, const QByteArray &value)
|
||||||
: mType(type)
|
: mType(type)
|
||||||
, mValue(value)
|
, mValue(value)
|
||||||
@ -231,15 +254,19 @@ bool QAsn1Element::toBool(bool *ok) const
|
|||||||
QDateTime QAsn1Element::toDateTime() const
|
QDateTime QAsn1Element::toDateTime() const
|
||||||
{
|
{
|
||||||
if (mValue.endsWith('Z')) {
|
if (mValue.endsWith('Z')) {
|
||||||
if (mType == UtcTimeType && mValue.size() == 13)
|
if (mType == UtcTimeType && mValue.size() == 13) {
|
||||||
return QDateTime(QDate(2000 + mValue.mid(0, 2).toInt(),
|
int year = 0;
|
||||||
|
if (!stringToNonNegativeInt(mValue.mid(0, 2), &year))
|
||||||
|
return QDateTime();
|
||||||
|
// RFC 2459: YY represents a year in the range [1950, 2049]
|
||||||
|
return QDateTime(QDate(year < 50 ? 2000 + year : 1900 + year,
|
||||||
mValue.mid(2, 2).toInt(),
|
mValue.mid(2, 2).toInt(),
|
||||||
mValue.mid(4, 2).toInt()),
|
mValue.mid(4, 2).toInt()),
|
||||||
QTime(mValue.mid(6, 2).toInt(),
|
QTime(mValue.mid(6, 2).toInt(),
|
||||||
mValue.mid(8, 2).toInt(),
|
mValue.mid(8, 2).toInt(),
|
||||||
mValue.mid(10, 2).toInt()),
|
mValue.mid(10, 2).toInt()),
|
||||||
Qt::UTC);
|
Qt::UTC);
|
||||||
else if (mType == GeneralizedTimeType && mValue.size() == 15)
|
} else if (mType == GeneralizedTimeType && mValue.size() == 15) {
|
||||||
return QDateTime(QDate(mValue.mid(0, 4).toInt(),
|
return QDateTime(QDate(mValue.mid(0, 4).toInt(),
|
||||||
mValue.mid(4, 2).toInt(),
|
mValue.mid(4, 2).toInt(),
|
||||||
mValue.mid(6, 2).toInt()),
|
mValue.mid(6, 2).toInt()),
|
||||||
@ -247,6 +274,7 @@ QDateTime QAsn1Element::toDateTime() const
|
|||||||
mValue.mid(10, 2).toInt(),
|
mValue.mid(10, 2).toInt(),
|
||||||
mValue.mid(12, 2).toInt()),
|
mValue.mid(12, 2).toInt()),
|
||||||
Qt::UTC);
|
Qt::UTC);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return QDateTime();
|
return QDateTime();
|
||||||
}
|
}
|
||||||
|
@ -256,10 +256,6 @@ public:
|
|||||||
QKdeThemePrivate(const QStringList &kdeDirs, int kdeVersion)
|
QKdeThemePrivate(const QStringList &kdeDirs, int kdeVersion)
|
||||||
: kdeDirs(kdeDirs)
|
: kdeDirs(kdeDirs)
|
||||||
, kdeVersion(kdeVersion)
|
, kdeVersion(kdeVersion)
|
||||||
, toolButtonStyle(Qt::ToolButtonTextBesideIcon)
|
|
||||||
, toolBarIconSize(0)
|
|
||||||
, singleClick(true)
|
|
||||||
, wheelScrollLines(3)
|
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
static QString kdeGlobals(const QString &kdeDir, int kdeVersion)
|
static QString kdeGlobals(const QString &kdeDir, int kdeVersion)
|
||||||
@ -282,10 +278,15 @@ public:
|
|||||||
QString iconThemeName;
|
QString iconThemeName;
|
||||||
QString iconFallbackThemeName;
|
QString iconFallbackThemeName;
|
||||||
QStringList styleNames;
|
QStringList styleNames;
|
||||||
int toolButtonStyle;
|
int toolButtonStyle = Qt::ToolButtonTextBesideIcon;
|
||||||
int toolBarIconSize;
|
int toolBarIconSize = 0;
|
||||||
bool singleClick;
|
bool singleClick = true;
|
||||||
int wheelScrollLines;
|
bool showIconsOnPushButtons = true;
|
||||||
|
int wheelScrollLines = 3;
|
||||||
|
int doubleClickInterval = 400;
|
||||||
|
int startDragDist = 10;
|
||||||
|
int startDragTime = 500;
|
||||||
|
int cursorBlinkRate = 1000;
|
||||||
};
|
};
|
||||||
|
|
||||||
void QKdeThemePrivate::refresh()
|
void QKdeThemePrivate::refresh()
|
||||||
@ -321,6 +322,10 @@ void QKdeThemePrivate::refresh()
|
|||||||
if (singleClickValue.isValid())
|
if (singleClickValue.isValid())
|
||||||
singleClick = singleClickValue.toBool();
|
singleClick = singleClickValue.toBool();
|
||||||
|
|
||||||
|
const QVariant showIconsOnPushButtonsValue = readKdeSetting(QStringLiteral("KDE/ShowIconsOnPushButtons"), kdeDirs, kdeVersion, kdeSettings);
|
||||||
|
if (showIconsOnPushButtonsValue.isValid())
|
||||||
|
showIconsOnPushButtons = showIconsOnPushButtonsValue.toBool();
|
||||||
|
|
||||||
const QVariant themeValue = readKdeSetting(QStringLiteral("Icons/Theme"), kdeDirs, kdeVersion, kdeSettings);
|
const QVariant themeValue = readKdeSetting(QStringLiteral("Icons/Theme"), kdeDirs, kdeVersion, kdeSettings);
|
||||||
if (themeValue.isValid())
|
if (themeValue.isValid())
|
||||||
iconThemeName = themeValue.toString();
|
iconThemeName = themeValue.toString();
|
||||||
@ -344,6 +349,24 @@ void QKdeThemePrivate::refresh()
|
|||||||
if (wheelScrollLinesValue.isValid())
|
if (wheelScrollLinesValue.isValid())
|
||||||
wheelScrollLines = wheelScrollLinesValue.toInt();
|
wheelScrollLines = wheelScrollLinesValue.toInt();
|
||||||
|
|
||||||
|
const QVariant doubleClickIntervalValue = readKdeSetting(QStringLiteral("KDE/DoubleClickInterval"), kdeDirs, kdeVersion, kdeSettings);
|
||||||
|
if (doubleClickIntervalValue.isValid())
|
||||||
|
doubleClickInterval = doubleClickIntervalValue.toInt();
|
||||||
|
|
||||||
|
const QVariant startDragDistValue = readKdeSetting(QStringLiteral("KDE/StartDragDist"), kdeDirs, kdeVersion, kdeSettings);
|
||||||
|
if (startDragDistValue.isValid())
|
||||||
|
startDragDist = startDragDistValue.toInt();
|
||||||
|
|
||||||
|
const QVariant startDragTimeValue = readKdeSetting(QStringLiteral("KDE/StartDragTime"), kdeDirs, kdeVersion, kdeSettings);
|
||||||
|
if (startDragTimeValue.isValid())
|
||||||
|
startDragTime = startDragTimeValue.toInt();
|
||||||
|
|
||||||
|
const QVariant cursorBlinkRateValue = readKdeSetting(QStringLiteral("KDE/CursorBlinkRate"), kdeDirs, kdeVersion, kdeSettings);
|
||||||
|
if (cursorBlinkRateValue.isValid()) {
|
||||||
|
cursorBlinkRate = cursorBlinkRateValue.toInt();
|
||||||
|
cursorBlinkRate = cursorBlinkRate > 0 ? qBound(200, cursorBlinkRate, 2000) : 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Read system font, ignore 'smallestReadableFont'
|
// Read system font, ignore 'smallestReadableFont'
|
||||||
if (QFont *systemFont = kdeFont(readKdeSetting(QStringLiteral("font"), kdeDirs, kdeVersion, kdeSettings)))
|
if (QFont *systemFont = kdeFont(readKdeSetting(QStringLiteral("font"), kdeDirs, kdeVersion, kdeSettings)))
|
||||||
resources.fonts[QPlatformTheme::SystemFont] = systemFont;
|
resources.fonts[QPlatformTheme::SystemFont] = systemFont;
|
||||||
@ -519,7 +542,7 @@ QVariant QKdeTheme::themeHint(QPlatformTheme::ThemeHint hint) const
|
|||||||
case QPlatformTheme::UseFullScreenForPopupMenu:
|
case QPlatformTheme::UseFullScreenForPopupMenu:
|
||||||
return QVariant(true);
|
return QVariant(true);
|
||||||
case QPlatformTheme::DialogButtonBoxButtonsHaveIcons:
|
case QPlatformTheme::DialogButtonBoxButtonsHaveIcons:
|
||||||
return QVariant(true);
|
return QVariant(d->showIconsOnPushButtons);
|
||||||
case QPlatformTheme::DialogButtonBoxLayout:
|
case QPlatformTheme::DialogButtonBoxLayout:
|
||||||
return QVariant(QPlatformDialogHelper::KdeLayout);
|
return QVariant(QPlatformDialogHelper::KdeLayout);
|
||||||
case QPlatformTheme::ToolButtonStyle:
|
case QPlatformTheme::ToolButtonStyle:
|
||||||
@ -542,6 +565,14 @@ QVariant QKdeTheme::themeHint(QPlatformTheme::ThemeHint hint) const
|
|||||||
return QVariant(d->singleClick);
|
return QVariant(d->singleClick);
|
||||||
case QPlatformTheme::WheelScrollLines:
|
case QPlatformTheme::WheelScrollLines:
|
||||||
return QVariant(d->wheelScrollLines);
|
return QVariant(d->wheelScrollLines);
|
||||||
|
case QPlatformTheme::MouseDoubleClickInterval:
|
||||||
|
return QVariant(d->doubleClickInterval);
|
||||||
|
case QPlatformTheme::StartDragTime:
|
||||||
|
return QVariant(d->startDragTime);
|
||||||
|
case QPlatformTheme::StartDragDistance:
|
||||||
|
return QVariant(d->startDragDist);
|
||||||
|
case QPlatformTheme::CursorFlashTime:
|
||||||
|
return QVariant(d->cursorBlinkRate);
|
||||||
case QPlatformTheme::UiEffects:
|
case QPlatformTheme::UiEffects:
|
||||||
return QVariant(int(HoverEffect));
|
return QVariant(int(HoverEffect));
|
||||||
default:
|
default:
|
||||||
|
@ -57,6 +57,7 @@
|
|||||||
#include <QtGui/qpainter.h>
|
#include <QtGui/qpainter.h>
|
||||||
#include <QtFontDatabaseSupport/private/qcoretextfontdatabase_p.h>
|
#include <QtFontDatabaseSupport/private/qcoretextfontdatabase_p.h>
|
||||||
#include <QtThemeSupport/private/qabstractfileiconengine_p.h>
|
#include <QtThemeSupport/private/qabstractfileiconengine_p.h>
|
||||||
|
#include <qpa/qplatformdialoghelper.h>
|
||||||
#include <qpa/qplatformintegration.h>
|
#include <qpa/qplatformintegration.h>
|
||||||
#include <qpa/qplatformnativeinterface.h>
|
#include <qpa/qplatformnativeinterface.h>
|
||||||
|
|
||||||
|
@ -88,9 +88,9 @@
|
|||||||
*/
|
*/
|
||||||
- (NSSize)window:(NSWindow *)window willUseFullScreenContentSize:(NSSize)proposedSize
|
- (NSSize)window:(NSWindow *)window willUseFullScreenContentSize:(NSSize)proposedSize
|
||||||
{
|
{
|
||||||
Q_UNUSED(window);
|
Q_UNUSED(proposedSize);
|
||||||
Q_ASSERT(NSEqualSizes(m_cocoaWindow->screen()->geometry().size().toCGSize(), proposedSize));
|
Q_ASSERT(window == m_cocoaWindow->nativeWindow());
|
||||||
return proposedSize;
|
return m_cocoaWindow->screen()->geometry().size().toCGSize();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -126,18 +126,6 @@
|
|||||||
"features": [
|
"features": [
|
||||||
"disable_desktopgl"
|
"disable_desktopgl"
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 11,
|
|
||||||
"description": "VMWare Workstation Player 12 has insufficient support for OpenGL",
|
|
||||||
"vendor_id": "0x15AD",
|
|
||||||
"device_id": [ "0x0405" ],
|
|
||||||
"os": {
|
|
||||||
"type": "win"
|
|
||||||
},
|
|
||||||
"features": [
|
|
||||||
"disable_desktopgl", "disable_d3d11"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,9 @@
|
|||||||
#include <qstyleoption.h>
|
#include <qstyleoption.h>
|
||||||
#include <qtoolbar.h>
|
#include <qtoolbar.h>
|
||||||
#include <qtoolbutton.h>
|
#include <qtoolbutton.h>
|
||||||
|
#if QT_CONFIG(treeview)
|
||||||
#include <qtreeview.h>
|
#include <qtreeview.h>
|
||||||
|
#endif
|
||||||
#if QT_CONFIG(tableview)
|
#if QT_CONFIG(tableview)
|
||||||
#include <qtableview.h>
|
#include <qtableview.h>
|
||||||
#endif
|
#endif
|
||||||
@ -491,7 +493,7 @@ static QStyleHelper::WidgetSizePolicy getControlSize(const QStyleOption *option,
|
|||||||
return wsp;
|
return wsp;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
static inline bool isTreeView(const QWidget *widget)
|
static inline bool isTreeView(const QWidget *widget)
|
||||||
{
|
{
|
||||||
return (widget && widget->parentWidget() &&
|
return (widget && widget->parentWidget() &&
|
||||||
@ -1027,7 +1029,7 @@ static QSize qt_aqua_get_known_size(QStyle::ContentsType ct, const QWidget *widg
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case QStyle::CT_HeaderSection:
|
case QStyle::CT_HeaderSection:
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
if (isTreeView(widg))
|
if (isTreeView(widg))
|
||||||
ret = QSize(-1, qt_mac_aqua_get_metric(ListHeaderHeight));
|
ret = QSize(-1, qt_mac_aqua_get_metric(ListHeaderHeight));
|
||||||
#endif
|
#endif
|
||||||
|
@ -93,7 +93,9 @@
|
|||||||
#include <qtextstream.h>
|
#include <qtextstream.h>
|
||||||
#include <qtoolbar.h>
|
#include <qtoolbar.h>
|
||||||
#include <qtoolbutton.h>
|
#include <qtoolbutton.h>
|
||||||
|
#if QT_CONFIG(treeview)
|
||||||
#include <qtreeview.h>
|
#include <qtreeview.h>
|
||||||
|
#endif
|
||||||
#if QT_CONFIG(tableview)
|
#if QT_CONFIG(tableview)
|
||||||
#include <qtableview.h>
|
#include <qtableview.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -75,7 +75,9 @@
|
|||||||
#include <qprogressbar.h>
|
#include <qprogressbar.h>
|
||||||
#include <qdockwidget.h>
|
#include <qdockwidget.h>
|
||||||
#include <qlistview.h>
|
#include <qlistview.h>
|
||||||
|
#if QT_CONFIG(treeview)
|
||||||
#include <qtreeview.h>
|
#include <qtreeview.h>
|
||||||
|
#endif
|
||||||
#include <qtextedit.h>
|
#include <qtextedit.h>
|
||||||
#include <qmessagebox.h>
|
#include <qmessagebox.h>
|
||||||
#if QT_CONFIG(dialogbuttonbox)
|
#if QT_CONFIG(dialogbuttonbox)
|
||||||
|
@ -54,7 +54,7 @@ QT_BEGIN_NAMESPACE
|
|||||||
/*
|
/*
|
||||||
The BLACKLIST file format is a grouped listing of keywords.
|
The BLACKLIST file format is a grouped listing of keywords.
|
||||||
|
|
||||||
Blank lines and lines starting with # are simply ignored. An initial #-line
|
Blank lines and everything after # is simply ignored. An initial #-line
|
||||||
referring to this documentation is kind to readers. Comments can also be used
|
referring to this documentation is kind to readers. Comments can also be used
|
||||||
to indicate the reasons for ignoring particular cases.
|
to indicate the reasons for ignoring particular cases.
|
||||||
|
|
||||||
@ -253,8 +253,12 @@ void parseBlackList()
|
|||||||
QByteArray function;
|
QByteArray function;
|
||||||
|
|
||||||
while (!ignored.atEnd()) {
|
while (!ignored.atEnd()) {
|
||||||
QByteArray line = ignored.readLine().simplified();
|
QByteArray line = ignored.readLine();
|
||||||
if (line.isEmpty() || line.startsWith('#'))
|
const int commentPosition = line.indexOf('#');
|
||||||
|
if (commentPosition >= 0)
|
||||||
|
line.truncate(commentPosition);
|
||||||
|
line = line.simplified();
|
||||||
|
if (line.isEmpty())
|
||||||
continue;
|
continue;
|
||||||
if (line.startsWith('[')) {
|
if (line.startsWith('[')) {
|
||||||
function = line.mid(1, line.length() - 2);
|
function = line.mid(1, line.length() - 2);
|
||||||
|
@ -62,7 +62,7 @@ static const char docTypeHeader[] =
|
|||||||
|
|
||||||
#define PROGRAMNAME "qdbuscpp2xml"
|
#define PROGRAMNAME "qdbuscpp2xml"
|
||||||
#define PROGRAMVERSION "0.2"
|
#define PROGRAMVERSION "0.2"
|
||||||
#define PROGRAMCOPYRIGHT "Copyright (C) 2016 The Qt Company Ltd."
|
#define PROGRAMCOPYRIGHT "Copyright (C) 2017 The Qt Company Ltd."
|
||||||
|
|
||||||
static QString outputFile;
|
static QString outputFile;
|
||||||
static int flags;
|
static int flags;
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
|
|
||||||
#define PROGRAMNAME "qdbusxml2cpp"
|
#define PROGRAMNAME "qdbusxml2cpp"
|
||||||
#define PROGRAMVERSION "0.8"
|
#define PROGRAMVERSION "0.8"
|
||||||
#define PROGRAMCOPYRIGHT "Copyright (C) 2016 The Qt Company Ltd."
|
#define PROGRAMCOPYRIGHT "Copyright (C) 2017 The Qt Company Ltd."
|
||||||
|
|
||||||
#define ANNOTATION_NO_WAIT "org.freedesktop.DBus.Method.NoReply"
|
#define ANNOTATION_NO_WAIT "org.freedesktop.DBus.Method.NoReply"
|
||||||
|
|
||||||
@ -1134,6 +1134,11 @@ int main(int argc, char **argv)
|
|||||||
QDBusIntrospection::Interfaces interfaces = readInput();
|
QDBusIntrospection::Interfaces interfaces = readInput();
|
||||||
cleanInterfaces(interfaces);
|
cleanInterfaces(interfaces);
|
||||||
|
|
||||||
|
QStringList args = app.arguments();
|
||||||
|
args.removeFirst();
|
||||||
|
commandLine = QLatin1String(PROGRAMNAME " ");
|
||||||
|
commandLine += args.join(QLatin1Char(' '));
|
||||||
|
|
||||||
if (!proxyFile.isEmpty() || adaptorFile.isEmpty())
|
if (!proxyFile.isEmpty() || adaptorFile.isEmpty())
|
||||||
writeProxy(proxyFile, interfaces);
|
writeProxy(proxyFile, interfaces);
|
||||||
|
|
||||||
|
@ -53,7 +53,6 @@
|
|||||||
#if QT_CONFIG(whatsthis)
|
#if QT_CONFIG(whatsthis)
|
||||||
#include <qwhatsthis.h>
|
#include <qwhatsthis.h>
|
||||||
#endif
|
#endif
|
||||||
#include <qtreeview.h>
|
|
||||||
#include <private/qtabbar_p.h>
|
#include <private/qtabbar_p.h>
|
||||||
#include <QAbstractScrollArea>
|
#include <QAbstractScrollArea>
|
||||||
#include <QScrollArea>
|
#include <QScrollArea>
|
||||||
|
@ -44,8 +44,11 @@
|
|||||||
#include <qtableview.h>
|
#include <qtableview.h>
|
||||||
#endif
|
#endif
|
||||||
#include <qlistview.h>
|
#include <qlistview.h>
|
||||||
|
#if QT_CONFIG(treeview)
|
||||||
#include <qtreeview.h>
|
#include <qtreeview.h>
|
||||||
#include <private/qtreeview_p.h>
|
#include <private/qtreeview_p.h>
|
||||||
|
#endif
|
||||||
|
#include <private/qwidget_p.h>
|
||||||
|
|
||||||
#ifndef QT_NO_ACCESSIBILITY
|
#ifndef QT_NO_ACCESSIBILITY
|
||||||
|
|
||||||
@ -88,7 +91,7 @@ QAccessibleTable::QAccessibleTable(QWidget *w)
|
|||||||
m_role = QAccessible::Table;
|
m_role = QAccessible::Table;
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
if (qobject_cast<const QTreeView*>(view())) {
|
if (qobject_cast<const QTreeView*>(view())) {
|
||||||
m_role = QAccessible::Tree;
|
m_role = QAccessible::Tree;
|
||||||
} else
|
} else
|
||||||
@ -123,7 +126,7 @@ QHeaderView *QAccessibleTable::horizontalHeader() const
|
|||||||
} else if (const QTableView *tv = qobject_cast<const QTableView*>(view())) {
|
} else if (const QTableView *tv = qobject_cast<const QTableView*>(view())) {
|
||||||
header = tv->horizontalHeader();
|
header = tv->horizontalHeader();
|
||||||
#endif
|
#endif
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
} else if (const QTreeView *tv = qobject_cast<const QTreeView*>(view())) {
|
} else if (const QTreeView *tv = qobject_cast<const QTreeView*>(view())) {
|
||||||
header = tv->header();
|
header = tv->header();
|
||||||
#endif
|
#endif
|
||||||
@ -647,7 +650,7 @@ void QAccessibleTable::modelChange(QAccessibleTableModelChangeEvent *event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
|
|
||||||
// TREE VIEW
|
// TREE VIEW
|
||||||
|
|
||||||
@ -820,7 +823,7 @@ bool QAccessibleTree::selectRow(int row)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // QT_NO_TREEVIEW
|
#endif // QT_CONFIG(treeview)
|
||||||
|
|
||||||
// TABLE CELL
|
// TABLE CELL
|
||||||
|
|
||||||
@ -872,7 +875,7 @@ QHeaderView *QAccessibleTableCell::horizontalHeader() const
|
|||||||
} else if (const QTableView *tv = qobject_cast<const QTableView*>(view)) {
|
} else if (const QTableView *tv = qobject_cast<const QTableView*>(view)) {
|
||||||
header = tv->horizontalHeader();
|
header = tv->horizontalHeader();
|
||||||
#endif
|
#endif
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
} else if (const QTreeView *tv = qobject_cast<const QTreeView*>(view)) {
|
} else if (const QTreeView *tv = qobject_cast<const QTreeView*>(view)) {
|
||||||
header = tv->header();
|
header = tv->header();
|
||||||
#endif
|
#endif
|
||||||
@ -898,7 +901,7 @@ int QAccessibleTableCell::columnIndex() const
|
|||||||
|
|
||||||
int QAccessibleTableCell::rowIndex() const
|
int QAccessibleTableCell::rowIndex() const
|
||||||
{
|
{
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
if (role() == QAccessible::TreeItem) {
|
if (role() == QAccessible::TreeItem) {
|
||||||
const QTreeView *treeView = qobject_cast<const QTreeView*>(view);
|
const QTreeView *treeView = qobject_cast<const QTreeView*>(view);
|
||||||
Q_ASSERT(treeView);
|
Q_ASSERT(treeView);
|
||||||
@ -1034,7 +1037,7 @@ QAccessible::State QAccessibleTableCell::state() const
|
|||||||
if (view->selectionMode() == QAbstractItemView::ExtendedSelection)
|
if (view->selectionMode() == QAbstractItemView::ExtendedSelection)
|
||||||
st.extSelectable = true;
|
st.extSelectable = true;
|
||||||
}
|
}
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
if (m_role == QAccessible::TreeItem) {
|
if (m_role == QAccessible::TreeItem) {
|
||||||
const QTreeView *treeView = qobject_cast<const QTreeView*>(view);
|
const QTreeView *treeView = qobject_cast<const QTreeView*>(view);
|
||||||
if (treeView->model()->hasChildren(m_index))
|
if (treeView->model()->hasChildren(m_index))
|
||||||
@ -1135,7 +1138,7 @@ QRect QAccessibleTableHeaderCell::rect() const
|
|||||||
header = tv->verticalHeader();
|
header = tv->verticalHeader();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
} else if (const QTreeView *tv = qobject_cast<const QTreeView*>(view)) {
|
} else if (const QTreeView *tv = qobject_cast<const QTreeView*>(view)) {
|
||||||
header = tv->header();
|
header = tv->header();
|
||||||
#endif
|
#endif
|
||||||
@ -1202,7 +1205,7 @@ QHeaderView *QAccessibleTableHeaderCell::headerView() const
|
|||||||
header = tv->verticalHeader();
|
header = tv->verticalHeader();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
} else if (const QTreeView *tv = qobject_cast<const QTreeView*>(view)) {
|
} else if (const QTreeView *tv = qobject_cast<const QTreeView*>(view)) {
|
||||||
header = tv->header();
|
header = tv->header();
|
||||||
#endif
|
#endif
|
||||||
|
@ -145,7 +145,7 @@ private:
|
|||||||
QAccessible::Role m_role;
|
QAccessible::Role m_role;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
class QAccessibleTree :public QAccessibleTable
|
class QAccessibleTree :public QAccessibleTable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -223,7 +223,7 @@ private:
|
|||||||
void unselectCell();
|
void unselectCell();
|
||||||
|
|
||||||
friend class QAccessibleTable;
|
friend class QAccessibleTable;
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
friend class QAccessibleTree;
|
friend class QAccessibleTree;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
@ -259,7 +259,7 @@ private:
|
|||||||
Qt::Orientation orientation;
|
Qt::Orientation orientation;
|
||||||
|
|
||||||
friend class QAccessibleTable;
|
friend class QAccessibleTable;
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
friend class QAccessibleTree;
|
friend class QAccessibleTree;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
@ -46,7 +46,9 @@
|
|||||||
#include "itemviews_p.h"
|
#include "itemviews_p.h"
|
||||||
|
|
||||||
#include <qtoolbutton.h>
|
#include <qtoolbutton.h>
|
||||||
|
#if QT_CONFIG(treeview)
|
||||||
#include <qtreeview.h>
|
#include <qtreeview.h>
|
||||||
|
#endif
|
||||||
#include <qvariant.h>
|
#include <qvariant.h>
|
||||||
#include <qaccessible.h>
|
#include <qaccessible.h>
|
||||||
|
|
||||||
@ -140,10 +142,10 @@ QAccessibleInterface *qAccessibleFactory(const QString &classname, QObject *obje
|
|||||||
} else if (classname == QLatin1String("QMenu")) {
|
} else if (classname == QLatin1String("QMenu")) {
|
||||||
iface = new QAccessibleMenu(widget);
|
iface = new QAccessibleMenu(widget);
|
||||||
#endif
|
#endif
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
} else if (classname == QLatin1String("QTreeView")) {
|
} else if (classname == QLatin1String("QTreeView")) {
|
||||||
iface = new QAccessibleTree(widget);
|
iface = new QAccessibleTree(widget);
|
||||||
#endif // QT_NO_TREEVIEW
|
#endif // QT_CONFIG(treeview)
|
||||||
#ifndef QT_NO_ITEMVIEWS
|
#ifndef QT_NO_ITEMVIEWS
|
||||||
} else if (classname == QLatin1String("QTableView") || classname == QLatin1String("QListView")) {
|
} else if (classname == QLatin1String("QTableView") || classname == QLatin1String("QListView")) {
|
||||||
iface = new QAccessibleTable(widget);
|
iface = new QAccessibleTable(widget);
|
||||||
|
@ -9,8 +9,6 @@ HEADERS += \
|
|||||||
itemviews/qlistview.h \
|
itemviews/qlistview.h \
|
||||||
itemviews/qlistview_p.h \
|
itemviews/qlistview_p.h \
|
||||||
itemviews/qbsptree_p.h \
|
itemviews/qbsptree_p.h \
|
||||||
itemviews/qtreeview.h \
|
|
||||||
itemviews/qtreeview_p.h \
|
|
||||||
itemviews/qabstractitemdelegate.h \
|
itemviews/qabstractitemdelegate.h \
|
||||||
itemviews/qabstractitemdelegate_p.h \
|
itemviews/qabstractitemdelegate_p.h \
|
||||||
itemviews/qitemdelegate.h \
|
itemviews/qitemdelegate.h \
|
||||||
@ -26,7 +24,6 @@ SOURCES += \
|
|||||||
itemviews/qheaderview.cpp \
|
itemviews/qheaderview.cpp \
|
||||||
itemviews/qlistview.cpp \
|
itemviews/qlistview.cpp \
|
||||||
itemviews/qbsptree.cpp \
|
itemviews/qbsptree.cpp \
|
||||||
itemviews/qtreeview.cpp \
|
|
||||||
itemviews/qabstractitemdelegate.cpp \
|
itemviews/qabstractitemdelegate.cpp \
|
||||||
itemviews/qitemdelegate.cpp \
|
itemviews/qitemdelegate.cpp \
|
||||||
itemviews/qdirmodel.cpp \
|
itemviews/qdirmodel.cpp \
|
||||||
@ -70,6 +67,14 @@ qtConfig(tablewidget) {
|
|||||||
SOURCES += itemviews/qtablewidget.cpp
|
SOURCES += itemviews/qtablewidget.cpp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qtConfig(treeview) {
|
||||||
|
HEADERS += \
|
||||||
|
itemviews/qtreeview.h \
|
||||||
|
itemviews/qtreeview_p.h
|
||||||
|
|
||||||
|
SOURCES += itemviews/qtreeview.cpp
|
||||||
|
}
|
||||||
|
|
||||||
qtConfig(treewidget) {
|
qtConfig(treewidget) {
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
itemviews/qtreewidget.h \
|
itemviews/qtreewidget.h \
|
||||||
|
@ -52,7 +52,6 @@
|
|||||||
#include <qdatetime.h>
|
#include <qdatetime.h>
|
||||||
#include <qlineedit.h>
|
#include <qlineedit.h>
|
||||||
#include <qspinbox.h>
|
#include <qspinbox.h>
|
||||||
#include <qtreeview.h>
|
|
||||||
#include <qheaderview.h>
|
#include <qheaderview.h>
|
||||||
#include <qstyleditemdelegate.h>
|
#include <qstyleditemdelegate.h>
|
||||||
#include <private/qabstractitemview_p.h>
|
#include <private/qabstractitemview_p.h>
|
||||||
|
@ -38,7 +38,6 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#include "qtreeview.h"
|
#include "qtreeview.h"
|
||||||
|
|
||||||
#ifndef QT_NO_TREEVIEW
|
|
||||||
#include <qheaderview.h>
|
#include <qheaderview.h>
|
||||||
#include <qitemdelegate.h>
|
#include <qitemdelegate.h>
|
||||||
#include <qapplication.h>
|
#include <qapplication.h>
|
||||||
@ -3996,5 +3995,3 @@ int QTreeView::visualIndex(const QModelIndex &index) const
|
|||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#include "moc_qtreeview.cpp"
|
#include "moc_qtreeview.cpp"
|
||||||
|
|
||||||
#endif // QT_NO_TREEVIEW
|
|
||||||
|
@ -45,11 +45,10 @@
|
|||||||
|
|
||||||
class tst_QTreeView;
|
class tst_QTreeView;
|
||||||
|
|
||||||
|
QT_REQUIRE_CONFIG(treeview);
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
|
||||||
#ifndef QT_NO_TREEVIEW
|
|
||||||
|
|
||||||
class QTreeViewPrivate;
|
class QTreeViewPrivate;
|
||||||
class QHeaderView;
|
class QHeaderView;
|
||||||
|
|
||||||
@ -237,8 +236,6 @@ private:
|
|||||||
Q_PRIVATE_SLOT(d_func(), void _q_sortIndicatorChanged(int column, Qt::SortOrder order))
|
Q_PRIVATE_SLOT(d_func(), void _q_sortIndicatorChanged(int column, Qt::SortOrder order))
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // QT_NO_TREEVIEW
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // QTREEVIEW_H
|
#endif // QTREEVIEW_H
|
||||||
|
@ -57,7 +57,7 @@
|
|||||||
#include <QtCore/qabstractitemmodel.h>
|
#include <QtCore/qabstractitemmodel.h>
|
||||||
#include <QtCore/qvector.h>
|
#include <QtCore/qvector.h>
|
||||||
|
|
||||||
#ifndef QT_NO_TREEVIEW
|
QT_REQUIRE_CONFIG(treeview);
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@ -272,6 +272,4 @@ public:
|
|||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // QT_NO_TREEVIEW
|
|
||||||
|
|
||||||
#endif // QTREEVIEW_P_H
|
#endif // QTREEVIEW_P_H
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
#include "qcommonstyle_p.h"
|
#include "qcommonstyle_p.h"
|
||||||
|
|
||||||
#include <qfile.h>
|
#include <qfile.h>
|
||||||
|
#include <qabstractitemview.h>
|
||||||
#include <qapplication.h>
|
#include <qapplication.h>
|
||||||
#include <private/qguiapplication_p.h>
|
#include <private/qguiapplication_p.h>
|
||||||
#include <qpa/qplatformtheme.h>
|
#include <qpa/qplatformtheme.h>
|
||||||
@ -71,7 +72,9 @@
|
|||||||
#if QT_CONFIG(rubberband)
|
#if QT_CONFIG(rubberband)
|
||||||
#include <qrubberband.h>
|
#include <qrubberband.h>
|
||||||
#endif
|
#endif
|
||||||
|
#if QT_CONFIG(treeview)
|
||||||
#include "qtreeview.h"
|
#include "qtreeview.h"
|
||||||
|
#endif
|
||||||
#include <private/qcommonstylepixmaps_p.h>
|
#include <private/qcommonstylepixmaps_p.h>
|
||||||
#include <private/qmath_p.h>
|
#include <private/qmath_p.h>
|
||||||
#include <qdebug.h>
|
#include <qdebug.h>
|
||||||
@ -5252,7 +5255,7 @@ int QCommonStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget
|
|||||||
case SH_Widget_Animate:
|
case SH_Widget_Animate:
|
||||||
// TODO Qt6: move this code in the SH_Widget_Animation_Duration case
|
// TODO Qt6: move this code in the SH_Widget_Animation_Duration case
|
||||||
// and replace false with 0 and true with 200.
|
// and replace false with 0 and true with 200.
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
if (qobject_cast<const QTreeView*>(widget)) {
|
if (qobject_cast<const QTreeView*>(widget)) {
|
||||||
ret = false;
|
ret = false;
|
||||||
} else
|
} else
|
||||||
|
@ -3668,7 +3668,6 @@ int QFusionStyle::styleHint(StyleHint hint, const QStyleOption *option, const QW
|
|||||||
case SH_ScrollView_FrameOnlyAroundContents:
|
case SH_ScrollView_FrameOnlyAroundContents:
|
||||||
case SH_Menu_AllowActiveAndDisabled:
|
case SH_Menu_AllowActiveAndDisabled:
|
||||||
case SH_MainWindow_SpaceBelowMenuBar:
|
case SH_MainWindow_SpaceBelowMenuBar:
|
||||||
case SH_DialogButtonBox_ButtonsHaveIcons:
|
|
||||||
case SH_MessageBox_CenterButtons:
|
case SH_MessageBox_CenterButtons:
|
||||||
case SH_RubberBand_Mask:
|
case SH_RubberBand_Mask:
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -55,7 +55,6 @@
|
|||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QAbstractItemView>
|
#include <QAbstractItemView>
|
||||||
#include <QListView>
|
#include <QListView>
|
||||||
#include <QTreeView>
|
|
||||||
#include <QStyledItemDelegate>
|
#include <QStyledItemDelegate>
|
||||||
#include <QAbstractScrollArea>
|
#include <QAbstractScrollArea>
|
||||||
#include <QScrollBar>
|
#include <QScrollBar>
|
||||||
|
@ -57,7 +57,7 @@
|
|||||||
|
|
||||||
#ifndef QT_NO_COMPLETER
|
#ifndef QT_NO_COMPLETER
|
||||||
|
|
||||||
#include "QtWidgets/qtreeview.h"
|
#include "QtWidgets/qabstractitemview.h"
|
||||||
#include "QtCore/qabstractproxymodel.h"
|
#include "QtCore/qabstractproxymodel.h"
|
||||||
#include "qcompleter.h"
|
#include "qcompleter.h"
|
||||||
#include "QtWidgets/qitemdelegate.h"
|
#include "QtWidgets/qitemdelegate.h"
|
||||||
|
@ -56,7 +56,9 @@
|
|||||||
#include <qevent.h>
|
#include <qevent.h>
|
||||||
#include <qlayout.h>
|
#include <qlayout.h>
|
||||||
#include <qscrollbar.h>
|
#include <qscrollbar.h>
|
||||||
|
#if QT_CONFIG(treeview)
|
||||||
#include <qtreeview.h>
|
#include <qtreeview.h>
|
||||||
|
#endif
|
||||||
#include <qheaderview.h>
|
#include <qheaderview.h>
|
||||||
#include <qmath.h>
|
#include <qmath.h>
|
||||||
#include <qmetaobject.h>
|
#include <qmetaobject.h>
|
||||||
@ -2619,7 +2621,7 @@ void QComboBox::showPopup()
|
|||||||
int count = 0;
|
int count = 0;
|
||||||
QStack<QModelIndex> toCheck;
|
QStack<QModelIndex> toCheck;
|
||||||
toCheck.push(view()->rootIndex());
|
toCheck.push(view()->rootIndex());
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
QTreeView *treeView = qobject_cast<QTreeView*>(view());
|
QTreeView *treeView = qobject_cast<QTreeView*>(view());
|
||||||
if (treeView && treeView->header() && !treeView->header()->isHidden())
|
if (treeView && treeView->header() && !treeView->header()->isHidden())
|
||||||
listHeight += treeView->header()->height();
|
listHeight += treeView->header()->height();
|
||||||
@ -2631,7 +2633,7 @@ void QComboBox::showPopup()
|
|||||||
if (!idx.isValid())
|
if (!idx.isValid())
|
||||||
continue;
|
continue;
|
||||||
listHeight += view()->visualRect(idx).height();
|
listHeight += view()->visualRect(idx).height();
|
||||||
#ifndef QT_NO_TREEVIEW
|
#if QT_CONFIG(treeview)
|
||||||
if (d->model->hasChildren(idx) && treeView && treeView->isExpanded(idx))
|
if (d->model->hasChildren(idx) && treeView && treeView->isExpanded(idx))
|
||||||
toCheck.push(idx);
|
toCheck.push(idx);
|
||||||
#endif
|
#endif
|
||||||
|
@ -411,7 +411,9 @@ QPushButton *QDialogButtonBoxPrivate::createButton(QDialogButtonBox::StandardBut
|
|||||||
else
|
else
|
||||||
addButton(button, static_cast<QDialogButtonBox::ButtonRole>(role), doLayout);
|
addButton(button, static_cast<QDialogButtonBox::ButtonRole>(role), doLayout);
|
||||||
#if QT_CONFIG(shortcut)
|
#if QT_CONFIG(shortcut)
|
||||||
button->setShortcut(QGuiApplicationPrivate::platformTheme()->standardButtonShortcut(sbutton));
|
const QKeySequence standardShortcut = QGuiApplicationPrivate::platformTheme()->standardButtonShortcut(sbutton);
|
||||||
|
if (!standardShortcut.isEmpty())
|
||||||
|
button->setShortcut(standardShortcut);
|
||||||
#endif
|
#endif
|
||||||
return button;
|
return button;
|
||||||
}
|
}
|
||||||
|
@ -134,6 +134,33 @@ void tst_QAsn1Element::dateTime_data()
|
|||||||
QTest::newRow("UTCTime - no trailing Z")
|
QTest::newRow("UTCTime - no trailing Z")
|
||||||
<< QByteArray::fromHex("170d30373034313730373430323659")
|
<< QByteArray::fromHex("170d30373034313730373430323659")
|
||||||
<< QDateTime();
|
<< QDateTime();
|
||||||
|
QTest::newRow("UTCTime - year 1950")
|
||||||
|
<< QByteArray::fromHex("170d3530313232343035353530305a")
|
||||||
|
<< QDateTime(QDate(1950, 12, 24), QTime(5, 55), Qt::UTC);
|
||||||
|
QTest::newRow("UTCTime - year 1999")
|
||||||
|
<< QByteArray::fromHex("170d3939313232343035353530305a")
|
||||||
|
<< QDateTime(QDate(1999, 12, 24), QTime(5, 55), Qt::UTC);
|
||||||
|
QTest::newRow("UTCTime - year 2000")
|
||||||
|
<< QByteArray::fromHex("170d3030313232343035353530305a")
|
||||||
|
<< QDateTime(QDate(2000, 12, 24), QTime(5, 55), Qt::UTC);
|
||||||
|
QTest::newRow("UTCTime - year 2049")
|
||||||
|
<< QByteArray::fromHex("170d3439313232343035353530305a")
|
||||||
|
<< QDateTime(QDate(2049, 12, 24), QTime(5, 55), Qt::UTC);
|
||||||
|
QTest::newRow("UTCTime - invalid year ('-9')")
|
||||||
|
<< QByteArray::fromHex("170d2d39313232343035353530305a")
|
||||||
|
<< QDateTime();
|
||||||
|
QTest::newRow("UTCTime - invalid year ('*9')")
|
||||||
|
<< QByteArray::fromHex("170d2a39313232343035353530305a")
|
||||||
|
<< QDateTime();
|
||||||
|
QTest::newRow("UTCTime - invalid year ('5*')")
|
||||||
|
<< QByteArray::fromHex("170d352a313232343035353530305a")
|
||||||
|
<< QDateTime();
|
||||||
|
QTest::newRow("UTCTime - invalid year ('AB')")
|
||||||
|
<< QByteArray::fromHex("170d4142313232343035353530305a")
|
||||||
|
<< QDateTime();
|
||||||
|
QTest::newRow("UTCTime - invalid year ('+1')")
|
||||||
|
<< QByteArray::fromHex("170d2b31313232343035353530305a")
|
||||||
|
<< QDateTime();
|
||||||
QTest::newRow("GeneralizedTime - 20510829095341Z")
|
QTest::newRow("GeneralizedTime - 20510829095341Z")
|
||||||
<< QByteArray::fromHex("180f32303531303832393039353334315a")
|
<< QByteArray::fromHex("180f32303531303832393039353334315a")
|
||||||
<< QDateTime(QDate(2051, 8, 29), QTime(9, 53, 41), Qt::UTC);
|
<< QDateTime(QDate(2051, 8, 29), QTime(9, 53, 41), Qt::UTC);
|
||||||
|
@ -2341,7 +2341,11 @@ void tst_qmakelib::addTestFunctions(const QString &qindir)
|
|||||||
QTest::newRow("include(): fail")
|
QTest::newRow("include(): fail")
|
||||||
<< "include(include/nope.pri): OK = 1"
|
<< "include(include/nope.pri): OK = 1"
|
||||||
<< "OK = UNDEF"
|
<< "OK = UNDEF"
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
<< "Cannot read " + m_indir + "/include/nope.pri: The system cannot find the file specified."
|
||||||
|
#else
|
||||||
<< "Cannot read " + m_indir + "/include/nope.pri: No such file or directory"
|
<< "Cannot read " + m_indir + "/include/nope.pri: No such file or directory"
|
||||||
|
#endif
|
||||||
<< true;
|
<< true;
|
||||||
|
|
||||||
QTest::newRow("include(): silent fail")
|
QTest::newRow("include(): silent fail")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user