Merge remote-tracking branch 'origin/5.5.1' into 5.5
Change-Id: I2942591e1c1ca86ce0f6476e0a5c3033cdf861ee
This commit is contained in:
commit
57fead6100
140
dist/changes-5.5.1
vendored
Normal file
140
dist/changes-5.5.1
vendored
Normal file
@ -0,0 +1,140 @@
|
||||
Qt 5.5.1 is a bug-fix release. It maintains both forward and backward
|
||||
compatibility (source and binary) with Qt 5.5.0.
|
||||
|
||||
For more details, refer to the online documentation included in this
|
||||
distribution. The documentation is also available online:
|
||||
|
||||
http://doc.qt.io/qt-5.5/
|
||||
|
||||
The Qt version 5.5 series is binary compatible with the 5.4.x series.
|
||||
Applications compiled for 5.4 will continue to run with 5.5.
|
||||
|
||||
Some of the changes listed in this file include issue tracking numbers
|
||||
corresponding to tasks in the Qt Bug Tracker:
|
||||
|
||||
http://bugreports.qt.io/
|
||||
|
||||
Each of these identifiers can be entered in the bug tracker to obtain more
|
||||
information about a particular change.
|
||||
|
||||
****************************************************************************
|
||||
* Important Behavior Changes *
|
||||
****************************************************************************
|
||||
|
||||
- [QTBUG-47316] QDebug output for QStrings changed compared to Qt 5.5.0 to
|
||||
more closely match the output of previous Qt versions. Like Qt 5.5.0,
|
||||
QDebug will escape non-printable characters, the backslash and quote
|
||||
characters, but will no longer escape the printable characters.
|
||||
|
||||
****************************************************************************
|
||||
* Future Direction Notice *
|
||||
****************************************************************************
|
||||
|
||||
- Qt 5.7 will begin requiring certain C++11 features in order to
|
||||
compile. Due to bugs in the Clang compiler that comes with XCode 5.0,
|
||||
that version will not be supported, despite what was noted in the Qt
|
||||
5.5.0 changelog.
|
||||
The minimum compiler versions for Qt 5.7 release will be:
|
||||
* Clang 3.3 (XCode 5.1 contains version 3.4)
|
||||
* GCC 4.7
|
||||
* Intel C++ Composer XE 2013 SP1 (compiler version 14.0) on Linux and OS X
|
||||
* Intel C++ Composer XE 2016 (compiler version 16.0) on Windows
|
||||
* Microsoft Visual Studio 2012 (compiler version 17.0)
|
||||
|
||||
****************************************************************************
|
||||
* Library *
|
||||
****************************************************************************
|
||||
|
||||
QtCore
|
||||
------
|
||||
|
||||
- Logging framework:
|
||||
* Fixed a bug that would cause a
|
||||
"%{time boot}" field in the logging framework's pattern to always
|
||||
display the same value, instead of the time since boot.
|
||||
|
||||
- QDate/QTime:
|
||||
* Fixed a minor source-incompatibility between Qt 5.4 and 5.5.0
|
||||
involving sets of functions overloaded on QTime and some integer or
|
||||
QDate and some integer.
|
||||
|
||||
- QDir:
|
||||
* QDir::relativeFilePath() now returns "." instead of an empty string if
|
||||
the given path is the same as the directory.
|
||||
|
||||
- QLoggingCategory:
|
||||
* Fixed behavior of default severity passed to constructor or
|
||||
Q_LOGGING_CATEGORY with regards to QtInfoMsg, which was previously
|
||||
treated as being more severe than QtFatalMsg.
|
||||
|
||||
- QTimeZone:
|
||||
* [QTBUG-47037] Fixed a wrong timezone conversion when the POSIX
|
||||
timezone rule contains a fractional timezone (e.g. VET4:30).
|
||||
|
||||
QtNetwork
|
||||
---------
|
||||
|
||||
- [QTBUG-47048] Fix HTTP issues with "Unknown Error" and "Connection
|
||||
Closed"
|
||||
[ChangeLog][QtNetwork][Sockets] Read OS/encrypted read buffers when
|
||||
connection closed by server.
|
||||
|
||||
QtSql
|
||||
-----
|
||||
|
||||
- QSqlDatabase:
|
||||
* [QTBUG-47784][QTBUG-47452] Fixed a bug where opening a connection to a
|
||||
MySQL database using the QMYSQL plugin would always return true even
|
||||
if the server was unreachable. This bug could also lead to crashes
|
||||
depending on the platform used.
|
||||
|
||||
QtWidgets
|
||||
---------
|
||||
|
||||
- Important behavior changes:
|
||||
* [QTBUG-46379] Tooltips on OS X are now transparent for mouse events.
|
||||
|
||||
****************************************************************************
|
||||
* Platform Specific Changes *
|
||||
****************************************************************************
|
||||
|
||||
Windows
|
||||
-------
|
||||
|
||||
- Text:
|
||||
* [QTBUG-46963] Fixed crash in DirectWrite engine when constructing a
|
||||
QRawFont from raw font data.
|
||||
|
||||
****************************************************************************
|
||||
* Compiler Specific Changes *
|
||||
****************************************************************************
|
||||
|
||||
GCC
|
||||
---
|
||||
|
||||
- Fixed a regression introduced Qt 5.5.0 that generated lots of
|
||||
compiler warnings in Qt public headers when using the (deprecated)
|
||||
version 4.5 of GCC.
|
||||
|
||||
****************************************************************************
|
||||
* Tools *
|
||||
****************************************************************************
|
||||
|
||||
configure & build system
|
||||
------------------------
|
||||
|
||||
- [QTBUG-46125] Fixed misuse of target linker features for host tools.
|
||||
- [QTBUG-46473] QML plugin DLLs now have version information.
|
||||
|
||||
qmake
|
||||
-----
|
||||
|
||||
- [QTBUG-46824][Darwin] Characters in the bundle identifier which
|
||||
the App Store considers invalid are now substituted.
|
||||
- [QTBUG-47065][Unix] Fixed use of CONFIG+=separate_debug_info together
|
||||
with CONFIG+=unversioned_libname.
|
||||
- [QTBUG-47450][Xcode] Fixed Info.plist creation in shadow builds.
|
||||
- [QTBUG-47775][Darwin] Fixed Info.plist creation when bundle name
|
||||
contains spaces.
|
||||
- [QTBUG-48110][VS] Fixed VS2015 solution file generation.
|
||||
- [MSVC][nmake] Fixed use of VS2013 mkspecs from VS2015 shell.
|
@ -296,7 +296,20 @@ Renderer11::Renderer11(egl::Display *display)
|
||||
if (requestedMajorVersion == 9 && requestedMinorVersion == 3)
|
||||
#endif
|
||||
{
|
||||
mAvailableFeatureLevels.push_back(D3D_FEATURE_LEVEL_9_3);
|
||||
if (requestedMinorVersion == EGL_DONT_CARE || requestedMinorVersion >= 3)
|
||||
{
|
||||
mAvailableFeatureLevels.push_back(D3D_FEATURE_LEVEL_9_3);
|
||||
}
|
||||
#if defined(ANGLE_ENABLE_WINDOWS_STORE)
|
||||
if (requestedMinorVersion == EGL_DONT_CARE || requestedMinorVersion >= 2)
|
||||
{
|
||||
mAvailableFeatureLevels.push_back(D3D_FEATURE_LEVEL_9_2);
|
||||
}
|
||||
if (requestedMinorVersion == EGL_DONT_CARE || requestedMinorVersion >= 1)
|
||||
{
|
||||
mAvailableFeatureLevels.push_back(D3D_FEATURE_LEVEL_9_1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
EGLint requestedDeviceType = attributes.get(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE,
|
||||
|
@ -49,6 +49,8 @@ EGLBoolean EGLAPIENTRY QuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surfa
|
||||
// validate the attribute parameter
|
||||
switch (attribute)
|
||||
{
|
||||
case EGL_DEVICE_EXT:
|
||||
break;
|
||||
case EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE:
|
||||
if (!display->getExtensions().surfaceD3DTexture2DShareHandle)
|
||||
{
|
||||
|
@ -0,0 +1,57 @@
|
||||
From 3d696560f987a08d608b29bf3e0f557e96bebc56 Mon Sep 17 00:00:00 2001
|
||||
From: Samuel Nevala <samuel.nevala@intopalo.com>
|
||||
Date: Sat, 3 Oct 2015 02:30:26 +0300
|
||||
Subject: [PATCH] ANGLE: Fix Windows Store D3D Trim and Level 9 requirements
|
||||
|
||||
Due to additional validation not covered in previous patches, the Windows
|
||||
Store certification compatibility had regressed. These changes ensure that
|
||||
the required D3D behaviors are met.
|
||||
|
||||
Change-Id: I0a74f0d2fecaa87d4a9409da3a7a194254609759
|
||||
---
|
||||
.../angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp | 16 +++++++++++++++-
|
||||
.../angle/src/libGLESv2/entry_points_egl_ext.cpp | 2 ++
|
||||
2 files changed, 17 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
|
||||
index 5291a3a..61d9212 100644
|
||||
--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
|
||||
+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
|
||||
@@ -296,7 +296,21 @@ Renderer11::Renderer11(egl::Display *display)
|
||||
if (requestedMajorVersion == 9 && requestedMinorVersion == 3)
|
||||
#endif
|
||||
{
|
||||
- mAvailableFeatureLevels.push_back(D3D_FEATURE_LEVEL_9_3);
|
||||
+ if (requestedMinorVersion == EGL_DONT_CARE || requestedMinorVersion >= 3)
|
||||
+ {
|
||||
+ mAvailableFeatureLevels.push_back(D3D_FEATURE_LEVEL_9_3);
|
||||
+ }
|
||||
+#if defined(ANGLE_ENABLE_WINDOWS_STORE)
|
||||
+ if (requestedMinorVersion == EGL_DONT_CARE || requestedMinorVersion >= 2)
|
||||
+ {
|
||||
+ mAvailableFeatureLevels.push_back(D3D_FEATURE_LEVEL_9_2);
|
||||
+ }
|
||||
+ if (requestedMinorVersion == EGL_DONT_CARE || requestedMinorVersion >= 1)
|
||||
+ {
|
||||
+ mAvailableFeatureLevels.push_back(D3D_FEATURE_LEVEL_9_1);
|
||||
+ }
|
||||
+#endif
|
||||
}
|
||||
|
||||
EGLint requestedDeviceType = attributes.get(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE,
|
||||
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp b/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp
|
||||
index 62f3ca1..02b6631 100644
|
||||
--- a/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp
|
||||
+++ b/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp
|
||||
@@ -49,6 +49,8 @@ EGLBoolean EGLAPIENTRY QuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surfa
|
||||
// validate the attribute parameter
|
||||
switch (attribute)
|
||||
{
|
||||
+ case EGL_DEVICE_EXT:
|
||||
+ break;
|
||||
case EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE:
|
||||
if (!display->getExtensions().surfaceD3DTexture2DShareHandle)
|
||||
{
|
||||
--
|
||||
1.9.5.msysgit.1
|
||||
|
@ -572,6 +572,9 @@
|
||||
# if _MSC_VER < 1900
|
||||
// ICC disables unicode string support when compatibility mode with MSVC 2013 or lower is active
|
||||
# undef Q_COMPILER_UNICODE_STRINGS
|
||||
// Even though ICC knows about ref-qualified members, MSVC 2013 or lower doesn't, so
|
||||
// certain member functions (like QString::toUpper) may be missing from the DLLs.
|
||||
# undef Q_COMPILER_REF_QUALIFIERS
|
||||
// Disable constexpr unless the MS headers have constexpr in all the right places too
|
||||
// (like std::numeric_limits<T>::max())
|
||||
# undef Q_COMPILER_CONSTEXPR
|
||||
|
@ -55,11 +55,15 @@ void qt_mac_socket_callback(CFSocketRef s, CFSocketCallBackType callbackType, CF
|
||||
// notifier is now gone. The upshot is we have to check the notifier
|
||||
// every time.
|
||||
if (callbackType == kCFSocketReadCallBack) {
|
||||
if (socketInfo->readNotifier)
|
||||
if (socketInfo->readNotifier && socketInfo->readEnabled) {
|
||||
socketInfo->readEnabled = false;
|
||||
QGuiApplication::sendEvent(socketInfo->readNotifier, ¬ifierEvent);
|
||||
}
|
||||
} else if (callbackType == kCFSocketWriteCallBack) {
|
||||
if (socketInfo->writeNotifier)
|
||||
if (socketInfo->writeNotifier && socketInfo->writeEnabled) {
|
||||
socketInfo->writeEnabled = false;
|
||||
QGuiApplication::sendEvent(socketInfo->writeNotifier, ¬ifierEvent);
|
||||
}
|
||||
}
|
||||
|
||||
if (cfSocketNotifier->maybeCancelWaitForMoreEvents)
|
||||
@ -88,12 +92,12 @@ void qt_mac_remove_socket_from_runloop(const CFSocketRef socket, CFRunLoopSource
|
||||
CFRunLoopRemoveSource(CFRunLoopGetMain(), runloop, kCFRunLoopCommonModes);
|
||||
CFSocketDisableCallBacks(socket, kCFSocketReadCallBack);
|
||||
CFSocketDisableCallBacks(socket, kCFSocketWriteCallBack);
|
||||
CFRunLoopSourceInvalidate(runloop);
|
||||
}
|
||||
|
||||
QCFSocketNotifier::QCFSocketNotifier()
|
||||
:eventDispatcher(0)
|
||||
, maybeCancelWaitForMoreEvents(0)
|
||||
: eventDispatcher(0)
|
||||
, maybeCancelWaitForMoreEvents(0)
|
||||
, enableNotifiersObserver(0)
|
||||
{
|
||||
|
||||
}
|
||||
@ -150,36 +154,34 @@ void QCFSocketNotifier::registerSocketNotifier(QSocketNotifier *notifier)
|
||||
}
|
||||
|
||||
CFOptionFlags flags = CFSocketGetSocketFlags(socketInfo->socket);
|
||||
flags |= kCFSocketAutomaticallyReenableWriteCallBack; //QSocketNotifier stays enabled after a write
|
||||
flags &= ~kCFSocketCloseOnInvalidate; //QSocketNotifier doesn't close the socket upon destruction/invalidation
|
||||
// QSocketNotifier doesn't close the socket upon destruction/invalidation
|
||||
flags &= ~kCFSocketCloseOnInvalidate;
|
||||
// Expicitly disable automatic re-enable, as we do that manually on each runloop pass
|
||||
flags &= ~(kCFSocketAutomaticallyReenableWriteCallBack | kCFSocketAutomaticallyReenableReadCallBack);
|
||||
CFSocketSetSocketFlags(socketInfo->socket, flags);
|
||||
|
||||
// Add CFSocket to runloop.
|
||||
if (!(socketInfo->runloop = qt_mac_add_socket_to_runloop(socketInfo->socket))) {
|
||||
qWarning("QEventDispatcherMac::registerSocketNotifier: Failed to add CFSocket to runloop");
|
||||
CFSocketInvalidate(socketInfo->socket);
|
||||
CFRelease(socketInfo->socket);
|
||||
return;
|
||||
}
|
||||
|
||||
// Disable both callback types by default. This must be done after
|
||||
// we add the CFSocket to the runloop, or else these calls will have
|
||||
// no effect.
|
||||
CFSocketDisableCallBacks(socketInfo->socket, kCFSocketReadCallBack);
|
||||
CFSocketDisableCallBacks(socketInfo->socket, kCFSocketWriteCallBack);
|
||||
|
||||
macSockets.insert(nativeSocket, socketInfo);
|
||||
}
|
||||
|
||||
// Increment read/write counters and select enable callbacks if necessary.
|
||||
if (type == QSocketNotifier::Read) {
|
||||
Q_ASSERT(socketInfo->readNotifier == 0);
|
||||
socketInfo->readNotifier = notifier;
|
||||
CFSocketEnableCallBacks(socketInfo->socket, kCFSocketReadCallBack);
|
||||
socketInfo->readEnabled = false;
|
||||
} else if (type == QSocketNotifier::Write) {
|
||||
Q_ASSERT(socketInfo->writeNotifier == 0);
|
||||
socketInfo->writeNotifier = notifier;
|
||||
CFSocketEnableCallBacks(socketInfo->socket, kCFSocketWriteCallBack);
|
||||
socketInfo->writeEnabled = false;
|
||||
}
|
||||
|
||||
if (!enableNotifiersObserver) {
|
||||
// Create a run loop observer which enables the socket notifiers on each
|
||||
// pass of the run loop, before any sources are processed.
|
||||
CFRunLoopObserverContext context = {};
|
||||
context.info = this;
|
||||
enableNotifiersObserver = CFRunLoopObserverCreate(kCFAllocatorDefault, kCFRunLoopBeforeSources,
|
||||
true, 0, enableSocketNotifiers, &context);
|
||||
Q_ASSERT(enableNotifiersObserver);
|
||||
CFRunLoopAddObserver(CFRunLoopGetMain(), enableNotifiersObserver, kCFRunLoopCommonModes);
|
||||
}
|
||||
}
|
||||
|
||||
@ -212,21 +214,18 @@ void QCFSocketNotifier::unregisterSocketNotifier(QSocketNotifier *notifier)
|
||||
if (type == QSocketNotifier::Read) {
|
||||
Q_ASSERT(notifier == socketInfo->readNotifier);
|
||||
socketInfo->readNotifier = 0;
|
||||
socketInfo->readEnabled = false;
|
||||
CFSocketDisableCallBacks(socketInfo->socket, kCFSocketReadCallBack);
|
||||
} else if (type == QSocketNotifier::Write) {
|
||||
Q_ASSERT(notifier == socketInfo->writeNotifier);
|
||||
socketInfo->writeNotifier = 0;
|
||||
socketInfo->writeEnabled = false;
|
||||
CFSocketDisableCallBacks(socketInfo->socket, kCFSocketWriteCallBack);
|
||||
}
|
||||
|
||||
// Remove CFSocket from runloop if this was the last QSocketNotifier.
|
||||
if (socketInfo->readNotifier == 0 && socketInfo->writeNotifier == 0) {
|
||||
if (CFSocketIsValid(socketInfo->socket))
|
||||
qt_mac_remove_socket_from_runloop(socketInfo->socket, socketInfo->runloop);
|
||||
CFRunLoopSourceInvalidate(socketInfo->runloop);
|
||||
CFRelease(socketInfo->runloop);
|
||||
CFSocketInvalidate(socketInfo->socket);
|
||||
CFRelease(socketInfo->socket);
|
||||
unregisterSocketInfo(socketInfo);
|
||||
delete socketInfo;
|
||||
macSockets.remove(nativeSocket);
|
||||
}
|
||||
@ -235,14 +234,70 @@ void QCFSocketNotifier::unregisterSocketNotifier(QSocketNotifier *notifier)
|
||||
void QCFSocketNotifier::removeSocketNotifiers()
|
||||
{
|
||||
// Remove CFSockets from the runloop.
|
||||
for (MacSocketHash::ConstIterator it = macSockets.constBegin(); it != macSockets.constEnd(); ++it) {
|
||||
MacSocketInfo *socketInfo = (*it);
|
||||
if (CFSocketIsValid(socketInfo->socket)) {
|
||||
foreach (MacSocketInfo *socketInfo, macSockets) {
|
||||
unregisterSocketInfo(socketInfo);
|
||||
delete socketInfo;
|
||||
}
|
||||
|
||||
macSockets.clear();
|
||||
|
||||
destroyRunLoopObserver();
|
||||
}
|
||||
|
||||
void QCFSocketNotifier::destroyRunLoopObserver()
|
||||
{
|
||||
if (!enableNotifiersObserver)
|
||||
return;
|
||||
|
||||
CFRunLoopObserverInvalidate(enableNotifiersObserver);
|
||||
CFRelease(enableNotifiersObserver);
|
||||
enableNotifiersObserver = 0;
|
||||
}
|
||||
|
||||
void QCFSocketNotifier::unregisterSocketInfo(MacSocketInfo *socketInfo)
|
||||
{
|
||||
if (socketInfo->runloop) {
|
||||
if (CFSocketIsValid(socketInfo->socket))
|
||||
qt_mac_remove_socket_from_runloop(socketInfo->socket, socketInfo->runloop);
|
||||
CFRunLoopSourceInvalidate(socketInfo->runloop);
|
||||
CFRelease(socketInfo->runloop);
|
||||
CFSocketInvalidate(socketInfo->socket);
|
||||
CFRelease(socketInfo->socket);
|
||||
CFRunLoopSourceInvalidate(socketInfo->runloop);
|
||||
CFRelease(socketInfo->runloop);
|
||||
}
|
||||
CFSocketInvalidate(socketInfo->socket);
|
||||
CFRelease(socketInfo->socket);
|
||||
}
|
||||
|
||||
void QCFSocketNotifier::enableSocketNotifiers(CFRunLoopObserverRef ref, CFRunLoopActivity activity, void *info)
|
||||
{
|
||||
Q_UNUSED(ref);
|
||||
Q_UNUSED(activity);
|
||||
|
||||
QCFSocketNotifier *that = static_cast<QCFSocketNotifier *>(info);
|
||||
|
||||
foreach (MacSocketInfo *socketInfo, that->macSockets) {
|
||||
if (!CFSocketIsValid(socketInfo->socket))
|
||||
continue;
|
||||
|
||||
if (!socketInfo->runloop) {
|
||||
// Add CFSocket to runloop.
|
||||
if (!(socketInfo->runloop = qt_mac_add_socket_to_runloop(socketInfo->socket))) {
|
||||
qWarning("QEventDispatcherMac::registerSocketNotifier: Failed to add CFSocket to runloop");
|
||||
CFSocketInvalidate(socketInfo->socket);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!socketInfo->readNotifier)
|
||||
CFSocketDisableCallBacks(socketInfo->socket, kCFSocketReadCallBack);
|
||||
if (!socketInfo->writeNotifier)
|
||||
CFSocketDisableCallBacks(socketInfo->socket, kCFSocketWriteCallBack);
|
||||
}
|
||||
|
||||
if (socketInfo->readNotifier && !socketInfo->readEnabled) {
|
||||
socketInfo->readEnabled = true;
|
||||
CFSocketEnableCallBacks(socketInfo->socket, kCFSocketReadCallBack);
|
||||
}
|
||||
if (socketInfo->writeNotifier && !socketInfo->writeEnabled) {
|
||||
socketInfo->writeEnabled = true;
|
||||
CFSocketEnableCallBacks(socketInfo->socket, kCFSocketWriteCallBack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -53,11 +53,14 @@
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
struct MacSocketInfo {
|
||||
MacSocketInfo() : socket(0), runloop(0), readNotifier(0), writeNotifier(0) {}
|
||||
MacSocketInfo() : socket(0), runloop(0), readNotifier(0), writeNotifier(0),
|
||||
readEnabled(false), writeEnabled(false) {}
|
||||
CFSocketRef socket;
|
||||
CFRunLoopSourceRef runloop;
|
||||
QObject *readNotifier;
|
||||
QObject *writeNotifier;
|
||||
bool readEnabled;
|
||||
bool writeEnabled;
|
||||
};
|
||||
typedef QHash<int, MacSocketInfo *> MacSocketHash;
|
||||
|
||||
@ -83,9 +86,18 @@ public:
|
||||
void unregisterSocketNotifier(QSocketNotifier *notifier);
|
||||
void removeSocketNotifiers();
|
||||
|
||||
private:
|
||||
void destroyRunLoopObserver();
|
||||
|
||||
static void unregisterSocketInfo(MacSocketInfo *socketInfo);
|
||||
static void enableSocketNotifiers(CFRunLoopObserverRef ref, CFRunLoopActivity activity, void *info);
|
||||
|
||||
MacSocketHash macSockets;
|
||||
QAbstractEventDispatcher *eventDispatcher;
|
||||
MaybeCancelWaitForMoreEventsFn maybeCancelWaitForMoreEvents;
|
||||
CFRunLoopObserverRef enableNotifiersObserver;
|
||||
|
||||
friend void qt_mac_socket_callback(CFSocketRef, CFSocketCallBackType, CFDataRef, const void *, void *);
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -86,17 +86,9 @@ void QCocoaScreen::updateGeometry()
|
||||
|
||||
NSRect frameRect = [nsScreen frame];
|
||||
|
||||
// Since Mavericks, there is a setting, System Preferences->Mission Control->
|
||||
// Displays have separate Spaces.
|
||||
BOOL spansDisplays = NO;
|
||||
#if QT_OSX_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_9)
|
||||
if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_9)
|
||||
spansDisplays = [NSScreen screensHaveSeparateSpaces];
|
||||
#endif
|
||||
if (spansDisplays || m_screenIndex == 0) {
|
||||
if (m_screenIndex == 0) {
|
||||
m_geometry = QRect(frameRect.origin.x, frameRect.origin.y, frameRect.size.width, frameRect.size.height);
|
||||
// Displays have separate Spaces setting is on or this is the primary screen,
|
||||
// the one that contains the menubar. Its origin should be
|
||||
// This is the primary screen, the one that contains the menubar. Its origin should be
|
||||
// (0, 0), and it's the only one whose available geometry differs from its full geometry.
|
||||
NSRect visibleRect = [nsScreen visibleFrame];
|
||||
m_availableGeometry = QRect(visibleRect.origin.x,
|
||||
|
@ -1115,7 +1115,7 @@ HRESULT QWinRTScreen::onSuspended(IInspectable *, ISuspendingEventArgs *)
|
||||
#ifndef Q_OS_WINPHONE
|
||||
Q_D(QWinRTScreen);
|
||||
ComPtr<ID3D11Device> d3dDevice;
|
||||
const EGLBoolean ok = eglQuerySurfacePointerANGLE(d->eglDisplay, EGL_NO_SURFACE, EGL_DEVICE_EXT, (void **)d3dDevice.GetAddressOf());
|
||||
const EGLBoolean ok = eglQuerySurfacePointerANGLE(d->eglDisplay, d->eglSurface, EGL_DEVICE_EXT, (void **)d3dDevice.GetAddressOf());
|
||||
if (ok && d3dDevice) {
|
||||
ComPtr<IDXGIDevice3> dxgiDevice;
|
||||
if (SUCCEEDED(d3dDevice.As(&dxgiDevice)))
|
||||
|
@ -1282,19 +1282,21 @@ bool QMYSQLDriver::open(const QString& db,
|
||||
if (writeTimeout != 0)
|
||||
mysql_options(d->mysql, MYSQL_OPT_WRITE_TIMEOUT, &writeTimeout);
|
||||
#endif
|
||||
if (mysql_real_connect(d->mysql,
|
||||
host.isNull() ? static_cast<const char *>(0)
|
||||
: host.toLocal8Bit().constData(),
|
||||
user.isNull() ? static_cast<const char *>(0)
|
||||
: user.toLocal8Bit().constData(),
|
||||
password.isNull() ? static_cast<const char *>(0)
|
||||
: password.toLocal8Bit().constData(),
|
||||
db.isNull() ? static_cast<const char *>(0)
|
||||
: db.toLocal8Bit().constData(),
|
||||
(port > -1) ? port : 0,
|
||||
unixSocket.isNull() ? static_cast<const char *>(0)
|
||||
: unixSocket.toLocal8Bit().constData(),
|
||||
optionFlags)) {
|
||||
MYSQL *mysql = mysql_real_connect(d->mysql,
|
||||
host.isNull() ? static_cast<const char *>(0)
|
||||
: host.toLocal8Bit().constData(),
|
||||
user.isNull() ? static_cast<const char *>(0)
|
||||
: user.toLocal8Bit().constData(),
|
||||
password.isNull() ? static_cast<const char *>(0)
|
||||
: password.toLocal8Bit().constData(),
|
||||
db.isNull() ? static_cast<const char *>(0)
|
||||
: db.toLocal8Bit().constData(),
|
||||
(port > -1) ? port : 0,
|
||||
unixSocket.isNull() ? static_cast<const char *>(0)
|
||||
: unixSocket.toLocal8Bit().constData(),
|
||||
optionFlags);
|
||||
|
||||
if (mysql == d->mysql) {
|
||||
if (!db.isEmpty() && mysql_select_db(d->mysql, db.toLocal8Bit().constData())) {
|
||||
setLastError(qMakeError(tr("Unable to open database '%1'").arg(db), QSqlError::ConnectionError, d));
|
||||
mysql_close(d->mysql);
|
||||
@ -1305,12 +1307,17 @@ bool QMYSQLDriver::open(const QString& db,
|
||||
if (reconnect)
|
||||
mysql_options(d->mysql, MYSQL_OPT_RECONNECT, &reconnect);
|
||||
#endif
|
||||
} else {
|
||||
setLastError(qMakeError(tr("Unable to connect"),
|
||||
QSqlError::ConnectionError, d));
|
||||
mysql_close(d->mysql);
|
||||
d->mysql = NULL;
|
||||
setOpenError(true);
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
setLastError(qMakeError(tr("Unable to connect"),
|
||||
QSqlError::ConnectionError, d));
|
||||
mysql_close(d->mysql);
|
||||
d->mysql = NULL;
|
||||
setLastError(qMakeError(tr("Failed to allocated data"),
|
||||
QSqlError::UnknownError, d));
|
||||
setOpenError(true);
|
||||
return false;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user