Merge remote-tracking branch 'origin/5.6' into dev
Conflicts: src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java src/dbus/qdbusconnection_p.h src/dbus/qdbusintegrator.cpp src/dbus/qdbusintegrator_p.h tests/auto/corelib/io/qdir/qdir.pro tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp Change-Id: I3d3fd07aed015c74b1f545f1327aa73d5f365fcc
This commit is contained in:
commit
a15c3d086d
@ -28,9 +28,8 @@
|
||||
/*!
|
||||
\example desktop/systray
|
||||
\title System Tray Icon Example
|
||||
|
||||
|
||||
The System Tray Icon example shows how to add an icon with a menu
|
||||
\ingroup examples-widgets
|
||||
\brief The System Tray Icon example shows how to add an icon with a menu
|
||||
and popup messages to a desktop environment's system tray.
|
||||
|
||||
\image systemtray-example.png Screenshot of the System Tray Icon.
|
||||
@ -47,7 +46,7 @@
|
||||
|
||||
The editor allows the user to choose the preferred icon as well as
|
||||
set the balloon message's type and duration. The user can also
|
||||
edit the message's title and body. Finally, the editor provide a
|
||||
edit the message's title and body. Finally, the editor provides a
|
||||
checkbox controlling whether the icon is actually shown in the
|
||||
system tray, or not.
|
||||
|
||||
@ -65,8 +64,8 @@
|
||||
check whether a system tray is present on the user's desktop, call
|
||||
the static QSystemTrayIcon::isSystemTrayAvailable()
|
||||
function. Associated with the icon, we provide a menu containing
|
||||
the typical \gui minimize, \gui maximize, \gui restore and \gui
|
||||
quit actions. We reimplement the QWidget::setVisible() function to
|
||||
the typical \uicontrol minimize, \uicontrol maximize, \uicontrol restore and
|
||||
\uicontrol quit actions. We reimplement the QWidget::setVisible() function to
|
||||
update the tray icon's menu whenever the editor's appearance
|
||||
changes, e.g., when maximizing or minimizing the main application
|
||||
window.
|
||||
@ -74,7 +73,7 @@
|
||||
Finally, we reimplement QWidget's \l {QWidget::}{closeEvent()}
|
||||
function to be able to inform the user (when closing the editor
|
||||
window) that the program will keep running in the system tray
|
||||
until the user chooses the \gui Quit entry in the icon's context
|
||||
until the user chooses the \uicontrol Quit entry in the icon's context
|
||||
menu.
|
||||
|
||||
\section1 Window Class Implementation
|
||||
|
@ -28,6 +28,8 @@
|
||||
/*!
|
||||
\example draganddrop/fridgemagnets
|
||||
\title Fridge Magnets Example
|
||||
\brief The Fridge Magnets example illustrates how to move around several types of
|
||||
MIME-encoded data with drag and drop.
|
||||
|
||||
The Fridge Magnets example shows how to supply more than one type
|
||||
of MIME-encoded data with a drag and drop operation.
|
||||
|
@ -1,179 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the documentation of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:FDL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Free Documentation License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Free
|
||||
** Documentation License version 1.3 as published by the Free Software
|
||||
** Foundation and appearing in the file included in the packaging of
|
||||
** this file. Please review the following information to ensure
|
||||
** the GNU Free Documentation License version 1.3 requirements
|
||||
** will be met: http://www.gnu.org/copyleft/fdl.html.
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
/*!
|
||||
\example desktop/systray
|
||||
\title System Tray Icon Example
|
||||
\ingroup examples-widgets
|
||||
\brief The System Tray Icon example shows how to add an icon with a menu
|
||||
and popup messages to a desktop environment's system tray.
|
||||
|
||||
\image systemtray-example.png Screenshot of the System Tray Icon.
|
||||
|
||||
Modern operating systems usually provide a special area on the
|
||||
desktop, called the system tray or notification area, where
|
||||
long-running applications can display icons and short messages.
|
||||
|
||||
This example consists of one single class, \c Window, providing
|
||||
the main application window (i.e., an editor for the system tray
|
||||
icon) and the associated icon.
|
||||
|
||||
\image systemtray-editor.png
|
||||
|
||||
The editor allows the user to choose the preferred icon as well as
|
||||
set the balloon message's type and duration. The user can also
|
||||
edit the message's title and body. Finally, the editor provides a
|
||||
checkbox controlling whether the icon is actually shown in the
|
||||
system tray, or not.
|
||||
|
||||
\section1 Window Class Definition
|
||||
|
||||
The \c Window class inherits QWidget:
|
||||
|
||||
\snippet desktop/systray/window.h 0
|
||||
|
||||
We implement several private slots to respond to user
|
||||
interaction. The other private functions are only convenience
|
||||
functions provided to simplify the constructor.
|
||||
|
||||
The tray icon is an instance of the QSystemTrayIcon class. To
|
||||
check whether a system tray is present on the user's desktop, call
|
||||
the static QSystemTrayIcon::isSystemTrayAvailable()
|
||||
function. Associated with the icon, we provide a menu containing
|
||||
the typical \uicontrol minimize, \uicontrol maximize, \uicontrol restore and
|
||||
\uicontrol quit actions. We reimplement the QWidget::setVisible() function
|
||||
to update the tray icon's menu whenever the editor's appearance
|
||||
changes, e.g., when maximizing or minimizing the main application
|
||||
window.
|
||||
|
||||
Finally, we reimplement QWidget's \l {QWidget::}{closeEvent()}
|
||||
function to be able to inform the user (when closing the editor
|
||||
window) that the program will keep running in the system tray
|
||||
until the user chooses the \uicontrol Quit entry in the icon's context
|
||||
menu.
|
||||
|
||||
\section1 Window Class Implementation
|
||||
|
||||
When constructing the editor widget, we first create the various
|
||||
editor elements before we create the actual system tray icon:
|
||||
|
||||
\snippet desktop/systray/window.cpp 0
|
||||
|
||||
We ensure that the application responds to user input by
|
||||
connecting most of the editor's input widgets (including the
|
||||
system tray icon) to the application's private slots. But note the
|
||||
visibility checkbox; its \l {QCheckBox::}{toggled()} signal is
|
||||
connected to the \e {icon}'s \l {QSystemTrayIcon::}{setVisible()}
|
||||
function instead.
|
||||
|
||||
\snippet desktop/systray/window.cpp 3
|
||||
|
||||
The \c setIcon() slot is triggered whenever the current index in
|
||||
the icon combobox changes, i.e., whenever the user chooses another
|
||||
icon in the editor. Note that it is also called when the user
|
||||
activates the tray icon with the left mouse button, triggering the
|
||||
icon's \l {QSystemTrayIcon::}{activated()} signal. We will come
|
||||
back to this signal shortly.
|
||||
|
||||
The QSystemTrayIcon::setIcon() function sets the \l
|
||||
{QSystemTrayIcon::}{icon} property that holds the actual system
|
||||
tray icon. On Windows, the system tray icon size is 16x16; on X11,
|
||||
the preferred size is 22x22. The icon will be scaled to the
|
||||
appropriate size as necessary.
|
||||
|
||||
Note that on X11, due to a limitation in the system tray
|
||||
specification, mouse clicks on transparent areas in the icon are
|
||||
propagated to the system tray. If this behavior is unacceptable,
|
||||
we suggest using an icon with no transparency.
|
||||
|
||||
\snippet desktop/systray/window.cpp 4
|
||||
|
||||
Whenever the user activates the system tray icon, it emits its \l
|
||||
{QSystemTrayIcon::}{activated()} signal passing the triggering
|
||||
reason as parameter. QSystemTrayIcon provides the \l
|
||||
{QSystemTrayIcon::}{ActivationReason} enum to describe how the
|
||||
icon was activated.
|
||||
|
||||
In the constructor, we connected our icon's \l
|
||||
{QSystemTrayIcon::}{activated()} signal to our custom \c
|
||||
iconActivated() slot: If the user has clicked the icon using the
|
||||
left mouse button, this function changes the icon image by
|
||||
incrementing the icon combobox's current index, triggering the \c
|
||||
setIcon() slot as mentioned above. If the user activates the icon
|
||||
using the middle mouse button, it calls the custom \c
|
||||
showMessage() slot:
|
||||
|
||||
\snippet desktop/systray/window.cpp 5
|
||||
|
||||
When the \e showMessage() slot is triggered, we first retrieve the
|
||||
message icon depending on the currently chosen message type. The
|
||||
QSystemTrayIcon::MessageIcon enum describes the icon that is shown
|
||||
when a balloon message is displayed. Then we call
|
||||
QSystemTrayIcon's \l {QSystemTrayIcon::}{showMessage()} function
|
||||
to show the message with the title, body, and icon for the time
|
||||
specified in milliseconds.
|
||||
|
||||
QSystemTrayIcon also has the corresponding, \l {QSystemTrayIcon::}
|
||||
{messageClicked()} signal, which is emitted when the user clicks a
|
||||
message displayed by \l {QSystemTrayIcon::}{showMessage()}.
|
||||
|
||||
\snippet desktop/systray/window.cpp 6
|
||||
|
||||
In the constructor, we connected the \l
|
||||
{QSystemTrayIcon::}{messageClicked()} signal to our custom \c
|
||||
messageClicked() slot that simply displays a message using the
|
||||
QMessageBox class.
|
||||
|
||||
QMessageBox provides a modal dialog with a short message, an icon,
|
||||
and buttons laid out depending on the current style. It supports
|
||||
four severity levels: "Question", "Information", "Warning" and
|
||||
"Critical". The easiest way to pop up a message box in Qt is to
|
||||
call one of the associated static functions, e.g.,
|
||||
QMessageBox::information().
|
||||
|
||||
As we mentioned earlier, we reimplement a couple of QWidget's
|
||||
virtual functions:
|
||||
|
||||
\snippet desktop/systray/window.cpp 1
|
||||
|
||||
Our reimplementation of the QWidget::setVisible() function updates
|
||||
the tray icon's menu whenever the editor's appearance changes,
|
||||
e.g., when maximizing or minimizing the main application window,
|
||||
before calling the base class implementation.
|
||||
|
||||
\snippet desktop/systray/window.cpp 2
|
||||
|
||||
We have reimplemented the QWidget::closeEvent() event handler to
|
||||
receive widget close events, showing the above message to the
|
||||
users when they are closing the editor window.
|
||||
|
||||
In addition to the functions and slots discussed above, we have
|
||||
also implemented several convenience functions to simplify the
|
||||
constructor: \c createIconGroupBox(), \c createMessageGroupBox(),
|
||||
\c createActions() and \c createTrayIcon(). See the \l
|
||||
{desktop/systray/window.cpp}{window.cpp} file for details.
|
||||
*/
|
@ -28,6 +28,7 @@
|
||||
/*!
|
||||
\example tools/codecs
|
||||
\title Text Codecs Example
|
||||
\brief How to import and export text using text codecs.
|
||||
|
||||
The Text Codecs example demonstrates the principles behind importing and exporting text
|
||||
using codecs to ensure that characters are encoded properly, avoiding loss of data
|
||||
|
@ -29,6 +29,7 @@
|
||||
\example dombookmarks
|
||||
\title DOM Bookmarks Example
|
||||
\ingroup xml-examples
|
||||
\brief Provides a reader for XML Bookmark Exchange Language files
|
||||
|
||||
The DOM Bookmarks example provides a reader for XML Bookmark Exchange Language (XBEL)
|
||||
files that uses Qt's DOM-based XML API to read and parse the files. The SAX Bookmarks
|
||||
|
@ -29,6 +29,8 @@
|
||||
\example xmlstreamlint
|
||||
\title XML Stream Lint Example
|
||||
\ingroup xml-examples
|
||||
\brief A commandline tool reading from an input file and writing to
|
||||
the standard output file.
|
||||
|
||||
The XML Stream Lint example provides a simple command line utility that
|
||||
accepts a file name as its single argument and writes it to the standard
|
||||
|
@ -25,4 +25,4 @@ QMAKE_NM = $${CROSS_COMPILE}nm -P
|
||||
QMAKE_STRIP = $${CROSS_COMPILE}strip
|
||||
|
||||
contains(DISTRO_OPTS, deb-multi-arch): \
|
||||
PKG_CONFIG = $${CROSS_COMPILE}pkg-config
|
||||
QMAKE_PKG_CONFIG = $${CROSS_COMPILE}pkg-config
|
||||
|
@ -215,12 +215,16 @@ defineTest(qtAddTargetEnv) {
|
||||
|
||||
defineReplace(pkgConfigExecutable) {
|
||||
isEmpty(PKG_CONFIG) {
|
||||
PKG_CONFIG = pkg-config
|
||||
!isEmpty(QMAKE_PKG_CONFIG): \
|
||||
PKG_CONFIG = $$QMAKE_PKG_CONFIG
|
||||
else: \
|
||||
PKG_CONFIG = pkg-config
|
||||
|
||||
sysroot.name = PKG_CONFIG_SYSROOT_DIR
|
||||
sysroot.value = $$PKG_CONFIG_SYSROOT_DIR
|
||||
libdir.name = PKG_CONFIG_LIBDIR
|
||||
libdir.value = $$PKG_CONFIG_LIBDIR
|
||||
QT_TOOL_NAME = pkg-config
|
||||
qtAddToolEnv(PKG_CONFIG, sysroot libdir, SYS)
|
||||
}
|
||||
|
||||
|
@ -493,11 +493,11 @@ static QString xcodeFiletypeForFilename(const QString &filename)
|
||||
return QStringLiteral("sourcecode.cpp.objcpp");
|
||||
if (filename.endsWith(Option::objc_ext))
|
||||
return QStringLiteral("sourcecode.c.objc");
|
||||
if (filename.endsWith(QStringLiteral(".framework")))
|
||||
if (filename.endsWith(QLatin1String(".framework")))
|
||||
return QStringLiteral("wrapper.framework");
|
||||
if (filename.endsWith(QStringLiteral(".a")))
|
||||
if (filename.endsWith(QLatin1String(".a")))
|
||||
return QStringLiteral("archive.ar");
|
||||
if (filename.endsWith(QStringLiteral(".pro")) || filename.endsWith(QStringLiteral(".qrc")))
|
||||
if (filename.endsWith(QLatin1String(".pro")) || filename.endsWith(QLatin1String(".qrc")))
|
||||
return QStringLiteral("text");
|
||||
|
||||
return QString();
|
||||
|
@ -1209,7 +1209,7 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild)
|
||||
}
|
||||
|
||||
bool do_default = true;
|
||||
const QString root = "$(INSTALL_ROOT)";
|
||||
const QString root = installRoot();
|
||||
QString dst;
|
||||
if (installConfigValues.indexOf("no_path") == -1 &&
|
||||
installConfigValues.indexOf("dummy_install") == -1) {
|
||||
|
@ -187,6 +187,7 @@ protected:
|
||||
|
||||
//for installs
|
||||
virtual QString defaultInstall(const QString &);
|
||||
virtual QString installRoot() const;
|
||||
|
||||
//for prl
|
||||
QString prlFileName(bool fixify=true);
|
||||
@ -272,6 +273,9 @@ inline bool MakefileGenerator::noIO() const
|
||||
inline QString MakefileGenerator::defaultInstall(const QString &)
|
||||
{ return QString(""); }
|
||||
|
||||
inline QString MakefileGenerator::installRoot() const
|
||||
{ return QStringLiteral("$(INSTALL_ROOT)"); }
|
||||
|
||||
inline bool MakefileGenerator::findLibraries(bool, bool)
|
||||
{ return true; }
|
||||
|
||||
|
@ -509,6 +509,20 @@ UnixMakefileGenerator::findLibraries(bool linkPrl, bool mergeLflags)
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef Q_OS_WIN // MinGW x-compiling for QNX
|
||||
QString UnixMakefileGenerator::installRoot() const
|
||||
{
|
||||
/*
|
||||
We include a magic prefix on the path to bypass mingw-make's "helpful"
|
||||
intervention in the environment, recognising variables that look like
|
||||
paths and adding the msys system root as prefix, which we don't want.
|
||||
Once this hack has smuggled INSTALL_ROOT into make's variable space, we
|
||||
can trivially strip the magic prefix back off to get the path we meant.
|
||||
*/
|
||||
return QStringLiteral("$(INSTALL_ROOT:@msyshack@%=%)");
|
||||
}
|
||||
#endif
|
||||
|
||||
QString
|
||||
UnixMakefileGenerator::defaultInstall(const QString &t)
|
||||
{
|
||||
@ -517,7 +531,7 @@ UnixMakefileGenerator::defaultInstall(const QString &t)
|
||||
|
||||
enum { NoBundle, SolidBundle, SlicedBundle } bundle = NoBundle;
|
||||
bool isAux = (project->first("TEMPLATE") == "aux");
|
||||
const QString root = "$(INSTALL_ROOT)";
|
||||
const QString root = installRoot();
|
||||
ProStringList &uninst = project->values(ProKey(t + ".uninstall"));
|
||||
QString ret, destdir = project->first("DESTDIR").toQString();
|
||||
if(!destdir.isEmpty() && destdir.right(1) != Option::dir_sep)
|
||||
|
@ -47,6 +47,9 @@ public:
|
||||
protected:
|
||||
virtual bool doPrecompiledHeaders() const { return project->isActiveConfig("precompile_header"); }
|
||||
virtual bool doDepends() const { return !Option::mkfile::do_stub_makefile && MakefileGenerator::doDepends(); }
|
||||
#ifdef Q_OS_WIN // MinGW x-compiling for QNX
|
||||
virtual QString installRoot() const;
|
||||
#endif
|
||||
virtual QString defaultInstall(const QString &);
|
||||
virtual ProString fixLibFlag(const ProString &lib);
|
||||
|
||||
|
@ -58,8 +58,8 @@ struct ContainsPathKey
|
||||
{
|
||||
bool operator()(const QString &val) const
|
||||
{
|
||||
return !(val.endsWith(QStringLiteral("MSBuildToolsPath"))
|
||||
|| val.endsWith(QStringLiteral("MSBuildToolsRoot")));
|
||||
return !(val.endsWith(QLatin1String("MSBuildToolsPath"))
|
||||
|| val.endsWith(QLatin1String("MSBuildToolsRoot")));
|
||||
}
|
||||
};
|
||||
|
||||
@ -136,7 +136,7 @@ bool CeSdkHandler::parseMsBuildFile(QFile *file, CeSdkInfo *info)
|
||||
if (success) {
|
||||
const QString startPattern = QStringLiteral("$(Registry:");
|
||||
const int startIndex = sdkRootPath.indexOf(startPattern);
|
||||
const int endIndex = sdkRootPath.lastIndexOf(QStringLiteral(")"));
|
||||
const int endIndex = sdkRootPath.lastIndexOf(QLatin1Char(')'));
|
||||
const QString regString = sdkRootPath.mid(startIndex + startPattern.size(),
|
||||
endIndex - startIndex - startPattern.size());
|
||||
QSettings sdkRootPathRegistry(regString, QSettings::NativeFormat);
|
||||
@ -175,7 +175,7 @@ QStringList CeSdkHandler::filterMsBuildToolPaths(const QStringList &paths) const
|
||||
QStringList result;
|
||||
foreach (const QString &path, paths) {
|
||||
QDir dirVC110(path);
|
||||
if (path.endsWith(QStringLiteral("bin")))
|
||||
if (path.endsWith(QLatin1String("bin")))
|
||||
dirVC110.cdUp();
|
||||
QDir dirVC120 = dirVC110;
|
||||
if (dirVC110.cd(QStringLiteral("Microsoft.Cpp\\v4.0\\V110\\Platforms")))
|
||||
@ -274,7 +274,7 @@ void CeSdkHandler::retrieveWEC2013SDKs()
|
||||
if (cpuInfo.properties.isEmpty())
|
||||
continue;
|
||||
const PropertyContainer &cpuInfoVal = cpuInfo.properties.first().properties.value(QLatin1String("CpuName"));
|
||||
if (cpuInfoVal.name != QStringLiteral("CpuName"))
|
||||
if (cpuInfoVal.name != QLatin1String("CpuName"))
|
||||
continue;
|
||||
const QString SDKName = QStringLiteral("SDK name");
|
||||
currentSdk.m_name = currentProperty.properties.value(SDKName).value+
|
||||
|
@ -107,6 +107,18 @@ bool MingwMakefileGenerator::writeMakefile(QTextStream &t)
|
||||
return false;
|
||||
}
|
||||
|
||||
QString MingwMakefileGenerator::installRoot() const
|
||||
{
|
||||
/*
|
||||
We include a magic prefix on the path to bypass mingw-make's "helpful"
|
||||
intervention in the environment, recognising variables that look like
|
||||
paths and adding the msys system root as prefix, which we don't want.
|
||||
Once this hack has smuggled INSTALL_ROOT into make's variable space, we
|
||||
can trivially strip the magic prefix back off to get the path we meant.
|
||||
*/
|
||||
return QStringLiteral("$(INSTALL_ROOT:@msyshack@%=%)");
|
||||
}
|
||||
|
||||
void createLdObjectScriptFile(const QString &fileName, const ProStringList &objList)
|
||||
{
|
||||
QString filePath = Option::output_dir + QDir::separator() + fileName;
|
||||
|
@ -45,6 +45,7 @@ protected:
|
||||
virtual QString getManifestFileForRcFile() const;
|
||||
bool writeMakefile(QTextStream &);
|
||||
void init();
|
||||
virtual QString installRoot() const;
|
||||
private:
|
||||
void writeMingwParts(QTextStream &);
|
||||
void writeIncPart(QTextStream &t);
|
||||
|
@ -603,8 +603,8 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProject &tool)
|
||||
|
||||
xml.setIndentString(" ");
|
||||
|
||||
const QString toolsVersion = (tool.SdkVersion == QStringLiteral("10.0")) ? QStringLiteral("14.0")
|
||||
: QStringLiteral("4.0");
|
||||
const QString toolsVersion = (tool.SdkVersion == QLatin1String("10.0")) ? QStringLiteral("14.0")
|
||||
: QStringLiteral("4.0");
|
||||
|
||||
xml << decl("1.0", "utf-8")
|
||||
<< tag("Project")
|
||||
|
@ -105,10 +105,10 @@ NmakeMakefileGenerator::writeMakefile(QTextStream &t)
|
||||
QString arch = project->first("VCPROJ_ARCH").toQString().toLower();
|
||||
QString compiler;
|
||||
QString compilerArch;
|
||||
if (arch == QStringLiteral("arm")) {
|
||||
if (arch == QLatin1String("arm")) {
|
||||
compiler = QStringLiteral("x86_arm");
|
||||
compilerArch = QStringLiteral("arm");
|
||||
} else if (arch == QStringLiteral("x64")) {
|
||||
} else if (arch == QLatin1String("x64")) {
|
||||
const ProStringList hostArch = project->values("QMAKE_TARGET.arch");
|
||||
if (hostArch.contains("x86_64"))
|
||||
compiler = QStringLiteral("amd64");
|
||||
@ -263,7 +263,7 @@ QString NmakeMakefileGenerator::defaultInstall(const QString &t)
|
||||
|
||||
QString ret = Win32MakefileGenerator::defaultInstall(t);
|
||||
|
||||
const QString root = "$(INSTALL_ROOT)";
|
||||
const QString root = installRoot();
|
||||
ProStringList &uninst = project->values(ProKey(t + ".uninstall"));
|
||||
QString targetdir = fileFixify(project->first(ProKey(t + ".path")).toQString(), FileFixifyAbsolute);
|
||||
if(targetdir.right(1) != Option::dir_sep)
|
||||
|
@ -1194,7 +1194,7 @@ void VcprojGenerator::initResourceTool()
|
||||
foreach (const ProString &path, project->values("RC_INCLUDEPATH")) {
|
||||
QString fixedPath = fileFixify(path.toQString());
|
||||
if (fileInfo(fixedPath).isRelative()) {
|
||||
if (fixedPath == QStringLiteral("."))
|
||||
if (fixedPath == QLatin1String("."))
|
||||
fixedPath = QStringLiteral("$(ProjectDir)");
|
||||
else
|
||||
fixedPath.prepend(QStringLiteral("$(ProjectDir)\\"));
|
||||
@ -1329,7 +1329,7 @@ void VcprojGenerator::initDeploymentTool()
|
||||
if (!vcInstallDir.isEmpty()) {
|
||||
vcInstallDir += "\\ce\\dll\\";
|
||||
vcInstallDir += project->values("CE_ARCH").join(QLatin1Char(' '));
|
||||
if (!QFileInfo(vcInstallDir + QDir::separator() + runtimeVersion).exists())
|
||||
if (!QFileInfo::exists(vcInstallDir + QDir::separator() + runtimeVersion))
|
||||
runtime.clear();
|
||||
else
|
||||
runtime = vcInstallDir;
|
||||
|
@ -684,7 +684,7 @@ QString Win32MakefileGenerator::defaultInstall(const QString &t)
|
||||
project->first("TEMPLATE") == "subdirs" || project->first("TEMPLATE") == "aux")
|
||||
return QString();
|
||||
|
||||
const QString root = "$(INSTALL_ROOT)";
|
||||
const QString root = installRoot();
|
||||
ProStringList &uninst = project->values(ProKey(t + ".uninstall"));
|
||||
QString ret;
|
||||
QString targetdir = fileFixify(project->first(ProKey(t + ".path")).toQString(), FileFixifyAbsolute);
|
||||
|
@ -952,7 +952,7 @@ static ProString msvcBinDirToQMakeArch(QString subdir)
|
||||
if (idx >= 0)
|
||||
subdir.remove(0, idx + 1);
|
||||
subdir = subdir.toLower();
|
||||
if (subdir == QStringLiteral("amd64"))
|
||||
if (subdir == QLatin1String("amd64"))
|
||||
return ProString("x86_64");
|
||||
return ProString(subdir);
|
||||
}
|
||||
|
@ -304,8 +304,8 @@ int runQMake(int argc, char **argv)
|
||||
dir = tmp_dir;
|
||||
}
|
||||
#ifdef Q_OS_MAC
|
||||
if (fi.fileName().endsWith(QStringLiteral(".pbxproj"))
|
||||
&& dir.endsWith(QStringLiteral(".xcodeproj")))
|
||||
if (fi.fileName().endsWith(QLatin1String(".pbxproj"))
|
||||
&& dir.endsWith(QLatin1String(".xcodeproj")))
|
||||
dir += QStringLiteral("/..");
|
||||
#endif
|
||||
if(!dir.isNull() && dir != ".")
|
||||
|
@ -19,13 +19,13 @@
|
||||
<property name="IconName" type="s" access="read"/>
|
||||
|
||||
<!--struct containing width, height and image data-->
|
||||
<property name="IconPixmap" type="(iiay)" access="read">
|
||||
<property name="IconPixmap" type="a(iiay)" access="read">
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName" value="QXdgDBusImageVector"/>
|
||||
</property>
|
||||
|
||||
<property name="OverlayIconName" type="s" access="read"/>
|
||||
|
||||
<property name="OverlayIconPixmap" type="(iiay)" access="read">
|
||||
<property name="OverlayIconPixmap" type="a(iiay)" access="read">
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName" value="QXdgDBusImageVector"/>
|
||||
</property>
|
||||
|
||||
@ -34,7 +34,7 @@
|
||||
<property name="AttentionIconName" type="s" access="read"/>
|
||||
|
||||
<!--same definition as image-->
|
||||
<property name="AttentionIconPixmap" type="(iiay)" access="read">
|
||||
<property name="AttentionIconPixmap" type="a(iiay)" access="read">
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName" value="QXdgDBusImageVector"/>
|
||||
</property>
|
||||
|
||||
@ -45,7 +45,7 @@
|
||||
<!-- tooltip data -->
|
||||
|
||||
<!--(iiay) is an image-->
|
||||
<property name="ToolTip" type="(s(iiay)ss)" access="read">
|
||||
<property name="ToolTip" type="(sa(iiay)ss)" access="read">
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName" value="QXdgDBusToolTipStruct"/>
|
||||
</property>
|
||||
|
||||
|
3
src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro
vendored
3
src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro
vendored
@ -15,6 +15,9 @@ DEFINES += HAVE_ATEXIT
|
||||
unix: DEFINES += HAVE_PTHREAD HAVE_SCHED_H HAVE_SCHED_YIELD
|
||||
win32: DEFINES += HB_NO_WIN1256
|
||||
|
||||
#Workaround https://code.google.com/p/android/issues/detail?id=194631
|
||||
android: DEFINES += _POSIX_C_SOURCE=200112L
|
||||
|
||||
INCLUDEPATH += $$PWD/include
|
||||
INCLUDEPATH += $$QT.core.includes
|
||||
|
||||
|
@ -48,6 +48,7 @@ import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.content.res.Configuration;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.Rect;
|
||||
import android.net.LocalServerSocket;
|
||||
import android.net.LocalSocket;
|
||||
import android.os.Build;
|
||||
@ -74,7 +75,6 @@ import android.view.WindowManager;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.widget.PopupMenu;
|
||||
import android.graphics.Rect;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.DataOutputStream;
|
||||
@ -134,6 +134,9 @@ public class QtActivityDelegate
|
||||
private boolean m_keyboardIsVisible = false;
|
||||
public boolean m_backKeyPressedSent = false;
|
||||
private long m_showHideTimeStamp = System.nanoTime();
|
||||
private int m_portraitKeyboardHeight = 0;
|
||||
private int m_landscapeKeyboardHeight = 0;
|
||||
private int m_probeKeyboardHeightDelay = 50; // ms
|
||||
|
||||
public void setFullScreen(boolean enterFullScreen)
|
||||
{
|
||||
@ -244,19 +247,26 @@ public class QtActivityDelegate
|
||||
}, 5);
|
||||
}
|
||||
|
||||
public void showSoftwareKeyboard(int x, int y, int width, int height, int inputHints, int enterKeyType)
|
||||
public void showSoftwareKeyboard(final int x, final int y, final int width, final int height, final int inputHints, final int enterKeyType)
|
||||
{
|
||||
if (m_imm == null)
|
||||
return;
|
||||
|
||||
DisplayMetrics metrics = new DisplayMetrics();
|
||||
m_activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
|
||||
|
||||
// If the screen is in portrait mode than we estimate that keyboard height will not be higher than 2/5 of the screen.
|
||||
// else than we estimate that keyboard height will not be higher than 2/3 of the screen
|
||||
final int visibleHeight;
|
||||
if (metrics.widthPixels < metrics.heightPixels)
|
||||
visibleHeight = m_portraitKeyboardHeight != 0 ? m_portraitKeyboardHeight : metrics.heightPixels * 3 / 5;
|
||||
else
|
||||
visibleHeight = m_landscapeKeyboardHeight != 0 ? m_landscapeKeyboardHeight : metrics.heightPixels / 3;
|
||||
|
||||
if (m_softInputMode != 0) {
|
||||
m_activity.getWindow().setSoftInputMode(m_softInputMode);
|
||||
// softInputIsHidden is true if SOFT_INPUT_STATE_HIDDEN or SOFT_INPUT_STATE_ALWAYS_HIDDEN is set.
|
||||
final boolean softInputIsHidden = (m_softInputMode & WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) != 0;
|
||||
if (softInputIsHidden)
|
||||
return;
|
||||
} else {
|
||||
if (height > m_layout.getHeight() * 2 / 3)
|
||||
if (height > visibleHeight)
|
||||
m_activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||
else
|
||||
m_activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
|
||||
@ -362,6 +372,38 @@ public class QtActivityDelegate
|
||||
//FALLTHROUGH
|
||||
case InputMethodManager.RESULT_UNCHANGED_SHOWN:
|
||||
setKeyboardVisibility(true, System.nanoTime());
|
||||
if (m_softInputMode == 0) {
|
||||
// probe for real keyboard height
|
||||
m_layout.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!m_keyboardIsVisible)
|
||||
return;
|
||||
DisplayMetrics metrics = new DisplayMetrics();
|
||||
m_activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
|
||||
Rect r = new Rect();
|
||||
m_activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
|
||||
if (metrics.heightPixels != r.bottom) {
|
||||
if (metrics.widthPixels > metrics.heightPixels) { // landscape
|
||||
if (m_landscapeKeyboardHeight != r.bottom) {
|
||||
m_landscapeKeyboardHeight = r.bottom;
|
||||
showSoftwareKeyboard(x, y, width, height, inputHints, enterKeyType);
|
||||
}
|
||||
} else {
|
||||
if (m_portraitKeyboardHeight != r.bottom) {
|
||||
m_portraitKeyboardHeight = r.bottom;
|
||||
showSoftwareKeyboard(x, y, width, height, inputHints, enterKeyType);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// no luck ?
|
||||
// maybe the delay was too short, so let's make it longer
|
||||
if (m_probeKeyboardHeightDelay < 1000)
|
||||
m_probeKeyboardHeightDelay *= 2;
|
||||
}
|
||||
}
|
||||
}, m_probeKeyboardHeightDelay);
|
||||
}
|
||||
break;
|
||||
case InputMethodManager.RESULT_HIDDEN:
|
||||
case InputMethodManager.RESULT_UNCHANGED_HIDDEN:
|
||||
|
@ -188,6 +188,58 @@ int BlockSizeManager::blockSize()
|
||||
return m_blockSize;
|
||||
}
|
||||
|
||||
/*! \internal
|
||||
|
||||
*/
|
||||
BlockSizeManagerV2::BlockSizeManagerV2(int iterationCount)
|
||||
: maxBlockSize(iterationCount / (QThreadPool::globalInstance()->maxThreadCount() * 2)),
|
||||
beforeUser(0), afterUser(0),
|
||||
m_blockSize(1)
|
||||
{ }
|
||||
|
||||
// Records the time before user code.
|
||||
void BlockSizeManagerV2::timeBeforeUser()
|
||||
{
|
||||
if (blockSizeMaxed())
|
||||
return;
|
||||
|
||||
beforeUser = getticks();
|
||||
controlPartElapsed.addValue(elapsed(beforeUser, afterUser));
|
||||
}
|
||||
|
||||
// Records the time after user code and adjust the block size if we are spending
|
||||
// to much time in the for control code compared with the user code.
|
||||
void BlockSizeManagerV2::timeAfterUser()
|
||||
{
|
||||
if (blockSizeMaxed())
|
||||
return;
|
||||
|
||||
afterUser = getticks();
|
||||
userPartElapsed.addValue(elapsed(afterUser, beforeUser));
|
||||
|
||||
if (controlPartElapsed.isMedianValid() == false)
|
||||
return;
|
||||
|
||||
if (controlPartElapsed.median() * TargetRatio < userPartElapsed.median())
|
||||
return;
|
||||
|
||||
m_blockSize = qMin(m_blockSize * 2, maxBlockSize);
|
||||
|
||||
#ifdef QTCONCURRENT_FOR_DEBUG
|
||||
qDebug() << QThread::currentThread() << "adjusting block size" << controlPartElapsed.median() << userPartElapsed.median() << m_blockSize;
|
||||
#endif
|
||||
|
||||
// Reset the medians after adjusting the block size so we get
|
||||
// new measurements with the new block size.
|
||||
controlPartElapsed.reset();
|
||||
userPartElapsed.reset();
|
||||
}
|
||||
|
||||
int BlockSizeManagerV2::blockSize()
|
||||
{
|
||||
return m_blockSize;
|
||||
}
|
||||
|
||||
} // namespace QtConcurrent
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -88,6 +88,32 @@ private:
|
||||
Q_DISABLE_COPY(BlockSizeManager)
|
||||
};
|
||||
|
||||
// ### Qt6: Replace BlockSizeManager with V2 implementation
|
||||
class Q_CONCURRENT_EXPORT BlockSizeManagerV2
|
||||
{
|
||||
public:
|
||||
explicit BlockSizeManagerV2(int iterationCount);
|
||||
|
||||
void timeBeforeUser();
|
||||
void timeAfterUser();
|
||||
int blockSize();
|
||||
|
||||
private:
|
||||
inline bool blockSizeMaxed()
|
||||
{
|
||||
return (m_blockSize >= maxBlockSize);
|
||||
}
|
||||
|
||||
const int maxBlockSize;
|
||||
qint64 beforeUser;
|
||||
qint64 afterUser;
|
||||
MedianDouble controlPartElapsed;
|
||||
MedianDouble userPartElapsed;
|
||||
int m_blockSize;
|
||||
|
||||
Q_DISABLE_COPY(BlockSizeManagerV2)
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
class ResultReporter
|
||||
{
|
||||
@ -196,7 +222,7 @@ public:
|
||||
|
||||
ThreadFunctionResult forThreadFunction()
|
||||
{
|
||||
BlockSizeManager blockSizeManager(iterationCount);
|
||||
BlockSizeManagerV2 blockSizeManager(iterationCount);
|
||||
ResultReporter<T> resultReporter(this);
|
||||
|
||||
for(;;) {
|
||||
|
@ -127,6 +127,72 @@ private:
|
||||
bool dirty;
|
||||
};
|
||||
|
||||
// ### Qt6: Drop Median<double> in favor of this faster MedianDouble
|
||||
class MedianDouble
|
||||
{
|
||||
public:
|
||||
enum { BufferSize = 7 };
|
||||
|
||||
MedianDouble()
|
||||
: currentMedian(), currentIndex(0), valid(false), dirty(true)
|
||||
{
|
||||
}
|
||||
|
||||
void reset()
|
||||
{
|
||||
std::fill_n(values, static_cast<int>(BufferSize), 0.0);
|
||||
currentIndex = 0;
|
||||
valid = false;
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
void addValue(double value)
|
||||
{
|
||||
++currentIndex;
|
||||
if (currentIndex == BufferSize) {
|
||||
currentIndex = 0;
|
||||
valid = true;
|
||||
}
|
||||
|
||||
// Only update the cached median value when we have to, that
|
||||
// is when the new value is on then other side of the median
|
||||
// compared to the current value at the index.
|
||||
const double currentIndexValue = values[currentIndex];
|
||||
if ((currentIndexValue > currentMedian && currentMedian > value)
|
||||
|| (currentMedian > currentIndexValue && value > currentMedian)) {
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
values[currentIndex] = value;
|
||||
}
|
||||
|
||||
bool isMedianValid() const
|
||||
{
|
||||
return valid;
|
||||
}
|
||||
|
||||
double median()
|
||||
{
|
||||
if (dirty) {
|
||||
dirty = false;
|
||||
|
||||
double sorted[BufferSize];
|
||||
::memcpy(&sorted, &values, sizeof(sorted));
|
||||
std::sort(sorted, sorted + static_cast<int>(BufferSize));
|
||||
currentMedian = sorted[BufferSize / 2];
|
||||
}
|
||||
|
||||
return currentMedian;
|
||||
}
|
||||
|
||||
private:
|
||||
double values[BufferSize];
|
||||
double currentMedian;
|
||||
int currentIndex;
|
||||
bool valid;
|
||||
bool dirty;
|
||||
};
|
||||
|
||||
} // namespace QtConcurrent
|
||||
|
||||
#endif //Q_QDOC
|
||||
|
@ -156,10 +156,9 @@ for (i = list.begin(); i != list.end(); ++i)
|
||||
QList<QString> list;
|
||||
list << "A" << "B" << "C" << "D";
|
||||
|
||||
QList<QString>::iterator i = list.end();
|
||||
while (i != list.begin()) {
|
||||
--i;
|
||||
*i = (*i).toLower();
|
||||
QList<QString>::reverse_iterator i;
|
||||
for (i = list.rbegin(); i != list.rend(); ++i)
|
||||
*i = i->toLower();
|
||||
}
|
||||
//! [11]
|
||||
|
||||
|
@ -472,9 +472,7 @@
|
||||
|
||||
\image stliterators1.png
|
||||
|
||||
Iterating backward with an STL-style iterator requires us to
|
||||
decrement the iterator \e before we access the item. This
|
||||
requires a \c while loop:
|
||||
Iterating backward with an STL-style iterator is done with reverse iterators:
|
||||
|
||||
\snippet code/doc_src_containers.cpp 11
|
||||
|
||||
|
@ -937,8 +937,8 @@
|
||||
// Older versions (QNX 650) do not support C++11 features
|
||||
// _HAS_* macros are set to 1 by toolchains that actually include
|
||||
// Dinkum C++11 libcpp.
|
||||
# if !__GLIBCXX__
|
||||
# if !_HAS_CPP0X
|
||||
# if !defined(__GLIBCXX__)
|
||||
# if !defined(_HAS_CPP0X) || !_HAS_CPP0X
|
||||
// Disable C++11 features that depend on library support
|
||||
# undef Q_COMPILER_INITIALIZER_LISTS
|
||||
# undef Q_COMPILER_RVALUE_REFS
|
||||
@ -946,10 +946,10 @@
|
||||
# undef Q_COMPILER_UNICODE_STRINGS
|
||||
# undef Q_COMPILER_NOEXCEPT
|
||||
# endif // !_HAS_CPP0X
|
||||
# if !_HAS_NULLPTR_T
|
||||
# if !defined(_HAS_NULLPTR_T) || !_HAS_NULLPTR_T
|
||||
# undef Q_COMPILER_NULLPTR
|
||||
# endif //!_HAS_NULLPTR_T
|
||||
# if !_HAS_CONSTEXPR
|
||||
# if !defined(_HAS_CONSTEXPR) || !_HAS_CONSTEXPR
|
||||
// The libcpp is missing constexpr keywords on important functions like std::numeric_limits<>::min()
|
||||
// Disable constexpr support on QNX even if the compiler supports it
|
||||
# undef Q_COMPILER_CONSTEXPR
|
||||
|
@ -52,7 +52,7 @@ QT_BEGIN_NAMESPACE
|
||||
* qt_version_tag symbol that is present in QtCore. Such symbol is versioned,
|
||||
* so the linker will automatically pull the current Qt version and add it to
|
||||
* the ELF header of the library/application. The assembly produces one section
|
||||
* called ".qtversion" containing two pointer-sized values. The first is a
|
||||
* called ".qtversion" containing two 32-bit values. The first is a
|
||||
* relocation to the qt_version_tag symbol (which is what causes the ELF
|
||||
* version to get used). The second value is the current Qt version at the time
|
||||
* of compilation.
|
||||
@ -64,10 +64,12 @@ QT_BEGIN_NAMESPACE
|
||||
// don't make tags in QtCore, bootstrapped systems or if the user asked not to
|
||||
#elif defined(Q_CC_GNU) && !defined(Q_OS_ANDROID)
|
||||
# if defined(Q_PROCESSOR_X86) && (defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD_KERNEL))
|
||||
# ifdef __LP64__
|
||||
# define QT_VERSION_TAG_RELOC(sym) ".quad " QT_STRINGIFY(QT_MANGLE_NAMESPACE(sym)) "@GOTPCREL\n"
|
||||
# elif defined(Q_PROCESSOR_X86_64) // x32
|
||||
# define QT_VERSION_TAG_RELOC(sym) ".long " QT_STRINGIFY(QT_MANGLE_NAMESPACE(sym)) "@GOTPCREL\n"
|
||||
# if defined(Q_PROCESSOR_X86_64) // x86-64 or x32
|
||||
# if defined(__code_model_large__)
|
||||
# define QT_VERSION_TAG_RELOC(sym) ".quad " QT_STRINGIFY(QT_MANGLE_NAMESPACE(sym)) "@GOT\n"
|
||||
# else
|
||||
# define QT_VERSION_TAG_RELOC(sym) ".long " QT_STRINGIFY(QT_MANGLE_NAMESPACE(sym)) "@GOTPCREL\n"
|
||||
# endif
|
||||
# else // x86
|
||||
# define QT_VERSION_TAG_RELOC(sym) ".long " QT_STRINGIFY(QT_MANGLE_NAMESPACE(sym)) "@GOT\n"
|
||||
# endif
|
||||
|
@ -158,7 +158,11 @@ inline void QDirPrivate::setPath(const QString &path)
|
||||
if (p.endsWith(QLatin1Char('/'))
|
||||
&& p.length() > 1
|
||||
#if defined(Q_OS_WIN)
|
||||
# if defined (Q_OS_WINRT)
|
||||
&& (!(p.toLower() == QDir::rootPath().toLower()))
|
||||
# else
|
||||
&& (!(p.length() == 3 && p.at(1).unicode() == ':' && p.at(0).isLetter()))
|
||||
# endif
|
||||
#endif
|
||||
) {
|
||||
p.truncate(p.length() - 1);
|
||||
@ -891,6 +895,9 @@ bool QDir::cd(const QString &dirName)
|
||||
#if defined (Q_OS_UNIX)
|
||||
//After cleanPath() if path is "/.." or starts with "/../" it means trying to cd above root.
|
||||
if (newPath.startsWith(QLatin1String("/../")) || newPath == QLatin1String("/.."))
|
||||
#elif defined (Q_OS_WINRT)
|
||||
const QString rootPath = QDir::rootPath();
|
||||
if (newPath.size() < rootPath.size() && rootPath.startsWith(newPath))
|
||||
#else
|
||||
/*
|
||||
cleanPath() already took care of replacing '\' with '/'.
|
||||
@ -2193,7 +2200,11 @@ QString QDir::cleanPath(const QString &path)
|
||||
// Strip away last slash except for root directories
|
||||
if (ret.length() > 1 && ret.endsWith(QLatin1Char('/'))) {
|
||||
#if defined (Q_OS_WIN)
|
||||
# if defined(Q_OS_WINRT)
|
||||
if (!((ret.length() == 3 || ret.length() == QDir::rootPath().length()) && ret.at(1) == QLatin1Char(':')))
|
||||
# else
|
||||
if (!(ret.length() == 3 && ret.at(1) == QLatin1Char(':')))
|
||||
# endif
|
||||
#endif
|
||||
ret.chop(1);
|
||||
}
|
||||
|
@ -1101,7 +1101,7 @@ bool QFileInfo::isRoot() const
|
||||
return true;
|
||||
if (d->fileEngine == 0) {
|
||||
if (d->fileEntry.isRoot()) {
|
||||
#if defined(Q_OS_WIN)
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
|
||||
//the path is a drive root, but the drive may not exist
|
||||
//for backward compatibility, return true only if the drive exists
|
||||
if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::ExistsAttribute))
|
||||
|
@ -84,6 +84,11 @@ using namespace Microsoft::WRL::Wrappers;
|
||||
using namespace ABI::Windows::Foundation;
|
||||
using namespace ABI::Windows::Storage;
|
||||
using namespace ABI::Windows::ApplicationModel;
|
||||
|
||||
#if _MSC_VER < 1900
|
||||
#define Q_OS_WINRT_WIN81
|
||||
#endif
|
||||
|
||||
#endif // Q_OS_WINRT
|
||||
|
||||
#ifndef SPI_GETPLATFORMTYPE
|
||||
@ -528,7 +533,7 @@ QString QFileSystemEngine::nativeAbsoluteFilePath(const QString &path)
|
||||
{
|
||||
// can be //server or //server/share
|
||||
QString absPath;
|
||||
#if !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
|
||||
#if !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT_WIN81)
|
||||
QVarLengthArray<wchar_t, MAX_PATH> buf(qMax(MAX_PATH, path.size() + 1));
|
||||
wchar_t *fileName = 0;
|
||||
DWORD retLen = GetFullPathName((wchar_t*)path.utf16(), buf.size(), buf.data(), &fileName);
|
||||
@ -538,6 +543,16 @@ QString QFileSystemEngine::nativeAbsoluteFilePath(const QString &path)
|
||||
}
|
||||
if (retLen != 0)
|
||||
absPath = QString::fromWCharArray(buf.data(), retLen);
|
||||
# if defined(Q_OS_WINRT)
|
||||
// Win32 returns eg C:/ as root directory with a trailing /.
|
||||
// WinRT returns the sandbox root without /.
|
||||
// Also C:/../.. returns C:/ on Win32, while for WinRT it steps outside the package
|
||||
// and goes beyond package root. Hence force the engine to stay inside
|
||||
// the package.
|
||||
const QString rootPath = QDir::toNativeSeparators(QDir::rootPath());
|
||||
if (absPath.size() < rootPath.size() && rootPath.startsWith(absPath))
|
||||
absPath = rootPath;
|
||||
# endif // Q_OS_WINRT
|
||||
#elif !defined(Q_OS_WINCE)
|
||||
if (QDir::isRelativePath(path))
|
||||
absPath = QDir::toNativeSeparators(QDir::cleanPath(QDir::currentPath() + QLatin1Char('/') + path));
|
||||
@ -575,7 +590,7 @@ QFileSystemEntry QFileSystemEngine::absoluteName(const QFileSystemEntry &entry)
|
||||
ret = entry.filePath();
|
||||
#endif
|
||||
} else {
|
||||
#ifndef Q_OS_WINRT
|
||||
#ifndef Q_OS_WINRT_WIN81
|
||||
ret = QDir::cleanPath(QDir::currentPath() + QLatin1Char('/') + entry.filePath());
|
||||
#else
|
||||
// Some WinRT APIs do not support absolute paths (due to sandboxing).
|
||||
@ -1224,8 +1239,8 @@ QString QFileSystemEngine::rootPath()
|
||||
if (FAILED(item->get_Path(finalWinPath.GetAddressOf())))
|
||||
return ret;
|
||||
|
||||
ret = QDir::fromNativeSeparators(QString::fromWCharArray(finalWinPath.GetRawBuffer(nullptr)));
|
||||
|
||||
const QString qtWinPath = QDir::fromNativeSeparators(QString::fromWCharArray(finalWinPath.GetRawBuffer(nullptr)));
|
||||
ret = qtWinPath.endsWith(QLatin1Char('/')) ? qtWinPath : qtWinPath + QLatin1Char('/');
|
||||
#else
|
||||
QString ret = QString::fromLatin1(qgetenv("SystemDrive"));
|
||||
if (ret.isEmpty())
|
||||
@ -1343,7 +1358,7 @@ bool QFileSystemEngine::setCurrentPath(const QFileSystemEntry &entry)
|
||||
if(!(meta.exists() && meta.isDirectory()))
|
||||
return false;
|
||||
|
||||
#if !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
|
||||
#if !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT_WIN81)
|
||||
//TODO: this should really be using nativeFilePath(), but that returns a path in long format \\?\c:\foo
|
||||
//which causes many problems later on when it's returned through currentPath()
|
||||
return ::SetCurrentDirectory(reinterpret_cast<const wchar_t*>(QDir::toNativeSeparators(entry.filePath()).utf16())) != 0;
|
||||
@ -1356,7 +1371,7 @@ bool QFileSystemEngine::setCurrentPath(const QFileSystemEntry &entry)
|
||||
QFileSystemEntry QFileSystemEngine::currentPath()
|
||||
{
|
||||
QString ret;
|
||||
#if !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
|
||||
#if !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT_WIN81)
|
||||
DWORD size = 0;
|
||||
wchar_t currentName[PATH_MAX];
|
||||
size = ::GetCurrentDirectory(PATH_MAX, currentName);
|
||||
@ -1372,17 +1387,17 @@ QFileSystemEntry QFileSystemEngine::currentPath()
|
||||
}
|
||||
if (ret.length() >= 2 && ret[1] == QLatin1Char(':'))
|
||||
ret[0] = ret.at(0).toUpper(); // Force uppercase drive letters.
|
||||
#else // !Q_OS_WINCE && !Q_OS_WINRT
|
||||
#else // !Q_OS_WINCE && !Q_OS_WINRT_WIN81
|
||||
//TODO - a race condition exists when using currentPath / setCurrentPath from multiple threads
|
||||
if (qfsPrivateCurrentDir.isEmpty())
|
||||
#ifndef Q_OS_WINRT
|
||||
#ifndef Q_OS_WINRT_WIN81
|
||||
qfsPrivateCurrentDir = QCoreApplication::applicationDirPath();
|
||||
#else
|
||||
qfsPrivateCurrentDir = QDir::rootPath();
|
||||
#endif
|
||||
|
||||
ret = qfsPrivateCurrentDir;
|
||||
#endif // Q_OS_WINCE || Q_OS_WINRT
|
||||
#endif // Q_OS_WINCE || Q_OS_WINRT_WIN81
|
||||
return QFileSystemEntry(ret, QFileSystemEntry::FromNativePath());
|
||||
}
|
||||
|
||||
|
@ -172,6 +172,12 @@ void QFileSystemEntry::resolveNativeFilePath() const
|
||||
m_nativeFilePath.remove(0,1);
|
||||
if (m_nativeFilePath.isEmpty())
|
||||
m_nativeFilePath.append(QLatin1Char('.'));
|
||||
// WinRT/MSVC2015 allows a maximum of 256 characters for a filepath
|
||||
// unless //?/ is prepended which extends the rule to have a maximum
|
||||
// of 256 characters in the filename plus the preprending path
|
||||
#if _MSC_VER >= 1900
|
||||
m_nativeFilePath.prepend("\\\\?\\");
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -289,9 +295,13 @@ bool QFileSystemEntry::isAbsolute() const
|
||||
bool QFileSystemEntry::isDriveRoot() const
|
||||
{
|
||||
resolveFilePath();
|
||||
#ifndef Q_OS_WINRT
|
||||
return (m_filePath.length() == 3
|
||||
&& m_filePath.at(0).isLetter() && m_filePath.at(1) == QLatin1Char(':')
|
||||
&& m_filePath.at(2) == QLatin1Char('/'));
|
||||
#else // !Q_OS_WINRT
|
||||
return m_filePath == QDir::rootPath();
|
||||
#endif // !Q_OS_WINRT
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -73,7 +73,8 @@ QFileSystemIterator::QFileSystemIterator(const QFileSystemEntry &entry, QDir::Fi
|
||||
if (!nativePath.endsWith(QLatin1Char('\\')))
|
||||
nativePath.append(QLatin1Char('\\'));
|
||||
nativePath.append(QLatin1Char('*'));
|
||||
#ifdef Q_OS_WINRT
|
||||
// In MSVC2015+ case we prepend //?/ for longer file-name support
|
||||
#if defined(Q_OS_WINRT) && _MSC_VER < 1900
|
||||
if (nativePath.startsWith(QLatin1Char('\\')))
|
||||
nativePath.remove(0, 1);
|
||||
#endif
|
||||
|
@ -1043,7 +1043,7 @@ uchar *QFSFileEnginePrivate::map(qint64 offset, qint64 size,
|
||||
offsetHi, offsetLo, size + extra);
|
||||
#else
|
||||
LPVOID mapAddress = ::MapViewOfFileFromApp(mapHandle, access,
|
||||
(ULONG64(offsetHi) << 32) + offsetLo, size);
|
||||
(ULONG64(offsetHi) << 32) + offsetLo, size + extra);
|
||||
#endif
|
||||
if (mapAddress) {
|
||||
uchar *address = extra + static_cast<uchar*>(mapAddress);
|
||||
|
@ -183,16 +183,18 @@ void QCoreApplicationPrivate::processCommandLineArguments()
|
||||
{
|
||||
int j = argc ? 1 : 0;
|
||||
for (int i = 1; i < argc; ++i) {
|
||||
if (argv[i] && *argv[i] != '-') {
|
||||
if (!argv[i])
|
||||
continue;
|
||||
if (*argv[i] != '-') {
|
||||
argv[j++] = argv[i];
|
||||
continue;
|
||||
}
|
||||
QByteArray arg = argv[i];
|
||||
if (arg.startsWith("--"))
|
||||
arg.remove(0, 1);
|
||||
if (arg.startsWith("-qmljsdebugger=")) {
|
||||
qmljs_debug_arguments = QString::fromLocal8Bit(arg.right(arg.length() - 15));
|
||||
} else if (arg == "-qmljsdebugger" && i < argc - 1) {
|
||||
const char *arg = argv[i];
|
||||
if (arg[1] == '-') // startsWith("--")
|
||||
++arg;
|
||||
if (strncmp(arg, "-qmljsdebugger=", 15) == 0) {
|
||||
qmljs_debug_arguments = QString::fromLocal8Bit(arg + 15);
|
||||
} else if (strcmp(arg, "-qmljsdebugger") == 0 && i < argc - 1) {
|
||||
++i;
|
||||
qmljs_debug_arguments = QString::fromLocal8Bit(argv[i]);
|
||||
} else {
|
||||
|
@ -2706,10 +2706,11 @@ qint64 QDateTimePrivate::toMSecsSinceEpoch() const
|
||||
}
|
||||
|
||||
case Qt::TimeZone:
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
#ifdef QT_BOOTSTRAPPED
|
||||
break;
|
||||
#else
|
||||
return zoneMSecsToEpochMSecs(m_msecs, m_timeZone);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
Q_UNREACHABLE();
|
||||
return 0;
|
||||
@ -3206,7 +3207,9 @@ QString QDateTime::timeZoneAbbreviation() const
|
||||
case Qt::OffsetFromUTC:
|
||||
return QTimeZonePrivate::utcQString() + toOffsetString(Qt::ISODate, d->m_offsetFromUtc);
|
||||
case Qt::TimeZone:
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
#ifdef QT_BOOTSTRAPPED
|
||||
break;
|
||||
#else
|
||||
return d->m_timeZone.d->abbreviation(d->toMSecsSinceEpoch());
|
||||
#endif // QT_BOOTSTRAPPED
|
||||
case Qt::LocalTime: {
|
||||
@ -3237,7 +3240,9 @@ bool QDateTime::isDaylightTime() const
|
||||
case Qt::OffsetFromUTC:
|
||||
return false;
|
||||
case Qt::TimeZone:
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
#ifdef QT_BOOTSTRAPPED
|
||||
break;
|
||||
#else
|
||||
return d->m_timeZone.d->isDaylightTime(toMSecsSinceEpoch());
|
||||
#endif // QT_BOOTSTRAPPED
|
||||
case Qt::LocalTime: {
|
||||
@ -4829,10 +4834,8 @@ QDataStream &operator<<(QDataStream &out, const QDateTime &dateTime)
|
||||
out << (qint8)QDateTimePrivate::OffsetFromUTC;
|
||||
break;
|
||||
case Qt::TimeZone:
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
out << (qint8)QDateTimePrivate::TimeZone;
|
||||
break;
|
||||
#endif // QT_BOOTSTRAPPED
|
||||
case Qt::LocalTime:
|
||||
out << (qint8)QDateTimePrivate::LocalUnknown;
|
||||
break;
|
||||
@ -4905,10 +4908,11 @@ QDataStream &operator>>(QDataStream &in, QDateTime &dateTime)
|
||||
spec = Qt::OffsetFromUTC;
|
||||
break;
|
||||
case QDateTimePrivate::TimeZone:
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
spec = Qt::TimeZone;
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
// FIXME: need to use a different constructor !
|
||||
#endif
|
||||
break;
|
||||
#endif // QT_BOOTSTRAPPED
|
||||
case QDateTimePrivate::LocalUnknown:
|
||||
case QDateTimePrivate::LocalStandard:
|
||||
case QDateTimePrivate::LocalDST:
|
||||
@ -4964,8 +4968,8 @@ QDebug operator<<(QDebug dbg, const QDateTime &date)
|
||||
case Qt::TimeZone:
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
dbg << ' ' << date.timeZone().id();
|
||||
break;
|
||||
#endif // QT_BOOTSTRAPPED
|
||||
break;
|
||||
case Qt::LocalTime:
|
||||
break;
|
||||
}
|
||||
|
@ -5733,37 +5733,42 @@ static QString detachAndConvertCase(T &str, QStringIterator it)
|
||||
Q_ASSERT(!str.isEmpty());
|
||||
QString s = qMove(str); // will copy if T is const QString
|
||||
QChar *pp = s.begin() + it.index(); // will detach if necessary
|
||||
uint uc = it.nextUnchecked();
|
||||
forever {
|
||||
|
||||
do {
|
||||
uint uc = it.nextUnchecked();
|
||||
|
||||
const QUnicodeTables::Properties *prop = qGetProp(uc);
|
||||
signed short caseDiff = Traits::caseDiff(prop);
|
||||
|
||||
if (Q_UNLIKELY(Traits::caseSpecial(prop))) {
|
||||
// slow path: the string is growing
|
||||
const ushort *specialCase = specialCaseMap + caseDiff;
|
||||
ushort length = *specialCase++;
|
||||
int inpos = it.index() - 1;
|
||||
int outpos = pp - s.constBegin();
|
||||
|
||||
s.replace(outpos, 1, reinterpret_cast<const QChar *>(specialCase), length);
|
||||
pp = const_cast<QChar *>(s.constBegin()) + outpos + length;
|
||||
if (Q_LIKELY(length == 1)) {
|
||||
*pp++ = QChar(*specialCase);
|
||||
} else {
|
||||
// slow path: the string is growing
|
||||
int inpos = it.index() - 1;
|
||||
int outpos = pp - s.constBegin();
|
||||
|
||||
// do we need to adjust the input iterator too?
|
||||
// if it is pointing to s's data, str is empty
|
||||
if (str.isEmpty())
|
||||
it = QStringIterator(s.constBegin(), inpos + length, s.constEnd());
|
||||
} else if (QChar::requiresSurrogates(uc)) {
|
||||
*pp++ = QChar::highSurrogate(uc + caseDiff);
|
||||
s.replace(outpos, 1, reinterpret_cast<const QChar *>(specialCase), length);
|
||||
pp = const_cast<QChar *>(s.constBegin()) + outpos + length;
|
||||
|
||||
// do we need to adjust the input iterator too?
|
||||
// if it is pointing to s's data, str is empty
|
||||
if (str.isEmpty())
|
||||
it = QStringIterator(s.constBegin(), inpos + length, s.constEnd());
|
||||
}
|
||||
} else if (Q_UNLIKELY(QChar::requiresSurrogates(uc))) {
|
||||
// so far, case convertion never changes planes (guaranteed by the qunicodetables generator)
|
||||
pp++;
|
||||
*pp++ = QChar::lowSurrogate(uc + caseDiff);
|
||||
} else {
|
||||
*pp++ = QChar(uc + caseDiff);
|
||||
}
|
||||
} while (it.hasNext());
|
||||
|
||||
if (!it.hasNext())
|
||||
return s;
|
||||
|
||||
uc = it.nextUnchecked();
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
template <typename Traits, typename T>
|
||||
@ -5776,12 +5781,13 @@ static QString convertCase(T &str)
|
||||
while (e != p && e[-1].isHighSurrogate())
|
||||
--e;
|
||||
|
||||
const QUnicodeTables::Properties *prop;
|
||||
QStringIterator it(p, e);
|
||||
for ( ; it.hasNext(); it.advanceUnchecked()) {
|
||||
prop = qGetProp(it.peekNextUnchecked());
|
||||
if (Traits::caseDiff(prop))
|
||||
while (it.hasNext()) {
|
||||
uint uc = it.nextUnchecked();
|
||||
if (Traits::caseDiff(qGetProp(uc))) {
|
||||
it.recedeUnchecked();
|
||||
return detachAndConvertCase<Traits>(str, it);
|
||||
}
|
||||
}
|
||||
return qMove(str);
|
||||
}
|
||||
|
@ -286,6 +286,7 @@ private slots:
|
||||
|
||||
signals:
|
||||
void dispatchStatusChanged();
|
||||
void spyHooksFinished(const QDBusMessage &msg);
|
||||
void messageNeedsSending(QDBusPendingCallPrivate *pcall, void *msg, int timeout = -1);
|
||||
void signalNeedsConnecting(const QString &key, const QDBusConnectionPrivate::SignalHook &hook);
|
||||
bool signalNeedsDisconnecting(const QString &key, const QDBusConnectionPrivate::SignalHook &hook);
|
||||
|
@ -126,8 +126,7 @@ void qdbusDefaultThreadDebug(int action, int condition, QDBusConnectionPrivate *
|
||||
qdbusThreadDebugFunc qdbusThreadDebug = 0;
|
||||
#endif
|
||||
|
||||
typedef void (*QDBusSpyHook)(const QDBusMessage&);
|
||||
typedef QVarLengthArray<QDBusSpyHook, 4> QDBusSpyHookList;
|
||||
typedef QVarLengthArray<QDBusSpyCallEvent::Hook, 4> QDBusSpyHookList;
|
||||
Q_GLOBAL_STATIC(QDBusSpyHookList, qDBusSpyHookList)
|
||||
|
||||
extern "C" {
|
||||
@ -467,12 +466,29 @@ static QStringList matchArgsForService(const QString &service, QDBusServiceWatch
|
||||
}
|
||||
|
||||
|
||||
extern Q_DBUS_EXPORT void qDBusAddSpyHook(QDBusSpyHook);
|
||||
void qDBusAddSpyHook(QDBusSpyHook hook)
|
||||
extern Q_DBUS_EXPORT void qDBusAddSpyHook(QDBusSpyCallEvent::Hook);
|
||||
void qDBusAddSpyHook(QDBusSpyCallEvent::Hook hook)
|
||||
{
|
||||
qDBusSpyHookList()->append(hook);
|
||||
}
|
||||
|
||||
QDBusSpyCallEvent::~QDBusSpyCallEvent()
|
||||
{
|
||||
// Reinsert the message into the processing queue for the connection.
|
||||
// This is done in the destructor so the message is reinserted even if
|
||||
// QCoreApplication is destroyed.
|
||||
QDBusConnectionPrivate *d = static_cast<QDBusConnectionPrivate *>(const_cast<QObject *>(sender()));
|
||||
qDBusDebug() << d << "message spies done for" << msg;
|
||||
emit d->spyHooksFinished(msg);
|
||||
}
|
||||
|
||||
void QDBusSpyCallEvent::placeMetaCall(QObject *)
|
||||
{
|
||||
// call the spy hook list
|
||||
for (int i = 0; i < hookCount; ++i)
|
||||
hooks[i](msg);
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
static DBusHandlerResult
|
||||
qDBusSignalFilter(DBusConnection *connection, DBusMessage *message, void *data)
|
||||
@ -494,16 +510,11 @@ qDBusSignalFilter(DBusConnection *connection, DBusMessage *message, void *data)
|
||||
|
||||
bool QDBusConnectionPrivate::handleMessage(const QDBusMessage &amsg)
|
||||
{
|
||||
const QDBusSpyHookList *list = qDBusSpyHookList();
|
||||
for (int i = 0; list && i < list->size(); ++i) {
|
||||
qDBusDebug() << "calling the message spy hook";
|
||||
(*(*list)[i])(amsg);
|
||||
}
|
||||
|
||||
if (!ref.load())
|
||||
return false;
|
||||
if (!dispatchEnabled && !QDBusMessagePrivate::isLocal(amsg)) {
|
||||
// queue messages only, we'll handle them later
|
||||
qDBusDebug() << this << "delivery is suspended";
|
||||
pendingMessages << amsg;
|
||||
return amsg.type() == QDBusMessage::MethodCallMessage;
|
||||
}
|
||||
@ -515,6 +526,15 @@ bool QDBusConnectionPrivate::handleMessage(const QDBusMessage &amsg)
|
||||
// let them see the signal too
|
||||
return false;
|
||||
case QDBusMessage::MethodCallMessage:
|
||||
// run it through the spy filters (if any) before the regular processing
|
||||
if (Q_UNLIKELY(qDBusSpyHookList.exists()) && qApp) {
|
||||
const QDBusSpyHookList &list = *qDBusSpyHookList;
|
||||
qDBusDebug() << this << "invoking message spies";
|
||||
QCoreApplication::postEvent(qApp, new QDBusSpyCallEvent(this, QDBusConnection(this),
|
||||
amsg, list.constData(), list.size()));
|
||||
return true;
|
||||
}
|
||||
|
||||
handleObjectCall(amsg);
|
||||
return true;
|
||||
case QDBusMessage::ReplyMessage:
|
||||
@ -986,6 +1006,8 @@ QDBusConnectionPrivate::QDBusConnectionPrivate(QObject *p)
|
||||
QDBusMetaTypeId::init();
|
||||
connect(this, &QDBusConnectionPrivate::dispatchStatusChanged,
|
||||
this, &QDBusConnectionPrivate::doDispatch, Qt::QueuedConnection);
|
||||
connect(this, &QDBusConnectionPrivate::spyHooksFinished,
|
||||
this, &QDBusConnectionPrivate::handleObjectCall, Qt::QueuedConnection);
|
||||
connect(this, &QDBusConnectionPrivate::messageNeedsSending,
|
||||
this, &QDBusConnectionPrivate::sendInternal);
|
||||
connect(this, &QDBusConnectionPrivate::signalNeedsConnecting,
|
||||
@ -1097,8 +1119,10 @@ void QDBusConnectionPrivate::doDispatch()
|
||||
// dispatch previously queued messages
|
||||
PendingMessageList::Iterator it = pendingMessages.begin();
|
||||
PendingMessageList::Iterator end = pendingMessages.end();
|
||||
for ( ; it != end; ++it)
|
||||
for ( ; it != end; ++it) {
|
||||
qDBusDebug() << this << "dequeueing message" << *it;
|
||||
handleMessage(qMove(*it));
|
||||
}
|
||||
pendingMessages.clear();
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2016 Intel Corporation.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the QtDBus module of the Qt Toolkit.
|
||||
@ -71,6 +72,7 @@
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QDBusConnectionPrivate;
|
||||
class QDBusMessage;
|
||||
|
||||
// Really private structs used by qdbusintegrator.cpp
|
||||
// Things that aren't used by any other file
|
||||
@ -139,6 +141,23 @@ private:
|
||||
bool handled;
|
||||
};
|
||||
|
||||
class QDBusSpyCallEvent : public QMetaCallEvent
|
||||
{
|
||||
public:
|
||||
typedef void (*Hook)(const QDBusMessage&);
|
||||
QDBusSpyCallEvent(QDBusConnectionPrivate *cp, const QDBusConnection &c, const QDBusMessage &msg,
|
||||
const Hook *hooks, int count)
|
||||
: QMetaCallEvent(0, 0, Q_NULLPTR, cp, 0), conn(c), msg(msg), hooks(hooks), hookCount(count)
|
||||
{}
|
||||
~QDBusSpyCallEvent();
|
||||
void placeMetaCall(QObject *) Q_DECL_OVERRIDE;
|
||||
|
||||
QDBusConnection conn; // keeps the refcount in QDBusConnectionPrivate up
|
||||
QDBusMessage msg;
|
||||
const Hook *hooks;
|
||||
int hookCount;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
Q_DECLARE_METATYPE(QDBusSlotCache)
|
||||
|
@ -1220,30 +1220,32 @@ void QGuiApplicationPrivate::createPlatformIntegration()
|
||||
|
||||
int j = argc ? 1 : 0;
|
||||
for (int i=1; i<argc; i++) {
|
||||
if (argv[i] && *argv[i] != '-') {
|
||||
if (!argv[i])
|
||||
continue;
|
||||
if (*argv[i] != '-') {
|
||||
argv[j++] = argv[i];
|
||||
continue;
|
||||
}
|
||||
const bool isXcb = platformName == "xcb";
|
||||
QByteArray arg = argv[i];
|
||||
if (arg.startsWith("--"))
|
||||
arg.remove(0, 1);
|
||||
if (arg == "-platformpluginpath") {
|
||||
const char *arg = argv[i];
|
||||
if (arg[1] == '-') // startsWith("--")
|
||||
++arg;
|
||||
if (strcmp(arg, "-platformpluginpath") == 0) {
|
||||
if (++i < argc)
|
||||
platformPluginPath = QString::fromLocal8Bit(argv[i]);
|
||||
} else if (arg == "-platform") {
|
||||
} else if (strcmp(arg, "-platform") == 0) {
|
||||
if (++i < argc)
|
||||
platformName = argv[i];
|
||||
} else if (arg == "-platformtheme") {
|
||||
} else if (strcmp(arg, "-platformtheme") == 0) {
|
||||
if (++i < argc)
|
||||
platformThemeName = QString::fromLocal8Bit(argv[i]);
|
||||
} else if (arg == "-qwindowgeometry" || (isXcb && arg == "-geometry")) {
|
||||
} else if (strcmp(arg, "-qwindowgeometry") == 0 || (isXcb && strcmp(arg, "-geometry") == 0)) {
|
||||
if (++i < argc)
|
||||
windowGeometrySpecification = QWindowGeometrySpecification::fromArgument(argv[i]);
|
||||
} else if (arg == "-qwindowtitle" || (isXcb && arg == "-title")) {
|
||||
} else if (strcmp(arg, "-qwindowtitle") == 0 || (isXcb && strcmp(arg, "-title") == 0)) {
|
||||
if (++i < argc)
|
||||
firstWindowTitle = QString::fromLocal8Bit(argv[i]);
|
||||
} else if (arg == "-qwindowicon" || (isXcb && arg == "-icon")) {
|
||||
} else if (strcmp(arg, "-qwindowicon") == 0 || (isXcb && strcmp(arg, "-icon") == 0)) {
|
||||
if (++i < argc) {
|
||||
icon = QString::fromLocal8Bit(argv[i]);
|
||||
}
|
||||
@ -1319,20 +1321,22 @@ void QGuiApplicationPrivate::init()
|
||||
QString s;
|
||||
int j = argc ? 1 : 0;
|
||||
for (int i=1; i<argc; i++) {
|
||||
if (argv[i] && *argv[i] != '-') {
|
||||
if (!argv[i])
|
||||
continue;
|
||||
if (*argv[i] != '-') {
|
||||
argv[j++] = argv[i];
|
||||
continue;
|
||||
}
|
||||
QByteArray arg = argv[i];
|
||||
if (arg.startsWith("--"))
|
||||
arg.remove(0, 1);
|
||||
if (arg == "-plugin") {
|
||||
const char *arg = argv[i];
|
||||
if (arg[1] == '-') // startsWith("--")
|
||||
++arg;
|
||||
if (strcmp(arg, "-plugin") == 0) {
|
||||
if (++i < argc)
|
||||
pluginList << argv[i];
|
||||
} else if (arg == "-reverse") {
|
||||
} else if (strcmp(arg, "-reverse") == 0) {
|
||||
force_reverse = true;
|
||||
#ifdef Q_OS_MAC
|
||||
} else if (arg.startsWith("-psn_")) {
|
||||
} else if (strncmp(arg, "-psn_", 5) == 0) {
|
||||
// eat "-psn_xxxx" on Mac, which is passed when starting an app from Finder.
|
||||
// special hack to change working directory (for an app bundle) when running from finder
|
||||
if (QDir::currentPath() == QLatin1String("/")) {
|
||||
@ -1344,7 +1348,7 @@ void QGuiApplicationPrivate::init()
|
||||
}
|
||||
#endif
|
||||
#ifndef QT_NO_SESSIONMANAGER
|
||||
} else if (arg == "-session" && i < argc-1) {
|
||||
} else if (strcmp(arg, "-session") == 0 && i < argc - 1) {
|
||||
++i;
|
||||
if (argv[i] && *argv[i]) {
|
||||
session_id = QString::fromLatin1(argv[i]);
|
||||
@ -1356,11 +1360,11 @@ void QGuiApplicationPrivate::init()
|
||||
is_session_restored = true;
|
||||
}
|
||||
#endif
|
||||
} else if (arg == "-testability") {
|
||||
} else if (strcmp(arg, "-testability") == 0) {
|
||||
loadTestability = true;
|
||||
} else if (arg.indexOf("-style=", 0) != -1) {
|
||||
s = QString::fromLocal8Bit(arg.right(arg.length() - 7).toLower());
|
||||
} else if (arg == "-style" && i < argc-1) {
|
||||
} else if (strncmp(arg, "-style=", 7) == 0) {
|
||||
s = QString::fromLocal8Bit(arg + 7).toLower();
|
||||
} else if (strcmp(arg, "-style") == 0 && i < argc - 1) {
|
||||
s = QString::fromLocal8Bit(argv[++i]).toLower();
|
||||
} else {
|
||||
argv[j++] = argv[i];
|
||||
|
@ -238,6 +238,7 @@ bool QPlatformGraphicsBufferHelper::bindSWToTexture(const QPlatformGraphicsBuffe
|
||||
#else
|
||||
Q_UNUSED(graphicsBuffer)
|
||||
Q_UNUSED(swizzleRandB)
|
||||
Q_UNUSED(premultipliedB)
|
||||
Q_UNUSED(subRect)
|
||||
return false;
|
||||
#endif // QT_NO_OPENGL
|
||||
|
@ -99,13 +99,6 @@ QOpenGL2PaintEngineExPrivate::~QOpenGL2PaintEngineExPrivate()
|
||||
{
|
||||
delete shaderManager;
|
||||
|
||||
while (pathCaches.size()) {
|
||||
QVectorPath::CacheEntry *e = *(pathCaches.constBegin());
|
||||
e->cleanup(e->engine, e->data);
|
||||
e->data = 0;
|
||||
e->engine = 0;
|
||||
}
|
||||
|
||||
if (elementIndicesVBOId != 0) {
|
||||
funcs.glDeleteBuffers(1, &elementIndicesVBOId);
|
||||
elementIndicesVBOId = 0;
|
||||
@ -298,8 +291,6 @@ void QOpenGL2PaintEngineExPrivate::updateBrushTexture()
|
||||
}
|
||||
|
||||
updateTexture(QT_BRUSH_TEXTURE_UNIT, currentBrushImage, wrapMode, filterMode, ForceUpdate);
|
||||
|
||||
textureInvertedY = false;
|
||||
}
|
||||
brushTextureDirty = false;
|
||||
}
|
||||
@ -415,11 +406,7 @@ void QOpenGL2PaintEngineExPrivate::updateBrushUniforms()
|
||||
dy = 0;
|
||||
}
|
||||
QTransform gl_to_qt(1, 0, 0, m22, 0, dy);
|
||||
QTransform inv_matrix;
|
||||
if (style == Qt::TexturePattern && textureInvertedY == -1)
|
||||
inv_matrix = gl_to_qt * (QTransform(1, 0, 0, -1, 0, currentBrush.texture().height()) * brushQTransform * matrix).inverted() * translate;
|
||||
else
|
||||
inv_matrix = gl_to_qt * (brushQTransform * matrix).inverted() * translate;
|
||||
QTransform inv_matrix = gl_to_qt * (brushQTransform * matrix).inverted() * translate;
|
||||
|
||||
shaderManager->currentProgram()->setUniformValue(location(QOpenGLEngineShaderManager::BrushTransform), inv_matrix);
|
||||
shaderManager->currentProgram()->setUniformValue(location(QOpenGLEngineShaderManager::BrushTexture), QT_BRUSH_TEXTURE_UNIT);
|
||||
|
@ -315,14 +315,9 @@ public:
|
||||
bool needsSync;
|
||||
bool multisamplingAlwaysEnabled;
|
||||
|
||||
GLfloat depthRange[2];
|
||||
|
||||
float textureInvertedY;
|
||||
|
||||
QTriangulatingStroker stroker;
|
||||
QDashedStrokeProcessor dasher;
|
||||
|
||||
QSet<QVectorPath::CacheEntry *> pathCaches;
|
||||
QVector<GLuint> unusedVBOSToClean;
|
||||
QVector<GLuint> unusedIBOSToClean;
|
||||
|
||||
|
@ -391,7 +391,7 @@ void QPlatformBackingStore::composeAndFlush(QWindow *window, const QRegion ®i
|
||||
// The backingstore is for the entire tlw.
|
||||
// In case of native children offset tells the position relative to the tlw.
|
||||
const QRect srcRect = toBottomLeftRect(deviceWindowRect.translated(offset), d_ptr->textureSize.height());
|
||||
const QMatrix3x3 source = QOpenGLTextureBlitter::sourceTransform(deviceRect(srcRect, window),
|
||||
const QMatrix3x3 source = QOpenGLTextureBlitter::sourceTransform(srcRect,
|
||||
d_ptr->textureSize,
|
||||
origin);
|
||||
d_ptr->blitter->blit(textureId, QMatrix4x4(), source);
|
||||
|
@ -195,65 +195,65 @@ private:
|
||||
mutable int fast_glyph_count;
|
||||
};
|
||||
|
||||
virtual QFontEngine::FaceId faceId() const Q_DECL_OVERRIDE;
|
||||
virtual QFontEngine::Properties properties() const Q_DECL_OVERRIDE;
|
||||
virtual QFixed emSquareSize() const Q_DECL_OVERRIDE;
|
||||
virtual bool supportsSubPixelPositions() const Q_DECL_OVERRIDE
|
||||
QFontEngine::FaceId faceId() const Q_DECL_OVERRIDE;
|
||||
QFontEngine::Properties properties() const Q_DECL_OVERRIDE;
|
||||
QFixed emSquareSize() const Q_DECL_OVERRIDE;
|
||||
bool supportsSubPixelPositions() const Q_DECL_OVERRIDE
|
||||
{
|
||||
return default_hint_style == HintLight ||
|
||||
default_hint_style == HintNone;
|
||||
}
|
||||
|
||||
virtual bool getSfntTableData(uint tag, uchar *buffer, uint *length) const Q_DECL_OVERRIDE;
|
||||
virtual int synthesized() const Q_DECL_OVERRIDE;
|
||||
bool getSfntTableData(uint tag, uchar *buffer, uint *length) const Q_DECL_OVERRIDE;
|
||||
int synthesized() const Q_DECL_OVERRIDE;
|
||||
|
||||
virtual QFixed ascent() const Q_DECL_OVERRIDE;
|
||||
virtual QFixed descent() const Q_DECL_OVERRIDE;
|
||||
virtual QFixed leading() const Q_DECL_OVERRIDE;
|
||||
virtual QFixed xHeight() const Q_DECL_OVERRIDE;
|
||||
virtual QFixed averageCharWidth() const Q_DECL_OVERRIDE;
|
||||
QFixed ascent() const Q_DECL_OVERRIDE;
|
||||
QFixed descent() const Q_DECL_OVERRIDE;
|
||||
QFixed leading() const Q_DECL_OVERRIDE;
|
||||
QFixed xHeight() const Q_DECL_OVERRIDE;
|
||||
QFixed averageCharWidth() const Q_DECL_OVERRIDE;
|
||||
|
||||
virtual qreal maxCharWidth() const Q_DECL_OVERRIDE;
|
||||
virtual QFixed lineThickness() const Q_DECL_OVERRIDE;
|
||||
virtual QFixed underlinePosition() const Q_DECL_OVERRIDE;
|
||||
qreal maxCharWidth() const Q_DECL_OVERRIDE;
|
||||
QFixed lineThickness() const Q_DECL_OVERRIDE;
|
||||
QFixed underlinePosition() const Q_DECL_OVERRIDE;
|
||||
|
||||
virtual glyph_t glyphIndex(uint ucs4) const Q_DECL_OVERRIDE;
|
||||
glyph_t glyphIndex(uint ucs4) const Q_DECL_OVERRIDE;
|
||||
void doKerning(QGlyphLayout *, ShaperFlags) const Q_DECL_OVERRIDE;
|
||||
|
||||
virtual void getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metrics_t *metrics) Q_DECL_OVERRIDE;
|
||||
void getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metrics_t *metrics) Q_DECL_OVERRIDE;
|
||||
|
||||
virtual bool supportsTransformation(const QTransform &transform) const Q_DECL_OVERRIDE;
|
||||
bool supportsTransformation(const QTransform &transform) const Q_DECL_OVERRIDE;
|
||||
|
||||
virtual void addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs,
|
||||
QPainterPath *path, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
|
||||
virtual void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs,
|
||||
QPainterPath *path, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
|
||||
void addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs,
|
||||
QPainterPath *path, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
|
||||
void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs,
|
||||
QPainterPath *path, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
|
||||
|
||||
virtual bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const Q_DECL_OVERRIDE;
|
||||
bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const Q_DECL_OVERRIDE;
|
||||
|
||||
virtual glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) Q_DECL_OVERRIDE;
|
||||
virtual glyph_metrics_t boundingBox(glyph_t glyph) Q_DECL_OVERRIDE;
|
||||
virtual glyph_metrics_t boundingBox(glyph_t glyph, const QTransform &matrix) Q_DECL_OVERRIDE;
|
||||
glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) Q_DECL_OVERRIDE;
|
||||
glyph_metrics_t boundingBox(glyph_t glyph) Q_DECL_OVERRIDE;
|
||||
glyph_metrics_t boundingBox(glyph_t glyph, const QTransform &matrix) Q_DECL_OVERRIDE;
|
||||
|
||||
virtual void recalcAdvances(QGlyphLayout *glyphs, ShaperFlags flags) const Q_DECL_OVERRIDE;
|
||||
virtual QImage alphaMapForGlyph(glyph_t g) Q_DECL_OVERRIDE { return alphaMapForGlyph(g, 0); }
|
||||
virtual QImage alphaMapForGlyph(glyph_t, QFixed) Q_DECL_OVERRIDE;
|
||||
void recalcAdvances(QGlyphLayout *glyphs, ShaperFlags flags) const Q_DECL_OVERRIDE;
|
||||
QImage alphaMapForGlyph(glyph_t g) Q_DECL_OVERRIDE { return alphaMapForGlyph(g, 0); }
|
||||
QImage alphaMapForGlyph(glyph_t, QFixed) Q_DECL_OVERRIDE;
|
||||
QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
|
||||
virtual QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
|
||||
virtual glyph_metrics_t alphaMapBoundingBox(glyph_t glyph,
|
||||
QFixed subPixelPosition,
|
||||
const QTransform &matrix,
|
||||
QFontEngine::GlyphFormat format) Q_DECL_OVERRIDE;
|
||||
virtual QImage *lockedAlphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition,
|
||||
GlyphFormat neededFormat, const QTransform &t,
|
||||
QPoint *offset) Q_DECL_OVERRIDE;
|
||||
virtual bool hasInternalCaching() const Q_DECL_OVERRIDE { return cacheEnabled; }
|
||||
virtual void unlockAlphaMapForGlyph() Q_DECL_OVERRIDE;
|
||||
QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
|
||||
glyph_metrics_t alphaMapBoundingBox(glyph_t glyph,
|
||||
QFixed subPixelPosition,
|
||||
const QTransform &matrix,
|
||||
QFontEngine::GlyphFormat format) Q_DECL_OVERRIDE;
|
||||
QImage *lockedAlphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition,
|
||||
GlyphFormat neededFormat, const QTransform &t,
|
||||
QPoint *offset) Q_DECL_OVERRIDE;
|
||||
bool hasInternalCaching() const Q_DECL_OVERRIDE { return cacheEnabled; }
|
||||
void unlockAlphaMapForGlyph() Q_DECL_OVERRIDE;
|
||||
|
||||
virtual void removeGlyphFromCache(glyph_t glyph) Q_DECL_OVERRIDE;
|
||||
virtual int glyphMargin(QFontEngine::GlyphFormat /* format */) Q_DECL_OVERRIDE { return 0; }
|
||||
void removeGlyphFromCache(glyph_t glyph) Q_DECL_OVERRIDE;
|
||||
int glyphMargin(QFontEngine::GlyphFormat /* format */) Q_DECL_OVERRIDE { return 0; }
|
||||
|
||||
virtual int glyphCount() const Q_DECL_OVERRIDE;
|
||||
int glyphCount() const Q_DECL_OVERRIDE;
|
||||
|
||||
enum Scaling {
|
||||
Scaled,
|
||||
@ -283,12 +283,12 @@ private:
|
||||
bool init(FaceId faceId, bool antialias, GlyphFormat format,
|
||||
QFreetypeFace *freetypeFace);
|
||||
|
||||
virtual int getPointInOutline(glyph_t glyph, int flags, quint32 point, QFixed *xpos, QFixed *ypos, quint32 *nPoints) Q_DECL_OVERRIDE;
|
||||
int getPointInOutline(glyph_t glyph, int flags, quint32 point, QFixed *xpos, QFixed *ypos, quint32 *nPoints) Q_DECL_OVERRIDE;
|
||||
|
||||
void setQtDefaultHintStyle(QFont::HintingPreference hintingPreference);
|
||||
virtual void setDefaultHintStyle(HintStyle style) Q_DECL_OVERRIDE;
|
||||
void setDefaultHintStyle(HintStyle style) Q_DECL_OVERRIDE;
|
||||
|
||||
virtual QFontEngine *cloneWithSize(qreal pixelSize) const Q_DECL_OVERRIDE;
|
||||
QFontEngine *cloneWithSize(qreal pixelSize) const Q_DECL_OVERRIDE;
|
||||
bool initFromFontEngine(const QFontEngineFT *fontEngine);
|
||||
|
||||
HintStyle defaultHintStyle() const { return default_hint_style; }
|
||||
|
@ -1078,8 +1078,8 @@ QTextCursor::QTextCursor(const QTextBlock &block)
|
||||
/*!
|
||||
\internal
|
||||
*/
|
||||
QTextCursor::QTextCursor(QTextDocumentPrivate *p, int pos)
|
||||
: d(new QTextCursorPrivate(p))
|
||||
QTextCursor::QTextCursor(QTextDocumentPrivate &p, int pos)
|
||||
: d(new QTextCursorPrivate(&p))
|
||||
{
|
||||
d->adjusted_anchor = d->anchor = d->position = pos;
|
||||
|
||||
|
@ -67,10 +67,8 @@ class Q_GUI_EXPORT QTextCursor
|
||||
public:
|
||||
QTextCursor();
|
||||
explicit QTextCursor(QTextDocument *document);
|
||||
QTextCursor(QTextDocumentPrivate *p, int pos);
|
||||
explicit QTextCursor(QTextFrame *frame);
|
||||
explicit QTextCursor(const QTextBlock &block);
|
||||
explicit QTextCursor(QTextCursorPrivate *d);
|
||||
QTextCursor(const QTextCursor &cursor);
|
||||
#ifdef Q_COMPILER_RVALUE_REFS
|
||||
QTextCursor &operator=(QTextCursor &&other) Q_DECL_NOTHROW { swap(other); return *this; }
|
||||
@ -227,8 +225,12 @@ public:
|
||||
QTextDocument *document() const;
|
||||
|
||||
private:
|
||||
QTextCursor(QTextDocumentPrivate &p, int pos);
|
||||
explicit QTextCursor(QTextCursorPrivate *d);
|
||||
|
||||
QSharedDataPointer<QTextCursorPrivate> d;
|
||||
friend class QTextCursorPrivate;
|
||||
friend class QTextDocumentPrivate;
|
||||
friend class QTextDocumentFragmentPrivate;
|
||||
friend class QTextCopyHelper;
|
||||
friend class QWidgetTextControlPrivate;
|
||||
|
@ -106,6 +106,9 @@ public:
|
||||
|
||||
void aboutToRemoveCell(int from, int to);
|
||||
|
||||
static QTextCursor fromPosition(QTextDocumentPrivate *d, int pos)
|
||||
{ return QTextCursor(*d, pos); }
|
||||
|
||||
QTextDocumentPrivate *priv;
|
||||
qreal x;
|
||||
int position;
|
||||
|
@ -39,6 +39,7 @@
|
||||
|
||||
#include "qtextdocument.h"
|
||||
#include <qtextformat.h>
|
||||
#include "qtextcursor_p.h"
|
||||
#include "qtextdocumentlayout_p.h"
|
||||
#include "qtextdocumentfragment.h"
|
||||
#include "qtextdocumentfragment_p.h"
|
||||
@ -1279,7 +1280,7 @@ static bool findInBlock(const QTextBlock &block, const QString &expression, int
|
||||
}
|
||||
}
|
||||
//we have a hit, return the cursor for that.
|
||||
*cursor = QTextCursor(block.docHandle(), block.position() + idx);
|
||||
*cursor = QTextCursorPrivate::fromPosition(block.docHandle(), block.position() + idx);
|
||||
cursor->setPosition(cursor->position() + expression.length(), QTextCursor::KeepAnchor);
|
||||
return true;
|
||||
}
|
||||
@ -1397,7 +1398,7 @@ static bool findInBlock(const QTextBlock &block, const QRegExp &expression, int
|
||||
}
|
||||
}
|
||||
//we have a hit, return the cursor for that.
|
||||
*cursor = QTextCursor(block.docHandle(), block.position() + idx);
|
||||
*cursor = QTextCursorPrivate::fromPosition(block.docHandle(), block.position() + idx);
|
||||
cursor->setPosition(cursor->position() + expr.matchedLength(), QTextCursor::KeepAnchor);
|
||||
return true;
|
||||
}
|
||||
@ -1525,7 +1526,7 @@ static bool findInBlock(const QTextBlock &block, const QRegularExpression &expre
|
||||
}
|
||||
}
|
||||
//we have a hit, return the cursor for that.
|
||||
*cursor = QTextCursor(block.docHandle(), block.position() + idx);
|
||||
*cursor = QTextCursorPrivate::fromPosition(block.docHandle(), block.position() + idx);
|
||||
cursor->setPosition(cursor->position() + match.capturedLength(), QTextCursor::KeepAnchor);
|
||||
return true;
|
||||
}
|
||||
|
@ -1710,7 +1710,7 @@ bool QTextDocumentPrivate::ensureMaximumBlockCount()
|
||||
beginEditBlock();
|
||||
|
||||
const int blocksToRemove = blocks.numNodes() - maximumBlockCount;
|
||||
QTextCursor cursor(this, 0);
|
||||
QTextCursor cursor(*this, 0);
|
||||
cursor.movePosition(QTextCursor::NextBlock, QTextCursor::KeepAnchor, blocksToRemove);
|
||||
|
||||
unreachableCharacterCount += cursor.selectionEnd() - cursor.selectionStart();
|
||||
|
@ -39,6 +39,7 @@
|
||||
|
||||
#include "qtextobject.h"
|
||||
#include "qtextobject_p.h"
|
||||
#include "qtextcursor_p.h"
|
||||
#include "qtextdocument.h"
|
||||
#include "qtextformat_p.h"
|
||||
#include "qtextdocument_p.h"
|
||||
@ -467,7 +468,7 @@ QTextFrame *QTextFrame::parentFrame() const
|
||||
QTextCursor QTextFrame::firstCursorPosition() const
|
||||
{
|
||||
Q_D(const QTextFrame);
|
||||
return QTextCursor(d->pieceTable, firstPosition());
|
||||
return QTextCursorPrivate::fromPosition(d->pieceTable, firstPosition());
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -478,7 +479,7 @@ QTextCursor QTextFrame::firstCursorPosition() const
|
||||
QTextCursor QTextFrame::lastCursorPosition() const
|
||||
{
|
||||
Q_D(const QTextFrame);
|
||||
return QTextCursor(d->pieceTable, lastPosition());
|
||||
return QTextCursorPrivate::fromPosition(d->pieceTable, lastPosition());
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include "qtextcursor.h"
|
||||
#include "qtextformat.h"
|
||||
#include <qdebug.h>
|
||||
#include "qtextcursor_p.h"
|
||||
#include "qtexttable_p.h"
|
||||
#include "qvarlengtharray.h"
|
||||
|
||||
@ -226,7 +227,7 @@ int QTextTableCell::columnSpan() const
|
||||
*/
|
||||
QTextCursor QTextTableCell::firstCursorPosition() const
|
||||
{
|
||||
return QTextCursor(table->d_func()->pieceTable, firstPosition());
|
||||
return QTextCursorPrivate::fromPosition(table->d_func()->pieceTable, firstPosition());
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -236,7 +237,7 @@ QTextCursor QTextTableCell::firstCursorPosition() const
|
||||
*/
|
||||
QTextCursor QTextTableCell::lastCursorPosition() const
|
||||
{
|
||||
return QTextCursor(table->d_func()->pieceTable, lastPosition());
|
||||
return QTextCursorPrivate::fromPosition(table->d_func()->pieceTable, lastPosition());
|
||||
}
|
||||
|
||||
|
||||
@ -1109,10 +1110,10 @@ void QTextTable::mergeCells(int row, int column, int numRows, int numCols)
|
||||
if (nextPos > pos) {
|
||||
if (needsParagraph) {
|
||||
needsParagraph = false;
|
||||
QTextCursor(p, insertPos++).insertBlock();
|
||||
QTextCursorPrivate::fromPosition(p, insertPos++).insertBlock();
|
||||
p->move(pos + 1, insertPos, nextPos - pos);
|
||||
} else if (rowHasText) {
|
||||
QTextCursor(p, insertPos++).insertText(QLatin1String(" "));
|
||||
QTextCursorPrivate::fromPosition(p, insertPos++).insertText(QLatin1String(" "));
|
||||
p->move(pos + 1, insertPos, nextPos - pos);
|
||||
} else {
|
||||
p->move(pos, insertPos, nextPos - pos);
|
||||
@ -1288,7 +1289,7 @@ QTextCursor QTextTable::rowStart(const QTextCursor &c) const
|
||||
int row = cell.row();
|
||||
QTextDocumentPrivate *p = d->pieceTable;
|
||||
QTextDocumentPrivate::FragmentIterator it(&p->fragmentMap(), d->grid[row*d->nCols]);
|
||||
return QTextCursor(p, it.position());
|
||||
return QTextCursorPrivate::fromPosition(p, it.position());
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -1310,7 +1311,7 @@ QTextCursor QTextTable::rowEnd(const QTextCursor &c) const
|
||||
int fragment = row < d->nRows ? d->grid[row*d->nCols] : d->fragment_end;
|
||||
QTextDocumentPrivate *p = d->pieceTable;
|
||||
QTextDocumentPrivate::FragmentIterator it(&p->fragmentMap(), fragment);
|
||||
return QTextCursor(p, it.position() - 1);
|
||||
return QTextCursorPrivate::fromPosition(p, it.position() - 1);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -320,29 +320,29 @@ static QList<QNetworkInterfacePrivate *> interfaceListing()
|
||||
}
|
||||
#endif
|
||||
|
||||
// Get the interface broadcast address
|
||||
QNetworkAddressEntry entry;
|
||||
if (iface->flags & QNetworkInterface::CanBroadcast) {
|
||||
if (qt_safe_ioctl(socket, SIOCGIFBRDADDR, &req) >= 0) {
|
||||
sockaddr *sa = &req.ifr_addr;
|
||||
if (sa->sa_family == AF_INET)
|
||||
entry.setBroadcast(addressFromSockaddr(sa));
|
||||
}
|
||||
}
|
||||
|
||||
// Get the address of the interface
|
||||
QNetworkAddressEntry entry;
|
||||
if (qt_safe_ioctl(socket, SIOCGIFADDR, &req) >= 0) {
|
||||
sockaddr *sa = &req.ifr_addr;
|
||||
entry.setIp(addressFromSockaddr(sa));
|
||||
}
|
||||
|
||||
// Get the interface netmask
|
||||
if (qt_safe_ioctl(socket, SIOCGIFNETMASK, &req) >= 0) {
|
||||
sockaddr *sa = &req.ifr_addr;
|
||||
entry.setNetmask(addressFromSockaddr(sa));
|
||||
}
|
||||
// Get the interface broadcast address
|
||||
if (iface->flags & QNetworkInterface::CanBroadcast) {
|
||||
if (qt_safe_ioctl(socket, SIOCGIFBRDADDR, &req) >= 0) {
|
||||
sockaddr *sa = &req.ifr_addr;
|
||||
if (sa->sa_family == AF_INET)
|
||||
entry.setBroadcast(addressFromSockaddr(sa));
|
||||
}
|
||||
}
|
||||
|
||||
iface->addressEntries << entry;
|
||||
// Get the interface netmask
|
||||
if (qt_safe_ioctl(socket, SIOCGIFNETMASK, &req) >= 0) {
|
||||
sockaddr *sa = &req.ifr_addr;
|
||||
entry.setNetmask(addressFromSockaddr(sa));
|
||||
}
|
||||
|
||||
iface->addressEntries << entry;
|
||||
}
|
||||
}
|
||||
|
||||
::close(socket);
|
||||
@ -395,7 +395,7 @@ static QList<QNetworkInterfacePrivate *> createInterfaces(ifaddrs *rawList)
|
||||
// - virtual interfaces with no HW address have no AF_PACKET
|
||||
// - interface labels have no AF_PACKET, but shouldn't be shown as a new interface
|
||||
for (ifaddrs *ptr = rawList; ptr; ptr = ptr->ifa_next) {
|
||||
if (ptr->ifa_addr && ptr->ifa_addr->sa_family != AF_PACKET) {
|
||||
if (!ptr->ifa_addr || ptr->ifa_addr->sa_family != AF_PACKET) {
|
||||
QString name = QString::fromLatin1(ptr->ifa_name);
|
||||
if (seenInterfaces.contains(name))
|
||||
continue;
|
||||
|
@ -584,7 +584,7 @@ qint64 QNativeSocketEngine::readDatagram(char *data, qint64 maxlen, QIpPacketHea
|
||||
} else {
|
||||
readOrigin = datagram.data;
|
||||
}
|
||||
strcpy(data, readOrigin);
|
||||
memcpy(data, readOrigin, qMin(maxlen, qint64(datagram.data.length())));
|
||||
return readOrigin.length();
|
||||
}
|
||||
|
||||
|
@ -92,19 +92,19 @@ class QStatusNotifierItemAdaptor: public QDBusAbstractAdaptor
|
||||
" <property access=\"read\" type=\"o\" name=\"Menu\"/>\n"
|
||||
" <property access=\"read\" type=\"b\" name=\"ItemIsMenu\"/>\n"
|
||||
" <property access=\"read\" type=\"s\" name=\"IconName\"/>\n"
|
||||
" <property access=\"read\" type=\"(iiay)\" name=\"IconPixmap\">\n"
|
||||
" <property access=\"read\" type=\"a(iiay)\" name=\"IconPixmap\">\n"
|
||||
" <annotation value=\"QXdgDBusImageVector\" name=\"org.qtproject.QtDBus.QtTypeName\"/>\n"
|
||||
" </property>\n"
|
||||
" <property access=\"read\" type=\"s\" name=\"OverlayIconName\"/>\n"
|
||||
" <property access=\"read\" type=\"(iiay)\" name=\"OverlayIconPixmap\">\n"
|
||||
" <property access=\"read\" type=\"a(iiay)\" name=\"OverlayIconPixmap\">\n"
|
||||
" <annotation value=\"QXdgDBusImageVector\" name=\"org.qtproject.QtDBus.QtTypeName\"/>\n"
|
||||
" </property>\n"
|
||||
" <property access=\"read\" type=\"s\" name=\"AttentionIconName\"/>\n"
|
||||
" <property access=\"read\" type=\"(iiay)\" name=\"AttentionIconPixmap\">\n"
|
||||
" <property access=\"read\" type=\"a(iiay)\" name=\"AttentionIconPixmap\">\n"
|
||||
" <annotation value=\"QXdgDBusImageVector\" name=\"org.qtproject.QtDBus.QtTypeName\"/>\n"
|
||||
" </property>\n"
|
||||
" <property access=\"read\" type=\"s\" name=\"AttentionMovieName\"/>\n"
|
||||
" <property access=\"read\" type=\"(s(iiay)ss)\" name=\"ToolTip\">\n"
|
||||
" <property access=\"read\" type=\"(sa(iiay)ss)\" name=\"ToolTip\">\n"
|
||||
" <annotation value=\"QXdgDBusToolTipStruct\" name=\"org.qtproject.QtDBus.QtTypeName\"/>\n"
|
||||
" </property>\n"
|
||||
" <method name=\"ContextMenu\">\n"
|
||||
|
@ -281,6 +281,12 @@ void QEGLPlatformContext::destroyTemporaryOffscreenSurface(EGLSurface surface)
|
||||
eglDestroySurface(m_eglDisplay, surface);
|
||||
}
|
||||
|
||||
void QEGLPlatformContext::runGLChecks()
|
||||
{
|
||||
// Nothing to do here, subclasses may override in order to perform OpenGL
|
||||
// queries needing a context.
|
||||
}
|
||||
|
||||
void QEGLPlatformContext::updateFormatFromGL()
|
||||
{
|
||||
#ifndef QT_NO_OPENGL
|
||||
@ -352,6 +358,7 @@ void QEGLPlatformContext::updateFormatFromGL()
|
||||
}
|
||||
}
|
||||
}
|
||||
runGLChecks();
|
||||
eglMakeCurrent(prevDisplay, prevSurfaceDraw, prevSurfaceRead, prevContext);
|
||||
} else {
|
||||
qWarning("QEGLPlatformContext: Failed to make temporary surface current, format not updated (%x)", eglGetError());
|
||||
|
@ -90,6 +90,7 @@ protected:
|
||||
virtual EGLSurface eglSurfaceForPlatformSurface(QPlatformSurface *surface) = 0;
|
||||
virtual EGLSurface createTemporaryOffscreenSurface();
|
||||
virtual void destroyTemporaryOffscreenSurface(EGLSurface surface);
|
||||
virtual void runGLChecks();
|
||||
|
||||
private:
|
||||
void init(const QSurfaceFormat &format, QPlatformOpenGLContext *share);
|
||||
|
@ -66,10 +66,10 @@ public:
|
||||
QFbBackingStore(QWindow *window);
|
||||
~QFbBackingStore();
|
||||
|
||||
virtual QPaintDevice *paintDevice() Q_DECL_OVERRIDE { return &mImage; }
|
||||
virtual void flush(QWindow *window, const QRegion ®ion, const QPoint &offset) Q_DECL_OVERRIDE;
|
||||
QPaintDevice *paintDevice() Q_DECL_OVERRIDE { return &mImage; }
|
||||
void flush(QWindow *window, const QRegion ®ion, const QPoint &offset) Q_DECL_OVERRIDE;
|
||||
|
||||
virtual void resize(const QSize &size, const QRegion ®ion) Q_DECL_OVERRIDE;
|
||||
void resize(const QSize &size, const QRegion ®ion) Q_DECL_OVERRIDE;
|
||||
|
||||
const QImage image();
|
||||
|
||||
|
@ -72,7 +72,7 @@ public:
|
||||
|
||||
virtual ~QSpiAccessibleBridge();
|
||||
|
||||
virtual void notifyAccessibilityUpdate(QAccessibleEvent *event) Q_DECL_OVERRIDE;
|
||||
void notifyAccessibilityUpdate(QAccessibleEvent *event) Q_DECL_OVERRIDE;
|
||||
QDBusConnection dBusConnection() const;
|
||||
|
||||
public Q_SLOTS:
|
||||
|
@ -63,8 +63,8 @@ public:
|
||||
|
||||
QByteArray desktopEnvironment() const Q_DECL_OVERRIDE;
|
||||
|
||||
virtual bool openUrl(const QUrl &url) Q_DECL_OVERRIDE;
|
||||
virtual bool openDocument(const QUrl &url) Q_DECL_OVERRIDE;
|
||||
bool openUrl(const QUrl &url) Q_DECL_OVERRIDE;
|
||||
bool openDocument(const QUrl &url) Q_DECL_OVERRIDE;
|
||||
|
||||
private:
|
||||
QString m_webBrowser;
|
||||
|
@ -583,23 +583,23 @@ const char *QGnomeTheme::name = "gnome";
|
||||
class QGnomeThemePrivate : public QPlatformThemePrivate
|
||||
{
|
||||
public:
|
||||
QGnomeThemePrivate() : fontsConfigured(false) { }
|
||||
QGnomeThemePrivate() : systemFont(Q_NULLPTR), fixedFont(Q_NULLPTR) {}
|
||||
~QGnomeThemePrivate() { delete systemFont; delete fixedFont; }
|
||||
|
||||
void configureFonts(const QString >kFontName) const
|
||||
{
|
||||
Q_ASSERT(!fontsConfigured);
|
||||
Q_ASSERT(!systemFont);
|
||||
const int split = gtkFontName.lastIndexOf(QChar::Space);
|
||||
float size = gtkFontName.mid(split+1).toFloat();
|
||||
QString fontName = gtkFontName.left(split);
|
||||
|
||||
systemFont = QFont(fontName, size);
|
||||
fixedFont = QFont(QLatin1String("monospace"), systemFont.pointSize());
|
||||
fixedFont.setStyleHint(QFont::TypeWriter);
|
||||
fontsConfigured = true;
|
||||
systemFont = new QFont(fontName, size);
|
||||
fixedFont = new QFont(QLatin1String("monospace"), systemFont->pointSize());
|
||||
fixedFont->setStyleHint(QFont::TypeWriter);
|
||||
}
|
||||
|
||||
mutable QFont systemFont;
|
||||
mutable QFont fixedFont;
|
||||
mutable bool fontsConfigured;
|
||||
mutable QFont *systemFont;
|
||||
mutable QFont *fixedFont;
|
||||
};
|
||||
|
||||
QGnomeTheme::QGnomeTheme()
|
||||
@ -638,13 +638,13 @@ QVariant QGnomeTheme::themeHint(QPlatformTheme::ThemeHint hint) const
|
||||
const QFont *QGnomeTheme::font(Font type) const
|
||||
{
|
||||
Q_D(const QGnomeTheme);
|
||||
if (!d->fontsConfigured)
|
||||
if (!d->systemFont)
|
||||
d->configureFonts(gtkFontName());
|
||||
switch (type) {
|
||||
case QPlatformTheme::SystemFont:
|
||||
return &d->systemFont;
|
||||
return d->systemFont;
|
||||
case QPlatformTheme::FixedFont:
|
||||
return &d->fixedFont;
|
||||
return d->fixedFont;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
@ -81,8 +81,8 @@ public:
|
||||
static QPlatformTheme *createUnixTheme(const QString &name);
|
||||
static QStringList themeNames();
|
||||
|
||||
virtual const QFont *font(Font type) const Q_DECL_OVERRIDE;
|
||||
virtual QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE;
|
||||
const QFont *font(Font type) const Q_DECL_OVERRIDE;
|
||||
QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE;
|
||||
|
||||
static QStringList xdgIconThemePaths();
|
||||
#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON)
|
||||
@ -102,11 +102,11 @@ public:
|
||||
QKdeTheme(const QStringList& kdeDirs, int kdeVersion);
|
||||
|
||||
static QPlatformTheme *createKdeTheme();
|
||||
virtual QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE;
|
||||
QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE;
|
||||
|
||||
virtual const QPalette *palette(Palette type = SystemPalette) const Q_DECL_OVERRIDE;
|
||||
const QPalette *palette(Palette type = SystemPalette) const Q_DECL_OVERRIDE;
|
||||
|
||||
virtual const QFont *font(Font type) const Q_DECL_OVERRIDE;
|
||||
const QFont *font(Font type) const Q_DECL_OVERRIDE;
|
||||
#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON)
|
||||
QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const Q_DECL_OVERRIDE;
|
||||
#endif
|
||||
@ -122,8 +122,8 @@ class QGnomeTheme : public QPlatformTheme
|
||||
Q_DECLARE_PRIVATE(QGnomeTheme)
|
||||
public:
|
||||
QGnomeTheme();
|
||||
virtual QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE;
|
||||
virtual const QFont *font(Font type) const Q_DECL_OVERRIDE;
|
||||
QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE;
|
||||
const QFont *font(Font type) const Q_DECL_OVERRIDE;
|
||||
QString standardButtonText(int button) const Q_DECL_OVERRIDE;
|
||||
|
||||
virtual QString gtkFontName() const;
|
||||
|
@ -201,7 +201,7 @@ QJsonObject AndroidStyle::loadStyleData()
|
||||
}
|
||||
Q_ASSERT(!stylePath.isEmpty());
|
||||
|
||||
if (!androidTheme.isEmpty() && QFileInfo(stylePath + androidTheme + QLatin1String("style.json")).exists())
|
||||
if (!androidTheme.isEmpty() && QFileInfo::exists(stylePath + androidTheme + QLatin1String("style.json")))
|
||||
stylePath += androidTheme;
|
||||
|
||||
QFile f(stylePath + QLatin1String("style.json"));
|
||||
|
@ -1792,6 +1792,18 @@ void QCocoaWindow::exposeWindow()
|
||||
if (!isWindowExposable())
|
||||
return;
|
||||
|
||||
// Update the QWindow's screen property. This property is set
|
||||
// to QGuiApplication::primaryScreen() at QWindow construciton
|
||||
// time, and we won't get a NSWindowDidChangeScreenNotification
|
||||
// on show. The case where the window is initially displayed
|
||||
// on a non-primary screen needs special handling here.
|
||||
NSUInteger screenIndex = [[NSScreen screens] indexOfObject:m_nsWindow.screen];
|
||||
if (screenIndex != NSNotFound) {
|
||||
QCocoaScreen *cocoaScreen = QCocoaIntegration::instance()->screenAtIndex(screenIndex);
|
||||
if (cocoaScreen)
|
||||
window()->setScreen(cocoaScreen->screen());
|
||||
}
|
||||
|
||||
if (!m_isExposed) {
|
||||
m_isExposed = true;
|
||||
m_exposedGeometry = geometry();
|
||||
|
@ -91,6 +91,16 @@ void QEglFSContext::destroyTemporaryOffscreenSurface(EGLSurface surface)
|
||||
}
|
||||
}
|
||||
|
||||
void QEglFSContext::runGLChecks()
|
||||
{
|
||||
// Note that even though there is an EGL context current here,
|
||||
// QOpenGLContext and QOpenGLFunctions are not yet usable at this stage.
|
||||
const char *renderer = reinterpret_cast<const char *>(glGetString(GL_RENDERER));
|
||||
// Be nice and warn about a common source of confusion.
|
||||
if (renderer && strstr(renderer, "llvmpipe"))
|
||||
qWarning("Running on a software rasterizer (LLVMpipe), expect limited performance.");
|
||||
}
|
||||
|
||||
void QEglFSContext::swapBuffers(QPlatformSurface *surface)
|
||||
{
|
||||
// draw the cursor
|
||||
|
@ -54,6 +54,7 @@ public:
|
||||
EGLSurface eglSurfaceForPlatformSurface(QPlatformSurface *surface) Q_DECL_OVERRIDE;
|
||||
EGLSurface createTemporaryOffscreenSurface() Q_DECL_OVERRIDE;
|
||||
void destroyTemporaryOffscreenSurface(EGLSurface surface) Q_DECL_OVERRIDE;
|
||||
void runGLChecks() Q_DECL_OVERRIDE;
|
||||
void swapBuffers(QPlatformSurface *surface) Q_DECL_OVERRIDE;
|
||||
|
||||
private:
|
||||
|
@ -1969,7 +1969,7 @@ QString QTest::qFindTestData(const QString& base, const char *file, int line, co
|
||||
QString testsPath = QLibraryInfo::location(QLibraryInfo::TestsPath);
|
||||
QString candidate = QString::fromLatin1("%1/%2/%3")
|
||||
.arg(testsPath, QFile::decodeName(testObjectName).toLower(), base);
|
||||
if (QFileInfo(candidate).exists()) {
|
||||
if (QFileInfo::exists(candidate)) {
|
||||
found = candidate;
|
||||
}
|
||||
else if (QTestLog::verboseLevel() >= 2) {
|
||||
@ -1994,7 +1994,7 @@ QString QTest::qFindTestData(const QString& base, const char *file, int line, co
|
||||
}
|
||||
|
||||
QString candidate = QString::fromLatin1("%1/%2").arg(srcdir.canonicalFilePath(), base);
|
||||
if (QFileInfo(candidate).exists()) {
|
||||
if (QFileInfo::exists(candidate)) {
|
||||
found = candidate;
|
||||
}
|
||||
else if (QTestLog::verboseLevel() >= 2) {
|
||||
@ -2008,21 +2008,21 @@ QString QTest::qFindTestData(const QString& base, const char *file, int line, co
|
||||
// 4. Try resources
|
||||
if (found.isEmpty()) {
|
||||
QString candidate = QString::fromLatin1(":/%1").arg(base);
|
||||
if (QFileInfo(candidate).exists())
|
||||
if (QFileInfo::exists(candidate))
|
||||
found = candidate;
|
||||
}
|
||||
|
||||
// 5. Try current directory
|
||||
if (found.isEmpty()) {
|
||||
QString candidate = QString::fromLatin1("%1/%2").arg(QDir::currentPath()).arg(base);
|
||||
if (QFileInfo(candidate).exists())
|
||||
if (QFileInfo::exists(candidate))
|
||||
found = candidate;
|
||||
}
|
||||
|
||||
// 6. Try main source directory
|
||||
if (found.isEmpty()) {
|
||||
QString candidate = QTest::mainSourcePath % QLatin1Char('/') % base;
|
||||
if (QFileInfo(candidate).exists())
|
||||
if (QFileInfo::exists(candidate))
|
||||
found = candidate;
|
||||
}
|
||||
|
||||
|
@ -1255,6 +1255,7 @@ void Generator::generateStaticMetacall()
|
||||
fprintf(out, " if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&%s::%s)) {\n",
|
||||
cdef->classname.constData(), f.name.constData());
|
||||
fprintf(out, " *result = %d;\n", methodindex);
|
||||
fprintf(out, " return;\n");
|
||||
fprintf(out, " }\n }\n");
|
||||
}
|
||||
if (!anythingUsed)
|
||||
|
@ -871,7 +871,7 @@ QModelIndex QDirModel::index(const QString &path, int column) const
|
||||
#endif
|
||||
|
||||
QStringList pathElements = absolutePath.split(QLatin1Char('/'), QString::SkipEmptyParts);
|
||||
if ((pathElements.isEmpty() || !QFileInfo(path).exists())
|
||||
if ((pathElements.isEmpty() || !QFileInfo::exists(path))
|
||||
#if !defined(Q_OS_WIN) || defined(Q_OS_WINCE)
|
||||
&& path != QLatin1String("/")
|
||||
#endif
|
||||
|
@ -485,22 +485,24 @@ void QApplicationPrivate::process_cmdline()
|
||||
|
||||
j = 1;
|
||||
for (i=1; i<argc; i++) { // if you add anything here, modify QCoreApplication::arguments()
|
||||
if (argv[i] && *argv[i] != '-') {
|
||||
if (!argv[i])
|
||||
continue;
|
||||
if (*argv[i] != '-') {
|
||||
argv[j++] = argv[i];
|
||||
continue;
|
||||
}
|
||||
QByteArray arg = argv[i];
|
||||
if (arg.startsWith("--"))
|
||||
arg.remove(0, 1);
|
||||
if (arg == "-qdevel" || arg == "-qdebug") {
|
||||
const char *arg = argv[i];
|
||||
if (arg[1] == '-') // startsWith("--")
|
||||
++arg;
|
||||
if (strcmp(arg, "-qdevel") == 0 || strcmp(arg, "-qdebug") == 0) {
|
||||
// obsolete argument
|
||||
#ifndef QT_NO_STYLE_STYLESHEET
|
||||
} else if (arg == "-stylesheet" && i < argc -1) {
|
||||
} else if (strcmp(arg, "-stylesheet") == 0 && i < argc -1) {
|
||||
styleSheet = QLatin1String("file:///");
|
||||
styleSheet.append(QString::fromLocal8Bit(argv[++i]));
|
||||
} else if (arg.indexOf("-stylesheet=") != -1) {
|
||||
} else if (strncmp(arg, "-stylesheet=", 12) == 0) {
|
||||
styleSheet = QLatin1String("file:///");
|
||||
styleSheet.append(QString::fromLocal8Bit(arg.right(arg.length() - 12)));
|
||||
styleSheet.append(QString::fromLocal8Bit(arg + 12));
|
||||
#endif
|
||||
} else if (qstrcmp(arg, "-widgetcount") == 0) {
|
||||
widgetCount = true;
|
||||
|
@ -9174,6 +9174,9 @@ bool QWidget::event(QEvent *event)
|
||||
const QWindow *win = te->window;
|
||||
d->setWinId((win && win->handle()) ? win->handle()->winId() : 0);
|
||||
}
|
||||
#ifndef QT_NO_OPENGL
|
||||
d->renderToTextureReallyDirty = 1;
|
||||
#endif
|
||||
break;
|
||||
#ifndef QT_NO_PROPERTIES
|
||||
case QEvent::DynamicPropertyChange: {
|
||||
|
@ -63,4 +63,5 @@ winrt: SUBDIRS -= \
|
||||
qprocess \
|
||||
qprocess-noapplication \
|
||||
qprocessenvironment \
|
||||
qstorageinfo \
|
||||
qwinoverlappedionotifier
|
||||
|
@ -65,7 +65,7 @@ public:
|
||||
, fd_(-1)
|
||||
, stream_(0)
|
||||
{
|
||||
#if defined(QT_LARGEFILE_SUPPORT) && !defined(Q_OS_MAC)
|
||||
#if defined(QT_LARGEFILE_SUPPORT) && !defined(Q_OS_MAC) && !defined(Q_OS_WINRT)
|
||||
maxSizeBits = 36; // 64 GiB
|
||||
#elif defined(Q_OS_MAC)
|
||||
// HFS+ does not support sparse files, so we limit file size for the test
|
||||
@ -130,6 +130,9 @@ private:
|
||||
|
||||
int fd_;
|
||||
FILE *stream_;
|
||||
|
||||
QSharedPointer<QTemporaryDir> m_tempDir;
|
||||
QString m_previousCurrent;
|
||||
};
|
||||
|
||||
/*
|
||||
@ -224,6 +227,11 @@ QByteArray const &tst_LargeFile::getDataBlock(int index, qint64 position)
|
||||
|
||||
void tst_LargeFile::initTestCase()
|
||||
{
|
||||
m_previousCurrent = QDir::currentPath();
|
||||
m_tempDir = QSharedPointer<QTemporaryDir>(new QTemporaryDir);
|
||||
QVERIFY2(!m_tempDir.isNull(), qPrintable("Could not create temporary directory."));
|
||||
QVERIFY2(QDir::setCurrent(m_tempDir->path()), qPrintable("Could not switch current directory"));
|
||||
|
||||
QFile file("qt_largefile.tmp");
|
||||
QVERIFY( !file.exists() || file.remove() );
|
||||
}
|
||||
@ -235,6 +243,8 @@ void tst_LargeFile::cleanupTestCase()
|
||||
|
||||
QFile file("qt_largefile.tmp");
|
||||
QVERIFY( !file.exists() || file.remove() );
|
||||
|
||||
QDir::setCurrent(m_previousCurrent);
|
||||
}
|
||||
|
||||
void tst_LargeFile::init()
|
||||
|
@ -47,6 +47,7 @@ class tst_QAbstractFileEngine
|
||||
{
|
||||
Q_OBJECT
|
||||
public slots:
|
||||
void initTestCase();
|
||||
void cleanupTestCase();
|
||||
|
||||
private slots:
|
||||
@ -59,6 +60,8 @@ private slots:
|
||||
void mounting();
|
||||
private:
|
||||
QStringList filesForRemoval;
|
||||
QSharedPointer<QTemporaryDir> m_currentDir;
|
||||
QString m_previousCurrent;
|
||||
};
|
||||
|
||||
class ReferenceFileEngine
|
||||
@ -558,6 +561,14 @@ class FileEngineHandler
|
||||
}
|
||||
};
|
||||
|
||||
void tst_QAbstractFileEngine::initTestCase()
|
||||
{
|
||||
m_previousCurrent = QDir::currentPath();
|
||||
m_currentDir = QSharedPointer<QTemporaryDir>(new QTemporaryDir());
|
||||
QVERIFY2(!m_currentDir.isNull(), qPrintable("Could not create current directory."));
|
||||
QDir::setCurrent(m_currentDir->path());
|
||||
}
|
||||
|
||||
void tst_QAbstractFileEngine::cleanupTestCase()
|
||||
{
|
||||
bool failed = false;
|
||||
@ -571,6 +582,8 @@ void tst_QAbstractFileEngine::cleanupTestCase()
|
||||
}
|
||||
|
||||
QVERIFY(!failed);
|
||||
|
||||
QDir::setCurrent(m_previousCurrent);
|
||||
}
|
||||
|
||||
void tst_QAbstractFileEngine::customHandler()
|
||||
|
@ -45,6 +45,7 @@ public:
|
||||
void stream_data(int noOfElements);
|
||||
|
||||
public slots:
|
||||
void initTestCase();
|
||||
void cleanupTestCase();
|
||||
|
||||
private slots:
|
||||
@ -243,6 +244,10 @@ private:
|
||||
void readqint64(QDataStream *s);
|
||||
void readQIcon(QDataStream *s);
|
||||
void readQEasingCurve(QDataStream *s);
|
||||
|
||||
private:
|
||||
QSharedPointer<QTemporaryDir> m_tempDir;
|
||||
QString m_previousCurrent;
|
||||
};
|
||||
|
||||
static int NColorRoles[] = {
|
||||
@ -293,10 +298,20 @@ void tst_QDataStream::getSetCheck()
|
||||
QCOMPARE(QDataStream::ReadCorruptData, obj1.status());
|
||||
}
|
||||
|
||||
void tst_QDataStream::initTestCase()
|
||||
{
|
||||
m_previousCurrent = QDir::currentPath();
|
||||
m_tempDir = QSharedPointer<QTemporaryDir>(new QTemporaryDir);
|
||||
QVERIFY2(!m_tempDir.isNull(), qPrintable("Could not create temporary directory."));
|
||||
QVERIFY2(QDir::setCurrent(m_tempDir->path()), qPrintable("Could not switch current directory"));
|
||||
}
|
||||
|
||||
void tst_QDataStream::cleanupTestCase()
|
||||
{
|
||||
QFile::remove(QLatin1String("qdatastream.out"));
|
||||
QFile::remove(QLatin1String("datastream.tmp"));
|
||||
|
||||
QDir::setCurrent(m_previousCurrent);
|
||||
}
|
||||
|
||||
static int dataIndex(const QString &tag)
|
||||
|
@ -6,6 +6,8 @@ RESOURCES += qdir.qrc
|
||||
|
||||
TESTDATA += testdir testData searchdir resources entrylist types tst_qdir.cpp
|
||||
|
||||
contains(CONFIG, builtin_testdata): DEFINES += BUILTIN_TESTDATA
|
||||
|
||||
android:!android-no-sdk {
|
||||
RESOURCES += android_testdata.qrc
|
||||
}
|
||||
|
@ -51,7 +51,7 @@
|
||||
# include <sys/stat.h>
|
||||
#endif
|
||||
|
||||
#if defined(Q_OS_VXWORKS)
|
||||
#if defined(Q_OS_VXWORKS) || defined(Q_OS_WINRT)
|
||||
#define Q_NO_SYMLINKS
|
||||
#endif
|
||||
|
||||
@ -211,7 +211,12 @@ private slots:
|
||||
void cdBelowRoot();
|
||||
|
||||
private:
|
||||
#ifdef BUILTIN_TESTDATA
|
||||
QString m_dataPath;
|
||||
QSharedPointer<QTemporaryDir> m_dataDir;
|
||||
#else
|
||||
const QString m_dataPath;
|
||||
#endif
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(tst_QDir::UncHandling)
|
||||
@ -219,7 +224,7 @@ Q_DECLARE_METATYPE(tst_QDir::UncHandling)
|
||||
tst_QDir::tst_QDir()
|
||||
#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_NO_SDK)
|
||||
: m_dataPath(QStandardPaths::writableLocation(QStandardPaths::CacheLocation))
|
||||
#else
|
||||
#elif !defined(BUILTIN_TESTDATA)
|
||||
: m_dataPath(QFileInfo(QFINDTESTDATA("testData")).absolutePath())
|
||||
#endif
|
||||
{
|
||||
@ -256,12 +261,23 @@ void tst_QDir::init()
|
||||
|
||||
void tst_QDir::initTestCase()
|
||||
{
|
||||
#ifdef BUILTIN_TESTDATA
|
||||
m_dataDir = QEXTRACTTESTDATA("/");
|
||||
QVERIFY2(!m_dataDir.isNull(), qPrintable("Did not find testdata. Is this builtin?"));
|
||||
m_dataPath = m_dataDir->path();
|
||||
#endif
|
||||
|
||||
QVERIFY2(!m_dataPath.isEmpty(), "test data not found");
|
||||
}
|
||||
|
||||
void tst_QDir::cleanupTestCase()
|
||||
{
|
||||
#ifdef BUILTIN_TESTDATA
|
||||
// We need to reset the current directory outside of QTemporaryDir for successful deletion
|
||||
QDir::setCurrent(QCoreApplication::applicationDirPath());
|
||||
#else
|
||||
QDir(QDir::currentPath() + "/tmpdir").removeRecursively();
|
||||
#endif
|
||||
}
|
||||
|
||||
// Testing get/set functions
|
||||
@ -527,7 +543,7 @@ void tst_QDir::exists_data()
|
||||
|
||||
QTest::newRow("simple dir") << (m_dataPath + "/resources") << true;
|
||||
QTest::newRow("simple dir with slash") << (m_dataPath + "/resources/") << true;
|
||||
#if (defined(Q_OS_WIN) && !defined(Q_OS_WINCE))
|
||||
#if (defined(Q_OS_WIN) && !defined(Q_OS_WINCE)) && !defined(Q_OS_WINRT)
|
||||
const QString uncRoot = QStringLiteral("//") + QtNetworkSettings::winServerName();
|
||||
QTest::newRow("unc 1") << uncRoot << true;
|
||||
QTest::newRow("unc 2") << uncRoot + QLatin1Char('/') << true;
|
||||
@ -539,7 +555,7 @@ void tst_QDir::exists_data()
|
||||
QTest::newRow("unc 8") << uncRoot + "/asharethatshouldnotexist" << false;
|
||||
QTest::newRow("unc 9") << "//ahostthatshouldnotexist" << false;
|
||||
#endif
|
||||
#if (defined(Q_OS_WIN) && !defined(Q_OS_WINCE))
|
||||
#if (defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT))
|
||||
QTest::newRow("This drive should exist") << "C:/" << true;
|
||||
// find a non-existing drive and check if it does not exist
|
||||
#ifdef QT_BUILD_INTERNAL
|
||||
@ -892,7 +908,7 @@ void tst_QDir::entryListSimple_data()
|
||||
QTest::newRow("simple dir with slash") << (m_dataPath + "/resources/") << 2;
|
||||
#endif
|
||||
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
|
||||
const QString uncRoot = QStringLiteral("//") + QtNetworkSettings::winServerName();
|
||||
QTest::newRow("unc 1") << uncRoot << 2;
|
||||
QTest::newRow("unc 2") << uncRoot + QLatin1Char('/') << 2;
|
||||
@ -975,7 +991,6 @@ void tst_QDir::canonicalPath_data()
|
||||
|
||||
QTest::newRow("relative") << "." << m_dataPath;
|
||||
QTest::newRow("relativeSubDir") << "./testData/../testData" << m_dataPath + "/testData";
|
||||
|
||||
#ifndef Q_OS_WIN
|
||||
QTest::newRow("absPath") << m_dataPath + "/testData/../testData" << m_dataPath + "/testData";
|
||||
#else
|
||||
@ -1174,7 +1189,7 @@ tst_QDir::cleanPath_data()
|
||||
QTest::newRow("data10") << "/:/" << "/:";
|
||||
#endif
|
||||
#endif
|
||||
#ifdef Q_OS_WIN
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
|
||||
QTest::newRow("data11") << "//foo//bar" << "//foo/bar";
|
||||
#endif
|
||||
QTest::newRow("data12") << "ab/a/" << "ab/a"; // Path item with length of 2
|
||||
@ -1186,11 +1201,13 @@ tst_QDir::cleanPath_data()
|
||||
|
||||
QTest::newRow("data14") << "c://foo" << "c:/foo";
|
||||
// Drive letters and unc path in one string
|
||||
#ifndef Q_OS_WINRT
|
||||
#ifdef Q_OS_WIN
|
||||
QTest::newRow("data15") << "//c:/foo" << "//c:/foo";
|
||||
#else
|
||||
QTest::newRow("data15") << "//c:/foo" << "/c:/foo";
|
||||
#endif
|
||||
#endif // !Q_OS_WINRT
|
||||
|
||||
QTest::newRow("QTBUG-23892_0") << "foo/.." << ".";
|
||||
QTest::newRow("QTBUG-23892_1") << "foo/../" << ".";
|
||||
@ -1309,7 +1326,7 @@ void tst_QDir::absoluteFilePath_data()
|
||||
QTest::newRow("2") << "/" << "passwd" << "/passwd";
|
||||
QTest::newRow("3") << "relative" << "path" << QDir::currentPath() + "/relative/path";
|
||||
QTest::newRow("4") << "" << "" << QDir::currentPath();
|
||||
#ifdef Q_OS_WIN
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
|
||||
QTest::newRow("5") << "//machine" << "share" << "//machine/share";
|
||||
#endif
|
||||
|
||||
@ -1333,7 +1350,7 @@ void tst_QDir::absolutePath_data()
|
||||
QTest::addColumn<QString>("expectedPath");
|
||||
|
||||
QTest::newRow("0") << "/machine/share/dir1" << "/machine/share/dir1";
|
||||
#if (defined(Q_OS_WIN) && !defined(Q_OS_WINCE))
|
||||
#if (defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT))
|
||||
QTest::newRow("1") << "\\machine\\share\\dir1" << "/machine/share/dir1";
|
||||
QTest::newRow("2") << "//machine/share/dir1" << "//machine/share/dir1";
|
||||
QTest::newRow("3") << "\\\\machine\\share\\dir1" << "//machine/share/dir1";
|
||||
@ -1401,10 +1418,12 @@ void tst_QDir::relativeFilePath_data()
|
||||
QTest::newRow("27") << "C:" << "D:/" << "D:/";
|
||||
QTest::newRow("28") << "C:/" << "D:" << "D:";
|
||||
QTest::newRow("29") << "C:/" << "D:/" << "D:/";
|
||||
#ifndef Q_OS_WINRT
|
||||
QTest::newRow("30") << "C:/foo/bar" << "//anotherHost/foo/bar" << "//anotherHost/foo/bar";
|
||||
QTest::newRow("31") << "//anotherHost/foo" << "//anotherHost/foo/bar" << "bar";
|
||||
QTest::newRow("32") << "//anotherHost/foo" << "bar" << "bar";
|
||||
QTest::newRow("33") << "//anotherHost/foo" << "C:/foo/bar" << "C:/foo/bar";
|
||||
#endif // !Q_OS_WINRT
|
||||
#endif
|
||||
|
||||
QTest::newRow("resource0") << ":/prefix" << "foo.bar" << "foo.bar";
|
||||
@ -1589,7 +1608,11 @@ void tst_QDir::homePath()
|
||||
qputenv("HOME", envHome);
|
||||
|
||||
#elif defined(Q_OS_WIN)
|
||||
if (strHome.length() > 3) // root dir = "c:/"; "//" is not really valid...
|
||||
if (strHome.length() > 3 // root dir = "c:/"; "//" is not really valid...
|
||||
#if defined(Q_OS_WINRT)
|
||||
&& strHome.length() > QDir::rootPath().length()
|
||||
#endif
|
||||
)
|
||||
QVERIFY(!strHome.endsWith('/'));
|
||||
#endif
|
||||
|
||||
@ -2054,6 +2077,9 @@ void tst_QDir::drives()
|
||||
QVERIFY(list.count() >= 1); //system
|
||||
QLatin1Char systemdrive('c');
|
||||
#endif
|
||||
#if defined(Q_OS_WINRT)
|
||||
QSKIP("WinRT has no concept of drives");
|
||||
#endif
|
||||
#if defined(Q_OS_WIN)
|
||||
QVERIFY(list.count() <= 26);
|
||||
bool foundsystem = false;
|
||||
@ -2110,7 +2136,9 @@ void tst_QDir::equalityOperator_data()
|
||||
<< true;
|
||||
|
||||
//need a path in the root directory that is unlikely to be a symbolic link.
|
||||
#if defined (Q_OS_WIN)
|
||||
#if defined (Q_OS_WINRT)
|
||||
QString pathinroot(QDir::rootPath() + QLatin1String("assets/.."));
|
||||
#elif defined (Q_OS_WIN)
|
||||
QString pathinroot("c:/windows/..");
|
||||
#elif defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_NO_SDK)
|
||||
QString pathinroot("/system/..");
|
||||
@ -2241,6 +2269,10 @@ void tst_QDir::cdBelowRoot()
|
||||
#define ROOT QString("/")
|
||||
#define DIR QString("/tmp")
|
||||
#define CD_INTO "tmp"
|
||||
#elif defined (Q_OS_WINRT)
|
||||
#define ROOT QDir::rootPath()
|
||||
#define DIR QDir::rootPath()
|
||||
#define CD_INTO QDir::rootPath()
|
||||
#else
|
||||
#define ROOT QString::fromLocal8Bit(qgetenv("SystemDrive"))+"/"
|
||||
#define DIR QString::fromLocal8Bit(qgetenv("SystemRoot")).replace('\\', '/')
|
||||
@ -2255,6 +2287,9 @@ void tst_QDir::cdBelowRoot()
|
||||
#ifdef Q_OS_UNIX
|
||||
if (::getuid() == 0)
|
||||
QSKIP("Running this test as root doesn't make sense");
|
||||
#endif
|
||||
#ifdef Q_OS_WINRT
|
||||
QSKIP("WinRT has no concept of system root");
|
||||
#endif
|
||||
QDir dir(DIR);
|
||||
QVERIFY(!dir.cd("../.."));
|
||||
|
@ -5,6 +5,7 @@ SOURCES = tst_qdiriterator.cpp
|
||||
RESOURCES += qdiriterator.qrc
|
||||
|
||||
TESTDATA += entrylist
|
||||
contains(CONFIG, builtin_testdata): DEFINES += BUILTIN_TESTDATA
|
||||
|
||||
wince*mips*|wincewm50smart-msvc200*: DEFINES += WINCE_BROKEN_ITERATE=1
|
||||
|
||||
|
@ -37,7 +37,7 @@
|
||||
|
||||
#include <QtCore/private/qfsfileengine_p.h>
|
||||
|
||||
#if defined(Q_OS_VXWORKS)
|
||||
#if defined(Q_OS_VXWORKS) || defined(Q_OS_WINRT)
|
||||
#define Q_NO_SYMLINKS
|
||||
#endif
|
||||
|
||||
@ -110,6 +110,10 @@ private slots:
|
||||
#ifndef Q_OS_WIN
|
||||
void hiddenDirs_hiddenFiles();
|
||||
#endif
|
||||
#ifdef BUILTIN_TESTDATA
|
||||
private:
|
||||
QSharedPointer<QTemporaryDir> m_dataDir;
|
||||
#endif
|
||||
};
|
||||
|
||||
void tst_QDirIterator::initTestCase()
|
||||
@ -136,6 +140,10 @@ void tst_QDirIterator::initTestCase()
|
||||
}
|
||||
|
||||
testdata_dir += QStringLiteral("/entrylist");
|
||||
#elif defined(BUILTIN_TESTDATA)
|
||||
m_dataDir = QEXTRACTTESTDATA("/");
|
||||
QVERIFY2(!m_dataDir.isNull(), qPrintable("Could not extract test data"));
|
||||
QString testdata_dir = m_dataDir->path();
|
||||
#else
|
||||
|
||||
// chdir into testdata directory, then find testdata by relative paths.
|
||||
@ -212,6 +220,11 @@ void tst_QDirIterator::cleanupTestCase()
|
||||
|
||||
Q_FOREACH(QString dirName, createdDirectories)
|
||||
currentDir.rmdir(dirName);
|
||||
|
||||
#ifdef Q_OS_WINRT
|
||||
QDir::setCurrent(QCoreApplication::applicationDirPath());
|
||||
#endif // Q_OS_WINRT
|
||||
|
||||
}
|
||||
|
||||
void tst_QDirIterator::iterateRelativeDirectory_data()
|
||||
|
@ -61,7 +61,7 @@
|
||||
#include <private/qfileinfo_p.h>
|
||||
#include "../../../../shared/filesystem.h"
|
||||
|
||||
#if defined(Q_OS_VXWORKS)
|
||||
#if defined(Q_OS_VXWORKS) || defined(Q_OS_WINRT)
|
||||
#define Q_NO_SYMLINKS
|
||||
#endif
|
||||
|
||||
@ -422,12 +422,12 @@ void tst_QFileInfo::isDir_data()
|
||||
|
||||
QTest::newRow("broken link") << "brokenlink.lnk" << false;
|
||||
|
||||
#if (defined(Q_OS_WIN) && !defined(Q_OS_WINCE))
|
||||
#if (defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT))
|
||||
QTest::newRow("drive 1") << "c:" << true;
|
||||
QTest::newRow("drive 2") << "c:/" << true;
|
||||
//QTest::newRow("drive 2") << "t:s" << false;
|
||||
#endif
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
|
||||
const QString uncRoot = QStringLiteral("//") + QtNetworkSettings::winServerName();
|
||||
QTest::newRow("unc 1") << uncRoot << true;
|
||||
QTest::newRow("unc 2") << uncRoot + QLatin1Char('/') << true;
|
||||
@ -464,7 +464,7 @@ void tst_QFileInfo::isRoot_data()
|
||||
|
||||
QTest::newRow("simple dir") << m_resourcesDir << false;
|
||||
QTest::newRow("simple dir with slash") << (m_resourcesDir + QLatin1Char('/')) << false;
|
||||
#if (defined(Q_OS_WIN) && !defined(Q_OS_WINCE))
|
||||
#if (defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT))
|
||||
QTest::newRow("drive 1") << "c:" << false;
|
||||
QTest::newRow("drive 2") << "c:/" << true;
|
||||
QTest::newRow("drive 3") << "p:/" << false;
|
||||
@ -508,7 +508,12 @@ void tst_QFileInfo::exists_data()
|
||||
QTest::newRow("data8") << (m_resourcesDir + "/*.ext1") << false;
|
||||
QTest::newRow("data9") << (m_resourcesDir + "/file?.ext1") << false;
|
||||
QTest::newRow("data10") << "." << true;
|
||||
|
||||
// Skip for the WinRT case, as GetFileAttributesEx removes _any_
|
||||
// trailing whitespace and "." is a valid entry as seen in data10
|
||||
#ifndef Q_OS_WINRT
|
||||
QTest::newRow("data11") << ". " << false;
|
||||
#endif
|
||||
QTest::newRow("empty") << "" << false;
|
||||
|
||||
QTest::newRow("simple dir") << m_resourcesDir << true;
|
||||
@ -549,7 +554,7 @@ void tst_QFileInfo::absolutePath_data()
|
||||
QTest::addColumn<QString>("filename");
|
||||
|
||||
QString drivePrefix;
|
||||
#if (defined(Q_OS_WIN) && !defined(Q_OS_WINCE))
|
||||
#if (defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT))
|
||||
drivePrefix = QDir::currentPath().left(2);
|
||||
QString nonCurrentDrivePrefix =
|
||||
drivePrefix.left(1).compare("X", Qt::CaseInsensitive) == 0 ? QString("Y:") : QString("X:");
|
||||
@ -559,6 +564,8 @@ void tst_QFileInfo::absolutePath_data()
|
||||
QTest::newRow("<not current drive>:my.dll") << nonCurrentDrivePrefix + "my.dll"
|
||||
<< nonCurrentDrivePrefix + "/"
|
||||
<< "my.dll";
|
||||
#elif defined(Q_OS_WINRT)
|
||||
drivePrefix = QDir::currentPath().left(2);
|
||||
#endif
|
||||
QTest::newRow("0") << "/machine/share/dir1/" << drivePrefix + "/machine/share/dir1" << "";
|
||||
QTest::newRow("1") << "/machine/share/dir1" << drivePrefix + "/machine/share" << "dir1";
|
||||
@ -566,7 +573,7 @@ void tst_QFileInfo::absolutePath_data()
|
||||
QTest::newRow("3") << "/usr/local/bin/" << drivePrefix + "/usr/local/bin" << "";
|
||||
QTest::newRow("/test") << "/test" << drivePrefix + "/" << "test";
|
||||
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
|
||||
QTest::newRow("c:\\autoexec.bat") << "c:\\autoexec.bat" << "C:/"
|
||||
<< "autoexec.bat";
|
||||
QTest::newRow("c:autoexec.bat") << QDir::currentPath().left(2) + "autoexec.bat" << QDir::currentPath()
|
||||
@ -730,7 +737,7 @@ void tst_QFileInfo::canonicalFilePath()
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
|
||||
typedef BOOL (WINAPI *PtrCreateSymbolicLink)(LPTSTR, LPTSTR, DWORD);
|
||||
PtrCreateSymbolicLink ptrCreateSymbolicLink =
|
||||
(PtrCreateSymbolicLink)QLibrary::resolve(QLatin1String("kernel32"), "CreateSymbolicLinkW");
|
||||
@ -826,7 +833,7 @@ void tst_QFileInfo::dir_data()
|
||||
QTest::newRow("absFilePath") << QDir::currentPath() + "/tmp.txt" << false << QDir::currentPath();
|
||||
QTest::newRow("absFilePathAbsPath") << QDir::currentPath() + "/tmp.txt" << true << QDir::currentPath();
|
||||
QTest::newRow("resource1") << ":/tst_qfileinfo/resources/file1.ext1" << true << ":/tst_qfileinfo/resources";
|
||||
#ifdef Q_OS_WIN
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
|
||||
QTest::newRow("driveWithSlash") << "C:/file1.ext1.ext2" << true << "C:/";
|
||||
QTest::newRow("driveWithoutSlash") << QDir::currentPath().left(2) + "file1.ext1.ext2" << false << QDir::currentPath().left(2);
|
||||
#endif
|
||||
@ -1017,7 +1024,7 @@ void tst_QFileInfo::size()
|
||||
|
||||
void tst_QFileInfo::systemFiles()
|
||||
{
|
||||
#if !defined(Q_OS_WIN) || defined(Q_OS_WINCE)
|
||||
#if !defined(Q_OS_WIN) || defined(Q_OS_WINCE) || defined(Q_OS_WINRT)
|
||||
QSKIP("This is a Windows only test");
|
||||
#endif
|
||||
QFileInfo fi("c:\\pagefile.sys");
|
||||
@ -1188,6 +1195,8 @@ void tst_QFileInfo::fileTimes()
|
||||
#endif
|
||||
#if defined(Q_OS_WINCE)
|
||||
QEXPECT_FAIL("simple", "WinCE only stores date of access data, not the time", Continue);
|
||||
#elif defined(Q_OS_WINRT)
|
||||
QEXPECT_FAIL("", "WinRT does not allow timestamp handling change in the filesystem due to sandboxing", Continue);
|
||||
#elif defined(Q_OS_QNX)
|
||||
QEXPECT_FAIL("", "QNX uses the noatime filesystem option", Continue);
|
||||
#elif defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_NO_SDK)
|
||||
@ -1623,7 +1632,7 @@ void tst_QFileInfo::isWritable()
|
||||
QVERIFY(QFileInfo("tempfile.txt").isWritable());
|
||||
tempfile.remove();
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
|
||||
#ifdef Q_OS_WINCE
|
||||
QFileInfo fi("\\Windows\\wince.nls");
|
||||
#else
|
||||
|
@ -23,6 +23,7 @@
|
||||
<file>platforms/+unix/test</file>
|
||||
<file>platforms/+windows/+wince/test</file>
|
||||
<file>platforms/+windows/+winnt/test</file>
|
||||
<file>platforms/+windows/+winrt/test</file>
|
||||
<file>platforms/+windows/test</file>
|
||||
<file>platforms/+android/test</file>
|
||||
<file>platforms/+ios/test</file>
|
||||
@ -32,6 +33,7 @@
|
||||
<file>platforms/+haiku/test</file>
|
||||
<file>platforms/+linux/test</file>
|
||||
<file>platforms/+wince/test</file>
|
||||
<file>platforms/+winrt/test</file>
|
||||
|
||||
<!-- platforms/test2: shallow selection for the deepest selector -->
|
||||
<file>platforms/test2</file>
|
||||
@ -42,6 +44,7 @@
|
||||
<file>platforms/+linux/test2</file>
|
||||
<file>platforms/+wince/test2</file>
|
||||
<file>platforms/+winnt/test2</file>
|
||||
<file>platforms/+winrt/test2</file>
|
||||
|
||||
<!-- platforms/test3: selection for the family only -->
|
||||
<file>platforms/test3</file>
|
||||
|
@ -94,7 +94,7 @@ void tst_QFileSelector::basicTest_data()
|
||||
expectedPlatform2File = QString(":/platforms/test2");
|
||||
#else
|
||||
QString distributionName;
|
||||
# if (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)) || defined(Q_OS_FREEBSD)
|
||||
# if (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)) || defined(Q_OS_FREEBSD) || defined(Q_OS_WINRT)
|
||||
distributionName = QSysInfo::productType();
|
||||
# endif
|
||||
foreach (const QString &selector, QFileSelectorPrivate::platformSelectors()) {
|
||||
|
@ -38,6 +38,7 @@ class tst_QIODevice : public QObject
|
||||
|
||||
private slots:
|
||||
void initTestCase();
|
||||
void cleanupTestCase();
|
||||
void getSetCheck();
|
||||
void constructing_QTcpSocket();
|
||||
void constructing_QFile();
|
||||
@ -57,6 +58,10 @@ private slots:
|
||||
|
||||
void transaction_data();
|
||||
void transaction();
|
||||
|
||||
private:
|
||||
QSharedPointer<QTemporaryDir> m_tempDir;
|
||||
QString m_previousCurrent;
|
||||
};
|
||||
|
||||
void tst_QIODevice::initTestCase()
|
||||
@ -65,6 +70,15 @@ void tst_QIODevice::initTestCase()
|
||||
QVERIFY(QFileInfo(QStringLiteral("./tst_qiodevice.cpp")).exists()
|
||||
|| QFile::copy(QStringLiteral(":/tst_qiodevice.cpp"), QStringLiteral("./tst_qiodevice.cpp")));
|
||||
#endif
|
||||
m_previousCurrent = QDir::currentPath();
|
||||
m_tempDir = QSharedPointer<QTemporaryDir>(new QTemporaryDir);
|
||||
QVERIFY2(!m_tempDir.isNull(), qPrintable("Could not create temporary directory."));
|
||||
QVERIFY2(QDir::setCurrent(m_tempDir->path()), qPrintable("Could not switch current directory"));
|
||||
}
|
||||
|
||||
void tst_QIODevice::cleanupTestCase()
|
||||
{
|
||||
QDir::setCurrent(m_previousCurrent);
|
||||
}
|
||||
|
||||
// Testing get/set functions
|
||||
|
@ -6,6 +6,7 @@ QT = core core-private testlib
|
||||
|
||||
SOURCES += tst_qloggingregistry.cpp
|
||||
OTHER_FILES += qtlogging.ini
|
||||
TESTDATA += qtlogging.ini
|
||||
|
||||
android:!android-no-sdk: {
|
||||
RESOURCES += \
|
||||
|
@ -424,6 +424,8 @@ void tst_qstandardpaths::testFindExecutable()
|
||||
|
||||
void tst_qstandardpaths::testFindExecutableLinkToDirectory()
|
||||
{
|
||||
// WinRT has no link support
|
||||
#ifndef Q_OS_WINRT
|
||||
// link to directory
|
||||
const QString target = QDir::tempPath() + QDir::separator() + QLatin1String("link.lnk");
|
||||
QFile::remove(target);
|
||||
@ -431,15 +433,16 @@ void tst_qstandardpaths::testFindExecutableLinkToDirectory()
|
||||
QVERIFY(appFile.link(target));
|
||||
QVERIFY(QStandardPaths::findExecutable(target).isEmpty());
|
||||
QFile::remove(target);
|
||||
#endif
|
||||
}
|
||||
|
||||
void tst_qstandardpaths::testRuntimeDirectory()
|
||||
{
|
||||
#ifdef Q_XDG_PLATFORM
|
||||
const QString runtimeDir = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation);
|
||||
QVERIFY(!runtimeDir.isEmpty());
|
||||
|
||||
// Check that it can automatically fix permissions
|
||||
#ifdef Q_XDG_PLATFORM
|
||||
QFile file(runtimeDir);
|
||||
const QFile::Permissions wantedPerms = QFile::ReadUser | QFile::WriteUser | QFile::ExeUser;
|
||||
const QFile::Permissions additionalPerms = QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner;
|
||||
|
@ -67,11 +67,14 @@ private slots:
|
||||
|
||||
void QTBUG43352_failedSetPermissions();
|
||||
|
||||
public:
|
||||
private:
|
||||
QString m_previousCurrent;
|
||||
};
|
||||
|
||||
void tst_QTemporaryDir::initTestCase()
|
||||
{
|
||||
m_previousCurrent = QDir::currentPath();
|
||||
QDir::setCurrent(QDir::tempPath());
|
||||
QVERIFY(QDir("test-XXXXXX").exists() || QDir().mkdir("test-XXXXXX"));
|
||||
QCoreApplication::setApplicationName("tst_qtemporarydir");
|
||||
}
|
||||
@ -79,6 +82,8 @@ void tst_QTemporaryDir::initTestCase()
|
||||
void tst_QTemporaryDir::cleanupTestCase()
|
||||
{
|
||||
QVERIFY(QDir().rmdir("test-XXXXXX"));
|
||||
|
||||
QDir::setCurrent(m_previousCurrent);
|
||||
}
|
||||
|
||||
void tst_QTemporaryDir::construction()
|
||||
|
@ -80,10 +80,15 @@ private slots:
|
||||
void QTBUG_4796_data();
|
||||
void QTBUG_4796();
|
||||
void guaranteeUnique();
|
||||
private:
|
||||
QString m_previousCurrent;
|
||||
};
|
||||
|
||||
void tst_QTemporaryFile::initTestCase()
|
||||
{
|
||||
m_previousCurrent = QDir::currentPath();
|
||||
QDir::setCurrent(QDir::tempPath());
|
||||
|
||||
// For QTBUG_4796
|
||||
QVERIFY(QDir("test-XXXXXX").exists() || QDir().mkdir("test-XXXXXX"));
|
||||
QCoreApplication::setApplicationName("tst_qtemporaryfile");
|
||||
@ -111,6 +116,8 @@ void tst_QTemporaryFile::cleanupTestCase()
|
||||
{
|
||||
// From QTBUG_4796
|
||||
QVERIFY(QDir().rmdir("test-XXXXXX"));
|
||||
|
||||
QDir::setCurrent(m_previousCurrent);
|
||||
}
|
||||
|
||||
void tst_QTemporaryFile::construction()
|
||||
@ -673,8 +680,11 @@ void tst_QTemporaryFile::createNativeFile_data()
|
||||
const QString nativeFilePath = QFINDTESTDATA("resources/test.txt");
|
||||
#endif
|
||||
|
||||
QTest::newRow("nativeFile") << nativeFilePath << (qint64)-1 << false << QByteArray();
|
||||
QTest::newRow("nativeFileWithPos") << nativeFilePath << (qint64)5 << false << QByteArray();
|
||||
// File might not exist locally in case of sandboxing or remote testing
|
||||
if (!nativeFilePath.startsWith(QLatin1String(":/"))) {
|
||||
QTest::newRow("nativeFile") << nativeFilePath << (qint64)-1 << false << QByteArray();
|
||||
QTest::newRow("nativeFileWithPos") << nativeFilePath << (qint64)5 << false << QByteArray();
|
||||
}
|
||||
QTest::newRow("resourceFile") << ":/resources/test.txt" << (qint64)-1 << true << QByteArray("This is a test");
|
||||
QTest::newRow("resourceFileWithPos") << ":/resources/test.txt" << (qint64)5 << true << QByteArray("This is a test");
|
||||
}
|
||||
|
@ -3009,15 +3009,21 @@ void tst_QUrl::fromUserInputWithCwd_data()
|
||||
it.next();
|
||||
QUrl url = QUrl::fromLocalFile(it.filePath());
|
||||
if (it.fileName() == QLatin1String(".")) {
|
||||
url = QUrl::fromLocalFile(QDir::currentPath()); // fromUserInput cleans the path
|
||||
url = QUrl::fromLocalFile(QDir::currentPath()
|
||||
#ifdef Q_OS_WINRT
|
||||
+ QLatin1Char('/')
|
||||
#endif
|
||||
); // fromUserInput cleans the path
|
||||
}
|
||||
QTest::newRow(("file-" + QByteArray::number(c++)).constData())
|
||||
<< it.fileName() << QDir::currentPath() << url << url;
|
||||
}
|
||||
#ifndef Q_OS_WINRT // WinRT cannot cd outside current / sandbox
|
||||
QDir parent = QDir::current();
|
||||
QVERIFY(parent.cdUp());
|
||||
QUrl parentUrl = QUrl::fromLocalFile(parent.path());
|
||||
QTest::newRow("dotdot") << ".." << QDir::currentPath() << parentUrl << parentUrl;
|
||||
#endif
|
||||
|
||||
QTest::newRow("nonexisting") << "nonexisting" << QDir::currentPath() << QUrl("http://nonexisting") << QUrl::fromLocalFile(QDir::currentPath() + "/nonexisting");
|
||||
QTest::newRow("short-url") << "example.org" << QDir::currentPath() << QUrl("http://example.org") << QUrl::fromLocalFile(QDir::currentPath() + "/example.org");
|
||||
|
@ -798,16 +798,18 @@ void tst_QDateTime::toString_textDate_data()
|
||||
QTest::addColumn<QDateTime>("datetime");
|
||||
QTest::addColumn<QString>("expected");
|
||||
|
||||
QString wednesdayJanuary = QDate::shortDayName(3) + ' ' + QDate::shortMonthName(1);
|
||||
|
||||
QTest::newRow("localtime") << QDateTime(QDate(2013, 1, 2), QTime(1, 2, 3), Qt::LocalTime)
|
||||
<< QString("Wed Jan 2 01:02:03 2013");
|
||||
<< wednesdayJanuary + QString(" 2 01:02:03 2013");
|
||||
QTest::newRow("utc") << QDateTime(QDate(2013, 1, 2), QTime(1, 2, 3), Qt::UTC)
|
||||
<< QString("Wed Jan 2 01:02:03 2013 GMT");
|
||||
<< wednesdayJanuary + QString(" 2 01:02:03 2013 GMT");
|
||||
QTest::newRow("offset+") << QDateTime(QDate(2013, 1, 2), QTime(1, 2, 3), Qt::OffsetFromUTC,
|
||||
10 * 60 * 60)
|
||||
<< QString("Wed Jan 2 01:02:03 2013 GMT+1000");
|
||||
<< wednesdayJanuary + QString(" 2 01:02:03 2013 GMT+1000");
|
||||
QTest::newRow("offset-") << QDateTime(QDate(2013, 1, 2), QTime(1, 2, 3), Qt::OffsetFromUTC,
|
||||
-10 * 60 * 60)
|
||||
<< QString("Wed Jan 2 01:02:03 2013 GMT-1000");
|
||||
<< wednesdayJanuary + QString(" 2 01:02:03 2013 GMT-1000");
|
||||
QTest::newRow("invalid") << QDateTime()
|
||||
<< QString("");
|
||||
}
|
||||
@ -817,9 +819,6 @@ void tst_QDateTime::toString_textDate()
|
||||
QFETCH(QDateTime, datetime);
|
||||
QFETCH(QString, expected);
|
||||
|
||||
QLocale oldLocale;
|
||||
QLocale::setDefault(QLocale("en_US"));
|
||||
|
||||
QString result = datetime.toString(Qt::TextDate);
|
||||
QCOMPARE(result, expected);
|
||||
|
||||
@ -829,8 +828,6 @@ void tst_QDateTime::toString_textDate()
|
||||
QCOMPARE(resultDatetime.time(), datetime.time());
|
||||
QCOMPARE(resultDatetime.timeSpec(), datetime.timeSpec());
|
||||
QCOMPARE(resultDatetime.utcOffset(), datetime.utcOffset());
|
||||
|
||||
QLocale::setDefault(oldLocale);
|
||||
}
|
||||
|
||||
void tst_QDateTime::toString_rfcDate_data()
|
||||
|
@ -1,4 +1,4 @@
|
||||
CONFIG += testcase
|
||||
TARGET = tst_qtextcursor
|
||||
SOURCES += tst_qtextcursor.cpp
|
||||
QT += testlib
|
||||
QT += core-private gui-private testlib
|
||||
|
@ -29,7 +29,6 @@
|
||||
|
||||
#include <QtTest/QtTest>
|
||||
|
||||
|
||||
#include <qtextdocument.h>
|
||||
#include <qtexttable.h>
|
||||
#include <qvariant.h>
|
||||
@ -40,6 +39,8 @@
|
||||
#include <qtextobject.h>
|
||||
#include <qdebug.h>
|
||||
|
||||
#include <private/qtextcursor_p.h>
|
||||
|
||||
QT_FORWARD_DECLARE_CLASS(QTextDocument)
|
||||
|
||||
class tst_QTextCursor : public QObject
|
||||
@ -1278,7 +1279,7 @@ void tst_QTextCursor::anchorInitialized1()
|
||||
void tst_QTextCursor::anchorInitialized2()
|
||||
{
|
||||
cursor.insertBlock();
|
||||
cursor = QTextCursor(cursor.block().docHandle(), 1);
|
||||
cursor = QTextCursorPrivate::fromPosition(cursor.block().docHandle(), 1);
|
||||
QCOMPARE(cursor.position(), 1);
|
||||
QCOMPARE(cursor.anchor(), 1);
|
||||
QCOMPARE(cursor.selectionStart(), 1);
|
||||
|
@ -233,13 +233,6 @@ void tst_QNetworkInterface::interfaceFromXXX()
|
||||
// but only for IPv4 (there is no such thing as broadcast in IPv6)
|
||||
if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol) {
|
||||
QVERIFY(!entry.broadcast().isNull());
|
||||
|
||||
// verify that the broadcast address is correct
|
||||
quint32 ip = entry.ip().toIPv4Address();
|
||||
quint32 mask = entry.netmask().toIPv4Address();
|
||||
quint32 bcast = entry.broadcast().toIPv4Address();
|
||||
|
||||
QCOMPARE(bcast, ip | ~mask);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user