diff options
Diffstat (limited to 'src')
114 files changed, 467 insertions, 204 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp index 3d27548504..f567f47525 100644 --- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp +++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp @@ -61,16 +61,19 @@ SurfaceD3D::SurfaceD3D(RendererD3D *renderer, mDepthStencilFormat(config->depthStencilFormat), mSwapChain(nullptr), mSwapIntervalDirty(true), + mWindowSubclassed(false), mNativeWindow(window, config, directComposition == EGL_TRUE), mWidth(width), mHeight(height), mSwapInterval(1), mShareHandle(reinterpret_cast<HANDLE *>(shareHandle)) { + subclassWindow(); } SurfaceD3D::~SurfaceD3D() { + unsubclassWindow(); releaseSwapChain(); } @@ -243,6 +246,90 @@ egl::Error SurfaceD3D::swapRect(EGLint x, EGLint y, EGLint width, EGLint height) return egl::Error(EGL_SUCCESS); } +#if !defined(ANGLE_ENABLE_WINDOWS_STORE) +#define kSurfaceProperty _TEXT("Egl::SurfaceOwner") +#define kParentWndProc _TEXT("Egl::SurfaceParentWndProc") + +static LRESULT CALLBACK SurfaceWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) +{ + if (message == WM_SIZE) + { + SurfaceD3D* surf = reinterpret_cast<SurfaceD3D*>(GetProp(hwnd, kSurfaceProperty)); + if(surf) + { + surf->checkForOutOfDateSwapChain(); + } + } + WNDPROC prevWndFunc = reinterpret_cast<WNDPROC >(GetProp(hwnd, kParentWndProc)); + return CallWindowProc(prevWndFunc, hwnd, message, wparam, lparam); +} +#endif + +void SurfaceD3D::subclassWindow() +{ +#if !defined(ANGLE_ENABLE_WINDOWS_STORE) + HWND window = mNativeWindow.getNativeWindow(); + if (!window) + { + return; + } + + DWORD processId; + DWORD threadId = GetWindowThreadProcessId(window, &processId); + if (processId != GetCurrentProcessId() || threadId != GetCurrentThreadId()) + { + return; + } + + SetLastError(0); + LONG_PTR oldWndProc = SetWindowLongPtr(window, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(SurfaceWindowProc)); + if(oldWndProc == 0 && GetLastError() != ERROR_SUCCESS) + { + mWindowSubclassed = false; + return; + } + + SetProp(window, kSurfaceProperty, reinterpret_cast<HANDLE>(this)); + SetProp(window, kParentWndProc, reinterpret_cast<HANDLE>(oldWndProc)); + mWindowSubclassed = true; +#endif +} + +void SurfaceD3D::unsubclassWindow() +{ + if (!mWindowSubclassed) + { + return; + } + +#if !defined(ANGLE_ENABLE_WINDOWS_STORE) + HWND window = mNativeWindow.getNativeWindow(); + if (!window) + { + return; + } + + // un-subclass + LONG_PTR parentWndFunc = reinterpret_cast<LONG_PTR>(GetProp(window, kParentWndProc)); + + // Check the windowproc is still SurfaceWindowProc. + // If this assert fails, then it is likely the application has subclassed the + // hwnd as well and did not unsubclass before destroying its EGL context. The + // application should be modified to either subclass before initializing the + // EGL context, or to unsubclass before destroying the EGL context. + if(parentWndFunc) + { + LONG_PTR prevWndFunc = SetWindowLongPtr(window, GWLP_WNDPROC, parentWndFunc); + UNUSED_ASSERTION_VARIABLE(prevWndFunc); + ASSERT(prevWndFunc == reinterpret_cast<LONG_PTR>(SurfaceWindowProc)); + } + + RemoveProp(window, kSurfaceProperty); + RemoveProp(window, kParentWndProc); +#endif + mWindowSubclassed = false; +} + bool SurfaceD3D::checkForOutOfDateSwapChain() { RECT client; diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h index b925bfc8cc..67d408ddd9 100644 --- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h +++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h @@ -82,6 +82,9 @@ class SurfaceD3D : public SurfaceImpl egl::Error resetSwapChain(int backbufferWidth, int backbufferHeight); egl::Error resizeSwapChain(int backbufferWidth, int backbufferHeight); + void subclassWindow(); + void unsubclassWindow(); + RendererD3D *mRenderer; egl::Display *mDisplay; @@ -93,6 +96,7 @@ class SurfaceD3D : public SurfaceImpl SwapChainD3D *mSwapChain; bool mSwapIntervalDirty; + bool mWindowSubclassed; // Indicates whether we successfully subclassed mWindow for WM_RESIZE hooking NativeWindow mNativeWindow; // Handler for the Window that the surface is created for. EGLint mWidth; diff --git a/src/3rdparty/libjpeg.pri b/src/3rdparty/libjpeg.pri index 62077c99a9..118cc60bcc 100644 --- a/src/3rdparty/libjpeg.pri +++ b/src/3rdparty/libjpeg.pri @@ -1,9 +1,3 @@ -wince { - DEFINES += NO_GETENV - contains(CE_ARCH,x86):CONFIG -= stl exceptions - contains(CE_ARCH,x86):CONFIG += exceptions_off -} - winrt: DEFINES += NO_GETENV #Disable warnings in 3rdparty code due to unused arguments diff --git a/src/3rdparty/zlib.pri b/src/3rdparty/zlib.pri index 363461220b..ccddb181e1 100644 --- a/src/3rdparty/zlib.pri +++ b/src/3rdparty/zlib.pri @@ -1,4 +1,3 @@ -wince: DEFINES += NO_ERRNO_H INCLUDEPATH = $$PWD/zlib $$INCLUDEPATH SOURCES+= \ $$PWD/zlib/adler32.c \ diff --git a/src/angle/patches/0014-ANGLE-Fix-flickering-on-resize-when-D3D9-is-used.patch b/src/angle/patches/0014-ANGLE-Fix-flickering-on-resize-when-D3D9-is-used.patch new file mode 100644 index 0000000000..e389219976 --- /dev/null +++ b/src/angle/patches/0014-ANGLE-Fix-flickering-on-resize-when-D3D9-is-used.patch @@ -0,0 +1,157 @@ +From 0a6fe2a93f451997d01e5e326846e0911d22622b Mon Sep 17 00:00:00 2001 +From: Oliver Wolff <oliver.wolff@qt.io> +Date: Wed, 31 May 2017 15:50:28 +0200 +Subject: [PATCH] ANGLE: Fix flickering on resize when D3D9 is used + +By reverting ANGLE change d3b84ab51db09de238459b0dff2e8420c09aabf3 +we get rid of the flickering that happens on resize when D3D9 is +used. The issue that was fixed there is not relevant in Qt's +context so it is safe to revert the change. + +Task-number: QTBUG-59893 +Change-Id: I9306314b892612fbd1f7a058a2e606aedc0367bb +--- + .../angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp | 87 ++++++++++++++++++++++ + .../angle/src/libANGLE/renderer/d3d/SurfaceD3D.h | 4 + + 2 files changed, 91 insertions(+) + +diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp +index 3d27548..f567f47 100644 +--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp ++++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp +@@ -61,16 +61,19 @@ SurfaceD3D::SurfaceD3D(RendererD3D *renderer, + mDepthStencilFormat(config->depthStencilFormat), + mSwapChain(nullptr), + mSwapIntervalDirty(true), ++ mWindowSubclassed(false), + mNativeWindow(window, config, directComposition == EGL_TRUE), + mWidth(width), + mHeight(height), + mSwapInterval(1), + mShareHandle(reinterpret_cast<HANDLE *>(shareHandle)) + { ++ subclassWindow(); + } + + SurfaceD3D::~SurfaceD3D() + { ++ unsubclassWindow(); + releaseSwapChain(); + } + +@@ -243,6 +246,90 @@ egl::Error SurfaceD3D::swapRect(EGLint x, EGLint y, EGLint width, EGLint height) + return egl::Error(EGL_SUCCESS); + } + ++#if !defined(ANGLE_ENABLE_WINDOWS_STORE) ++#define kSurfaceProperty _TEXT("Egl::SurfaceOwner") ++#define kParentWndProc _TEXT("Egl::SurfaceParentWndProc") ++ ++static LRESULT CALLBACK SurfaceWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) ++{ ++ if (message == WM_SIZE) ++ { ++ SurfaceD3D* surf = reinterpret_cast<SurfaceD3D*>(GetProp(hwnd, kSurfaceProperty)); ++ if(surf) ++ { ++ surf->checkForOutOfDateSwapChain(); ++ } ++ } ++ WNDPROC prevWndFunc = reinterpret_cast<WNDPROC >(GetProp(hwnd, kParentWndProc)); ++ return CallWindowProc(prevWndFunc, hwnd, message, wparam, lparam); ++} ++#endif ++ ++void SurfaceD3D::subclassWindow() ++{ ++#if !defined(ANGLE_ENABLE_WINDOWS_STORE) ++ HWND window = mNativeWindow.getNativeWindow(); ++ if (!window) ++ { ++ return; ++ } ++ ++ DWORD processId; ++ DWORD threadId = GetWindowThreadProcessId(window, &processId); ++ if (processId != GetCurrentProcessId() || threadId != GetCurrentThreadId()) ++ { ++ return; ++ } ++ ++ SetLastError(0); ++ LONG_PTR oldWndProc = SetWindowLongPtr(window, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(SurfaceWindowProc)); ++ if(oldWndProc == 0 && GetLastError() != ERROR_SUCCESS) ++ { ++ mWindowSubclassed = false; ++ return; ++ } ++ ++ SetProp(window, kSurfaceProperty, reinterpret_cast<HANDLE>(this)); ++ SetProp(window, kParentWndProc, reinterpret_cast<HANDLE>(oldWndProc)); ++ mWindowSubclassed = true; ++#endif ++} ++ ++void SurfaceD3D::unsubclassWindow() ++{ ++ if (!mWindowSubclassed) ++ { ++ return; ++ } ++ ++#if !defined(ANGLE_ENABLE_WINDOWS_STORE) ++ HWND window = mNativeWindow.getNativeWindow(); ++ if (!window) ++ { ++ return; ++ } ++ ++ // un-subclass ++ LONG_PTR parentWndFunc = reinterpret_cast<LONG_PTR>(GetProp(window, kParentWndProc)); ++ ++ // Check the windowproc is still SurfaceWindowProc. ++ // If this assert fails, then it is likely the application has subclassed the ++ // hwnd as well and did not unsubclass before destroying its EGL context. The ++ // application should be modified to either subclass before initializing the ++ // EGL context, or to unsubclass before destroying the EGL context. ++ if(parentWndFunc) ++ { ++ LONG_PTR prevWndFunc = SetWindowLongPtr(window, GWLP_WNDPROC, parentWndFunc); ++ UNUSED_ASSERTION_VARIABLE(prevWndFunc); ++ ASSERT(prevWndFunc == reinterpret_cast<LONG_PTR>(SurfaceWindowProc)); ++ } ++ ++ RemoveProp(window, kSurfaceProperty); ++ RemoveProp(window, kParentWndProc); ++#endif ++ mWindowSubclassed = false; ++} ++ + bool SurfaceD3D::checkForOutOfDateSwapChain() + { + RECT client; +diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h +index b925bfc..67d408d 100644 +--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h ++++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h +@@ -82,6 +82,9 @@ class SurfaceD3D : public SurfaceImpl + egl::Error resetSwapChain(int backbufferWidth, int backbufferHeight); + egl::Error resizeSwapChain(int backbufferWidth, int backbufferHeight); + ++ void subclassWindow(); ++ void unsubclassWindow(); ++ + RendererD3D *mRenderer; + egl::Display *mDisplay; + +@@ -93,6 +96,7 @@ class SurfaceD3D : public SurfaceImpl + + SwapChainD3D *mSwapChain; + bool mSwapIntervalDirty; ++ bool mWindowSubclassed; // Indicates whether we successfully subclassed mWindow for WM_RESIZE hooking + + NativeWindow mNativeWindow; // Handler for the Window that the surface is created for. + EGLint mWidth; +-- +2.10.2.windows.1 + diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index 9c05b9650c..0e99daeb56 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -96,6 +96,12 @@ #include "archdetect.cpp" +#ifdef qFatal +// the qFatal in this file are just redirections from elsewhere, so +// don't capture any context again +# undef qFatal +#endif + QT_BEGIN_NAMESPACE #if !QT_DEPRECATED_SINCE(5, 0) @@ -3056,13 +3062,20 @@ QString QSysInfo::machineHostName() If this macro is used outside a function, the behavior is undefined. */ -/* - The Q_CHECK_PTR macro calls this function if an allocation check - fails. +/*! + \internal + The Q_CHECK_PTR macro calls this function if an allocation check + fails. */ -void qt_check_pointer(const char *n, int l) +void qt_check_pointer(const char *n, int l) Q_DECL_NOTHROW { - qFatal("In file %s, line %d: Out of memory", n, l); + // make separate printing calls so that the first one may flush; + // the second one could want to allocate memory (fputs prints a + // newline and stderr auto-flushes). + fputs("Out of memory", stderr); + fprintf(stderr, " in %s, line %d\n", n, l); + + std::terminate(); } /* @@ -3092,7 +3105,7 @@ Q_NORETURN void qTerminate() Q_DECL_NOTHROW */ void qt_assert(const char *assertion, const char *file, int line) Q_DECL_NOTHROW { - qFatal("ASSERT: \"%s\" in file %s, line %d", assertion, file, line); + QMessageLogger(file, line, nullptr).fatal("ASSERT: \"%s\" in file %s, line %d", assertion, file, line); } /* @@ -3100,7 +3113,7 @@ void qt_assert(const char *assertion, const char *file, int line) Q_DECL_NOTHROW */ void qt_assert_x(const char *where, const char *what, const char *file, int line) Q_DECL_NOTHROW { - qFatal("ASSERT failure in %s: \"%s\", file %s, line %d", where, what, file, line); + QMessageLogger(file, line, nullptr).fatal("ASSERT failure in %s: \"%s\", file %s, line %d", where, what, file, line); } diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index dccbe52ab3..429cd63ab6 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -771,7 +771,7 @@ template <> class QStaticAssertFailure<true> {}; #define Q_STATIC_ASSERT_X(Condition, Message) Q_STATIC_ASSERT(Condition) #endif -Q_CORE_EXPORT void qt_check_pointer(const char *, int); +Q_NORETURN Q_CORE_EXPORT void qt_check_pointer(const char *, int) Q_DECL_NOTHROW; Q_CORE_EXPORT void qBadAlloc(); #ifdef QT_NO_EXCEPTIONS diff --git a/src/corelib/io/qfilesystementry.cpp b/src/corelib/io/qfilesystementry.cpp index de4c852068..cbff17d0f1 100644 --- a/src/corelib/io/qfilesystementry.cpp +++ b/src/corelib/io/qfilesystementry.cpp @@ -297,23 +297,27 @@ bool QFileSystemEntry::isAbsolute() const bool QFileSystemEntry::isDriveRoot() const { resolveFilePath(); + return QFileSystemEntry::isDriveRootPath(m_filePath); +} + +bool QFileSystemEntry::isDriveRootPath(const QString &path) +{ #ifndef Q_OS_WINRT - return (m_filePath.length() == 3 - && m_filePath.at(0).isLetter() && m_filePath.at(1) == QLatin1Char(':') - && m_filePath.at(2) == QLatin1Char('/')); + return (path.length() == 3 + && path.at(0).isLetter() && path.at(1) == QLatin1Char(':') + && path.at(2) == QLatin1Char('/')); #else // !Q_OS_WINRT - return m_filePath == QDir::rootPath(); + return path == QDir::rootPath(); #endif // !Q_OS_WINRT } -#endif +#endif // Q_OS_WIN -bool QFileSystemEntry::isRoot() const +bool QFileSystemEntry::isRootPath(const QString &path) { - resolveFilePath(); - if (m_filePath == QLatin1String("/") + if (path == QLatin1String("/") #if defined(Q_OS_WIN) - || isDriveRoot() - || isUncRoot(m_filePath) + || isDriveRootPath(path) + || isUncRoot(path) #endif ) return true; @@ -321,6 +325,12 @@ bool QFileSystemEntry::isRoot() const return false; } +bool QFileSystemEntry::isRoot() const +{ + resolveFilePath(); + return isRootPath(m_filePath); +} + bool QFileSystemEntry::isEmpty() const { return m_filePath.isEmpty() && m_nativeFilePath.isEmpty(); diff --git a/src/corelib/io/qfilesystementry_p.h b/src/corelib/io/qfilesystementry_p.h index 300a375377..700696d09e 100644 --- a/src/corelib/io/qfilesystementry_p.h +++ b/src/corelib/io/qfilesystementry_p.h @@ -94,6 +94,7 @@ public: #if defined(Q_OS_WIN) bool isDriveRoot() const; + static bool isDriveRootPath(const QString &path); #endif bool isRoot() const; @@ -103,6 +104,8 @@ public: *this = QFileSystemEntry(); } + Q_CORE_EXPORT static bool isRootPath(const QString &path); + private: // creates the QString version out of the bytearray version void resolveFilePath() const; diff --git a/src/corelib/mimetypes/qmimedatabase.cpp b/src/corelib/mimetypes/qmimedatabase.cpp index fda9f01643..687f0b3e03 100644 --- a/src/corelib/mimetypes/qmimedatabase.cpp +++ b/src/corelib/mimetypes/qmimedatabase.cpp @@ -526,7 +526,7 @@ QMimeType QMimeDatabase::mimeTypeForUrl(const QUrl &url) const if (scheme.startsWith(QLatin1String("http")) || scheme == QLatin1String("mailto")) return mimeTypeForName(d->defaultMimeType()); - return mimeTypeForFile(url.path()); + return mimeTypeForFile(url.path(), MatchExtension); } /*! diff --git a/src/corelib/tools/qfreelist_p.h b/src/corelib/tools/qfreelist_p.h index a8d1132d06..2f98cf5cc1 100644 --- a/src/corelib/tools/qfreelist_p.h +++ b/src/corelib/tools/qfreelist_p.h @@ -207,7 +207,11 @@ public: template <typename T, typename ConstantsType> Q_DECL_CONSTEXPR inline QFreeList<T, ConstantsType>::QFreeList() - : _next(ConstantsType::InitialNextValue) + : +#if defined(Q_COMPILER_CONSTEXPR) + _v{}, // uniform initialization required +#endif + _next(ConstantsType::InitialNextValue) { } template <typename T, typename ConstantsType> diff --git a/src/corelib/tools/qlocale_tools.cpp b/src/corelib/tools/qlocale_tools.cpp index 762f4f36dc..3e4f37501e 100644 --- a/src/corelib/tools/qlocale_tools.cpp +++ b/src/corelib/tools/qlocale_tools.cpp @@ -370,7 +370,7 @@ double asciiToDouble(const char *num, int numLen, bool &ok, int &processed, // if a digit before any 'e' is not 0, then a non-zero number was intended. ok = false; return 0.0; - } else if (num[i] == 'e') { + } else if (num[i] == 'e' || num[i] == 'E') { break; } } diff --git a/src/dbus/dbus.pro b/src/dbus/dbus.pro index 3da35b1741..ce799e0951 100644 --- a/src/dbus/dbus.pro +++ b/src/dbus/dbus.pro @@ -9,8 +9,8 @@ qtConfig(dbus-linked) { } win32 { - wince: LIBS_PRIVATE += -lws2 - else:LIBS_PRIVATE += -lws2_32 \ + LIBS_PRIVATE += \ + -lws2_32 \ -ladvapi32 \ -lnetapi32 \ -luser32 diff --git a/src/gui/configure.json b/src/gui/configure.json index 5e85d341dd..62bf02bdbb 100644 --- a/src/gui/configure.json +++ b/src/gui/configure.json @@ -271,7 +271,7 @@ "label": "XCB Xlib", "test": "qpa/xcb-xlib", "sources": [ - { "type": "pkgConfig", "args": "X11-xcb x11 xcb" }, + { "type": "pkgConfig", "args": "x11-xcb x11 xcb" }, "-lxcb -lX11 -lX11-xcb" ] }, @@ -457,7 +457,7 @@ "features": { "accessibility-atspi-bridge": { "label": "ATSPI Bridge", - "condition": "features.accessibility && features.xcb && features.dbus && config.atspi", + "condition": "features.accessibility && features.xcb && features.dbus && libs.atspi", "output": [ "privateFeature", "feature" ] }, "angle": { diff --git a/src/gui/image/qbmphandler.cpp b/src/gui/image/qbmphandler.cpp index 324fe01414..4350a5c192 100644 --- a/src/gui/image/qbmphandler.cpp +++ b/src/gui/image/qbmphandler.cpp @@ -114,6 +114,15 @@ static QDataStream &operator>>(QDataStream &s, BMP_INFOHDR &bi) s >> bi.biCompression >> bi.biSizeImage; s >> bi.biXPelsPerMeter >> bi.biYPelsPerMeter; s >> bi.biClrUsed >> bi.biClrImportant; + if (bi.biSize >= BMP_WIN4) { + s >> bi.biRedMask >> bi.biGreenMask >> bi.biBlueMask >> bi.biAlphaMask; + s >> bi.biCSType; + for (int i = 0; i < 9; ++i) + s >> bi.biEndpoints[i]; + s >> bi.biGammaRed >> bi.biGammaGreen >> bi.biGammaBlue; + if (bi.biSize == BMP_WIN5) + s >> bi.biIntent >> bi.biProfileData >> bi.biProfileSize >> bi.biReserved; + } } else { // probably old Windows format qint16 w, h; @@ -219,53 +228,20 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, qint64 offset, int alpha_scale = 0; if (!d->isSequential()) - d->seek(startpos + BMP_FILEHDR_SIZE + (bi.biSize >= BMP_WIN4 ? BMP_WIN : bi.biSize)); // goto start of colormap or masks + d->seek(startpos + BMP_FILEHDR_SIZE + bi.biSize); // goto start of colormap or masks - if (bi.biSize >= BMP_WIN4 || (comp == BMP_BITFIELDS && (nbits == 16 || nbits == 32))) { + if (bi.biSize >= BMP_WIN4) { + red_mask = bi.biRedMask; + green_mask = bi.biGreenMask; + blue_mask = bi.biBlueMask; + alpha_mask = bi.biAlphaMask; + } else if (comp == BMP_BITFIELDS && (nbits == 16 || nbits == 32)) { if (d->read((char *)&red_mask, sizeof(red_mask)) != sizeof(red_mask)) return false; if (d->read((char *)&green_mask, sizeof(green_mask)) != sizeof(green_mask)) return false; if (d->read((char *)&blue_mask, sizeof(blue_mask)) != sizeof(blue_mask)) return false; - - // Read BMP v4+ header - if (bi.biSize >= BMP_WIN4) { - int CSType = 0; - int gamma_red = 0; - int gamma_green = 0; - int gamma_blue = 0; - int endpoints[9]; - - if (d->read((char *)&alpha_mask, sizeof(alpha_mask)) != sizeof(alpha_mask)) - return false; - if (d->read((char *)&CSType, sizeof(CSType)) != sizeof(CSType)) - return false; - if (d->read((char *)&endpoints, sizeof(endpoints)) != sizeof(endpoints)) - return false; - if (d->read((char *)&gamma_red, sizeof(gamma_red)) != sizeof(gamma_red)) - return false; - if (d->read((char *)&gamma_green, sizeof(gamma_green)) != sizeof(gamma_green)) - return false; - if (d->read((char *)&gamma_blue, sizeof(gamma_blue)) != sizeof(gamma_blue)) - return false; - - if (bi.biSize == BMP_WIN5) { - qint32 intent = 0; - qint32 profileData = 0; - qint32 profileSize = 0; - qint32 reserved = 0; - - if (d->read((char *)&intent, sizeof(intent)) != sizeof(intent)) - return false; - if (d->read((char *)&profileData, sizeof(profileData)) != sizeof(profileData)) - return false; - if (d->read((char *)&profileSize, sizeof(profileSize)) != sizeof(profileSize)) - return false; - if (d->read((char *)&reserved, sizeof(reserved)) != sizeof(reserved) || reserved != 0) - return false; - } - } } bool transp = (comp == BMP_BITFIELDS) && alpha_mask; @@ -876,7 +852,10 @@ QVariant QBmpHandler::option(ImageOption option) const case 32: case 24: case 16: - format = QImage::Format_RGB32; + if (infoHeader.biCompression == BMP_BITFIELDS && infoHeader.biSize >= BMP_WIN4 && infoHeader.biAlphaMask) + format = QImage::Format_ARGB32; + else + format = QImage::Format_RGB32; break; case 8: case 4: diff --git a/src/gui/image/qbmphandler_p.h b/src/gui/image/qbmphandler_p.h index 3e1fc3d511..56b39dd0f0 100644 --- a/src/gui/image/qbmphandler_p.h +++ b/src/gui/image/qbmphandler_p.h @@ -78,6 +78,21 @@ struct BMP_INFOHDR { // BMP information header qint32 biYPelsPerMeter; // vertical resolution qint32 biClrUsed; // number of colors used qint32 biClrImportant; // number of important colors + // V4: + quint32 biRedMask; + quint32 biGreenMask; + quint32 biBlueMask; + quint32 biAlphaMask; + qint32 biCSType; + qint32 biEndpoints[9]; + qint32 biGammaRed; + qint32 biGammaGreen; + qint32 biGammaBlue; + // V5: + qint32 biIntent; + qint32 biProfileData; + qint32 biProfileSize; + qint32 biReserved; }; // BMP-Handler, which is also able to read and write the DIB diff --git a/src/network/ssl/qsslsocket_mac.cpp b/src/network/ssl/qsslsocket_mac.cpp index 4216e2a16a..68c8ccff89 100644 --- a/src/network/ssl/qsslsocket_mac.cpp +++ b/src/network/ssl/qsslsocket_mac.cpp @@ -929,7 +929,7 @@ bool QSslSocketBackendPrivate::setSessionCertificate(QString &errorDescription, #endif QCFType<CFDictionaryRef> options = CFDictionaryCreate(nullptr, keys, values, nKeys, nullptr, nullptr); - CFArrayRef items = nullptr; + QCFType<CFArrayRef> items; OSStatus err = SecPKCS12Import(pkcs12, options, &items); if (err != noErr) { #ifdef QSSLSOCKET_DEBUG @@ -970,7 +970,7 @@ bool QSslSocketBackendPrivate::setSessionCertificate(QString &errorDescription, CFArrayAppendValue(certs, identity); - QCFType<CFArrayRef> chain((CFArrayRef)CFDictionaryGetValue(import, kSecImportItemCertChain)); + CFArrayRef chain = (CFArrayRef)CFDictionaryGetValue(import, kSecImportItemCertChain); if (chain) { for (CFIndex i = 1, e = CFArrayGetCount(chain); i < e; ++i) CFArrayAppendValue(certs, CFArrayGetValueAtIndex(chain, i)); diff --git a/src/plugins/platforms/android/androidjniaccessibility.cpp b/src/plugins/platforms/android/androidjniaccessibility.cpp index eeaecd53b4..06624415d3 100644 --- a/src/plugins/platforms/android/androidjniaccessibility.cpp +++ b/src/plugins/platforms/android/androidjniaccessibility.cpp @@ -80,6 +80,7 @@ namespace QtAndroidAccessibility static void setActive(JNIEnv */*env*/, jobject /*thiz*/, jboolean active) { + QMutexLocker lock(QtAndroid::platformInterfaceMutex()); QAndroidPlatformIntegration *platformIntegration = QtAndroid::androidPlatformIntegration(); if (platformIntegration) platformIntegration->accessibility()->setActive(active); diff --git a/src/plugins/platforms/android/androidjniinput.cpp b/src/plugins/platforms/android/androidjniinput.cpp index 75cffe3854..dabab553c2 100644 --- a/src/plugins/platforms/android/androidjniinput.cpp +++ b/src/plugins/platforms/android/androidjniinput.cpp @@ -273,6 +273,7 @@ namespace QtAndroidInput if (m_touchPoints.isEmpty()) return; + QMutexLocker lock(QtAndroid::platformInterfaceMutex()); QAndroidPlatformIntegration *platformIntegration = QtAndroid::androidPlatformIntegration(); if (!platformIntegration) return; diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index 4a24f3fb47..8b0b18a846 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -83,7 +83,7 @@ static jmethodID m_setSurfaceGeometryMethodID = nullptr; static jmethodID m_destroySurfaceMethodID = nullptr; static int m_pendingApplicationState = -1; -static QBasicMutex m_pendingAppStateMtx; +static QBasicMutex m_platformMutex; static jclass m_bitmapClass = nullptr; static jmethodID m_createBitmapMethodID = nullptr; @@ -104,7 +104,7 @@ static sem_t m_exitSemaphore, m_terminateSemaphore; QHash<int, AndroidSurfaceClient *> m_surfaces; -static QMutex m_surfacesMutex; +static QBasicMutex m_surfacesMutex; static int m_surfaceId = 1; @@ -123,28 +123,26 @@ static const char m_qtTag[] = "Qt"; static const char m_classErrorMsg[] = "Can't find class \"%s\""; static const char m_methodErrorMsg[] = "Can't find method \"%s%s\""; -static void flushPendingApplicationState(); - namespace QtAndroid { + QBasicMutex *platformInterfaceMutex() + { + return &m_platformMutex; + } + void setAndroidPlatformIntegration(QAndroidPlatformIntegration *androidPlatformIntegration) { - QMutexLocker lock(&m_surfacesMutex); m_androidPlatformIntegration = androidPlatformIntegration; // flush the pending state if necessary. - if (m_androidPlatformIntegration) { - flushPendingApplicationState(); - m_androidPlatformIntegration->flushPendingUpdates(); - } else { - QMutexLocker locker(&m_pendingAppStateMtx); - m_pendingApplicationState = -1; - } + if (m_androidPlatformIntegration && (m_pendingApplicationState != -1)) + QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationState(m_pendingApplicationState)); + + m_pendingApplicationState = -1; } QAndroidPlatformIntegration *androidPlatformIntegration() { - QMutexLocker locker(&m_surfacesMutex); return m_androidPlatformIntegration; } @@ -443,17 +441,6 @@ namespace QtAndroid } // namespace QtAndroid -// Force an update of the pending application state (state set before the platform plugin was created) -static void flushPendingApplicationState() -{ - QMutexLocker locker(&m_pendingAppStateMtx); - if (m_pendingApplicationState == -1) - return; - - QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationState(m_pendingApplicationState)); - m_pendingApplicationState = -1; -} - static jboolean startQtAndroidPlugin(JNIEnv* /*env*/, jobject /*object*//*, jobject applicationAssetManager*/) { m_androidPlatformIntegration = nullptr; @@ -628,7 +615,7 @@ static void setDisplayMetrics(JNIEnv */*env*/, jclass /*clazz*/, m_scaledDensity = scaledDensity; m_density = density; - QMutexLocker lock(&m_surfacesMutex); + QMutexLocker lock(&m_platformMutex); if (!m_androidPlatformIntegration) { QAndroidPlatformIntegration::setDefaultDisplayMetrics(desktopWidthPixels, desktopHeightPixels, @@ -670,18 +657,22 @@ static void updateWindow(JNIEnv */*env*/, jobject /*thiz*/) static void updateApplicationState(JNIEnv */*env*/, jobject /*thiz*/, jint state) { - if (!m_main || !QtAndroid::androidPlatformIntegration()) { - QMutexLocker locker(&m_pendingAppStateMtx); - m_pendingApplicationState = Qt::ApplicationState(state); + QMutexLocker lock(&m_platformMutex); + if (!m_main || !m_androidPlatformIntegration) { + m_pendingApplicationState = state; return; } - flushPendingApplicationState(); - + // We're about to call user code from the Android thread, since we don't know + //the side effects we'll unlock first! + lock.unlock(); if (state == Qt::ApplicationActive) QtAndroidPrivate::handleResume(); else if (state == Qt::ApplicationInactive) QtAndroidPrivate::handlePause(); + lock.relock(); + if (!m_androidPlatformIntegration) + return; if (state <= Qt::ApplicationInactive) { // NOTE: sometimes we will receive two consecutive suspended notifications, @@ -729,6 +720,7 @@ static void handleOrientationChanged(JNIEnv */*env*/, jobject /*thiz*/, jint new Qt::ScreenOrientation native = orientations[nativeOrientation - 1]; QAndroidPlatformIntegration::setScreenOrientation(screenOrientation, native); + QMutexLocker lock(&m_platformMutex); if (m_androidPlatformIntegration) { QPlatformScreen *screen = m_androidPlatformIntegration->screen(); QWindowSystemInterface::handleScreenOrientationChange(screen->screen(), diff --git a/src/plugins/platforms/android/androidjnimain.h b/src/plugins/platforms/android/androidjnimain.h index 170596082d..08f1d50fe3 100644 --- a/src/plugins/platforms/android/androidjnimain.h +++ b/src/plugins/platforms/android/androidjnimain.h @@ -58,9 +58,11 @@ class QWidget; class QString; class QWindow; class AndroidSurfaceClient; +class QBasicMutex; namespace QtAndroid { + QBasicMutex *platformInterfaceMutex(); QAndroidPlatformIntegration *androidPlatformIntegration(); void setAndroidPlatformIntegration(QAndroidPlatformIntegration *androidPlatformIntegration); void setQtThread(QThread *thread); diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp index 3088546148..763b294660 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.cpp +++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp @@ -143,8 +143,13 @@ void *QAndroidPlatformNativeInterface::nativeResourceForWindow(const QByteArray void QAndroidPlatformNativeInterface::customEvent(QEvent *event) { - if (event->type() == QEvent::User) - QtAndroid::setAndroidPlatformIntegration(static_cast<QAndroidPlatformIntegration *>(QGuiApplicationPrivate::platformIntegration())); + if (event->type() != QEvent::User) + return; + + QMutexLocker lock(QtAndroid::platformInterfaceMutex()); + QAndroidPlatformIntegration *api = static_cast<QAndroidPlatformIntegration *>(QGuiApplicationPrivate::platformIntegration()); + QtAndroid::setAndroidPlatformIntegration(api); + api->flushPendingUpdates(); } QAndroidPlatformIntegration::QAndroidPlatformIntegration(const QStringList ¶mList) diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.mm b/src/plugins/platforms/cocoa/qcocoamenubar.mm index 82c405baa6..4cdf004dd1 100644 --- a/src/plugins/platforms/cocoa/qcocoamenubar.mm +++ b/src/plugins/platforms/cocoa/qcocoamenubar.mm @@ -303,7 +303,23 @@ void QCocoaMenuBar::resetKnownMenuItemsToQt() // Undo the effect of redirectKnownMenuItemsToFirstResponder(): // set the menu items' actions to itemFired and their targets to // the QCocoaMenuDelegate. - updateMenuBarImmediately(); + foreach (QCocoaMenuBar *mb, static_menubars) { + foreach (QCocoaMenu *m, mb->m_menus) { + foreach (QCocoaMenuItem *i, m->items()) { + switch (i->effectiveRole()) { + case QPlatformMenuItem::CutRole: + case QPlatformMenuItem::CopyRole: + case QPlatformMenuItem::PasteRole: + case QPlatformMenuItem::SelectAllRole: + [i->nsItem() setTarget:m->nsMenu().delegate]; + [i->nsItem() setAction:@selector(itemFired:)]; + break; + default: + break; + } + } + } + } } void QCocoaMenuBar::updateMenuBarImmediately() diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp index ef893f8a63..49c11ba2b7 100644 --- a/src/plugins/platforms/windows/qwindowscontext.cpp +++ b/src/plugins/platforms/windows/qwindowscontext.cpp @@ -1118,7 +1118,7 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message, #endif } break; case QtWindows::DpiChangedEvent: { - if (GetWindowLongPtr(hwnd, GWL_STYLE) & WS_DLGFRAME) + if (platformWindow->window()->flags().testFlag(Qt::MSWindowsFixedSizeDialogHint)) return false; // Fixed-size window should not be resized platformWindow->setFlag(QWindowsWindow::WithinDpiChanged); diff --git a/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri b/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri index e6e352a21d..df471f1105 100644 --- a/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri +++ b/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri @@ -5,19 +5,10 @@ INCLUDEPATH += $$PWD/../ load(qt_build_paths) -# build with session management support -qtConfig(xcb-sm) { - DEFINES += XCB_USE_SM -} - !qtConfig(system-xcb) { - DEFINES += XCB_USE_RENDER QMAKE_USE += xcb-static xcb } else { qtConfig(xkb): QMAKE_USE += xcb_xkb - # to support custom cursors with depth > 1 - qtConfig(xcb-render) { - DEFINES += XCB_USE_RENDER - } + qtConfig(xcb-render): QMAKE_USE += xcb_render QMAKE_USE += xcb_syslibs } diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp index 40103a42d7..377066df61 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp @@ -39,7 +39,7 @@ #include "qxcbglxintegration.h" -#if defined(XCB_HAS_XCB_GLX) +#if QT_CONFIG(xcb_glx) #include <xcb/glx.h> #endif @@ -56,37 +56,34 @@ QT_BEGIN_NAMESPACE -#if defined(XCB_HAS_XCB_GLX) && XCB_GLX_MAJOR_VERSION == 1 && XCB_GLX_MINOR_VERSION < 4 - -#define XCB_GLX_BUFFER_SWAP_COMPLETE 1 - -typedef struct xcb_glx_buffer_swap_complete_event_t { - uint8_t response_type; - uint8_t pad0; - uint16_t sequence; - uint16_t event_type; - uint8_t pad1[2]; - xcb_glx_drawable_t drawable; - uint32_t ust_hi; - uint32_t ust_lo; - uint32_t msc_hi; - uint32_t msc_lo; - uint32_t sbc; -} xcb_glx_buffer_swap_complete_event_t; -#endif - -#if defined(XCB_USE_GLX) -typedef struct { - int type; - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - Drawable drawable; /* drawable on which event was requested in event mask */ - int event_type; - int64_t ust; - int64_t msc; - int64_t sbc; -} QGLXBufferSwapComplete; +#if QT_CONFIG(xcb_glx) + #if XCB_GLX_MAJOR_VERSION == 1 && XCB_GLX_MINOR_VERSION < 4 + #define XCB_GLX_BUFFER_SWAP_COMPLETE 1 + typedef struct xcb_glx_buffer_swap_complete_event_t { + uint8_t response_type; + uint8_t pad0; + uint16_t sequence; + uint16_t event_type; + uint8_t pad1[2]; + xcb_glx_drawable_t drawable; + uint32_t ust_hi; + uint32_t ust_lo; + uint32_t msc_hi; + uint32_t msc_lo; + uint32_t sbc; + } xcb_glx_buffer_swap_complete_event_t; + #endif + typedef struct { + int type; + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Drawable drawable; /* drawable on which event was requested in event mask */ + int event_type; + int64_t ust; + int64_t msc; + int64_t sbc; + } QGLXBufferSwapComplete; #endif QXcbGlxIntegration::QXcbGlxIntegration() @@ -103,7 +100,7 @@ QXcbGlxIntegration::~QXcbGlxIntegration() bool QXcbGlxIntegration::initialize(QXcbConnection *connection) { m_connection = connection; -#ifdef XCB_HAS_XCB_GLX +#if QT_CONFIG(xcb_glx) const xcb_query_extension_reply_t *reply = xcb_get_extension_data(m_connection->xcb_connection(), &xcb_glx_id); if (!reply || !reply->present) @@ -140,7 +137,7 @@ bool QXcbGlxIntegration::handleXcbEvent(xcb_generic_event_t *event, uint respons XEvent dummy; event->sequence = LastKnownRequestProcessed(xdisplay); if (proc(xdisplay, &dummy, (xEvent*)event)) { -#ifdef XCB_HAS_XCB_GLX +#if QT_CONFIG(xcb_glx) // DRI2 clients don't receive GLXBufferSwapComplete events on the wire. // Instead the GLX event is synthesized from the DRI2BufferSwapComplete event // by DRI2WireToEvent(). For an application to be able to see the event diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro index 5af6172301..9d537b18f3 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro @@ -3,14 +3,9 @@ TARGET = qxcb-glx-integration include(../gl_integrations_plugin_base.pri) QT += glx_support-private -#should be removed from the sources -DEFINES += XCB_USE_GLX DEFINES += QT_NO_FOREACH -qtConfig(xcb-glx) { - DEFINES += XCB_HAS_XCB_GLX - QMAKE_USE += xcb_glx -} +qtConfig(xcb-glx): QMAKE_USE += xcb_glx !static:qtConfig(dlopen): QMAKE_USE += libdl diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index f0c1659b8e..92b8261bae 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -80,7 +80,7 @@ #include <X11/extensions/XI2proto.h> #endif -#ifdef XCB_USE_RENDER +#if QT_CONFIG(xcb_render) #include <xcb/render.h> #endif @@ -566,7 +566,7 @@ QXcbConnection::QXcbConnection(QXcbNativeInterface *nativeInterface, bool canGra #if QT_CONFIG(xkb) &xcb_xkb_id, #endif -#ifdef XCB_USE_RENDER +#if QT_CONFIG(xcb_render) &xcb_render_id, #endif 0 @@ -1467,7 +1467,7 @@ xcb_window_t QXcbConnection::clientLeader() 1, &m_clientLeader); -#if !defined(QT_NO_SESSIONMANAGER) && defined(XCB_USE_SM) +#if QT_CONFIG(xcb_sm) // If we are session managed, inform the window manager about it QByteArray session = qGuiApp->sessionId().toLatin1(); if (!session.isEmpty()) { @@ -1988,7 +1988,7 @@ void QXcbConnection::initializeXFixes() void QXcbConnection::initializeXRender() { -#ifdef XCB_USE_RENDER +#if QT_CONFIG(xcb_render) const xcb_query_extension_reply_t *reply = xcb_get_extension_data(m_connection, &xcb_render_id); if (!reply || !reply->present) return; diff --git a/src/plugins/platforms/xcb/qxcbimage.cpp b/src/plugins/platforms/xcb/qxcbimage.cpp index 67a959d8a4..f3dfa1916b 100644 --- a/src/plugins/platforms/xcb/qxcbimage.cpp +++ b/src/plugins/platforms/xcb/qxcbimage.cpp @@ -41,7 +41,7 @@ #include <QtGui/QColor> #include <QtGui/private/qimage_p.h> #include <QtGui/private/qdrawhelper_p.h> -#ifdef XCB_USE_RENDER +#if QT_CONFIG(xcb_render) #include <xcb/render.h> // 'template' is used as a function argument name in xcb_renderutil.h #define template template_param @@ -193,7 +193,7 @@ xcb_pixmap_t qt_xcb_XPixmapFromBitmap(QXcbScreen *screen, const QImage &image) xcb_cursor_t qt_xcb_createCursorXRender(QXcbScreen *screen, const QImage &image, const QPoint &spot) { -#ifdef XCB_USE_RENDER +#if QT_CONFIG(xcb_render) xcb_connection_t *conn = screen->xcb_connection(); const int w = image.width(); const int h = image.height(); diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index 4f78f806be..8ba6834565 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -495,7 +495,7 @@ QByteArray QXcbIntegration::wmClass() const return m_wmClass; } -#if !defined(QT_NO_SESSIONMANAGER) && defined(XCB_USE_SM) +#if QT_CONFIG(xcb_sm) QPlatformSessionManager *QXcbIntegration::createPlatformSessionManager(const QString &id, const QString &key) const { return new QXcbSessionManager(id, key); diff --git a/src/plugins/platforms/xcb/qxcbintegration.h b/src/plugins/platforms/xcb/qxcbintegration.h index 561aa9dce6..186b6c5ddd 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.h +++ b/src/plugins/platforms/xcb/qxcbintegration.h @@ -40,6 +40,7 @@ #ifndef QXCBINTEGRATION_H #define QXCBINTEGRATION_H +#include <QtGui/private/qtguiglobal_p.h> #include <qpa/qplatformintegration.h> #include <qpa/qplatformscreen.h> @@ -106,7 +107,7 @@ public: QByteArray wmClass() const; -#if !defined(QT_NO_SESSIONMANAGER) && defined(XCB_USE_SM) +#if QT_CONFIG(xcb_sm) QPlatformSessionManager *createPlatformSessionManager(const QString &id, const QString &key) const override; #endif diff --git a/src/plugins/platforms/xcb/xcb_qpa_lib.pro b/src/plugins/platforms/xcb/xcb_qpa_lib.pro index ba748ea14d..6956d04083 100644 --- a/src/plugins/platforms/xcb/xcb_qpa_lib.pro +++ b/src/plugins/platforms/xcb/xcb_qpa_lib.pro @@ -61,9 +61,7 @@ qtConfig(xcb-xlib) { } } -# build with session management support qtConfig(xcb-sm) { - DEFINES += XCB_USE_SM QMAKE_USE += x11sm SOURCES += qxcbsessionmanager.cpp HEADERS += qxcbsessionmanager.h @@ -83,16 +81,11 @@ qtConfig(vulkan) { } !qtConfig(system-xcb) { - DEFINES += XCB_USE_RENDER QMAKE_USE += xcb-static xcb } else { LIBS += -lxcb-xinerama ### there is no configure test for this! qtConfig(xkb): QMAKE_USE += xcb_xkb - # to support custom cursors with depth > 1 - qtConfig(xcb-render) { - DEFINES += XCB_USE_RENDER - QMAKE_USE += xcb_render - } + qtConfig(xcb-render): QMAKE_USE += xcb_render QMAKE_USE += xcb_syslibs } diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro index 710a6c94c1..cd4d301194 100644 --- a/src/plugins/plugins.pro +++ b/src/plugins/plugins.pro @@ -10,5 +10,5 @@ qtHaveModule(gui) { } qtHaveModule(widgets): SUBDIRS += styles -!winrt:!wince:qtHaveModule(printsupport): \ +!winrt:qtHaveModule(printsupport): \ SUBDIRS += printsupport diff --git a/src/widgets/doc/images/fusion-checkbox.png b/src/widgets/doc/images/fusion-checkbox.png Binary files differdeleted file mode 100644 index 669c3f8e23..0000000000 --- a/src/widgets/doc/images/fusion-checkbox.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-dateedit.png b/src/widgets/doc/images/fusion-dateedit.png Binary files differdeleted file mode 100644 index b8ca972eaa..0000000000 --- a/src/widgets/doc/images/fusion-dateedit.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-datetimeedit.png b/src/widgets/doc/images/fusion-datetimeedit.png Binary files differdeleted file mode 100644 index 48b6e320d5..0000000000 --- a/src/widgets/doc/images/fusion-datetimeedit.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-dial.png b/src/widgets/doc/images/fusion-dial.png Binary files differdeleted file mode 100644 index cdda89e02a..0000000000 --- a/src/widgets/doc/images/fusion-dial.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-doublespinbox.png b/src/widgets/doc/images/fusion-doublespinbox.png Binary files differdeleted file mode 100644 index 4c7548c9be..0000000000 --- a/src/widgets/doc/images/fusion-doublespinbox.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-fontcombobox.png b/src/widgets/doc/images/fusion-fontcombobox.png Binary files differdeleted file mode 100644 index 96654b1bfa..0000000000 --- a/src/widgets/doc/images/fusion-fontcombobox.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-frame.png b/src/widgets/doc/images/fusion-frame.png Binary files differdeleted file mode 100644 index 09915bba0c..0000000000 --- a/src/widgets/doc/images/fusion-frame.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-groupbox.png b/src/widgets/doc/images/fusion-groupbox.png Binary files differdeleted file mode 100644 index de2730b2e6..0000000000 --- a/src/widgets/doc/images/fusion-groupbox.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-horizontalscrollbar.png b/src/widgets/doc/images/fusion-horizontalscrollbar.png Binary files differdeleted file mode 100644 index d890b1ce84..0000000000 --- a/src/widgets/doc/images/fusion-horizontalscrollbar.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-lcdnumber.png b/src/widgets/doc/images/fusion-lcdnumber.png Binary files differdeleted file mode 100644 index 55ba6d2926..0000000000 --- a/src/widgets/doc/images/fusion-lcdnumber.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-lineedit.png b/src/widgets/doc/images/fusion-lineedit.png Binary files differdeleted file mode 100644 index 5fd452db55..0000000000 --- a/src/widgets/doc/images/fusion-lineedit.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-listview.png b/src/widgets/doc/images/fusion-listview.png Binary files differdeleted file mode 100644 index 3fcfbce6c4..0000000000 --- a/src/widgets/doc/images/fusion-listview.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-progressbar.png b/src/widgets/doc/images/fusion-progressbar.png Binary files differdeleted file mode 100644 index 4cd61eb3c2..0000000000 --- a/src/widgets/doc/images/fusion-progressbar.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-pushbutton.png b/src/widgets/doc/images/fusion-pushbutton.png Binary files differdeleted file mode 100644 index 0e5aa1aad3..0000000000 --- a/src/widgets/doc/images/fusion-pushbutton.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-radiobutton.png b/src/widgets/doc/images/fusion-radiobutton.png Binary files differdeleted file mode 100644 index 0b7097f2ef..0000000000 --- a/src/widgets/doc/images/fusion-radiobutton.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-slider.png b/src/widgets/doc/images/fusion-slider.png Binary files differdeleted file mode 100644 index e5e3d20cf5..0000000000 --- a/src/widgets/doc/images/fusion-slider.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-spinbox.png b/src/widgets/doc/images/fusion-spinbox.png Binary files differdeleted file mode 100644 index 0f8d75d372..0000000000 --- a/src/widgets/doc/images/fusion-spinbox.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-tableview.png b/src/widgets/doc/images/fusion-tableview.png Binary files differdeleted file mode 100644 index 8aedefccd2..0000000000 --- a/src/widgets/doc/images/fusion-tableview.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-textedit.png b/src/widgets/doc/images/fusion-textedit.png Binary files differdeleted file mode 100644 index 73d92feb15..0000000000 --- a/src/widgets/doc/images/fusion-textedit.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-timeedit.png b/src/widgets/doc/images/fusion-timeedit.png Binary files differdeleted file mode 100644 index d38a139bc2..0000000000 --- a/src/widgets/doc/images/fusion-timeedit.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-toolbox.png b/src/widgets/doc/images/fusion-toolbox.png Binary files differdeleted file mode 100644 index fc4831cf5d..0000000000 --- a/src/widgets/doc/images/fusion-toolbox.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-toolbutton.png b/src/widgets/doc/images/fusion-toolbutton.png Binary files differdeleted file mode 100644 index 32d2ca3677..0000000000 --- a/src/widgets/doc/images/fusion-toolbutton.png +++ /dev/null diff --git a/src/widgets/doc/images/fusion-treeview.png b/src/widgets/doc/images/fusion-treeview.png Binary files differdeleted file mode 100644 index 3aa8bcef54..0000000000 --- a/src/widgets/doc/images/fusion-treeview.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-calendarwidget.png b/src/widgets/doc/images/macintosh-calendarwidget.png Binary files differdeleted file mode 100644 index 2f743501a9..0000000000 --- a/src/widgets/doc/images/macintosh-calendarwidget.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-checkbox.png b/src/widgets/doc/images/macintosh-checkbox.png Binary files differdeleted file mode 100644 index d0130e3f22..0000000000 --- a/src/widgets/doc/images/macintosh-checkbox.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-combobox.png b/src/widgets/doc/images/macintosh-combobox.png Binary files differdeleted file mode 100644 index c1dc3c0c96..0000000000 --- a/src/widgets/doc/images/macintosh-combobox.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-dateedit.png b/src/widgets/doc/images/macintosh-dateedit.png Binary files differdeleted file mode 100644 index 45aee90a9b..0000000000 --- a/src/widgets/doc/images/macintosh-dateedit.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-datetimeedit.png b/src/widgets/doc/images/macintosh-datetimeedit.png Binary files differdeleted file mode 100644 index 62af02d64e..0000000000 --- a/src/widgets/doc/images/macintosh-datetimeedit.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-dial.png b/src/widgets/doc/images/macintosh-dial.png Binary files differdeleted file mode 100644 index df0ffe23a1..0000000000 --- a/src/widgets/doc/images/macintosh-dial.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-doublespinbox.png b/src/widgets/doc/images/macintosh-doublespinbox.png Binary files differdeleted file mode 100644 index a0695ff278..0000000000 --- a/src/widgets/doc/images/macintosh-doublespinbox.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-fontcombobox.png b/src/widgets/doc/images/macintosh-fontcombobox.png Binary files differdeleted file mode 100644 index 8a5a3c78a3..0000000000 --- a/src/widgets/doc/images/macintosh-fontcombobox.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-frame.png b/src/widgets/doc/images/macintosh-frame.png Binary files differdeleted file mode 100644 index fee61a3643..0000000000 --- a/src/widgets/doc/images/macintosh-frame.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-groupbox.png b/src/widgets/doc/images/macintosh-groupbox.png Binary files differdeleted file mode 100644 index f6c7bce580..0000000000 --- a/src/widgets/doc/images/macintosh-groupbox.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-horizontalscrollbar.png b/src/widgets/doc/images/macintosh-horizontalscrollbar.png Binary files differdeleted file mode 100644 index 8b63572a9e..0000000000 --- a/src/widgets/doc/images/macintosh-horizontalscrollbar.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-label.png b/src/widgets/doc/images/macintosh-label.png Binary files differdeleted file mode 100644 index 753aa4d138..0000000000 --- a/src/widgets/doc/images/macintosh-label.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-lcdnumber.png b/src/widgets/doc/images/macintosh-lcdnumber.png Binary files differdeleted file mode 100644 index 2ea9ea0713..0000000000 --- a/src/widgets/doc/images/macintosh-lcdnumber.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-lineedit.png b/src/widgets/doc/images/macintosh-lineedit.png Binary files differdeleted file mode 100644 index 0e992c7ffe..0000000000 --- a/src/widgets/doc/images/macintosh-lineedit.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-listview.png b/src/widgets/doc/images/macintosh-listview.png Binary files differdeleted file mode 100644 index 346e6427ff..0000000000 --- a/src/widgets/doc/images/macintosh-listview.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-menu.png b/src/widgets/doc/images/macintosh-menu.png Binary files differdeleted file mode 100644 index 59bdceaab6..0000000000 --- a/src/widgets/doc/images/macintosh-menu.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-progressbar.png b/src/widgets/doc/images/macintosh-progressbar.png Binary files differdeleted file mode 100644 index 2dfc8aba81..0000000000 --- a/src/widgets/doc/images/macintosh-progressbar.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-pushbutton.png b/src/widgets/doc/images/macintosh-pushbutton.png Binary files differdeleted file mode 100644 index 7ec14910d8..0000000000 --- a/src/widgets/doc/images/macintosh-pushbutton.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-radiobutton.png b/src/widgets/doc/images/macintosh-radiobutton.png Binary files differdeleted file mode 100644 index 8b02f509ff..0000000000 --- a/src/widgets/doc/images/macintosh-radiobutton.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-slider.png b/src/widgets/doc/images/macintosh-slider.png Binary files differdeleted file mode 100644 index bf0c5464e9..0000000000 --- a/src/widgets/doc/images/macintosh-slider.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-spinbox.png b/src/widgets/doc/images/macintosh-spinbox.png Binary files differdeleted file mode 100644 index 4196c37246..0000000000 --- a/src/widgets/doc/images/macintosh-spinbox.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-tableview.png b/src/widgets/doc/images/macintosh-tableview.png Binary files differdeleted file mode 100644 index e6512494de..0000000000 --- a/src/widgets/doc/images/macintosh-tableview.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-tabwidget.png b/src/widgets/doc/images/macintosh-tabwidget.png Binary files differdeleted file mode 100644 index 1d174a47e6..0000000000 --- a/src/widgets/doc/images/macintosh-tabwidget.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-textedit.png b/src/widgets/doc/images/macintosh-textedit.png Binary files differdeleted file mode 100644 index 4f0ce36baf..0000000000 --- a/src/widgets/doc/images/macintosh-textedit.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-timeedit.png b/src/widgets/doc/images/macintosh-timeedit.png Binary files differdeleted file mode 100644 index 4bcfce33f8..0000000000 --- a/src/widgets/doc/images/macintosh-timeedit.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-toolbox.png b/src/widgets/doc/images/macintosh-toolbox.png Binary files differdeleted file mode 100644 index 18d41ea595..0000000000 --- a/src/widgets/doc/images/macintosh-toolbox.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-toolbutton.png b/src/widgets/doc/images/macintosh-toolbutton.png Binary files differdeleted file mode 100644 index f91331cc51..0000000000 --- a/src/widgets/doc/images/macintosh-toolbutton.png +++ /dev/null diff --git a/src/widgets/doc/images/macintosh-treeview.png b/src/widgets/doc/images/macintosh-treeview.png Binary files differdeleted file mode 100644 index afda6d8372..0000000000 --- a/src/widgets/doc/images/macintosh-treeview.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-calendarwidget.png b/src/widgets/doc/images/windowsvista-calendarwidget.png Binary files differdeleted file mode 100644 index 3cb1ab78dc..0000000000 --- a/src/widgets/doc/images/windowsvista-calendarwidget.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-checkbox.png b/src/widgets/doc/images/windowsvista-checkbox.png Binary files differdeleted file mode 100644 index b9bc909988..0000000000 --- a/src/widgets/doc/images/windowsvista-checkbox.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-combobox.png b/src/widgets/doc/images/windowsvista-combobox.png Binary files differdeleted file mode 100644 index f53192f45a..0000000000 --- a/src/widgets/doc/images/windowsvista-combobox.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-dateedit.png b/src/widgets/doc/images/windowsvista-dateedit.png Binary files differdeleted file mode 100644 index bb79482849..0000000000 --- a/src/widgets/doc/images/windowsvista-dateedit.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-datetimeedit.png b/src/widgets/doc/images/windowsvista-datetimeedit.png Binary files differdeleted file mode 100644 index 0a104de084..0000000000 --- a/src/widgets/doc/images/windowsvista-datetimeedit.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-dial.png b/src/widgets/doc/images/windowsvista-dial.png Binary files differdeleted file mode 100644 index 7081269c31..0000000000 --- a/src/widgets/doc/images/windowsvista-dial.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-doublespinbox.png b/src/widgets/doc/images/windowsvista-doublespinbox.png Binary files differdeleted file mode 100644 index 6efa9379fd..0000000000 --- a/src/widgets/doc/images/windowsvista-doublespinbox.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-frame.png b/src/widgets/doc/images/windowsvista-frame.png Binary files differdeleted file mode 100644 index 63b8422d2b..0000000000 --- a/src/widgets/doc/images/windowsvista-frame.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-groupbox.png b/src/widgets/doc/images/windowsvista-groupbox.png Binary files differdeleted file mode 100644 index 967d8878a7..0000000000 --- a/src/widgets/doc/images/windowsvista-groupbox.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-horizontalscrollbar.png b/src/widgets/doc/images/windowsvista-horizontalscrollbar.png Binary files differdeleted file mode 100644 index 996865d66c..0000000000 --- a/src/widgets/doc/images/windowsvista-horizontalscrollbar.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-label.png b/src/widgets/doc/images/windowsvista-label.png Binary files differdeleted file mode 100644 index caef8d8361..0000000000 --- a/src/widgets/doc/images/windowsvista-label.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-lcdnumber.png b/src/widgets/doc/images/windowsvista-lcdnumber.png Binary files differdeleted file mode 100644 index 911438e2b1..0000000000 --- a/src/widgets/doc/images/windowsvista-lcdnumber.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-lineedit.png b/src/widgets/doc/images/windowsvista-lineedit.png Binary files differdeleted file mode 100644 index 9fcde3a851..0000000000 --- a/src/widgets/doc/images/windowsvista-lineedit.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-listview.png b/src/widgets/doc/images/windowsvista-listview.png Binary files differdeleted file mode 100644 index 36a03438ab..0000000000 --- a/src/widgets/doc/images/windowsvista-listview.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-progressbar.png b/src/widgets/doc/images/windowsvista-progressbar.png Binary files differdeleted file mode 100644 index 0bda010811..0000000000 --- a/src/widgets/doc/images/windowsvista-progressbar.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-slider.png b/src/widgets/doc/images/windowsvista-slider.png Binary files differdeleted file mode 100644 index be2fffb7b5..0000000000 --- a/src/widgets/doc/images/windowsvista-slider.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-spinbox.png b/src/widgets/doc/images/windowsvista-spinbox.png Binary files differdeleted file mode 100644 index 4a2293e724..0000000000 --- a/src/widgets/doc/images/windowsvista-spinbox.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-tableview.png b/src/widgets/doc/images/windowsvista-tableview.png Binary files differdeleted file mode 100644 index 96f4937bc1..0000000000 --- a/src/widgets/doc/images/windowsvista-tableview.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-textedit.png b/src/widgets/doc/images/windowsvista-textedit.png Binary files differdeleted file mode 100644 index 5e5696623e..0000000000 --- a/src/widgets/doc/images/windowsvista-textedit.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-timeedit.png b/src/widgets/doc/images/windowsvista-timeedit.png Binary files differdeleted file mode 100644 index e24fdd268a..0000000000 --- a/src/widgets/doc/images/windowsvista-timeedit.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-toolbox.png b/src/widgets/doc/images/windowsvista-toolbox.png Binary files differdeleted file mode 100644 index 8cfe5f9cab..0000000000 --- a/src/widgets/doc/images/windowsvista-toolbox.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-toolbutton.png b/src/widgets/doc/images/windowsvista-toolbutton.png Binary files differdeleted file mode 100644 index 0baa9809c1..0000000000 --- a/src/widgets/doc/images/windowsvista-toolbutton.png +++ /dev/null diff --git a/src/widgets/doc/images/windowsvista-treeview.png b/src/widgets/doc/images/windowsvista-treeview.png Binary files differdeleted file mode 100644 index db211e4b5f..0000000000 --- a/src/widgets/doc/images/windowsvista-treeview.png +++ /dev/null diff --git a/src/widgets/doc/src/qtwidgets-index.qdoc b/src/widgets/doc/src/qtwidgets-index.qdoc index 6253ae8d7d..c05b16a0a0 100644 --- a/src/widgets/doc/src/qtwidgets-index.qdoc +++ b/src/widgets/doc/src/qtwidgets-index.qdoc @@ -133,6 +133,10 @@ interfaces \section2 Tutorials \list \li \l{Widgets Tutorial} + \li \l{Getting Started Programming with Qt Widgets} + \li \l{Creating a Qt Widget Based Application} + + \li \l{Model/View Tutorial} \endlist diff --git a/src/widgets/doc/src/widgets-and-layouts/layout.qdoc b/src/widgets/doc/src/widgets-and-layouts/layout.qdoc index 0d21d3242d..e507d66451 100644 --- a/src/widgets/doc/src/widgets-and-layouts/layout.qdoc +++ b/src/widgets/doc/src/widgets-and-layouts/layout.qdoc @@ -57,15 +57,15 @@ is set on a widget in this way, it takes charge of the following tasks: \list - \li Positioning of child widgets. - \li Sensible default sizes for windows. - \li Sensible minimum sizes for windows. - \li Resize handling. + \li Positioning of child widgets + \li Sensible default sizes for windows + \li Sensible minimum sizes for windows + \li Resize handling \li Automatic updates when contents change: \list - \li Font size, text or other contents of child widgets. - \li Hiding or showing a child widget. - \li Removal of child widgets. + \li Font size, text or other contents of child widgets + \li Hiding or showing a child widget + \li Removal of child widgets \endlist \endlist @@ -392,7 +392,6 @@ Many Qt Widgets \l{Qt Widgets Examples}{examples} already use layouts, however, several examples exist to showcase various layouts. - \list - \li \l{Layout Examples} - \endlist + \annotatedlist examples-layout + */ diff --git a/src/widgets/itemviews/qdirmodel.cpp b/src/widgets/itemviews/qdirmodel.cpp index 9d2e69dec9..9b54c5c2fe 100644 --- a/src/widgets/itemviews/qdirmodel.cpp +++ b/src/widgets/itemviews/qdirmodel.cpp @@ -52,6 +52,7 @@ #include <qstyle.h> #include <qapplication.h> #include <private/qabstractitemmodel_p.h> +#include <private/qfilesystementry_p.h> #include <qdebug.h> #include <stack> @@ -1104,8 +1105,9 @@ QString QDirModel::fileName(const QModelIndex &index) const if (!d->indexValid(index)) return QString(); QFileInfo info = fileInfo(index); - if (info.isRoot()) - return info.absoluteFilePath(); + const QString &path = info.absoluteFilePath(); + if (QFileSystemEntry::isRootPath(path)) + return path; if (d->resolveSymlinks && info.isSymLink()) info = d->resolvedInfo(info); return info.fileName(); @@ -1280,8 +1282,8 @@ QString QDirModelPrivate::name(const QModelIndex &index) const { const QDirNode *n = node(index); const QFileInfo info = n->info; - if (info.isRoot()) { - QString name = info.absoluteFilePath(); + QString name = info.absoluteFilePath(); + if (QFileSystemEntry::isRootPath(name)) { #if defined(Q_OS_WIN) if (name.startsWith(QLatin1Char('/'))) // UNC host return info.fileName(); diff --git a/src/widgets/itemviews/qfileiconprovider.cpp b/src/widgets/itemviews/qfileiconprovider.cpp index 8c3cf3859e..65ae6b9505 100644 --- a/src/widgets/itemviews/qfileiconprovider.cpp +++ b/src/widgets/itemviews/qfileiconprovider.cpp @@ -46,6 +46,7 @@ #include <private/qfunctions_p.h> #include <private/qguiapplication_p.h> #include <private/qicon_p.h> +#include <private/qfilesystementry_p.h> #include <qpa/qplatformintegration.h> #include <qpa/qplatformservices.h> #include <qpa/qplatformtheme.h> @@ -247,10 +248,11 @@ QIcon QFileIconProvider::icon(const QFileInfo &info) const if (!retIcon.isNull()) return retIcon; - if (info.isRoot()) + const QString &path = info.absoluteFilePath(); + if (path.isEmpty() || QFileSystemEntry::isRootPath(path)) #if defined (Q_OS_WIN) && !defined(Q_OS_WINRT) { - UINT type = GetDriveType((wchar_t *)info.absoluteFilePath().utf16()); + UINT type = GetDriveType(reinterpret_cast<const wchar_t *>(path.utf16())); switch (type) { case DRIVE_REMOVABLE: @@ -298,7 +300,7 @@ QIcon QFileIconProvider::icon(const QFileInfo &info) const QString QFileIconProvider::type(const QFileInfo &info) const { - if (info.isRoot()) + if (QFileSystemEntry::isRootPath(info.absoluteFilePath())) return QApplication::translate("QFileDialog", "Drive"); if (info.isFile()) { if (!info.suffix().isEmpty()) { diff --git a/src/widgets/kernel/kernel.pri b/src/widgets/kernel/kernel.pri index 3e3c795839..1bdcecbc81 100644 --- a/src/widgets/kernel/kernel.pri +++ b/src/widgets/kernel/kernel.pri @@ -67,15 +67,6 @@ macx: { SOURCES += kernel/qmacgesturerecognizer.cpp } -wince { - HEADERS += \ - ../corelib/kernel/qfunctions_wince.h \ - kernel/qwidgetsfunctions_wince.h - - SOURCES += \ - kernel/qwidgetsfunctions_wince.cpp -} - qtConfig(opengl) { HEADERS += kernel/qopenglwidget.h SOURCES += kernel/qopenglwidget.cpp diff --git a/src/widgets/widgets/qcalendarwidget.cpp b/src/widgets/widgets/qcalendarwidget.cpp index c5db3a7c9a..b96492d623 100644 --- a/src/widgets/widgets/qcalendarwidget.cpp +++ b/src/widgets/widgets/qcalendarwidget.cpp @@ -832,7 +832,12 @@ class StaticDayOfWeekAssociativeArray { static Q_DECL_CONSTEXPR int day2idx(Qt::DayOfWeek day) Q_DECL_NOTHROW { return int(day) - 1; } // alt: day % 7 public: Q_DECL_CONSTEXPR StaticDayOfWeekAssociativeArray() Q_DECL_NOEXCEPT_EXPR(noexcept(T())) - : contained(), data() {} +#ifdef Q_COMPILER_CONSTEXPR + : contained{}, data{} // arrays require uniform initialization +#else + : contained(), data() +#endif + {} Q_DECL_CONSTEXPR bool contains(Qt::DayOfWeek day) const Q_DECL_NOTHROW { return contained[day2idx(day)]; } Q_DECL_CONSTEXPR const T &value(Qt::DayOfWeek day) const Q_DECL_NOTHROW { return data[day2idx(day)]; } diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp index 1a4e9ae87b..4ac8118c87 100644 --- a/src/widgets/widgets/qlineedit.cpp +++ b/src/widgets/widgets/qlineedit.cpp @@ -950,7 +950,7 @@ QString QLineEdit::selectedText() const } /*! - selectionStart() returns the index of the first selected character in the + Returns the index of the first selected character in the line edit or -1 if no text is selected. \sa selectedText() @@ -1181,6 +1181,7 @@ QMargins QLineEdit::textMargins() const \row \li \c > \li All following alphabetic characters are uppercased. \row \li \c < \li All following alphabetic characters are lowercased. \row \li \c ! \li Switch off case conversion. + \row \li \c {[ ] { }} \li Reserved. \row \li \tt{\\} \li Use \tt{\\} to escape the special characters listed above to use them as separators. |