Merge remote-tracking branch 'origin/5.6' into 5.7
Conflicts: configure src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp src/network/access/qnetworkaccessmanager.cpp src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor.cpp src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor.h src/widgets/widgets/qlineedit_p.cpp src/widgets/widgets/qlineedit_p.h src/winmain/winmain.pro tests/auto/corelib/io/qstorageinfo/tst_qstorageinfo.cpp tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h tests/auto/testlib/selftests/expected_cmptest.teamcity tests/auto/testlib/selftests/expected_cmptest.txt tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp tools/configure/configureapp.cpp Change-Id: Ib9997b0d0f91946e4081d36c0c6b696c5c983b2a
This commit is contained in:
commit
818014b449
@ -1,5 +1,4 @@
|
|||||||
load(qt_build_config)
|
load(qt_build_config)
|
||||||
CONFIG += qt_example_installs
|
|
||||||
CONFIG += warning_clean
|
CONFIG += warning_clean
|
||||||
|
|
||||||
QT_SOURCE_TREE = $$PWD
|
QT_SOURCE_TREE = $$PWD
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
SOURCES = kms.cpp
|
SOURCES = kms.cpp
|
||||||
CONFIG += link_pkgconfig
|
CONFIG += link_pkgconfig
|
||||||
PKGCONFIG += libdrm libudev
|
PKGCONFIG += libdrm
|
||||||
CONFIG -= qt
|
CONFIG -= qt
|
||||||
|
@ -66,9 +66,6 @@ while [ "$#" -gt 0 ]; do
|
|||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
|
|
||||||
# debuggery
|
|
||||||
[ "$VERBOSE" = "yes" ] && echo "$DESCRIPTION auto-detection... ($*)"
|
|
||||||
|
|
||||||
test -d "$OUTDIR/$TEST" || mkdir -p "$OUTDIR/$TEST"
|
test -d "$OUTDIR/$TEST" || mkdir -p "$OUTDIR/$TEST"
|
||||||
|
|
||||||
cd "$OUTDIR/$TEST"
|
cd "$OUTDIR/$TEST"
|
||||||
@ -96,6 +93,7 @@ set -- \
|
|||||||
"$SRCDIR/$TEST/$EXE.pro" \
|
"$SRCDIR/$TEST/$EXE.pro" \
|
||||||
-o "$OUTDIR/$TEST/Makefile"
|
-o "$OUTDIR/$TEST/Makefile"
|
||||||
if [ "$VERBOSE" = "yes" ]; then
|
if [ "$VERBOSE" = "yes" ]; then
|
||||||
|
echo
|
||||||
OUTDIR=$OUTDIR "$@" && $MAKE && SUCCESS=yes
|
OUTDIR=$OUTDIR "$@" && $MAKE && SUCCESS=yes
|
||||||
else
|
else
|
||||||
OUTDIR=$OUTDIR "$@" >/dev/null 2>&1 && $MAKE >/dev/null 2>&1 && SUCCESS=yes
|
OUTDIR=$OUTDIR "$@" >/dev/null 2>&1 && $MAKE >/dev/null 2>&1 && SUCCESS=yes
|
||||||
@ -103,9 +101,9 @@ fi
|
|||||||
|
|
||||||
# done
|
# done
|
||||||
if [ "$SUCCESS" != "yes" ]; then
|
if [ "$SUCCESS" != "yes" ]; then
|
||||||
[ "$VERBOSE" = "yes" ] && echo "$DESCRIPTION disabled."
|
[ "$VERBOSE" = "yes" ] && echo "$DESCRIPTION disabled." || echo " no."
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
[ "$VERBOSE" = "yes" ] && echo "$DESCRIPTION enabled."
|
[ "$VERBOSE" = "yes" ] && echo "$DESCRIPTION enabled." || echo " yes."
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
49
configure
vendored
49
configure
vendored
@ -91,6 +91,7 @@ for i in "$@"; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
# initialize global variables
|
# initialize global variables
|
||||||
|
CONFIG_SEPARATORS=`printf ' \t'`
|
||||||
QMAKE_SWITCHES=
|
QMAKE_SWITCHES=
|
||||||
QMAKE_VARS=
|
QMAKE_VARS=
|
||||||
QMAKE_CONFIG=
|
QMAKE_CONFIG=
|
||||||
@ -348,6 +349,21 @@ getXQMakeConf()
|
|||||||
getSingleQMakeVariable "$1" "$xspecvals"
|
getSingleQMakeVariable "$1" "$xspecvals"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testXConfig()
|
||||||
|
{
|
||||||
|
# Put a space on each end of the CONFIG value so that searching for the
|
||||||
|
# target with whitespace on either side will work even when it's the
|
||||||
|
# first/last/only item in the CONFIG value.
|
||||||
|
case \ `getXQMakeConf CONFIG`\ in
|
||||||
|
*[${CONFIG_SEPARATORS}]$1[${CONFIG_SEPARATORS}]*)
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
compilerSupportsFlag()
|
compilerSupportsFlag()
|
||||||
{
|
{
|
||||||
cat >conftest.cpp <<EOF
|
cat >conftest.cpp <<EOF
|
||||||
@ -3926,7 +3942,7 @@ if true; then ###[ '!' -f "$outpath/bin/qmake" ];
|
|||||||
setBootstrapVariable QMAKE_LFLAGS
|
setBootstrapVariable QMAKE_LFLAGS
|
||||||
setBootstrapVariable QMAKE_LFLAGS_GCSECTIONS
|
setBootstrapVariable QMAKE_LFLAGS_GCSECTIONS
|
||||||
|
|
||||||
if [ "$CFG_RELEASE_TOOLS" = "yes" ]; then
|
if [ "$CFG_DEBUG" = "no" ] || [ "$CFG_RELEASE_TOOLS" = "yes" ]; then
|
||||||
setBootstrapVariable QMAKE_CFLAGS_RELEASE
|
setBootstrapVariable QMAKE_CFLAGS_RELEASE
|
||||||
setBootstrapVariable QMAKE_CXXFLAGS_RELEASE
|
setBootstrapVariable QMAKE_CXXFLAGS_RELEASE
|
||||||
EXTRA_CFLAGS="$EXTRA_CFLAGS \$(QMAKE_CFLAGS_RELEASE)"
|
EXTRA_CFLAGS="$EXTRA_CFLAGS \$(QMAKE_CFLAGS_RELEASE)"
|
||||||
@ -3938,12 +3954,6 @@ if true; then ###[ '!' -f "$outpath/bin/qmake" ];
|
|||||||
EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS \$(QMAKE_CXXFLAGS_DEBUG)"
|
EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS \$(QMAKE_CXXFLAGS_DEBUG)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$RPATH_FLAGS" ] && [ -n "`getQMakeConf 'QMAKE_(LFLAGS_)?RPATH'`" ]; then
|
|
||||||
setBootstrapVariable "QMAKE_(LFLAGS_)?RPATH" QMAKE_LFLAGS_RPATH
|
|
||||||
for rpath in $RPATH_FLAGS; do
|
|
||||||
EXTRA_LFLAGS="\$(QMAKE_LFLAGS_RPATH)\"$rpath\" $EXTRA_LFLAGS"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
case `basename "$PLATFORM"` in
|
case `basename "$PLATFORM"` in
|
||||||
win32-g++*)
|
win32-g++*)
|
||||||
EXTRA_CFLAGS="$EXTRA_CFLAGS -DUNICODE"
|
EXTRA_CFLAGS="$EXTRA_CFLAGS -DUNICODE"
|
||||||
@ -3994,9 +4004,6 @@ if true; then ###[ '!' -f "$outpath/bin/qmake" ];
|
|||||||
\"\$(SOURCE_PATH)/src/corelib/kernel/qcore_mac.cpp\" \
|
\"\$(SOURCE_PATH)/src/corelib/kernel/qcore_mac.cpp\" \
|
||||||
\"\$(SOURCE_PATH)/src/corelib/kernel/qcore_mac_objc.mm\""
|
\"\$(SOURCE_PATH)/src/corelib/kernel/qcore_mac_objc.mm\""
|
||||||
fi
|
fi
|
||||||
if [ '!' -z "$D_FLAGS" ]; then
|
|
||||||
EXTRA_CFLAGS="$EXTRA_CFLAGS $D_FLAGS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo >>"$mkfile"
|
echo >>"$mkfile"
|
||||||
adjrelpath=`echo "$relpath" | sed 's/ /\\\\\\\\ /g'`
|
adjrelpath=`echo "$relpath" | sed 's/ /\\\\\\\\ /g'`
|
||||||
@ -4225,6 +4232,7 @@ compileTest()
|
|||||||
if [ "$CFG_SHARED" = "no" ]; then
|
if [ "$CFG_SHARED" = "no" ]; then
|
||||||
test_config="$QMAKE_CONFIG static"
|
test_config="$QMAKE_CONFIG static"
|
||||||
fi
|
fi
|
||||||
|
echo $ECHO_N "checking for $name... $ECHO_C"
|
||||||
"$unixtests/compile.test" "$XQMAKESPEC" "$test_config" $OPT_VERBOSE "$relpath" "$outpath" "$path" "$name" "$CFG_QMAKE_PATH" "$QTCONFFILE" $I_FLAGS $D_FLAGS $L_FLAGS "$@"
|
"$unixtests/compile.test" "$XQMAKESPEC" "$test_config" $OPT_VERBOSE "$relpath" "$outpath" "$path" "$name" "$CFG_QMAKE_PATH" "$QTCONFFILE" $I_FLAGS $D_FLAGS $L_FLAGS "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5437,6 +5445,7 @@ if [ "$CFG_OPENGL" = "es2" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# auto-detect FontConfig support
|
# auto-detect FontConfig support
|
||||||
|
ORIG_CFG_FREETYPE="$CFG_FREETYPE"
|
||||||
if [ "$CFG_FONTCONFIG" != "no" ]; then
|
if [ "$CFG_FONTCONFIG" != "no" ]; then
|
||||||
if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists fontconfig --exists freetype2 2>/dev/null; then
|
if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists fontconfig --exists freetype2 2>/dev/null; then
|
||||||
QT_CFLAGS_FONTCONFIG=`$PKG_CONFIG --cflags fontconfig --cflags freetype2 2>/dev/null`
|
QT_CFLAGS_FONTCONFIG=`$PKG_CONFIG --cflags fontconfig --cflags freetype2 2>/dev/null`
|
||||||
@ -5630,6 +5639,11 @@ if [ "$CFG_XCB" != "no" ]; then
|
|||||||
|
|
||||||
if [ "$CFG_XCB" = "qt" ]; then
|
if [ "$CFG_XCB" = "qt" ]; then
|
||||||
QT_CONFIG="$QT_CONFIG xcb-qt"
|
QT_CONFIG="$QT_CONFIG xcb-qt"
|
||||||
|
|
||||||
|
if compileTest qpa/xcb-glx "xcb-glx" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then
|
||||||
|
CFG_XCB_GLX=yes
|
||||||
|
QT_CONFIG="$QT_CONFIG xcb-glx"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
CFG_XCB="system"
|
CFG_XCB="system"
|
||||||
if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists "xcb >= 1.5" 2>/dev/null; then
|
if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists "xcb >= 1.5" 2>/dev/null; then
|
||||||
@ -6439,7 +6453,11 @@ fi
|
|||||||
[ "$CFG_STACK_PROTECTOR_STRONG" = "yes" ] && QT_CONFIG="$QT_CONFIG stack-protector-strong"
|
[ "$CFG_STACK_PROTECTOR_STRONG" = "yes" ] && QT_CONFIG="$QT_CONFIG stack-protector-strong"
|
||||||
[ "$CFG_REDUCE_RELOCATIONS" = "yes" ] && QT_CONFIG="$QT_CONFIG reduce_relocations"
|
[ "$CFG_REDUCE_RELOCATIONS" = "yes" ] && QT_CONFIG="$QT_CONFIG reduce_relocations"
|
||||||
[ "$CFG_STRIP" = "no" ] && QMAKE_CONFIG="$QMAKE_CONFIG nostrip"
|
[ "$CFG_STRIP" = "no" ] && QMAKE_CONFIG="$QMAKE_CONFIG nostrip"
|
||||||
[ "$CFG_PRECOMPILE" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG precompile_header"
|
if testXConfig precompile_header; then
|
||||||
|
[ "$CFG_PRECOMPILE" = "no" ] && QMakeVar del CONFIG precompile_header
|
||||||
|
else
|
||||||
|
[ "$CFG_PRECOMPILE" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG precompile_header"
|
||||||
|
fi
|
||||||
[ "$CFG_USE_GOLD_LINKER" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG use_gold_linker"
|
[ "$CFG_USE_GOLD_LINKER" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG use_gold_linker"
|
||||||
[ "$CFG_ENABLE_NEW_DTAGS" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG enable_new_dtags"
|
[ "$CFG_ENABLE_NEW_DTAGS" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG enable_new_dtags"
|
||||||
if [ "$CFG_SEPARATE_DEBUG_INFO" = "yes" ]; then
|
if [ "$CFG_SEPARATE_DEBUG_INFO" = "yes" ]; then
|
||||||
@ -7536,6 +7554,15 @@ if [ "$CFG_SHARED" = "no" ]; then
|
|||||||
echo "loaded plugins. Make sure to import all needed static plugins,"
|
echo "loaded plugins. Make sure to import all needed static plugins,"
|
||||||
echo "or compile needed modules into the library."
|
echo "or compile needed modules into the library."
|
||||||
fi
|
fi
|
||||||
|
if [ "$CFG_FREETYPE" = "system" ]; then
|
||||||
|
if [ "$ORIG_CFG_FREETYPE" = "qt" ]; then
|
||||||
|
echo
|
||||||
|
echo "WARNING: Bundled FreeType can't be used. FontConfig use requires system FreeType."
|
||||||
|
elif [ "$ORIG_CFG_FREETYPE" = "no" ]; then
|
||||||
|
echo
|
||||||
|
echo "WARNING: FreeType can't be disabled. FontConfig use requires system FreeType."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
if [ "$CFG_OPENSSL" = "linked" ] && [ "$OPENSSL_LIBS" = "" ]; then
|
if [ "$CFG_OPENSSL" = "linked" ] && [ "$OPENSSL_LIBS" = "" ]; then
|
||||||
echo
|
echo
|
||||||
echo "NOTE: When linking against OpenSSL, you can override the default"
|
echo "NOTE: When linking against OpenSSL, you can override the default"
|
||||||
|
@ -51,6 +51,7 @@
|
|||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QDesktopWidget>
|
#include <QDesktopWidget>
|
||||||
#include <QFileSystemModel>
|
#include <QFileSystemModel>
|
||||||
|
#include <QFileIconProvider>
|
||||||
#include <QTreeView>
|
#include <QTreeView>
|
||||||
#include <QCommandLineParser>
|
#include <QCommandLineParser>
|
||||||
#include <QCommandLineOption>
|
#include <QCommandLineOption>
|
||||||
@ -64,6 +65,8 @@ int main(int argc, char *argv[])
|
|||||||
parser.setApplicationDescription("Qt Dir View Example");
|
parser.setApplicationDescription("Qt Dir View Example");
|
||||||
parser.addHelpOption();
|
parser.addHelpOption();
|
||||||
parser.addVersionOption();
|
parser.addVersionOption();
|
||||||
|
QCommandLineOption dontUseCustomDirectoryIconsOption("c", "Set QFileIconProvider::DontUseCustomDirectoryIcons");
|
||||||
|
parser.addOption(dontUseCustomDirectoryIconsOption);
|
||||||
parser.addPositionalArgument("directory", "The directory to start in.");
|
parser.addPositionalArgument("directory", "The directory to start in.");
|
||||||
parser.process(app);
|
parser.process(app);
|
||||||
const QString rootPath = parser.positionalArguments().isEmpty()
|
const QString rootPath = parser.positionalArguments().isEmpty()
|
||||||
@ -71,6 +74,8 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
QFileSystemModel model;
|
QFileSystemModel model;
|
||||||
model.setRootPath("");
|
model.setRootPath("");
|
||||||
|
if (parser.isSet(dontUseCustomDirectoryIconsOption))
|
||||||
|
model.iconProvider()->setOptions(QFileIconProvider::DontUseCustomDirectoryIcons);
|
||||||
QTreeView tree;
|
QTreeView tree;
|
||||||
tree.setModel(&model);
|
tree.setModel(&model);
|
||||||
if (!rootPath.isEmpty()) {
|
if (!rootPath.isEmpty()) {
|
||||||
|
@ -1,6 +1,23 @@
|
|||||||
#
|
#
|
||||||
# qmake configuration for the Freescale iMX6 boards (single, dual and quad)
|
# qmake configuration for the Freescale iMX6 boards (single, dual and quad)
|
||||||
#
|
#
|
||||||
|
# The configuration below is set up for running with EGL on the framebuffer via
|
||||||
|
# the eglfs platform plugin and its eglfs_viv backend.
|
||||||
|
|
||||||
|
# Wayland is also fully functional out of the box. However, when writing Wayland
|
||||||
|
# *compositors* with Qt, the eglfs backend will have to be switched to
|
||||||
|
# eglfs_viv_wl by setting the QT_QPA_EGLFS_INTEGRATION environment variable.
|
||||||
|
#
|
||||||
|
# Below is an example configure line that assumes the SDK is in
|
||||||
|
# $HOME/imx6/toolchain. On device Qt is expected to be placed under
|
||||||
|
# /usr/local/qt5 whereas on the host 'make install' will copy the host tools and
|
||||||
|
# the target libraries to $HOME/imx6/qt5.
|
||||||
|
#
|
||||||
|
# ./configure -prefix /usr/local/qt5 -extprefix $HOME/imx6/qt5 -device linux-imx6-g++ \
|
||||||
|
# -device-option CROSS_COMPILE=$HOME/imx6/toolchain/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi- \
|
||||||
|
# -sysroot $HOME/imx6/toolchain/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi \
|
||||||
|
# -nomake examples -nomake tests -v
|
||||||
|
#
|
||||||
|
|
||||||
include(../common/linux_device_pre.conf)
|
include(../common/linux_device_pre.conf)
|
||||||
|
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
QMAKE_MAKE = $$(MAKE)
|
QMAKE_MAKE = $$(MAKE)
|
||||||
!isEmpty(QMAKE_MAKE) {
|
!isEmpty(QMAKE_MAKE) {
|
||||||
# We were called recursively. Use the right make, as MAKEFLAGS may be set as well.
|
# We were called recursively. Use the right make, as MAKEFLAGS may be set as well.
|
||||||
} else:equals(MAKEFILE_GENERATOR, UNIX) {
|
} else:if(equals(MAKEFILE_GENERATOR, UNIX)|equals(MAKEFILE_GENERATOR, MINGW)) {
|
||||||
QMAKE_MAKE = make
|
|
||||||
} else:equals(MAKEFILE_GENERATOR, MINGW) {
|
|
||||||
!equals(QMAKE_HOST.os, Windows): \
|
!equals(QMAKE_HOST.os, Windows): \
|
||||||
QMAKE_MAKE = make
|
QMAKE_MAKE = make
|
||||||
else: \
|
else: \
|
||||||
|
@ -11,9 +11,13 @@
|
|||||||
lex.variable_out = GENERATED_SOURCES
|
lex.variable_out = GENERATED_SOURCES
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isEmpty(QMAKE_LEXFLAGS_MANGLE):QMAKE_LEXFLAGS_MANGLE = -P${QMAKE_FILE_BASE}
|
||||||
|
QMAKE_LEXEXTRAFLAGS = $$QMAKE_LEXFLAGS
|
||||||
|
!yacc_no_name_mangle:QMAKE_LEXEXTRAFLAGS += $$QMAKE_LEXFLAGS_MANGLE
|
||||||
|
|
||||||
contains(QMAKE_LEX, .*flex) {
|
contains(QMAKE_LEX, .*flex) {
|
||||||
# GNU flex, we can use -o outfile
|
# GNU flex, we can use -o outfile
|
||||||
lex.commands = $$QMAKE_LEX $$QMAKE_LEXFLAGS --nounistd -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_IN}
|
lex.commands = $$QMAKE_LEX $$QMAKE_LEXEXTRAFLAGS --nounistd -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_IN}
|
||||||
} else {
|
} else {
|
||||||
# stupid POSIX lex, it only generates a file called lex.yy.c
|
# stupid POSIX lex, it only generates a file called lex.yy.c
|
||||||
# or lex.prefix.c if the -P<prefix> option is active
|
# or lex.prefix.c if the -P<prefix> option is active
|
||||||
|
@ -15,8 +15,7 @@ TEMPLATE = lib
|
|||||||
CONFIG += plugin
|
CONFIG += plugin
|
||||||
|
|
||||||
if(win32|mac):!macx-xcode {
|
if(win32|mac):!macx-xcode {
|
||||||
contains(QT_CONFIG, debug_and_release):CONFIG += debug_and_release
|
contains(QT_CONFIG, debug_and_release): CONFIG += debug_and_release build_all
|
||||||
contains(QT_CONFIG, build_all):CONFIG += build_all
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CONFIG += relative_qt_rpath # Qt's QML plugins should be relocatable
|
CONFIG += relative_qt_rpath # Qt's QML plugins should be relocatable
|
||||||
|
@ -28,7 +28,7 @@ host_build:force_bootstrap {
|
|||||||
}
|
}
|
||||||
target.path = $$[QT_HOST_BINS]
|
target.path = $$[QT_HOST_BINS]
|
||||||
} else {
|
} else {
|
||||||
!build_pass:contains(QT_CONFIG, debug_and_release):contains(QT_CONFIG, build_all): CONFIG += release
|
!build_pass:contains(QT_CONFIG, debug_and_release): CONFIG += release
|
||||||
target.path = $$[QT_INSTALL_BINS]
|
target.path = $$[QT_INSTALL_BINS]
|
||||||
CONFIG += relative_qt_rpath # Qt's tools and apps should be relocatable
|
CONFIG += relative_qt_rpath # Qt's tools and apps should be relocatable
|
||||||
}
|
}
|
||||||
|
@ -71,6 +71,7 @@ CONFIG += \
|
|||||||
create_prl link_prl \
|
create_prl link_prl \
|
||||||
prepare_docs qt_docs_targets \
|
prepare_docs qt_docs_targets \
|
||||||
no_private_qt_headers_warning QTDIR_build \
|
no_private_qt_headers_warning QTDIR_build \
|
||||||
|
qt_example_installs \
|
||||||
# Qt modules get compiled without exceptions enabled by default.
|
# Qt modules get compiled without exceptions enabled by default.
|
||||||
# However, testcases should be still built with exceptions.
|
# However, testcases should be still built with exceptions.
|
||||||
exceptions_off testcase_exceptions
|
exceptions_off testcase_exceptions
|
||||||
|
@ -100,6 +100,20 @@ probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
|
|||||||
!isEmpty(allfiles): warning("remaining files in $$_PRO_FILE_PWD_: $$allfiles")
|
!isEmpty(allfiles): warning("remaining files in $$_PRO_FILE_PWD_: $$allfiles")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
equals(TEMPLATE, app)|equals(TEMPLATE, lib) {
|
||||||
|
!contains(INSTALLS, target) {
|
||||||
|
!install_ok: \
|
||||||
|
error("$$_PRO_FILE_ is lacking an install target.")
|
||||||
|
else: check_examples: \
|
||||||
|
warning("$$_PRO_FILE_ is lacking an install target.")
|
||||||
|
} else: !equals(target.path, $$sources.path) {
|
||||||
|
!install_ok: \
|
||||||
|
error("$$_PRO_FILE_ installs target to unexpected location.")
|
||||||
|
else: check_examples: \
|
||||||
|
warning("$$_PRO_FILE_ installs target to unexpected location.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
!equals(TEMPLATE, subdirs):!compile_examples {
|
!equals(TEMPLATE, subdirs):!compile_examples {
|
||||||
TEMPLATE = aux
|
TEMPLATE = aux
|
||||||
CONFIG -= have_target qt staticlib dll
|
CONFIG -= have_target qt staticlib dll
|
||||||
|
@ -13,12 +13,12 @@ load(qt_build_paths)
|
|||||||
|
|
||||||
TEMPLATE = lib
|
TEMPLATE = lib
|
||||||
CONFIG -= qt
|
CONFIG -= qt
|
||||||
|
QT = # In case qt is re-added.
|
||||||
|
|
||||||
CONFIG -= warning_clean # Don't presume 3rd party code to be clean
|
CONFIG -= warning_clean # Don't presume 3rd party code to be clean
|
||||||
load(qt_common)
|
load(qt_common)
|
||||||
|
|
||||||
contains(QT_CONFIG, debug_and_release): CONFIG += debug_and_release
|
contains(QT_CONFIG, debug_and_release): CONFIG += debug_and_release build_all
|
||||||
contains(QT_CONFIG, build_all): CONFIG += build_all
|
|
||||||
|
|
||||||
DESTDIR = $$MODULE_BASE_OUTDIR/lib
|
DESTDIR = $$MODULE_BASE_OUTDIR/lib
|
||||||
DLLDESTDIR = $$MODULE_BASE_OUTDIR/bin
|
DLLDESTDIR = $$MODULE_BASE_OUTDIR/bin
|
||||||
|
@ -38,7 +38,7 @@ host_build {
|
|||||||
QT += bootstrap-private
|
QT += bootstrap-private
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
!build_pass:contains(QT_CONFIG, build_all): CONFIG += release
|
!build_pass:contains(QT_CONFIG, debug_and_release): CONFIG += release
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,8 +89,7 @@ INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}_private.inclu
|
|||||||
# If Qt was configured with -debug-and-release then build the module the same way
|
# If Qt was configured with -debug-and-release then build the module the same way
|
||||||
# - unless this is a host library
|
# - unless this is a host library
|
||||||
!host_build:if(win32|mac):!macx-xcode {
|
!host_build:if(win32|mac):!macx-xcode {
|
||||||
contains(QT_CONFIG, debug_and_release):CONFIG += debug_and_release
|
contains(QT_CONFIG, debug_and_release): CONFIG += debug_and_release build_all
|
||||||
contains(QT_CONFIG, build_all):CONFIG += build_all
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
|
QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
|
||||||
|
@ -188,6 +188,16 @@ headersclean:!internal_module {
|
|||||||
|
|
||||||
!contains(QT_ARCH, arm):!contains(QT_ARCH, mips): \
|
!contains(QT_ARCH, arm):!contains(QT_ARCH, mips): \
|
||||||
hcleanFLAGS += -Wcast-align
|
hcleanFLAGS += -Wcast-align
|
||||||
|
|
||||||
|
!clang {
|
||||||
|
# options accepted only by GCC
|
||||||
|
|
||||||
|
c++11 {
|
||||||
|
# only enabled for actual c++11 builds due to
|
||||||
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52806
|
||||||
|
hcleanFLAGS += -Wzero-as-null-pointer-constant
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Use strict mode C++11 or C++98, with no GNU extensions (see -pedantic-errors above).
|
# Use strict mode C++11 or C++98, with no GNU extensions (see -pedantic-errors above).
|
||||||
|
@ -24,10 +24,9 @@ win32:CONFIG(shared, static|shared) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tool_plugin {
|
tool_plugin {
|
||||||
!build_pass:contains(QT_CONFIG, build_all): CONFIG += release
|
!build_pass:contains(QT_CONFIG, debug_and_release): CONFIG += release
|
||||||
} else:if(win32|mac):!macx-xcode {
|
} else:if(win32|mac):!macx-xcode {
|
||||||
contains(QT_CONFIG, debug_and_release):CONFIG += debug_and_release
|
contains(QT_CONFIG, debug_and_release): CONFIG += debug_and_release build_all
|
||||||
contains(QT_CONFIG, build_all):CONFIG += build_all
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CONFIG += relative_qt_rpath # Qt's plugins should be relocatable
|
CONFIG += relative_qt_rpath # Qt's plugins should be relocatable
|
||||||
|
@ -7,6 +7,7 @@ include(../common/wince/qmake.conf)
|
|||||||
|
|
||||||
CE_SDK = Toradex_CE800 # replace with actual SDK name
|
CE_SDK = Toradex_CE800 # replace with actual SDK name
|
||||||
CE_ARCH = ARMV7
|
CE_ARCH = ARMV7
|
||||||
|
CE_PLATFORMNAME = Toradex_CE800
|
||||||
QT_CONFIG -= accessibility
|
QT_CONFIG -= accessibility
|
||||||
|
|
||||||
DEFINES += QT_NO_CLIPBOARD QT_NO_ACCESSIBILITY QT_NO_NATIVE_GESTURES QT_NOSTANDARDSHELL_UI_MODEL _CRT_SECURE_NO_DEPRECATE _WIN32_WCE=0x800 $$CE_ARCH _AMRV7_ armv7 _ARM_ UNDER_CE WINCE ARM QT_NO_WINCE_SHELLSDK QT_NO_WINCE_NUIOUSER
|
DEFINES += QT_NO_CLIPBOARD QT_NO_ACCESSIBILITY QT_NO_NATIVE_GESTURES QT_NOSTANDARDSHELL_UI_MODEL _CRT_SECURE_NO_DEPRECATE _WIN32_WCE=0x800 $$CE_ARCH _AMRV7_ armv7 _ARM_ UNDER_CE WINCE ARM QT_NO_WINCE_SHELLSDK QT_NO_WINCE_NUIOUSER
|
||||||
|
@ -700,6 +700,8 @@ void VcprojGenerator::writeSubDirs(QTextStream &t)
|
|||||||
QString slnConf = _slnSolutionConf;
|
QString slnConf = _slnSolutionConf;
|
||||||
if (!project->isEmpty("VCPROJ_ARCH")) {
|
if (!project->isEmpty("VCPROJ_ARCH")) {
|
||||||
slnConf.replace(QLatin1String("|Win32"), "|" + project->first("VCPROJ_ARCH"));
|
slnConf.replace(QLatin1String("|Win32"), "|" + project->first("VCPROJ_ARCH"));
|
||||||
|
} else if (!project->isEmpty("CE_PLATFORMNAME")) {
|
||||||
|
slnConf.replace(QLatin1String("|Win32"), "|" + project->first("CE_PLATFORMNAME"));
|
||||||
} else if (!project->isEmpty("CE_SDK") && !project->isEmpty("CE_ARCH")) {
|
} else if (!project->isEmpty("CE_SDK") && !project->isEmpty("CE_ARCH")) {
|
||||||
QString slnPlatform = QString("|") + project->values("CE_SDK").join(' ') + " (" + project->first("CE_ARCH") + ")";
|
QString slnPlatform = QString("|") + project->values("CE_SDK").join(' ') + " (" + project->first("CE_ARCH") + ")";
|
||||||
slnConf.replace(QLatin1String("|Win32"), slnPlatform);
|
slnConf.replace(QLatin1String("|Win32"), slnPlatform);
|
||||||
@ -717,6 +719,8 @@ void VcprojGenerator::writeSubDirs(QTextStream &t)
|
|||||||
QString xplatform = platform;
|
QString xplatform = platform;
|
||||||
if (!project->isEmpty("VCPROJ_ARCH")) {
|
if (!project->isEmpty("VCPROJ_ARCH")) {
|
||||||
xplatform = project->first("VCPROJ_ARCH").toQString();
|
xplatform = project->first("VCPROJ_ARCH").toQString();
|
||||||
|
} else if (!project->isEmpty("CE_PLATFORMNAME")) {
|
||||||
|
xplatform = project->first("CE_PLATFORMNAME").toQString();
|
||||||
} else if (!project->isEmpty("CE_SDK") && !project->isEmpty("CE_ARCH")) {
|
} else if (!project->isEmpty("CE_SDK") && !project->isEmpty("CE_ARCH")) {
|
||||||
xplatform = project->values("CE_SDK").join(' ') + " (" + project->first("CE_ARCH") + ")";
|
xplatform = project->values("CE_SDK").join(' ') + " (" + project->first("CE_ARCH") + ")";
|
||||||
}
|
}
|
||||||
@ -976,6 +980,8 @@ void VcprojGenerator::initProject()
|
|||||||
vcProject.Keyword = project->first("VCPROJ_KEYWORD").toQString();
|
vcProject.Keyword = project->first("VCPROJ_KEYWORD").toQString();
|
||||||
if (!project->isEmpty("VCPROJ_ARCH")) {
|
if (!project->isEmpty("VCPROJ_ARCH")) {
|
||||||
vcProject.PlatformName = project->first("VCPROJ_ARCH").toQString();
|
vcProject.PlatformName = project->first("VCPROJ_ARCH").toQString();
|
||||||
|
} else if (!project->isEmpty("CE_PLATFORMNAME")) {
|
||||||
|
vcProject.PlatformName = project->first("CE_PLATFORMNAME").toQString();
|
||||||
} else if (project->isHostBuild() || project->isEmpty("CE_SDK") || project->isEmpty("CE_ARCH")) {
|
} else if (project->isHostBuild() || project->isEmpty("CE_SDK") || project->isEmpty("CE_ARCH")) {
|
||||||
vcProject.PlatformName = (is64Bit ? "x64" : "Win32");
|
vcProject.PlatformName = (is64Bit ? "x64" : "Win32");
|
||||||
} else {
|
} else {
|
||||||
@ -1060,6 +1066,8 @@ void VcprojGenerator::initConfiguration()
|
|||||||
conf.ConfigurationName = conf.Name;
|
conf.ConfigurationName = conf.Name;
|
||||||
if (!project->isEmpty("VCPROJ_ARCH")) {
|
if (!project->isEmpty("VCPROJ_ARCH")) {
|
||||||
conf.Name += "|" + project->first("VCPROJ_ARCH");
|
conf.Name += "|" + project->first("VCPROJ_ARCH");
|
||||||
|
} else if (!project->isEmpty("CE_PLATFORMNAME")) {
|
||||||
|
conf.Name += "|" + project->first("CE_PLATFORMNAME");
|
||||||
} else if (project->isHostBuild() || project->isEmpty("CE_SDK") || project->isEmpty("CE_ARCH")) {
|
} else if (project->isHostBuild() || project->isEmpty("CE_SDK") || project->isEmpty("CE_ARCH")) {
|
||||||
conf.Name += (is64Bit ? "|x64" : "|Win32");
|
conf.Name += (is64Bit ? "|x64" : "|Win32");
|
||||||
} else {
|
} else {
|
||||||
|
8
src/3rdparty/freetype/freetype.pro
vendored
8
src/3rdparty/freetype/freetype.pro
vendored
@ -64,10 +64,10 @@ win32 {
|
|||||||
INCLUDEPATH += $$PWD/include
|
INCLUDEPATH += $$PWD/include
|
||||||
|
|
||||||
DEFINES += FT2_BUILD_LIBRARY
|
DEFINES += FT2_BUILD_LIBRARY
|
||||||
contains(QT_CONFIG, system-zlib) {
|
|
||||||
DEFINES += FT_CONFIG_OPTION_SYSTEM_ZLIB
|
DEFINES += FT_CONFIG_OPTION_SYSTEM_ZLIB
|
||||||
include($$PWD/../zlib_dependency.pri)
|
include(../zlib_dependency.pri)
|
||||||
}
|
|
||||||
contains(QT_CONFIG, system-png) {
|
contains(QT_CONFIG, system-png) {
|
||||||
DEFINES += FT_CONFIG_OPTION_USE_PNG
|
DEFINES += FT_CONFIG_OPTION_USE_PNG
|
||||||
include($$PWD/../png_dependency.pri)
|
include($$PWD/../png_dependency.pri)
|
||||||
|
4
src/3rdparty/zlib_dependency.pri
vendored
4
src/3rdparty/zlib_dependency.pri
vendored
@ -7,4 +7,8 @@ contains(QT_CONFIG, system-zlib) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
INCLUDEPATH += $$PWD/zlib
|
INCLUDEPATH += $$PWD/zlib
|
||||||
|
!no_core_dep {
|
||||||
|
CONFIG += qt
|
||||||
|
QT_PRIVATE += core
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,44 @@
|
|||||||
|
From db13a9cf7e41207660f080827983655864df802d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oliver Wolff <oliver.wolff@qt.io>
|
||||||
|
Date: Wed, 11 May 2016 13:51:54 +0200
|
||||||
|
Subject: [PATCH] ANGLE: Disable support for shared handles in warp mode on
|
||||||
|
Windows < 8
|
||||||
|
|
||||||
|
Shared handles are not supported on Windows 7 and below. If the
|
||||||
|
according flag is set CreateTexture2D will fail with E_OUTOFMEMORY. The
|
||||||
|
check already happens with newer ANGLE versions, which we use in 5.7
|
||||||
|
but has to happen here as well. Otherwise Qt applications running on
|
||||||
|
Windows 7 and below will crash at startup.
|
||||||
|
|
||||||
|
Change-Id: I8f539f16dce298611fb1ec7b2f6804d4a04d04e0
|
||||||
|
---
|
||||||
|
.../angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp | 13 +++++++++++++
|
||||||
|
1 file changed, 13 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
|
||||||
|
index 223e2b0..dd554f4 100644
|
||||||
|
--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
|
||||||
|
+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
|
||||||
|
@@ -2370,6 +2370,19 @@ unsigned int Renderer11::getReservedFragmentUniformBuffers() const
|
||||||
|
|
||||||
|
bool Renderer11::getShareHandleSupport() const
|
||||||
|
{
|
||||||
|
+ if (mDriverType == D3D_DRIVER_TYPE_WARP)
|
||||||
|
+ {
|
||||||
|
+#if !defined(ANGLE_ENABLE_WINDOWS_STORE)
|
||||||
|
+ // Warp mode does not support shared handles in Windows versions below Windows 8
|
||||||
|
+ OSVERSIONINFO result = { sizeof(OSVERSIONINFO), 0, 0, 0, 0, {'\0'}};
|
||||||
|
+ if (GetVersionEx(&result) &&
|
||||||
|
+ ((result.dwMajorVersion == 6 && result.dwMinorVersion < 2) || result.dwMajorVersion < 6))
|
||||||
|
+ {
|
||||||
|
+ // WARP on Windows 7 doesn't support shared handles
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+#endif // ANGLE_ENABLE_WINDOWS_STORE
|
||||||
|
+ }
|
||||||
|
// We only currently support share handles with BGRA surfaces, because
|
||||||
|
// chrome needs BGRA. Once chrome fixes this, we should always support them.
|
||||||
|
// PIX doesn't seem to support using share handles, so disable them.
|
||||||
|
--
|
||||||
|
2.7.0.windows.1
|
||||||
|
|
@ -4,7 +4,7 @@ project = QtConcurrent
|
|||||||
description = Qt Concurrent Reference Documentation
|
description = Qt Concurrent Reference Documentation
|
||||||
version = $QT_VERSION
|
version = $QT_VERSION
|
||||||
|
|
||||||
examplesinstallpath = qtbase/qtconcurrent
|
examplesinstallpath = qtconcurrent
|
||||||
|
|
||||||
qhp.projects = QtConcurrent
|
qhp.projects = QtConcurrent
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ project = QtCore
|
|||||||
description = Qt Core Reference Documentation
|
description = Qt Core Reference Documentation
|
||||||
version = $QT_VERSION
|
version = $QT_VERSION
|
||||||
|
|
||||||
examplesinstallpath = qtbase/corelib
|
examplesinstallpath = corelib
|
||||||
|
|
||||||
qhp.projects = QtCore
|
qhp.projects = QtCore
|
||||||
|
|
||||||
|
@ -61,6 +61,9 @@
|
|||||||
#include <QtCore/qfeatures.h>
|
#include <QtCore/qfeatures.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// The QT_SUPPORTS macro is deprecated. Don't use it in new code.
|
||||||
|
// Instead, use #ifdef/ndef QT_NO_feature.
|
||||||
|
// ### Qt6: remove macro
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
# define QT_SUPPORTS(FEATURE) (!defined QT_NO_##FEATURE)
|
# define QT_SUPPORTS(FEATURE) (!defined QT_NO_##FEATURE)
|
||||||
#else
|
#else
|
||||||
|
@ -885,7 +885,9 @@ static bool tryDriveUNCFallback(const QFileSystemEntry &fname, QFileSystemMetaDa
|
|||||||
#if !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
|
#if !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
|
||||||
if (fname.isDriveRoot()) {
|
if (fname.isDriveRoot()) {
|
||||||
// a valid drive ??
|
// a valid drive ??
|
||||||
|
const UINT oldErrorMode = ::SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
|
||||||
DWORD drivesBitmask = ::GetLogicalDrives();
|
DWORD drivesBitmask = ::GetLogicalDrives();
|
||||||
|
::SetErrorMode(oldErrorMode);
|
||||||
int drivebit = 1 << (fname.filePath().at(0).toUpper().unicode() - QLatin1Char('A').unicode());
|
int drivebit = 1 << (fname.filePath().at(0).toUpper().unicode() - QLatin1Char('A').unicode());
|
||||||
if (drivesBitmask & drivebit) {
|
if (drivesBitmask & drivebit) {
|
||||||
fileAttrib = FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_SYSTEM;
|
fileAttrib = FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_SYSTEM;
|
||||||
|
@ -632,7 +632,9 @@ QFileInfoList QFSFileEngine::drives()
|
|||||||
QFileInfoList ret;
|
QFileInfoList ret;
|
||||||
#if !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
|
#if !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
|
||||||
#if defined(Q_OS_WIN32)
|
#if defined(Q_OS_WIN32)
|
||||||
|
const UINT oldErrorMode = ::SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
|
||||||
quint32 driveBits = (quint32) GetLogicalDrives() & 0x3ffffff;
|
quint32 driveBits = (quint32) GetLogicalDrives() & 0x3ffffff;
|
||||||
|
::SetErrorMode(oldErrorMode);
|
||||||
#endif
|
#endif
|
||||||
char driveName[] = "A:/";
|
char driveName[] = "A:/";
|
||||||
|
|
||||||
|
@ -108,25 +108,6 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
static bool isPseudoFs(const QString &mountDir, const QByteArray &type)
|
|
||||||
{
|
|
||||||
if (mountDir.startsWith(QLatin1String("/dev"))
|
|
||||||
|| mountDir.startsWith(QLatin1String("/proc"))
|
|
||||||
|| mountDir.startsWith(QLatin1String("/sys"))
|
|
||||||
|| mountDir.startsWith(QLatin1String("/var/run"))
|
|
||||||
|| mountDir.startsWith(QLatin1String("/var/lock"))) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (type == "tmpfs")
|
|
||||||
return true;
|
|
||||||
#if defined(Q_OS_LINUX)
|
|
||||||
if (type == "rootfs" || type == "rpc_pipefs")
|
|
||||||
return true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
class QStorageIterator
|
class QStorageIterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -164,6 +145,39 @@ private:
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename String>
|
||||||
|
static bool isParentOf(const String &parent, const QString &dirName)
|
||||||
|
{
|
||||||
|
return dirName.startsWith(parent) &&
|
||||||
|
(dirName.size() == parent.size() || dirName.at(parent.size()) == QLatin1Char('/') ||
|
||||||
|
parent.size() == 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool isPseudoFs(const QStorageIterator &it)
|
||||||
|
{
|
||||||
|
QString mountDir = it.rootPath();
|
||||||
|
if (isParentOf(QLatin1String("/dev"), mountDir)
|
||||||
|
|| isParentOf(QLatin1String("/proc"), mountDir)
|
||||||
|
|| isParentOf(QLatin1String("/sys"), mountDir)
|
||||||
|
|| isParentOf(QLatin1String("/var/run"), mountDir)
|
||||||
|
|| isParentOf(QLatin1String("/var/lock"), mountDir)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArray type = it.fileSystemType();
|
||||||
|
if (type == "tmpfs")
|
||||||
|
return false;
|
||||||
|
#if defined(Q_OS_LINUX)
|
||||||
|
if (type == "rootfs" || type == "rpc_pipefs")
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!it.device().startsWith('/'))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(Q_OS_BSD4)
|
#if defined(Q_OS_BSD4)
|
||||||
|
|
||||||
inline QStorageIterator::QStorageIterator()
|
inline QStorageIterator::QStorageIterator()
|
||||||
@ -450,10 +464,8 @@ void QStorageInfoPrivate::initRootPath()
|
|||||||
while (it.next()) {
|
while (it.next()) {
|
||||||
const QString mountDir = it.rootPath();
|
const QString mountDir = it.rootPath();
|
||||||
const QByteArray fsName = it.fileSystemType();
|
const QByteArray fsName = it.fileSystemType();
|
||||||
if (isPseudoFs(mountDir, fsName))
|
|
||||||
continue;
|
|
||||||
// we try to find most suitable entry
|
// we try to find most suitable entry
|
||||||
if (oldRootPath.startsWith(mountDir) && maxLength < mountDir.length()) {
|
if (isParentOf(mountDir, oldRootPath) && maxLength < mountDir.length()) {
|
||||||
maxLength = mountDir.length();
|
maxLength = mountDir.length();
|
||||||
rootPath = mountDir;
|
rootPath = mountDir;
|
||||||
device = it.device();
|
device = it.device();
|
||||||
@ -467,11 +479,14 @@ static inline QString retrieveLabel(const QByteArray &device)
|
|||||||
#ifdef Q_OS_LINUX
|
#ifdef Q_OS_LINUX
|
||||||
static const char pathDiskByLabel[] = "/dev/disk/by-label";
|
static const char pathDiskByLabel[] = "/dev/disk/by-label";
|
||||||
|
|
||||||
|
QFileInfo devinfo(QFile::decodeName(device));
|
||||||
|
QString devicePath = devinfo.canonicalFilePath();
|
||||||
|
|
||||||
QDirIterator it(QLatin1String(pathDiskByLabel), QDir::NoDotAndDotDot);
|
QDirIterator it(QLatin1String(pathDiskByLabel), QDir::NoDotAndDotDot);
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
it.next();
|
it.next();
|
||||||
QFileInfo fileInfo(it.fileInfo());
|
QFileInfo fileInfo(it.fileInfo());
|
||||||
if (fileInfo.isSymLink() && fileInfo.symLinkTarget().toLocal8Bit() == device)
|
if (fileInfo.isSymLink() && fileInfo.symLinkTarget() == devicePath)
|
||||||
return fileInfo.fileName();
|
return fileInfo.fileName();
|
||||||
}
|
}
|
||||||
#elif defined Q_OS_HAIKU
|
#elif defined Q_OS_HAIKU
|
||||||
@ -542,11 +557,10 @@ QList<QStorageInfo> QStorageInfoPrivate::mountedVolumes()
|
|||||||
QList<QStorageInfo> volumes;
|
QList<QStorageInfo> volumes;
|
||||||
|
|
||||||
while (it.next()) {
|
while (it.next()) {
|
||||||
const QString mountDir = it.rootPath();
|
if (isPseudoFs(it))
|
||||||
const QByteArray fsName = it.fileSystemType();
|
|
||||||
if (isPseudoFs(mountDir, fsName))
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
const QString mountDir = it.rootPath();
|
||||||
volumes.append(QStorageInfo(mountDir));
|
volumes.append(QStorageInfo(mountDir));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3690,7 +3690,7 @@ bool QAbstractListModel::dropMimeData(const QMimeData *data, Qt::DropAction acti
|
|||||||
\fn QAbstractItemModel::modelAboutToBeReset()
|
\fn QAbstractItemModel::modelAboutToBeReset()
|
||||||
\since 4.2
|
\since 4.2
|
||||||
|
|
||||||
This signal is emitted when reset() is called, before the model's internal
|
This signal is emitted when beginResetModel() is called, before the model's internal
|
||||||
state (e.g. persistent model indexes) has been invalidated.
|
state (e.g. persistent model indexes) has been invalidated.
|
||||||
|
|
||||||
\sa beginResetModel(), modelReset()
|
\sa beginResetModel(), modelReset()
|
||||||
@ -3700,7 +3700,7 @@ bool QAbstractListModel::dropMimeData(const QMimeData *data, Qt::DropAction acti
|
|||||||
\fn QAbstractItemModel::modelReset()
|
\fn QAbstractItemModel::modelReset()
|
||||||
\since 4.1
|
\since 4.1
|
||||||
|
|
||||||
This signal is emitted when reset() or endResetModel() is called, after the
|
This signal is emitted when endResetModel() is called, after the
|
||||||
model's internal state (e.g. persistent model indexes) has been invalidated.
|
model's internal state (e.g. persistent model indexes) has been invalidated.
|
||||||
|
|
||||||
Note that if a model is reset it should be considered that all information
|
Note that if a model is reset it should be considered that all information
|
||||||
|
@ -945,6 +945,26 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (QMetaType::typeFlags(t) & QMetaType::IsEnumeration) {
|
||||||
|
qlonglong value = qConvertToNumber(d, ok);
|
||||||
|
if (*ok) {
|
||||||
|
switch (QMetaType::sizeOf(t)) {
|
||||||
|
case 1:
|
||||||
|
*static_cast<signed char *>(result) = value;
|
||||||
|
return true;
|
||||||
|
case 2:
|
||||||
|
*static_cast<qint16 *>(result) = value;
|
||||||
|
return true;
|
||||||
|
case 4:
|
||||||
|
*static_cast<qint32 *>(result) = value;
|
||||||
|
return true;
|
||||||
|
case 8:
|
||||||
|
*static_cast<qint64 *>(result) = value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return *ok;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -2819,7 +2839,7 @@ static const quint32 qCanConvertMatrix[QVariant::LastCoreType + 1] =
|
|||||||
|
|
||||||
/*Int*/ 1 << QVariant::UInt | 1 << QVariant::String | 1 << QVariant::Double
|
/*Int*/ 1 << QVariant::UInt | 1 << QVariant::String | 1 << QVariant::Double
|
||||||
| 1 << QVariant::Bool | 1 << QVariant::LongLong | 1 << QVariant::ULongLong
|
| 1 << QVariant::Bool | 1 << QVariant::LongLong | 1 << QVariant::ULongLong
|
||||||
| 1 << QVariant::Char | 1 << QVariant::ByteArray,
|
| 1 << QVariant::Char | 1 << QVariant::ByteArray | 1 << QVariant::Int,
|
||||||
|
|
||||||
/*UInt*/ 1 << QVariant::Int | 1 << QVariant::String | 1 << QVariant::Double
|
/*UInt*/ 1 << QVariant::Int | 1 << QVariant::String | 1 << QVariant::Double
|
||||||
| 1 << QVariant::Bool | 1 << QVariant::LongLong | 1 << QVariant::ULongLong
|
| 1 << QVariant::Bool | 1 << QVariant::LongLong | 1 << QVariant::ULongLong
|
||||||
|
@ -232,8 +232,8 @@ public:
|
|||||||
|
|
||||||
AtomicType _q_value;
|
AtomicType _q_value;
|
||||||
|
|
||||||
Type load() const Q_DECL_NOTHROW { return _q_value; }
|
Type load() const Q_DECL_NOTHROW { return Ops::load(_q_value); }
|
||||||
void store(Type newValue) Q_DECL_NOTHROW { _q_value = newValue; }
|
void store(Type newValue) Q_DECL_NOTHROW { Ops::store(_q_value, newValue); }
|
||||||
operator Type() const Q_DECL_NOTHROW { return loadAcquire(); }
|
operator Type() const Q_DECL_NOTHROW { return loadAcquire(); }
|
||||||
Type operator=(Type newValue) Q_DECL_NOTHROW { storeRelease(newValue); return newValue; }
|
Type operator=(Type newValue) Q_DECL_NOTHROW { storeRelease(newValue); return newValue; }
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ QArrayData *QArrayData::allocate(size_t objectSize, size_t alignment,
|
|||||||
|
|
||||||
// Don't allocate empty headers
|
// Don't allocate empty headers
|
||||||
if (!(options & RawData) && !capacity) {
|
if (!(options & RawData) && !capacity) {
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
if (options & Unsharable)
|
if (options & Unsharable)
|
||||||
return const_cast<QArrayData *>(&qt_array_unsharable_empty);
|
return const_cast<QArrayData *>(&qt_array_unsharable_empty);
|
||||||
#endif
|
#endif
|
||||||
@ -116,7 +116,7 @@ QArrayData *QArrayData::allocate(size_t objectSize, size_t alignment,
|
|||||||
quintptr data = (quintptr(header) + sizeof(QArrayData) + alignment - 1)
|
quintptr data = (quintptr(header) + sizeof(QArrayData) + alignment - 1)
|
||||||
& ~(alignment - 1);
|
& ~(alignment - 1);
|
||||||
|
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
header->ref.atomic.store(bool(!(options & Unsharable)));
|
header->ref.atomic.store(bool(!(options & Unsharable)));
|
||||||
#else
|
#else
|
||||||
header->ref.atomic.store(1);
|
header->ref.atomic.store(1);
|
||||||
@ -138,7 +138,7 @@ void QArrayData::deallocate(QArrayData *data, size_t objectSize,
|
|||||||
&& !(alignment & (alignment - 1)));
|
&& !(alignment & (alignment - 1)));
|
||||||
Q_UNUSED(objectSize) Q_UNUSED(alignment)
|
Q_UNUSED(objectSize) Q_UNUSED(alignment)
|
||||||
|
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
if (data == &qt_array_unsharable_empty)
|
if (data == &qt_array_unsharable_empty)
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
@ -78,7 +78,7 @@ struct Q_CORE_EXPORT QArrayData
|
|||||||
|
|
||||||
enum AllocationOption {
|
enum AllocationOption {
|
||||||
CapacityReserved = 0x1,
|
CapacityReserved = 0x1,
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
Unsharable = 0x2,
|
Unsharable = 0x2,
|
||||||
#endif
|
#endif
|
||||||
RawData = 0x4,
|
RawData = 0x4,
|
||||||
@ -255,7 +255,7 @@ struct QTypedArrayData
|
|||||||
return allocate(/* capacity */ 0);
|
return allocate(/* capacity */ 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
static QTypedArrayData *unsharableEmpty()
|
static QTypedArrayData *unsharableEmpty()
|
||||||
{
|
{
|
||||||
Q_STATIC_ASSERT(sizeof(QTypedArrayData) == sizeof(QArrayData));
|
Q_STATIC_ASSERT(sizeof(QTypedArrayData) == sizeof(QArrayData));
|
||||||
|
@ -133,7 +133,7 @@ public:
|
|||||||
return (!d->isMutable() || d->ref.isShared());
|
return (!d->isMutable() || d->ref.isShared());
|
||||||
}
|
}
|
||||||
|
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
void setSharable(bool sharable)
|
void setSharable(bool sharable)
|
||||||
{
|
{
|
||||||
if (needsDetach()) {
|
if (needsDetach()) {
|
||||||
|
@ -102,7 +102,7 @@ public:
|
|||||||
|
|
||||||
inline void detach() { if (d->ref.load() != 1) detach_helper(); }
|
inline void detach() { if (d->ref.load() != 1) detach_helper(); }
|
||||||
inline bool isDetached() const { return d->ref.load() == 1; }
|
inline bool isDetached() const { return d->ref.load() == 1; }
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
inline void setSharable(bool sharable) { if (!sharable) detach(); d->sharable = sharable; }
|
inline void setSharable(bool sharable) { if (!sharable) detach(); d->sharable = sharable; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -38,9 +38,6 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
// ask for the latest POSIX, just in case
|
|
||||||
#define _POSIX_C_SOURCE 200809L
|
|
||||||
|
|
||||||
#include "qelapsedtimer.h"
|
#include "qelapsedtimer.h"
|
||||||
#if defined(Q_OS_VXWORKS)
|
#if defined(Q_OS_VXWORKS)
|
||||||
#include "qfunctions_vxworks.h"
|
#include "qfunctions_vxworks.h"
|
||||||
|
@ -272,7 +272,7 @@ public:
|
|||||||
|
|
||||||
inline void detach() { if (d->ref.isShared()) detach_helper(); }
|
inline void detach() { if (d->ref.isShared()) detach_helper(); }
|
||||||
inline bool isDetached() const { return !d->ref.isShared(); }
|
inline bool isDetached() const { return !d->ref.isShared(); }
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
inline void setSharable(bool sharable) { if (!sharable) detach(); if (d != &QHashData::shared_null) d->sharable = sharable; }
|
inline void setSharable(bool sharable) { if (!sharable) detach(); if (d != &QHashData::shared_null) d->sharable = sharable; }
|
||||||
#endif
|
#endif
|
||||||
bool isSharedWith(const QHash &other) const { return d == other.d; }
|
bool isSharedWith(const QHash &other) const { return d == other.d; }
|
||||||
@ -1092,9 +1092,6 @@ Q_INLINE_TEMPLATE int QMultiHash<Key, T>::count(const Key &key, const T &value)
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
Q_CORE_EXPORT int qGlobalQHashSeed();
|
|
||||||
Q_CORE_EXPORT void qSetGlobalQHashSeed(int newSeed);
|
|
||||||
|
|
||||||
Q_DECLARE_ASSOCIATIVE_ITERATOR(Hash)
|
Q_DECLARE_ASSOCIATIVE_ITERATOR(Hash)
|
||||||
Q_DECLARE_MUTABLE_ASSOCIATIVE_ITERATOR(Hash)
|
Q_DECLARE_MUTABLE_ASSOCIATIVE_ITERATOR(Hash)
|
||||||
|
|
||||||
|
@ -64,6 +64,9 @@ class QString;
|
|||||||
class QStringRef;
|
class QStringRef;
|
||||||
class QLatin1String;
|
class QLatin1String;
|
||||||
|
|
||||||
|
Q_CORE_EXPORT int qGlobalQHashSeed();
|
||||||
|
Q_CORE_EXPORT void qSetGlobalQHashSeed(int newSeed);
|
||||||
|
|
||||||
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qHashBits(const void *p, size_t size, uint seed = 0) Q_DECL_NOTHROW;
|
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qHashBits(const void *p, size_t size, uint seed = 0) Q_DECL_NOTHROW;
|
||||||
|
|
||||||
Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(char key, uint seed = 0) Q_DECL_NOTHROW { return uint(key) ^ seed; }
|
Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(char key, uint seed = 0) Q_DECL_NOTHROW { return uint(key) ^ seed; }
|
||||||
|
@ -105,7 +105,7 @@ public:
|
|||||||
inline void detach()
|
inline void detach()
|
||||||
{ if (d->ref.isShared()) detach_helper2(this->e); }
|
{ if (d->ref.isShared()) detach_helper2(this->e); }
|
||||||
inline bool isDetached() const { return !d->ref.isShared(); }
|
inline bool isDetached() const { return !d->ref.isShared(); }
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
inline void setSharable(bool sharable) { if (!sharable) detach(); if (d != &QLinkedListData::shared_null) d->sharable = sharable; }
|
inline void setSharable(bool sharable) { if (!sharable) detach(); if (d != &QLinkedListData::shared_null) d->sharable = sharable; }
|
||||||
#endif
|
#endif
|
||||||
inline bool isSharedWith(const QLinkedList<T> &other) const { return d == other.d; }
|
inline bool isSharedWith(const QLinkedList<T> &other) const { return d == other.d; }
|
||||||
|
@ -175,7 +175,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline bool isDetached() const { return !d->ref.isShared(); }
|
inline bool isDetached() const { return !d->ref.isShared(); }
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
inline void setSharable(bool sharable)
|
inline void setSharable(bool sharable)
|
||||||
{
|
{
|
||||||
if (sharable == d->ref.isSharable())
|
if (sharable == d->ref.isSharable())
|
||||||
|
@ -365,7 +365,7 @@ public:
|
|||||||
|
|
||||||
inline void detach() { if (d->ref.isShared()) detach_helper(); }
|
inline void detach() { if (d->ref.isShared()) detach_helper(); }
|
||||||
inline bool isDetached() const { return !d->ref.isShared(); }
|
inline bool isDetached() const { return !d->ref.isShared(); }
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
inline void setSharable(bool sharable)
|
inline void setSharable(bool sharable)
|
||||||
{
|
{
|
||||||
if (sharable == d->ref.isSharable())
|
if (sharable == d->ref.isSharable())
|
||||||
|
@ -53,7 +53,7 @@ class RefCount
|
|||||||
public:
|
public:
|
||||||
inline bool ref() Q_DECL_NOTHROW {
|
inline bool ref() Q_DECL_NOTHROW {
|
||||||
int count = atomic.load();
|
int count = atomic.load();
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
if (count == 0) // !isSharable
|
if (count == 0) // !isSharable
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
@ -64,7 +64,7 @@ public:
|
|||||||
|
|
||||||
inline bool deref() Q_DECL_NOTHROW {
|
inline bool deref() Q_DECL_NOTHROW {
|
||||||
int count = atomic.load();
|
int count = atomic.load();
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
if (count == 0) // !isSharable
|
if (count == 0) // !isSharable
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
@ -73,7 +73,7 @@ public:
|
|||||||
return atomic.deref();
|
return atomic.deref();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
bool setSharable(bool sharable) Q_DECL_NOTHROW
|
bool setSharable(bool sharable) Q_DECL_NOTHROW
|
||||||
{
|
{
|
||||||
Q_ASSERT(!isShared());
|
Q_ASSERT(!isShared());
|
||||||
|
@ -85,7 +85,7 @@ public:
|
|||||||
|
|
||||||
inline void detach() { q_hash.detach(); }
|
inline void detach() { q_hash.detach(); }
|
||||||
inline bool isDetached() const { return q_hash.isDetached(); }
|
inline bool isDetached() const { return q_hash.isDetached(); }
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
inline void setSharable(bool sharable) { q_hash.setSharable(sharable); }
|
inline void setSharable(bool sharable) { q_hash.setSharable(sharable); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -697,7 +697,11 @@ void qDetectCpuFeatures()
|
|||||||
// contains all the features that the code required. Qt 4 ran for years
|
// contains all the features that the code required. Qt 4 ran for years
|
||||||
// like that, so it shouldn't be a problem.
|
// like that, so it shouldn't be a problem.
|
||||||
|
|
||||||
qt_cpu_features.store(minFeature | quint32(QSimdInitialized));
|
qt_cpu_features[0].store(minFeature | quint32(QSimdInitialized));
|
||||||
|
#ifndef Q_ATOMIC_INT64_IS_SUPPORTED
|
||||||
|
qt_cpu_features[1].store(minFeature >> 32);
|
||||||
|
#endif
|
||||||
|
|
||||||
return;
|
return;
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -106,7 +106,7 @@ public:
|
|||||||
|
|
||||||
inline void detach();
|
inline void detach();
|
||||||
inline bool isDetached() const { return !d->ref.isShared(); }
|
inline bool isDetached() const { return !d->ref.isShared(); }
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
inline void setSharable(bool sharable)
|
inline void setSharable(bool sharable)
|
||||||
{
|
{
|
||||||
if (sharable == d->ref.isSharable())
|
if (sharable == d->ref.isSharable())
|
||||||
@ -382,7 +382,7 @@ template <typename T>
|
|||||||
void QVector<T>::detach()
|
void QVector<T>::detach()
|
||||||
{
|
{
|
||||||
if (!isDetached()) {
|
if (!isDetached()) {
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
if (!d->alloc)
|
if (!d->alloc)
|
||||||
d = Data::unsharableEmpty();
|
d = Data::unsharableEmpty();
|
||||||
else
|
else
|
||||||
@ -539,7 +539,7 @@ void QVector<T>::reallocData(const int asize, const int aalloc, QArrayData::Allo
|
|||||||
x = Data::allocate(aalloc, options);
|
x = Data::allocate(aalloc, options);
|
||||||
Q_CHECK_PTR(x);
|
Q_CHECK_PTR(x);
|
||||||
// aalloc is bigger then 0 so it is not [un]sharedEmpty
|
// aalloc is bigger then 0 so it is not [un]sharedEmpty
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
Q_ASSERT(x->ref.isSharable() || options.testFlag(QArrayData::Unsharable));
|
Q_ASSERT(x->ref.isSharable() || options.testFlag(QArrayData::Unsharable));
|
||||||
#endif
|
#endif
|
||||||
Q_ASSERT(!x->ref.isStatic());
|
Q_ASSERT(!x->ref.isStatic());
|
||||||
@ -607,7 +607,7 @@ void QVector<T>::reallocData(const int asize, const int aalloc, QArrayData::Allo
|
|||||||
|
|
||||||
Q_ASSERT(d->data());
|
Q_ASSERT(d->data());
|
||||||
Q_ASSERT(uint(d->size) <= d->alloc);
|
Q_ASSERT(uint(d->size) <= d->alloc);
|
||||||
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
|
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
|
||||||
Q_ASSERT(d != Data::unsharableEmpty());
|
Q_ASSERT(d != Data::unsharableEmpty());
|
||||||
#endif
|
#endif
|
||||||
Q_ASSERT(aalloc ? d != Data::sharedNull() : d == Data::sharedNull());
|
Q_ASSERT(aalloc ? d != Data::sharedNull() : d == Data::sharedNull());
|
||||||
|
@ -155,6 +155,7 @@ else:SOURCES += tools/qelapsedtimer_generic.cpp
|
|||||||
contains(QT_CONFIG, zlib) {
|
contains(QT_CONFIG, zlib) {
|
||||||
include($$PWD/../../3rdparty/zlib.pri)
|
include($$PWD/../../3rdparty/zlib.pri)
|
||||||
} else {
|
} else {
|
||||||
|
CONFIG += no_core_dep
|
||||||
include($$PWD/../../3rdparty/zlib_dependency.pri)
|
include($$PWD/../../3rdparty/zlib_dependency.pri)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ sourcedirs += .. \
|
|||||||
../../../examples/dbus/doc/src
|
../../../examples/dbus/doc/src
|
||||||
excludedirs += ../../../examples/widgets/doc
|
excludedirs += ../../../examples/widgets/doc
|
||||||
|
|
||||||
examplesinstallpath = qtbase/dbus
|
examplesinstallpath = dbus
|
||||||
|
|
||||||
depends += qtdoc qtcore
|
depends += qtdoc qtcore
|
||||||
|
|
||||||
|
@ -259,7 +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);
|
void collectAllObjects(ObjectTreeNode &node, QSet<QObject *> &set);
|
||||||
|
|
||||||
bool isServiceRegisteredByThread(const QString &serviceName);
|
bool isServiceRegisteredByThread(const QString &serviceName);
|
||||||
|
|
||||||
|
@ -1076,17 +1076,18 @@ QDBusConnectionPrivate::~QDBusConnectionPrivate()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QDBusConnectionPrivate::disconnectObjectTree(QDBusConnectionPrivate::ObjectTreeNode &haystack)
|
void QDBusConnectionPrivate::collectAllObjects(QDBusConnectionPrivate::ObjectTreeNode &haystack,
|
||||||
|
QSet<QObject *> &set)
|
||||||
{
|
{
|
||||||
QDBusConnectionPrivate::ObjectTreeNode::DataList::Iterator it = haystack.children.begin();
|
QDBusConnectionPrivate::ObjectTreeNode::DataList::Iterator it = haystack.children.begin();
|
||||||
|
|
||||||
while (it != haystack.children.end()) {
|
while (it != haystack.children.end()) {
|
||||||
disconnectObjectTree(*it);
|
collectAllObjects(*it, set);
|
||||||
it++;
|
it++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (haystack.obj)
|
if (haystack.obj)
|
||||||
haystack.obj->disconnect(this);
|
set.insert(haystack.obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QDBusConnectionPrivate::closeConnection()
|
void QDBusConnectionPrivate::closeConnection()
|
||||||
@ -1115,15 +1116,23 @@ void QDBusConnectionPrivate::closeConnection()
|
|||||||
|
|
||||||
// Disconnect all signals from signal hooks and from the object tree to
|
// Disconnect all signals from signal hooks and from the object tree to
|
||||||
// avoid QObject::destroyed being sent to dbus daemon thread which has
|
// avoid QObject::destroyed being sent to dbus daemon thread which has
|
||||||
// already quit.
|
// already quit. We need to make sure we disconnect exactly once per
|
||||||
SignalHookHash::iterator sit = signalHooks.begin();
|
// object, because if we tried a second time, we might be hitting a
|
||||||
while (sit != signalHooks.end()) {
|
// dangling pointer.
|
||||||
sit.value().obj->disconnect(this);
|
QSet<QObject *> allObjects;
|
||||||
sit++;
|
collectAllObjects(rootNode, allObjects);
|
||||||
|
SignalHookHash::const_iterator sit = signalHooks.constBegin();
|
||||||
|
while (sit != signalHooks.constEnd()) {
|
||||||
|
allObjects.insert(sit.value().obj);
|
||||||
|
++sit;
|
||||||
}
|
}
|
||||||
|
|
||||||
disconnectObjectTree(rootNode);
|
// now disconnect ourselves
|
||||||
rootNode.children.clear(); // free resources
|
QSet<QObject *>::const_iterator oit = allObjects.constBegin();
|
||||||
|
while (oit != allObjects.constEnd()) {
|
||||||
|
(*oit)->disconnect(this);
|
||||||
|
++oit;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QDBusConnectionPrivate::handleDBusDisconnection()
|
void QDBusConnectionPrivate::handleDBusDisconnection()
|
||||||
|
@ -4,7 +4,7 @@ project = QtGui
|
|||||||
description = Qt GUI Reference Documentation
|
description = Qt GUI Reference Documentation
|
||||||
version = $QT_VERSION
|
version = $QT_VERSION
|
||||||
|
|
||||||
examplesinstallpath = qtbase/gui
|
examplesinstallpath = gui
|
||||||
|
|
||||||
qhp.projects = QtGui
|
qhp.projects = QtGui
|
||||||
|
|
||||||
|
@ -6272,7 +6272,7 @@ static void drawTextItemDecoration(QPainter *painter, const QPointF &pos, const
|
|||||||
pen.setColor(uc);
|
pen.setColor(uc);
|
||||||
|
|
||||||
// Adapt wave to underlineOffset or pen width, whatever is larger, to make it work on all platforms
|
// Adapt wave to underlineOffset or pen width, whatever is larger, to make it work on all platforms
|
||||||
const QPixmap wave = generateWavyPixmap(qMin(qMax(underlineOffset, pen.widthF()), maxHeight / 2.), pen);
|
const QPixmap wave = generateWavyPixmap(qMin(qMax(underlineOffset, pen.widthF()), maxHeight / qreal(2.)), pen);
|
||||||
const int descent = qFloor(maxHeight);
|
const int descent = qFloor(maxHeight);
|
||||||
|
|
||||||
painter->setBrushOrigin(painter->brushOrigin().x(), 0);
|
painter->setBrushOrigin(painter->brushOrigin().x(), 0);
|
||||||
@ -6283,7 +6283,7 @@ static void drawTextItemDecoration(QPainter *painter, const QPointF &pos, const
|
|||||||
// the text above it, but limit it to stay within descent.
|
// the text above it, but limit it to stay within descent.
|
||||||
qreal adjustedUnderlineOffset = std::ceil(underlineOffset) + 0.5;
|
qreal adjustedUnderlineOffset = std::ceil(underlineOffset) + 0.5;
|
||||||
if (underlineOffset <= fe->descent().toReal())
|
if (underlineOffset <= fe->descent().toReal())
|
||||||
adjustedUnderlineOffset = qMin(adjustedUnderlineOffset, fe->descent().toReal() - 0.5);
|
adjustedUnderlineOffset = qMin(adjustedUnderlineOffset, fe->descent().toReal() - qreal(0.5));
|
||||||
const qreal underlinePos = pos.y() + adjustedUnderlineOffset;
|
const qreal underlinePos = pos.y() + adjustedUnderlineOffset;
|
||||||
QColor uc = charFormat.underlineColor();
|
QColor uc = charFormat.underlineColor();
|
||||||
if (uc.isValid())
|
if (uc.isValid())
|
||||||
|
@ -232,7 +232,8 @@ void QPlatformTextureList::clear()
|
|||||||
Flushes the given \a region from the specified \a window onto the
|
Flushes the given \a region from the specified \a window onto the
|
||||||
screen.
|
screen.
|
||||||
|
|
||||||
Note that the \a offset parameter is currently unused.
|
The \a offset parameter is relative to the origin of the backing
|
||||||
|
store image.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef QT_NO_OPENGL
|
#ifndef QT_NO_OPENGL
|
||||||
|
@ -428,7 +428,7 @@ void QStroker::processCurrentSubpath()
|
|||||||
bool fwclosed = qt_stroke_side(&fwit, this, false, &fwStartTangent);
|
bool fwclosed = qt_stroke_side(&fwit, this, false, &fwStartTangent);
|
||||||
bool bwclosed = qt_stroke_side(&bwit, this, !fwclosed, &bwStartTangent);
|
bool bwclosed = qt_stroke_side(&bwit, this, !fwclosed, &bwStartTangent);
|
||||||
|
|
||||||
if (!bwclosed)
|
if (!bwclosed && !fwStartTangent.isNull())
|
||||||
joinPoints(m_elements.at(0).x, m_elements.at(0).y, fwStartTangent, m_capStyle);
|
joinPoints(m_elements.at(0).x, m_elements.at(0).y, fwStartTangent, m_capStyle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -480,6 +480,9 @@ QNetworkAccessManager::QNetworkAccessManager(QObject *parent)
|
|||||||
//
|
//
|
||||||
connect(&d->networkConfigurationManager, SIGNAL(onlineStateChanged(bool)),
|
connect(&d->networkConfigurationManager, SIGNAL(onlineStateChanged(bool)),
|
||||||
SLOT(_q_onlineStateChanged(bool)));
|
SLOT(_q_onlineStateChanged(bool)));
|
||||||
|
connect(&d->networkConfigurationManager, SIGNAL(configurationChanged(const QNetworkConfiguration &)),
|
||||||
|
SLOT(_q_configurationChanged(const QNetworkConfiguration &)));
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1570,6 +1573,8 @@ void QNetworkAccessManagerPrivate::createSession(const QNetworkConfiguration &co
|
|||||||
QObject::disconnect(networkSessionStrongRef.data(), SIGNAL(closed()), q, SLOT(_q_networkSessionClosed()));
|
QObject::disconnect(networkSessionStrongRef.data(), SIGNAL(closed()), q, SLOT(_q_networkSessionClosed()));
|
||||||
QObject::disconnect(networkSessionStrongRef.data(), SIGNAL(stateChanged(QNetworkSession::State)),
|
QObject::disconnect(networkSessionStrongRef.data(), SIGNAL(stateChanged(QNetworkSession::State)),
|
||||||
q, SLOT(_q_networkSessionStateChanged(QNetworkSession::State)));
|
q, SLOT(_q_networkSessionStateChanged(QNetworkSession::State)));
|
||||||
|
QObject::disconnect(networkSessionStrongRef.data(), SIGNAL(error(QNetworkSession::SessionError)),
|
||||||
|
q, SLOT(_q_networkSessionFailed(QNetworkSession::SessionError)));
|
||||||
}
|
}
|
||||||
|
|
||||||
//switch to new session (null if config was invalid)
|
//switch to new session (null if config was invalid)
|
||||||
@ -1577,7 +1582,6 @@ void QNetworkAccessManagerPrivate::createSession(const QNetworkConfiguration &co
|
|||||||
networkSessionWeakRef = networkSessionStrongRef.toWeakRef();
|
networkSessionWeakRef = networkSessionStrongRef.toWeakRef();
|
||||||
|
|
||||||
if (!networkSessionStrongRef) {
|
if (!networkSessionStrongRef) {
|
||||||
online = false;
|
|
||||||
|
|
||||||
if (networkAccessible == QNetworkAccessManager::NotAccessible || !online)
|
if (networkAccessible == QNetworkAccessManager::NotAccessible || !online)
|
||||||
emit q->networkAccessibleChanged(QNetworkAccessManager::NotAccessible);
|
emit q->networkAccessibleChanged(QNetworkAccessManager::NotAccessible);
|
||||||
@ -1593,6 +1597,8 @@ void QNetworkAccessManagerPrivate::createSession(const QNetworkConfiguration &co
|
|||||||
QObject::connect(networkSessionStrongRef.data(), SIGNAL(closed()), q, SLOT(_q_networkSessionClosed()), Qt::QueuedConnection);
|
QObject::connect(networkSessionStrongRef.data(), SIGNAL(closed()), q, SLOT(_q_networkSessionClosed()), Qt::QueuedConnection);
|
||||||
QObject::connect(networkSessionStrongRef.data(), SIGNAL(stateChanged(QNetworkSession::State)),
|
QObject::connect(networkSessionStrongRef.data(), SIGNAL(stateChanged(QNetworkSession::State)),
|
||||||
q, SLOT(_q_networkSessionStateChanged(QNetworkSession::State)), Qt::QueuedConnection);
|
q, SLOT(_q_networkSessionStateChanged(QNetworkSession::State)), Qt::QueuedConnection);
|
||||||
|
QObject::connect(networkSessionStrongRef.data(), SIGNAL(error(QNetworkSession::SessionError)),
|
||||||
|
q, SLOT(_q_networkSessionFailed(QNetworkSession::SessionError)));
|
||||||
|
|
||||||
_q_networkSessionStateChanged(networkSessionStrongRef->state());
|
_q_networkSessionStateChanged(networkSessionStrongRef->state());
|
||||||
}
|
}
|
||||||
@ -1609,6 +1615,9 @@ void QNetworkAccessManagerPrivate::_q_networkSessionClosed()
|
|||||||
QObject::disconnect(networkSession.data(), SIGNAL(closed()), q, SLOT(_q_networkSessionClosed()));
|
QObject::disconnect(networkSession.data(), SIGNAL(closed()), q, SLOT(_q_networkSessionClosed()));
|
||||||
QObject::disconnect(networkSession.data(), SIGNAL(stateChanged(QNetworkSession::State)),
|
QObject::disconnect(networkSession.data(), SIGNAL(stateChanged(QNetworkSession::State)),
|
||||||
q, SLOT(_q_networkSessionStateChanged(QNetworkSession::State)));
|
q, SLOT(_q_networkSessionStateChanged(QNetworkSession::State)));
|
||||||
|
QObject::disconnect(networkSessionStrongRef.data(), SIGNAL(error(QNetworkSession::SessionError)),
|
||||||
|
q, SLOT(_q_networkSessionFailed(QNetworkSession::SessionError)));
|
||||||
|
|
||||||
networkSessionStrongRef.clear();
|
networkSessionStrongRef.clear();
|
||||||
networkSessionWeakRef.clear();
|
networkSessionWeakRef.clear();
|
||||||
}
|
}
|
||||||
@ -1617,46 +1626,57 @@ void QNetworkAccessManagerPrivate::_q_networkSessionClosed()
|
|||||||
void QNetworkAccessManagerPrivate::_q_networkSessionStateChanged(QNetworkSession::State state)
|
void QNetworkAccessManagerPrivate::_q_networkSessionStateChanged(QNetworkSession::State state)
|
||||||
{
|
{
|
||||||
Q_Q(QNetworkAccessManager);
|
Q_Q(QNetworkAccessManager);
|
||||||
|
bool reallyOnline = false;
|
||||||
//Do not emit the networkSessionConnected signal here, except for roaming -> connected
|
//Do not emit the networkSessionConnected signal here, except for roaming -> connected
|
||||||
//transition, otherwise it is emitted twice in a row when opening a connection.
|
//transition, otherwise it is emitted twice in a row when opening a connection.
|
||||||
if (state == QNetworkSession::Connected && lastSessionState == QNetworkSession::Roaming)
|
if (state == QNetworkSession::Connected && lastSessionState != QNetworkSession::Roaming)
|
||||||
emit q->networkSessionConnected();
|
emit q->networkSessionConnected();
|
||||||
lastSessionState = state;
|
lastSessionState = state;
|
||||||
|
|
||||||
if (online) {
|
if (online && state == QNetworkSession::Disconnected) {
|
||||||
|
const auto cfgs = networkConfigurationManager.allConfigurations();
|
||||||
|
for (const QNetworkConfiguration &cfg : cfgs) {
|
||||||
|
if (cfg.state().testFlag(QNetworkConfiguration::Active)) {
|
||||||
|
reallyOnline = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (state == QNetworkSession::Connected || state == QNetworkSession::Roaming) {
|
||||||
|
reallyOnline = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!reallyOnline) {
|
||||||
if (state != QNetworkSession::Connected && state != QNetworkSession::Roaming) {
|
if (state != QNetworkSession::Connected && state != QNetworkSession::Roaming) {
|
||||||
online = false;
|
|
||||||
if (networkAccessible != QNetworkAccessManager::NotAccessible) {
|
if (networkAccessible != QNetworkAccessManager::NotAccessible) {
|
||||||
networkAccessible = QNetworkAccessManager::NotAccessible;
|
networkAccessible = QNetworkAccessManager::NotAccessible;
|
||||||
emit q->networkAccessibleChanged(networkAccessible);
|
emit q->networkAccessibleChanged(networkAccessible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (state == QNetworkSession::Connected || state == QNetworkSession::Roaming) {
|
if (defaultAccessControl)
|
||||||
online = true;
|
if (networkAccessible != QNetworkAccessManager::Accessible) {
|
||||||
if (defaultAccessControl)
|
networkAccessible = QNetworkAccessManager::Accessible;
|
||||||
if (networkAccessible != QNetworkAccessManager::Accessible) {
|
emit q->networkAccessibleChanged(networkAccessible);
|
||||||
networkAccessible = QNetworkAccessManager::Accessible;
|
}
|
||||||
emit q->networkAccessibleChanged(networkAccessible);
|
}
|
||||||
}
|
online = reallyOnline;
|
||||||
}
|
if (online && (state != QNetworkSession::Connected && state != QNetworkSession::Roaming)) {
|
||||||
|
_q_networkSessionClosed();
|
||||||
|
createSession(q->configuration());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QNetworkAccessManagerPrivate::_q_onlineStateChanged(bool isOnline)
|
void QNetworkAccessManagerPrivate::_q_onlineStateChanged(bool isOnline)
|
||||||
{
|
{
|
||||||
Q_Q(QNetworkAccessManager);
|
Q_Q(QNetworkAccessManager);
|
||||||
|
|
||||||
// if the user set a config, we only care whether this one is active.
|
// if the user set a config, we only care whether this one is active.
|
||||||
// Otherwise, this QNAM is online if there is an online config.
|
// Otherwise, this QNAM is online if there is an online config.
|
||||||
if (customNetworkConfiguration) {
|
if (customNetworkConfiguration) {
|
||||||
online = (networkConfiguration.state() & QNetworkConfiguration::Active);
|
online = (networkConfiguration.state() & QNetworkConfiguration::Active);
|
||||||
} else {
|
} else {
|
||||||
if (online != isOnline) {
|
if (online != isOnline) {
|
||||||
if (isOnline) {
|
_q_networkSessionClosed();
|
||||||
networkSessionStrongRef.clear();
|
createSession(q->configuration());
|
||||||
networkSessionWeakRef.clear();
|
|
||||||
}
|
|
||||||
online = isOnline;
|
online = isOnline;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1667,11 +1687,6 @@ void QNetworkAccessManagerPrivate::_q_onlineStateChanged(bool isOnline)
|
|||||||
emit q->networkAccessibleChanged(networkAccessible);
|
emit q->networkAccessibleChanged(networkAccessible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (networkConfiguration.state().testFlag(QNetworkConfiguration::Undefined)) {
|
|
||||||
if (networkAccessible != QNetworkAccessManager::UnknownAccessibility) {
|
|
||||||
networkAccessible = QNetworkAccessManager::UnknownAccessibility;
|
|
||||||
emit q->networkAccessibleChanged(networkAccessible);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (networkAccessible != QNetworkAccessManager::NotAccessible) {
|
if (networkAccessible != QNetworkAccessManager::NotAccessible) {
|
||||||
networkAccessible = QNetworkAccessManager::NotAccessible;
|
networkAccessible = QNetworkAccessManager::NotAccessible;
|
||||||
@ -1680,6 +1695,50 @@ void QNetworkAccessManagerPrivate::_q_onlineStateChanged(bool isOnline)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QNetworkAccessManagerPrivate::_q_configurationChanged(const QNetworkConfiguration &configuration)
|
||||||
|
{
|
||||||
|
const QString id = configuration.identifier();
|
||||||
|
if (configuration.state().testFlag(QNetworkConfiguration::Active)) {
|
||||||
|
if (!onlineConfigurations.contains(id)) {
|
||||||
|
|
||||||
|
QSharedPointer<QNetworkSession> session(getNetworkSession());
|
||||||
|
if (session) {
|
||||||
|
if (online && session->configuration().identifier()
|
||||||
|
!= networkConfigurationManager.defaultConfiguration().identifier()) {
|
||||||
|
|
||||||
|
onlineConfigurations.insert(id);
|
||||||
|
//this one disconnected but another one is online,
|
||||||
|
// close and create new session
|
||||||
|
_q_networkSessionClosed();
|
||||||
|
createSession(networkConfigurationManager.defaultConfiguration());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (onlineConfigurations.contains(id)) {
|
||||||
|
//this one is disconnecting
|
||||||
|
onlineConfigurations.remove(id);
|
||||||
|
if (!onlineConfigurations.isEmpty()) {
|
||||||
|
_q_networkSessionClosed();
|
||||||
|
createSession(configuration);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void QNetworkAccessManagerPrivate::_q_networkSessionFailed(QNetworkSession::SessionError)
|
||||||
|
{
|
||||||
|
const auto cfgs = networkConfigurationManager.allConfigurations();
|
||||||
|
for (const QNetworkConfiguration &cfg : cfgs) {
|
||||||
|
if (cfg.state().testFlag(QNetworkConfiguration::Active)) {
|
||||||
|
online = true;
|
||||||
|
_q_networkSessionClosed();
|
||||||
|
createSession(networkConfigurationManager.defaultConfiguration());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif // QT_NO_BEARERMANAGEMENT
|
#endif // QT_NO_BEARERMANAGEMENT
|
||||||
|
|
||||||
QNetworkRequest QNetworkAccessManagerPrivate::prepareMultipart(const QNetworkRequest &request, QHttpMultiPart *multiPart)
|
QNetworkRequest QNetworkAccessManagerPrivate::prepareMultipart(const QNetworkRequest &request, QHttpMultiPart *multiPart)
|
||||||
|
@ -182,6 +182,8 @@ private:
|
|||||||
Q_PRIVATE_SLOT(d_func(), void _q_networkSessionClosed())
|
Q_PRIVATE_SLOT(d_func(), void _q_networkSessionClosed())
|
||||||
Q_PRIVATE_SLOT(d_func(), void _q_networkSessionStateChanged(QNetworkSession::State))
|
Q_PRIVATE_SLOT(d_func(), void _q_networkSessionStateChanged(QNetworkSession::State))
|
||||||
Q_PRIVATE_SLOT(d_func(), void _q_onlineStateChanged(bool))
|
Q_PRIVATE_SLOT(d_func(), void _q_onlineStateChanged(bool))
|
||||||
|
Q_PRIVATE_SLOT(d_func(), void _q_configurationChanged(const QNetworkConfiguration &))
|
||||||
|
Q_PRIVATE_SLOT(d_func(), void _q_networkSessionFailed(QNetworkSession::SessionError))
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -149,6 +149,11 @@ public:
|
|||||||
bool isSeamless);
|
bool isSeamless);
|
||||||
void _q_networkSessionStateChanged(QNetworkSession::State state);
|
void _q_networkSessionStateChanged(QNetworkSession::State state);
|
||||||
void _q_onlineStateChanged(bool isOnline);
|
void _q_onlineStateChanged(bool isOnline);
|
||||||
|
void _q_configurationChanged(const QNetworkConfiguration &configuration);
|
||||||
|
void _q_networkSessionFailed(QNetworkSession::SessionError error);
|
||||||
|
|
||||||
|
QSet<QString> onlineConfigurations;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
QNetworkRequest prepareMultipart(const QNetworkRequest &request, QHttpMultiPart *multiPart);
|
QNetworkRequest prepareMultipart(const QNetworkRequest &request, QHttpMultiPart *multiPart);
|
||||||
|
@ -4,7 +4,7 @@ project = QtNetwork
|
|||||||
description = Qt Network Reference Documentation
|
description = Qt Network Reference Documentation
|
||||||
version = $QT_VERSION
|
version = $QT_VERSION
|
||||||
|
|
||||||
examplesinstallpath = qtbase/network
|
examplesinstallpath = network
|
||||||
|
|
||||||
qhp.projects = QtNetwork
|
qhp.projects = QtNetwork
|
||||||
|
|
||||||
|
@ -199,6 +199,8 @@ bool QAuthenticator::operator==(const QAuthenticator &other) const
|
|||||||
{
|
{
|
||||||
if (d == other.d)
|
if (d == other.d)
|
||||||
return true;
|
return true;
|
||||||
|
if (!d || !other.d)
|
||||||
|
return false;
|
||||||
return d->user == other.d->user
|
return d->user == other.d->user
|
||||||
&& d->password == other.d->password
|
&& d->password == other.d->password
|
||||||
&& d->realm == other.d->realm
|
&& d->realm == other.d->realm
|
||||||
|
@ -464,17 +464,24 @@ void QNativeSocketEngine::close()
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if _MSC_VER >= 1900
|
#if _MSC_VER >= 1900
|
||||||
// To close the connection properly (not with a hard reset) all pending read operation have to
|
if (d->socketType == QAbstractSocket::TcpSocket) {
|
||||||
// be finished or cancelled. The API isn't available on Windows 8.1 though.
|
hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
|
||||||
ComPtr<IStreamSocket3> socket3;
|
HRESULT hr;
|
||||||
hr = d->tcpSocket()->QueryInterface(IID_PPV_ARGS(&socket3));
|
// To close the connection properly (not with a hard reset) all pending read operation have to
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
// be finished or cancelled. The API isn't available on Windows 8.1 though.
|
||||||
|
ComPtr<IStreamSocket3> socket3;
|
||||||
|
hr = d->tcpSocket()->QueryInterface(IID_PPV_ARGS(&socket3));
|
||||||
|
Q_ASSERT_SUCCEEDED(hr);
|
||||||
|
|
||||||
ComPtr<IAsyncAction> action;
|
ComPtr<IAsyncAction> action;
|
||||||
hr = socket3->CancelIOAsync(&action);
|
hr = socket3->CancelIOAsync(&action);
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
Q_ASSERT_SUCCEEDED(hr);
|
||||||
hr = QWinRTFunctions::await(action);
|
hr = QWinRTFunctions::await(action);
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
Q_ASSERT_SUCCEEDED(hr);
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
Q_ASSERT_SUCCEEDED(hr);
|
||||||
|
}
|
||||||
#endif // _MSC_VER >= 1900
|
#endif // _MSC_VER >= 1900
|
||||||
|
|
||||||
if (d->readOp) {
|
if (d->readOp) {
|
||||||
@ -1271,9 +1278,12 @@ void QNativeSocketEnginePrivate::handleConnectionEstablished(IAsyncAction *actio
|
|||||||
|
|
||||||
HRESULT QNativeSocketEnginePrivate::handleReadyRead(IAsyncBufferOperation *asyncInfo, AsyncStatus status)
|
HRESULT QNativeSocketEnginePrivate::handleReadyRead(IAsyncBufferOperation *asyncInfo, AsyncStatus status)
|
||||||
{
|
{
|
||||||
Q_Q(QNativeSocketEngine);
|
if (closingDown || wasDeleted || isDeletingChildren
|
||||||
if (wasDeleted || isDeletingChildren)
|
|| socketState == QAbstractSocket::UnconnectedState) {
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
Q_Q(QNativeSocketEngine);
|
||||||
|
|
||||||
// A read in UnconnectedState will close the socket and return -1 and thus tell the caller,
|
// A read in UnconnectedState will close the socket and return -1 and thus tell the caller,
|
||||||
// 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
|
||||||
|
@ -154,7 +154,7 @@ public:
|
|||||||
qintptr socketDescriptor;
|
qintptr socketDescriptor;
|
||||||
|
|
||||||
bool notifyOnRead, notifyOnWrite, notifyOnException;
|
bool notifyOnRead, notifyOnWrite, notifyOnException;
|
||||||
bool closingDown;
|
QAtomicInt closingDown;
|
||||||
|
|
||||||
enum ErrorString {
|
enum ErrorString {
|
||||||
NonBlockingInitFailedErrorString,
|
NonBlockingInitFailedErrorString,
|
||||||
|
@ -21,7 +21,7 @@ imagedirs += images \
|
|||||||
|
|
||||||
depends += qtdoc qtcore qtgui qtwidgets qmake
|
depends += qtdoc qtcore qtgui qtwidgets qmake
|
||||||
|
|
||||||
examplesinstallpath = qtbase/opengl
|
examplesinstallpath = opengl
|
||||||
|
|
||||||
# The following parameters are for creating a qhp file, the qhelpgenerator
|
# The following parameters are for creating a qhp file, the qhelpgenerator
|
||||||
# program can convert the qhp file into a qch file which can be opened in
|
# program can convert the qhp file into a qch file which can be opened in
|
||||||
|
@ -4,7 +4,7 @@ project = QtPlatformHeaders
|
|||||||
description = Qt Platform Headers Reference Documentation
|
description = Qt Platform Headers Reference Documentation
|
||||||
version = $QT_VERSION
|
version = $QT_VERSION
|
||||||
|
|
||||||
examplesinstallpath = qtbase/qtplatformheaders
|
examplesinstallpath = qtplatformheaders
|
||||||
|
|
||||||
qhp.projects = QtPlatformHeaders
|
qhp.projects = QtPlatformHeaders
|
||||||
|
|
||||||
|
@ -757,7 +757,7 @@ bool QMacPasteboardMimeVCard::canConvert(const QString &mime, QString flav)
|
|||||||
|
|
||||||
QString QMacPasteboardMimeVCard::flavorFor(const QString &mime)
|
QString QMacPasteboardMimeVCard::flavorFor(const QString &mime)
|
||||||
{
|
{
|
||||||
if (mime.startsWith(QLatin1String("text/plain")))
|
if (mime.startsWith(QLatin1String("text/vcard")))
|
||||||
return QLatin1String("public.vcard");
|
return QLatin1String("public.vcard");
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
@ -765,14 +765,14 @@ QString QMacPasteboardMimeVCard::flavorFor(const QString &mime)
|
|||||||
QString QMacPasteboardMimeVCard::mimeFor(QString flav)
|
QString QMacPasteboardMimeVCard::mimeFor(QString flav)
|
||||||
{
|
{
|
||||||
if (flav == QLatin1String("public.vcard"))
|
if (flav == QLatin1String("public.vcard"))
|
||||||
return QLatin1String("text/plain");
|
return QLatin1String("text/vcard");
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant QMacPasteboardMimeVCard::convertToMime(const QString &mime, QList<QByteArray> data, QString)
|
QVariant QMacPasteboardMimeVCard::convertToMime(const QString &mime, QList<QByteArray> data, QString)
|
||||||
{
|
{
|
||||||
QByteArray cards;
|
QByteArray cards;
|
||||||
if (mime == QLatin1String("text/plain")) {
|
if (mime == QLatin1String("text/vcard")) {
|
||||||
for (int i=0; i<data.size(); ++i)
|
for (int i=0; i<data.size(); ++i)
|
||||||
cards += data[i];
|
cards += data[i];
|
||||||
}
|
}
|
||||||
@ -782,7 +782,7 @@ QVariant QMacPasteboardMimeVCard::convertToMime(const QString &mime, QList<QByte
|
|||||||
QList<QByteArray> QMacPasteboardMimeVCard::convertFromMime(const QString &mime, QVariant data, QString)
|
QList<QByteArray> QMacPasteboardMimeVCard::convertFromMime(const QString &mime, QVariant data, QString)
|
||||||
{
|
{
|
||||||
QList<QByteArray> ret;
|
QList<QByteArray> ret;
|
||||||
if (mime == QLatin1String("text/plain"))
|
if (mime == QLatin1String("text/vcard"))
|
||||||
ret.append(data.toString().toUtf8());
|
ret.append(data.toString().toUtf8());
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -65,9 +65,10 @@ const QString MenuBarPath = QLatin1String("/MenuBar");
|
|||||||
A D-Bus connection which is used for both menu and tray icon services.
|
A D-Bus connection which is used for both menu and tray icon services.
|
||||||
Connects to the session bus and registers with the respective watcher services.
|
Connects to the session bus and registers with the respective watcher services.
|
||||||
*/
|
*/
|
||||||
QDBusMenuConnection::QDBusMenuConnection(QObject *parent)
|
QDBusMenuConnection::QDBusMenuConnection(QObject *parent, const QString &serviceName)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, m_connection(QDBusConnection::sessionBus())
|
, m_connection(serviceName.isNull() ? QDBusConnection::sessionBus()
|
||||||
|
: QDBusConnection::connectToBus(QDBusConnection::SessionBus, serviceName))
|
||||||
, m_dbusWatcher(new QDBusServiceWatcher(StatusNotifierWatcherService, m_connection, QDBusServiceWatcher::WatchForRegistration, this))
|
, m_dbusWatcher(new QDBusServiceWatcher(StatusNotifierWatcherService, m_connection, QDBusServiceWatcher::WatchForRegistration, this))
|
||||||
, m_statusNotifierHostRegistered(false)
|
, m_statusNotifierHostRegistered(false)
|
||||||
{
|
{
|
||||||
|
@ -67,7 +67,7 @@ class QDBusMenuConnection : public QObject
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QDBusMenuConnection(QObject *parent = 0);
|
QDBusMenuConnection(QObject *parent = 0, const QString &serviceName = QString());
|
||||||
QDBusConnection connection() const { return m_connection; }
|
QDBusConnection connection() const { return m_connection; }
|
||||||
bool isStatusNotifierHostRegistered() const { return m_statusNotifierHostRegistered; }
|
bool isStatusNotifierHostRegistered() const { return m_statusNotifierHostRegistered; }
|
||||||
#ifndef QT_NO_SYSTEMTRAYICON
|
#ifndef QT_NO_SYSTEMTRAYICON
|
||||||
|
@ -171,7 +171,7 @@ QTemporaryFile *QDBusTrayIcon::tempIcon(const QIcon &icon)
|
|||||||
QDBusMenuConnection * QDBusTrayIcon::dBusConnection()
|
QDBusMenuConnection * QDBusTrayIcon::dBusConnection()
|
||||||
{
|
{
|
||||||
if (!m_dbusConnection) {
|
if (!m_dbusConnection) {
|
||||||
m_dbusConnection = new QDBusMenuConnection(this);
|
m_dbusConnection = new QDBusMenuConnection(this, m_instanceId);
|
||||||
m_notifier = new QXdgNotificationInterface(XdgNotificationService,
|
m_notifier = new QXdgNotificationInterface(XdgNotificationService,
|
||||||
XdgNotificationPath, m_dbusConnection->connection(), this);
|
XdgNotificationPath, m_dbusConnection->connection(), this);
|
||||||
connect(m_notifier, SIGNAL(NotificationClosed(uint,uint)), this, SLOT(notificationClosed(uint,uint)));
|
connect(m_notifier, SIGNAL(NotificationClosed(uint,uint)), this, SLOT(notificationClosed(uint,uint)));
|
||||||
|
@ -51,9 +51,9 @@
|
|||||||
// We mean it.
|
// We mean it.
|
||||||
//
|
//
|
||||||
|
|
||||||
#include <EGL/egl.h>
|
|
||||||
#include <qpa/qplatformoffscreensurface.h>
|
#include <qpa/qplatformoffscreensurface.h>
|
||||||
#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
|
#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
|
||||||
|
#include <EGL/egl.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
|
|
||||||
#include <qpa/qplatformwindow.h>
|
#include <qpa/qplatformwindow.h>
|
||||||
#include <QtGui/qscreen.h>
|
#include <QtGui/qscreen.h>
|
||||||
|
#include <QtGui/qpainter.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@ -90,9 +91,17 @@ void QFbBackingStore::unlock()
|
|||||||
mImageMutex.unlock();
|
mImageMutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QFbBackingStore::beginPaint(const QRegion &)
|
void QFbBackingStore::beginPaint(const QRegion ®ion)
|
||||||
{
|
{
|
||||||
lock();
|
lock();
|
||||||
|
|
||||||
|
if (mImage.hasAlphaChannel()) {
|
||||||
|
QPainter p(&mImage);
|
||||||
|
p.setCompositionMode(QPainter::CompositionMode_Source);
|
||||||
|
const QVector<QRect> rects = region.rects();
|
||||||
|
for (QVector<QRect>::const_iterator it = rects.begin(); it != rects.end(); ++it)
|
||||||
|
p.fillRect(*it, Qt::transparent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QFbBackingStore::endPaint()
|
void QFbBackingStore::endPaint()
|
||||||
|
@ -239,6 +239,7 @@ QRegion QFbScreen::doRedraw()
|
|||||||
|
|
||||||
if (!mCompositePainter)
|
if (!mCompositePainter)
|
||||||
mCompositePainter = new QPainter(mScreenImage);
|
mCompositePainter = new QPainter(mScreenImage);
|
||||||
|
|
||||||
for (int rectIndex = 0; rectIndex < mRepaintRegion.rectCount(); rectIndex++) {
|
for (int rectIndex = 0; rectIndex < mRepaintRegion.rectCount(); rectIndex++) {
|
||||||
QRegion rectRegion = rects[rectIndex];
|
QRegion rectRegion = rects[rectIndex];
|
||||||
|
|
||||||
@ -256,7 +257,8 @@ QRegion QFbScreen::doRedraw()
|
|||||||
foreach (const QRect &rect, intersect.rects()) {
|
foreach (const QRect &rect, intersect.rects()) {
|
||||||
bool firstLayer = true;
|
bool firstLayer = true;
|
||||||
if (layer == -1) {
|
if (layer == -1) {
|
||||||
mCompositePainter->fillRect(rect, Qt::black);
|
mCompositePainter->setCompositionMode(QPainter::CompositionMode_Source);
|
||||||
|
mCompositePainter->fillRect(rect, mScreenImage->hasAlphaChannel() ? Qt::transparent : Qt::black);
|
||||||
firstLayer = false;
|
firstLayer = false;
|
||||||
layer = mWindowStack.size() - 1;
|
layer = mWindowStack.size() - 1;
|
||||||
}
|
}
|
||||||
@ -289,6 +291,7 @@ QRegion QFbScreen::doRedraw()
|
|||||||
|
|
||||||
QRect cursorRect;
|
QRect cursorRect;
|
||||||
if (mCursor && (mCursor->isDirty() || mRepaintRegion.intersects(mCursor->lastPainted()))) {
|
if (mCursor && (mCursor->isDirty() || mRepaintRegion.intersects(mCursor->lastPainted()))) {
|
||||||
|
mCompositePainter->setCompositionMode(QPainter::CompositionMode_SourceOver);
|
||||||
cursorRect = mCursor->drawCursor(*mCompositePainter);
|
cursorRect = mCursor->drawCursor(*mCompositePainter);
|
||||||
touchedRegion += cursorRect;
|
touchedRegion += cursorRect;
|
||||||
}
|
}
|
||||||
|
@ -373,7 +373,7 @@ static QByteArray filenameForCFUrl(CFURLRef url)
|
|||||||
|
|
||||||
if (!CFURLGetFileSystemRepresentation(url, true, buffer, sizeof(buffer))) {
|
if (!CFURLGetFileSystemRepresentation(url, true, buffer, sizeof(buffer))) {
|
||||||
qWarning("QCoreTextFontDatabase::filenameForCFUrl: could not resolve file for URL %s",
|
qWarning("QCoreTextFontDatabase::filenameForCFUrl: could not resolve file for URL %s",
|
||||||
qPrintable(QString::fromCFString(CFURLGetString(url))));
|
url ? qPrintable(QString::fromCFString(CFURLGetString(url))) : "(null)");
|
||||||
} else {
|
} else {
|
||||||
QCFType<CFStringRef> scheme = CFURLCopyScheme(url);
|
QCFType<CFStringRef> scheme = CFURLCopyScheme(url);
|
||||||
if (QString::fromCFString(scheme) == QLatin1String("qrc"))
|
if (QString::fromCFString(scheme) == QLatin1String("qrc"))
|
||||||
|
@ -47,6 +47,49 @@
|
|||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
|
#if defined(Q_OS_OSX) && !QT_OSX_DEPLOYMENT_TARGET_BELOW(__MAC_10_11)
|
||||||
|
#import <AppKit/AppKit.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(Q_OS_IOS) && !QT_IOS_DEPLOYMENT_TARGET_BELOW(__IPHONE_8_2)
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// These are available cross platform, exported as kCTFontWeightXXX from CoreText.framework,
|
||||||
|
// but they are not documented and are not in public headers so are private API and exposed
|
||||||
|
// only through the NSFontWeightXXX and UIFontWeightXXX aliases in AppKit and UIKit (rdar://26109857)
|
||||||
|
#if QT_MAC_DEPLOYMENT_TARGET_BELOW(__MAC_10_11, __IPHONE_8_2)
|
||||||
|
#define kCTFontWeightUltraLight -0.8
|
||||||
|
#define kCTFontWeightThin -0.6
|
||||||
|
#define kCTFontWeightLight -0.4
|
||||||
|
#define kCTFontWeightRegular 0
|
||||||
|
#define kCTFontWeightMedium 0.23
|
||||||
|
#define kCTFontWeightSemibold 0.3
|
||||||
|
#define kCTFontWeightBold 0.4
|
||||||
|
#define kCTFontWeightHeavy 0.56
|
||||||
|
#define kCTFontWeightBlack 0.62
|
||||||
|
#elif defined(Q_OS_OSX)
|
||||||
|
#define kCTFontWeightUltraLight NSFontWeightUltraLight
|
||||||
|
#define kCTFontWeightThin NSFontWeightThin
|
||||||
|
#define kCTFontWeightLight NSFontWeightLight
|
||||||
|
#define kCTFontWeightRegular NSFontWeightRegular
|
||||||
|
#define kCTFontWeightMedium NSFontWeightMedium
|
||||||
|
#define kCTFontWeightSemibold NSFontWeightSemibold
|
||||||
|
#define kCTFontWeightBold NSFontWeightBold
|
||||||
|
#define kCTFontWeightHeavy NSFontWeightHeavy
|
||||||
|
#define kCTFontWeightBlack NSFontWeightBlack
|
||||||
|
#elif defined(Q_OS_IOS)
|
||||||
|
#define kCTFontWeightUltraLight UIFontWeightUltraLight
|
||||||
|
#define kCTFontWeightThin UIFontWeightThin
|
||||||
|
#define kCTFontWeightLight UIFontWeightLight
|
||||||
|
#define kCTFontWeightRegular UIFontWeightRegular
|
||||||
|
#define kCTFontWeightMedium UIFontWeightMedium
|
||||||
|
#define kCTFontWeightSemibold UIFontWeightSemibold
|
||||||
|
#define kCTFontWeightBold UIFontWeightBold
|
||||||
|
#define kCTFontWeightHeavy UIFontWeightHeavy
|
||||||
|
#define kCTFontWeightBlack UIFontWeightBlack
|
||||||
|
#endif
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
static float SYNTHETIC_ITALIC_SKEW = std::tan(14.f * std::acos(0.f) / 90.f);
|
static float SYNTHETIC_ITALIC_SKEW = std::tan(14.f * std::acos(0.f) / 90.f);
|
||||||
@ -69,24 +112,24 @@ bool QCoreTextFontEngine::ct_getSfntTable(void *user_data, uint tag, uchar *buff
|
|||||||
|
|
||||||
QFont::Weight QCoreTextFontEngine::qtWeightFromCFWeight(float value)
|
QFont::Weight QCoreTextFontEngine::qtWeightFromCFWeight(float value)
|
||||||
{
|
{
|
||||||
if (value >= 0.62)
|
if (value >= kCTFontWeightBlack)
|
||||||
return QFont::Black;
|
return QFont::Black;
|
||||||
if (value >= 0.5)
|
if (value >= kCTFontWeightHeavy)
|
||||||
return QFont::ExtraBold;
|
return QFont::ExtraBold;
|
||||||
if (value >= 0.4)
|
if (value >= kCTFontWeightBold)
|
||||||
return QFont::Bold;
|
return QFont::Bold;
|
||||||
if (value >= 0.3)
|
if (value >= kCTFontWeightSemibold)
|
||||||
return QFont::DemiBold;
|
return QFont::DemiBold;
|
||||||
if (value >= 0.2)
|
if (value >= kCTFontWeightMedium)
|
||||||
return QFont::Medium;
|
return QFont::Medium;
|
||||||
if (value == 0.0)
|
if (value == kCTFontWeightRegular)
|
||||||
return QFont::Normal;
|
return QFont::Normal;
|
||||||
if (value <= -0.4)
|
if (value <= kCTFontWeightUltraLight)
|
||||||
return QFont::Light;
|
|
||||||
if (value <= -0.6)
|
|
||||||
return QFont::ExtraLight;
|
|
||||||
if (value <= -0.8)
|
|
||||||
return QFont::Thin;
|
return QFont::Thin;
|
||||||
|
if (value <= kCTFontWeightThin)
|
||||||
|
return QFont::ExtraLight;
|
||||||
|
if (value <= kCTFontWeightLight)
|
||||||
|
return QFont::Light;
|
||||||
return QFont::Normal;
|
return QFont::Normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,7 +41,6 @@
|
|||||||
#include "platformdefs.h"
|
#include "platformdefs.h"
|
||||||
|
|
||||||
#include <QtCore/qmutex.h>
|
#include <QtCore/qmutex.h>
|
||||||
#include <QtCore/private/qmutexpool_p.h>
|
|
||||||
#include <QtCore/qlibrary.h>
|
#include <QtCore/qlibrary.h>
|
||||||
|
|
||||||
#include <QtNetwork/private/qbearerplugin_p.h>
|
#include <QtNetwork/private/qbearerplugin_p.h>
|
||||||
@ -52,42 +51,32 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
static void resolveLibrary()
|
static bool resolveLibraryInternal()
|
||||||
{
|
{
|
||||||
static QBasicAtomicInt triedResolve = Q_BASIC_ATOMIC_INITIALIZER(false);
|
QLibrary wlanapiLib(QLatin1String("wlanapi"));
|
||||||
|
local_WlanOpenHandle = (WlanOpenHandleProto)
|
||||||
if (!triedResolve.loadAcquire()) {
|
wlanapiLib.resolve("WlanOpenHandle");
|
||||||
#ifndef QT_NO_THREAD
|
local_WlanRegisterNotification = (WlanRegisterNotificationProto)
|
||||||
QMutexLocker locker(QMutexPool::globalInstanceGet(&local_WlanOpenHandle));
|
wlanapiLib.resolve("WlanRegisterNotification");
|
||||||
#endif
|
local_WlanEnumInterfaces = (WlanEnumInterfacesProto)
|
||||||
|
wlanapiLib.resolve("WlanEnumInterfaces");
|
||||||
if (!triedResolve.load()) {
|
local_WlanGetAvailableNetworkList = (WlanGetAvailableNetworkListProto)
|
||||||
QLibrary wlanapiLib(QLatin1String("wlanapi"));
|
wlanapiLib.resolve("WlanGetAvailableNetworkList");
|
||||||
local_WlanOpenHandle = (WlanOpenHandleProto)
|
local_WlanQueryInterface = (WlanQueryInterfaceProto)
|
||||||
wlanapiLib.resolve("WlanOpenHandle");
|
wlanapiLib.resolve("WlanQueryInterface");
|
||||||
local_WlanRegisterNotification = (WlanRegisterNotificationProto)
|
local_WlanConnect = (WlanConnectProto)
|
||||||
wlanapiLib.resolve("WlanRegisterNotification");
|
wlanapiLib.resolve("WlanConnect");
|
||||||
local_WlanEnumInterfaces = (WlanEnumInterfacesProto)
|
local_WlanDisconnect = (WlanDisconnectProto)
|
||||||
wlanapiLib.resolve("WlanEnumInterfaces");
|
wlanapiLib.resolve("WlanDisconnect");
|
||||||
local_WlanGetAvailableNetworkList = (WlanGetAvailableNetworkListProto)
|
local_WlanScan = (WlanScanProto)
|
||||||
wlanapiLib.resolve("WlanGetAvailableNetworkList");
|
wlanapiLib.resolve("WlanScan");
|
||||||
local_WlanQueryInterface = (WlanQueryInterfaceProto)
|
local_WlanFreeMemory = (WlanFreeMemoryProto)
|
||||||
wlanapiLib.resolve("WlanQueryInterface");
|
wlanapiLib.resolve("WlanFreeMemory");
|
||||||
local_WlanConnect = (WlanConnectProto)
|
local_WlanCloseHandle = (WlanCloseHandleProto)
|
||||||
wlanapiLib.resolve("WlanConnect");
|
wlanapiLib.resolve("WlanCloseHandle");
|
||||||
local_WlanDisconnect = (WlanDisconnectProto)
|
return true;
|
||||||
wlanapiLib.resolve("WlanDisconnect");
|
|
||||||
local_WlanScan = (WlanScanProto)
|
|
||||||
wlanapiLib.resolve("WlanScan");
|
|
||||||
local_WlanFreeMemory = (WlanFreeMemoryProto)
|
|
||||||
wlanapiLib.resolve("WlanFreeMemory");
|
|
||||||
local_WlanCloseHandle = (WlanCloseHandleProto)
|
|
||||||
wlanapiLib.resolve("WlanCloseHandle");
|
|
||||||
|
|
||||||
triedResolve.storeRelease(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Q_GLOBAL_STATIC_WITH_ARGS(bool, resolveLibrary, (resolveLibraryInternal()))
|
||||||
|
|
||||||
class QNativeWifiEnginePlugin : public QBearerEnginePlugin
|
class QNativeWifiEnginePlugin : public QBearerEnginePlugin
|
||||||
{
|
{
|
||||||
|
@ -60,7 +60,7 @@ QT_BEGIN_NAMESPACE
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
quint8 bWidth; // Width of the image
|
quint8 bWidth; // Width of the image
|
||||||
quint8 bHeight; // Height of the image (times 2)
|
quint8 bHeight; // Height of the image (actual height, not times 2)
|
||||||
quint8 bColorCount; // Number of colors in image (0 if >=8bpp) [ not ture ]
|
quint8 bColorCount; // Number of colors in image (0 if >=8bpp) [ not ture ]
|
||||||
quint8 bReserved; // Reserved
|
quint8 bReserved; // Reserved
|
||||||
quint16 wPlanes; // Color Planes
|
quint16 wPlanes; // Color Planes
|
||||||
@ -687,8 +687,8 @@ bool ICOReader::write(QIODevice *device, const QVector<QImage> &images)
|
|||||||
entries[i].bColorCount = 0;
|
entries[i].bColorCount = 0;
|
||||||
entries[i].bReserved = 0;
|
entries[i].bReserved = 0;
|
||||||
entries[i].wBitCount = nbits;
|
entries[i].wBitCount = nbits;
|
||||||
entries[i].bHeight = image.height();
|
entries[i].bHeight = image.height() < 256 ? image.height() : 0; // 0 means 256
|
||||||
entries[i].bWidth = image.width();
|
entries[i].bWidth = image.width() < 256 ? image.width() : 0; // 0 means 256
|
||||||
entries[i].dwBytesInRes = BMP_INFOHDR_SIZE + (bpl_bmp * image.height())
|
entries[i].dwBytesInRes = BMP_INFOHDR_SIZE + (bpl_bmp * image.height())
|
||||||
+ (maskImage.bytesPerLine() * maskImage.height());
|
+ (maskImage.bytesPerLine() * maskImage.height());
|
||||||
entries[i].wPlanes = 1;
|
entries[i].wPlanes = 1;
|
||||||
@ -702,11 +702,11 @@ bool ICOReader::write(QIODevice *device, const QVector<QImage> &images)
|
|||||||
bmpHeaders[i].biClrImportant = 0;
|
bmpHeaders[i].biClrImportant = 0;
|
||||||
bmpHeaders[i].biClrUsed = entries[i].bColorCount;
|
bmpHeaders[i].biClrUsed = entries[i].bColorCount;
|
||||||
bmpHeaders[i].biCompression = 0;
|
bmpHeaders[i].biCompression = 0;
|
||||||
bmpHeaders[i].biHeight = entries[i].bHeight * 2; // 2 is for the mask
|
bmpHeaders[i].biHeight = entries[i].bHeight ? entries[i].bHeight * 2 : 256 * 2; // 2 is for the mask
|
||||||
bmpHeaders[i].biPlanes = entries[i].wPlanes;
|
bmpHeaders[i].biPlanes = entries[i].wPlanes;
|
||||||
bmpHeaders[i].biSize = BMP_INFOHDR_SIZE;
|
bmpHeaders[i].biSize = BMP_INFOHDR_SIZE;
|
||||||
bmpHeaders[i].biSizeImage = entries[i].dwBytesInRes - BMP_INFOHDR_SIZE;
|
bmpHeaders[i].biSizeImage = entries[i].dwBytesInRes - BMP_INFOHDR_SIZE;
|
||||||
bmpHeaders[i].biWidth = entries[i].bWidth;
|
bmpHeaders[i].biWidth = entries[i].bWidth ? entries[i].bWidth : 256;
|
||||||
bmpHeaders[i].biXPelsPerMeter = 0;
|
bmpHeaders[i].biXPelsPerMeter = 0;
|
||||||
bmpHeaders[i].biYPelsPerMeter = 0;
|
bmpHeaders[i].biYPelsPerMeter = 0;
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ static NSButton *macCreateButton(const char *text, NSView *superview)
|
|||||||
[button setButtonType:NSMomentaryLightButton];
|
[button setButtonType:NSMomentaryLightButton];
|
||||||
[button setBezelStyle:NSRoundedBezelStyle];
|
[button setBezelStyle:NSRoundedBezelStyle];
|
||||||
[button setTitle:(NSString*)(CFStringRef)QCFString(
|
[button setTitle:(NSString*)(CFStringRef)QCFString(
|
||||||
QPlatformTheme::removeMnemonics(QCoreApplication::translate("QDialogButtonBox", text)))];
|
QPlatformTheme::removeMnemonics(QCoreApplication::translate("QPlatformTheme", text)))];
|
||||||
[[button cell] setFont:[NSFont systemFontOfSize:
|
[[button cell] setFont:[NSFont systemFontOfSize:
|
||||||
[NSFont systemFontSizeForControlSize:NSRegularControlSize]]];
|
[NSFont systemFontSizeForControlSize:NSRegularControlSize]]];
|
||||||
[superview addSubview:button];
|
[superview addSubview:button];
|
||||||
|
@ -179,7 +179,9 @@ void QCocoaMenuBar::syncMenu(QPlatformMenu *menu)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nativeItemForMenu(cocoaMenu).hidden = shouldHide;
|
NSMenuItem *nativeMenuItem = nativeItemForMenu(cocoaMenu);
|
||||||
|
nativeMenuItem.title = cocoaMenu->nsMenu().title;
|
||||||
|
nativeMenuItem.hidden = shouldHide;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSMenuItem *QCocoaMenuBar::nativeItemForMenu(QCocoaMenu *menu) const
|
NSMenuItem *QCocoaMenuBar::nativeItemForMenu(QCocoaMenu *menu) const
|
||||||
|
@ -118,6 +118,8 @@ QCocoaMenuItem::~QCocoaMenuItem()
|
|||||||
if (m_merged) {
|
if (m_merged) {
|
||||||
[m_native setHidden:YES];
|
[m_native setHidden:YES];
|
||||||
} else {
|
} else {
|
||||||
|
if (m_menu && m_menu->attachedItem() == m_native)
|
||||||
|
m_menu->setAttachedItem(nil);
|
||||||
[m_native release];
|
[m_native release];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
|
|
||||||
#include <qpa/qplatformwindow.h>
|
#include <qpa/qplatformwindow.h>
|
||||||
#include <QRect>
|
#include <QRect>
|
||||||
|
#include <QPointer>
|
||||||
|
|
||||||
#ifndef QT_NO_OPENGL
|
#ifndef QT_NO_OPENGL
|
||||||
#include "qcocoaglcontext.h"
|
#include "qcocoaglcontext.h"
|
||||||
@ -53,6 +54,32 @@
|
|||||||
|
|
||||||
QT_FORWARD_DECLARE_CLASS(QCocoaWindow)
|
QT_FORWARD_DECLARE_CLASS(QCocoaWindow)
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
class QCocoaWindowPointer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void assign(QCocoaWindow *w);
|
||||||
|
void clear();
|
||||||
|
|
||||||
|
QCocoaWindow *data() const
|
||||||
|
{ return watcher.isNull() ? Q_NULLPTR : window; }
|
||||||
|
bool isNull() const
|
||||||
|
{ return watcher.isNull(); }
|
||||||
|
operator QCocoaWindow*() const
|
||||||
|
{ return data(); }
|
||||||
|
QCocoaWindow *operator->() const
|
||||||
|
{ return data(); }
|
||||||
|
QCocoaWindow &operator*() const
|
||||||
|
{ return *data(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
QPointer<QObject> watcher;
|
||||||
|
QCocoaWindow *window;
|
||||||
|
};
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
@class QT_MANGLE_NAMESPACE(QNSWindowHelper);
|
@class QT_MANGLE_NAMESPACE(QNSWindowHelper);
|
||||||
|
|
||||||
@protocol QNSWindowProtocol
|
@protocol QNSWindowProtocol
|
||||||
@ -69,14 +96,13 @@ typedef NSWindow<QNSWindowProtocol> QCocoaNSWindow;
|
|||||||
@interface QT_MANGLE_NAMESPACE(QNSWindowHelper) : NSObject
|
@interface QT_MANGLE_NAMESPACE(QNSWindowHelper) : NSObject
|
||||||
{
|
{
|
||||||
QCocoaNSWindow *_window;
|
QCocoaNSWindow *_window;
|
||||||
QCocoaWindow *_platformWindow;
|
QCocoaWindowPointer _platformWindow;
|
||||||
BOOL _grabbingMouse;
|
BOOL _grabbingMouse;
|
||||||
BOOL _releaseOnMouseUp;
|
BOOL _releaseOnMouseUp;
|
||||||
QPointer<QObject> _watcher;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@property (nonatomic, readonly) QCocoaNSWindow *window;
|
@property (nonatomic, readonly) QCocoaNSWindow *window;
|
||||||
@property (nonatomic, readonly) QCocoaWindow *platformWindow;
|
@property (nonatomic, readonly) QCocoaWindowPointer platformWindow;
|
||||||
@property (nonatomic) BOOL grabbingMouse;
|
@property (nonatomic) BOOL grabbingMouse;
|
||||||
@property (nonatomic) BOOL releaseOnMouseUp;
|
@property (nonatomic) BOOL releaseOnMouseUp;
|
||||||
|
|
||||||
@ -260,7 +286,7 @@ public: // for QNSView
|
|||||||
NSView *m_contentView;
|
NSView *m_contentView;
|
||||||
QNSView *m_qtView;
|
QNSView *m_qtView;
|
||||||
QCocoaNSWindow *m_nsWindow;
|
QCocoaNSWindow *m_nsWindow;
|
||||||
QCocoaWindow *m_forwardWindow;
|
QCocoaWindowPointer m_forwardWindow;
|
||||||
|
|
||||||
// TODO merge to one variable if possible
|
// TODO merge to one variable if possible
|
||||||
bool m_contentViewIsEmbedded; // true if the m_contentView is actually embedded in a "foreign" NSView hiearchy
|
bool m_contentViewIsEmbedded; // true if the m_contentView is actually embedded in a "foreign" NSView hiearchy
|
||||||
@ -323,9 +349,8 @@ public: // for QNSView
|
|||||||
QHash<quintptr, BorderRange> m_contentBorderAreas; // identifer -> uppper/lower
|
QHash<quintptr, BorderRange> m_contentBorderAreas; // identifer -> uppper/lower
|
||||||
QHash<quintptr, bool> m_enabledContentBorderAreas; // identifer -> enabled state (true/false)
|
QHash<quintptr, bool> m_enabledContentBorderAreas; // identifer -> enabled state (true/false)
|
||||||
|
|
||||||
// This object is tracked by a 'watcher'
|
// This object is tracked by QCocoaWindowPointer,
|
||||||
// object in a window helper, preventing use of dangling
|
// preventing the use of dangling pointers.
|
||||||
// pointers.
|
|
||||||
QObject sentinel;
|
QObject sentinel;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ static bool isMouseEvent(NSEvent *ev)
|
|||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) {
|
if (self) {
|
||||||
_window = window;
|
_window = window;
|
||||||
_platformWindow = platformWindow;
|
_platformWindow.assign(platformWindow);
|
||||||
|
|
||||||
_window.delegate = [[QNSWindowDelegate alloc] initWithQCocoaWindow:_platformWindow];
|
_window.delegate = [[QNSWindowDelegate alloc] initWithQCocoaWindow:_platformWindow];
|
||||||
|
|
||||||
@ -99,7 +99,6 @@ static bool isMouseEvent(NSEvent *ev)
|
|||||||
// make sure that m_nsWindow stays valid until the
|
// make sure that m_nsWindow stays valid until the
|
||||||
// QCocoaWindow is deleted by Qt.
|
// QCocoaWindow is deleted by Qt.
|
||||||
[_window setReleasedWhenClosed:NO];
|
[_window setReleasedWhenClosed:NO];
|
||||||
_watcher = &_platformWindow->sentinel;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
@ -108,19 +107,19 @@ static bool isMouseEvent(NSEvent *ev)
|
|||||||
- (void)handleWindowEvent:(NSEvent *)theEvent
|
- (void)handleWindowEvent:(NSEvent *)theEvent
|
||||||
{
|
{
|
||||||
QCocoaWindow *pw = self.platformWindow;
|
QCocoaWindow *pw = self.platformWindow;
|
||||||
if (_watcher && pw && pw->m_forwardWindow) {
|
if (pw && pw->m_forwardWindow) {
|
||||||
if (theEvent.type == NSLeftMouseUp || theEvent.type == NSLeftMouseDragged) {
|
if (theEvent.type == NSLeftMouseUp || theEvent.type == NSLeftMouseDragged) {
|
||||||
QNSView *forwardView = pw->m_qtView;
|
QNSView *forwardView = pw->m_qtView;
|
||||||
if (theEvent.type == NSLeftMouseUp) {
|
if (theEvent.type == NSLeftMouseUp) {
|
||||||
[forwardView mouseUp:theEvent];
|
[forwardView mouseUp:theEvent];
|
||||||
pw->m_forwardWindow = 0;
|
pw->m_forwardWindow.clear();
|
||||||
} else {
|
} else {
|
||||||
[forwardView mouseDragged:theEvent];
|
[forwardView mouseDragged:theEvent];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pw->m_isNSWindowChild && theEvent.type == NSLeftMouseDown) {
|
if (!pw->m_isNSWindowChild && theEvent.type == NSLeftMouseDown) {
|
||||||
pw->m_forwardWindow = 0;
|
pw->m_forwardWindow.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,7 +146,7 @@ static bool isMouseEvent(NSEvent *ev)
|
|||||||
if (!self.window.delegate)
|
if (!self.window.delegate)
|
||||||
return; // Already detached, pending NSAppKitDefined event
|
return; // Already detached, pending NSAppKitDefined event
|
||||||
|
|
||||||
if (_watcher && pw && pw->frameStrutEventsEnabled() && isMouseEvent(theEvent)) {
|
if (pw && pw->frameStrutEventsEnabled() && isMouseEvent(theEvent)) {
|
||||||
NSPoint loc = [theEvent locationInWindow];
|
NSPoint loc = [theEvent locationInWindow];
|
||||||
NSRect windowFrame = [self.window convertRectFromScreen:[self.window frame]];
|
NSRect windowFrame = [self.window convertRectFromScreen:[self.window frame]];
|
||||||
NSRect contentFrame = [[self.window contentView] frame];
|
NSRect contentFrame = [[self.window contentView] frame];
|
||||||
@ -162,8 +161,7 @@ static bool isMouseEvent(NSEvent *ev)
|
|||||||
|
|
||||||
- (void)detachFromPlatformWindow
|
- (void)detachFromPlatformWindow
|
||||||
{
|
{
|
||||||
_platformWindow = 0;
|
self.platformWindow.clear();
|
||||||
_watcher.clear();
|
|
||||||
[self.window.delegate release];
|
[self.window.delegate release];
|
||||||
self.window.delegate = nil;
|
self.window.delegate = nil;
|
||||||
}
|
}
|
||||||
@ -184,7 +182,7 @@ static bool isMouseEvent(NSEvent *ev)
|
|||||||
- (void)dealloc
|
- (void)dealloc
|
||||||
{
|
{
|
||||||
_window = nil;
|
_window = nil;
|
||||||
_platformWindow = 0;
|
self.platformWindow.clear();
|
||||||
[super dealloc];
|
[super dealloc];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -336,6 +334,18 @@ static bool isMouseEvent(NSEvent *ev)
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
void QCocoaWindowPointer::assign(QCocoaWindow *w)
|
||||||
|
{
|
||||||
|
window = w;
|
||||||
|
watcher = &w->sentinel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QCocoaWindowPointer::clear()
|
||||||
|
{
|
||||||
|
window = Q_NULLPTR;
|
||||||
|
watcher.clear();
|
||||||
|
}
|
||||||
|
|
||||||
const int QCocoaWindow::NoAlertRequest = -1;
|
const int QCocoaWindow::NoAlertRequest = -1;
|
||||||
|
|
||||||
QCocoaWindow::QCocoaWindow(QWindow *tlw)
|
QCocoaWindow::QCocoaWindow(QWindow *tlw)
|
||||||
@ -343,7 +353,6 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw)
|
|||||||
, m_contentView(nil)
|
, m_contentView(nil)
|
||||||
, m_qtView(nil)
|
, m_qtView(nil)
|
||||||
, m_nsWindow(0)
|
, m_nsWindow(0)
|
||||||
, m_forwardWindow(0)
|
|
||||||
, m_contentViewIsEmbedded(false)
|
, m_contentViewIsEmbedded(false)
|
||||||
, m_contentViewIsToBeEmbedded(false)
|
, m_contentViewIsToBeEmbedded(false)
|
||||||
, m_parentCocoaWindow(0)
|
, m_parentCocoaWindow(0)
|
||||||
@ -1138,8 +1147,7 @@ bool QCocoaWindow::setKeyboardGrabEnabled(bool grab)
|
|||||||
|
|
||||||
if (grab && ![m_nsWindow isKeyWindow])
|
if (grab && ![m_nsWindow isKeyWindow])
|
||||||
[m_nsWindow makeKeyWindow];
|
[m_nsWindow makeKeyWindow];
|
||||||
else if (!grab && [m_nsWindow isKeyWindow])
|
|
||||||
[m_nsWindow resignKeyWindow];
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1151,8 +1159,7 @@ bool QCocoaWindow::setMouseGrabEnabled(bool grab)
|
|||||||
|
|
||||||
if (grab && ![m_nsWindow isKeyWindow])
|
if (grab && ![m_nsWindow isKeyWindow])
|
||||||
[m_nsWindow makeKeyWindow];
|
[m_nsWindow makeKeyWindow];
|
||||||
else if (!grab && [m_nsWindow isKeyWindow])
|
|
||||||
[m_nsWindow resignKeyWindow];
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1339,7 +1346,7 @@ void QCocoaWindow::recreateWindow(const QPlatformWindow *parentWindow)
|
|||||||
if (oldParentCocoaWindow) {
|
if (oldParentCocoaWindow) {
|
||||||
if (!m_isNSWindowChild || oldParentCocoaWindow != m_parentCocoaWindow)
|
if (!m_isNSWindowChild || oldParentCocoaWindow != m_parentCocoaWindow)
|
||||||
oldParentCocoaWindow->removeChildWindow(this);
|
oldParentCocoaWindow->removeChildWindow(this);
|
||||||
m_forwardWindow = oldParentCocoaWindow;
|
m_forwardWindow.assign(oldParentCocoaWindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
setNSWindow(m_nsWindow);
|
setNSWindow(m_nsWindow);
|
||||||
|
@ -290,6 +290,7 @@ static bool _q_dontOverrideCtrlLMB = false;
|
|||||||
|
|
||||||
- (void)viewDidMoveToWindow
|
- (void)viewDidMoveToWindow
|
||||||
{
|
{
|
||||||
|
m_backingStore = Q_NULLPTR;
|
||||||
m_isMenuView = [self.window.className isEqualToString:@"NSCarbonMenuWindow"];
|
m_isMenuView = [self.window.className isEqualToString:@"NSCarbonMenuWindow"];
|
||||||
if (self.window) {
|
if (self.window) {
|
||||||
// This is the case of QWidgetAction's generated QWidget inserted in an NSMenu.
|
// This is the case of QWidgetAction's generated QWidget inserted in an NSMenu.
|
||||||
@ -760,7 +761,7 @@ QT_WARNING_POP
|
|||||||
if (theEvent.type == NSLeftMouseDragged || theEvent.type == NSLeftMouseUp)
|
if (theEvent.type == NSLeftMouseDragged || theEvent.type == NSLeftMouseUp)
|
||||||
targetView = m_platformWindow->m_forwardWindow->m_qtView;
|
targetView = m_platformWindow->m_forwardWindow->m_qtView;
|
||||||
else
|
else
|
||||||
m_platformWindow->m_forwardWindow = 0;
|
m_platformWindow->m_forwardWindow.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Popups implicitly grap mouse events; forward to the active popup if there is one
|
// Popups implicitly grap mouse events; forward to the active popup if there is one
|
||||||
|
@ -48,6 +48,7 @@
|
|||||||
#include <QtCore/QJsonArray>
|
#include <QtCore/QJsonArray>
|
||||||
#include <QtCore/QLoggingCategory>
|
#include <QtCore/QLoggingCategory>
|
||||||
#include <QtGui/QPainter>
|
#include <QtGui/QPainter>
|
||||||
|
#include <QtGui/private/qguiapplication_p.h>
|
||||||
|
|
||||||
#include <xf86drm.h>
|
#include <xf86drm.h>
|
||||||
#include <xf86drmMode.h>
|
#include <xf86drmMode.h>
|
||||||
@ -69,13 +70,13 @@ QEglFSKmsGbmCursor::QEglFSKmsGbmCursor(QEglFSKmsGbmScreen *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)
|
||||||
, m_cursorImage(0, 0, 0, 0, 0, 0)
|
, m_cursorImage(0, 0, 0, 0, 0, 0)
|
||||||
, m_visible(true)
|
, m_state(CursorPendingVisible)
|
||||||
{
|
{
|
||||||
QByteArray hideCursorVal = qgetenv("QT_QPA_EGLFS_HIDECURSOR");
|
QByteArray hideCursorVal = qgetenv("QT_QPA_EGLFS_HIDECURSOR");
|
||||||
if (!hideCursorVal.isEmpty())
|
if (!hideCursorVal.isEmpty() && hideCursorVal.toInt()) {
|
||||||
m_visible = hideCursorVal.toInt() == 0;
|
m_state = CursorDisabled;
|
||||||
if (!m_visible)
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
uint64_t width, height;
|
uint64_t width, height;
|
||||||
if ((drmGetCap(m_screen->device()->fd(), DRM_CAP_CURSOR_WIDTH, &width) == 0)
|
if ((drmGetCap(m_screen->device()->fd(), DRM_CAP_CURSOR_WIDTH, &width) == 0)
|
||||||
@ -92,6 +93,12 @@ QEglFSKmsGbmCursor::QEglFSKmsGbmCursor(QEglFSKmsGbmScreen *screen)
|
|||||||
initCursorAtlas();
|
initCursorAtlas();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_deviceListener = new QEglFSKmsGbmCursorDeviceListener(this);
|
||||||
|
connect(QGuiApplicationPrivate::inputDeviceManager(), &QInputDeviceManager::deviceListChanged,
|
||||||
|
m_deviceListener, &QEglFSKmsGbmCursorDeviceListener::onDeviceListChanged);
|
||||||
|
if (!m_deviceListener->hasMouse())
|
||||||
|
m_state = CursorPendingHidden;
|
||||||
|
|
||||||
#ifndef QT_NO_CURSOR
|
#ifndef QT_NO_CURSOR
|
||||||
QCursor cursor(Qt::ArrowCursor);
|
QCursor cursor(Qt::ArrowCursor);
|
||||||
changeCursor(&cursor, 0);
|
changeCursor(&cursor, 0);
|
||||||
@ -101,6 +108,8 @@ QEglFSKmsGbmCursor::QEglFSKmsGbmCursor(QEglFSKmsGbmScreen *screen)
|
|||||||
|
|
||||||
QEglFSKmsGbmCursor::~QEglFSKmsGbmCursor()
|
QEglFSKmsGbmCursor::~QEglFSKmsGbmCursor()
|
||||||
{
|
{
|
||||||
|
delete m_deviceListener;
|
||||||
|
|
||||||
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);
|
||||||
drmModeSetCursor(kmsScreen->device()->fd(), kmsScreen->output().crtc_id, 0, 0, 0);
|
drmModeSetCursor(kmsScreen->device()->fd(), kmsScreen->output().crtc_id, 0, 0, 0);
|
||||||
@ -113,6 +122,31 @@ QEglFSKmsGbmCursor::~QEglFSKmsGbmCursor()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QEglFSKmsGbmCursor::updateMouseStatus()
|
||||||
|
{
|
||||||
|
const bool wasVisible = m_state == CursorVisible;
|
||||||
|
const bool visible = m_deviceListener->hasMouse();
|
||||||
|
if (visible == wasVisible)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_state = visible ? CursorPendingVisible : CursorPendingHidden;
|
||||||
|
|
||||||
|
#ifndef QT_NO_CURSOR
|
||||||
|
changeCursor(nullptr, m_screen->topLevelAt(pos()));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QEglFSKmsGbmCursorDeviceListener::hasMouse() const
|
||||||
|
{
|
||||||
|
return QGuiApplicationPrivate::inputDeviceManager()->deviceCount(QInputDeviceManager::DeviceTypePointer) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QEglFSKmsGbmCursorDeviceListener::onDeviceListChanged(QInputDeviceManager::DeviceType type)
|
||||||
|
{
|
||||||
|
if (type == QInputDeviceManager::DeviceTypePointer)
|
||||||
|
m_cursor->updateMouseStatus();
|
||||||
|
}
|
||||||
|
|
||||||
void QEglFSKmsGbmCursor::pointerEvent(const QMouseEvent &event)
|
void QEglFSKmsGbmCursor::pointerEvent(const QMouseEvent &event)
|
||||||
{
|
{
|
||||||
setPos(event.screenPos().toPoint());
|
setPos(event.screenPos().toPoint());
|
||||||
@ -126,7 +160,15 @@ void QEglFSKmsGbmCursor::changeCursor(QCursor *windowCursor, QWindow *window)
|
|||||||
if (!m_bo)
|
if (!m_bo)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!m_visible)
|
if (m_state == CursorPendingHidden) {
|
||||||
|
m_state = CursorHidden;
|
||||||
|
Q_FOREACH (QPlatformScreen *screen, m_screen->virtualSiblings()) {
|
||||||
|
QEglFSKmsScreen *kmsScreen = static_cast<QEglFSKmsScreen *>(screen);
|
||||||
|
drmModeSetCursor(kmsScreen->device()->fd(), kmsScreen->output().crtc_id, 0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_state == CursorHidden || m_state == CursorDisabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const Qt::CursorShape newShape = windowCursor ? windowCursor->shape() : Qt::ArrowCursor;
|
const Qt::CursorShape newShape = windowCursor ? windowCursor->shape() : Qt::ArrowCursor;
|
||||||
@ -166,6 +208,9 @@ void QEglFSKmsGbmCursor::changeCursor(QCursor *windowCursor, QWindow *window)
|
|||||||
|
|
||||||
uint32_t handle = gbm_bo_get_handle(m_bo).u32;
|
uint32_t handle = gbm_bo_get_handle(m_bo).u32;
|
||||||
|
|
||||||
|
if (m_state == CursorPendingVisible)
|
||||||
|
m_state = CursorVisible;
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
@ -213,7 +258,7 @@ void QEglFSKmsGbmCursor::initCursorAtlas()
|
|||||||
drmModeSetCursor(kmsScreen->device()->fd(), kmsScreen->output().crtc_id, 0, 0, 0);
|
drmModeSetCursor(kmsScreen->device()->fd(), kmsScreen->output().crtc_id, 0, 0, 0);
|
||||||
drmModeMoveCursor(kmsScreen->device()->fd(), kmsScreen->output().crtc_id, 0, 0);
|
drmModeMoveCursor(kmsScreen->device()->fd(), kmsScreen->output().crtc_id, 0, 0);
|
||||||
}
|
}
|
||||||
m_visible = false;
|
m_state = CursorDisabled;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,12 +43,29 @@
|
|||||||
#include <qpa/qplatformcursor.h>
|
#include <qpa/qplatformcursor.h>
|
||||||
#include <QtCore/QList>
|
#include <QtCore/QList>
|
||||||
#include <QtGui/QImage>
|
#include <QtGui/QImage>
|
||||||
|
#include <QtGui/private/qinputdevicemanager_p.h>
|
||||||
|
|
||||||
#include <gbm.h>
|
#include <gbm.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class QEglFSKmsGbmScreen;
|
class QEglFSKmsGbmScreen;
|
||||||
|
class QEglFSKmsGbmCursor;
|
||||||
|
|
||||||
|
class QEglFSKmsGbmCursorDeviceListener : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
QEglFSKmsGbmCursorDeviceListener(QEglFSKmsGbmCursor *cursor) : m_cursor(cursor) { }
|
||||||
|
bool hasMouse() const;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void onDeviceListChanged(QInputDeviceManager::DeviceType type);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QEglFSKmsGbmCursor *m_cursor;
|
||||||
|
};
|
||||||
|
|
||||||
class QEglFSKmsGbmCursor : public QPlatformCursor
|
class QEglFSKmsGbmCursor : public QPlatformCursor
|
||||||
{
|
{
|
||||||
@ -66,15 +83,26 @@ public:
|
|||||||
QPoint pos() const Q_DECL_OVERRIDE;
|
QPoint pos() const Q_DECL_OVERRIDE;
|
||||||
void setPos(const QPoint &pos) Q_DECL_OVERRIDE;
|
void setPos(const QPoint &pos) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
void updateMouseStatus();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void initCursorAtlas();
|
void initCursorAtlas();
|
||||||
|
|
||||||
|
enum CursorState {
|
||||||
|
CursorDisabled,
|
||||||
|
CursorPendingHidden,
|
||||||
|
CursorHidden,
|
||||||
|
CursorPendingVisible,
|
||||||
|
CursorVisible
|
||||||
|
};
|
||||||
|
|
||||||
QEglFSKmsGbmScreen *m_screen;
|
QEglFSKmsGbmScreen *m_screen;
|
||||||
QSize m_cursorSize;
|
QSize m_cursorSize;
|
||||||
gbm_bo *m_bo;
|
gbm_bo *m_bo;
|
||||||
QPoint m_pos;
|
QPoint m_pos;
|
||||||
QPlatformCursorImage m_cursorImage;
|
QPlatformCursorImage m_cursorImage;
|
||||||
bool m_visible;
|
CursorState m_state;
|
||||||
|
QEglFSKmsGbmCursorDeviceListener *m_deviceListener;
|
||||||
|
|
||||||
// cursor atlas information
|
// cursor atlas information
|
||||||
struct CursorAtlas {
|
struct CursorAtlas {
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "qeglfsglobal.h"
|
||||||
#include <QtGui/QSurface>
|
#include <QtGui/QSurface>
|
||||||
#include <QtPlatformSupport/private/qeglconvenience_p.h>
|
#include <QtPlatformSupport/private/qeglconvenience_p.h>
|
||||||
#include <QtPlatformSupport/private/qeglpbuffer_p.h>
|
#include <QtPlatformSupport/private/qeglpbuffer_p.h>
|
||||||
|
@ -40,9 +40,9 @@
|
|||||||
#ifndef QEGLFSCONTEXT_H
|
#ifndef QEGLFSCONTEXT_H
|
||||||
#define QEGLFSCONTEXT_H
|
#define QEGLFSCONTEXT_H
|
||||||
|
|
||||||
|
#include "qeglfsglobal.h"
|
||||||
#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
|
#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
|
||||||
#include <QtCore/QVariant>
|
#include <QtCore/QVariant>
|
||||||
#include "qeglfsglobal.h"
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
@ -51,13 +51,12 @@
|
|||||||
// We mean it.
|
// We mean it.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include "qeglfsglobal.h"
|
||||||
#include <qpa/qplatformintegration.h>
|
#include <qpa/qplatformintegration.h>
|
||||||
#include <qpa/qplatformscreen.h>
|
#include <qpa/qplatformscreen.h>
|
||||||
#include <QtCore/QString>
|
#include <QtCore/QString>
|
||||||
#include <QtGui/QSurfaceFormat>
|
#include <QtGui/QSurfaceFormat>
|
||||||
#include <QtGui/QImage>
|
#include <QtGui/QImage>
|
||||||
#include <EGL/egl.h>
|
|
||||||
#include "qeglfsglobal.h"
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
@ -48,4 +48,17 @@
|
|||||||
#define Q_EGLFS_EXPORT Q_DECL_IMPORT
|
#define Q_EGLFS_EXPORT Q_DECL_IMPORT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <EGL/egl.h>
|
||||||
|
#undef Status
|
||||||
|
#undef None
|
||||||
|
#undef Bool
|
||||||
|
#undef CursorShape
|
||||||
|
#undef KeyPress
|
||||||
|
#undef KeyRelease
|
||||||
|
#undef FocusIn
|
||||||
|
#undef FocusOut
|
||||||
|
#undef FontChange
|
||||||
|
#undef Expose
|
||||||
|
#undef Unsorted
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -40,8 +40,8 @@
|
|||||||
#ifndef QEGLFSHOOKS_H
|
#ifndef QEGLFSHOOKS_H
|
||||||
#define QEGLFSHOOKS_H
|
#define QEGLFSHOOKS_H
|
||||||
|
|
||||||
#include "qeglfsdeviceintegration.h"
|
|
||||||
#include "qeglfsglobal.h"
|
#include "qeglfsglobal.h"
|
||||||
|
#include "qeglfsdeviceintegration.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
@ -86,8 +86,6 @@
|
|||||||
|
|
||||||
#include <QtPlatformHeaders/qeglfsfunctions.h>
|
#include <QtPlatformHeaders/qeglfsfunctions.h>
|
||||||
|
|
||||||
#include <EGL/egl.h>
|
|
||||||
|
|
||||||
static void initResources()
|
static void initResources()
|
||||||
{
|
{
|
||||||
#ifndef QT_NO_CURSOR
|
#ifndef QT_NO_CURSOR
|
||||||
|
@ -40,12 +40,11 @@
|
|||||||
#ifndef QEGLFSINTEGRATION_H
|
#ifndef QEGLFSINTEGRATION_H
|
||||||
#define QEGLFSINTEGRATION_H
|
#define QEGLFSINTEGRATION_H
|
||||||
|
|
||||||
|
#include "qeglfsglobal.h"
|
||||||
#include <QtCore/QVariant>
|
#include <QtCore/QVariant>
|
||||||
#include <qpa/qplatformintegration.h>
|
#include <qpa/qplatformintegration.h>
|
||||||
#include <qpa/qplatformnativeinterface.h>
|
#include <qpa/qplatformnativeinterface.h>
|
||||||
#include <qpa/qplatformscreen.h>
|
#include <qpa/qplatformscreen.h>
|
||||||
#include <EGL/egl.h>
|
|
||||||
#include "qeglfsglobal.h"
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
@ -40,9 +40,8 @@
|
|||||||
#ifndef QEGLFSOFFSCREENWINDOW_H
|
#ifndef QEGLFSOFFSCREENWINDOW_H
|
||||||
#define QEGLFSOFFSCREENWINDOW_H
|
#define QEGLFSOFFSCREENWINDOW_H
|
||||||
|
|
||||||
#include <EGL/egl.h>
|
|
||||||
#include <qpa/qplatformoffscreensurface.h>
|
|
||||||
#include "qeglfsglobal.h"
|
#include "qeglfsglobal.h"
|
||||||
|
#include <qpa/qplatformoffscreensurface.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
@ -42,7 +42,6 @@
|
|||||||
|
|
||||||
#include "qeglfsglobal.h"
|
#include "qeglfsglobal.h"
|
||||||
#include <QtCore/QPointer>
|
#include <QtCore/QPointer>
|
||||||
#include <EGL/egl.h>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
@ -40,13 +40,12 @@
|
|||||||
#ifndef QEGLFSWINDOW_H
|
#ifndef QEGLFSWINDOW_H
|
||||||
#define QEGLFSWINDOW_H
|
#define QEGLFSWINDOW_H
|
||||||
|
|
||||||
|
#include "qeglfsglobal.h"
|
||||||
#include "qeglfsintegration.h"
|
#include "qeglfsintegration.h"
|
||||||
#include "qeglfsscreen.h"
|
#include "qeglfsscreen.h"
|
||||||
#include "qeglfsglobal.h"
|
|
||||||
|
|
||||||
#include <qpa/qplatformwindow.h>
|
#include <qpa/qplatformwindow.h>
|
||||||
#include <QtPlatformSupport/private/qopenglcompositor_p.h>
|
#include <QtPlatformSupport/private/qopenglcompositor_p.h>
|
||||||
#include <EGL/egl.h>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
@ -412,9 +412,12 @@ QRegion QLinuxFbScreen::doRedraw()
|
|||||||
if (!mBlitter)
|
if (!mBlitter)
|
||||||
mBlitter = new QPainter(&mFbScreenImage);
|
mBlitter = new QPainter(&mFbScreenImage);
|
||||||
|
|
||||||
QVector<QRect> rects = touched.rects();
|
const QVector<QRect> rects = touched.rects();
|
||||||
for (int i = 0; i < rects.size(); i++)
|
mBlitter->setCompositionMode(QPainter::CompositionMode_Source);
|
||||||
|
|
||||||
|
for (int i = 0; i < rects.size(); ++i)
|
||||||
mBlitter->drawImage(rects[i], *mScreenImage, rects[i]);
|
mBlitter->drawImage(rects[i], *mScreenImage, rects[i]);
|
||||||
|
|
||||||
return touched;
|
return touched;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -504,7 +504,8 @@ HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::accHitTest(long xLeft, long yT
|
|||||||
if (!accessible)
|
if (!accessible)
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
|
||||||
const QPoint pos = QHighDpi::fromNativeLocalPosition(QPoint(xLeft, yTop), accessible->window());
|
const QPoint pos = QHighDpi::fromNativeLocalPosition(QPoint(xLeft, yTop),
|
||||||
|
QWindowsAccessibility::windowHelper(accessible));
|
||||||
QAccessibleInterface *child = accessible->childAt(pos.x(), pos.y());
|
QAccessibleInterface *child = accessible->childAt(pos.x(), pos.y());
|
||||||
if (child == 0) {
|
if (child == 0) {
|
||||||
// no child found, return this item if it contains the coordinates
|
// no child found, return this item if it contains the coordinates
|
||||||
@ -547,7 +548,8 @@ HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::accLocation(long *pxLeft, long
|
|||||||
QAccessibleInterface *acc = childPointer(accessible, varID);
|
QAccessibleInterface *acc = childPointer(accessible, varID);
|
||||||
if (!acc || !acc->isValid())
|
if (!acc || !acc->isValid())
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
const QRect rect = QHighDpi::toNativePixels(acc->rect(), accessible->window());
|
const QRect rect = QHighDpi::toNativePixels(acc->rect(),
|
||||||
|
QWindowsAccessibility::windowHelper(accessible));
|
||||||
|
|
||||||
*pxLeft = rect.x();
|
*pxLeft = rect.x();
|
||||||
*pyTop = rect.y();
|
*pyTop = rect.y();
|
||||||
|
@ -90,6 +90,18 @@
|
|||||||
"features": [
|
"features": [
|
||||||
"disable_angle"
|
"disable_angle"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 8,
|
||||||
|
"description": "Standard VGA: Insufficent support for OpenGL, D3D9 and D3D11",
|
||||||
|
"vendor_id": "0x0000",
|
||||||
|
"device_id": ["0x0000"],
|
||||||
|
"os": {
|
||||||
|
"type": "win"
|
||||||
|
},
|
||||||
|
"features": [
|
||||||
|
"disable_desktopgl", "disable_d3d11", "disable_d3d9"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -146,7 +146,8 @@ struct QWindowsIntegrationPrivate
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef QT_NO_OPENGL
|
#ifndef QT_NO_OPENGL
|
||||||
QSharedPointer<QWindowsStaticOpenGLContext> m_staticOpenGLContext;
|
QMutex m_staticContextLock;
|
||||||
|
QScopedPointer<QWindowsStaticOpenGLContext> m_staticOpenGLContext;
|
||||||
#endif // QT_NO_OPENGL
|
#endif // QT_NO_OPENGL
|
||||||
QScopedPointer<QPlatformInputContext> m_inputContext;
|
QScopedPointer<QPlatformInputContext> m_inputContext;
|
||||||
#ifndef QT_NO_ACCESSIBILITY
|
#ifndef QT_NO_ACCESSIBILITY
|
||||||
@ -464,8 +465,9 @@ QWindowsStaticOpenGLContext *QWindowsIntegration::staticOpenGLContext()
|
|||||||
if (!integration)
|
if (!integration)
|
||||||
return 0;
|
return 0;
|
||||||
QWindowsIntegrationPrivate *d = integration->d.data();
|
QWindowsIntegrationPrivate *d = integration->d.data();
|
||||||
|
QMutexLocker lock(&d->m_staticContextLock);
|
||||||
if (d->m_staticOpenGLContext.isNull())
|
if (d->m_staticOpenGLContext.isNull())
|
||||||
d->m_staticOpenGLContext = QSharedPointer<QWindowsStaticOpenGLContext>(QWindowsStaticOpenGLContext::create());
|
d->m_staticOpenGLContext.reset(QWindowsStaticOpenGLContext::create());
|
||||||
return d->m_staticOpenGLContext.data();
|
return d->m_staticOpenGLContext.data();
|
||||||
}
|
}
|
||||||
#endif // !QT_NO_OPENGL
|
#endif // !QT_NO_OPENGL
|
||||||
|
@ -126,6 +126,7 @@ contains(QT_CONFIG, freetype) {
|
|||||||
SOURCES += \
|
SOURCES += \
|
||||||
$$PWD/qwindowsfontdatabase_ft.cpp
|
$$PWD/qwindowsfontdatabase_ft.cpp
|
||||||
} else:contains(QT_CONFIG, system-freetype) {
|
} else:contains(QT_CONFIG, system-freetype) {
|
||||||
|
CONFIG += qpa/basicunixfontdatabase
|
||||||
include($$QT_SOURCE_TREE/src/platformsupport/fontdatabases/basic/basic.pri)
|
include($$QT_SOURCE_TREE/src/platformsupport/fontdatabases/basic/basic.pri)
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
$$PWD/qwindowsfontdatabase_ft.h
|
$$PWD/qwindowsfontdatabase_ft.h
|
||||||
|
@ -110,9 +110,6 @@ QWinRTWindow::QWinRTWindow(QWindow *window)
|
|||||||
d->surface = EGL_NO_SURFACE;
|
d->surface = EGL_NO_SURFACE;
|
||||||
d->display = EGL_NO_DISPLAY;
|
d->display = EGL_NO_DISPLAY;
|
||||||
d->screen = static_cast<QWinRTScreen *>(screen());
|
d->screen = static_cast<QWinRTScreen *>(screen());
|
||||||
setWindowFlags(window->flags());
|
|
||||||
setWindowState(window->windowState());
|
|
||||||
setWindowTitle(window->title());
|
|
||||||
handleContentOrientationChange(window->contentOrientation());
|
handleContentOrientationChange(window->contentOrientation());
|
||||||
|
|
||||||
d->surfaceFormat.setAlphaBufferSize(0);
|
d->surfaceFormat.setAlphaBufferSize(0);
|
||||||
@ -160,6 +157,10 @@ QWinRTWindow::QWinRTWindow(QWindow *window)
|
|||||||
});
|
});
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
Q_ASSERT_SUCCEEDED(hr);
|
||||||
|
|
||||||
|
setWindowFlags(window->flags());
|
||||||
|
setWindowState(window->windowState());
|
||||||
|
setWindowTitle(window->title());
|
||||||
|
|
||||||
setGeometry(window->geometry());
|
setGeometry(window->geometry());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,6 +56,7 @@
|
|||||||
|
|
||||||
#include <qpa/qwindowsysteminterface.h>
|
#include <qpa/qwindowsysteminterface.h>
|
||||||
|
|
||||||
|
#include <private/qguiapplication_p.h>
|
||||||
#include <private/qshapedpixmapdndwindow_p.h>
|
#include <private/qshapedpixmapdndwindow_p.h>
|
||||||
#include <private/qsimpledrag_p.h>
|
#include <private/qsimpledrag_p.h>
|
||||||
#include <private/qhighdpiscaling_p.h>
|
#include <private/qhighdpiscaling_p.h>
|
||||||
@ -176,6 +177,17 @@ QMimeData *QXcbDrag::platformDropData()
|
|||||||
return dropData;
|
return dropData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool QXcbDrag::eventFilter(QObject *o, QEvent *e)
|
||||||
|
{
|
||||||
|
/* We are setting a mouse grab on the QShapedPixmapWindow in order not to
|
||||||
|
* lose the grab when the virtual desktop changes, but
|
||||||
|
* QBasicDrag::eventFilter() expects the events to be coming from the
|
||||||
|
* window where the drag was started. */
|
||||||
|
if (initiatorWindow && o == shapedPixmapWindow())
|
||||||
|
o = initiatorWindow.data();
|
||||||
|
return QBasicDrag::eventFilter(o, e);
|
||||||
|
}
|
||||||
|
|
||||||
void QXcbDrag::startDrag()
|
void QXcbDrag::startDrag()
|
||||||
{
|
{
|
||||||
// #fixme enableEventFilter();
|
// #fixme enableEventFilter();
|
||||||
@ -200,6 +212,7 @@ void QXcbDrag::startDrag()
|
|||||||
|
|
||||||
setUseCompositing(current_virtual_desktop->compositingActive());
|
setUseCompositing(current_virtual_desktop->compositingActive());
|
||||||
setScreen(current_virtual_desktop->screens().constFirst()->screen());
|
setScreen(current_virtual_desktop->screens().constFirst()->screen());
|
||||||
|
initiatorWindow = QGuiApplicationPrivate::currentMouseWindow;
|
||||||
QBasicDrag::startDrag();
|
QBasicDrag::startDrag();
|
||||||
if (connection()->mouseGrabber() == Q_NULLPTR)
|
if (connection()->mouseGrabber() == Q_NULLPTR)
|
||||||
shapedPixmapWindow()->setMouseGrabEnabled(true);
|
shapedPixmapWindow()->setMouseGrabEnabled(true);
|
||||||
@ -208,6 +221,7 @@ void QXcbDrag::startDrag()
|
|||||||
void QXcbDrag::endDrag()
|
void QXcbDrag::endDrag()
|
||||||
{
|
{
|
||||||
QBasicDrag::endDrag();
|
QBasicDrag::endDrag();
|
||||||
|
initiatorWindow.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
static xcb_translate_coordinates_reply_t *
|
static xcb_translate_coordinates_reply_t *
|
||||||
@ -821,7 +835,7 @@ void QXcbDrag::handle_xdnd_status(const xcb_client_message_event_t *event)
|
|||||||
DEBUG("xdndHandleStatus");
|
DEBUG("xdndHandleStatus");
|
||||||
waiting_for_status = false;
|
waiting_for_status = false;
|
||||||
// ignore late status messages
|
// ignore late status messages
|
||||||
if (event->data.data32[0] && event->data.data32[0] != current_proxy_target)
|
if (event->data.data32[0] && event->data.data32[0] != current_target)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const bool dropPossible = event->data.data32[1];
|
const bool dropPossible = event->data.data32[1];
|
||||||
|
@ -75,6 +75,7 @@ public:
|
|||||||
~QXcbDrag();
|
~QXcbDrag();
|
||||||
|
|
||||||
virtual QMimeData *platformDropData() Q_DECL_OVERRIDE;
|
virtual QMimeData *platformDropData() Q_DECL_OVERRIDE;
|
||||||
|
bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
void startDrag() Q_DECL_OVERRIDE;
|
void startDrag() Q_DECL_OVERRIDE;
|
||||||
void cancel() Q_DECL_OVERRIDE;
|
void cancel() Q_DECL_OVERRIDE;
|
||||||
@ -112,6 +113,7 @@ private:
|
|||||||
Qt::DropAction toDropAction(xcb_atom_t atom) const;
|
Qt::DropAction toDropAction(xcb_atom_t atom) const;
|
||||||
xcb_atom_t toXdndAction(Qt::DropAction a) const;
|
xcb_atom_t toXdndAction(Qt::DropAction a) const;
|
||||||
|
|
||||||
|
QPointer<QWindow> initiatorWindow;
|
||||||
QPointer<QWindow> currentWindow;
|
QPointer<QWindow> currentWindow;
|
||||||
QPoint currentPosition;
|
QPoint currentPosition;
|
||||||
|
|
||||||
|
@ -117,17 +117,18 @@ bool QXcbMime::mimeDataForAtom(QXcbConnection *connection, xcb_atom_t a, QMimeDa
|
|||||||
QString atomName = mimeAtomToString(connection, a);
|
QString atomName = mimeAtomToString(connection, a);
|
||||||
if (QInternalMimeData::hasFormatHelper(atomName, mimeData)) {
|
if (QInternalMimeData::hasFormatHelper(atomName, mimeData)) {
|
||||||
*data = QInternalMimeData::renderDataHelper(atomName, mimeData);
|
*data = QInternalMimeData::renderDataHelper(atomName, mimeData);
|
||||||
if (atomName == QLatin1String("application/x-color"))
|
// mimeAtomToString() converts "text/x-moz-url" to "text/uri-list",
|
||||||
|
// so QXcbConnection::atomName() has to be used.
|
||||||
|
if (atomName == QLatin1String("text/uri-list")
|
||||||
|
&& connection->atomName(a) == "text/x-moz-url") {
|
||||||
|
const QByteArray uri = data->split('\n').first();
|
||||||
|
QString mozUri = QString::fromLatin1(uri, uri.size());
|
||||||
|
mozUri += QLatin1Char('\n');
|
||||||
|
*data = QByteArray(reinterpret_cast<const char *>(mozUri.utf16()),
|
||||||
|
mozUri.length() * 2);
|
||||||
|
} else if (atomName == QLatin1String("application/x-color"))
|
||||||
*dataFormat = 16;
|
*dataFormat = 16;
|
||||||
ret = true;
|
ret = true;
|
||||||
} else if (atomName == QLatin1String("text/x-moz-url") &&
|
|
||||||
QInternalMimeData::hasFormatHelper(QLatin1String("text/uri-list"), mimeData)) {
|
|
||||||
QByteArray uri = QInternalMimeData::renderDataHelper(
|
|
||||||
QLatin1String("text/uri-list"), mimeData).split('\n').first();
|
|
||||||
QString mozUri = QString::fromLatin1(uri, uri.size());
|
|
||||||
mozUri += QLatin1Char('\n');
|
|
||||||
*data = QByteArray(reinterpret_cast<const char *>(mozUri.utf16()), mozUri.length() * 2);
|
|
||||||
ret = true;
|
|
||||||
} else if ((a == XCB_ATOM_PIXMAP || a == XCB_ATOM_BITMAP) && mimeData->hasImage()) {
|
} else if ((a == XCB_ATOM_PIXMAP || a == XCB_ATOM_BITMAP) && mimeData->hasImage()) {
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
@ -188,17 +189,37 @@ QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a,
|
|||||||
a == connection->atom(QXcbAtom::TEXT))
|
a == connection->atom(QXcbAtom::TEXT))
|
||||||
return QString::fromLatin1(data);
|
return QString::fromLatin1(data);
|
||||||
}
|
}
|
||||||
|
// If data contains UTF16 text, convert it to a string.
|
||||||
// special case for uri types
|
// Firefox uses UTF16 without BOM for text/x-moz-url, "text/html",
|
||||||
if (format == QLatin1String("text/uri-list")) {
|
// Google Chrome uses UTF16 without BOM for "text/x-moz-url",
|
||||||
if (atomName == QLatin1String("text/x-moz-url")) {
|
// UTF16 with BOM for "text/html".
|
||||||
// we expect this as utf16 <url><space><title>
|
if ((format == QLatin1String("text/html") || format == QLatin1String("text/uri-list"))
|
||||||
// the first part is a url that should only contain ascci char
|
&& data.size() > 1) {
|
||||||
// so it should be safe to check that the second char is 0
|
const quint8 byte0 = data.at(0);
|
||||||
// to verify that it is utf16
|
const quint8 byte1 = data.at(1);
|
||||||
if (data.size() > 1 && data.at(1) == 0)
|
if ((byte0 == 0xff && byte1 == 0xfe) || (byte0 == 0xfe && byte1 == 0xff)
|
||||||
return QString::fromRawData((const QChar *)data.constData(),
|
|| (byte0 != 0 && byte1 == 0) || (byte0 == 0 && byte1 != 0)) {
|
||||||
data.size() / 2).split(QLatin1Char('\n')).first().toLatin1();
|
const QString str = QString::fromUtf16(
|
||||||
|
reinterpret_cast<const ushort *>(data.constData()), data.size() / 2);
|
||||||
|
if (!str.isNull()) {
|
||||||
|
if (format == QLatin1String("text/uri-list")) {
|
||||||
|
const QStringList urls = str.split(QLatin1Char('\n'));
|
||||||
|
QList<QVariant> list;
|
||||||
|
foreach (const QString &s, urls) {
|
||||||
|
const QUrl url(s.trimmed());
|
||||||
|
if (url.isValid())
|
||||||
|
list.append(url);
|
||||||
|
}
|
||||||
|
// We expect "text/x-moz-url" as <url><space><title>.
|
||||||
|
// The atomName variable is not used because mimeAtomToString()
|
||||||
|
// converts "text/x-moz-url" to "text/uri-list".
|
||||||
|
if (!list.isEmpty() && connection->atomName(a) == "text/x-moz-url")
|
||||||
|
return list.first();
|
||||||
|
return list;
|
||||||
|
} else {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2336,9 +2336,14 @@ void QXcbWindow::handleMotionNotifyEvent(int event_x, int event_y, int root_x, i
|
|||||||
QPoint local(event_x, event_y);
|
QPoint local(event_x, event_y);
|
||||||
QPoint global(root_x, root_y);
|
QPoint global(root_x, root_y);
|
||||||
|
|
||||||
// "mousePressWindow" can be NULL i.e. if a window will be grabbed or umnapped, so set it again here
|
// "mousePressWindow" can be NULL i.e. if a window will be grabbed or unmapped, so set it again here.
|
||||||
if (connection()->buttons() != Qt::NoButton && connection()->mousePressWindow() == Q_NULLPTR)
|
// Unset "mousePressWindow" when mouse button isn't pressed - in some cases the release event won't arrive.
|
||||||
|
const bool isMouseButtonPressed = (connection()->buttons() != Qt::NoButton);
|
||||||
|
const bool hasMousePressWindow = (connection()->mousePressWindow() != Q_NULLPTR);
|
||||||
|
if (isMouseButtonPressed && !hasMousePressWindow)
|
||||||
connection()->setMousePressWindow(this);
|
connection()->setMousePressWindow(this);
|
||||||
|
else if (hasMousePressWindow && !isMouseButtonPressed)
|
||||||
|
connection()->setMousePressWindow(Q_NULLPTR);
|
||||||
|
|
||||||
handleMouseEvent(timestamp, local, global, modifiers, source);
|
handleMouseEvent(timestamp, local, global, modifiers, source);
|
||||||
}
|
}
|
||||||
|
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