Merge remote-tracking branch 'origin/5.7' into dev
Conflicts: configure src/3rdparty/double-conversion/include/double-conversion/utils.h src/corelib/global/qnamespace.qdoc src/corelib/tools/qsimd_p.h tests/auto/corelib/io/qfile/tst_qfile.cpp Change-Id: I3ca1007bab5355d251c13002a18e93d81c254d34
This commit is contained in:
commit
6357813207
@ -1,7 +1,7 @@
|
|||||||
SOURCES = egl-x11.cpp
|
SOURCES = egl-x11.cpp
|
||||||
|
|
||||||
for(p, QMAKE_LIBDIR_EGL) {
|
for(p, QMAKE_LIBDIR_EGL) {
|
||||||
exists($$p):LIBS += -L$$p
|
LIBS += -L$$p
|
||||||
}
|
}
|
||||||
|
|
||||||
!isEmpty(QMAKE_INCDIR_EGL): INCLUDEPATH += $$QMAKE_INCDIR_EGL
|
!isEmpty(QMAKE_INCDIR_EGL): INCLUDEPATH += $$QMAKE_INCDIR_EGL
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
SOURCES = egl.cpp
|
SOURCES = egl.cpp
|
||||||
|
|
||||||
for(p, QMAKE_LIBDIR_EGL) {
|
for(p, QMAKE_LIBDIR_EGL) {
|
||||||
exists($$p):LIBS += -L$$p
|
LIBS += -L$$p
|
||||||
}
|
}
|
||||||
|
|
||||||
!isEmpty(QMAKE_INCDIR_EGL): INCLUDEPATH += $$QMAKE_INCDIR_EGL
|
!isEmpty(QMAKE_INCDIR_EGL): INCLUDEPATH += $$QMAKE_INCDIR_EGL
|
||||||
|
@ -5,7 +5,7 @@ CONFIG -= qt
|
|||||||
INCLUDEPATH += $$QMAKE_INCDIR_EGL
|
INCLUDEPATH += $$QMAKE_INCDIR_EGL
|
||||||
|
|
||||||
for(p, QMAKE_LIBDIR_EGL) {
|
for(p, QMAKE_LIBDIR_EGL) {
|
||||||
exists($$p):LIBS += -L$$p
|
LIBS += -L$$p
|
||||||
}
|
}
|
||||||
|
|
||||||
LIBS += -lEGL -lGLESv2 -lbcm_host
|
LIBS += -lEGL -lGLESv2 -lbcm_host
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
SOURCES = eglfs-egldevice.cpp
|
SOURCES = eglfs-egldevice.cpp
|
||||||
|
|
||||||
for(p, QMAKE_LIBDIR_EGL) {
|
for(p, QMAKE_LIBDIR_EGL) {
|
||||||
exists($$p):LIBS += -L$$p
|
LIBS += -L$$p
|
||||||
}
|
}
|
||||||
|
|
||||||
INCLUDEPATH += $$QMAKE_INCDIR_EGL
|
INCLUDEPATH += $$QMAKE_INCDIR_EGL
|
||||||
|
@ -43,6 +43,6 @@
|
|||||||
|
|
||||||
int main(int, char **)
|
int main(int, char **)
|
||||||
{
|
{
|
||||||
fbGetDisplayByIndex(0);
|
fbGetDisplay();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,16 @@
|
|||||||
SOURCES = eglfs-viv.cpp
|
SOURCES = eglfs-viv.cpp
|
||||||
DEFINES += LINUX=1 EGL_API_FB=1
|
integrity {
|
||||||
|
DEFINES += EGL_API_FB=1
|
||||||
|
} else {
|
||||||
|
DEFINES += LINUX=1 EGL_API_FB=1
|
||||||
|
}
|
||||||
CONFIG -= qt
|
CONFIG -= qt
|
||||||
|
|
||||||
LIBS += -lEGL -lGLESv2 -lGAL
|
LIBS += -lEGL -lGLESv2 -lGAL
|
||||||
|
|
||||||
|
for(p, QMAKE_LIBDIR_OPENGL_ES2) {
|
||||||
|
exists($$p):LIBS += -L$$p
|
||||||
|
}
|
||||||
|
|
||||||
|
!isEmpty(QMAKE_INCDIR_EGL): INCLUDEPATH += $$QMAKE_INCDIR_EGL
|
||||||
|
!isEmpty(QMAKE_LIBS_EGL): LIBS += $$QMAKE_LIBS_EGL
|
||||||
|
@ -15,6 +15,7 @@ QTCONF=$9
|
|||||||
shift 9
|
shift 9
|
||||||
LFLAGS="$SYSROOT_FLAG"
|
LFLAGS="$SYSROOT_FLAG"
|
||||||
INCLUDEPATH=""
|
INCLUDEPATH=""
|
||||||
|
CFLAGS="$SYSROOT_FLAG"
|
||||||
CXXFLAGS="$SYSROOT_FLAG"
|
CXXFLAGS="$SYSROOT_FLAG"
|
||||||
MAC_ARCH_CXXFLAGS=""
|
MAC_ARCH_CXXFLAGS=""
|
||||||
MAC_ARCH_LFLAGS=""
|
MAC_ARCH_LFLAGS=""
|
||||||
@ -31,12 +32,14 @@ while [ "$#" -gt 0 ]; do
|
|||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
-arch)
|
-arch)
|
||||||
|
MAC_ARCH_CFLAGS="$MAC_ARCH_CFLAGS -arch $2"
|
||||||
MAC_ARCH_CXXFLAGS="$MAC_ARCH_CXXFLAGS -arch $2"
|
MAC_ARCH_CXXFLAGS="$MAC_ARCH_CXXFLAGS -arch $2"
|
||||||
MAC_ARCH_LFLAGS="$MAC_ARCH_LFLAGS -arch $2"
|
MAC_ARCH_LFLAGS="$MAC_ARCH_LFLAGS -arch $2"
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
-F*|-m*|-x*)
|
-F*|-m*|-x*)
|
||||||
LFLAGS="$LFLAGS \"$PARAM\""
|
LFLAGS="$LFLAGS \"$PARAM\""
|
||||||
|
CFLAGS="$CFLAGS \"$PARAM\""
|
||||||
CXXFLAGS="$CXXFLAGS \"$PARAM\""
|
CXXFLAGS="$CXXFLAGS \"$PARAM\""
|
||||||
;;
|
;;
|
||||||
-L*|-l*|-pthread)
|
-L*|-l*|-pthread)
|
||||||
@ -47,10 +50,12 @@ while [ "$#" -gt 0 ]; do
|
|||||||
INCLUDEPATH="$INCLUDEPATH \"$INC\""
|
INCLUDEPATH="$INCLUDEPATH \"$INC\""
|
||||||
;;
|
;;
|
||||||
-f*|-D*)
|
-f*|-D*)
|
||||||
|
CFLAGS="$CFLAGS \"$PARAM\""
|
||||||
CXXFLAGS="$CXXFLAGS \"$PARAM\""
|
CXXFLAGS="$CXXFLAGS \"$PARAM\""
|
||||||
;;
|
;;
|
||||||
-Qoption)
|
-Qoption)
|
||||||
# Two-argument form for the Sun Compiler
|
# Two-argument form for the Sun Compiler
|
||||||
|
CFLAGS="$CFLAGS $PARAM \"$2\""
|
||||||
CXXFLAGS="$CXXFLAGS $PARAM \"$2\""
|
CXXFLAGS="$CXXFLAGS $PARAM \"$2\""
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
@ -72,7 +77,7 @@ test -r Makefile && $MAKE distclean >/dev/null 2>&1
|
|||||||
# Make sure output from possible previous tests is gone
|
# Make sure output from possible previous tests is gone
|
||||||
rm -f "$EXE" "${EXE}.exe"
|
rm -f "$EXE" "${EXE}.exe"
|
||||||
|
|
||||||
set -- "$QMAKE" -qtconf "$QTCONF" -nocache -spec "$QMKSPEC" "CONFIG+=$QMAKE_CONFIG" "CONFIG+=android_app" "CONFIG-=debug_and_release app_bundle lib_bundle" "LIBS+=$LFLAGS" "LIBS+=$MAC_ARCH_LFLAGS" "INCLUDEPATH*=$INCLUDEPATH" "QMAKE_CXXFLAGS*=$CXXFLAGS" "QMAKE_CXXFLAGS+=$MAC_ARCH_CXXFLAGS" $QMAKE_ARGS "$SRCDIR/$TEST/$EXE.pro" -o "$OUTDIR/$TEST/Makefile"
|
set -- "$QMAKE" -qtconf "$QTCONF" -nocache -spec "$QMKSPEC" "CONFIG+=$QMAKE_CONFIG" "CONFIG+=android_app" "CONFIG-=debug_and_release app_bundle lib_bundle" "LIBS+=$LFLAGS" "LIBS+=$MAC_ARCH_LFLAGS" "INCLUDEPATH*=$INCLUDEPATH" "QMAKE_CFLAGS*=$CFLAGS" "QMAKE_CFLAGS+=$MAC_ARCH_CFLAGS" "QMAKE_CXXFLAGS*=$CXXFLAGS" "QMAKE_CXXFLAGS+=$MAC_ARCH_CXXFLAGS" $QMAKE_ARGS "$SRCDIR/$TEST/$EXE.pro" -o "$OUTDIR/$TEST/Makefile"
|
||||||
if [ "$VERBOSE" = "yes" ]; then
|
if [ "$VERBOSE" = "yes" ]; then
|
||||||
OUTDIR=$OUTDIR "$@" && $MAKE && SUCCESS=yes
|
OUTDIR=$OUTDIR "$@" && $MAKE && SUCCESS=yes
|
||||||
else
|
else
|
||||||
|
@ -2,7 +2,7 @@ SOURCES = opengles2.cpp
|
|||||||
INCLUDEPATH += $$QMAKE_INCDIR_OPENGL_ES2
|
INCLUDEPATH += $$QMAKE_INCDIR_OPENGL_ES2
|
||||||
|
|
||||||
for(p, QMAKE_LIBDIR_OPENGL_ES2) {
|
for(p, QMAKE_LIBDIR_OPENGL_ES2) {
|
||||||
exists($$p):LIBS += -L$$p
|
LIBS += -L$$p
|
||||||
}
|
}
|
||||||
|
|
||||||
CONFIG -= qt
|
CONFIG -= qt
|
||||||
|
@ -6,7 +6,7 @@ SOURCES = opengles3.cpp
|
|||||||
INCLUDEPATH += $$QMAKE_INCDIR_OPENGL_ES2
|
INCLUDEPATH += $$QMAKE_INCDIR_OPENGL_ES2
|
||||||
|
|
||||||
for(p, QMAKE_LIBDIR_OPENGL_ES2) {
|
for(p, QMAKE_LIBDIR_OPENGL_ES2) {
|
||||||
exists($$p):LIBS += -L$$p
|
LIBS += -L$$p
|
||||||
}
|
}
|
||||||
|
|
||||||
CONFIG -= qt
|
CONFIG -= qt
|
||||||
|
@ -6,7 +6,7 @@ SOURCES = opengles31.cpp
|
|||||||
INCLUDEPATH += $$QMAKE_INCDIR_OPENGL_ES2
|
INCLUDEPATH += $$QMAKE_INCDIR_OPENGL_ES2
|
||||||
|
|
||||||
for(p, QMAKE_LIBDIR_OPENGL_ES2) {
|
for(p, QMAKE_LIBDIR_OPENGL_ES2) {
|
||||||
exists($$p):LIBS += -L$$p
|
LIBS += -L$$p
|
||||||
}
|
}
|
||||||
|
|
||||||
CONFIG -= qt
|
CONFIG -= qt
|
||||||
|
50
config.tests/win/directwrite2/directwrite2.cpp
Normal file
50
config.tests/win/directwrite2/directwrite2.cpp
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the config.tests of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
|
** 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 https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 3 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <dwrite_2.h>
|
||||||
|
#include <d2d1.h>
|
||||||
|
|
||||||
|
int main(int, char**)
|
||||||
|
{
|
||||||
|
IUnknown *factory = 0;
|
||||||
|
DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED,
|
||||||
|
__uuidof(IDWriteFactory2),
|
||||||
|
&factory);
|
||||||
|
return 0;
|
||||||
|
}
|
4
config.tests/win/directwrite2/directwrite2.pro
Normal file
4
config.tests/win/directwrite2/directwrite2.pro
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
SOURCES = directwrite2.cpp
|
||||||
|
LIBS += -ldwrite
|
||||||
|
CONFIG -= qt
|
||||||
|
CONFIG += console
|
14
configure
vendored
14
configure
vendored
@ -768,6 +768,7 @@ CFG_SANITIZE_UNDEFINED=no
|
|||||||
CFG_PCRE=auto
|
CFG_PCRE=auto
|
||||||
CFG_STDCXX=auto
|
CFG_STDCXX=auto
|
||||||
CFG_DIRECTWRITE=no
|
CFG_DIRECTWRITE=no
|
||||||
|
CFG_DIRECTWRITE2=auto
|
||||||
CFG_WERROR=auto
|
CFG_WERROR=auto
|
||||||
CFG_HEADERSCLEAN=auto
|
CFG_HEADERSCLEAN=auto
|
||||||
CFG_QREAL=double
|
CFG_QREAL=double
|
||||||
@ -5463,6 +5464,18 @@ elif [ "$CFG_GSTREAMER" = "1.0" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Detect DirectWrite 2 support on Windows
|
||||||
|
if [ "$CFG_DIRECTWRITE" = "no" ]; then
|
||||||
|
CFG_DIRECTWRITE2=no
|
||||||
|
fi
|
||||||
|
if [ "$CFG_DIRECTWRITE2" = "auto" ]; then
|
||||||
|
if compileTest win/directwrite2 "directwrite2"; then
|
||||||
|
CFG_DIRECTWRITE2=yes
|
||||||
|
else
|
||||||
|
CFG_DIRECTWRITE2=no
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
# ask for all that hasn't been auto-detected or specified in the arguments
|
# ask for all that hasn't been auto-detected or specified in the arguments
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
@ -5701,6 +5714,7 @@ fi
|
|||||||
[ "$CFG_XINPUT2" = "yes" ] && QT_CONFIG="$QT_CONFIG xinput2"
|
[ "$CFG_XINPUT2" = "yes" ] && QT_CONFIG="$QT_CONFIG xinput2"
|
||||||
[ "$CFG_SYSTEM_PROXIES" = "yes" ] && QT_CONFIG="$QT_CONFIG system-proxies"
|
[ "$CFG_SYSTEM_PROXIES" = "yes" ] && QT_CONFIG="$QT_CONFIG system-proxies"
|
||||||
[ "$CFG_DIRECTWRITE" = "yes" ] && QT_CONFIG="$QT_CONFIG directwrite"
|
[ "$CFG_DIRECTWRITE" = "yes" ] && QT_CONFIG="$QT_CONFIG directwrite"
|
||||||
|
[ "$CFG_DIRECTWRITE2" = "yes" ] && QT_CONFIG="$QT_CONFIG directwrite2"
|
||||||
|
|
||||||
[ '!' -z "$DEFINES" ] && QMakeVar add EXTRA_DEFINES "$DEFINES"
|
[ '!' -z "$DEFINES" ] && QMakeVar add EXTRA_DEFINES "$DEFINES"
|
||||||
[ '!' -z "$INCLUDES" ] && QMakeVar add EXTRA_INCLUDEPATH "$INCLUDES"
|
[ '!' -z "$INCLUDES" ] && QMakeVar add EXTRA_INCLUDEPATH "$INCLUDES"
|
||||||
|
@ -69,9 +69,11 @@ MainWindow::MainWindow()
|
|||||||
connect(textEdit->document(), &QTextDocument::contentsChanged,
|
connect(textEdit->document(), &QTextDocument::contentsChanged,
|
||||||
this, &MainWindow::documentWasModified);
|
this, &MainWindow::documentWasModified);
|
||||||
|
|
||||||
|
#ifndef QT_NO_SESSIONMANAGER
|
||||||
QGuiApplication::setFallbackSessionManagementEnabled(false);
|
QGuiApplication::setFallbackSessionManagementEnabled(false);
|
||||||
connect(qApp, &QGuiApplication::commitDataRequest,
|
connect(qApp, &QGuiApplication::commitDataRequest,
|
||||||
this, &MainWindow::commitData);
|
this, &MainWindow::commitData);
|
||||||
|
#endif
|
||||||
|
|
||||||
setCurrentFile(QString());
|
setCurrentFile(QString());
|
||||||
setUnifiedTitleAndToolBarOnMac(true);
|
setUnifiedTitleAndToolBarOnMac(true);
|
||||||
@ -397,7 +399,7 @@ QString MainWindow::strippedName(const QString &fullFileName)
|
|||||||
return QFileInfo(fullFileName).fileName();
|
return QFileInfo(fullFileName).fileName();
|
||||||
}
|
}
|
||||||
//! [49]
|
//! [49]
|
||||||
|
#ifndef QT_NO_SESSIONMANAGER
|
||||||
void MainWindow::commitData(QSessionManager &manager)
|
void MainWindow::commitData(QSessionManager &manager)
|
||||||
{
|
{
|
||||||
if (manager.allowsInteraction()) {
|
if (manager.allowsInteraction()) {
|
||||||
@ -409,3 +411,4 @@ void MainWindow::commitData(QSessionManager &manager)
|
|||||||
save();
|
save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -80,7 +80,9 @@ private slots:
|
|||||||
bool saveAs();
|
bool saveAs();
|
||||||
void about();
|
void about();
|
||||||
void documentWasModified();
|
void documentWasModified();
|
||||||
|
#ifndef QT_NO_SESSIONMANAGER
|
||||||
void commitData(QSessionManager &);
|
void commitData(QSessionManager &);
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void createActions();
|
void createActions();
|
||||||
|
@ -29,7 +29,7 @@ QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB
|
|||||||
QMAKE_CXXFLAGS_APP += $$QMAKE_CFLAGS_APP
|
QMAKE_CXXFLAGS_APP += $$QMAKE_CFLAGS_APP
|
||||||
QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC
|
QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC
|
||||||
QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS
|
QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS
|
||||||
QMAKE_CXXFLAGS_CXX11 += --c++11
|
QMAKE_CXXFLAGS_CXX11 += --c++11 --thread_local_storage
|
||||||
|
|
||||||
QMAKE_LFLAGS += --no_commons -non_shared --link_once_templates --exceptions --stdle
|
QMAKE_LFLAGS += --no_commons -non_shared --link_once_templates --exceptions --stdle
|
||||||
QMAKE_LFLAGS_RELEASE += -Ospeed -Olink -uvfd
|
QMAKE_LFLAGS_RELEASE += -Ospeed -Olink -uvfd
|
||||||
|
@ -9,7 +9,7 @@ include(../angle.conf)
|
|||||||
MAKEFILE_GENERATOR = MSBUILD
|
MAKEFILE_GENERATOR = MSBUILD
|
||||||
QMAKE_COMPILER = msvc
|
QMAKE_COMPILER = msvc
|
||||||
QMAKE_PLATFORM = winrt win32
|
QMAKE_PLATFORM = winrt win32
|
||||||
CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target package_manifest rtti
|
CONFIG = package_manifest $$CONFIG incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target rtti
|
||||||
DEFINES += UNICODE WIN32 QT_LARGEFILE_SUPPORT Q_BYTE_ORDER=Q_LITTLE_ENDIAN \
|
DEFINES += UNICODE WIN32 QT_LARGEFILE_SUPPORT Q_BYTE_ORDER=Q_LITTLE_ENDIAN \
|
||||||
QT_NO_PRINTER QT_NO_PRINTDIALOG # TODO: Remove when printing is re-enabled
|
QT_NO_PRINTER QT_NO_PRINTDIALOG # TODO: Remove when printing is re-enabled
|
||||||
|
|
||||||
@ -95,6 +95,9 @@ VCSOLUTION_EXTENSION = .sln
|
|||||||
VCPROJ_KEYWORD = Qt4VSv1.0
|
VCPROJ_KEYWORD = Qt4VSv1.0
|
||||||
WINRT_ASSETS_PATH = $$PWD/assets
|
WINRT_ASSETS_PATH = $$PWD/assets
|
||||||
|
|
||||||
|
WINRT_MANIFEST.capabilities = defaults
|
||||||
|
WINRT_MANIFEST.capabilities_device = defaults
|
||||||
|
|
||||||
include(../msvc-base.conf)
|
include(../msvc-base.conf)
|
||||||
|
|
||||||
unset(MSC_VER)
|
unset(MSC_VER)
|
||||||
|
41
mkspecs/devices/linux-rpi3-g++/qmake.conf
Normal file
41
mkspecs/devices/linux-rpi3-g++/qmake.conf
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# qmake configuration for the Raspberry Pi 3
|
||||||
|
|
||||||
|
include(../common/linux_device_pre.conf)
|
||||||
|
|
||||||
|
# I consider it a bug that this is required, but our EGL config.test _requires_ it
|
||||||
|
QMAKE_LFLAGS += -Wl,-rpath-link,$$[QT_SYSROOT]/opt/vc/lib
|
||||||
|
|
||||||
|
VC_LIBRARY_PATH = /opt/vc/lib
|
||||||
|
VC_INCLUDE_PATH = =/opt/vc/include
|
||||||
|
|
||||||
|
# terrible, they do not appear to resolve "=" in rpath!
|
||||||
|
VC_LINK_LINE = -L=$${VC_LIBRARY_PATH} -Wl,-rpath-link,$$[QT_SYSROOT]$${VC_LIBRARY_PATH}
|
||||||
|
|
||||||
|
QMAKE_LIBDIR_OPENGL_ES2 = =$${VC_LIBRARY_PATH}
|
||||||
|
QMAKE_LIBDIR_EGL = $$QMAKE_LIBDIR_OPENGL_ES2
|
||||||
|
QMAKE_LIBDIR_OPENVG = $$QMAKE_LIBDIR_OPENGL_ES2
|
||||||
|
|
||||||
|
QMAKE_INCDIR_EGL = \
|
||||||
|
$${VC_INCLUDE_PATH} \
|
||||||
|
$${VC_INCLUDE_PATH}/interface/vcos/pthreads \
|
||||||
|
$${VC_INCLUDE_PATH}/interface/vmcs_host/linux
|
||||||
|
|
||||||
|
QMAKE_INCDIR_OPENGL_ES2 = $${QMAKE_INCDIR_EGL}
|
||||||
|
|
||||||
|
QMAKE_LIBS_OPENGL_ES2 = $${VC_LINK_LINE} -lGLESv2
|
||||||
|
|
||||||
|
# The official opt vc EGL references GLESv2 symbols: need to link it
|
||||||
|
QMAKE_LIBS_EGL = $${VC_LINK_LINE} -lEGL -lGLESv2
|
||||||
|
|
||||||
|
# We deliberately override the existing Qt CFLAGS as they might be problematic
|
||||||
|
QMAKE_CFLAGS = -march=armv8-a+crc -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8 -pipe -Os -mthumb
|
||||||
|
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -std=c++1z
|
||||||
|
|
||||||
|
DISTRO_OPTS += hard-float
|
||||||
|
DISTRO_OPTS += deb-multi-arch
|
||||||
|
|
||||||
|
EGLFS_DEVICE_INTEGRATION= eglfs_brcm
|
||||||
|
|
||||||
|
include(../common/linux_arm_device_post.conf)
|
||||||
|
|
||||||
|
load(qt_config)
|
34
mkspecs/devices/linux-rpi3-g++/qplatformdefs.h
Normal file
34
mkspecs/devices/linux-rpi3-g++/qplatformdefs.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2015 The Qt Company Ltd.
|
||||||
|
** Contact: http://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the qmake spec of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL21$
|
||||||
|
** 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 Lesser General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 or version 3 as published by the Free
|
||||||
|
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||||
|
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||||
|
** following information to ensure the GNU Lesser General Public License
|
||||||
|
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** As a special exception, The Qt Company gives you certain additional
|
||||||
|
** rights. These rights are described in The Qt Company LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "../../linux-g++/qplatformdefs.h"
|
@ -57,12 +57,14 @@ for(group, groups) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$${group}_header.commands = $$QMAKE_QDBUSXML2CPP $$hdr_flags $$qdbusxml2cpp_option ${QMAKE_FILE_OUT}: ${QMAKE_FILE_IN}
|
$${group}_header.commands = $$QMAKE_QDBUSXML2CPP $$hdr_flags $$qdbusxml2cpp_option ${QMAKE_FILE_OUT}: ${QMAKE_FILE_IN}
|
||||||
|
$${group}_header.depends = $$QMAKE_QDBUSXML2CPP_EXE
|
||||||
$${group}_header.output = ${QMAKE_FUNC_FILE_IN_qdbusOutputBasename}_$${dbus_type}.h
|
$${group}_header.output = ${QMAKE_FUNC_FILE_IN_qdbusOutputBasename}_$${dbus_type}.h
|
||||||
$${group}_header.name = DBUSXML2CPP $${dbus_TYPE} HEADER ${QMAKE_FILE_IN}
|
$${group}_header.name = DBUSXML2CPP $${dbus_TYPE} HEADER ${QMAKE_FILE_IN}
|
||||||
$${group}_header.variable_out = $${GROUP}_HEADERS
|
$${group}_header.variable_out = $${GROUP}_HEADERS
|
||||||
$${group}_header.input = $$input_list
|
$${group}_header.input = $$input_list
|
||||||
|
|
||||||
$${group}_source.commands = $$QMAKE_QDBUSXML2CPP -i ${QMAKE_FILE_OUT_BASE}.h $$src_flags $$qdbusxml2cpp_option :${QMAKE_FILE_OUT} ${QMAKE_FILE_IN}
|
$${group}_source.commands = $$QMAKE_QDBUSXML2CPP -i ${QMAKE_FILE_OUT_BASE}.h $$src_flags $$qdbusxml2cpp_option :${QMAKE_FILE_OUT} ${QMAKE_FILE_IN}
|
||||||
|
$${group}_source.depends = $$QMAKE_QDBUSXML2CPP_EXE
|
||||||
$${group}_source.output = ${QMAKE_FUNC_FILE_IN_qdbusOutputBasename}_$${dbus_type}.cpp
|
$${group}_source.output = ${QMAKE_FUNC_FILE_IN_qdbusOutputBasename}_$${dbus_type}.cpp
|
||||||
$${group}_source.name = DBUSXML2CPP $${dbus_TYPE} SOURCE ${QMAKE_FILE_IN}
|
$${group}_source.name = DBUSXML2CPP $${dbus_TYPE} SOURCE ${QMAKE_FILE_IN}
|
||||||
$${group}_source.variable_out = SOURCES
|
$${group}_source.variable_out = SOURCES
|
||||||
@ -70,6 +72,7 @@ for(group, groups) {
|
|||||||
$${group}_source.depends = $$eval($${group}_header.output) # this actually belongs to the object file
|
$${group}_source.depends = $$eval($${group}_header.output) # this actually belongs to the object file
|
||||||
|
|
||||||
$${group}_moc.commands = $$moc_header.commands
|
$${group}_moc.commands = $$moc_header.commands
|
||||||
|
$${group}_moc.depends = $$QMAKE_MOC_EXE
|
||||||
$${group}_moc.output = $$moc_header.output
|
$${group}_moc.output = $$moc_header.output
|
||||||
$${group}_moc.input = $${GROUP}_HEADERS
|
$${group}_moc.input = $${GROUP}_HEADERS
|
||||||
$${group}_moc.variable_out = GENERATED_SOURCES
|
$${group}_moc.variable_out = GENERATED_SOURCES
|
||||||
|
@ -4,5 +4,5 @@ QMAKE_CFLAGS += $$QMAKE_CFLAGS_EGL
|
|||||||
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_EGL
|
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_EGL
|
||||||
LIBS += $$QMAKE_LFLAGS_EGL
|
LIBS += $$QMAKE_LFLAGS_EGL
|
||||||
for(p, QMAKE_LIBDIR_EGL) {
|
for(p, QMAKE_LIBDIR_EGL) {
|
||||||
exists($$p): LIBS_PRIVATE += -L$$p
|
LIBS_PRIVATE += -L$$p
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,18 @@ android {
|
|||||||
|
|
||||||
ANDROID_JAR_FILE = $$ANDROID_SDK_ROOT/platforms/$$API_VERSION_TO_USE/android.jar
|
ANDROID_JAR_FILE = $$ANDROID_SDK_ROOT/platforms/$$API_VERSION_TO_USE/android.jar
|
||||||
!exists($$ANDROID_JAR_FILE) {
|
!exists($$ANDROID_JAR_FILE) {
|
||||||
error("The Path $$ANDROID_JAR_FILE does not exist. Make sure the ANDROID_SDK_ROOT and ANDROID_API_VERSION environment variables are correctly set.")
|
ANDROID_API_VERSION = $$section(API_VERSION_TO_USE, -, 1, 1) # Get version number from android-XY to ensure numeric comparison
|
||||||
|
ANDROID_API_VERSIONS = $$files($$ANDROID_SDK_ROOT/platforms/*)
|
||||||
|
for (VERSION, ANDROID_API_VERSIONS) {
|
||||||
|
BASENAME = $$basename(VERSION)
|
||||||
|
BASENAME = $$section(BASENAME, -, 1, 1)
|
||||||
|
greaterThan(BASENAME, $$ANDROID_API_VERSION): ANDROID_API_VERSION = $$BASENAME
|
||||||
|
}
|
||||||
|
API_VERSION_TO_USE = android-$$ANDROID_API_VERSION
|
||||||
|
ANDROID_JAR_FILE = $$ANDROID_SDK_ROOT/platforms/$$API_VERSION_TO_USE/android.jar
|
||||||
|
}
|
||||||
|
!exists($$ANDROID_JAR_FILE) {
|
||||||
|
error("No suitable Android SDK platform found. Minimum version is $${API_VERSION_TO_USE}.")
|
||||||
}
|
}
|
||||||
JAVACLASSPATH += $$ANDROID_JAR_FILE
|
JAVACLASSPATH += $$ANDROID_JAR_FILE
|
||||||
|
|
||||||
|
@ -67,9 +67,9 @@ INCREDIBUILD_XGE += moc_source
|
|||||||
INCLUDEPATH += $$absolute_path($$MOC_DIR, $$OUT_PWD)
|
INCLUDEPATH += $$absolute_path($$MOC_DIR, $$OUT_PWD)
|
||||||
|
|
||||||
#auto depend on moc
|
#auto depend on moc
|
||||||
unix:!no_mocdepend {
|
!no_mocdepend {
|
||||||
moc_source.depends += $$first(QMAKE_MOC)
|
moc_source.depends += $$QMAKE_MOC_EXE
|
||||||
moc_header.depends += $$first(QMAKE_MOC)
|
moc_header.depends += $$QMAKE_MOC_EXE
|
||||||
}
|
}
|
||||||
|
|
||||||
#generate a mocclean
|
#generate a mocclean
|
||||||
|
@ -5,6 +5,7 @@ isEmpty(QGLTF_DIR): QGLTF_DIR = .
|
|||||||
qgltf.input = QT3D_MODELS
|
qgltf.input = QT3D_MODELS
|
||||||
qgltf.output = $$QGLTF_DIR/${QMAKE_FILE_BASE}.qrc
|
qgltf.output = $$QGLTF_DIR/${QMAKE_FILE_BASE}.qrc
|
||||||
qgltf.variable_out += RESOURCES
|
qgltf.variable_out += RESOURCES
|
||||||
|
qgltf.depends = $$QMAKE_QGLTF_EXE
|
||||||
qgltf.commands = $$QMAKE_QGLTF -d $$QGLTF_DIR $$QGLTF_PARAMS ${QMAKE_FILE_NAME}
|
qgltf.commands = $$QMAKE_QGLTF -d $$QGLTF_DIR $$QGLTF_PARAMS ${QMAKE_FILE_NAME}
|
||||||
silent: qgltf.commands = @echo qgltf ${QMAKE_FILE_IN} && $$qgltf.commands -s
|
silent: qgltf.commands = @echo qgltf ${QMAKE_FILE_IN} && $$qgltf.commands -s
|
||||||
qgltf.CONFIG += no_link
|
qgltf.CONFIG += no_link
|
||||||
|
@ -23,6 +23,7 @@ for (s, QLALRSOURCES) {
|
|||||||
$${base}.input = $$invar
|
$${base}.input = $$invar
|
||||||
$${base}.output = $$QLALR_DIR/$${parser}.cpp
|
$${base}.output = $$QLALR_DIR/$${parser}.cpp
|
||||||
$${base}.variable_out = GENERATED_SOURCES
|
$${base}.variable_out = GENERATED_SOURCES
|
||||||
|
$${base}.depends = $$QMAKE_QLALR_EXE
|
||||||
$${base}.commands = $$QMAKE_QLALR $$QMAKE_QLALRFLAGS ${QMAKE_FILE_IN}
|
$${base}.commands = $$QMAKE_QLALR $$QMAKE_QLALRFLAGS ${QMAKE_FILE_IN}
|
||||||
silent: $${base}.commands = @echo qlalr ${QMAKE_FILE_IN} && $${base}.commands
|
silent: $${base}.commands = @echo qlalr ${QMAKE_FILE_IN} && $${base}.commands
|
||||||
$${base}.name = QLALR ${QMAKE_FILE_IN}
|
$${base}.name = QLALR ${QMAKE_FILE_IN}
|
||||||
|
@ -27,7 +27,7 @@ CONFIG += relative_qt_rpath # Qt's QML plugins should be relocatable
|
|||||||
}
|
}
|
||||||
isEmpty(TARGETPATH): TARGETPATH = $$eval(QT.$${CXX_MODULE}.name)
|
isEmpty(TARGETPATH): TARGETPATH = $$eval(QT.$${CXX_MODULE}.name)
|
||||||
|
|
||||||
!no_cxx_module:win32:CONFIG(shared, static|shared) {
|
win32:CONFIG(shared, static|shared) {
|
||||||
# Embed a VERSIONINFO resource into the plugin's DLL.
|
# Embed a VERSIONINFO resource into the plugin's DLL.
|
||||||
isEmpty(VERSION): VERSION = $$MODULE_VERSION
|
isEmpty(VERSION): VERSION = $$MODULE_VERSION
|
||||||
CONFIG += skip_target_version_ext
|
CONFIG += skip_target_version_ext
|
||||||
|
@ -141,6 +141,15 @@ for(ever) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
# Add capabilities as defined by modules used in the project
|
||||||
|
winrt {
|
||||||
|
MODULE_WINRT_CAPABILITIES = $$eval(QT.$${QTLIB}.winrt_capabilities)
|
||||||
|
!isEmpty(MODULE_WINRT_CAPABILITIES): \
|
||||||
|
WINRT_MANIFEST.capabilities_default += $$MODULE_WINRT_CAPABILITIES
|
||||||
|
MODULE_WINRT_CAPABILITIES_DEVICE = $$eval(QT.$${QTLIB}.winrt_capabilities_device)
|
||||||
|
!isEmpty(MODULE_WINRT_CAPABILITIES_DEVICE): \
|
||||||
|
WINRT_MANIFEST.capabilities_device_default += $$MODULE_WINRT_CAPABILITIES_DEVICE
|
||||||
|
}
|
||||||
}
|
}
|
||||||
!isEmpty(BAD_QT):error("Unknown module(s) in QT$$var_sfx: $$replace(BAD_QT, _private$, -private)")
|
!isEmpty(BAD_QT):error("Unknown module(s) in QT$$var_sfx: $$replace(BAD_QT, _private$, -private)")
|
||||||
|
|
||||||
|
@ -73,16 +73,24 @@ defineTest(qtPrepareTool) {
|
|||||||
isEmpty(cmd) {
|
isEmpty(cmd) {
|
||||||
cmd = $$[QT_HOST_BINS]/$$2
|
cmd = $$[QT_HOST_BINS]/$$2
|
||||||
exists($${cmd}.pl) {
|
exists($${cmd}.pl) {
|
||||||
|
$${1}_EXE = $${cmd}.pl
|
||||||
cmd = perl -w $$system_path($${cmd}.pl)
|
cmd = perl -w $$system_path($${cmd}.pl)
|
||||||
} else: contains(QMAKE_HOST.os, Windows) {
|
} else: contains(QMAKE_HOST.os, Windows) {
|
||||||
|
$${1}_EXE = $${cmd}.exe
|
||||||
cmd = $$system_path($${cmd}.exe)
|
cmd = $$system_path($${cmd}.exe)
|
||||||
} else:contains(QMAKE_HOST.os, Darwin) {
|
} else:contains(QMAKE_HOST.os, Darwin) {
|
||||||
BUNDLENAME = $${cmd}.app/Contents/MacOS/$$2
|
BUNDLENAME = $${cmd}.app/Contents/MacOS/$$2
|
||||||
exists($$BUNDLENAME) {
|
exists($$BUNDLENAME) {
|
||||||
cmd = $$BUNDLENAME
|
cmd = $$BUNDLENAME
|
||||||
}
|
}
|
||||||
|
$${1}_EXE = $$cmd
|
||||||
|
} else {
|
||||||
|
$${1}_EXE = $$cmd
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
$${1}_EXE = $$last(cmd)
|
||||||
}
|
}
|
||||||
|
export($${1}_EXE)
|
||||||
QT_TOOL_ENV += $$eval(QT_TOOL.$${2}.envvars)
|
QT_TOOL_ENV += $$eval(QT_TOOL.$${2}.envvars)
|
||||||
QT_TOOL_NAME = $$2
|
QT_TOOL_NAME = $$2
|
||||||
!isEmpty(3)|!isEmpty(4) {
|
!isEmpty(3)|!isEmpty(4) {
|
||||||
|
@ -104,6 +104,9 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri
|
|||||||
"QT.$${MODULE_ID}.DEFINES = $$val_escape(MODULE_DEFINES)" \
|
"QT.$${MODULE_ID}.DEFINES = $$val_escape(MODULE_DEFINES)" \
|
||||||
"" \
|
"" \
|
||||||
"QT_MODULES += $$MODULE"
|
"QT_MODULES += $$MODULE"
|
||||||
|
winrt: MODULE_PRI_CONT += \
|
||||||
|
"QT.$${MODULE_ID}.winrt_capabilities =$$join(MODULE_WINRT_CAPABILITIES, " ", " ")" \
|
||||||
|
"QT.$${MODULE_ID}.winrt_capabilities_device =$$join(MODULE_WINRT_CAPABILITIES_DEVICE, " ", " ")"
|
||||||
write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.")
|
write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.")
|
||||||
!internal_module:!no_private_module {
|
!internal_module:!no_private_module {
|
||||||
module_build_type += internal_module
|
module_build_type += internal_module
|
||||||
@ -186,6 +189,7 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri
|
|||||||
for(var, $$list(VERSION MAJOR_VERSION MINOR_VERSION PATCH_VERSION \
|
for(var, $$list(VERSION MAJOR_VERSION MINOR_VERSION PATCH_VERSION \
|
||||||
name module depends run_depends plugin_types module_config CONFIG DEFINES \
|
name module depends run_depends plugin_types module_config CONFIG DEFINES \
|
||||||
priority includes bins libs frameworks libexecs plugins imports qml \
|
priority includes bins libs frameworks libexecs plugins imports qml \
|
||||||
|
winrt_capabilities winrt_capabilities_device \
|
||||||
)):defined(QT.$${mod}.$$var, var):cache(QT.$${mod}.$$var, transient)
|
)):defined(QT.$${mod}.$$var, var):cache(QT.$${mod}.$$var, transient)
|
||||||
}
|
}
|
||||||
cache(QT_MODULES, transient)
|
cache(QT_MODULES, transient)
|
||||||
|
@ -33,7 +33,18 @@ win32 {
|
|||||||
mac {
|
mac {
|
||||||
equals(TEMPLATE, lib) {
|
equals(TEMPLATE, lib) {
|
||||||
lib_bundle {
|
lib_bundle {
|
||||||
QMAKE_RESOLVED_TARGET = $${QMAKE_RESOLVED_TARGET}$${TARGET}.framework/$${TARGET}
|
!isEmpty(QMAKE_FRAMEWORK_BUNDLE_NAME): \
|
||||||
|
framework_target = $$QMAKE_FRAMEWORK_BUNDLE_NAME
|
||||||
|
else: \
|
||||||
|
framework_target = $$TARGET
|
||||||
|
QMAKE_RESOLVED_BUNDLE = $${QMAKE_RESOLVED_TARGET}$${framework_target}.framework
|
||||||
|
!shallow_bundle {
|
||||||
|
TEMP_VERSION = $$section(VERSION, ., 0, 0)
|
||||||
|
isEmpty(TEMP_VERSION):TEMP_VERSION = A
|
||||||
|
QMAKE_RESOLVED_TARGET = $${QMAKE_RESOLVED_BUNDLE}/Versions/$${TEMP_VERSION}/$${TARGET}
|
||||||
|
} else {
|
||||||
|
QMAKE_RESOLVED_TARGET = $${QMAKE_RESOLVED_BUNDLE}/$${TARGET}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
QMAKE_RESOLVED_TARGET = $${QMAKE_RESOLVED_TARGET}$${LIBPREFIX}$${TARGET}
|
QMAKE_RESOLVED_TARGET = $${QMAKE_RESOLVED_TARGET}$${LIBPREFIX}$${TARGET}
|
||||||
!plugin {
|
!plugin {
|
||||||
@ -46,7 +57,15 @@ win32 {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
app_bundle {
|
app_bundle {
|
||||||
QMAKE_RESOLVED_TARGET = $${QMAKE_RESOLVED_TARGET}$${TARGET}.app/Contents/MacOS/$${TARGET}
|
!isEmpty(QMAKE_APPLICATION_BUNDLE_NAME): \
|
||||||
|
app_target = $$QMAKE_APPLICATION_BUNDLE_NAME
|
||||||
|
else: \
|
||||||
|
app_target = $$TARGET
|
||||||
|
QMAKE_RESOLVED_BUNDLE = $${QMAKE_RESOLVED_TARGET}$${app_target}.app
|
||||||
|
!shallow_bundle: \
|
||||||
|
QMAKE_RESOLVED_TARGET = $${QMAKE_RESOLVED_BUNDLE}/Contents/MacOS/$${TARGET}
|
||||||
|
else: \
|
||||||
|
QMAKE_RESOLVED_TARGET = $${QMAKE_RESOLVED_BUNDLE}/$${TARGET}
|
||||||
} else {
|
} else {
|
||||||
QMAKE_RESOLVED_TARGET = $${QMAKE_RESOLVED_TARGET}$${TARGET}
|
QMAKE_RESOLVED_TARGET = $${QMAKE_RESOLVED_TARGET}$${TARGET}
|
||||||
}
|
}
|
||||||
|
@ -103,6 +103,7 @@ rcc.clean += $$RCC_CPP $$RCC_TMP
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rcc.depends = $$QMAKE_RCC_EXE
|
||||||
silent:rcc.commands = @echo rcc ${QMAKE_FILE_IN} && $$rcc.commands
|
silent:rcc.commands = @echo rcc ${QMAKE_FILE_IN} && $$rcc.commands
|
||||||
else:rcc.commands ~= s/&&/$$escape_expand(\\n\\t)/g
|
else:rcc.commands ~= s/&&/$$escape_expand(\\n\\t)/g
|
||||||
QMAKE_EXTRA_COMPILERS += rcc
|
QMAKE_EXTRA_COMPILERS += rcc
|
||||||
|
@ -3,6 +3,7 @@ qtPrepareTool(QMAKE_UIC, uic, _DEP)
|
|||||||
isEmpty(UI_DIR):UI_DIR = .
|
isEmpty(UI_DIR):UI_DIR = .
|
||||||
isEmpty(QMAKE_MOD_UIC):QMAKE_MOD_UIC = ui_
|
isEmpty(QMAKE_MOD_UIC):QMAKE_MOD_UIC = ui_
|
||||||
|
|
||||||
|
uic.depends = $$QMAKE_UIC_EXE
|
||||||
uic.commands = $$QMAKE_UIC ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
|
uic.commands = $$QMAKE_UIC ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
|
||||||
uic.depend_command = $$QMAKE_UIC_DEP -d ${QMAKE_FILE_IN}
|
uic.depend_command = $$QMAKE_UIC_DEP -d ${QMAKE_FILE_IN}
|
||||||
uic.output = $$UI_DIR/$${QMAKE_MOD_UIC}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)}
|
uic.output = $$UI_DIR/$${QMAKE_MOD_UIC}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)}
|
||||||
|
@ -1 +0,0 @@
|
|||||||
|
|
@ -78,7 +78,7 @@ qtPrepareTool(QMAKE_QTWAYLANDSCANNER, qtwaylandscanner)
|
|||||||
qtwayland_client_header.name = qtwayland ${QMAKE_FILE_BASE}
|
qtwayland_client_header.name = qtwayland ${QMAKE_FILE_BASE}
|
||||||
qtwayland_client_header.input = WAYLANDCLIENTSOURCES
|
qtwayland_client_header.input = WAYLANDCLIENTSOURCES
|
||||||
qtwayland_client_header.variable_out = HEADERS
|
qtwayland_client_header.variable_out = HEADERS
|
||||||
qtwayland_client_header.depends = $${WAYLAND_CLIENT_HEADER_DEST}wayland-${QMAKE_FILE_BASE}-client-protocol$${first(QMAKE_EXT_H)}
|
qtwayland_client_header.depends = $$QMAKE_QTWAYLANDSCANNER_EXE $${WAYLAND_CLIENT_HEADER_DEST}wayland-${QMAKE_FILE_BASE}-client-protocol$${first(QMAKE_EXT_H)}
|
||||||
qtwayland_client_header.output = $${WAYLAND_CLIENT_HEADER_DEST}qwayland-${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)}
|
qtwayland_client_header.output = $${WAYLAND_CLIENT_HEADER_DEST}qwayland-${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)}
|
||||||
qtwayland_client_header.commands = $$QMAKE_QTWAYLANDSCANNER client-header ${QMAKE_FILE_IN} $$WAYLAND_CLIENT_INCLUDE_DIR > ${QMAKE_FILE_OUT}
|
qtwayland_client_header.commands = $$QMAKE_QTWAYLANDSCANNER client-header ${QMAKE_FILE_IN} $$WAYLAND_CLIENT_INCLUDE_DIR > ${QMAKE_FILE_OUT}
|
||||||
silent:qtwayland_client_header.commands = @echo QtWayland client header ${QMAKE_FILE_IN} && $$qtwayland_client_header.commands
|
silent:qtwayland_client_header.commands = @echo QtWayland client header ${QMAKE_FILE_IN} && $$qtwayland_client_header.commands
|
||||||
@ -87,7 +87,7 @@ QMAKE_EXTRA_COMPILERS += qtwayland_client_header
|
|||||||
qtwayland_client_code.name = qtwayland ${QMAKE_FILE_BASE}
|
qtwayland_client_code.name = qtwayland ${QMAKE_FILE_BASE}
|
||||||
qtwayland_client_code.input = WAYLANDCLIENTSOURCES
|
qtwayland_client_code.input = WAYLANDCLIENTSOURCES
|
||||||
qtwayland_client_code.variable_out = SOURCES
|
qtwayland_client_code.variable_out = SOURCES
|
||||||
qtwayland_client_code.depends = $${WAYLAND_CLIENT_HEADER_DEST}qwayland-${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)}
|
qtwayland_client_code.depends = $$QMAKE_QTWAYLANDSCANNER_EXE $${WAYLAND_CLIENT_HEADER_DEST}qwayland-${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)}
|
||||||
qtwayland_client_code.output = qwayland-${QMAKE_FILE_BASE}.cpp
|
qtwayland_client_code.output = qwayland-${QMAKE_FILE_BASE}.cpp
|
||||||
qtwayland_client_code.commands = $$QMAKE_QTWAYLANDSCANNER client-code ${QMAKE_FILE_IN} $$WAYLAND_CLIENT_INCLUDE_DIR > ${QMAKE_FILE_OUT}
|
qtwayland_client_code.commands = $$QMAKE_QTWAYLANDSCANNER client-code ${QMAKE_FILE_IN} $$WAYLAND_CLIENT_INCLUDE_DIR > ${QMAKE_FILE_OUT}
|
||||||
silent:qtwayland_client_code.commands = @echo QtWayland client code ${QMAKE_FILE_IN} && $$qtwayland_client_code.commands
|
silent:qtwayland_client_code.commands = @echo QtWayland client code ${QMAKE_FILE_IN} && $$qtwayland_client_code.commands
|
||||||
@ -96,7 +96,7 @@ QMAKE_EXTRA_COMPILERS += qtwayland_client_code
|
|||||||
qtwayland_server_header.name = qtwayland ${QMAKE_FILE_BASE}
|
qtwayland_server_header.name = qtwayland ${QMAKE_FILE_BASE}
|
||||||
qtwayland_server_header.input = WAYLANDSERVERSOURCES
|
qtwayland_server_header.input = WAYLANDSERVERSOURCES
|
||||||
qtwayland_server_header.variable_out = HEADERS
|
qtwayland_server_header.variable_out = HEADERS
|
||||||
qtwayland_server_header.depends = $${WAYLAND_SERVER_HEADER_DEST}wayland-${QMAKE_FILE_BASE}-server-protocol$${first(QMAKE_EXT_H)}
|
qtwayland_server_header.depends = $$QMAKE_QTWAYLANDSCANNER_EXE $${WAYLAND_SERVER_HEADER_DEST}wayland-${QMAKE_FILE_BASE}-server-protocol$${first(QMAKE_EXT_H)}
|
||||||
qtwayland_server_header.output = $${WAYLAND_SERVER_HEADER_DEST}qwayland-server-${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)}
|
qtwayland_server_header.output = $${WAYLAND_SERVER_HEADER_DEST}qwayland-server-${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)}
|
||||||
qtwayland_server_header.commands = $$QMAKE_QTWAYLANDSCANNER server-header ${QMAKE_FILE_IN} $$WAYLAND_SERVER_INCLUDE_DIR > ${QMAKE_FILE_OUT}
|
qtwayland_server_header.commands = $$QMAKE_QTWAYLANDSCANNER server-header ${QMAKE_FILE_IN} $$WAYLAND_SERVER_INCLUDE_DIR > ${QMAKE_FILE_OUT}
|
||||||
silent:qtwayland_server_header.commands = @echo QtWayland server header ${QMAKE_FILE_IN} && $$qtwayland_server_header.commands
|
silent:qtwayland_server_header.commands = @echo QtWayland server header ${QMAKE_FILE_IN} && $$qtwayland_server_header.commands
|
||||||
@ -105,7 +105,7 @@ QMAKE_EXTRA_COMPILERS += qtwayland_server_header
|
|||||||
qtwayland_server_code.name = qtwayland ${QMAKE_FILE_BASE}
|
qtwayland_server_code.name = qtwayland ${QMAKE_FILE_BASE}
|
||||||
qtwayland_server_code.input = WAYLANDSERVERSOURCES
|
qtwayland_server_code.input = WAYLANDSERVERSOURCES
|
||||||
qtwayland_server_code.variable_out = SOURCES
|
qtwayland_server_code.variable_out = SOURCES
|
||||||
qtwayland_server_code.depends = $${WAYLAND_SERVER_HEADER_DEST}qwayland-server-${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)}
|
qtwayland_server_code.depends = $$QMAKE_QTWAYLANDSCANNER_EXE $${WAYLAND_SERVER_HEADER_DEST}qwayland-server-${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)}
|
||||||
qtwayland_server_code.output = qwayland-server-${QMAKE_FILE_BASE}.cpp
|
qtwayland_server_code.output = qwayland-server-${QMAKE_FILE_BASE}.cpp
|
||||||
qtwayland_server_code.commands = $$QMAKE_QTWAYLANDSCANNER server-code ${QMAKE_FILE_IN} $$WAYLAND_SERVER_INCLUDE_DIR > ${QMAKE_FILE_OUT}
|
qtwayland_server_code.commands = $$QMAKE_QTWAYLANDSCANNER server-code ${QMAKE_FILE_IN} $$WAYLAND_SERVER_INCLUDE_DIR > ${QMAKE_FILE_OUT}
|
||||||
silent:qtwayland_server_code.commands = @echo QtWayland server code ${QMAKE_FILE_IN} && $$qtwayland_server_code.commands
|
silent:qtwayland_server_code.commands = @echo QtWayland server code ${QMAKE_FILE_IN} && $$qtwayland_server_code.commands
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
qtPrepareTool(QMAKE_DUMPCPP, dumpcpp)
|
qtPrepareTool(QMAKE_DUMPCPP, dumpcpp)
|
||||||
|
|
||||||
|
dumpcpp_decl.depends = $$QMAKE_DUMPCPP_EXE
|
||||||
dumpcpp_decl.commands = $$QMAKE_DUMPCPP ${QMAKE_FILE_IN} -o ${QMAKE_FILE_BASE}
|
dumpcpp_decl.commands = $$QMAKE_DUMPCPP ${QMAKE_FILE_IN} -o ${QMAKE_FILE_BASE}
|
||||||
qaxcontainer_compat: dumpcpp_decl.commands += -compat
|
qaxcontainer_compat: dumpcpp_decl.commands += -compat
|
||||||
dumpcpp_decl.output = ${QMAKE_FILE_BASE}.h
|
dumpcpp_decl.output = ${QMAKE_FILE_BASE}.h
|
||||||
|
@ -112,10 +112,19 @@
|
|||||||
# capability anymore and is assumed to be standard.
|
# capability anymore and is assumed to be standard.
|
||||||
*-msvc2015: WINRT_MANIFEST.capabilities += internetClient
|
*-msvc2015: WINRT_MANIFEST.capabilities += internetClient
|
||||||
|
|
||||||
|
contains(WINRT_MANIFEST.capabilities, defaults) {
|
||||||
|
WINRT_MANIFEST.capabilities -= defaults
|
||||||
|
WINRT_MANIFEST.capabilities += $$WINRT_MANIFEST.capabilities_default
|
||||||
|
}
|
||||||
|
|
||||||
|
contains(WINRT_MANIFEST.capabilities_device, defaults) {
|
||||||
|
WINRT_MANIFEST.capabilities_device -= defaults
|
||||||
|
WINRT_MANIFEST.capabilities_device += $$WINRT_MANIFEST.capabilities_device_default
|
||||||
|
}
|
||||||
|
|
||||||
# Capabilities are given as a string list and may change with the configuration (network, sensors, etc.)
|
# Capabilities are given as a string list and may change with the configuration (network, sensors, etc.)
|
||||||
WINRT_MANIFEST.capabilities = $$unique(WINRT_MANIFEST.capabilities)
|
WINRT_MANIFEST.capabilities = $$unique(WINRT_MANIFEST.capabilities)
|
||||||
WINRT_MANIFEST.capabilities_device = $$unique(WINRT_MANIFEST.capabilities_device)
|
WINRT_MANIFEST.capabilities_device = $$unique(WINRT_MANIFEST.capabilities_device)
|
||||||
|
|
||||||
!isEmpty(WINRT_MANIFEST.capabilities)|!isEmpty(WINRT_MANIFEST.capabilities_device) {
|
!isEmpty(WINRT_MANIFEST.capabilities)|!isEmpty(WINRT_MANIFEST.capabilities_device) {
|
||||||
MANIFEST_CAPABILITIES += "<Capabilities>"
|
MANIFEST_CAPABILITIES += "<Capabilities>"
|
||||||
for(CAPABILITY, WINRT_MANIFEST.capabilities): \
|
for(CAPABILITY, WINRT_MANIFEST.capabilities): \
|
||||||
|
@ -74,6 +74,9 @@
|
|||||||
#else
|
#else
|
||||||
#undef DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS
|
#undef DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
#elif defined(__ghs)
|
||||||
|
// Green Hills toolchain uses a 64bit wide floating point stack
|
||||||
|
#define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
|
||||||
#else
|
#else
|
||||||
#error Target architecture was not detected as supported by Double-Conversion.
|
#error Target architecture was not detected as supported by Double-Conversion.
|
||||||
#endif
|
#endif
|
||||||
|
@ -153,16 +153,15 @@ public class QtActivityDelegate
|
|||||||
m_activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
m_activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||||
m_activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
|
m_activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
|
||||||
try {
|
try {
|
||||||
int flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
|
if (Build.VERSION.SDK_INT >= 19) {
|
||||||
flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
|
int flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
|
||||||
flags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
|
flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
|
||||||
flags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
|
flags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
|
||||||
flags |= View.SYSTEM_UI_FLAG_FULLSCREEN;
|
flags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
|
||||||
|
flags |= View.SYSTEM_UI_FLAG_FULLSCREEN;
|
||||||
if (Build.VERSION.SDK_INT >= 19)
|
|
||||||
flags |= View.class.getDeclaredField("SYSTEM_UI_FLAG_IMMERSIVE_STICKY").getInt(null);
|
flags |= View.class.getDeclaredField("SYSTEM_UI_FLAG_IMMERSIVE_STICKY").getInt(null);
|
||||||
|
m_activity.getWindow().getDecorView().setSystemUiVisibility(flags | View.INVISIBLE);
|
||||||
m_activity.getWindow().getDecorView().setSystemUiVisibility(flags | View.INVISIBLE);
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ public class QtActivityLoader extends QtLoader {
|
|||||||
|
|
||||||
QtActivityLoader(QtActivity activity)
|
QtActivityLoader(QtActivity activity)
|
||||||
{
|
{
|
||||||
super(activity);
|
super(activity, QtActivity.class);
|
||||||
m_activity = activity;
|
m_activity = activity;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
|
@ -133,8 +133,11 @@ public class QtApplication extends Application
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (-1 == stackDeep)
|
||||||
|
return result;
|
||||||
|
|
||||||
final String methodName=elements[stackDeep].getMethodName();
|
final String methodName=elements[stackDeep].getMethodName();
|
||||||
if (-1 == stackDeep || !m_delegateMethods.containsKey(methodName))
|
if (!m_delegateMethods.containsKey(methodName))
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
for (Method m : m_delegateMethods.get(methodName)) {
|
for (Method m : m_delegateMethods.get(methodName)) {
|
||||||
|
@ -152,9 +152,11 @@ public abstract class QtLoader {
|
|||||||
public int m_displayDensity = -1;
|
public int m_displayDensity = -1;
|
||||||
private ContextWrapper m_context;
|
private ContextWrapper m_context;
|
||||||
protected ComponentInfo m_contextInfo;
|
protected ComponentInfo m_contextInfo;
|
||||||
|
private Class<?> m_delegateClass;
|
||||||
|
|
||||||
QtLoader(ContextWrapper context) {
|
QtLoader(ContextWrapper context, Class<?> clazz) {
|
||||||
m_context = context;
|
m_context = context;
|
||||||
|
m_delegateClass = clazz;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Implement in subclass
|
// Implement in subclass
|
||||||
@ -235,7 +237,7 @@ public abstract class QtLoader {
|
|||||||
if (!(Boolean)prepareAppMethod.invoke(qtLoader, m_context, classLoader, loaderParams))
|
if (!(Boolean)prepareAppMethod.invoke(qtLoader, m_context, classLoader, loaderParams))
|
||||||
throw new Exception("");
|
throw new Exception("");
|
||||||
|
|
||||||
QtApplication.setQtContextDelegate(m_context.getClass(), qtLoader);
|
QtApplication.setQtContextDelegate(m_delegateClass, qtLoader);
|
||||||
|
|
||||||
// now load the application library so it's accessible from this class loader
|
// now load the application library so it's accessible from this class loader
|
||||||
if (libName != null)
|
if (libName != null)
|
||||||
|
@ -42,7 +42,7 @@ import android.content.pm.PackageManager;
|
|||||||
public class QtServiceLoader extends QtLoader {
|
public class QtServiceLoader extends QtLoader {
|
||||||
QtService m_service;
|
QtService m_service;
|
||||||
QtServiceLoader(QtService service) {
|
QtServiceLoader(QtService service) {
|
||||||
super(service);
|
super(service, QtService.class);
|
||||||
m_service = service;
|
m_service = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1183,13 +1183,13 @@ bool qSharedBuild() Q_DECL_NOTHROW
|
|||||||
QSysInfo::MacintoshVersion variable gives the version of the
|
QSysInfo::MacintoshVersion variable gives the version of the
|
||||||
system on which the application is run.
|
system on which the application is run.
|
||||||
|
|
||||||
\value MV_9 Mac OS 9 (unsupported)
|
\value MV_9 Mac OS 9
|
||||||
\value MV_10_0 Mac OS X 10.0 (unsupported)
|
\value MV_10_0 Mac OS X 10.0
|
||||||
\value MV_10_1 Mac OS X 10.1 (unsupported)
|
\value MV_10_1 Mac OS X 10.1
|
||||||
\value MV_10_2 Mac OS X 10.2 (unsupported)
|
\value MV_10_2 Mac OS X 10.2
|
||||||
\value MV_10_3 Mac OS X 10.3 (unsupported)
|
\value MV_10_3 Mac OS X 10.3
|
||||||
\value MV_10_4 Mac OS X 10.4 (unsupported)
|
\value MV_10_4 Mac OS X 10.4
|
||||||
\value MV_10_5 Mac OS X 10.5 (unsupported)
|
\value MV_10_5 Mac OS X 10.5
|
||||||
\value MV_10_6 Mac OS X 10.6
|
\value MV_10_6 Mac OS X 10.6
|
||||||
\value MV_10_7 Mac OS X 10.7
|
\value MV_10_7 Mac OS X 10.7
|
||||||
\value MV_10_8 OS X 10.8
|
\value MV_10_8 OS X 10.8
|
||||||
|
@ -1339,7 +1339,7 @@ public:
|
|||||||
|
|
||||||
ImPlatformData = 0x80000000,
|
ImPlatformData = 0x80000000,
|
||||||
ImQueryInput = ImCursorRectangle | ImCursorPosition | ImSurroundingText |
|
ImQueryInput = ImCursorRectangle | ImCursorPosition | ImSurroundingText |
|
||||||
ImCurrentSelection | ImAnchorPosition,
|
ImCurrentSelection | ImAnchorRectangle | ImAnchorPosition,
|
||||||
ImQueryAll = 0xffffffff
|
ImQueryAll = 0xffffffff
|
||||||
};
|
};
|
||||||
Q_DECLARE_FLAGS(InputMethodQueries, InputMethodQuery)
|
Q_DECLARE_FLAGS(InputMethodQueries, InputMethodQuery)
|
||||||
|
@ -234,6 +234,11 @@
|
|||||||
set to true won't use the native dialogs provided by the platform.
|
set to true won't use the native dialogs provided by the platform.
|
||||||
This value has been added in Qt 5.7.
|
This value has been added in Qt 5.7.
|
||||||
|
|
||||||
|
\value AA_SynthesizeMouseForUnhandledTabletEvents All tablet events
|
||||||
|
that are not accepted by the application will be translated
|
||||||
|
to mouse events instead. This attribute is enabled
|
||||||
|
by default. This value has been added in Qt 5.7.
|
||||||
|
|
||||||
\value AA_DontCheckOpenGLContextThreadAffinity When making a context
|
\value AA_DontCheckOpenGLContextThreadAffinity When making a context
|
||||||
current using QOpenGLContext, do not check that the
|
current using QOpenGLContext, do not check that the
|
||||||
\l{QObject#Thread Affinity}{QObject thread affinity}
|
\l{QObject#Thread Affinity}{QObject thread affinity}
|
||||||
@ -2575,6 +2580,8 @@
|
|||||||
\value ImTextAfterCursor The plain text after the cursor. The widget can decide how much text to return,
|
\value ImTextAfterCursor The plain text after the cursor. The widget can decide how much text to return,
|
||||||
but \b{must} not return an empty string unless the cursor is at the end of the document.
|
but \b{must} not return an empty string unless the cursor is at the end of the document.
|
||||||
\value ImEnterKeyType The Enter key type.
|
\value ImEnterKeyType The Enter key type.
|
||||||
|
\value ImAnchorRectangle The bounding rectangle of the selection anchor.
|
||||||
|
This value has been added in Qt 5.7.
|
||||||
|
|
||||||
Masks:
|
Masks:
|
||||||
|
|
||||||
|
@ -117,6 +117,9 @@ static bool parseIp4Internal(IPv4Address &address, const char *ptr, bool acceptL
|
|||||||
return false;
|
return false;
|
||||||
else if (dotCount == 3 || *endptr == '\0')
|
else if (dotCount == 3 || *endptr == '\0')
|
||||||
return true;
|
return true;
|
||||||
|
if (*endptr != '.')
|
||||||
|
return false;
|
||||||
|
|
||||||
++dotCount;
|
++dotCount;
|
||||||
ptr = endptr + 1;
|
ptr = endptr + 1;
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,8 @@ public:
|
|||||||
// Returns \c true if the lock belongs to dead PID, or is old.
|
// Returns \c true if the lock belongs to dead PID, or is old.
|
||||||
// The attempt to delete it will tell us if it was really stale or not, though.
|
// The attempt to delete it will tell us if it was really stale or not, though.
|
||||||
bool isApparentlyStale() const;
|
bool isApparentlyStale() const;
|
||||||
static QString processNameByPid(qint64 pid);
|
// used in dbusmenu
|
||||||
|
Q_CORE_EXPORT static QString processNameByPid(qint64 pid);
|
||||||
|
|
||||||
#ifdef Q_OS_UNIX
|
#ifdef Q_OS_UNIX
|
||||||
static int checkFcntlWorksAfterFlock(const QString &fn);
|
static int checkFcntlWorksAfterFlock(const QString &fn);
|
||||||
|
@ -148,6 +148,8 @@ static QBasicMutex fcntlLock;
|
|||||||
static bool fcntlWorksAfterFlock(const QString &fn)
|
static bool fcntlWorksAfterFlock(const QString &fn)
|
||||||
{
|
{
|
||||||
QMutexLocker lock(&fcntlLock);
|
QMutexLocker lock(&fcntlLock);
|
||||||
|
if (fcntlOK.isDestroyed())
|
||||||
|
return QLockFilePrivate::checkFcntlWorksAfterFlock(fn);
|
||||||
bool *worksPtr = fcntlOK->object(fn);
|
bool *worksPtr = fcntlOK->object(fn);
|
||||||
if (!worksPtr) {
|
if (!worksPtr) {
|
||||||
worksPtr = new bool(QLockFilePrivate::checkFcntlWorksAfterFlock(fn));
|
worksPtr = new bool(QLockFilePrivate::checkFcntlWorksAfterFlock(fn));
|
||||||
|
@ -2297,8 +2297,7 @@ void QProcess::start(const QString &command, OpenMode mode)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString prog = args.first();
|
const QString prog = args.takeFirst();
|
||||||
args.removeFirst();
|
|
||||||
|
|
||||||
start(prog, args, mode);
|
start(prog, args, mode);
|
||||||
}
|
}
|
||||||
@ -2540,8 +2539,7 @@ bool QProcess::startDetached(const QString &command)
|
|||||||
if (args.isEmpty())
|
if (args.isEmpty())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
QString prog = args.first();
|
const QString prog = args.takeFirst();
|
||||||
args.removeFirst();
|
|
||||||
|
|
||||||
return QProcessPrivate::startDetached(prog, args);
|
return QProcessPrivate::startDetached(prog, args);
|
||||||
}
|
}
|
||||||
|
@ -1259,8 +1259,10 @@ bool QResourceFileEngine::open(QIODevice::OpenMode flags)
|
|||||||
}
|
}
|
||||||
if(flags & QIODevice::WriteOnly)
|
if(flags & QIODevice::WriteOnly)
|
||||||
return false;
|
return false;
|
||||||
if(!d->resource.isValid())
|
if (!d->resource.isValid()) {
|
||||||
return false;
|
d->errorString = qt_error_string(ENOENT);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@ static QCFType<CFPropertyListRef> macValue(const QVariant &value)
|
|||||||
|
|
||||||
bool singleton = (values.count() == 1);
|
bool singleton = (values.count() == 1);
|
||||||
if (singleton) {
|
if (singleton) {
|
||||||
switch (values.first().type()) {
|
switch (values.constFirst().type()) {
|
||||||
// should be same as above (look for LIST)
|
// should be same as above (look for LIST)
|
||||||
case QVariant::List:
|
case QVariant::List:
|
||||||
case QVariant::StringList:
|
case QVariant::StringList:
|
||||||
@ -161,7 +161,7 @@ static QCFType<CFPropertyListRef> macValue(const QVariant &value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cfkeys[numUniqueKeys] = QCFString::toCFStringRef(key);
|
cfkeys[numUniqueKeys] = QCFString::toCFStringRef(key);
|
||||||
cfvalues[numUniqueKeys] = singleton ? macValue(values.first()) : macList(values);
|
cfvalues[numUniqueKeys] = singleton ? macValue(values.constFirst()) : macList(values);
|
||||||
++numUniqueKeys;
|
++numUniqueKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -273,7 +273,7 @@ QString QStandardPaths::displayName(StandardLocation type)
|
|||||||
return QCoreApplication::translate("QStandardPaths", "Applications");
|
return QCoreApplication::translate("QStandardPaths", "Applications");
|
||||||
|
|
||||||
if (QCFType<CFURLRef> url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
|
if (QCFType<CFURLRef> url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
|
||||||
standardLocations(type).first().toCFString(),
|
standardLocations(type).constFirst().toCFString(),
|
||||||
kCFURLPOSIXPathStyle, true)) {
|
kCFURLPOSIXPathStyle, true)) {
|
||||||
QCFString name;
|
QCFString name;
|
||||||
CFURLCopyResourcePropertyForKey(url, kCFURLLocalizedNameKey, &name, NULL);
|
CFURLCopyResourcePropertyForKey(url, kCFURLLocalizedNameKey, &name, NULL);
|
||||||
|
@ -58,8 +58,8 @@ QPersistentModelIndexData *QPersistentModelIndexData::create(const QModelIndex &
|
|||||||
QPersistentModelIndexData *d = 0;
|
QPersistentModelIndexData *d = 0;
|
||||||
QAbstractItemModel *model = const_cast<QAbstractItemModel *>(index.model());
|
QAbstractItemModel *model = const_cast<QAbstractItemModel *>(index.model());
|
||||||
QHash<QModelIndex, QPersistentModelIndexData *> &indexes = model->d_func()->persistent.indexes;
|
QHash<QModelIndex, QPersistentModelIndexData *> &indexes = model->d_func()->persistent.indexes;
|
||||||
const QHash<QModelIndex, QPersistentModelIndexData *>::iterator it = indexes.find(index);
|
const auto it = indexes.constFind(index);
|
||||||
if (it != indexes.end()) {
|
if (it != indexes.cend()) {
|
||||||
d = (*it);
|
d = (*it);
|
||||||
} else {
|
} else {
|
||||||
d = new QPersistentModelIndexData(index);
|
d = new QPersistentModelIndexData(index);
|
||||||
@ -603,13 +603,13 @@ void QAbstractItemModelPrivate::removePersistentIndexData(QPersistentModelIndexD
|
|||||||
}
|
}
|
||||||
// make sure our optimization still works
|
// make sure our optimization still works
|
||||||
for (int i = persistent.moved.count() - 1; i >= 0; --i) {
|
for (int i = persistent.moved.count() - 1; i >= 0; --i) {
|
||||||
int idx = persistent.moved[i].indexOf(data);
|
int idx = persistent.moved.at(i).indexOf(data);
|
||||||
if (idx >= 0)
|
if (idx >= 0)
|
||||||
persistent.moved[i].remove(idx);
|
persistent.moved[i].remove(idx);
|
||||||
}
|
}
|
||||||
// update the references to invalidated persistent indexes
|
// update the references to invalidated persistent indexes
|
||||||
for (int i = persistent.invalidated.count() - 1; i >= 0; --i) {
|
for (int i = persistent.invalidated.count() - 1; i >= 0; --i) {
|
||||||
int idx = persistent.invalidated[i].indexOf(data);
|
int idx = persistent.invalidated.at(i).indexOf(data);
|
||||||
if (idx >= 0)
|
if (idx >= 0)
|
||||||
persistent.invalidated[i].remove(idx);
|
persistent.invalidated[i].remove(idx);
|
||||||
}
|
}
|
||||||
@ -2544,13 +2544,13 @@ bool QAbstractItemModel::decodeData(int row, int column, const QModelIndex &pare
|
|||||||
for (int i = 0; i < rows.count(); ++i)
|
for (int i = 0; i < rows.count(); ++i)
|
||||||
rowsToInsert[rows.at(i)] = 1;
|
rowsToInsert[rows.at(i)] = 1;
|
||||||
for (int i = 0; i < rowsToInsert.count(); ++i) {
|
for (int i = 0; i < rowsToInsert.count(); ++i) {
|
||||||
if (rowsToInsert[i] == 1){
|
if (rowsToInsert.at(i) == 1){
|
||||||
rowsToInsert[i] = dragRowCount;
|
rowsToInsert[i] = dragRowCount;
|
||||||
++dragRowCount;
|
++dragRowCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int i = 0; i < rows.count(); ++i)
|
for (int i = 0; i < rows.count(); ++i)
|
||||||
rows[i] = top + rowsToInsert[rows[i]];
|
rows[i] = top + rowsToInsert.at(rows.at(i));
|
||||||
|
|
||||||
QBitArray isWrittenTo(dragRowCount * dragColumnCount);
|
QBitArray isWrittenTo(dragRowCount * dragColumnCount);
|
||||||
|
|
||||||
|
@ -863,7 +863,7 @@ void QItemSelectionModelPrivate::_q_layoutAboutToBeChanged(const QList<QPersiste
|
|||||||
// optimization for when all indexes are selected
|
// optimization for when all indexes are selected
|
||||||
// (only if there is lots of items (1000) because this is not entirely correct)
|
// (only if there is lots of items (1000) because this is not entirely correct)
|
||||||
if (ranges.isEmpty() && currentSelection.count() == 1) {
|
if (ranges.isEmpty() && currentSelection.count() == 1) {
|
||||||
QItemSelectionRange range = currentSelection.first();
|
QItemSelectionRange range = currentSelection.constFirst();
|
||||||
QModelIndex parent = range.parent();
|
QModelIndex parent = range.parent();
|
||||||
tableRowCount = model->rowCount(parent);
|
tableRowCount = model->rowCount(parent);
|
||||||
tableColCount = model->columnCount(parent);
|
tableColCount = model->columnCount(parent);
|
||||||
|
@ -275,7 +275,7 @@ public:
|
|||||||
const QVector<int> &source_to_proxy, const QVector<int> &source_items,
|
const QVector<int> &source_to_proxy, const QVector<int> &source_items,
|
||||||
int &proxy_low, int &proxy_high) const;
|
int &proxy_low, int &proxy_high) const;
|
||||||
|
|
||||||
QModelIndexPairList store_persistent_indexes();
|
QModelIndexPairList store_persistent_indexes() const;
|
||||||
void update_persistent_indexes(const QModelIndexPairList &source_indexes);
|
void update_persistent_indexes(const QModelIndexPairList &source_indexes);
|
||||||
|
|
||||||
void filter_about_to_be_changed(const QModelIndex &source_parent = QModelIndex());
|
void filter_about_to_be_changed(const QModelIndex &source_parent = QModelIndex());
|
||||||
@ -1014,9 +1014,9 @@ void QSortFilterProxyModelPrivate::build_source_to_proxy_mapping(
|
|||||||
Maps the persistent proxy indexes to source indexes and
|
Maps the persistent proxy indexes to source indexes and
|
||||||
returns the list of source indexes.
|
returns the list of source indexes.
|
||||||
*/
|
*/
|
||||||
QModelIndexPairList QSortFilterProxyModelPrivate::store_persistent_indexes()
|
QModelIndexPairList QSortFilterProxyModelPrivate::store_persistent_indexes() const
|
||||||
{
|
{
|
||||||
Q_Q(QSortFilterProxyModel);
|
Q_Q(const QSortFilterProxyModel);
|
||||||
QModelIndexPairList source_indexes;
|
QModelIndexPairList source_indexes;
|
||||||
source_indexes.reserve(persistent.indexes.count());
|
source_indexes.reserve(persistent.indexes.count());
|
||||||
for (QPersistentModelIndexData *data : qAsConst(persistent.indexes)) {
|
for (QPersistentModelIndexData *data : qAsConst(persistent.indexes)) {
|
||||||
|
@ -187,7 +187,7 @@ bool QStringListModel::setData(const QModelIndex &index, const QVariant &value,
|
|||||||
if (index.row() >= 0 && index.row() < lst.size()
|
if (index.row() >= 0 && index.row() < lst.size()
|
||||||
&& (role == Qt::EditRole || role == Qt::DisplayRole)) {
|
&& (role == Qt::EditRole || role == Qt::DisplayRole)) {
|
||||||
lst.replace(index.row(), value.toString());
|
lst.replace(index.row(), value.toString());
|
||||||
emit dataChanged(index, index, QVector<int>() << role);
|
emit dataChanged(index, index, QVector<int>(1, role));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -59,12 +59,12 @@ int appCmdShow = 0;
|
|||||||
|
|
||||||
Q_CORE_EXPORT QString qAppFileName()
|
Q_CORE_EXPORT QString qAppFileName()
|
||||||
{
|
{
|
||||||
return QFileInfo(QCoreApplication::arguments().first()).filePath();
|
return QFileInfo(QCoreApplication::arguments().constFirst()).filePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QCoreApplicationPrivate::appName() const
|
QString QCoreApplicationPrivate::appName() const
|
||||||
{
|
{
|
||||||
return QFileInfo(QCoreApplication::arguments().first()).baseName();
|
return QFileInfo(QCoreApplication::arguments().constFirst()).baseName();
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -143,7 +143,7 @@ static gboolean timerSourceCheckHelper(GTimerSource *src)
|
|||||||
|| (src->processEventsFlags & QEventLoop::X11ExcludeTimers))
|
|| (src->processEventsFlags & QEventLoop::X11ExcludeTimers))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (src->timerList.updateCurrentTime() < src->timerList.first()->timeout)
|
if (src->timerList.updateCurrentTime() < src->timerList.constFirst()->timeout)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -591,7 +591,7 @@ int QTimerInfoList::activateTimers()
|
|||||||
if (isEmpty())
|
if (isEmpty())
|
||||||
break;
|
break;
|
||||||
|
|
||||||
QTimerInfo *currentTimerInfo = first();
|
QTimerInfo *currentTimerInfo = constFirst();
|
||||||
if (currentTime < currentTimerInfo->timeout)
|
if (currentTime < currentTimerInfo->timeout)
|
||||||
break; // no timer has expired
|
break; // no timer has expired
|
||||||
|
|
||||||
|
@ -406,7 +406,7 @@ QMimeType QMimeDatabase::mimeTypeForFile(const QString &fileName, MatchMode mode
|
|||||||
{
|
{
|
||||||
if (mode == MatchExtension) {
|
if (mode == MatchExtension) {
|
||||||
QMutexLocker locker(&d->mutex);
|
QMutexLocker locker(&d->mutex);
|
||||||
QStringList matches = d->mimeTypeForFileName(fileName);
|
const QStringList matches = d->mimeTypeForFileName(fileName);
|
||||||
const int matchCount = matches.count();
|
const int matchCount = matches.count();
|
||||||
if (matchCount == 0) {
|
if (matchCount == 0) {
|
||||||
return d->mimeTypeForName(d->defaultMimeType());
|
return d->mimeTypeForName(d->defaultMimeType());
|
||||||
|
@ -205,7 +205,7 @@ bool QMimeBinaryProvider::isValid()
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// We found exactly one file; is it the user-modified mimes, or a system file?
|
// We found exactly one file; is it the user-modified mimes, or a system file?
|
||||||
const QString foundFile = m_cacheFiles.first()->file.fileName();
|
const QString foundFile = m_cacheFiles.constFirst()->file.fileName();
|
||||||
const QString localCacheFile = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/mime/mime.cache");
|
const QString localCacheFile = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/mime/mime.cache");
|
||||||
|
|
||||||
return foundFile != localCacheFile;
|
return foundFile != localCacheFile;
|
||||||
@ -629,7 +629,7 @@ void QMimeBinaryProvider::loadMimeTypePrivate(QMimeTypePrivate &data)
|
|||||||
// Let's assume that shared-mime-info is at least version 0.70
|
// Let's assume that shared-mime-info is at least version 0.70
|
||||||
// Otherwise we would need 1) a version check, and 2) code for parsing patterns from the globs file.
|
// Otherwise we would need 1) a version check, and 2) code for parsing patterns from the globs file.
|
||||||
#if 1
|
#if 1
|
||||||
if (!mainPattern.isEmpty() && (data.globPatterns.isEmpty() || data.globPatterns.first() != mainPattern)) {
|
if (!mainPattern.isEmpty() && (data.globPatterns.isEmpty() || data.globPatterns.constFirst() != mainPattern)) {
|
||||||
// ensure it's first in the list of patterns
|
// ensure it's first in the list of patterns
|
||||||
data.globPatterns.removeAll(mainPattern);
|
data.globPatterns.removeAll(mainPattern);
|
||||||
data.globPatterns.prepend(mainPattern);
|
data.globPatterns.prepend(mainPattern);
|
||||||
@ -637,7 +637,7 @@ void QMimeBinaryProvider::loadMimeTypePrivate(QMimeTypePrivate &data)
|
|||||||
#else
|
#else
|
||||||
const bool globsInXml = sharedMimeInfoVersion() >= QT_VERSION_CHECK(0, 70, 0);
|
const bool globsInXml = sharedMimeInfoVersion() >= QT_VERSION_CHECK(0, 70, 0);
|
||||||
if (globsInXml) {
|
if (globsInXml) {
|
||||||
if (!mainPattern.isEmpty() && data.globPatterns.first() != mainPattern) {
|
if (!mainPattern.isEmpty() && data.globPatterns.constFirst() != mainPattern) {
|
||||||
// ensure it's first in the list of patterns
|
// ensure it's first in the list of patterns
|
||||||
data.globPatterns.removeAll(mainPattern);
|
data.globPatterns.removeAll(mainPattern);
|
||||||
data.globPatterns.prepend(mainPattern);
|
data.globPatterns.prepend(mainPattern);
|
||||||
|
@ -209,6 +209,11 @@ QAbstractState *QHistoryState::defaultState() const
|
|||||||
return d->defaultTransition ? d->defaultTransition->targetState() : Q_NULLPTR;
|
return d->defaultTransition ? d->defaultTransition->targetState() : Q_NULLPTR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool isSoleEntry(const QList<QAbstractState*> &states, const QAbstractState * state)
|
||||||
|
{
|
||||||
|
return states.size() == 1 && states.first() == state;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Sets this history state's default state to be the given \a state.
|
Sets this history state's default state to be the given \a state.
|
||||||
\a state must be a sibling of this history state.
|
\a state must be a sibling of this history state.
|
||||||
@ -224,9 +229,7 @@ void QHistoryState::setDefaultState(QAbstractState *state)
|
|||||||
"to this history state's group (%p)", state, parentState());
|
"to this history state's group (%p)", state, parentState());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!d->defaultTransition
|
if (!d->defaultTransition || !isSoleEntry(d->defaultTransition->targetStates(), state)) {
|
||||||
|| d->defaultTransition->targetStates().size() != 1
|
|
||||||
|| d->defaultTransition->targetStates().first() != state) {
|
|
||||||
if (!d->defaultTransition || !qobject_cast<DefaultStateTransition*>(d->defaultTransition)) {
|
if (!d->defaultTransition || !qobject_cast<DefaultStateTransition*>(d->defaultTransition)) {
|
||||||
d->defaultTransition = new DefaultStateTransition(this, state);
|
d->defaultTransition = new DefaultStateTransition(this, state);
|
||||||
emit defaultTransitionChanged(QHistoryState::QPrivateSignal());
|
emit defaultTransitionChanged(QHistoryState::QPrivateSignal());
|
||||||
|
@ -159,9 +159,8 @@ QSignalTransition::QSignalTransition(const QObject *sender, const char *signal,
|
|||||||
|
|
||||||
Constructs a new signal transition associated with the given \a signal of
|
Constructs a new signal transition associated with the given \a signal of
|
||||||
the given \a sender object and with the given \a sourceState.
|
the given \a sender object and with the given \a sourceState.
|
||||||
This constructor is enabled if compiler supports delegating constructor.
|
This constructor is enabled if the compiler supports delegating constructors,
|
||||||
|
as indicated by the presence of the macro Q_COMPILER_DELEGATING_CONSTRUCTORS.
|
||||||
\sa Q_COMPILER_DELEGATING_CONSTRUCTORS
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -692,7 +692,7 @@ void QStateMachinePrivate::microstep(QEvent *event, const QList<QAbstractTransit
|
|||||||
// Add "implicit" assignments for restored properties to the first
|
// Add "implicit" assignments for restored properties to the first
|
||||||
// (outermost) entered state
|
// (outermost) entered state
|
||||||
Q_ASSERT(!enteredStates.isEmpty());
|
Q_ASSERT(!enteredStates.isEmpty());
|
||||||
QAbstractState *s = enteredStates.first();
|
QAbstractState *s = enteredStates.constFirst();
|
||||||
assignmentsForEnteredStates[s] << restorablesToPropertyList(pendingRestorables);
|
assignmentsForEnteredStates[s] << restorablesToPropertyList(pendingRestorables);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ public:
|
|||||||
void addEvent(const QPostEvent &ev) {
|
void addEvent(const QPostEvent &ev) {
|
||||||
int priority = ev.priority;
|
int priority = ev.priority;
|
||||||
if (isEmpty() ||
|
if (isEmpty() ||
|
||||||
last().priority >= priority ||
|
constLast().priority >= priority ||
|
||||||
insertionOffset >= size()) {
|
insertionOffset >= size()) {
|
||||||
// optimization: we can simply append if the last event in
|
// optimization: we can simply append if the last event in
|
||||||
// the queue has higher or equal priority
|
// the queue has higher or equal priority
|
||||||
|
@ -228,7 +228,7 @@ int QThreadPoolPrivate::activeThreadCount() const
|
|||||||
void QThreadPoolPrivate::tryToStartMoreThreads()
|
void QThreadPoolPrivate::tryToStartMoreThreads()
|
||||||
{
|
{
|
||||||
// try to push tasks on the queue to any available threads
|
// try to push tasks on the queue to any available threads
|
||||||
while (!queue.isEmpty() && tryStart(queue.first().first))
|
while (!queue.isEmpty() && tryStart(queue.constFirst().first))
|
||||||
queue.removeFirst();
|
queue.removeFirst();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ void QWaitConditionPrivate::post(QWaitConditionEvent *wce, bool ret)
|
|||||||
|
|
||||||
// wakeups delivered after the timeout should be forwarded to the next waiter
|
// wakeups delivered after the timeout should be forwarded to the next waiter
|
||||||
if (!ret && wce->wokenUp && !queue.isEmpty()) {
|
if (!ret && wce->wokenUp && !queue.isEmpty()) {
|
||||||
QWaitConditionEvent *other = queue.first();
|
QWaitConditionEvent *other = queue.constFirst();
|
||||||
SetEvent(other->event);
|
SetEvent(other->event);
|
||||||
other->wokenUp = true;
|
other->wokenUp = true;
|
||||||
}
|
}
|
||||||
|
@ -604,41 +604,41 @@ inline bool QByteArray::contains(const QByteArray &a) const
|
|||||||
{ return indexOf(a) != -1; }
|
{ return indexOf(a) != -1; }
|
||||||
inline bool QByteArray::contains(char c) const
|
inline bool QByteArray::contains(char c) const
|
||||||
{ return indexOf(c) != -1; }
|
{ return indexOf(c) != -1; }
|
||||||
inline bool operator==(const QByteArray &a1, const QByteArray &a2)
|
inline bool operator==(const QByteArray &a1, const QByteArray &a2) Q_DECL_NOTHROW
|
||||||
{ return (a1.size() == a2.size()) && (memcmp(a1.constData(), a2.constData(), a1.size())==0); }
|
{ return (a1.size() == a2.size()) && (memcmp(a1.constData(), a2.constData(), a1.size())==0); }
|
||||||
inline bool operator==(const QByteArray &a1, const char *a2)
|
inline bool operator==(const QByteArray &a1, const char *a2) Q_DECL_NOTHROW
|
||||||
{ return a2 ? qstrcmp(a1,a2) == 0 : a1.isEmpty(); }
|
{ return a2 ? qstrcmp(a1,a2) == 0 : a1.isEmpty(); }
|
||||||
inline bool operator==(const char *a1, const QByteArray &a2)
|
inline bool operator==(const char *a1, const QByteArray &a2) Q_DECL_NOTHROW
|
||||||
{ return a1 ? qstrcmp(a1,a2) == 0 : a2.isEmpty(); }
|
{ return a1 ? qstrcmp(a1,a2) == 0 : a2.isEmpty(); }
|
||||||
inline bool operator!=(const QByteArray &a1, const QByteArray &a2)
|
inline bool operator!=(const QByteArray &a1, const QByteArray &a2) Q_DECL_NOTHROW
|
||||||
{ return !(a1==a2); }
|
{ return !(a1==a2); }
|
||||||
inline bool operator!=(const QByteArray &a1, const char *a2)
|
inline bool operator!=(const QByteArray &a1, const char *a2) Q_DECL_NOTHROW
|
||||||
{ return a2 ? qstrcmp(a1,a2) != 0 : !a1.isEmpty(); }
|
{ return a2 ? qstrcmp(a1,a2) != 0 : !a1.isEmpty(); }
|
||||||
inline bool operator!=(const char *a1, const QByteArray &a2)
|
inline bool operator!=(const char *a1, const QByteArray &a2) Q_DECL_NOTHROW
|
||||||
{ return a1 ? qstrcmp(a1,a2) != 0 : !a2.isEmpty(); }
|
{ return a1 ? qstrcmp(a1,a2) != 0 : !a2.isEmpty(); }
|
||||||
inline bool operator<(const QByteArray &a1, const QByteArray &a2)
|
inline bool operator<(const QByteArray &a1, const QByteArray &a2) Q_DECL_NOTHROW
|
||||||
{ return qstrcmp(a1, a2) < 0; }
|
{ return qstrcmp(a1, a2) < 0; }
|
||||||
inline bool operator<(const QByteArray &a1, const char *a2)
|
inline bool operator<(const QByteArray &a1, const char *a2) Q_DECL_NOTHROW
|
||||||
{ return qstrcmp(a1, a2) < 0; }
|
{ return qstrcmp(a1, a2) < 0; }
|
||||||
inline bool operator<(const char *a1, const QByteArray &a2)
|
inline bool operator<(const char *a1, const QByteArray &a2) Q_DECL_NOTHROW
|
||||||
{ return qstrcmp(a1, a2) < 0; }
|
{ return qstrcmp(a1, a2) < 0; }
|
||||||
inline bool operator<=(const QByteArray &a1, const QByteArray &a2)
|
inline bool operator<=(const QByteArray &a1, const QByteArray &a2) Q_DECL_NOTHROW
|
||||||
{ return qstrcmp(a1, a2) <= 0; }
|
{ return qstrcmp(a1, a2) <= 0; }
|
||||||
inline bool operator<=(const QByteArray &a1, const char *a2)
|
inline bool operator<=(const QByteArray &a1, const char *a2) Q_DECL_NOTHROW
|
||||||
{ return qstrcmp(a1, a2) <= 0; }
|
{ return qstrcmp(a1, a2) <= 0; }
|
||||||
inline bool operator<=(const char *a1, const QByteArray &a2)
|
inline bool operator<=(const char *a1, const QByteArray &a2) Q_DECL_NOTHROW
|
||||||
{ return qstrcmp(a1, a2) <= 0; }
|
{ return qstrcmp(a1, a2) <= 0; }
|
||||||
inline bool operator>(const QByteArray &a1, const QByteArray &a2)
|
inline bool operator>(const QByteArray &a1, const QByteArray &a2) Q_DECL_NOTHROW
|
||||||
{ return qstrcmp(a1, a2) > 0; }
|
{ return qstrcmp(a1, a2) > 0; }
|
||||||
inline bool operator>(const QByteArray &a1, const char *a2)
|
inline bool operator>(const QByteArray &a1, const char *a2) Q_DECL_NOTHROW
|
||||||
{ return qstrcmp(a1, a2) > 0; }
|
{ return qstrcmp(a1, a2) > 0; }
|
||||||
inline bool operator>(const char *a1, const QByteArray &a2)
|
inline bool operator>(const char *a1, const QByteArray &a2) Q_DECL_NOTHROW
|
||||||
{ return qstrcmp(a1, a2) > 0; }
|
{ return qstrcmp(a1, a2) > 0; }
|
||||||
inline bool operator>=(const QByteArray &a1, const QByteArray &a2)
|
inline bool operator>=(const QByteArray &a1, const QByteArray &a2) Q_DECL_NOTHROW
|
||||||
{ return qstrcmp(a1, a2) >= 0; }
|
{ return qstrcmp(a1, a2) >= 0; }
|
||||||
inline bool operator>=(const QByteArray &a1, const char *a2)
|
inline bool operator>=(const QByteArray &a1, const char *a2) Q_DECL_NOTHROW
|
||||||
{ return qstrcmp(a1, a2) >= 0; }
|
{ return qstrcmp(a1, a2) >= 0; }
|
||||||
inline bool operator>=(const char *a1, const QByteArray &a2)
|
inline bool operator>=(const char *a1, const QByteArray &a2) Q_DECL_NOTHROW
|
||||||
{ return qstrcmp(a1, a2) >= 0; }
|
{ return qstrcmp(a1, a2) >= 0; }
|
||||||
#if !defined(QT_USE_QSTRINGBUILDER)
|
#if !defined(QT_USE_QSTRINGBUILDER)
|
||||||
inline const QByteArray operator+(const QByteArray &a1, const QByteArray &a2)
|
inline const QByteArray operator+(const QByteArray &a1, const QByteArray &a2)
|
||||||
|
@ -901,7 +901,8 @@ QStringList QCommandLineParser::values(const QString &optionName) const
|
|||||||
bool QCommandLineParser::isSet(const QCommandLineOption &option) const
|
bool QCommandLineParser::isSet(const QCommandLineOption &option) const
|
||||||
{
|
{
|
||||||
// option.names() might be empty if the constructor failed
|
// option.names() might be empty if the constructor failed
|
||||||
return !option.names().isEmpty() && isSet(option.names().first());
|
const auto names = option.names();
|
||||||
|
return !names.isEmpty() && isSet(names.first());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -919,7 +920,7 @@ bool QCommandLineParser::isSet(const QCommandLineOption &option) const
|
|||||||
*/
|
*/
|
||||||
QString QCommandLineParser::value(const QCommandLineOption &option) const
|
QString QCommandLineParser::value(const QCommandLineOption &option) const
|
||||||
{
|
{
|
||||||
return value(option.names().first());
|
return value(option.names().constFirst());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -937,7 +938,7 @@ QString QCommandLineParser::value(const QCommandLineOption &option) const
|
|||||||
*/
|
*/
|
||||||
QStringList QCommandLineParser::values(const QCommandLineOption &option) const
|
QStringList QCommandLineParser::values(const QCommandLineOption &option) const
|
||||||
{
|
{
|
||||||
return values(option.names().first());
|
return values(option.names().constFirst());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -167,7 +167,7 @@ bool QDateTimeParser::setDigit(QDateTime &v, int index, int newVal) const
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(node.type & (DaySection|DayOfWeekSectionShort|DayOfWeekSectionLong))) {
|
if (!(node.type & DaySectionMask)) {
|
||||||
if (day < cachedDay)
|
if (day < cachedDay)
|
||||||
day = cachedDay;
|
day = cachedDay;
|
||||||
const int max = QDate(year, month, 1).daysInMonth();
|
const int max = QDate(year, month, 1).daysInMonth();
|
||||||
@ -633,6 +633,10 @@ int QDateTimeParser::sectionMaxSize(Section s, int count) const
|
|||||||
case Internal:
|
case Internal:
|
||||||
case TimeSectionMask:
|
case TimeSectionMask:
|
||||||
case DateSectionMask:
|
case DateSectionMask:
|
||||||
|
case HourSectionMask:
|
||||||
|
case YearSectionMask:
|
||||||
|
case DayOfWeekSectionMask:
|
||||||
|
case DaySectionMask:
|
||||||
qWarning("QDateTimeParser::sectionMaxSize: Invalid section %s",
|
qWarning("QDateTimeParser::sectionMaxSize: Invalid section %s",
|
||||||
SectionNode::name(s).toLatin1().constData());
|
SectionNode::name(s).toLatin1().constData());
|
||||||
|
|
||||||
@ -987,33 +991,27 @@ QDateTimeParser::StateNode QDateTimeParser::parse(QString &input, int &cursorPos
|
|||||||
|
|
||||||
if (state != Invalid) {
|
if (state != Invalid) {
|
||||||
if (parserType != QVariant::Time) {
|
if (parserType != QVariant::Time) {
|
||||||
if (year % 100 != year2digits) {
|
if (year % 100 != year2digits && (isSet & YearSection2Digits)) {
|
||||||
switch (isSet & (YearSection2Digits|YearSection)) {
|
if (!(isSet & YearSection)) {
|
||||||
case YearSection2Digits:
|
|
||||||
year = (year / 100) * 100;
|
year = (year / 100) * 100;
|
||||||
year += year2digits;
|
year += year2digits;
|
||||||
break;
|
} else {
|
||||||
case ((uint)YearSection2Digits|(uint)YearSection): {
|
|
||||||
conflicts = true;
|
conflicts = true;
|
||||||
const SectionNode &sn = sectionNode(currentSectionIndex);
|
const SectionNode &sn = sectionNode(currentSectionIndex);
|
||||||
if (sn.type == YearSection2Digits) {
|
if (sn.type == YearSection2Digits) {
|
||||||
year = (year / 100) * 100;
|
year = (year / 100) * 100;
|
||||||
year += year2digits;
|
year += year2digits;
|
||||||
}
|
}
|
||||||
break; }
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const QDate date(year, month, day);
|
const QDate date(year, month, day);
|
||||||
const int diff = dayofweek - date.dayOfWeek();
|
const int diff = dayofweek - date.dayOfWeek();
|
||||||
if (diff != 0 && state == Acceptable
|
if (diff != 0 && state == Acceptable && isSet & DayOfWeekSectionMask) {
|
||||||
&& isSet & (DayOfWeekSectionShort | DayOfWeekSectionLong)) {
|
|
||||||
if (isSet & DaySection)
|
if (isSet & DaySection)
|
||||||
conflicts = true;
|
conflicts = true;
|
||||||
const SectionNode &sn = sectionNode(currentSectionIndex);
|
const SectionNode &sn = sectionNode(currentSectionIndex);
|
||||||
if (sn.type & (DayOfWeekSectionShort|DayOfWeekSectionLong) || currentSectionIndex == -1) {
|
if (sn.type & DayOfWeekSectionMask || currentSectionIndex == -1) {
|
||||||
// dayofweek should be preferred
|
// dayofweek should be preferred
|
||||||
day += diff;
|
day += diff;
|
||||||
if (day <= 0) {
|
if (day <= 0) {
|
||||||
@ -1025,8 +1023,9 @@ QDateTimeParser::StateNode QDateTimeParser::parse(QString &input, int &cursorPos
|
|||||||
<< diff << QDate(year, month, day).dayOfWeek();
|
<< diff << QDate(year, month, day).dayOfWeek();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool needfixday = false;
|
bool needfixday = false;
|
||||||
if (sectionType(currentSectionIndex) & (DaySection|DayOfWeekSectionShort|DayOfWeekSectionLong)) {
|
if (sectionType(currentSectionIndex) & DaySectionMask) {
|
||||||
cachedDay = day;
|
cachedDay = day;
|
||||||
} else if (cachedDay > day) {
|
} else if (cachedDay > day) {
|
||||||
day = cachedDay;
|
day = cachedDay;
|
||||||
@ -1054,7 +1053,7 @@ QDateTimeParser::StateNode QDateTimeParser::parse(QString &input, int &cursorPos
|
|||||||
const SectionNode sn = sectionNode(i);
|
const SectionNode sn = sectionNode(i);
|
||||||
if (sn.type & DaySection) {
|
if (sn.type & DaySection) {
|
||||||
input.replace(sectionPos(sn), sectionSize(i), loc.toString(day));
|
input.replace(sectionPos(sn), sectionSize(i), loc.toString(day));
|
||||||
} else if (sn.type & (DayOfWeekSectionShort | DayOfWeekSectionLong)) {
|
} else if (sn.type & DayOfWeekSectionMask) {
|
||||||
const int dayOfWeek = QDate(year, month, day).dayOfWeek();
|
const int dayOfWeek = QDate(year, month, day).dayOfWeek();
|
||||||
const QLocale::FormatType dayFormat =
|
const QLocale::FormatType dayFormat =
|
||||||
(sn.type == DayOfWeekSectionShort
|
(sn.type == DayOfWeekSectionShort
|
||||||
@ -1313,7 +1312,7 @@ int QDateTimeParser::findDay(const QString &str1, int startDay, int sectionIndex
|
|||||||
int bestCount = 0;
|
int bestCount = 0;
|
||||||
if (!str1.isEmpty()) {
|
if (!str1.isEmpty()) {
|
||||||
const SectionNode &sn = sectionNode(sectionIndex);
|
const SectionNode &sn = sectionNode(sectionIndex);
|
||||||
if (!(sn.type & (DaySection|DayOfWeekSectionShort|DayOfWeekSectionLong))) {
|
if (!(sn.type & DaySectionMask)) {
|
||||||
qWarning("QDateTimeParser::findDay Internal error");
|
qWarning("QDateTimeParser::findDay Internal error");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -120,14 +120,20 @@ public:
|
|||||||
MinuteSection = 0x00008,
|
MinuteSection = 0x00008,
|
||||||
Hour12Section = 0x00010,
|
Hour12Section = 0x00010,
|
||||||
Hour24Section = 0x00020,
|
Hour24Section = 0x00020,
|
||||||
TimeSectionMask = (AmPmSection|MSecSection|SecondSection|MinuteSection|Hour12Section|Hour24Section),
|
HourSectionMask = (Hour12Section | Hour24Section),
|
||||||
|
TimeSectionMask = (MSecSection | SecondSection | MinuteSection |
|
||||||
|
HourSectionMask | AmPmSection),
|
||||||
|
|
||||||
DaySection = 0x00100,
|
DaySection = 0x00100,
|
||||||
MonthSection = 0x00200,
|
MonthSection = 0x00200,
|
||||||
YearSection = 0x00400,
|
YearSection = 0x00400,
|
||||||
YearSection2Digits = 0x00800,
|
YearSection2Digits = 0x00800,
|
||||||
|
YearSectionMask = YearSection | YearSection2Digits,
|
||||||
DayOfWeekSectionShort = 0x01000,
|
DayOfWeekSectionShort = 0x01000,
|
||||||
DayOfWeekSectionLong = 0x02000,
|
DayOfWeekSectionLong = 0x02000,
|
||||||
DateSectionMask = (DaySection|MonthSection|YearSection|YearSection2Digits|DayOfWeekSectionShort|DayOfWeekSectionLong),
|
DayOfWeekSectionMask = DayOfWeekSectionShort | DayOfWeekSectionLong,
|
||||||
|
DaySectionMask = DaySection | DayOfWeekSectionMask,
|
||||||
|
DateSectionMask = DaySectionMask | MonthSection | YearSectionMask,
|
||||||
|
|
||||||
Internal = 0x10000,
|
Internal = 0x10000,
|
||||||
FirstSection = 0x20000 | Internal,
|
FirstSection = 0x20000 | Internal,
|
||||||
@ -138,7 +144,7 @@ public:
|
|||||||
FirstSectionIndex = -2,
|
FirstSectionIndex = -2,
|
||||||
LastSectionIndex = -3,
|
LastSectionIndex = -3,
|
||||||
CalendarPopupIndex = -4
|
CalendarPopupIndex = -4
|
||||||
}; // duplicated from qdatetimeedit.h
|
}; // extending qdatetimeedit.h's equivalent
|
||||||
Q_DECLARE_FLAGS(Sections, Section)
|
Q_DECLARE_FLAGS(Sections, Section)
|
||||||
|
|
||||||
struct Q_CORE_EXPORT SectionNode {
|
struct Q_CORE_EXPORT SectionNode {
|
||||||
@ -224,6 +230,7 @@ public:
|
|||||||
|
|
||||||
FieldInfo fieldInfo(int index) const;
|
FieldInfo fieldInfo(int index) const;
|
||||||
|
|
||||||
|
void setDefaultLocale(const QLocale &loc) { defaultLocale = loc; }
|
||||||
virtual QDateTime getMinimum() const;
|
virtual QDateTime getMinimum() const;
|
||||||
virtual QDateTime getMaximum() const;
|
virtual QDateTime getMaximum() const;
|
||||||
virtual int cursorPosition() const { return -1; }
|
virtual int cursorPosition() const { return -1; }
|
||||||
|
@ -444,7 +444,7 @@ struct BezierEase : public QEasingCurveFunction
|
|||||||
|
|
||||||
void init()
|
void init()
|
||||||
{
|
{
|
||||||
if (_bezierCurves.last() == QPointF(1.0, 1.0)) {
|
if (_bezierCurves.constLast() == QPointF(1.0, 1.0)) {
|
||||||
_init = true;
|
_init = true;
|
||||||
_curveCount = _bezierCurves.count() / 3;
|
_curveCount = _bezierCurves.count() / 3;
|
||||||
|
|
||||||
|
@ -85,7 +85,8 @@ void QElapsedTimer::start() Q_DECL_NOTHROW
|
|||||||
and then starting the timer again with start(), but it does so in one
|
and then starting the timer again with start(), but it does so in one
|
||||||
single operation, avoiding the need to obtain the clock value twice.
|
single operation, avoiding the need to obtain the clock value twice.
|
||||||
|
|
||||||
Restarting the timer makes it valid again.
|
Calling this function on a QElapsedTimer that is invalid
|
||||||
|
results in undefined behavior.
|
||||||
|
|
||||||
The following example illustrates how to use this function to calibrate a
|
The following example illustrates how to use this function to calibrate a
|
||||||
parameter to a slow operation (for example, an iteration count) so that
|
parameter to a slow operation (for example, an iteration count) so that
|
||||||
@ -93,7 +94,7 @@ void QElapsedTimer::start() Q_DECL_NOTHROW
|
|||||||
|
|
||||||
\snippet qelapsedtimer/main.cpp 3
|
\snippet qelapsedtimer/main.cpp 3
|
||||||
|
|
||||||
\sa start(), invalidate(), elapsed()
|
\sa start(), invalidate(), elapsed(), isValid()
|
||||||
*/
|
*/
|
||||||
qint64 QElapsedTimer::restart() Q_DECL_NOTHROW
|
qint64 QElapsedTimer::restart() Q_DECL_NOTHROW
|
||||||
{
|
{
|
||||||
@ -106,8 +107,10 @@ qint64 QElapsedTimer::restart() Q_DECL_NOTHROW
|
|||||||
/*! \since 4.8
|
/*! \since 4.8
|
||||||
|
|
||||||
Returns the number of nanoseconds since this QElapsedTimer was last
|
Returns the number of nanoseconds since this QElapsedTimer was last
|
||||||
started. Calling this function in a QElapsedTimer that was invalidated
|
started.
|
||||||
will result in undefined results.
|
|
||||||
|
Calling this function on a QElapsedTimer that is invalid
|
||||||
|
results in undefined behavior.
|
||||||
|
|
||||||
On platforms that do not provide nanosecond resolution, the value returned
|
On platforms that do not provide nanosecond resolution, the value returned
|
||||||
will be the best estimate available.
|
will be the best estimate available.
|
||||||
@ -121,10 +124,12 @@ qint64 QElapsedTimer::nsecsElapsed() const Q_DECL_NOTHROW
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
Returns the number of milliseconds since this QElapsedTimer was last
|
Returns the number of milliseconds since this QElapsedTimer was last
|
||||||
started. Calling this function in a QElapsedTimer that was invalidated
|
started.
|
||||||
will result in undefined results.
|
|
||||||
|
|
||||||
\sa start(), restart(), hasExpired(), invalidate()
|
Calling this function on a QElapsedTimer that is invalid
|
||||||
|
results in undefined behavior.
|
||||||
|
|
||||||
|
\sa start(), restart(), hasExpired(), isValid(), invalidate()
|
||||||
*/
|
*/
|
||||||
qint64 QElapsedTimer::elapsed() const Q_DECL_NOTHROW
|
qint64 QElapsedTimer::elapsed() const Q_DECL_NOTHROW
|
||||||
{
|
{
|
||||||
@ -172,7 +177,8 @@ qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
|
|||||||
\a other was started before this object, the returned value will be
|
\a other was started before this object, the returned value will be
|
||||||
negative. If it was started later, the returned value will be positive.
|
negative. If it was started later, the returned value will be positive.
|
||||||
|
|
||||||
The return value is undefined if this object or \a other were invalidated.
|
Calling this function on or with a QElapsedTimer that is invalid
|
||||||
|
results in undefined behavior.
|
||||||
|
|
||||||
\sa msecsTo(), elapsed()
|
\sa msecsTo(), elapsed()
|
||||||
*/
|
*/
|
||||||
|
@ -1831,7 +1831,7 @@ QTime QLocale::toTime(const QString &string, const QString &format) const
|
|||||||
QTime time;
|
QTime time;
|
||||||
#ifndef QT_BOOTSTRAPPED
|
#ifndef QT_BOOTSTRAPPED
|
||||||
QDateTimeParser dt(QVariant::Time, QDateTimeParser::FromString);
|
QDateTimeParser dt(QVariant::Time, QDateTimeParser::FromString);
|
||||||
dt.defaultLocale = *this;
|
dt.setDefaultLocale(*this);
|
||||||
if (dt.parseFormat(format))
|
if (dt.parseFormat(format))
|
||||||
dt.fromString(string, 0, &time);
|
dt.fromString(string, 0, &time);
|
||||||
#else
|
#else
|
||||||
@ -1862,7 +1862,7 @@ QDate QLocale::toDate(const QString &string, const QString &format) const
|
|||||||
QDate date;
|
QDate date;
|
||||||
#ifndef QT_BOOTSTRAPPED
|
#ifndef QT_BOOTSTRAPPED
|
||||||
QDateTimeParser dt(QVariant::Date, QDateTimeParser::FromString);
|
QDateTimeParser dt(QVariant::Date, QDateTimeParser::FromString);
|
||||||
dt.defaultLocale = *this;
|
dt.setDefaultLocale(*this);
|
||||||
if (dt.parseFormat(format))
|
if (dt.parseFormat(format))
|
||||||
dt.fromString(string, &date, 0);
|
dt.fromString(string, &date, 0);
|
||||||
#else
|
#else
|
||||||
@ -1895,7 +1895,7 @@ QDateTime QLocale::toDateTime(const QString &string, const QString &format) cons
|
|||||||
QDate date;
|
QDate date;
|
||||||
|
|
||||||
QDateTimeParser dt(QVariant::DateTime, QDateTimeParser::FromString);
|
QDateTimeParser dt(QVariant::DateTime, QDateTimeParser::FromString);
|
||||||
dt.defaultLocale = *this;
|
dt.setDefaultLocale(*this);
|
||||||
if (dt.parseFormat(format) && dt.fromString(string, &date, &time))
|
if (dt.parseFormat(format) && dt.fromString(string, &date, &time))
|
||||||
return QDateTime(date, time);
|
return QDateTime(date, time);
|
||||||
#else
|
#else
|
||||||
|
@ -122,7 +122,7 @@ QLocale QSystemLocale::fallbackUiLocale() const
|
|||||||
// the first part of LANGUAGE if LANGUAGE is set and has a first part:
|
// the first part of LANGUAGE if LANGUAGE is set and has a first part:
|
||||||
QByteArray language = qgetenv("LANGUAGE");
|
QByteArray language = qgetenv("LANGUAGE");
|
||||||
if (!language.isEmpty()) {
|
if (!language.isEmpty()) {
|
||||||
language = language.split(':').first();
|
language = language.split(':').constFirst();
|
||||||
if (!language.isEmpty())
|
if (!language.isEmpty())
|
||||||
return QLocale(QString::fromLatin1(language));
|
return QLocale(QString::fromLatin1(language));
|
||||||
}
|
}
|
||||||
|
@ -74,14 +74,14 @@ void QRingBuffer::free(qint64 bytes)
|
|||||||
Q_ASSERT(bytes <= bufferSize);
|
Q_ASSERT(bytes <= bufferSize);
|
||||||
|
|
||||||
while (bytes > 0) {
|
while (bytes > 0) {
|
||||||
const qint64 blockSize = buffers.first().size() - head;
|
const qint64 blockSize = buffers.constFirst().size() - head;
|
||||||
|
|
||||||
if (tailBuffer == 0 || blockSize > bytes) {
|
if (tailBuffer == 0 || blockSize > bytes) {
|
||||||
// keep a single block around if it does not exceed
|
// keep a single block around if it does not exceed
|
||||||
// the basic block size, to avoid repeated allocations
|
// the basic block size, to avoid repeated allocations
|
||||||
// between uses of the buffer
|
// between uses of the buffer
|
||||||
if (bufferSize <= bytes) {
|
if (bufferSize <= bytes) {
|
||||||
if (buffers.first().size() <= basicBlockSize) {
|
if (buffers.constFirst().size() <= basicBlockSize) {
|
||||||
bufferSize = 0;
|
bufferSize = 0;
|
||||||
head = tail = 0;
|
head = tail = 0;
|
||||||
} else {
|
} else {
|
||||||
@ -114,8 +114,8 @@ char *QRingBuffer::reserve(qint64 bytes)
|
|||||||
} else {
|
} else {
|
||||||
const qint64 newSize = bytes + tail;
|
const qint64 newSize = bytes + tail;
|
||||||
// if need buffer reallocation
|
// if need buffer reallocation
|
||||||
if (newSize > buffers.last().size()) {
|
if (newSize > buffers.constLast().size()) {
|
||||||
if (newSize > buffers.last().capacity() && (tail >= basicBlockSize
|
if (newSize > buffers.constLast().capacity() && (tail >= basicBlockSize
|
||||||
|| newSize >= MaxByteArraySize)) {
|
|| newSize >= MaxByteArraySize)) {
|
||||||
// shrink this buffer to its current size
|
// shrink this buffer to its current size
|
||||||
buffers.last().resize(tail);
|
buffers.last().resize(tail);
|
||||||
@ -180,7 +180,7 @@ void QRingBuffer::chop(qint64 bytes)
|
|||||||
// the basic block size, to avoid repeated allocations
|
// the basic block size, to avoid repeated allocations
|
||||||
// between uses of the buffer
|
// between uses of the buffer
|
||||||
if (bufferSize <= bytes) {
|
if (bufferSize <= bytes) {
|
||||||
if (buffers.first().size() <= basicBlockSize) {
|
if (buffers.constFirst().size() <= basicBlockSize) {
|
||||||
bufferSize = 0;
|
bufferSize = 0;
|
||||||
head = tail = 0;
|
head = tail = 0;
|
||||||
} else {
|
} else {
|
||||||
@ -198,7 +198,7 @@ void QRingBuffer::chop(qint64 bytes)
|
|||||||
bytes -= tail;
|
bytes -= tail;
|
||||||
buffers.removeLast();
|
buffers.removeLast();
|
||||||
--tailBuffer;
|
--tailBuffer;
|
||||||
tail = buffers.last().size();
|
tail = buffers.constLast().size();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5841,7 +5841,9 @@ QString QString::toUpper_helper(QString &str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\obsolete Use asprintf(), arg() or QTextStream instead.
|
\obsolete
|
||||||
|
|
||||||
|
Use asprintf(), arg() or QTextStream instead.
|
||||||
*/
|
*/
|
||||||
QString &QString::sprintf(const char *cformat, ...)
|
QString &QString::sprintf(const char *cformat, ...)
|
||||||
{
|
{
|
||||||
@ -5897,7 +5899,9 @@ QString QString::asprintf(const char *cformat, ...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\obsolete Use vasprintf(), arg() or QTextStream instead.
|
\obsolete
|
||||||
|
|
||||||
|
Use vasprintf(), arg() or QTextStream instead.
|
||||||
*/
|
*/
|
||||||
QString &QString::vsprintf(const char *cformat, va_list ap)
|
QString &QString::vsprintf(const char *cformat, va_list ap)
|
||||||
{
|
{
|
||||||
@ -10643,7 +10647,7 @@ float QStringRef::toFloat(bool *ok) const
|
|||||||
\obsolete
|
\obsolete
|
||||||
\fn QString Qt::escape(const QString &plain)
|
\fn QString Qt::escape(const QString &plain)
|
||||||
|
|
||||||
\sa QString::toHtmlEscaped()
|
Use QString::toHtmlEscaped() instead.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -243,7 +243,7 @@ QTimeZonePrivate::Data QMacTimeZonePrivate::previousTransition(qint64 beforeMSec
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (secsList.size() >= 1)
|
if (secsList.size() >= 1)
|
||||||
return data(qint64(secsList.last()) * 1000);
|
return data(qint64(secsList.constLast()) * 1000);
|
||||||
else
|
else
|
||||||
return invalidData();
|
return invalidData();
|
||||||
}
|
}
|
||||||
|
@ -259,6 +259,7 @@ private:
|
|||||||
const QVector<int> &metaTypes, int slotIdx);
|
const QVector<int> &metaTypes, int slotIdx);
|
||||||
|
|
||||||
SignalHookHash::Iterator removeSignalHookNoLock(SignalHookHash::Iterator it);
|
SignalHookHash::Iterator removeSignalHookNoLock(SignalHookHash::Iterator it);
|
||||||
|
void disconnectObjectTree(ObjectTreeNode &node);
|
||||||
|
|
||||||
bool isServiceRegisteredByThread(const QString &serviceName);
|
bool isServiceRegisteredByThread(const QString &serviceName);
|
||||||
|
|
||||||
|
@ -1055,7 +1055,6 @@ QDBusConnectionPrivate::~QDBusConnectionPrivate()
|
|||||||
qPrintable(name));
|
qPrintable(name));
|
||||||
|
|
||||||
closeConnection();
|
closeConnection();
|
||||||
rootNode.children.clear(); // free resources
|
|
||||||
qDeleteAll(cachedMetaObjects);
|
qDeleteAll(cachedMetaObjects);
|
||||||
|
|
||||||
if (mode == ClientMode || mode == PeerMode) {
|
if (mode == ClientMode || mode == PeerMode) {
|
||||||
@ -1077,6 +1076,19 @@ QDBusConnectionPrivate::~QDBusConnectionPrivate()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QDBusConnectionPrivate::disconnectObjectTree(QDBusConnectionPrivate::ObjectTreeNode &haystack)
|
||||||
|
{
|
||||||
|
QDBusConnectionPrivate::ObjectTreeNode::DataList::Iterator it = haystack.children.begin();
|
||||||
|
|
||||||
|
while (it != haystack.children.end()) {
|
||||||
|
disconnectObjectTree(*it);
|
||||||
|
it++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (haystack.obj)
|
||||||
|
haystack.obj->disconnect(this);
|
||||||
|
}
|
||||||
|
|
||||||
void QDBusConnectionPrivate::closeConnection()
|
void QDBusConnectionPrivate::closeConnection()
|
||||||
{
|
{
|
||||||
QDBusWriteLocker locker(CloseConnectionAction, this);
|
QDBusWriteLocker locker(CloseConnectionAction, this);
|
||||||
@ -1100,6 +1112,18 @@ void QDBusConnectionPrivate::closeConnection()
|
|||||||
}
|
}
|
||||||
|
|
||||||
qDeleteAll(pendingCalls);
|
qDeleteAll(pendingCalls);
|
||||||
|
|
||||||
|
// Disconnect all signals from signal hooks and from the object tree to
|
||||||
|
// avoid QObject::destroyed being sent to dbus daemon thread which has
|
||||||
|
// already quit.
|
||||||
|
SignalHookHash::iterator sit = signalHooks.begin();
|
||||||
|
while (sit != signalHooks.end()) {
|
||||||
|
sit.value().obj->disconnect(this);
|
||||||
|
sit++;
|
||||||
|
}
|
||||||
|
|
||||||
|
disconnectObjectTree(rootNode);
|
||||||
|
rootNode.children.clear(); // free resources
|
||||||
}
|
}
|
||||||
|
|
||||||
void QDBusConnectionPrivate::checkThread()
|
void QDBusConnectionPrivate::checkThread()
|
||||||
|
@ -158,7 +158,6 @@ QStringList QIconLoader::themeSearchPaths() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\class QIconCacheGtkReader
|
|
||||||
\internal
|
\internal
|
||||||
Helper class that reads and looks up into the icon-theme.cache generated with
|
Helper class that reads and looks up into the icon-theme.cache generated with
|
||||||
gtk-update-icon-cache. If at any point we detect a corruption in the file
|
gtk-update-icon-cache. If at any point we detect a corruption in the file
|
||||||
|
@ -1366,9 +1366,9 @@ void QGuiApplicationPrivate::init()
|
|||||||
} else if (strcmp(arg, "-testability") == 0) {
|
} else if (strcmp(arg, "-testability") == 0) {
|
||||||
loadTestability = true;
|
loadTestability = true;
|
||||||
} else if (strncmp(arg, "-style=", 7) == 0) {
|
} else if (strncmp(arg, "-style=", 7) == 0) {
|
||||||
s = QString::fromLocal8Bit(arg + 7).toLower();
|
s = QString::fromLocal8Bit(arg + 7);
|
||||||
} else if (strcmp(arg, "-style") == 0 && i < argc - 1) {
|
} else if (strcmp(arg, "-style") == 0 && i < argc - 1) {
|
||||||
s = QString::fromLocal8Bit(argv[++i]).toLower();
|
s = QString::fromLocal8Bit(argv[++i]);
|
||||||
} else {
|
} else {
|
||||||
argv[j++] = argv[i];
|
argv[j++] = argv[i];
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,10 @@
|
|||||||
#include <qpa/qplatformintegration.h>
|
#include <qpa/qplatformintegration.h>
|
||||||
#include <QtCore/qloggingcategory.h>
|
#include <QtCore/qloggingcategory.h>
|
||||||
|
|
||||||
|
#ifdef Q_OS_INTEGRITY
|
||||||
|
#include <EGL/egl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef GL_FRAMEBUFFER_SRGB_CAPABLE_EXT
|
#ifndef GL_FRAMEBUFFER_SRGB_CAPABLE_EXT
|
||||||
#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA
|
#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA
|
||||||
#endif
|
#endif
|
||||||
|
@ -38,9 +38,10 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "qoutlinemapper_p.h"
|
#include "qoutlinemapper_p.h"
|
||||||
#include <private/qpainterpath_p.h>
|
|
||||||
|
#include "qbezier_p.h"
|
||||||
#include "qmath.h"
|
#include "qmath.h"
|
||||||
#include <private/qbezier_p.h>
|
#include "qpainterpath_p.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
@ -187,38 +188,26 @@ void QOutlineMapper::endOutline()
|
|||||||
QPointF *elements = m_elements.data();
|
QPointF *elements = m_elements.data();
|
||||||
|
|
||||||
// Transform the outline
|
// Transform the outline
|
||||||
if (m_txop == QTransform::TxNone) {
|
if (m_transform.isIdentity()) {
|
||||||
// Nothing to do.
|
// Nothing to do
|
||||||
} else if (m_txop == QTransform::TxTranslate) {
|
} else if (m_transform.type() < QTransform::TxProject) {
|
||||||
for (int i = 0; i < m_elements.size(); ++i) {
|
for (int i = 0; i < m_elements.size(); ++i)
|
||||||
QPointF &e = elements[i];
|
elements[i] = m_transform.map(elements[i]);
|
||||||
e = QPointF(e.x() + m_dx, e.y() + m_dy);
|
|
||||||
}
|
|
||||||
} else if (m_txop == QTransform::TxScale) {
|
|
||||||
for (int i = 0; i < m_elements.size(); ++i) {
|
|
||||||
QPointF &e = elements[i];
|
|
||||||
e = QPointF(m_m11 * e.x() + m_dx, m_m22 * e.y() + m_dy);
|
|
||||||
}
|
|
||||||
} else if (m_txop < QTransform::TxProject) {
|
|
||||||
for (int i = 0; i < m_elements.size(); ++i) {
|
|
||||||
QPointF &e = elements[i];
|
|
||||||
e = QPointF(m_m11 * e.x() + m_m21 * e.y() + m_dx,
|
|
||||||
m_m22 * e.y() + m_m12 * e.x() + m_dy);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
const QVectorPath vp((qreal *)elements, m_elements.size(),
|
const QVectorPath vp((qreal *)elements, m_elements.size(),
|
||||||
m_element_types.size() ? m_element_types.data() : 0);
|
m_element_types.size() ? m_element_types.data() : 0);
|
||||||
QPainterPath path = vp.convertToPainterPath();
|
QPainterPath path = vp.convertToPainterPath();
|
||||||
path = QTransform(m_m11, m_m12, m_m13, m_m21, m_m22, m_m23, m_dx, m_dy, m_m33).map(path);
|
path = m_transform.map(path);
|
||||||
if (!(m_outline.flags & QT_FT_OUTLINE_EVEN_ODD_FILL))
|
if (!(m_outline.flags & QT_FT_OUTLINE_EVEN_ODD_FILL))
|
||||||
path.setFillRule(Qt::WindingFill);
|
path.setFillRule(Qt::WindingFill);
|
||||||
uint old_txop = m_txop;
|
if (path.isEmpty()) {
|
||||||
m_txop = QTransform::TxNone;
|
|
||||||
if (path.isEmpty())
|
|
||||||
m_valid = false;
|
m_valid = false;
|
||||||
else
|
} else {
|
||||||
|
QTransform oldTransform = m_transform;
|
||||||
|
m_transform.reset();
|
||||||
convertPath(path);
|
convertPath(path);
|
||||||
m_txop = old_txop;
|
m_transform = oldTransform;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -387,13 +376,14 @@ void QOutlineMapper::clipElements(const QPointF *elements,
|
|||||||
QPainterPath clipPath;
|
QPainterPath clipPath;
|
||||||
clipPath.addRect(m_clip_rect);
|
clipPath.addRect(m_clip_rect);
|
||||||
QPainterPath clippedPath = path.intersected(clipPath);
|
QPainterPath clippedPath = path.intersected(clipPath);
|
||||||
uint old_txop = m_txop;
|
if (clippedPath.isEmpty()) {
|
||||||
m_txop = QTransform::TxNone;
|
|
||||||
if (clippedPath.isEmpty())
|
|
||||||
m_valid = false;
|
m_valid = false;
|
||||||
else
|
} else {
|
||||||
|
QTransform oldTransform = m_transform;
|
||||||
|
m_transform.reset();
|
||||||
convertPath(clippedPath);
|
convertPath(clippedPath);
|
||||||
m_txop = old_txop;
|
m_transform = oldTransform;
|
||||||
|
}
|
||||||
|
|
||||||
m_in_clip_elements = false;
|
m_in_clip_elements = false;
|
||||||
}
|
}
|
||||||
|
@ -104,16 +104,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
void setMatrix(const QTransform &m)
|
void setMatrix(const QTransform &m)
|
||||||
{
|
{
|
||||||
m_m11 = m.m11();
|
m_transform = m;
|
||||||
m_m12 = m.m12();
|
|
||||||
m_m13 = m.m13();
|
|
||||||
m_m21 = m.m21();
|
|
||||||
m_m22 = m.m22();
|
|
||||||
m_m23 = m.m23();
|
|
||||||
m_m33 = m.m33();
|
|
||||||
m_dx = m.dx();
|
|
||||||
m_dy = m.dy();
|
|
||||||
m_txop = m.type();
|
|
||||||
|
|
||||||
qreal scale;
|
qreal scale;
|
||||||
qt_scaleForTransform(m, &scale);
|
qt_scaleForTransform(m, &scale);
|
||||||
@ -207,20 +198,10 @@ public:
|
|||||||
QRectF controlPointRect; // only valid after endOutline()
|
QRectF controlPointRect; // only valid after endOutline()
|
||||||
|
|
||||||
QT_FT_Outline m_outline;
|
QT_FT_Outline m_outline;
|
||||||
uint m_txop;
|
|
||||||
|
|
||||||
int m_subpath_start;
|
int m_subpath_start;
|
||||||
|
|
||||||
// Matrix
|
QTransform m_transform;
|
||||||
qreal m_m11;
|
|
||||||
qreal m_m12;
|
|
||||||
qreal m_m13;
|
|
||||||
qreal m_m21;
|
|
||||||
qreal m_m22;
|
|
||||||
qreal m_m23;
|
|
||||||
qreal m_m33;
|
|
||||||
qreal m_dx;
|
|
||||||
qreal m_dy;
|
|
||||||
|
|
||||||
qreal m_curve_threshold;
|
qreal m_curve_threshold;
|
||||||
|
|
||||||
|
@ -1345,9 +1345,9 @@ void QRasterPaintEngine::clip(const QRegion ®ion, Qt::ClipOperation op)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
///*!
|
/*!
|
||||||
// \internal
|
\internal
|
||||||
//*/
|
*/
|
||||||
void QRasterPaintEngine::fillPath(const QPainterPath &path, QSpanData *fillData)
|
void QRasterPaintEngine::fillPath(const QPainterPath &path, QSpanData *fillData)
|
||||||
{
|
{
|
||||||
#ifdef QT_DEBUG_DRAW
|
#ifdef QT_DEBUG_DRAW
|
||||||
|
@ -2151,7 +2151,6 @@ static QGlyphRun glyphRunWithInfo(QFontEngine *fontEngine,
|
|||||||
QGlyphRunPrivate *d = QGlyphRunPrivate::get(glyphRun);
|
QGlyphRunPrivate *d = QGlyphRunPrivate::get(glyphRun);
|
||||||
|
|
||||||
int rangeStart = textPosition;
|
int rangeStart = textPosition;
|
||||||
logClusters += textPosition;
|
|
||||||
while (*logClusters != glyphsStart && rangeStart < textPosition + textLength) {
|
while (*logClusters != glyphsStart && rangeStart < textPosition + textLength) {
|
||||||
++logClusters;
|
++logClusters;
|
||||||
++rangeStart;
|
++rangeStart;
|
||||||
@ -2360,9 +2359,9 @@ QList<QGlyphRun> QTextLine::glyphRuns(int from, int length) const
|
|||||||
width,
|
width,
|
||||||
glyphsStart + start,
|
glyphsStart + start,
|
||||||
glyphsStart + end,
|
glyphsStart + end,
|
||||||
logClusters,
|
logClusters + relativeFrom,
|
||||||
iterator.itemStart,
|
relativeFrom + si.position,
|
||||||
iterator.itemLength));
|
relativeTo - relativeFrom + 1));
|
||||||
for (int i = 0; i < subLayout.numGlyphs; ++i) {
|
for (int i = 0; i < subLayout.numGlyphs; ++i) {
|
||||||
QFixed justification = QFixed::fromFixed(subLayout.justifications[i].space_18d6);
|
QFixed justification = QFixed::fromFixed(subLayout.justifications[i].space_18d6);
|
||||||
pos.rx() += (subLayout.advances[i] + justification).toReal();
|
pos.rx() += (subLayout.advances[i] + justification).toReal();
|
||||||
@ -2390,9 +2389,9 @@ QList<QGlyphRun> QTextLine::glyphRuns(int from, int length) const
|
|||||||
width,
|
width,
|
||||||
glyphsStart + start,
|
glyphsStart + start,
|
||||||
glyphsStart + end,
|
glyphsStart + end,
|
||||||
logClusters,
|
logClusters + relativeFrom,
|
||||||
iterator.itemStart,
|
relativeFrom + si.position,
|
||||||
iterator.itemLength);
|
relativeTo - relativeFrom + 1);
|
||||||
if (!glyphRun.isEmpty())
|
if (!glyphRun.isEmpty())
|
||||||
glyphRuns.append(glyphRun);
|
glyphRuns.append(glyphRun);
|
||||||
} else {
|
} else {
|
||||||
@ -2406,9 +2405,9 @@ QList<QGlyphRun> QTextLine::glyphRuns(int from, int length) const
|
|||||||
width,
|
width,
|
||||||
glyphsStart,
|
glyphsStart,
|
||||||
glyphsEnd,
|
glyphsEnd,
|
||||||
logClusters,
|
logClusters + relativeFrom,
|
||||||
iterator.itemStart,
|
relativeFrom + si.position,
|
||||||
iterator.itemLength);
|
relativeTo - relativeFrom + 1);
|
||||||
if (!glyphRun.isEmpty())
|
if (!glyphRun.isEmpty())
|
||||||
glyphRuns.append(glyphRun);
|
glyphRuns.append(glyphRun);
|
||||||
}
|
}
|
||||||
|
@ -141,10 +141,12 @@ QNetworkReplyPrivate::QNetworkReplyPrivate()
|
|||||||
\value TooManyRedirectsError while following redirects, the maximum
|
\value TooManyRedirectsError while following redirects, the maximum
|
||||||
limit was reached. The limit is by default set to 50 or as set by
|
limit was reached. The limit is by default set to 50 or as set by
|
||||||
QNetworkRequest::setMaxRedirectsAllowed().
|
QNetworkRequest::setMaxRedirectsAllowed().
|
||||||
|
(This value was introduced in 5.6.)
|
||||||
|
|
||||||
\value InsecureRedirectError while following redirects, the network
|
\value InsecureRedirectError while following redirects, the network
|
||||||
access API detected a redirect from a encrypted protocol (https) to an
|
access API detected a redirect from a encrypted protocol (https) to an
|
||||||
unencrypted one (http).
|
unencrypted one (http).
|
||||||
|
(This value was introduced in 5.6.)
|
||||||
|
|
||||||
\value ProxyConnectionRefusedError the connection to the proxy
|
\value ProxyConnectionRefusedError the connection to the proxy
|
||||||
server was refused (the proxy server is not accepting requests)
|
server was refused (the proxy server is not accepting requests)
|
||||||
|
@ -146,11 +146,12 @@ QT_BEGIN_NAMESPACE
|
|||||||
Replies only, type: QMetaType::QUrl (no default)
|
Replies only, type: QMetaType::QUrl (no default)
|
||||||
If present, it indicates that the server is redirecting the
|
If present, it indicates that the server is redirecting the
|
||||||
request to a different URL. The Network Access API does not by
|
request to a different URL. The Network Access API does not by
|
||||||
default follow redirections: it's up to the application to
|
default follow redirections: the application can
|
||||||
determine if the requested redirection should be allowed,
|
determine if the requested redirection should be allowed,
|
||||||
according to its security policies. However, if
|
according to its security policies, or it can set
|
||||||
QNetworkRequest::FollowRedirectsAttribute is set, then this attribute
|
QNetworkRequest::FollowRedirectsAttribute to true (in which case
|
||||||
will not be present in the reply.
|
the redirection will be followed and this attribute will not
|
||||||
|
be present in the reply).
|
||||||
The returned URL might be relative. Use QUrl::resolved()
|
The returned URL might be relative. Use QUrl::resolved()
|
||||||
to create an absolute URL out of it.
|
to create an absolute URL out of it.
|
||||||
|
|
||||||
@ -271,6 +272,7 @@ QT_BEGIN_NAMESPACE
|
|||||||
Indicates whether the Network Access API should automatically follow a
|
Indicates whether the Network Access API should automatically follow a
|
||||||
HTTP redirect response or not. Currently redirects that are insecure,
|
HTTP redirect response or not. Currently redirects that are insecure,
|
||||||
that is redirecting from "https" to "http" protocol, are not allowed.
|
that is redirecting from "https" to "http" protocol, are not allowed.
|
||||||
|
(This value was introduced in 5.6.)
|
||||||
|
|
||||||
\value User
|
\value User
|
||||||
Special type. Additional information can be passed in
|
Special type. Additional information can be passed in
|
||||||
|
@ -420,6 +420,8 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations()
|
|||||||
if (generic) {
|
if (generic) {
|
||||||
if (!envOK || skipGeneric <= 0)
|
if (!envOK || skipGeneric <= 0)
|
||||||
sessionEngines.append(generic);
|
sessionEngines.append(generic);
|
||||||
|
else
|
||||||
|
delete generic;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,6 +92,7 @@ static QNetworkInterfacePrivate *interfaceFromProfile(IConnectionProfile *profil
|
|||||||
Q_ASSERT_SUCCEEDED(hr);
|
Q_ASSERT_SUCCEEDED(hr);
|
||||||
if (connectivityLevel != NetworkConnectivityLevel_None)
|
if (connectivityLevel != NetworkConnectivityLevel_None)
|
||||||
iface->flags = QNetworkInterface::IsUp | QNetworkInterface::IsRunning;
|
iface->flags = QNetworkInterface::IsUp | QNetworkInterface::IsRunning;
|
||||||
|
iface->flags |= QNetworkInterface::CanBroadcast;
|
||||||
|
|
||||||
ComPtr<INetworkAdapter> adapter;
|
ComPtr<INetworkAdapter> adapter;
|
||||||
hr = profile->get_NetworkAdapter(&adapter);
|
hr = profile->get_NetworkAdapter(&adapter);
|
||||||
|
@ -47,6 +47,7 @@
|
|||||||
#include <qurl.h>
|
#include <qurl.h>
|
||||||
#include <private/qsystemlibrary_p.h>
|
#include <private/qsystemlibrary_p.h>
|
||||||
#include <qnetworkinterface.h>
|
#include <qnetworkinterface.h>
|
||||||
|
#include <qdebug.h>
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <qt_windows.h>
|
#include <qt_windows.h>
|
||||||
@ -587,8 +588,16 @@ QList<QNetworkProxy> QNetworkProxyFactory::systemProxyForQuery(const QNetworkPro
|
|||||||
url.setScheme(QLatin1String("https"));
|
url.setScheme(QLatin1String("https"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString urlQueryString = url.toString();
|
||||||
|
if (urlQueryString.size() > 2083) {
|
||||||
|
// calls to WinHttpGetProxyForUrl with urls longer than 2083 characters
|
||||||
|
// fail with error code ERROR_INVALID_PARAMETER(87), so we truncate it
|
||||||
|
qWarning("Proxy query URL too long for windows API, try with truncated URL");
|
||||||
|
urlQueryString = url.toString().left(2083);
|
||||||
|
}
|
||||||
|
|
||||||
bool getProxySucceeded = ptrWinHttpGetProxyForUrl(sp->hHttpSession,
|
bool getProxySucceeded = ptrWinHttpGetProxyForUrl(sp->hHttpSession,
|
||||||
(LPCWSTR)url.toString().utf16(),
|
(LPCWSTR)urlQueryString.utf16(),
|
||||||
&sp->autoProxyOptions,
|
&sp->autoProxyOptions,
|
||||||
&proxyInfo);
|
&proxyInfo);
|
||||||
DWORD getProxyError = GetLastError();
|
DWORD getProxyError = GetLastError();
|
||||||
@ -605,7 +614,7 @@ QList<QNetworkProxy> QNetworkProxyFactory::systemProxyForQuery(const QNetworkPro
|
|||||||
sp->autoProxyOptions.dwFlags = WINHTTP_AUTOPROXY_CONFIG_URL;
|
sp->autoProxyOptions.dwFlags = WINHTTP_AUTOPROXY_CONFIG_URL;
|
||||||
sp->autoProxyOptions.lpszAutoConfigUrl = (LPCWSTR)sp->autoConfigUrl.utf16();
|
sp->autoProxyOptions.lpszAutoConfigUrl = (LPCWSTR)sp->autoConfigUrl.utf16();
|
||||||
getProxySucceeded = ptrWinHttpGetProxyForUrl(sp->hHttpSession,
|
getProxySucceeded = ptrWinHttpGetProxyForUrl(sp->hHttpSession,
|
||||||
(LPCWSTR)url.toString().utf16(),
|
(LPCWSTR)urlQueryString.utf16(),
|
||||||
&sp->autoProxyOptions,
|
&sp->autoProxyOptions,
|
||||||
&proxyInfo);
|
&proxyInfo);
|
||||||
getProxyError = GetLastError();
|
getProxyError = GetLastError();
|
||||||
@ -618,7 +627,7 @@ QList<QNetworkProxy> QNetworkProxyFactory::systemProxyForQuery(const QNetworkPro
|
|||||||
// But now we've to enable it (http://msdn.microsoft.com/en-us/library/aa383153%28v=VS.85%29.aspx)
|
// But now we've to enable it (http://msdn.microsoft.com/en-us/library/aa383153%28v=VS.85%29.aspx)
|
||||||
sp->autoProxyOptions.fAutoLogonIfChallenged = TRUE;
|
sp->autoProxyOptions.fAutoLogonIfChallenged = TRUE;
|
||||||
getProxySucceeded = ptrWinHttpGetProxyForUrl(sp->hHttpSession,
|
getProxySucceeded = ptrWinHttpGetProxyForUrl(sp->hHttpSession,
|
||||||
(LPCWSTR)url.toString().utf16(),
|
(LPCWSTR)urlQueryString.utf16(),
|
||||||
&sp->autoProxyOptions,
|
&sp->autoProxyOptions,
|
||||||
&proxyInfo);
|
&proxyInfo);
|
||||||
getProxyError = GetLastError();
|
getProxyError = GetLastError();
|
||||||
|
@ -32,6 +32,10 @@ MODULE_PLUGIN_TYPES = \
|
|||||||
ANDROID_PERMISSIONS += \
|
ANDROID_PERMISSIONS += \
|
||||||
android.permission.ACCESS_NETWORK_STATE
|
android.permission.ACCESS_NETWORK_STATE
|
||||||
|
|
||||||
|
MODULE_WINRT_CAPABILITIES = \
|
||||||
|
internetClient \
|
||||||
|
internetClientServer
|
||||||
|
|
||||||
MODULE_PLUGIN_TYPES = \
|
MODULE_PLUGIN_TYPES = \
|
||||||
bearer
|
bearer
|
||||||
load(qt_module)
|
load(qt_module)
|
||||||
|
@ -304,8 +304,10 @@ bool QNativeSocketEngine::connectToHostByName(const QString &name, quint16 port)
|
|||||||
Q_ASSERT_SUCCEEDED(hr);
|
Q_ASSERT_SUCCEEDED(hr);
|
||||||
|
|
||||||
d->socketState = QAbstractSocket::ConnectingState;
|
d->socketState = QAbstractSocket::ConnectingState;
|
||||||
hr = d->connectOp->put_Completed(Callback<IAsyncActionCompletedHandler>(
|
hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
|
||||||
|
return d->connectOp->put_Completed(Callback<IAsyncActionCompletedHandler>(
|
||||||
d, &QNativeSocketEnginePrivate::handleConnectToHost).Get());
|
d, &QNativeSocketEnginePrivate::handleConnectToHost).Get());
|
||||||
|
});
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
Q_ASSERT_SUCCEEDED(hr);
|
||||||
|
|
||||||
return d->socketState == QAbstractSocket::ConnectedState;
|
return d->socketState == QAbstractSocket::ConnectedState;
|
||||||
@ -315,50 +317,53 @@ bool QNativeSocketEngine::bind(const QHostAddress &address, quint16 port)
|
|||||||
{
|
{
|
||||||
Q_D(QNativeSocketEngine);
|
Q_D(QNativeSocketEngine);
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
ComPtr<IHostName> hostAddress;
|
hr = QEventDispatcherWinRT::runOnXamlThread([address, d, port, this]() {
|
||||||
|
HRESULT hr;
|
||||||
|
ComPtr<IHostName> hostAddress;
|
||||||
|
|
||||||
if (address != QHostAddress::Any && address != QHostAddress::AnyIPv4 && address != QHostAddress::AnyIPv6) {
|
if (address != QHostAddress::Any && address != QHostAddress::AnyIPv4 && address != QHostAddress::AnyIPv6) {
|
||||||
ComPtr<IHostNameFactory> hostNameFactory;
|
ComPtr<IHostNameFactory> hostNameFactory;
|
||||||
hr = GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Networking_HostName).Get(),
|
hr = GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Networking_HostName).Get(),
|
||||||
&hostNameFactory);
|
&hostNameFactory);
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
RETURN_HR_IF_FAILED("QNativeSocketEngine::bind: Could not obtain hostname factory");
|
||||||
const QString addressString = address.toString();
|
const QString addressString = address.toString();
|
||||||
HStringReference addressRef(reinterpret_cast<LPCWSTR>(addressString.utf16()));
|
HStringReference addressRef(reinterpret_cast<LPCWSTR>(addressString.utf16()));
|
||||||
hr = hostNameFactory->CreateHostName(addressRef.Get(), &hostAddress);
|
hr = hostNameFactory->CreateHostName(addressRef.Get(), &hostAddress);
|
||||||
RETURN_FALSE_IF_FAILED("QNativeSocketEngine::bind: Could not create hostname.");
|
RETURN_HR_IF_FAILED("QNativeSocketEngine::bind: Could not create hostname.");
|
||||||
}
|
|
||||||
|
|
||||||
QString portQString = port ? QString::number(port) : QString();
|
|
||||||
HStringReference portString(reinterpret_cast<LPCWSTR>(portQString.utf16()));
|
|
||||||
|
|
||||||
ComPtr<IAsyncAction> op;
|
|
||||||
if (d->socketType == QAbstractSocket::TcpSocket) {
|
|
||||||
if (!d->tcpListener) {
|
|
||||||
hr = RoActivateInstance(HString::MakeReference(RuntimeClass_Windows_Networking_Sockets_StreamSocketListener).Get(),
|
|
||||||
&d->tcpListener);
|
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
|
QString portQString = port ? QString::number(port) : QString();
|
||||||
return d->tcpListener->add_ConnectionReceived(
|
HStringReference portString(reinterpret_cast<LPCWSTR>(portQString.utf16()));
|
||||||
|
|
||||||
|
ComPtr<IAsyncAction> op;
|
||||||
|
if (d->socketType == QAbstractSocket::TcpSocket) {
|
||||||
|
if (!d->tcpListener) {
|
||||||
|
hr = RoActivateInstance(HString::MakeReference(RuntimeClass_Windows_Networking_Sockets_StreamSocketListener).Get(),
|
||||||
|
&d->tcpListener);
|
||||||
|
RETURN_HR_IF_FAILED("QNativeSocketEngine::bind: Could not create tcp listener");
|
||||||
|
}
|
||||||
|
|
||||||
|
hr = d->tcpListener->add_ConnectionReceived(
|
||||||
Callback<ClientConnectedHandler>(d, &QNativeSocketEnginePrivate::handleClientConnection).Get(),
|
Callback<ClientConnectedHandler>(d, &QNativeSocketEnginePrivate::handleClientConnection).Get(),
|
||||||
&d->connectionToken);
|
&d->connectionToken);
|
||||||
});
|
RETURN_HR_IF_FAILED("QNativeSocketEngine::bind: Could not register client connection callback");
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
hr = d->tcpListener->BindEndpointAsync(hostAddress.Get(), portString.Get(), &op);
|
||||||
hr = d->tcpListener->BindEndpointAsync(hostAddress.Get(), portString.Get(), &op);
|
} else if (d->socketType == QAbstractSocket::UdpSocket) {
|
||||||
} else if (d->socketType == QAbstractSocket::UdpSocket) {
|
hr = d->udpSocket()->BindEndpointAsync(hostAddress.Get(), portString.Get(), &op);
|
||||||
hr = d->udpSocket()->BindEndpointAsync(hostAddress.Get(), portString.Get(), &op);
|
}
|
||||||
}
|
if (hr == E_ACCESSDENIED) {
|
||||||
if (hr == E_ACCESSDENIED) {
|
qErrnoWarning(hr, "Unable to bind socket (%s:%hu/%s). Please check your manifest capabilities.",
|
||||||
qErrnoWarning(hr, "Unable to bind socket (%s:%hu/%s). Please check your manifest capabilities.",
|
qPrintable(address.toString()), port, socketDescription(this).constData());
|
||||||
qPrintable(address.toString()), port, socketDescription(this).constData());
|
return hr;
|
||||||
return false;
|
}
|
||||||
}
|
RETURN_HR_IF_FAILED("QNativeSocketEngine::bind: Unable to bind socket");
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
|
||||||
|
|
||||||
hr = op->put_Completed(Callback<IAsyncActionCompletedHandler>(d, &QNativeSocketEnginePrivate::handleBindCompleted).Get());
|
hr = op->put_Completed(Callback<IAsyncActionCompletedHandler>(d, &QNativeSocketEnginePrivate::handleBindCompleted).Get());
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
RETURN_HR_IF_FAILED("QNativeSocketEngine::bind: Could not register bind callback");
|
||||||
hr = QWinRTFunctions::await(op);
|
hr = QWinRTFunctions::await(op);
|
||||||
|
RETURN_HR_IF_FAILED("QNativeSocketEngine::bind: Could not wait for bind to finish");
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
Q_ASSERT_SUCCEEDED(hr);
|
||||||
|
|
||||||
d->socketState = QAbstractSocket::BoundState;
|
d->socketState = QAbstractSocket::BoundState;
|
||||||
@ -410,7 +415,9 @@ int QNativeSocketEngine::accept()
|
|||||||
socketDescription(this).constData());
|
socketDescription(this).constData());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
hr = op->put_Completed(Callback<SocketReadCompletedHandler>(d, &QNativeSocketEnginePrivate::handleReadyRead).Get());
|
hr = QEventDispatcherWinRT::runOnXamlThread([d, op]() {
|
||||||
|
return op->put_Completed(Callback<SocketReadCompletedHandler>(d, &QNativeSocketEnginePrivate::handleReadyRead).Get());
|
||||||
|
});
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
qErrnoWarning(hr, "accept(): Failed to set socket read callback (%s).",
|
qErrnoWarning(hr, "accept(): Failed to set socket read callback (%s).",
|
||||||
socketDescription(this).constData());
|
socketDescription(this).constData());
|
||||||
@ -781,18 +788,22 @@ void QNativeSocketEngine::establishRead()
|
|||||||
Q_D(QNativeSocketEngine);
|
Q_D(QNativeSocketEngine);
|
||||||
|
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
ComPtr<IInputStream> stream;
|
hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
|
||||||
hr = d->tcpSocket()->get_InputStream(&stream);
|
ComPtr<IInputStream> stream;
|
||||||
RETURN_VOID_IF_FAILED("Failed to get socket input stream");
|
HRESULT hr = d->tcpSocket()->get_InputStream(&stream);
|
||||||
|
RETURN_HR_IF_FAILED("QNativeSocketEngine::establishRead: Failed to get socket input stream");
|
||||||
|
|
||||||
ComPtr<IBuffer> buffer;
|
ComPtr<IBuffer> buffer;
|
||||||
hr = g->bufferFactory->Create(READ_BUFFER_SIZE, &buffer);
|
hr = g->bufferFactory->Create(READ_BUFFER_SIZE, &buffer);
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
RETURN_HR_IF_FAILED("QNativeSocketEngine::establishRead: Failed to create buffer");
|
||||||
|
|
||||||
ComPtr<IAsyncBufferOperation> op;
|
ComPtr<IAsyncBufferOperation> op;
|
||||||
hr = stream->ReadAsync(buffer.Get(), READ_BUFFER_SIZE, InputStreamOptions_Partial, &op);
|
hr = stream->ReadAsync(buffer.Get(), READ_BUFFER_SIZE, InputStreamOptions_Partial, &op);
|
||||||
RETURN_VOID_IF_FAILED("Failed to initiate socket read");
|
RETURN_HR_IF_FAILED("QNativeSocketEngine::establishRead: Failed to initiate socket read");
|
||||||
hr = op->put_Completed(Callback<SocketReadCompletedHandler>(d, &QNativeSocketEnginePrivate::handleReadyRead).Get());
|
hr = op->put_Completed(Callback<SocketReadCompletedHandler>(d, &QNativeSocketEnginePrivate::handleReadyRead).Get());
|
||||||
|
RETURN_HR_IF_FAILED("QNativeSocketEngine::establishRead: Failed to register read callback");
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
Q_ASSERT_SUCCEEDED(hr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -814,7 +825,10 @@ bool QNativeSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType soc
|
|||||||
hr = RoActivateInstance(HString::MakeReference(RuntimeClass_Windows_Networking_Sockets_DatagramSocket).Get(), &socket);
|
hr = RoActivateInstance(HString::MakeReference(RuntimeClass_Windows_Networking_Sockets_DatagramSocket).Get(), &socket);
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
Q_ASSERT_SUCCEEDED(hr);
|
||||||
socketDescriptor = qintptr(socket.Detach());
|
socketDescriptor = qintptr(socket.Detach());
|
||||||
hr = udpSocket()->add_MessageReceived(Callback<DatagramReceivedHandler>(this, &QNativeSocketEnginePrivate::handleNewDatagram).Get(), &connectionToken);
|
hr = QEventDispatcherWinRT::runOnXamlThread([this]() {
|
||||||
|
HRESULT hr = udpSocket()->add_MessageReceived(Callback<DatagramReceivedHandler>(this, &QNativeSocketEnginePrivate::handleNewDatagram).Get(), &connectionToken);
|
||||||
|
return hr;
|
||||||
|
});
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
Q_ASSERT_SUCCEEDED(hr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1242,7 +1256,7 @@ HRESULT QNativeSocketEnginePrivate::handleReadyRead(IAsyncBufferOperation *async
|
|||||||
// that the connection was closed. The socket cannot be closed here, as the subsequent read
|
// that the connection was closed. The socket cannot be closed here, as the subsequent read
|
||||||
// might fail then.
|
// might fail then.
|
||||||
if (status == Error || status == Canceled) {
|
if (status == Error || status == Canceled) {
|
||||||
setError(QAbstractSocket::NetworkError, RemoteHostClosedErrorString);
|
setError(QAbstractSocket::RemoteHostClosedError, RemoteHostClosedErrorString);
|
||||||
socketState = QAbstractSocket::UnconnectedState;
|
socketState = QAbstractSocket::UnconnectedState;
|
||||||
if (notifyOnRead)
|
if (notifyOnRead)
|
||||||
emit q->readReady();
|
emit q->readReady();
|
||||||
@ -1261,7 +1275,7 @@ HRESULT QNativeSocketEnginePrivate::handleReadyRead(IAsyncBufferOperation *async
|
|||||||
// the closing of the socket won't be communicated to the caller. So only the error is set. The
|
// the closing of the socket won't be communicated to the caller. So only the error is set. The
|
||||||
// actual socket close happens inside of read.
|
// actual socket close happens inside of read.
|
||||||
if (!bufferLength) {
|
if (!bufferLength) {
|
||||||
setError(QAbstractSocket::NetworkError, RemoteHostClosedErrorString);
|
setError(QAbstractSocket::RemoteHostClosedError, RemoteHostClosedErrorString);
|
||||||
socketState = QAbstractSocket::UnconnectedState;
|
socketState = QAbstractSocket::UnconnectedState;
|
||||||
if (notifyOnRead)
|
if (notifyOnRead)
|
||||||
emit q->readReady();
|
emit q->readReady();
|
||||||
@ -1307,7 +1321,9 @@ HRESULT QNativeSocketEnginePrivate::handleReadyRead(IAsyncBufferOperation *async
|
|||||||
socketDescription(q).constData());
|
socketDescription(q).constData());
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
hr = op->put_Completed(Callback<SocketReadCompletedHandler>(this, &QNativeSocketEnginePrivate::handleReadyRead).Get());
|
hr = QEventDispatcherWinRT::runOnXamlThread([op, this]() {
|
||||||
|
return op->put_Completed(Callback<SocketReadCompletedHandler>(this, &QNativeSocketEnginePrivate::handleReadyRead).Get());
|
||||||
|
});
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
qErrnoWarning(hr, "handleReadyRead(): Failed to set socket read callback (%s).",
|
qErrnoWarning(hr, "handleReadyRead(): Failed to set socket read callback (%s).",
|
||||||
socketDescription(q).constData());
|
socketDescription(q).constData());
|
||||||
|
@ -53,13 +53,19 @@
|
|||||||
#include <qloggingcategory.h>
|
#include <qloggingcategory.h>
|
||||||
#include <qplatformintegration.h>
|
#include <qplatformintegration.h>
|
||||||
#include <qplatformservices.h>
|
#include <qplatformservices.h>
|
||||||
|
#include <qdbusconnectioninterface.h>
|
||||||
|
#include <private/qlockfile_p.h>
|
||||||
#include <private/qguiapplication_p.h>
|
#include <private/qguiapplication_p.h>
|
||||||
|
|
||||||
|
// Defined in Windows headers which get included by qlockfile_p.h
|
||||||
|
#undef interface
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
Q_LOGGING_CATEGORY(qLcTray, "qt.qpa.tray")
|
Q_LOGGING_CATEGORY(qLcTray, "qt.qpa.tray")
|
||||||
|
|
||||||
static const QString KDEItemFormat = QStringLiteral("org.kde.StatusNotifierItem-%1-%2");
|
static const QString KDEItemFormat = QStringLiteral("org.kde.StatusNotifierItem-%1-%2");
|
||||||
|
static const QString KDEWatcherService = QStringLiteral("org.kde.StatusNotifierWatcher");
|
||||||
static const QString TempFileTemplate = QDir::tempPath() + QStringLiteral("/qt-trayicon-XXXXXX.png");
|
static const QString TempFileTemplate = QDir::tempPath() + QStringLiteral("/qt-trayicon-XXXXXX.png");
|
||||||
static const QString XdgNotificationService = QStringLiteral("org.freedesktop.Notifications");
|
static const QString XdgNotificationService = QStringLiteral("org.freedesktop.Notifications");
|
||||||
static const QString XdgNotificationPath = QStringLiteral("/org/freedesktop/Notifications");
|
static const QString XdgNotificationPath = QStringLiteral("/org/freedesktop/Notifications");
|
||||||
@ -142,9 +148,17 @@ void QDBusTrayIcon::setStatus(const QString &status)
|
|||||||
|
|
||||||
QTemporaryFile *QDBusTrayIcon::tempIcon(const QIcon &icon)
|
QTemporaryFile *QDBusTrayIcon::tempIcon(const QIcon &icon)
|
||||||
{
|
{
|
||||||
// Hack for Unity, which doesn't handle icons sent across D-Bus:
|
// Hack for indicator-application, which doesn't handle icons sent across D-Bus:
|
||||||
// save the icon to a temp file and set the icon name to that filename.
|
// save the icon to a temp file and set the icon name to that filename.
|
||||||
static bool necessary = (QGuiApplicationPrivate::platformIntegration()->services()->desktopEnvironment().split(':').contains("UNITY"));
|
static bool necessity_checked = false;
|
||||||
|
static bool necessary = false;
|
||||||
|
if (!necessity_checked) {
|
||||||
|
QDBusConnection session = QDBusConnection::sessionBus();
|
||||||
|
uint pid = session.interface()->servicePid(KDEWatcherService).value();
|
||||||
|
QString processName = QLockFilePrivate::processNameByPid(pid);
|
||||||
|
necessary = processName.endsWith(QStringLiteral("indicator-application-service"));
|
||||||
|
necessity_checked = true;
|
||||||
|
}
|
||||||
if (!necessary)
|
if (!necessary)
|
||||||
return Q_NULLPTR;
|
return Q_NULLPTR;
|
||||||
QTemporaryFile *ret = new QTemporaryFile(TempFileTemplate, this);
|
QTemporaryFile *ret = new QTemporaryFile(TempFileTemplate, this);
|
||||||
|
@ -368,6 +368,9 @@ QAndroidPlatformTheme::QAndroidPlatformTheme(QAndroidPlatformNativeInterface *an
|
|||||||
|
|
||||||
// default in case the style has not set a font
|
// default in case the style has not set a font
|
||||||
m_systemFont = QFont(QLatin1String("Roboto"), 14.0 * 100 / 72); // keep default size the same after changing from 100 dpi to 72 dpi
|
m_systemFont = QFont(QLatin1String("Roboto"), 14.0 * 100 / 72); // keep default size the same after changing from 100 dpi to 72 dpi
|
||||||
|
|
||||||
|
// by default use native menu bar
|
||||||
|
QCoreApplication::setAttribute(Qt::AA_DontUseNativeMenuBar, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
QPlatformMenuBar *QAndroidPlatformTheme::createPlatformMenuBar() const
|
QPlatformMenuBar *QAndroidPlatformTheme::createPlatformMenuBar() const
|
||||||
|
@ -170,6 +170,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil;
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_isMenuView = false;
|
m_isMenuView = false;
|
||||||
|
self.focusRingType = NSFocusRingTypeNone;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@ -843,7 +844,7 @@ QT_WARNING_POP
|
|||||||
Q_UNUSED(qtScreenPoint);
|
Q_UNUSED(qtScreenPoint);
|
||||||
|
|
||||||
// Maintain masked state for the button for use by MouseDragged and MouseUp.
|
// Maintain masked state for the button for use by MouseDragged and MouseUp.
|
||||||
const bool masked = m_maskRegion.contains(qtWindowPoint.toPoint());
|
const bool masked = [self hasMask] && !m_maskRegion.contains(qtWindowPoint.toPoint());
|
||||||
if (masked)
|
if (masked)
|
||||||
m_acceptedMouseDowns &= ~button;
|
m_acceptedMouseDowns &= ~button;
|
||||||
else
|
else
|
||||||
@ -949,7 +950,7 @@ QT_WARNING_POP
|
|||||||
[self convertFromScreen:[self screenMousePoint:theEvent] toWindowPoint:&qtWindowPoint andScreenPoint:&qtScreenPoint];
|
[self convertFromScreen:[self screenMousePoint:theEvent] toWindowPoint:&qtWindowPoint andScreenPoint:&qtScreenPoint];
|
||||||
Q_UNUSED(qtScreenPoint);
|
Q_UNUSED(qtScreenPoint);
|
||||||
|
|
||||||
bool masked = m_maskRegion.contains(qtWindowPoint.toPoint());
|
const bool masked = [self hasMask] && !m_maskRegion.contains(qtWindowPoint.toPoint());
|
||||||
|
|
||||||
// Maintain masked state for the button for use by MouseDragged and Up.
|
// Maintain masked state for the button for use by MouseDragged and Up.
|
||||||
if (masked)
|
if (masked)
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
|
|
||||||
contains(QT_CONFIG, egl_x11): SUBDIRS += eglfs_x11
|
contains(QT_CONFIG, egl_x11): SUBDIRS += eglfs_x11
|
||||||
contains(QT_CONFIG, eglfs_gbm): SUBDIRS += eglfs_kms
|
contains(QT_CONFIG, eglfs_gbm): SUBDIRS += eglfs_kms_support eglfs_kms
|
||||||
contains(QT_CONFIG, eglfs_egldevice): SUBDIRS += eglfs_kms_egldevice
|
contains(QT_CONFIG, eglfs_egldevice): SUBDIRS += eglfs_kms_support eglfs_kms_egldevice
|
||||||
contains(QT_CONFIG, eglfs_brcm): SUBDIRS += eglfs_brcm
|
contains(QT_CONFIG, eglfs_brcm): SUBDIRS += eglfs_brcm
|
||||||
contains(QT_CONFIG, eglfs_mali): SUBDIRS += eglfs_mali
|
contains(QT_CONFIG, eglfs_mali): SUBDIRS += eglfs_mali
|
||||||
contains(QT_CONFIG, eglfs_viv): SUBDIRS += eglfs_viv
|
contains(QT_CONFIG, eglfs_viv): SUBDIRS += eglfs_viv
|
||||||
contains(QT_CONFIG, eglfs_viv_wl): SUBDIRS += eglfs_viv_wl
|
contains(QT_CONFIG, eglfs_viv_wl): SUBDIRS += eglfs_viv_wl
|
||||||
|
|
||||||
|
eglfs_kms_egldevice.depends = eglfs_kms_support
|
||||||
|
eglfs_kms.depends = eglfs_kms_support
|
||||||
|
@ -1,31 +1,35 @@
|
|||||||
TARGET = qeglfs-kms-integration
|
TARGET = qeglfs-kms-integration
|
||||||
|
|
||||||
QT += core-private gui-private platformsupport-private eglfs_device_lib-private
|
PLUGIN_TYPE = egldeviceintegrations
|
||||||
|
PLUGIN_CLASS_NAME = QEglFSKmsIntegrationPlugin
|
||||||
|
load(qt_plugin)
|
||||||
|
|
||||||
INCLUDEPATH += $$PWD/../..
|
QT += core-private gui-private platformsupport-private eglfs_device_lib-private eglfs_kms_support-private
|
||||||
|
|
||||||
|
INCLUDEPATH += $$PWD/../.. $$PWD/../eglfs_kms_support
|
||||||
|
|
||||||
# Avoid X11 header collision
|
# Avoid X11 header collision
|
||||||
DEFINES += MESA_EGL_NO_X11_HEADERS
|
DEFINES += MESA_EGL_NO_X11_HEADERS
|
||||||
|
|
||||||
CONFIG += link_pkgconfig
|
CONFIG += link_pkgconfig
|
||||||
PKGCONFIG += libdrm gbm
|
!contains(QT_CONFIG, no-pkg-config) {
|
||||||
|
PKGCONFIG += libdrm gbm
|
||||||
|
} else {
|
||||||
|
LIBS += -ldrm -lgbm
|
||||||
|
}
|
||||||
|
|
||||||
CONFIG += egl
|
CONFIG += egl
|
||||||
QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
|
QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
|
||||||
|
|
||||||
SOURCES += $$PWD/qeglfskmsmain.cpp \
|
SOURCES += $$PWD/qeglfskmsgbmmain.cpp \
|
||||||
$$PWD/qeglfskmsintegration.cpp \
|
$$PWD/qeglfskmsgbmintegration.cpp \
|
||||||
$$PWD/qeglfskmsdevice.cpp \
|
$$PWD/qeglfskmsgbmdevice.cpp \
|
||||||
$$PWD/qeglfskmsscreen.cpp \
|
$$PWD/qeglfskmsgbmscreen.cpp \
|
||||||
$$PWD/qeglfskmscursor.cpp
|
$$PWD/qeglfskmsgbmcursor.cpp
|
||||||
|
|
||||||
HEADERS += $$PWD/qeglfskmsintegration.h \
|
HEADERS += $$PWD/qeglfskmsgbmintegration.h \
|
||||||
$$PWD/qeglfskmsdevice.h \
|
$$PWD/qeglfskmsgbmdevice.h \
|
||||||
$$PWD/qeglfskmsscreen.h \
|
$$PWD/qeglfskmsgbmscreen.h \
|
||||||
$$PWD/qeglfskmscursor.h
|
$$PWD/qeglfskmsgbmcursor.h
|
||||||
|
|
||||||
OTHER_FILES += $$PWD/eglfs_kms.json
|
OTHER_FILES += $$PWD/eglfs_kms.json
|
||||||
|
|
||||||
PLUGIN_TYPE = egldeviceintegrations
|
|
||||||
PLUGIN_CLASS_NAME = QEglFSKmsIntegrationPlugin
|
|
||||||
load(qt_plugin)
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
**
|
**
|
||||||
** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
|
** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
** Copyright (C) 2016 Pelagicore AG
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the plugins of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
@ -38,9 +39,9 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "qeglfskmscursor.h"
|
#include "qeglfskmsgbmcursor.h"
|
||||||
#include "qeglfskmsscreen.h"
|
#include "qeglfskmsgbmscreen.h"
|
||||||
#include "qeglfskmsdevice.h"
|
#include "qeglfskmsgbmdevice.h"
|
||||||
|
|
||||||
#include <QtCore/QJsonDocument>
|
#include <QtCore/QJsonDocument>
|
||||||
#include <QtCore/QJsonObject>
|
#include <QtCore/QJsonObject>
|
||||||
@ -63,7 +64,7 @@ QT_BEGIN_NAMESPACE
|
|||||||
|
|
||||||
Q_DECLARE_LOGGING_CATEGORY(qLcEglfsKmsDebug)
|
Q_DECLARE_LOGGING_CATEGORY(qLcEglfsKmsDebug)
|
||||||
|
|
||||||
QEglFSKmsCursor::QEglFSKmsCursor(QEglFSKmsScreen *screen)
|
QEglFSKmsGbmCursor::QEglFSKmsGbmCursor(QEglFSKmsGbmScreen *screen)
|
||||||
: m_screen(screen)
|
: m_screen(screen)
|
||||||
, m_cursorSize(64, 64) // 64x64 is the old standard size, we now try to query the real size below
|
, m_cursorSize(64, 64) // 64x64 is the old standard size, we now try to query the real size below
|
||||||
, m_bo(Q_NULLPTR)
|
, m_bo(Q_NULLPTR)
|
||||||
@ -83,7 +84,7 @@ QEglFSKmsCursor::QEglFSKmsCursor(QEglFSKmsScreen *screen)
|
|||||||
m_cursorSize.setHeight(height);
|
m_cursorSize.setHeight(height);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_bo = gbm_bo_create(m_screen->device()->device(), m_cursorSize.width(), m_cursorSize.height(),
|
m_bo = gbm_bo_create(static_cast<QEglFSKmsGbmDevice *>(m_screen->device())->gbmDevice(), m_cursorSize.width(), m_cursorSize.height(),
|
||||||
GBM_FORMAT_ARGB8888, GBM_BO_USE_CURSOR_64X64 | GBM_BO_USE_WRITE);
|
GBM_FORMAT_ARGB8888, GBM_BO_USE_CURSOR_64X64 | GBM_BO_USE_WRITE);
|
||||||
if (!m_bo) {
|
if (!m_bo) {
|
||||||
qWarning("Could not create buffer for cursor!");
|
qWarning("Could not create buffer for cursor!");
|
||||||
@ -98,7 +99,7 @@ QEglFSKmsCursor::QEglFSKmsCursor(QEglFSKmsScreen *screen)
|
|||||||
setPos(QPoint(0, 0));
|
setPos(QPoint(0, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
QEglFSKmsCursor::~QEglFSKmsCursor()
|
QEglFSKmsGbmCursor::~QEglFSKmsGbmCursor()
|
||||||
{
|
{
|
||||||
Q_FOREACH (QPlatformScreen *screen, m_screen->virtualSiblings()) {
|
Q_FOREACH (QPlatformScreen *screen, m_screen->virtualSiblings()) {
|
||||||
QEglFSKmsScreen *kmsScreen = static_cast<QEglFSKmsScreen *>(screen);
|
QEglFSKmsScreen *kmsScreen = static_cast<QEglFSKmsScreen *>(screen);
|
||||||
@ -110,13 +111,13 @@ QEglFSKmsCursor::~QEglFSKmsCursor()
|
|||||||
m_bo = Q_NULLPTR;
|
m_bo = Q_NULLPTR;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QEglFSKmsCursor::pointerEvent(const QMouseEvent &event)
|
void QEglFSKmsGbmCursor::pointerEvent(const QMouseEvent &event)
|
||||||
{
|
{
|
||||||
setPos(event.screenPos().toPoint());
|
setPos(event.screenPos().toPoint());
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef QT_NO_CURSOR
|
#ifndef QT_NO_CURSOR
|
||||||
void QEglFSKmsCursor::changeCursor(QCursor *windowCursor, QWindow *window)
|
void QEglFSKmsGbmCursor::changeCursor(QCursor *windowCursor, QWindow *window)
|
||||||
{
|
{
|
||||||
Q_UNUSED(window);
|
Q_UNUSED(window);
|
||||||
|
|
||||||
@ -171,12 +172,12 @@ void QEglFSKmsCursor::changeCursor(QCursor *windowCursor, QWindow *window)
|
|||||||
}
|
}
|
||||||
#endif // QT_NO_CURSOR
|
#endif // QT_NO_CURSOR
|
||||||
|
|
||||||
QPoint QEglFSKmsCursor::pos() const
|
QPoint QEglFSKmsGbmCursor::pos() const
|
||||||
{
|
{
|
||||||
return m_pos;
|
return m_pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QEglFSKmsCursor::setPos(const QPoint &pos)
|
void QEglFSKmsGbmCursor::setPos(const QPoint &pos)
|
||||||
{
|
{
|
||||||
Q_FOREACH (QPlatformScreen *screen, m_screen->virtualSiblings()) {
|
Q_FOREACH (QPlatformScreen *screen, m_screen->virtualSiblings()) {
|
||||||
QEglFSKmsScreen *kmsScreen = static_cast<QEglFSKmsScreen *>(screen);
|
QEglFSKmsScreen *kmsScreen = static_cast<QEglFSKmsScreen *>(screen);
|
||||||
@ -192,7 +193,7 @@ void QEglFSKmsCursor::setPos(const QPoint &pos)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QEglFSKmsCursor::initCursorAtlas()
|
void QEglFSKmsGbmCursor::initCursorAtlas()
|
||||||
{
|
{
|
||||||
static QByteArray json = qgetenv("QT_QPA_EGLFS_CURSOR");
|
static QByteArray json = qgetenv("QT_QPA_EGLFS_CURSOR");
|
||||||
if (json.isEmpty())
|
if (json.isEmpty())
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user