Merge "Merge remote-tracking branch 'origin/release' into stable" into refs/staging/stable

This commit is contained in:
Frederik Gladhorn 2013-06-25 13:52:19 +02:00 committed by The Qt Project
commit 851fae6dbe
29 changed files with 286 additions and 104 deletions

11
dist/changes-5.1.0 vendored
View File

@ -88,7 +88,16 @@ QtGui
QtNetwork QtNetwork
--------- ---------
- - QNetworkAccessManager / QNetworkReply:
* Add a new encrypted() signal so that applications can perform
additional checks on the certificate chain.
- QSslSocket:
* Support for sending intermediate certificates when QSslSocket is used
as a server, and when using client certificates.
- HTTPS internals:
* SSL sessions are re-used by default.
- QHostInfo:
* Allow QHostInfo::lookupHost() with no receiver to warm the DNS cache.
QtWidgets QtWidgets
--------- ---------

View File

@ -32,11 +32,10 @@
# manifestmeta.global.names = * # manifestmeta.global.names = *
# manifestmeta.global.tags = qt5 # manifestmeta.global.tags = qt5
manifestmeta.filters = highlighted webkit1 webkit2 manifestmeta.filters = highlighted webkit1 webkit2 android
manifestmeta.highlighted.names = "QtQuick/Qt Quick Demo - Same Game" \ manifestmeta.highlighted.names = "QtQuick/Qt Quick Demo - Same Game" \
"QtQuick/Qt Quick Demo - Photo Surface" \ "QtQuick/Qt Quick Demo - Photo Surface" \
"QtQuick/Qt Quick Demo - Tweet Search" \
"QtQuick/Qt Quick Demo - Maroon*" \ "QtQuick/Qt Quick Demo - Maroon*" \
"QtQuick/Qt Quick Demo - Calqlatr" \ "QtQuick/Qt Quick Demo - Calqlatr" \
"QtQuick/Qt Quick Particles Examples - Emitters" \ "QtQuick/Qt Quick Particles Examples - Emitters" \
@ -70,3 +69,102 @@ manifestmeta.webkit2.names = "QtWebKitExamples/Flickr View Example" \
"QtWebKitExamples/YouTube View Example" "QtWebKitExamples/YouTube View Example"
manifestmeta.webkit2.tags = webkit2 manifestmeta.webkit2.tags = webkit2
manifestmeta.android.names = "QtQuick/Qt Quick Demo - Maroon*" \
"QtQuick/Qt Quick Demo - Calqlatr" \
"QtWidgets/Application Chooser Example" \
"QtWidgets/Stickman Example" \
"QtWidgets/Move Blocks Example" \
"QtWidgets/Border Layout Example" \
"QtWidgets/Dynamic Layouts Example" \
"QtWidgets/Flow Layout Example" \
"QtWidgets/MDI Example" \
"QtWidgets/Dock Widgets Example" \
"QtWidgets/Recent Files Example" \
"QtWidgets/Menus Example" \
"QtWidgets/Concentric Circles Example" \
"QtWidgets/Gradients" \
"QtWidgets/Font Sampler Example" \
"QtWidgets/Path Stroking" \
"QtWidgets/Transformations Example" \
"QtWidgets/Syntax Highlighter Example" \
"QtWidgets/Calendar Example" \
"QtWidgets/Movie Example" \
"QtWidgets/Validators Example" \
"QtWidgets/Analog Clock Example" \
"QtWidgets/Calculator Example" \
"QtWidgets/Mouse Button Tester" \
"QtWidgets/Character Map Example" \
"QtWidgets/Wiggly Example" \
"QtWidgets/Digital Clock Example" \
"QtWidgets/Elided Label Example" \
"QtWidgets/Image Viewer Example" \
"QtWidgets/Sliders Example" \
"QtWidgets/Tetrix Example" \
"QtWidgets/Group Box Example" \
"QtWidgets/Spin Boxes Example" \
"QtWidgets/Undo Framework" \
"QtWidgets/Regular Expressions Example" \
"QtWidgets/Colliding Mice Example" \
"QtWidgets/Basic Graphics Layouts Example" \
"QtWidgets/Boxes" \
"QtWidgets/40000 Chips" \
"QtWidgets/Diagram Scene Example" \
"QtWidgets/Drag and Drop Robot Example" \
"QtWidgets/Elastic Nodes Example" \
"QtWidgets/Pad Navigator Example" \
"QtWidgets/Anchor Layout Example" \
"QtWidgets/Weather Anchor Layout Example" \
"QtConcurrent/Image Scaling Example" \
"QtConcurrent/QtConcurrent Progress Dialog Example" \
"QtNetwork/Torrent Example" \
"QtNetwork/Network Chat Example" \
"QtSQL/Master Detail Example" \
"QtOpenGL/Cube OpenGL ES 2.0 example" \
"QtOpenGL/Textures Example" \
"QtLinguist/Arrow Pad Example" \
"QtGui/Raster Window Example" \
"QtGui/Analog Clock Window Example" \
"QtMultimedia/Video Widget Example" \
"QtMultimedia/Media Player Example" \
"QtSVG/Text Object Example" \
"QtQML/Qt Quick Examples - XMLHttpRequest" \
"QtQuick/Qt Quick Particles Examples - *" \
"QtQuick/Qt Quick Examples - Touch Interaction" \
"QtQuick/Scene Graph - *" \
"QtQuick/Qt Quick Examples - Image Elements" \
"QtQuick/Qt Quick Examples - Key Interaction" \
"QtQuick/Qt Quick Examples - Text" \
"QtQuick/Qt Quick Examples - Animation" \
"QtQuick/Qt Quick Examples - Shader Effects" \
"QtQuick/Qt Quick Examples - Canvas" \
"QtWidgets/Interview" \
"QtWidgets/Spreadsheet" \
"QtWidgets/Pixelator Example" \
"QtWidgets/Class Wizard Example" \
"QtWidgets/Animated Tiles Example" \
"QtWidgets/Basic Layouts Example" \
"QtWidgets/Application Example" \
"QtWidgets/Affine Transformations" \
"QtWidgets/Image Composition Example" \
"QtWidgets/Basic Drawing Example" \
"QtWidgets/Vector Deformation" \
"QtWidgets/Painter Paths Example" \
"QtWidgets/Text Edit" \
"QtWidgets/Style Sheet Example" \
"QtWidgets/Code Editor Example" \
"QtWidgets/Window Flags Example" \
"QtWidgets/Scribble Example" \
"QtWidgets/Shaped Clock Example" \
"QtWidgets/Line Edits Example" \
"QtWidgets/Calendar Widget Example" \
"QtWidgets/Completer Example" \
"QtWidgets/I18N Example" \
"QtQML/Extending QML - Grouped Properties Example" \
"QtQML/Extending QML - Methods Example" \
"QtQML/Extending QML - Signal Support Example" \
"QtQML/Extending QML - Attached Properties Example" \
"QtQuick/Qt Quick Examples - Window and Screen" \
"QtWidgets/Address Book Example"
manifestmeta.android.tags = android

View File

@ -60,6 +60,17 @@ contains(CMAKE_BIN_DIR, "^\\.\\./.*") {
CMAKE_BIN_DIR_IS_ABSOLUTE = True CMAKE_BIN_DIR_IS_ABSOLUTE = True
} }
!isEmpty(DLLDESTDIR):!static:!staticlib {
CMAKE_DLL_DIR = $$cmakeRelativePath($$[QT_INSTALL_BINS], $$[QT_INSTALL_PREFIX])
contains(CMAKE_DLL_DIR, "^\\.\\./.*") {
CMAKE_DLL_DIR = $$[QT_INSTALL_BINS]/
CMAKE_DLL_DIR_IS_ABSOLUTE = True
}
} else {
CMAKE_DLL_DIR = $$CMAKE_LIB_DIR
CMAKE_DLL_DIR_IS_ABSOLUTE = $$CMAKE_LIB_DIR_IS_ABSOLUTE
}
CMAKE_HOST_DATA_DIR = $$cmakeRelativePath($$[QT_HOST_DATA], $$[QT_INSTALL_PREFIX]) CMAKE_HOST_DATA_DIR = $$cmakeRelativePath($$[QT_HOST_DATA], $$[QT_INSTALL_PREFIX])
contains(CMAKE_HOST_DATA_DIR, "^\\.\\./.*") { contains(CMAKE_HOST_DATA_DIR, "^\\.\\./.*") {
CMAKE_HOST_DATA_DIR = $$[QT_HOST_DATA]/ CMAKE_HOST_DATA_DIR = $$[QT_HOST_DATA]/

View File

@ -46,10 +46,10 @@ endmacro()
macro(_populate_$${CMAKE_MODULE_NAME}_target_properties Configuration LIB_LOCATION IMPLIB_LOCATION) macro(_populate_$${CMAKE_MODULE_NAME}_target_properties Configuration LIB_LOCATION IMPLIB_LOCATION)
set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration}) set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration})
!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE) !!IF isEmpty(CMAKE_DLL_DIR_IS_ABSOLUTE)
set(imported_location \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}${LIB_LOCATION}\") set(imported_location \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_DLL_DIR}${LIB_LOCATION}\")
!!ELSE !!ELSE
set(imported_location \"IMPORTED_LOCATION_${Configuration}\" \"$${CMAKE_LIB_DIR}${LIB_LOCATION}\") set(imported_location \"IMPORTED_LOCATION_${Configuration}\" \"$${CMAKE_DLL_DIR}${LIB_LOCATION}\")
!!ENDIF !!ENDIF
_qt5_$${CMAKE_MODULE_NAME}_check_file_exists(${imported_location}) _qt5_$${CMAKE_MODULE_NAME}_check_file_exists(${imported_location})
set_target_properties(Qt5::$${CMAKE_MODULE_NAME} PROPERTIES set_target_properties(Qt5::$${CMAKE_MODULE_NAME} PROPERTIES
@ -187,22 +187,26 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
!!IF !isEmpty(CMAKE_FIND_OTHER_LIBRARY_BUILD) !!IF !isEmpty(CMAKE_FIND_OTHER_LIBRARY_BUILD)
!!IF isEmpty(CMAKE_DEBUG_TYPE) !!IF isEmpty(CMAKE_DEBUG_TYPE)
!!IF !isEmpty(CMAKE_STATIC_WINDOWS_BUILD)
!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE) !!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
!!IF !isEmpty(CMAKE_STATIC_WINDOWS_BUILD)
if (EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" ) if (EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
!!ELSE !!ELSE // CMAKE_LIB_DIR_IS_ABSOLUTE
if (EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_LIB_FILE_LOCATION_DEBUG}\" AND EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
!!ENDIF // CMAKE_STATIC_WINDOWS_BUILD
!!ELSE
!!IF !isEmpty(CMAKE_STATIC_WINDOWS_BUILD)
if (EXISTS \"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" ) if (EXISTS \"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
!!ELSE !!ENDIF // CMAKE_LIB_DIR_IS_ABSOLUTE
if (EXISTS \"$${CMAKE_LIB_FILE_LOCATION_DEBUG}\" AND EXISTS \"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
!!ENDIF // CMAKE_STATIC_WINDOWS_BUILD
!!ENDIF
!!IF !isEmpty(CMAKE_STATIC_WINDOWS_BUILD)
_populate_$${CMAKE_MODULE_NAME}_target_properties(DEBUG \"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" \"\" ) _populate_$${CMAKE_MODULE_NAME}_target_properties(DEBUG \"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" \"\" )
!!ELSE // CMAKE_STATIC_WINDOWS_BUILD
if (EXISTS
!!IF isEmpty(CMAKE_DLL_DIR_IS_ABSOLUTE)
\"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_DLL_DIR}$${CMAKE_LIB_FILE_LOCATION_DEBUG}\"
!!ELSE !!ELSE
\"$${CMAKE_LIB_FILE_LOCATION_DEBUG}\"
!!ENDIF
AND EXISTS
!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
\"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
!!ELSE
\"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
!!ENDIF
_populate_$${CMAKE_MODULE_NAME}_target_properties(DEBUG \"$${CMAKE_LIB_FILE_LOCATION_DEBUG}\" \"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" ) _populate_$${CMAKE_MODULE_NAME}_target_properties(DEBUG \"$${CMAKE_LIB_FILE_LOCATION_DEBUG}\" \"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
!!ENDIF // CMAKE_STATIC_WINDOWS_BUILD !!ENDIF // CMAKE_STATIC_WINDOWS_BUILD
endif() endif()
@ -220,22 +224,26 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
!!IF !isEmpty(CMAKE_FIND_OTHER_LIBRARY_BUILD) !!IF !isEmpty(CMAKE_FIND_OTHER_LIBRARY_BUILD)
!!IF isEmpty(CMAKE_RELEASE_TYPE) !!IF isEmpty(CMAKE_RELEASE_TYPE)
!!IF !isEmpty(CMAKE_STATIC_WINDOWS_BUILD)
!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE) !!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
!!IF !isEmpty(CMAKE_STATIC_WINDOWS_BUILD)
if (EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" ) if (EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
!!ELSE !!ELSE // CMAKE_LIB_DIR_IS_ABSOLUTE
if (EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_LIB_FILE_LOCATION_RELEASE}\" AND EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
!!ENDIF // CMAKE_STATIC_WINDOWS_BUILD
!!ELSE
!!IF !isEmpty(CMAKE_STATIC_WINDOWS_BUILD)
if (EXISTS \"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" ) if (EXISTS \"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
!!ELSE !!ENDIF // CMAKE_LIB_DIR_IS_ABSOLUTE
if (EXISTS \"$${CMAKE_LIB_FILE_LOCATION_RELEASE}\" AND EXISTS \"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
!!ENDIF // CMAKE_STATIC_WINDOWS_BUILD
!!ENDIF
!!IF !isEmpty(CMAKE_STATIC_WINDOWS_BUILD)
_populate_$${CMAKE_MODULE_NAME}_target_properties(RELEASE \"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" \"\" ) _populate_$${CMAKE_MODULE_NAME}_target_properties(RELEASE \"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" \"\" )
!!ELSE // CMAKE_STATIC_WINDOWS_BUILD
if (EXISTS
!!IF isEmpty(CMAKE_DLL_DIR_IS_ABSOLUTE)
\"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_DLL_DIR}$${CMAKE_LIB_FILE_LOCATION_RELEASE}\"
!!ELSE !!ELSE
\"$${CMAKE_LIB_FILE_LOCATION_RELEASE}\"
!!ENDIF
AND EXISTS
!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
\"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
!!ELSE
\"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
!!ENDIF
_populate_$${CMAKE_MODULE_NAME}_target_properties(RELEASE \"$${CMAKE_LIB_FILE_LOCATION_RELEASE}\" \"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" ) _populate_$${CMAKE_MODULE_NAME}_target_properties(RELEASE \"$${CMAKE_LIB_FILE_LOCATION_RELEASE}\" \"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
!!ENDIF // CMAKE_STATIC_WINDOWS_BUILD !!ENDIF // CMAKE_STATIC_WINDOWS_BUILD
endif() endif()

View File

@ -187,9 +187,9 @@ defineTest(qtAddRpathLink) {
export(QMAKE_RPATHLINKDIR) export(QMAKE_RPATHLINKDIR)
} }
# variable, default # variable, default, [suffix for variable for system() use]
defineTest(qtPrepareTool) { defineTest(qtPrepareTool) {
$$1 = $$eval(QT_TOOL.$${2}.command) $$1 = $$eval(QT_TOOL.$${2}.binary)
isEmpty($$1) { isEmpty($$1) {
$$1 = $$[QT_HOST_BINS]/$$2 $$1 = $$[QT_HOST_BINS]/$$2
exists($$eval($$1).pl) { exists($$eval($$1).pl) {
@ -202,17 +202,26 @@ defineTest(qtPrepareTool) {
$$1 = $$BUNDLENAME $$1 = $$BUNDLENAME
} }
} }
$$1 = $$shell_path($$eval($$1))
} }
export($$1) !isEmpty(3) {
$$1$$3 = $$system_path($$eval($$1))
qtAddTargetEnv($$1$$3, QT_TOOL.$${2}.depends, system)
}
$$1 = $$shell_path($$eval($$1))
qtAddTargetEnv($$1, QT_TOOL.$${2}.depends, )
} }
# target variable, list of env var names, [non-empty: prepare for system(), not make]
defineTest(qtAddToolEnv) { defineTest(qtAddToolEnv) {
isEmpty(3): \
ds = $$QMAKE_DIR_SEP
else: \
ds = $$DIR_SEPARATOR
for(env, 2) { for(env, 2) {
value = $$eval($${env}.value) value = $$eval($${env}.value)
!isEmpty(value) { !isEmpty(value) {
name = $$eval($${env}.name) name = $$eval($${env}.name)
equals(QMAKE_DIR_SEP, /) { equals(ds, /) {
contains($${env}.CONFIG, prepend): infix = \${$$name:+:\$$$name} contains($${env}.CONFIG, prepend): infix = \${$$name:+:\$$$name}
else: infix = else: infix =
val = "$$name=$$join(value, :)$$infix" val = "$$name=$$join(value, :)$$infix"
@ -222,20 +231,27 @@ defineTest(qtAddToolEnv) {
else: infix = else: infix =
val = "(set $$name=$$join(value, ;)$$infix) &" val = "(set $$name=$$join(value, ;)$$infix) &"
} }
contains(MAKEFILE_GENERATOR, MS.*): val ~= s,%,%%,g isEmpty(3): !contains(TEMPLATE, vc.*) {
else: val ~= s,\\\$,\$\$,g contains(MAKEFILE_GENERATOR, MS.*): val ~= s,%,%%,g
val ~= s,\\\$,\$\$,g
}
$$1 = "$$val $$eval($$1)" $$1 = "$$val $$eval($$1)"
} }
} }
export($$1) export($$1)
} }
# target variable, dependency var name, [non-empty: prepare for system(), not make]
defineTest(qtAddTargetEnv) { defineTest(qtAddTargetEnv) {
deps = $$replace(QT, -private$, ) deps = $$replace($$2, -private$, )
deps = $$resolve_depends(deps, "QT.", ".depends" ".private_depends" ".run_depends") deps = $$resolve_depends(deps, "QT.", ".depends" ".private_depends" ".run_depends")
!isEmpty(deps) { !isEmpty(deps) {
for(dep, deps): \ for(dep, deps) {
deppath += $$shell_path($$eval(QT.$${dep}.libs)) isEmpty(3): \
deppath += $$shell_path($$eval(QT.$${dep}.libs))
else: \
deppath += $$system_path($$eval(QT.$${dep}.libs))
}
equals(QMAKE_HOST.os, Windows) { equals(QMAKE_HOST.os, Windows) {
deppath.name = PATH deppath.name = PATH
} else:contains(QMAKE_HOST.os, Linux|FreeBSD|OpenBSD|NetBSD|DragonFly|SunOS|HP-UX|QNX|GNU) { } else:contains(QMAKE_HOST.os, Linux|FreeBSD|OpenBSD|NetBSD|DragonFly|SunOS|HP-UX|QNX|GNU) {
@ -256,13 +272,18 @@ defineTest(qtAddTargetEnv) {
pluginpath.value = pluginpath.value =
for(qmod, QMAKEMODULES) { for(qmod, QMAKEMODULES) {
qmod = $$section(qmod, /, 0, -3)/plugins qmod = $$section(qmod, /, 0, -3)/plugins
exists($$qmod): pluginpath.value += $$shell_path($$qmod) exists($$qmod) {
isEmpty(3): \
pluginpath.value += $$shell_path($$qmod)
else: \
pluginpath.value += $$system_path($$qmod)
}
} }
pluginpath.name = QT_PLUGIN_PATH pluginpath.name = QT_PLUGIN_PATH
QT_TOOL_ENV += deppath pluginpath QT_TOOL_ENV += deppath pluginpath
} }
qtAddToolEnv($$1, $$QT_TOOL_ENV) qtAddToolEnv($$1, $$QT_TOOL_ENV, $$3)
} }
defineReplace(pkgConfigExecutable) { defineReplace(pkgConfigExecutable) {

View File

@ -19,17 +19,17 @@ CONFIG += console
!build_pass:if(!host_build|!force_bootstrap|force_independent) { !build_pass:if(!host_build|!force_bootstrap|force_independent) {
isEmpty(MODULE):MODULE = $$TARGET isEmpty(MODULE):MODULE = $$TARGET
MODULE_DEPENDS = $$replace(QT, -private$, ) !host_build|!force_bootstrap: MODULE_DEPENDS = $$replace(QT, -private$, )
load(qt_build_paths) load(qt_build_paths)
load(resolve_target) load(resolve_target)
cmd = $$shell_path($$QMAKE_RESOLVED_TARGET)
!host_build|!force_bootstrap: qtAddTargetEnv(cmd)
TOOL_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_tool_$${MODULE}.pri TOOL_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_tool_$${MODULE}.pri
TOOL_PRI_CONT = "QT_TOOL.$${MODULE}.command = $$val_escape(cmd)" TOOL_PRI_CONT = \
"QT_TOOL.$${MODULE}.binary = $$QMAKE_RESOLVED_TARGET" \
"QT_TOOL.$${MODULE}.depends =$$join(MODULE_DEPENDS, " ", " ")"
write_file($$TOOL_PRI, TOOL_PRI_CONT)|error("Aborting.") write_file($$TOOL_PRI, TOOL_PRI_CONT)|error("Aborting.")
# Then, inject the new tool into the current cache state # Then, inject the new tool into the current cache state
@ -39,6 +39,7 @@ CONFIG += console
unset(added) unset(added)
} }
include($$TOOL_PRI) include($$TOOL_PRI)
cache(QT_TOOL.$${MODULE}.command, transient) for(var, $$list(binary depends)): \
cache(QT_TOOL.$${MODULE}.$$var, transient)
} }

View File

@ -1,4 +1,4 @@
qtPrepareTool(QMAKE_RCC, rcc) qtPrepareTool(QMAKE_RCC, rcc, _DEP)
isEmpty(RCC_DIR):RCC_DIR = . isEmpty(RCC_DIR):RCC_DIR = .
isEmpty(QMAKE_MOD_RCC):QMAKE_MOD_RCC = qrc isEmpty(QMAKE_MOD_RCC):QMAKE_MOD_RCC = qrc
@ -19,7 +19,7 @@ resource_combine {
} }
} }
rcc.commands = $$QMAKE_RCC $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT} rcc.commands = $$QMAKE_RCC $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
rcc.depend_command = $$QMAKE_RCC -list $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN} rcc.depend_command = $$QMAKE_RCC_DEP -list $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN}
rcc.CONFIG += add_inputs_as_makefile_deps rcc.CONFIG += add_inputs_as_makefile_deps
rcc.input = RESOURCES rcc.input = RESOURCES
rcc.variable_out = SOURCES rcc.variable_out = SOURCES

View File

@ -43,7 +43,7 @@ else: check.commands += $(DESTDIR_TARGET)
check.commands += $(TESTARGS) check.commands += $(TESTARGS)
# Add environment for non-installed builds # Add environment for non-installed builds
qtAddTargetEnv(check.commands) qtAddTargetEnv(check.commands, QT)
# If the test is marked as insignificant, discard the exit code # If the test is marked as insignificant, discard the exit code
insignificant_test:check.commands = -$${check.commands} insignificant_test:check.commands = -$${check.commands}

View File

@ -1,10 +1,10 @@
qtPrepareTool(QMAKE_UIC, uic) qtPrepareTool(QMAKE_UIC, uic, _DEP)
isEmpty(UI_DIR):UI_DIR = . isEmpty(UI_DIR):UI_DIR = .
isEmpty(QMAKE_MOD_UIC):QMAKE_MOD_UIC = ui_ isEmpty(QMAKE_MOD_UIC):QMAKE_MOD_UIC = ui_
uic.commands = $$QMAKE_UIC ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT} uic.commands = $$QMAKE_UIC ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
uic.depend_command = $$QMAKE_UIC -d ${QMAKE_FILE_IN} uic.depend_command = $$QMAKE_UIC_DEP -d ${QMAKE_FILE_IN}
uic.output = $$UI_DIR/$${QMAKE_MOD_UIC}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)} uic.output = $$UI_DIR/$${QMAKE_MOD_UIC}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)}
uic.input = FORMS uic.input = FORMS
uic.variable_out = GENERATED_FILES uic.variable_out = GENERATED_FILES

View File

@ -1222,7 +1222,7 @@ bool QMakeEvaluator::loadSpec()
m_qmakespec = QDir::cleanPath(qmakespec); m_qmakespec = QDir::cleanPath(qmakespec);
if (!m_superfile.isEmpty() if (!m_superfile.isEmpty()
&& evaluateFile(m_superfile, QMakeHandler::EvalConfigFile, LoadProOnly) != ReturnTrue) { && evaluateFile(m_superfile, QMakeHandler::EvalConfigFile, LoadProOnly|LoadHidden) != ReturnTrue) {
return false; return false;
} }
if (!loadSpecInternal()) if (!loadSpecInternal())
@ -1813,7 +1813,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFile(
m_current = m_locationStack.pop(); m_current = m_locationStack.pop();
pro->deref(); pro->deref();
#ifdef PROEVALUATOR_FULL #ifdef PROEVALUATOR_FULL
if (ok == ReturnTrue) { if (ok == ReturnTrue && !(flags & LoadHidden)) {
ProStringList &iif = m_valuemapStack.first()[ProKey("QMAKE_INTERNAL_INCLUDED_FILES")]; ProStringList &iif = m_valuemapStack.first()[ProKey("QMAKE_INTERNAL_INCLUDED_FILES")];
ProString ifn(fileName); ProString ifn(fileName);
if (!iif.contains(ifn)) if (!iif.contains(ifn))

View File

@ -102,7 +102,8 @@ public:
LoadPreFiles = 1, LoadPreFiles = 1,
LoadPostFiles = 2, LoadPostFiles = 2,
LoadAll = LoadPreFiles|LoadPostFiles, LoadAll = LoadPreFiles|LoadPostFiles,
LoadSilent = 0x10 LoadSilent = 0x10,
LoadHidden = 0x20
}; };
Q_DECLARE_FLAGS(LoadFlags, LoadFlag) Q_DECLARE_FLAGS(LoadFlags, LoadFlag)

View File

@ -90,7 +90,7 @@ prefix_build|!equals(PWD, $$OUT_PWD) {
TOOL_PRI = $$OUT_PWD/mkspecs/modules/qt_tool_syncqt.pri TOOL_PRI = $$OUT_PWD/mkspecs/modules/qt_tool_syncqt.pri
TOOL_PRI_CONT = "QT_TOOL.syncqt.command = $$val_escape(cmd)" TOOL_PRI_CONT = "QT_TOOL.syncqt.binary = $$val_escape(cmd)"
write_file($$TOOL_PRI, TOOL_PRI_CONT)|error("Aborting.") write_file($$TOOL_PRI, TOOL_PRI_CONT)|error("Aborting.")
# Then, inject the new tool into the current cache state # Then, inject the new tool into the current cache state
@ -99,7 +99,7 @@ prefix_build|!equals(PWD, $$OUT_PWD) {
cache(QMAKE_INTERNAL_INCLUDED_FILES, add transient, added) cache(QMAKE_INTERNAL_INCLUDED_FILES, add transient, added)
} }
include($$TOOL_PRI) include($$TOOL_PRI)
cache(QT_TOOL.syncqt.command, transient) cache(QT_TOOL.syncqt.binary, transient)
} }

View File

@ -980,6 +980,8 @@ public:
Key_TouchpadOn = 0x01000111, Key_TouchpadOn = 0x01000111,
Key_TouchpadOff = 0x01000112, Key_TouchpadOff = 0x01000112,
Key_MicMute = 0x01000113,
Key_MediaLast = 0x0100ffff, Key_MediaLast = 0x0100ffff,
// Keypad navigation keys // Keypad navigation keys

View File

@ -1621,6 +1621,7 @@
\value Key_TouchpadToggle \value Key_TouchpadToggle
\value Key_TouchpadOn \value Key_TouchpadOn
\value Key_TouchpadOff \value Key_TouchpadOff
\value Key_MicMute
\value Key_MediaLast \value Key_MediaLast
\value Key_unknown \value Key_unknown

View File

@ -510,11 +510,12 @@ bool QFileSystemEngine::createDirectory(const QFileSystemEntry &entry, bool crea
} }
if (slash) { if (slash) {
const QByteArray chunk = QFile::encodeName(dirName.left(slash)); const QByteArray chunk = QFile::encodeName(dirName.left(slash));
QT_STATBUF st; if (QT_MKDIR(chunk.constData(), 0777) != 0) {
if (QT_STAT(chunk.constData(), &st) != -1) { if (errno == EEXIST) {
if ((st.st_mode & S_IFMT) != S_IFDIR) QT_STATBUF st;
return false; if (QT_STAT(chunk.constData(), &st) == 0 && (st.st_mode & S_IFMT) == S_IFDIR)
} else if (QT_MKDIR(chunk.constData(), 0777) != 0) { continue;
}
return false; return false;
} }
} }

View File

@ -1044,14 +1044,13 @@ bool QFileSystemEngine::createDirectory(const QFileSystemEntry &entry, bool crea
} }
if (slash) { if (slash) {
QString chunk = dirName.left(slash); QString chunk = dirName.left(slash);
bool existed = false; if (!mkDir(chunk)) {
if (!isDirPath(chunk, &existed)) { if (GetLastError() == ERROR_ALREADY_EXISTS) {
if (!existed) { bool existed = false;
if (!mkDir(chunk)) if (isDirPath(chunk, &existed) && existed)
return false; continue;
} else {
return false;
} }
return false;
} }
} }
} }

View File

@ -72,7 +72,6 @@ public:
QByteArray iid; QByteArray iid;
QList<QLibraryPrivate*> libraryList; QList<QLibraryPrivate*> libraryList;
QMap<QString,QLibraryPrivate*> keyMap; QMap<QString,QLibraryPrivate*> keyMap;
QStringList keyList;
QString suffix; QString suffix;
Qt::CaseSensitivity cs; Qt::CaseSensitivity cs;
QStringList loadedPaths; QStringList loadedPaths;
@ -176,10 +175,8 @@ void QFactoryLoader::update()
metaDataOk = true; metaDataOk = true;
QJsonArray k = object.value(QLatin1String("Keys")).toArray(); QJsonArray k = object.value(QLatin1String("Keys")).toArray();
for (int i = 0; i < k.size(); ++i) { for (int i = 0; i < k.size(); ++i)
QString s = k.at(i).toString(); keys += d->cs ? k.at(i).toString() : k.at(i).toString().toLower();
keys += s;
}
} }
if (qt_debug_component()) if (qt_debug_component())
qDebug() << "Got keys from plugin meta data" << keys; qDebug() << "Got keys from plugin meta data" << keys;
@ -190,15 +187,13 @@ void QFactoryLoader::update()
continue; continue;
} }
d->libraryList += library; int keyUsageCount = 0;
for (int k = 0; k < keys.count(); ++k) { for (int k = 0; k < keys.count(); ++k) {
// first come first serve, unless the first // first come first serve, unless the first
// library was built with a future Qt version, // library was built with a future Qt version,
// whereas the new one has a Qt version that fits // whereas the new one has a Qt version that fits
// better // better
QString key = keys.at(k); const QString &key = keys.at(k);
if (!d->cs)
key = key.toLower();
QLibraryPrivate *previous = d->keyMap.value(key); QLibraryPrivate *previous = d->keyMap.value(key);
int prev_qt_version = 0; int prev_qt_version = 0;
if (previous) { if (previous) {
@ -207,9 +202,13 @@ void QFactoryLoader::update()
int qt_version = (int)library->metaData.value(QLatin1String("version")).toDouble(); int qt_version = (int)library->metaData.value(QLatin1String("version")).toDouble();
if (!previous || (prev_qt_version > QT_VERSION && qt_version <= QT_VERSION)) { if (!previous || (prev_qt_version > QT_VERSION && qt_version <= QT_VERSION)) {
d->keyMap[key] = library; d->keyMap[key] = library;
d->keyList += keys.at(k); ++keyUsageCount;
} }
} }
if (keyUsageCount || keys.isEmpty())
d->libraryList += library;
else
library->release();
} }
} }
#else #else

View File

@ -16,11 +16,12 @@ set(Qt5Gui_OPENGL_INCLUDE_DIRS ${Qt5Gui_EGL_INCLUDE_DIRS})
macro(_populate_qt5gui_gl_target_properties TargetName Configuration LIB_LOCATION IMPLIB_LOCATION) macro(_populate_qt5gui_gl_target_properties TargetName Configuration LIB_LOCATION IMPLIB_LOCATION)
set_property(TARGET Qt5::${TargetName} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration}) set_property(TARGET Qt5::${TargetName} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration})
!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE) !!IF isEmpty(CMAKE_DLL_DIR_IS_ABSOLUTE)
set(imported_location \"${_qt5Gui_install_prefix}/$${CMAKE_LIB_DIR}${LIB_LOCATION}\") set(imported_location \"${_qt5Gui_install_prefix}/$${CMAKE_DLL_DIR}${LIB_LOCATION}\")
!!ELSE !!ELSE
set(imported_location \"$${CMAKE_LIB_DIR}${LIB_LOCATION}\") set(imported_location \"$${CMAKE_DLL_DIR}${LIB_LOCATION}\")
!!ENDIF !!ENDIF
!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE) !!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
set(imported_implib \"${_qt5Gui_install_prefix}/$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\") set(imported_implib \"${_qt5Gui_install_prefix}/$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\")
!!ELSE !!ELSE

View File

@ -752,7 +752,8 @@ static QByteArray headerValue(QNetworkRequest::KnownHeaders header, const QVaria
static QNetworkRequest::KnownHeaders parseHeaderName(const QByteArray &headerName) static QNetworkRequest::KnownHeaders parseHeaderName(const QByteArray &headerName)
{ {
// headerName is not empty here if (headerName.isEmpty())
return QNetworkRequest::KnownHeaders(-1);
switch (tolower(headerName.at(0))) { switch (tolower(headerName.at(0))) {
case 'c': case 'c':

View File

@ -333,7 +333,7 @@ namespace QtAndroidInput
return Qt::Key_BracketLeft; return Qt::Key_BracketLeft;
case 0x0000005a: // KEYCODE_MEDIA_FAST_FORWARD case 0x0000005a: // KEYCODE_MEDIA_FAST_FORWARD
return Qt::Key_Forward; return Qt::Key_AudioForward;
case 0x00000057: case 0x00000057:
return Qt::Key_MediaNext; return Qt::Key_MediaNext;
@ -344,7 +344,7 @@ namespace QtAndroidInput
case 0x00000058: case 0x00000058:
return Qt::Key_MediaPrevious; return Qt::Key_MediaPrevious;
case 0x00000059: case 0x00000059: // KEYCODE_MEDIA_REWIND
return Qt::Key_AudioRewind; return Qt::Key_AudioRewind;
case 0x00000056: case 0x00000056:
@ -356,8 +356,8 @@ namespace QtAndroidInput
case 0x00000045: case 0x00000045:
return Qt::Key_Minus; return Qt::Key_Minus;
case 0x0000005b: case 0x0000005b: // KEYCODE_MUTE
return Qt::Key_VolumeMute; return Qt::Key_MicMute;
case 0x0000004e: case 0x0000004e:
return Qt::Key_NumLock; return Qt::Key_NumLock;
@ -405,6 +405,9 @@ namespace QtAndroidInput
case 0x00000019: case 0x00000019:
return Qt::Key_VolumeDown; return Qt::Key_VolumeDown;
case 0x000000a4: // KEYCODE_VOLUME_MUTE
return Qt::Key_VolumeMute;
case 0x00000018: case 0x00000018:
return Qt::Key_VolumeUp; return Qt::Key_VolumeUp;

View File

@ -98,6 +98,11 @@ static NSButton *macCreateButton(const char *text, NSView *superview)
mDialogIsExecuting = false; mDialogIsExecuting = false;
mResultSet = false; mResultSet = false;
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7)
[mColorPanel setRestorable:NO];
#endif
if (mHelper->options()->testOption(QColorDialogOptions::NoButtons)) { if (mHelper->options()->testOption(QColorDialogOptions::NoButtons)) {
mStolenContentView = 0; mStolenContentView = 0;
mOkButton = 0; mOkButton = 0;
@ -274,6 +279,7 @@ static NSButton *macCreateButton(const char *text, NSView *superview)
- (void)showModelessPanel - (void)showModelessPanel
{ {
mDialogIsExecuting = false; mDialogIsExecuting = false;
mResultSet = false;
[mColorPanel makeKeyAndOrderFront:mColorPanel]; [mColorPanel makeKeyAndOrderFront:mColorPanel];
} }
@ -367,10 +373,8 @@ void QCocoaColorDialogHelper::exec()
bool QCocoaColorDialogHelper::show(Qt::WindowFlags, Qt::WindowModality windowModality, QWindow *parent) bool QCocoaColorDialogHelper::show(Qt::WindowFlags, Qt::WindowModality windowModality, QWindow *parent)
{ {
if (windowModality == Qt::WindowModal) { if (windowModality == Qt::WindowModal)
// Cocoa's shared color panel cannot be shown as a sheet windowModality = Qt::ApplicationModal;
return false;
}
return showCocoaColorPanel(windowModality, parent); return showCocoaColorPanel(windowModality, parent);
} }
@ -433,9 +437,9 @@ bool QCocoaColorDialogHelper::showCocoaColorPanel(Qt::WindowModality windowModal
createNSColorPanelDelegate(); createNSColorPanelDelegate();
QT_MANGLE_NAMESPACE(QNSColorPanelDelegate) *delegate = static_cast<QT_MANGLE_NAMESPACE(QNSColorPanelDelegate) *>(mDelegate); QT_MANGLE_NAMESPACE(QNSColorPanelDelegate) *delegate = static_cast<QT_MANGLE_NAMESPACE(QNSColorPanelDelegate) *>(mDelegate);
[delegate->mColorPanel setShowsAlpha:options()->testOption(QColorDialogOptions::ShowAlphaChannel)]; [delegate->mColorPanel setShowsAlpha:options()->testOption(QColorDialogOptions::ShowAlphaChannel)];
if (windowModality == Qt::NonModal) if (windowModality != Qt::WindowModal)
[delegate showModelessPanel]; [delegate showModelessPanel];
// no need to show a Qt::ApplicationModal dialog here, since it will be done in _q_platformRunNativeAppModalPanel() // no need to show a Qt::WindowModal dialog here, because it's necessary to call exec() in that case
return true; return true;
} }

View File

@ -248,6 +248,7 @@
#define XF86XK_TouchpadToggle 0x1008FFA9 #define XF86XK_TouchpadToggle 0x1008FFA9
#define XF86XK_TouchpadOn 0x1008FFB0 #define XF86XK_TouchpadOn 0x1008FFB0
#define XF86XK_TouchpadOff 0x1008FFB1 #define XF86XK_TouchpadOff 0x1008FFB1
#define XF86XK_AudioMicMute 0x1008FFB2
// end of XF86keysyms.h // end of XF86keysyms.h
@ -543,6 +544,7 @@ static const unsigned int KeyTbl[] = {
XF86XK_TouchpadToggle, Qt::Key_TouchpadToggle, XF86XK_TouchpadToggle, Qt::Key_TouchpadToggle,
XF86XK_TouchpadOn, Qt::Key_TouchpadOn, XF86XK_TouchpadOn, Qt::Key_TouchpadOn,
XF86XK_TouchpadOff, Qt::Key_TouchpadOff, XF86XK_TouchpadOff, Qt::Key_TouchpadOff,
XF86XK_AudioMicMute, Qt::Key_MicMute,
XF86XK_Launch0, Qt::Key_Launch2, // ### Qt 6: remap properly XF86XK_Launch0, Qt::Key_Launch2, // ### Qt 6: remap properly
XF86XK_Launch1, Qt::Key_Launch3, XF86XK_Launch1, Qt::Key_Launch3,
XF86XK_Launch2, Qt::Key_Launch4, XF86XK_Launch2, Qt::Key_Launch4,

View File

@ -1776,6 +1776,8 @@ void QColorDialog::setOptions(ColorDialogOptions options)
d->options->setOptions(QColorDialogOptions::ColorDialogOptions(int(options))); d->options->setOptions(QColorDialogOptions::ColorDialogOptions(int(options)));
d->buttons->setVisible(!(options & NoButtons)); d->buttons->setVisible(!(options & NoButtons));
d->showAlpha(options & ShowAlphaChannel); d->showAlpha(options & ShowAlphaChannel);
if (options & DontUseNativeDialog)
d->nativeDialogInUse = false;
} }
QColorDialog::ColorDialogOptions QColorDialog::options() const QColorDialog::ColorDialogOptions QColorDialog::options() const
@ -1794,8 +1796,8 @@ QColorDialog::ColorDialogOptions QColorDialog::options() const
\value ShowAlphaChannel Allow the user to select the alpha component of a color. \value ShowAlphaChannel Allow the user to select the alpha component of a color.
\value NoButtons Don't display \uicontrol{OK} and \uicontrol{Cancel} buttons. (Useful for "live dialogs".) \value NoButtons Don't display \uicontrol{OK} and \uicontrol{Cancel} buttons. (Useful for "live dialogs".)
\value DontUseNativeDialog Use Qt's standard color dialog on the Mac instead of Apple's \value DontUseNativeDialog Use Qt's standard color dialog instead of the operating system
native color panel. native color dialog.
\sa options, setOption(), testOption(), windowModality() \sa options, setOption(), testOption(), windowModality()
*/ */

View File

@ -1392,7 +1392,7 @@ void QMessageBox::keyPressEvent(QKeyEvent *e)
#if !defined(QT_NO_TEXTEDIT) #if !defined(QT_NO_TEXTEDIT)
if (e == QKeySequence::Copy) { if (e == QKeySequence::Copy) {
if (d->detailsText->isVisible() && d->detailsText->copy()) { if (d->detailsText && d->detailsText->isVisible() && d->detailsText->copy()) {
e->setAccepted(true); e->setAccepted(true);
return; return;
} }

View File

@ -1548,10 +1548,11 @@ void QWidgetPrivate::createTLExtra()
x->inTopLevelResize = false; x->inTopLevelResize = false;
x->inRepaint = false; x->inRepaint = false;
x->embedded = 0; x->embedded = 0;
x->window = 0;
x->screenIndex = 0;
#ifdef Q_WS_MAC #ifdef Q_WS_MAC
x->wasMaximized = false; x->wasMaximized = false;
#endif // Q_WS_MAC #endif // Q_WS_MAC
createTLSysExtra();
#ifdef QWIDGET_EXTRA_DEBUG #ifdef QWIDGET_EXTRA_DEBUG
static int count = 0; static int count = 0;
qDebug() << "tlextra" << ++count; qDebug() << "tlextra" << ++count;
@ -10122,6 +10123,8 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on)
break; } break; }
case Qt::WA_NativeWindow: { case Qt::WA_NativeWindow: {
d->createTLExtra(); d->createTLExtra();
if (on)
d->createTLSysExtra();
#ifndef QT_NO_IM #ifndef QT_NO_IM
QWidget *focusWidget = d->effectiveFocusWidget(); QWidget *focusWidget = d->effectiveFocusWidget();
if (on && !internalWinId() && hasFocus() if (on && !internalWinId() && hasFocus()

View File

@ -890,9 +890,7 @@ void QWidgetPrivate::deleteSysExtra()
void QWidgetPrivate::createTLSysExtra() void QWidgetPrivate::createTLSysExtra()
{ {
Q_Q(QWidget); Q_Q(QWidget);
extra->topextra->screenIndex = 0; if (!extra->topextra->window && (q->testAttribute(Qt::WA_NativeWindow) || q->isWindow())) {
extra->topextra->window = 0;
if (q->testAttribute(Qt::WA_NativeWindow) || q->isWindow()) {
extra->topextra->window = new QWidgetWindow(q); extra->topextra->window = new QWidgetWindow(q);
if (extra->minw || extra->minh) if (extra->minw || extra->minh)
extra->topextra->window->setMinimumSize(QSize(extra->minw, extra->minh)); extra->topextra->window->setMinimumSize(QSize(extra->minw, extra->minh));

View File

@ -873,7 +873,7 @@ bool QDockWidgetPrivate::mouseMoveEvent(QMouseEvent *event)
QPoint pos = event->globalPos() - state->pressPos; QPoint pos = event->globalPos() - state->pressPos;
q->move(pos); q->move(pos);
if (!state->ctrlDrag) if (state && !state->ctrlDrag)
mwlayout->hover(state->widgetItem, event->globalPos()); mwlayout->hover(state->widgetItem, event->globalPos());
ret = true; ret = true;

View File

@ -311,12 +311,28 @@ void tst_QDir::mkdir()
void tst_QDir::makedirReturnCode() void tst_QDir::makedirReturnCode()
{ {
QString dirName = QString::fromLatin1("makedirReturnCode"); QString dirName = QString::fromLatin1("makedirReturnCode");
QDir::current().rmdir(dirName); // cleanup a previous run. QFile f(QDir::current().filePath(dirName));
// cleanup a previous run.
f.remove();
QDir::current().rmdir(dirName);
QDir dir(dirName); QDir dir(dirName);
QVERIFY(!dir.exists()); QVERIFY(!dir.exists());
QVERIFY(QDir::current().mkdir(dirName)); QVERIFY(QDir::current().mkdir(dirName));
QVERIFY(!QDir::current().mkdir(dirName)); // calling mkdir on an existing dir will fail. QVERIFY(!QDir::current().mkdir(dirName)); // calling mkdir on an existing dir will fail.
QVERIFY(QDir::current().mkpath(dirName)); // calling mkpath on an existing dir will pass QVERIFY(QDir::current().mkpath(dirName)); // calling mkpath on an existing dir will pass
// Remove the directory and create a file with the same path
QDir::current().rmdir(dirName);
QVERIFY(!f.exists());
f.open(QIODevice::WriteOnly);
f.write("test");
f.close();
QVERIFY(f.exists());
QVERIFY(!QDir::current().mkdir(dirName)); // calling mkdir on an existing file will fail.
QVERIFY(!QDir::current().mkpath(dirName)); // calling mkpath on an existing file will fail.
f.remove();
} }
void tst_QDir::rmdir_data() void tst_QDir::rmdir_data()

View File

@ -279,17 +279,18 @@ void tst_QTemporaryDir::openOnRootDrives()
void tst_QTemporaryDir::stressTest() void tst_QTemporaryDir::stressTest()
{ {
const int iterations = 1000; const int iterations = 1000;
QTemporaryDir rootDir;
QVERIFY(rootDir.isValid());
QSet<QString> names; QSet<QString> names;
const QString pattern = rootDir.path() + QStringLiteral("/XXXXXX");
for (int i = 0; i < iterations; ++i) { for (int i = 0; i < iterations; ++i) {
QTemporaryDir dir; QTemporaryDir dir(pattern);
dir.setAutoRemove(false); dir.setAutoRemove(false);
QVERIFY2(dir.isValid(), qPrintable(QString::number(i))); QVERIFY2(dir.isValid(), qPrintable(QString::fromLatin1("Failed to create #%1 under %2.").arg(i).arg(QDir::toNativeSeparators(pattern))));
QVERIFY(!names.contains(dir.path())); QVERIFY(!names.contains(dir.path()));
names.insert(dir.path()); names.insert(dir.path());
} }
for (QSet<QString>::const_iterator it = names.constBegin(); it != names.constEnd(); ++it)
QDir(*it).removeRecursively();
} }
void tst_QTemporaryDir::rename() void tst_QTemporaryDir::rename()