diff --git a/config.tests/x11/glxfbconfig/glxfbconfig.cpp b/config.tests/qpa/glx/glx.cpp similarity index 98% rename from config.tests/x11/glxfbconfig/glxfbconfig.cpp rename to config.tests/qpa/glx/glx.cpp index 77bedb41c8..03af3f6131 100644 --- a/config.tests/x11/glxfbconfig/glxfbconfig.cpp +++ b/config.tests/qpa/glx/glx.cpp @@ -44,6 +44,7 @@ int main(int, char **) { + //We require glxfbconfig, ie. glx 1.3 GLXFBConfig config; config = 0; diff --git a/config.tests/x11/glxfbconfig/glxfbconfig.pro b/config.tests/qpa/glx/glx.pro similarity index 84% rename from config.tests/x11/glxfbconfig/glxfbconfig.pro rename to config.tests/qpa/glx/glx.pro index 65f855a5f2..da51a6d231 100644 --- a/config.tests/x11/glxfbconfig/glxfbconfig.pro +++ b/config.tests/qpa/glx/glx.pro @@ -1,4 +1,4 @@ -SOURCES = glxfbconfig.cpp +SOURCES = glx.cpp CONFIG += x11 INCLUDEPATH += $$QMAKE_INCDIR_OPENGL diff --git a/configure b/configure index c3297a691a..2bc17274c1 100755 --- a/configure +++ b/configure @@ -611,6 +611,7 @@ CFG_OPENVG_LC_INCLUDES=no CFG_OPENVG_SHIVA=auto CFG_OPENVG_ON_OPENGL=auto CFG_EGL=auto +CFG_GLX=auto CFG_SSE=auto CFG_FONTCONFIG=auto CFG_FREETYPE=auto @@ -648,6 +649,7 @@ CFG_XINPUT=runtime CFG_XKB=auto CFG_XKBCOMMON=auto CFG_XCB=auto +CFG_XCB_XLIB=auto CFG_XCB_GLX=no CFG_EGLFS=auto CFG_DIRECTFB=auto @@ -1480,6 +1482,13 @@ while [ "$#" -gt 0 ]; do UNKNOWN_OPT=yes fi ;; + glx) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_GLX="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; pch) if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then CFG_PRECOMPILE="$VAL" @@ -1691,6 +1700,13 @@ while [ "$#" -gt 0 ]; do UNKNOWN_OPT=yes fi ;; + xcb-xlib) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_XCB_XLIB="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; wayland) CFG_OBSOLETE_WAYLAND=yes ;; @@ -2343,6 +2359,9 @@ Third Party Libraries: -no-xinput2 ........ Do not compile XInput2 support. * -xinput2 ........... Compile XInput2 support. + -no-xcb-xlib........ Do not compile Xcb-Xlib support. + * -xcb-xlib........... Compile Xcb-Xlib support. + -no-glib ........... Do not compile Glib support. + -glib .............. Compile Glib support. @@ -4908,19 +4927,6 @@ if [ "$XPLATFORM_MINGW" = "yes" ]; then fi CFG_OPENGL=no fi - case "$PLATFORM" in - hpux*) - # HP-UX have buggy glx headers; check if we really need to define the GLXFBConfig struct. - if [ "$CFG_OPENGL" = "desktop" ]; then - compileTest x11/glxfbconfig "OpenGL" - if [ $? != "0" ]; then - QMakeVar add DEFINES QT_DEFINE_GLXFBCONFIG_STRUCT - fi - fi - ;; - *) - ;; - esac elif [ "$CFG_OPENGL" = "es2" ]; then #OpenGL ES 2.x compileTest unix/opengles2 "OpenGL ES 2.x" @@ -4941,17 +4947,6 @@ if [ "$XPLATFORM_MINGW" = "yes" ]; then echo " ${XQMAKESPEC}." exit 1 fi - case "$PLATFORM" in - hpux*) - # HP-UX have buggy glx headers; check if we really need to define the GLXFBConfig struct. - compileTest x11/glxfbconfig "OpenGL" - if [ $? != "0" ]; then - QMakeVar add DEFINES QT_DEFINE_GLXFBCONFIG_STRUCT - fi - ;; - *) - ;; - esac fi fi # X11/MINGW OpenGL @@ -5145,8 +5140,10 @@ if [ "$CFG_XCB" != "no" ]; then exit 1 fi - if compileTest qpa/xcb-xlib "xcb-xlib" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then - QT_CONFIG="$QT_CONFIG xcb-xlib" + if [ "$CFG_XCB_XLIB" != "no" ]; then + if compileTest qpa/xcb-xlib "xcb-xlib" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then + QT_CONFIG="$QT_CONFIG xcb-xlib" + fi fi if [ "$CFG_SM" != "no" ] && [ -n "$PKG_CONFIG" ]; then @@ -5284,11 +5281,13 @@ elif [ "$CFG_XKBCOMMON" = "no" ]; then fi # EGL Support -if [ "$CFG_EGL" = "yes" ] && [ "$CFG_OPENGL" = "no" ]; then +if [ "$CFG_EGL" != "no" ]; then + if [ "$CFG_EGL" = "yes" ] && [ "$CFG_OPENGL" = "no" ]; then echo "EGL support was requested but OpenGL support is disabled." - echo "Either disable EGL support or enable OpenGL ES support." + echo "Either disable EGL support or enable OpenGL support." exit 101 -elif [ "$CFG_EGL" != "no" ]; then + fi + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists egl 2>/dev/null; then QMAKE_INCDIR_EGL=`$PKG_CONFIG --cflags-only-I egl 2>/dev/null | sed -e 's,^-I,,g' -e 's, -I, ,g'` QMAKE_LIBS_EGL=`$PKG_CONFIG --libs egl 2>/dev/null` @@ -5309,6 +5308,24 @@ elif [ "$CFG_EGL" != "no" ]; then fi fi +# GLX Support +if [ "$CFG_GLX" != "no" ]; then + if [ "$CFG_GLX" = "yes" ] && [ "$CFG_OPENGL" = "no" ]; then + echo "GLX support was requested but OpenGL support is disabled." + echo "Either disable GLX support or enable OpenGL support." + exit 101 + fi + if compileTest qpa/glx "GLX"; then + CFG_GLX=yes + elif [ "$CFG_GLX" = "yes" ]; then + echo " The GLX functionality test failed; GLX is required by the xcb plugin to manage contexts & surfaces." + exit 1 + else + CFG_GLX=no + fi +fi + + if [ "$CFG_EGLFS" != "no" ]; then if [ "$XPLATFORM_QNX" = "no" ]; then CFG_EGLFS="$CFG_EGL" @@ -5670,6 +5687,13 @@ else QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_EGL" fi +# enable glx +if [ "$CFG_GLX" = "yes" ]; then + QT_CONFIG="$QT_CONFIG glx" +else + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_GLX" +fi + # enable eglfs if [ "$CFG_EGLFS" = "yes" ]; then QT_CONFIG="$QT_CONFIG eglfs" @@ -6701,6 +6725,8 @@ else report_support " pkg-config ............. no" fi report_support " PulseAudio ............." "$CFG_PULSEAUDIO" +report_support " EGL ...................." "$CFG_EGL" +report_support " GLX ...................." "$CFG_GLX" report_support " QPA backends:" report_support " DirectFB ............." "$CFG_DIRECTFB" report_support " EGLFS ................" "$CFG_EGLFS" @@ -6709,6 +6735,7 @@ report_support " LinuxFB .............." "$CFG_LINUXFB" report_support " XCB .................." "$CFG_XCB" system "system library" qt "bundled copy" if [ "$CFG_XCB" != "no" ]; then report_support " MIT-SHM ............" "$CFG_MITSHM" + report_support " Xcb-Xlib ..........." "$CFG_XCB_XLIB" report_support " Xcursor ............" "$CFG_XCURSOR" runtime "loaded at runtime" report_support " Xfixes ............." "$CFG_XFIXES" runtime "loaded at runtime" report_support " Xi ................." "$CFG_XINPUT" runtime "loaded at runtime" diff --git a/examples/opengl/hellowindow/hellowindow.cpp b/examples/opengl/hellowindow/hellowindow.cpp index b5ffbd63a2..2864883f5e 100644 --- a/examples/opengl/hellowindow/hellowindow.cpp +++ b/examples/opengl/hellowindow/hellowindow.cpp @@ -142,7 +142,7 @@ void Renderer::render() m_initialized = true; } - glViewport(0, 0, viewSize.width(), viewSize.height()); + glViewport(0, 0, viewSize.width() * surface->devicePixelRatio(), viewSize.height() * surface->devicePixelRatio()); glClearColor(0.1f, 0.1f, 0.2f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); diff --git a/examples/opengl/paintedwindow/paintedwindow.cpp b/examples/opengl/paintedwindow/paintedwindow.cpp index c8f1f236ba..d44b6308b3 100644 --- a/examples/opengl/paintedwindow/paintedwindow.cpp +++ b/examples/opengl/paintedwindow/paintedwindow.cpp @@ -175,9 +175,9 @@ void PaintedWindow::paint() { m_context->makeCurrent(this); - QRect rect(0, 0, width(), height()); + QRect rect(0, 0, width() * devicePixelRatio(), height() * devicePixelRatio()); - QOpenGLPaintDevice device(size()); + QOpenGLPaintDevice device(size() * devicePixelRatio()); QPainter painter(&device); QPainterPath path; diff --git a/examples/opengl/pbuffers/glwidget.cpp b/examples/opengl/pbuffers/glwidget.cpp index d3b82ff23f..b319951ccd 100644 --- a/examples/opengl/pbuffers/glwidget.cpp +++ b/examples/opengl/pbuffers/glwidget.cpp @@ -198,7 +198,7 @@ void GLWidget::orthographicProjection() void GLWidget::resizeGL(int width, int height) { - glViewport(0, 0, width, height); + glViewport(0, 0, width * devicePixelRatio(), height * devicePixelRatio()); aspect = (qreal)width / (qreal)(height ? height : 1); perspectiveProjection(); } diff --git a/examples/opengl/pbuffers2/glwidget.cpp b/examples/opengl/pbuffers2/glwidget.cpp index d1bb501386..de30bb8b21 100644 --- a/examples/opengl/pbuffers2/glwidget.cpp +++ b/examples/opengl/pbuffers2/glwidget.cpp @@ -156,7 +156,7 @@ void GLWidget::draw() glTranslatef(0.0f, 0.0f, -15.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); - glViewport(0, 0, width(), height()); + glViewport(0, 0, width() * devicePixelRatio(), height() * devicePixelRatio()); glBindTexture(GL_TEXTURE_2D, dynamicTexture); glEnable(GL_TEXTURE_2D); diff --git a/mkspecs/features/cmake_functions.prf b/mkspecs/features/cmake_functions.prf index a9b0c86cad..1e6b05c78e 100644 --- a/mkspecs/features/cmake_functions.prf +++ b/mkspecs/features/cmake_functions.prf @@ -27,9 +27,9 @@ defineReplace(cmakeModuleList) { defineReplace(cmakeTargetPath) { SYSR = $$[QT_SYSROOT] - !isEmpty(SYSR): path = $$relative_path($$1, $$[QT_SYSROOT]) + !isEmpty(SYSR): path = /$$relative_path($$1, $$[QT_SYSROOT]) else: path = $$1 - return($$clean_path(/$$path)) + return($$clean_path($$path)) } defineReplace(cmakeTargetPaths) { diff --git a/mkspecs/features/ctest_testcase_common.prf b/mkspecs/features/ctest_testcase_common.prf index 118eed1e94..a9461eb4ae 100644 --- a/mkspecs/features/ctest_testcase_common.prf +++ b/mkspecs/features/ctest_testcase_common.prf @@ -1,10 +1,11 @@ win32 { - CMAKE_VERSION = $$system(cmake --version 2>NUL) + CMAKE_VERSION = $$system(cmake --version 2>NUL, lines) } else { - CMAKE_VERSION = $$system(cmake --version 2>/dev/null) + CMAKE_VERSION = $$system(cmake --version 2>/dev/null, lines) } +CMAKE_VERSION = $$member(CMAKE_VERSION, 0, 0) check.commands = QMAKE_EXTRA_TARGETS *= check diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java index 3dcffeb07d..3bcd6eaea3 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java @@ -858,10 +858,8 @@ public class QtActivityDelegate public void onContextMenuClosed(Menu menu) { - if (!m_contextMenuVisible) { - Log.e(QtNative.QtTAG, "invalid onContextMenuClosed call"); + if (!m_contextMenuVisible) return; - } m_contextMenuVisible = false; QtNative.onContextMenuClosed(menu); } diff --git a/src/corelib/global/qfeatures.txt b/src/corelib/global/qfeatures.txt index 84c9379bbc..fb6e56ec7d 100644 --- a/src/corelib/global/qfeatures.txt +++ b/src/corelib/global/qfeatures.txt @@ -748,7 +748,7 @@ Name: QPdf Feature: PRINTER Description: Supports printing Section: Painting -Requires: PICTURE TEMPORARYFILE +Requires: PICTURE TEMPORARYFILE PDF Name: QPrinter Feature: CUPS diff --git a/src/corelib/kernel/qsystemsemaphore.cpp b/src/corelib/kernel/qsystemsemaphore.cpp index 6f0e5ee011..82e14e6f3f 100644 --- a/src/corelib/kernel/qsystemsemaphore.cpp +++ b/src/corelib/kernel/qsystemsemaphore.cpp @@ -229,8 +229,7 @@ void QSystemSemaphore::setKey(const QString &key, int initialValue, AccessMode m { if (key == d->key && mode == Open) return; - d->error = NoError; - d->errorString = QString(); + d->clearError(); #if !defined(Q_OS_WIN) // optimization to not destroy/create the file & semaphore if (key == d->key && mode == Create && d->createdSemaphore && d->createdFile) { diff --git a/src/corelib/kernel/qsystemsemaphore_p.h b/src/corelib/kernel/qsystemsemaphore_p.h index c809ba58c1..b34ec1b9a7 100644 --- a/src/corelib/kernel/qsystemsemaphore_p.h +++ b/src/corelib/kernel/qsystemsemaphore_p.h @@ -75,6 +75,11 @@ public: return QSharedMemoryPrivate::makePlatformSafeKey(key, QLatin1String("qipc_systemsem_")); } + inline void setError(QSystemSemaphore::SystemSemaphoreError e, const QString &message) + { error = e; errorString = message; } + inline void clearError() + { setError(QSystemSemaphore::NoError, QString()); } + #ifdef Q_OS_WIN Qt::HANDLE handle(QSystemSemaphore::AccessMode mode = QSystemSemaphore::Open); void setErrorString(const QString &function); diff --git a/src/corelib/kernel/qsystemsemaphore_unix.cpp b/src/corelib/kernel/qsystemsemaphore_unix.cpp index 073bd020ba..8f439c94a0 100644 --- a/src/corelib/kernel/qsystemsemaphore_unix.cpp +++ b/src/corelib/kernel/qsystemsemaphore_unix.cpp @@ -229,6 +229,7 @@ bool QSystemSemaphorePrivate::modifySemaphore(int count) return false; } + clearError(); return true; } diff --git a/src/corelib/kernel/qsystemsemaphore_win.cpp b/src/corelib/kernel/qsystemsemaphore_win.cpp index 55df20b24e..edf90a31ac 100644 --- a/src/corelib/kernel/qsystemsemaphore_win.cpp +++ b/src/corelib/kernel/qsystemsemaphore_win.cpp @@ -136,6 +136,7 @@ bool QSystemSemaphorePrivate::modifySemaphore(int count) } } + clearError(); return true; } diff --git a/src/corelib/tools/qlocale_p.h b/src/corelib/tools/qlocale_p.h index 4b4606ffab..581a12e0c7 100644 --- a/src/corelib/tools/qlocale_p.h +++ b/src/corelib/tools/qlocale_p.h @@ -360,10 +360,10 @@ inline char QLocalePrivate::digitToCLocale(QChar in) const if (in.unicode() >= '0' && in.unicode() <= '9') return in.toLatin1(); - if (in == plus()) + if (in == plus() || in == QLatin1Char('+')) return '+'; - if (in == minus()) + if (in == minus() || in == QLatin1Char('-') || in == QChar(0x2212)) return '-'; if (in == decimal()) diff --git a/src/gui/kernel/qoffscreensurface.cpp b/src/gui/kernel/qoffscreensurface.cpp index e2306050dd..ce913a98af 100644 --- a/src/gui/kernel/qoffscreensurface.cpp +++ b/src/gui/kernel/qoffscreensurface.cpp @@ -160,6 +160,8 @@ void QOffscreenSurface::create() d->platformOffscreenSurface = QGuiApplicationPrivate::platformIntegration()->createPlatformOffscreenSurface(this); // No platform offscreen surface, fallback to an invisible window if (!d->platformOffscreenSurface) { + if (QThread::currentThread() != qGuiApp->thread()) + qWarning("Attempting to create QWindow-based QOffscreenSurface outside the gui thread. Expect failures."); d->offscreenWindow = new QWindow(d->screen); d->offscreenWindow->setSurfaceType(QWindow::OpenGLSurface); d->offscreenWindow->setFormat(d->requestedFormat); diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index ff050d1758..61c93dc2ac 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -499,6 +499,8 @@ static const int scriptForWritingSystem[] = { QChar::Script_Nko // Nko }; +Q_STATIC_ASSERT(sizeof(scriptForWritingSystem) / sizeof(scriptForWritingSystem[0]) == QFontDatabase::WritingSystemsCount); + int qt_script_for_writing_system(QFontDatabase::WritingSystem writingSystem) { return scriptForWritingSystem[writingSystem]; @@ -562,9 +564,9 @@ struct QtFontDesc int familyIndex; }; -static void match(int script, const QFontDef &request, - const QString &family_name, const QString &foundry_name, int force_encoding_id, - QtFontDesc *desc, const QList &blacklistedFamilies = QList()); +static int match(int script, const QFontDef &request, + const QString &family_name, const QString &foundry_name, int force_encoding_id, + QtFontDesc *desc, const QList &blacklisted); static void initFontDef(const QtFontDesc &desc, const QFontDef &request, QFontDef *fontDef, bool multi) { @@ -846,11 +848,12 @@ static bool matchFamilyName(const QString &familyName, QtFontFamily *f) Tries to find the best match for a given request and family/foundry */ -static void match(int script, const QFontDef &request, - const QString &family_name, const QString &foundry_name, int force_encoding_id, - QtFontDesc *desc, const QList &blacklistedFamilies) +static int match(int script, const QFontDef &request, + const QString &family_name, const QString &foundry_name, int force_encoding_id, + QtFontDesc *desc, const QList &blacklistedFamilies) { Q_UNUSED(force_encoding_id); + int result = -1; QtFontStyle::Key styleKey; styleKey.style = request.style; @@ -881,6 +884,8 @@ static void match(int script, const QFontDef &request, load(family_name, script); + const size_t writingSystem = std::find(scriptForWritingSystem, scriptForWritingSystem + QFontDatabase::WritingSystemsCount, script) - scriptForWritingSystem; + QFontDatabasePrivate *db = privateDb(); for (int x = 0; x < db->count; ++x) { if (blacklistedFamilies.contains(x)) @@ -895,19 +900,9 @@ static void match(int script, const QFontDef &request, if (family_name.isEmpty()) load(test.family->name, script); - uint score_adjust = 0; - - bool supported = (script == QChar::Script_Common); - for (int ws = 1; !supported && ws < QFontDatabase::WritingSystemsCount; ++ws) { - if (scriptForWritingSystem[ws] != script) - continue; - if (test.family->writingSystems[ws] & QtFontFamily::Supported) - supported = true; - } - if (!supported) { - // family not supported in the script we want + // Check if family is supported in the script we want + if (script != QChar::Script_Common && !(test.family->writingSystems[writingSystem] & QtFontFamily::Supported)) continue; - } // as we know the script is supported, we can be sure // to find a matching font here. @@ -922,15 +917,16 @@ static void match(int script, const QFontDef &request, QString(), styleKey, request.pixelSize, pitch, &test, force_encoding_id); } - newscore += score_adjust; if (newscore < score) { + result = x; score = newscore; *desc = test; } if (newscore < 10) // xlfd instead of FT... just accept it break; } + return result; } static QString styleStringHelper(int weight, QFont::Style style) diff --git a/src/gui/text/qfontdatabase_qpa.cpp b/src/gui/text/qfontdatabase_qpa.cpp index fddbb11122..6f4971e267 100644 --- a/src/gui/text/qfontdatabase_qpa.cpp +++ b/src/gui/text/qfontdatabase_qpa.cpp @@ -184,7 +184,6 @@ QFontEngine *loadSingleEngine(int script, if (!engine) { engine = pfdb->fontEngine(def, QChar::Script(script), size->handle); if (engine) { - engine->smoothScalable = style->smoothScalable; QFontCache::Key key(def,script); QFontCache::instance()->instance()->insertEngine(key,engine); } @@ -306,9 +305,12 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, } QtFontDesc desc; - match(script, request, family_name, foundry_name, force_encoding_id, &desc); - if (desc.family != 0 && desc.foundry != 0 && desc.style != 0) { + QList blackListed; + int index = match(script, request, family_name, foundry_name, force_encoding_id, &desc, blackListed); + if (index >= 0) { engine = loadEngine(script, request, desc.family, desc.foundry, desc.style, desc.size); + if (!engine) + blackListed.append(index); } else { FM_DEBUG(" NO MATCH FOUND\n"); } @@ -332,6 +334,8 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, QFont::Style(request.style), QFont::StyleHint(request.styleHint), QChar::Script(script)); + if (script > QChar::Script_Common) + fallbacks += QString(); // Find the first font matching the specified script. for (int i = 0; !engine && i < fallbacks.size(); i++) { QFontDef def = request; @@ -340,14 +344,19 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, engine = QFontCache::instance()->findEngine(key); if (!engine) { QtFontDesc desc; - match(script, def, def.family, QLatin1String(""), 0, &desc); - if (desc.family == 0 && desc.foundry == 0 && desc.style == 0) { - continue; - } - engine = loadEngine(script, def, desc.family, desc.foundry, desc.style, desc.size); - if (engine) { - initFontDef(desc, def, &engine->fontDef, engine->type() == QFontEngine::Multi); - } + do { + index = match(script, def, def.family, QLatin1String(""), 0, &desc, blackListed); + if (index >= 0) { + QFontDef loadDef = def; + if (loadDef.family.isEmpty()) + loadDef.family = desc.family->name; + engine = loadEngine(script, loadDef, desc.family, desc.foundry, desc.style, desc.size); + if (engine) + initFontDef(desc, loadDef, &engine->fontDef, engine->type() == QFontEngine::Multi); + else + blackListed.append(index); + } + } while (index >= 0 && !engine); } } } diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index 7d1afbbfb6..303c85ce75 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -208,8 +208,7 @@ Q_AUTOTEST_EXPORT QList QFontEngine_stopCollectingEngines() QFontEngine::QFontEngine() : ref(0), font_(0), font_destroy_func(0), - face_(0), face_destroy_func(0), - smoothScalable(false) + face_(0), face_destroy_func(0) { cache_cost = 0; fsType = 0; diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h index 07be498764..c181d61d73 100644 --- a/src/gui/text/qfontengine_p.h +++ b/src/gui/text/qfontengine_p.h @@ -302,8 +302,6 @@ public: inline QVariant userData() const { return m_userData; } - bool smoothScalable; - protected: QFixed lastRightBearing(const QGlyphLayout &glyphs, bool round = false); diff --git a/src/network/kernel/qnetworkinterface_unix.cpp b/src/network/kernel/qnetworkinterface_unix.cpp index 01c082059f..d3c830a66f 100644 --- a/src/network/kernel/qnetworkinterface_unix.cpp +++ b/src/network/kernel/qnetworkinterface_unix.cpp @@ -277,18 +277,18 @@ static QList interfaceListing() } } - // Get the interface netmask - if (qt_safe_ioctl(socket, SIOCGIFNETMASK, &req) >= 0) { - sockaddr *sa = &req.ifr_addr; - entry.setNetmask(addressFromSockaddr(sa)); - } - // Get the address of the interface if (qt_safe_ioctl(socket, SIOCGIFADDR, &req) >= 0) { sockaddr *sa = &req.ifr_addr; entry.setIp(addressFromSockaddr(sa)); } + // Get the interface netmask + if (qt_safe_ioctl(socket, SIOCGIFNETMASK, &req) >= 0) { + sockaddr *sa = &req.ifr_addr; + entry.setNetmask(addressFromSockaddr(sa)); + } + iface->addressEntries << entry; } diff --git a/src/plugins/bearer/corewlan/qcorewlanengine.mm b/src/plugins/bearer/corewlan/qcorewlanengine.mm index b0ed4076da..dc2920360d 100644 --- a/src/plugins/bearer/corewlan/qcorewlanengine.mm +++ b/src/plugins/bearer/corewlan/qcorewlanengine.mm @@ -71,7 +71,7 @@ extern "C" { // Otherwise it won't find CWKeychain* symbols at link time QCoreWlanEngine *engine; NSLock *locker; } -- (void)notificationHandler;//:(NSNotification *)notification; +- (void)notificationHandler:(NSNotification *)notification; - (void)remove; - (void)setEngine:(QCoreWlanEngine *)coreEngine; - (QCoreWlanEngine *)engine; @@ -120,8 +120,9 @@ extern "C" { // Otherwise it won't find CWKeychain* symbols at link time [locker unlock]; } -- (void)notificationHandler//:(NSNotification *)notification +- (void)notificationHandler:(NSNotification *)notification { + Q_UNUSED(notification); engine->requestUpdate(); } @end diff --git a/src/plugins/bearer/corewlan/qcorewlanengine_10_6.mm b/src/plugins/bearer/corewlan/qcorewlanengine_10_6.mm index 1b95ae29ad..7044e9696b 100644 --- a/src/plugins/bearer/corewlan/qcorewlanengine_10_6.mm +++ b/src/plugins/bearer/corewlan/qcorewlanengine_10_6.mm @@ -48,7 +48,7 @@ QCoreWlanEngine *engine; NSLock *locker; } -- (void)notificationHandler;//:(NSNotification *)notification; +- (void)notificationHandler:(NSNotification *)notification; - (void)remove; - (void)setEngine:(QCoreWlanEngine *)coreEngine; - (QCoreWlanEngine *)engine; @@ -97,8 +97,9 @@ [locker unlock]; } -- (void)notificationHandler//:(NSNotification *)notification +- (void)notificationHandler:(NSNotification *)notification { + Q_UNUSED(notification); engine->requestUpdate(); } @end diff --git a/src/plugins/platforms/cocoa/qcocoadrag.h b/src/plugins/platforms/cocoa/qcocoadrag.h index 80259df600..6810a21944 100644 --- a/src/plugins/platforms/cocoa/qcocoadrag.h +++ b/src/plugins/platforms/cocoa/qcocoadrag.h @@ -55,6 +55,7 @@ class QCocoaDrag : public QPlatformDrag { public: QCocoaDrag(); + virtual ~QCocoaDrag(); virtual QMimeData *platformDropData(); virtual Qt::DropAction drag(QDrag *m_drag); diff --git a/src/plugins/platforms/cocoa/qcocoadrag.mm b/src/plugins/platforms/cocoa/qcocoadrag.mm index a37552d844..a22830f64e 100644 --- a/src/plugins/platforms/cocoa/qcocoadrag.mm +++ b/src/plugins/platforms/cocoa/qcocoadrag.mm @@ -53,9 +53,15 @@ QCocoaDrag::QCocoaDrag() : m_lastView = 0; } +QCocoaDrag::~QCocoaDrag() +{ + [m_lastEvent release]; +} + void QCocoaDrag::setLastMouseEvent(NSEvent *event, NSView *view) { - m_lastEvent = event; + [m_lastEvent release]; + m_lastEvent = [event copy]; m_lastView = view; } diff --git a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.h b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.h index 8a8b1d946c..16d1ffbe85 100644 --- a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.h +++ b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.h @@ -82,6 +82,7 @@ public: private: void *mDelegate; + QUrl mDir; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm index 1ad833ee44..08505d91a2 100644 --- a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm +++ b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm @@ -610,6 +610,8 @@ void QCocoaFileDialogHelper::setDirectory(const QUrl &directory) QNSOpenSavePanelDelegate *delegate = static_cast(mDelegate); if (delegate) [delegate->mSavePanel setDirectoryURL:[NSURL fileURLWithPath:QCFString::toNSString(directory.toLocalFile())]]; + else + mDir = directory; } QUrl QCocoaFileDialogHelper::directory() const @@ -619,7 +621,7 @@ QUrl QCocoaFileDialogHelper::directory() const QString path = QCFString::toQString([[delegate->mSavePanel directoryURL] path]).normalized(QString::NormalizationForm_C); return QUrl::fromLocalFile(path); } - return QUrl(); + return mDir; } void QCocoaFileDialogHelper::selectFile(const QUrl &filename) @@ -707,7 +709,7 @@ void QCocoaFileDialogHelper::createNSOpenSavePanelDelegate() QCocoaAutoReleasePool pool; const SharedPointerFileDialogOptions &opts = options(); const QList selectedFiles = opts->initiallySelectedFiles(); - const QUrl directory = opts->initialDirectory(); + const QUrl directory = mDir.isEmpty() ? opts->initialDirectory() : mDir; const bool selectDir = selectedFiles.isEmpty(); QString selection(selectDir ? directory.toLocalFile() : selectedFiles.front().toLocalFile()); QNSOpenSavePanelDelegate *delegate = [[QNSOpenSavePanelDelegate alloc] diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index 4da47f4f1f..b5b9cec2be 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -522,6 +522,20 @@ void QCocoaWindow::setWindowFlags(Qt::WindowFlags flags) if (!(styleMask & NSBorderlessWindowMask)) { setWindowTitle(window()->title()); } + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7) { + Qt::WindowType type = window()->type(); + if ((type & Qt::Popup) != Qt::Popup && (type & Qt::Dialog) != Qt::Dialog) { + NSWindowCollectionBehavior behavior = [m_nsWindow collectionBehavior]; + if (flags & Qt::WindowFullscreenButtonHint) + behavior |= NSWindowCollectionBehaviorFullScreenPrimary; + else + behavior &= ~NSWindowCollectionBehaviorFullScreenPrimary; + [m_nsWindow setCollectionBehavior:behavior]; + } + } +#endif } m_windowFlags = flags; @@ -871,8 +885,6 @@ NSWindow * QCocoaWindow::createNSWindow() // before the window is shown and needs a proper window.). if ((type & Qt::Popup) == Qt::Popup) [window setHasShadow:YES]; - else - setWindowShadow(flags); [window setHidesOnDeactivate: NO]; #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 @@ -894,14 +906,6 @@ NSWindow * QCocoaWindow::createNSWindow() defer:NO]; // Deferring window creation breaks OpenGL (the GL context is set up // before the window is shown and needs a proper window.). window->m_cocoaPlatformWindow = this; - setWindowShadow(flags); - -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 - if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7) { - if (flags & Qt::WindowFullscreenButtonHint) - [window setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; - } -#endif createdWindow = window; } diff --git a/src/plugins/platforms/qnx/qqnxnativeinterface.cpp b/src/plugins/platforms/qnx/qqnxnativeinterface.cpp index 6e7fc35a82..e468b051cd 100644 --- a/src/plugins/platforms/qnx/qqnxnativeinterface.cpp +++ b/src/plugins/platforms/qnx/qqnxnativeinterface.cpp @@ -54,11 +54,13 @@ QT_BEGIN_NAMESPACE void *QQnxNativeInterface::nativeResourceForWindow(const QByteArray &resource, QWindow *window) { if (resource == "windowGroup" && window && window->screen()) { - const QQnxScreen * const screen = static_cast(window->screen()->handle()); + QQnxScreen * const screen = static_cast(window->screen()->handle()); if (screen) { + screen_window_t screenWindow = reinterpret_cast(window->winId()); + QQnxWindow *qnxWindow = screen->findWindow(screenWindow); // We can't just call data() instead of constData() here, since that would detach // and the lifetime of the char * would not be long enough. Therefore the const_cast. - return const_cast(screen->rootWindow()->groupName().constData()); + return qnxWindow ? const_cast(qnxWindow->groupName().constData()) : 0; } } diff --git a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp index 7407d88f8b..d81848fcc7 100644 --- a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp +++ b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp @@ -276,7 +276,7 @@ bool QWindowsFontEngineDirectWrite::getSfntTableData(uint tag, uchar *buffer, ui UINT32 tableSize; void *tableContext = 0; BOOL exists; - HRESULT hr = m_directWriteFontFace->TryGetFontTable(qbswap(tag) + HRESULT hr = m_directWriteFontFace->TryGetFontTable(qbswap(tag), &tableData, &tableSize, &tableContext, &exists); if (SUCCEEDED(hr)) { diff --git a/src/plugins/platforms/windows/qwindowsglcontext.cpp b/src/plugins/platforms/windows/qwindowsglcontext.cpp index 93f2b53672..d63149e4ce 100644 --- a/src/plugins/platforms/windows/qwindowsglcontext.cpp +++ b/src/plugins/platforms/windows/qwindowsglcontext.cpp @@ -589,7 +589,7 @@ static HGLRC createContext(const QOpenGLStaticContext &staticContext, if (requestedVersion >= 0x0300) { attributes[attribIndex++] = WGL_CONTEXT_FLAGS_ARB; attributes[attribIndex] = 0; - if (format.testOption(QSurfaceFormat::DeprecatedFunctions)) + if (!format.testOption(QSurfaceFormat::DeprecatedFunctions)) attributes[attribIndex] |= WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB; if (format.testOption(QSurfaceFormat::DebugContext)) attributes[attribIndex] |= WGL_CONTEXT_DEBUG_BIT_ARB; diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp index aeda1e11d1..7d69564c57 100644 --- a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp @@ -76,7 +76,7 @@ static int resourceType(const QByteArray &key) static const QByteArray names[] = { // match QXcbNativeInterface::ResourceType QByteArrayLiteral("display"), QByteArrayLiteral("egldisplay"), QByteArrayLiteral("connection"), QByteArrayLiteral("screen"), - QByteArrayLiteral("graphicsdevice"), QByteArrayLiteral("eglcontext"), + QByteArrayLiteral("eglcontext"), QByteArrayLiteral("glxcontext"), QByteArrayLiteral("apptime"), QByteArrayLiteral("appusertime"), QByteArrayLiteral("hintstyle"), QByteArrayLiteral("startupid"), QByteArrayLiteral("traywindow"), @@ -212,7 +212,7 @@ void *QXcbNativeInterface::nativeResourceForWindow(const QByteArray &resourceStr result = connectionForWindow(window); break; case Screen: - result = qPlatformScreenForWindow(window); + result = screenForWindow(window); break; default: break; diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.h b/src/plugins/platforms/xcb/qxcbnativeinterface.h index aec78087f5..9c4fa44d3b 100644 --- a/src/plugins/platforms/xcb/qxcbnativeinterface.h +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.h @@ -62,7 +62,6 @@ public: EglDisplay, Connection, Screen, - GraphicsDevice, EglContext, GLXContext, AppTime, @@ -90,7 +89,6 @@ public: void *eglDisplayForWindow(QWindow *window); void *connectionForWindow(QWindow *window); void *screenForWindow(QWindow *window); - void *graphicsDeviceForWindow(QWindow *window); void *appTime(const QXcbScreen *screen); void *appUserTime(const QXcbScreen *screen); void *getTimestamp(const QXcbScreen *screen); diff --git a/src/plugins/platforms/xcb/xcb-plugin.pro b/src/plugins/platforms/xcb/xcb-plugin.pro index 4f69ca8aab..49a1c1b320 100644 --- a/src/plugins/platforms/xcb/xcb-plugin.pro +++ b/src/plugins/platforms/xcb/xcb-plugin.pro @@ -81,15 +81,7 @@ contains(QT_CONFIG, xcb-sm) { } contains(QT_CONFIG, opengl) { - contains(QT_CONFIG, opengles2) { - DEFINES += XCB_USE_EGL - CONFIG += egl - HEADERS += qxcbeglsurface.h - - # EGL on MeeGo 1.2 Harmattan needs this macro to map EGLNativeDisplayType - # and other types to the correct X11 types - DEFINES += SUPPORT_X11 - } else:contains(QT_CONFIG, xcb-xlib) { + contains(QT_CONFIG, xcb-xlib):contains(QT_CONFIG, glx) { DEFINES += XCB_USE_GLX HEADERS += qglxintegration.h SOURCES += qglxintegration.cpp @@ -98,6 +90,14 @@ contains(QT_CONFIG, opengl) { DEFINES += XCB_HAS_XCB_GLX LIBS += -lxcb-glx } + } else:contains(QT_CONFIG, egl) { + DEFINES += XCB_USE_EGL + CONFIG += egl + HEADERS += qxcbeglsurface.h + + # EGL on MeeGo 1.2 Harmattan needs this macro to map EGLNativeDisplayType + # and other types to the correct X11 types + DEFINES += SUPPORT_X11 } } diff --git a/src/printsupport/kernel/qprinter.cpp b/src/printsupport/kernel/qprinter.cpp index 0905cbb59f..819f9343f7 100644 --- a/src/printsupport/kernel/qprinter.cpp +++ b/src/printsupport/kernel/qprinter.cpp @@ -55,10 +55,7 @@ #include - -#ifndef QT_NO_PDF #include "qprintengine_pdf_p.h" -#endif #include #include @@ -618,8 +615,6 @@ QPrinter::~QPrinter() */ void QPrinter::setOutputFormat(OutputFormat format) { - -#ifndef QT_NO_PDF Q_D(QPrinter); if (d->validPrinter && d->outputFormat == format) return; @@ -651,9 +646,6 @@ void QPrinter::setOutputFormat(OutputFormat format) if (d->outputFormat == QPrinter::PdfFormat) d->validPrinter = true; -#else - Q_UNUSED(format); -#endif } /*! diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp index 0e20cf539e..1b1cb2ac91 100644 --- a/src/sql/drivers/mysql/qsql_mysql.cpp +++ b/src/sql/drivers/mysql/qsql_mysql.cpp @@ -857,7 +857,7 @@ static MYSQL_TIME *toMySqlDate(QDate date, QTime time, QVariant::Type type) myTime->hour = time.hour(); myTime->minute = time.minute(); myTime->second = time.second(); - myTime->second_part = time.msec(); + myTime->second_part = time.msec() * 1000; } if (type == QVariant::Date || type == QVariant::DateTime) { myTime->year = date.year(); diff --git a/src/sql/drivers/sqlite/qsql_sqlite.cpp b/src/sql/drivers/sqlite/qsql_sqlite.cpp index 0a8b71aa8a..27bc80e63f 100644 --- a/src/sql/drivers/sqlite/qsql_sqlite.cpp +++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp @@ -42,6 +42,7 @@ #include "qsql_sqlite_p.h" #include +#include #include #include #include @@ -447,6 +448,20 @@ bool QSQLiteResult::exec() case QVariant::LongLong: res = sqlite3_bind_int64(d->stmt, i + 1, value.toLongLong()); break; + case QVariant::DateTime: { + const QDateTime dateTime = value.toDateTime(); + const QString str = dateTime.toString(QStringLiteral("yyyy-MM-ddThh:mm:ss.zzz")); + res = sqlite3_bind_text16(d->stmt, i + 1, str.utf16(), + str.size() * sizeof(ushort), SQLITE_TRANSIENT); + break; + } + case QVariant::Time: { + const QTime time = value.toTime(); + const QString str = time.toString(QStringLiteral("hh:mm:ss.zzz")); + res = sqlite3_bind_text16(d->stmt, i + 1, str.utf16(), + str.size() * sizeof(ushort), SQLITE_TRANSIENT); + break; + } case QVariant::String: { // lifetime of string == lifetime of its qvariant const QString *str = static_cast(value.constData()); diff --git a/src/widgets/doc/snippets/code/src_gui_widgets_qlabel.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qlabel.cpp index 7263a72302..c7dd00407d 100644 --- a/src/widgets/doc/snippets/code/src_gui_widgets_qlabel.cpp +++ b/src/widgets/doc/snippets/code/src_gui_widgets_qlabel.cpp @@ -47,18 +47,18 @@ label->setAlignment(Qt::AlignBottom | Qt::AlignRight); //! [1] -QLineEdit* phoneEdit = new QLineEdit(this); -QLabel* phoneLabel = new QLabel("&Phone:", this); +QLineEdit *phoneEdit = new QLineEdit(this); +QLabel *phoneLabel = new QLabel("&Phone:", this); phoneLabel->setBuddy(phoneEdit); //! [1] //! [2] -QLineEdit *nameEd = new QLineEdit(this); -QLabel *nameLb = new QLabel("&Name:", this); -nameLb->setBuddy(nameEd); -QLineEdit *phoneEd = new QLineEdit(this); -QLabel *phoneLb = new QLabel("&Phone:", this); -phoneLb->setBuddy(phoneEd); +QLineEdit *nameEdit = new QLineEdit(this); +QLabel *nameLabel = new QLabel("&Name:", this); +nameLabel->setBuddy(nameEdit); +QLineEdit *phoneEdit = new QLineEdit(this); +QLabel *phoneLabel = new QLabel("&Phone:", this); +phoneLabel->setBuddy(phoneEdit); // (layout setup not shown) //! [2] diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp index a4adb3d20b..04047d8d0a 100644 --- a/src/widgets/graphicsview/qgraphicsitem.cpp +++ b/src/widgets/graphicsview/qgraphicsitem.cpp @@ -1414,7 +1414,10 @@ QGraphicsItem::~QGraphicsItem() QObjectPrivate *p = QObjectPrivate::get(o); p->wasDeleted = true; if (p->declarativeData) { - QAbstractDeclarativeData::destroyed(p->declarativeData, o); + if (QAbstractDeclarativeData::destroyed) + QAbstractDeclarativeData::destroyed(p->declarativeData, o); + if (QAbstractDeclarativeData::destroyed_qml1) + QAbstractDeclarativeData::destroyed_qml1(p->declarativeData, o); p->declarativeData = 0; } } diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 0d8e20ca0c..a395785650 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -1464,7 +1464,10 @@ QWidget::~QWidget() } if (d->declarativeData) { - QAbstractDeclarativeData::destroyed(d->declarativeData, this); + if (QAbstractDeclarativeData::destroyed) + QAbstractDeclarativeData::destroyed(d->declarativeData, this); + if (QAbstractDeclarativeData::destroyed_qml1) + QAbstractDeclarativeData::destroyed_qml1(d->declarativeData, this); d->declarativeData = 0; // don't activate again in ~QObject } diff --git a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp index b020a50346..42c360f2d8 100644 --- a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp +++ b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp @@ -507,32 +507,26 @@ void tst_QSettings::ctor() QCOMPARE(settings1.value("%General/%General").toInt(), 11); /* - Test that the organization and product parameters is - case-insensitive on Windows and Mac, case-sensitive on - Unix. + Test that the organization and product parameters are + case-insensitive on case-insensitive file systems. */ QSettings settings5(format, QSettings::UserScope, "SoftWare.ORG", "killerApp"); + + bool caseSensitive = true; +#if defined(Q_OS_MAC) if (format == QSettings::NativeFormat) { -#if defined(Q_OS_WIN) || defined(Q_OS_DARWIN) -# ifdef Q_OS_OSX - if (QSysInfo::MacintoshVersion == QSysInfo::MV_10_8) - QEXPECT_FAIL("native", "See QTBUG-32655", Continue); -# endif // Q_OS_OSX - QCOMPARE(settings5.value("key 1").toString(), QString("gurgle")); -#else - QVERIFY(!settings5.contains("key 1")); -#endif + // more details in QMacSettingsPrivate::QMacSettingsPrivate(), organization was comify()-ed + caseSensitive = settings5.fileName().contains("SoftWare.ORG");; } else { -#if defined(Q_OS_WIN) || defined(Q_OS_DARWIN) -# ifdef Q_OS_OSX - if (QSysInfo::MacintoshVersion == QSysInfo::MV_10_8) - QEXPECT_FAIL("", "See QTBUG-32655", Continue); -# endif // Q_OS_OSX - QCOMPARE(settings5.value("key 1").toString(), QString("gurgle")); -#else - QVERIFY(!settings5.contains("key 1")); -#endif + caseSensitive = pathconf(QDir::currentPath().toLatin1().constData(), _PC_CASE_SENSITIVE); } +#elif defined(Q_OS_WIN32) + caseSensitive = false; +#endif + if (caseSensitive) + QVERIFY(!settings5.contains("key 1")); + else + QVERIFY(settings5.contains("key 1")); } { @@ -3168,6 +3162,11 @@ void tst_QSettings::rainersSyncBugOnMac() { QFETCH(QSettings::Format, format); +#ifdef Q_OS_OSX + if (format == QSettings::NativeFormat) + QSKIP("OSX does not support direct reads from and writes to .plist files, due to caching and background syncing. See QTBUG-34899."); +#endif + QString fileName; { @@ -3183,10 +3182,6 @@ void tst_QSettings::rainersSyncBugOnMac() { QSettings s3(format, QSettings::UserScope, "software.org", "KillerAPP"); -#ifdef Q_OS_OSX - if (QSysInfo::MacintoshVersion == QSysInfo::MV_10_8) - QEXPECT_FAIL("native", "See QTBUG-32655", Continue); -#endif QCOMPARE(s3.value("key1", 30).toInt(), 25); } } diff --git a/tests/auto/corelib/kernel/qsystemsemaphore/test/tst_qsystemsemaphore.cpp b/tests/auto/corelib/kernel/qsystemsemaphore/test/tst_qsystemsemaphore.cpp index d2b6848dab..9e33f56a34 100644 --- a/tests/auto/corelib/kernel/qsystemsemaphore/test/tst_qsystemsemaphore.cpp +++ b/tests/auto/corelib/kernel/qsystemsemaphore/test/tst_qsystemsemaphore.cpp @@ -65,6 +65,7 @@ private slots: void basicacquire(); void complexacquire(); + void release(); #ifndef QT_NO_PROCESS void basicProcesses(); @@ -145,12 +146,37 @@ void tst_QSystemSemaphore::complexacquire() { QSystemSemaphore sem("QSystemSemaphore_complexacquire", 2, QSystemSemaphore::Create); QVERIFY(sem.acquire()); + QCOMPARE(sem.error(), QSystemSemaphore::NoError); QVERIFY(sem.release()); + QCOMPARE(sem.error(), QSystemSemaphore::NoError); QVERIFY(sem.acquire()); + QCOMPARE(sem.error(), QSystemSemaphore::NoError); QVERIFY(sem.release()); + QCOMPARE(sem.error(), QSystemSemaphore::NoError); QVERIFY(sem.acquire()); + QCOMPARE(sem.error(), QSystemSemaphore::NoError); QVERIFY(sem.acquire()); + QCOMPARE(sem.error(), QSystemSemaphore::NoError); QVERIFY(sem.release()); + QCOMPARE(sem.error(), QSystemSemaphore::NoError); + QVERIFY(sem.release()); + QCOMPARE(sem.error(), QSystemSemaphore::NoError); + QCOMPARE(sem.errorString(), QString()); +} + +void tst_QSystemSemaphore::release() +{ + QSystemSemaphore sem("QSystemSemaphore_release", 0, QSystemSemaphore::Create); + QVERIFY(sem.release()); + QCOMPARE(sem.error(), QSystemSemaphore::NoError); + QVERIFY(sem.release()); + QCOMPARE(sem.error(), QSystemSemaphore::NoError); + QVERIFY(sem.acquire()); + QCOMPARE(sem.error(), QSystemSemaphore::NoError); + QVERIFY(sem.acquire()); + QCOMPARE(sem.error(), QSystemSemaphore::NoError); + QVERIFY(sem.release()); + QCOMPARE(sem.error(), QSystemSemaphore::NoError); QVERIFY(sem.release()); QCOMPARE(sem.error(), QSystemSemaphore::NoError); QCOMPARE(sem.errorString(), QString());