Merge remote-tracking branch 'origin/5.3' into dev

Conflicts:
	src/gui/accessible/qaccessiblecache_mac.mm
	src/gui/accessible/qaccessiblecache_p.h
	src/plugins/platforms/cocoa/qcocoaaccessibilityelement.h
	src/plugins/platforms/cocoa/qcocoawindow.h
	src/plugins/platforms/cocoa/qcocoawindow.mm
	src/widgets/kernel/qwidget_qpa.cpp

Manually moved change in qwidget_qpa.cpp to qwidget.cpp
    (cd07830e3b)

Change-Id: Ia51f471f9b53de2f3b07d77ea89db9303ac8961d
bb10
Frederik Gladhorn 2014-07-03 23:56:45 +02:00
commit 39a290af6c
35 changed files with 523 additions and 245 deletions

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the examples of the Qt Toolkit.
@ -163,24 +163,23 @@ void AddressWidget::setupTabs()
for (int i = 0; i < groups.size(); ++i) {
QString str = groups.at(i);
QString regExp = QString("^[%1].*").arg(str);
proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(table);
proxyModel->setFilterRegExp(QRegExp(regExp, Qt::CaseInsensitive));
proxyModel->setFilterKeyColumn(0);
QTableView *tableView = new QTableView;
tableView->setModel(proxyModel);
tableView->setSortingEnabled(true);
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
tableView->horizontalHeader()->setStretchLastSection(true);
tableView->verticalHeader()->hide();
tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
tableView->setSelectionMode(QAbstractItemView::SingleSelection);
QString newStr = QString("^[%1].*").arg(str);
proxyModel->setFilterRegExp(QRegExp(newStr, Qt::CaseInsensitive));
proxyModel->setFilterKeyColumn(0);
proxyModel->sort(0, Qt::AscendingOrder);
tableView->setSortingEnabled(true);
connect(tableView->selectionModel(),
SIGNAL(selectionChanged(QItemSelection,QItemSelection)),

View File

@ -0,0 +1,118 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the qmake spec of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include "qeglfshooks.h"
#include <EGL/fbdev_window.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/fb.h>
#include <private/qcore_unix_p.h>
QT_BEGIN_NAMESPACE
class QEglFSHiX5Hd2Hooks : public QEglFSHooks
{
private:
void fbInit();
public:
void platformInit() Q_DECL_OVERRIDE;
EGLNativeWindowType createNativeWindow(QPlatformWindow *window, const QSize &size, const QSurfaceFormat &format) Q_DECL_OVERRIDE;
void destroyNativeWindow(EGLNativeWindowType window) Q_DECL_OVERRIDE;
};
void QEglFSHiX5Hd2Hooks::fbInit()
{
int fd = qt_safe_open("/dev/fb0", O_RDWR, 0);
if (fd == -1)
qWarning("Failed to open fb to detect screen resolution!");
struct fb_var_screeninfo vinfo;
memset(&vinfo, 0, sizeof(vinfo));
if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) == -1)
qWarning("Could not get variable screen info");
vinfo.bits_per_pixel = 32;
vinfo.red.length = 8;
vinfo.green.length = 8;
vinfo.blue.length = 8;
vinfo.transp.length = 8;
vinfo.blue.offset = 0;
vinfo.green.offset = 8;
vinfo.red.offset = 16;
vinfo.transp.offset = 24;
vinfo.yres_virtual = 2 * vinfo.yres;
if (ioctl(fd, FBIOPUT_VSCREENINFO, &vinfo) == -1)
qErrnoWarning(errno, "Unable to set double buffer mode!");
qt_safe_close(fd);
return;
}
void QEglFSHiX5Hd2Hooks::platformInit()
{
QEglFSHooks::platformInit();
fbInit();
}
EGLNativeWindowType QEglFSHiX5Hd2Hooks::createNativeWindow(QPlatformWindow *window, const QSize &size, const QSurfaceFormat &format)
{
fbdev_window *fbwin = reinterpret_cast<fbdev_window *>(malloc(sizeof(fbdev_window)));
if (NULL == fbwin)
return 0;
fbwin->width = size.width();
fbwin->height = size.height();
return (EGLNativeWindowType)fbwin;
}
void QEglFSHiX5Hd2Hooks::destroyNativeWindow(EGLNativeWindowType window)
{
free(window);
}
QEglFSHiX5Hd2Hooks eglFSHiX5Hd2Hooks;
QEglFSHooks *platformHooks = &eglFSHiX5Hd2Hooks;
QT_END_NAMESPACE

View File

@ -0,0 +1,44 @@
#
# qmake configuration for linux-arm-hisilicon-hix5hd2-g++ using the arm-linux-gnueabihf-g++ crosscompiler
#
# A typical configure line looks like this:
# <path-to-qt-src>/configure -opensource -confirm-license -release -make libs -make examples -optimized-qmake
# -platform linux-g++-64 -device linux-arm-hisilicon-hix5hd2-g++ -device-option CROSS_COMPILE=arm-linux-gnueabihf-
# -opengl es2 -no-qml-debug -no-directfb -no-kms -no-xcb -no-alsa -no-audio-backend -qt-zlib -qt-libjpeg -qt-libpng
# -no-icu -no-nis -sysroot <path-to-rootfs> -extprefix <path-to-targetinstall> -hostprefix <path-to-hostinstall>
# -prefix <path-to-prefix>
#
# such as
# ./configure -opensource -confirm-license -release -make libs -make examples -optimized-qmake
# -platform linux-g++-64 -device linux-arm-hisilicon-hix5hd2-g++ -device-option CROSS_COMPILE=arm-linux-gnueabihf-
# -opengl es2 -no-qml-debug -no-directfb -no-kms -no-xcb -no-alsa -no-audio-backend -qt-zlib -qt-libjpeg -qt-libpng
# -no-icu -no-nis -sysroot /home/abc/project/sysbase
# -extprefix /home/abc/project/sysbase/qt_install
# -hostprefix /home/abc/project/qtdir/qtbase_hostinstall
# -prefix /home/abc/project/sysbase/qt_install
include(../common/linux_device_pre.conf)
EGLFS_PLATFORM_HOOKS_SOURCES = $$PWD/qeglfshooks_hix5hd2.cpp
QMAKE_INCDIR += /usr/arm-linux-gnueabihf/include
QMAKE_LIBDIR += /usr/arm-linux-gnueabihf/lib
QMAKE_LIBS += -lrt
QMAKE_INCDIR_EGL += $$[QT_SYSROOT]/egl/include
QMAKE_LIBDIR_EGL += $$[QT_SYSROOT]/egl/lib
QMAKE_INCDIR_OPENGL_ES2 += $$QMAKE_INCDIR_EGL
QMAKE_LIBDIR_OPENGL_ES2 += $$QMAKE_LIBDIR_EGL
QMAKE_LIBS_EGL += -lMali
QMAKE_LIBS_OPENGL_ES2 += $$QMAKE_LIBS_EGL
QMAKE_LIBS_OPENVG += $$QMAKE_LIBS_EGL
DISTRO_OPTS += hard-float
QMAKE_CFLAGS +=-march=armv7-a -mcpu=cortex-a9 -mfpu=vfpv3-d16
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
include(../common/linux_arm_device_post.conf)
load(qt_config)

View File

@ -0,0 +1,42 @@
/****************************************************************************
**
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the qmake spec of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include "../../linux-g++/qplatformdefs.h"

View File

@ -57,7 +57,7 @@ void QDirectFBEGLHooks::platformInit()
void QDirectFBEGLHooks::platformDestroy()
{
DBPL_UnregisterDirectFBDisplayPlatform(&dbpl_handle);
DBPL_UnregisterDirectFBDisplayPlatform(dbpl_handle);
dbpl_handle = 0;
}

View File

@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2012 Intel Corporation.
** Copyright (C) 2014 Intel Corporation.
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@ -59,7 +59,7 @@
#include <QtCore/qconfig.h>
#include <QtCore/qfeatures.h>
#endif
#if defined(Q_CC_MSVC) && _MSC_VER <= 1500 /* VS2008 */
#ifdef _MSC_VER
# define QT_SUPPORTS(FEATURE) (!defined QT_NO_##FEATURE)
#else
# define QT_SUPPORTS(FEATURE) (!defined(QT_NO_##FEATURE))

View File

@ -1100,8 +1100,13 @@ typedef void (*QtMsgHandler)(QtMsgType, const char *);
Q_CORE_EXPORT QtMsgHandler qInstallMsgHandler(QtMsgHandler);
#endif
static QtMsgHandler msgHandler = 0; // pointer to debug handler (without context)
static QtMessageHandler messageHandler = 0; // pointer to debug handler (with context)
static void qDefaultMsgHandler(QtMsgType type, const char *buf);
static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &buf);
// pointer to QtMsgHandler debug handler (without context)
static QBasicAtomicPointer<void (QtMsgType, const char*)> msgHandler = Q_BASIC_ATOMIC_INITIALIZER(qDefaultMsgHandler);
// pointer to QtMessageHandler debug handler (with context)
static QBasicAtomicPointer<void (QtMsgType, const QMessageLogContext &, const QString &)> messageHandler = Q_BASIC_ATOMIC_INITIALIZER(qDefaultMessageHandler);
#if defined(QT_USE_JOURNALD) && !defined(QT_BOOTSTRAPPED)
static void systemd_default_message_handler(QtMsgType type,
@ -1267,20 +1272,15 @@ static void qt_message_print(QtMsgType msgType, const QMessageLogContext &contex
}
#endif
if (!msgHandler)
msgHandler = qDefaultMsgHandler;
if (!messageHandler)
messageHandler = qDefaultMessageHandler;
// prevent recursion in case the message handler generates messages
// itself, e.g. by using Qt API
if (grabMessageHandler()) {
// prefer new message handler over the old one
if (msgHandler == qDefaultMsgHandler
|| messageHandler != qDefaultMessageHandler) {
(*messageHandler)(msgType, context, message);
if (msgHandler.load() == qDefaultMsgHandler
|| messageHandler.load() != qDefaultMessageHandler) {
(*messageHandler.load())(msgType, context, message);
} else {
(*msgHandler)(msgType, message.toLocal8Bit().constData());
(*msgHandler.load())(msgType, message.toLocal8Bit().constData());
}
ungrabMessageHandler();
} else {
@ -1485,22 +1485,18 @@ void qErrnoWarning(int code, const char *msg, ...)
QtMessageHandler qInstallMessageHandler(QtMessageHandler h)
{
if (!messageHandler)
messageHandler = qDefaultMessageHandler;
QtMessageHandler old = messageHandler;
messageHandler = h;
return old;
if (!h)
h = qDefaultMessageHandler;
//set 'h' and return old message handler
return messageHandler.fetchAndStoreRelaxed(h);
}
QtMsgHandler qInstallMsgHandler(QtMsgHandler h)
{
//if handler is 0, set it to the
//default message handler
if (!msgHandler)
msgHandler = qDefaultMsgHandler;
QtMsgHandler old = msgHandler;
msgHandler = h;
return old;
if (!h)
h = qDefaultMsgHandler;
//set 'h' and return old message handler
return msgHandler.fetchAndStoreRelaxed(h);
}
void qSetMessagePattern(const QString &pattern)

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation of the Qt Toolkit.
@ -306,7 +306,7 @@
This enum provides shorter names for the keyboard modifier keys
supported by Qt.
\b{Note:} On Mac OS X, the \c CTRL value corresponds to
\note On Mac OS X, the \c CTRL value corresponds to
the Command keys on the Macintosh keyboard, and the \c META value
corresponds to the Control keys.
@ -986,7 +986,7 @@
\value WA_NoSystemBackground Indicates that the widget has no background,
i.e. when the widget receives paint events, the background is not
automatically repainted. \note Unlike WA_OpaquePaintEvent, newly exposed
automatically repainted. \b Note: Unlike WA_OpaquePaintEvent, newly exposed
areas are \b never filled with the background (e.g., after showing a
window for the first time the user can see "through" it until the
application processes the paint events). This flag is set or cleared by the
@ -998,7 +998,7 @@
before generating paint events. The use of WA_OpaquePaintEvent provides a
small optimization by helping to reduce flicker on systems that do not
support double buffering and avoiding computational cycles necessary to
erase the background prior to painting. \note Unlike
erase the background prior to painting. \b Note: Unlike
WA_NoSystemBackground, WA_OpaquePaintEvent makes an effort to avoid
transparent window backgrounds. This flag is set or cleared by the widget's
author.
@ -1011,7 +1011,7 @@
\value WA_PaintOnScreen Indicates that the widget wants to draw directly
onto the screen. Widgets with this attribute set do not participate in
composition management, i.e. they cannot be semi-transparent or shine
through semi-transparent overlapping widgets. \note This flag is only
through semi-transparent overlapping widgets. \b Note: This flag is only
supported on X11 and it disables double buffering. On Qt for Embedded
Linux, the flag only works when set on a top-level widget and it relies on
support from the active screen driver. This flag is set or cleared by the
@ -1082,7 +1082,7 @@
\value WA_UpdatesDisabled Indicates that updates are blocked (including the
system background). This flag is set or cleared by the Qt kernel.
\warning This flag must \e never be set or cleared by the widget's author.
\b Warning: This flag must \e never be set or cleared by the widget's author.
\value WA_WindowModified Indicates that the window is marked as modified.
On some platforms this flag will do nothing, on others (including Mac OS X
@ -1124,50 +1124,50 @@
\value WA_X11NetWmWindowTypeToolBar Adds _NET_WM_WINDOW_TYPE_TOOLBAR to the
window's _NET_WM_WINDOW_TYPE X11 window property. See
http://standards.freedesktop.org/wm-spec/ for more details. This attribute
has no effect on non-X11 platforms. \note Qt automatically sets this
has no effect on non-X11 platforms. \b Note: Qt automatically sets this
attribute for QToolBar.
\value WA_X11NetWmWindowTypeMenu Adds _NET_WM_WINDOW_TYPE_MENU to the
window's _NET_WM_WINDOW_TYPE X11 window property. See
http://standards.freedesktop.org/wm-spec/ for more details. This attribute
has no effect on non-X11 platforms. \note Qt automatically sets this
has no effect on non-X11 platforms. \b Note: Qt automatically sets this
attribute for QMenu when torn-off.
\value WA_X11NetWmWindowTypeUtility Adds _NET_WM_WINDOW_TYPE_UTILITY to the
window's _NET_WM_WINDOW_TYPE X11 window property. See
http://standards.freedesktop.org/wm-spec/ for more details. This attribute
has no effect on non-X11 platforms. \note Qt automatically sets this
has no effect on non-X11 platforms. \b Note: Qt automatically sets this
attribute for the Qt::Tool window type.
\value WA_X11NetWmWindowTypeSplash Adds _NET_WM_WINDOW_TYPE_SPLASH to the
window's _NET_WM_WINDOW_TYPE X11 window property. See
http://standards.freedesktop.org/wm-spec/ for more details. This attribute
has no effect on non-X11 platforms. \note Qt automatically sets this
has no effect on non-X11 platforms. \b Note: Qt automatically sets this
attribute for the Qt::SplashScreen window type.
\value WA_X11NetWmWindowTypeDialog Adds _NET_WM_WINDOW_TYPE_DIALOG
to the window's _NET_WM_WINDOW_TYPE X11 window property. See
http://standards.freedesktop.org/wm-spec/ for more details. This
attribute has no effect on non-X11 platforms. \note Qt automatically sets
attribute has no effect on non-X11 platforms. \b Note: Qt automatically sets
this attribute for the Qt::Dialog and Qt::Sheet window types.
\value WA_X11NetWmWindowTypeDropDownMenu Adds
_NET_WM_WINDOW_TYPE_DROPDOWN_MENU to the window's
_NET_WM_WINDOW_TYPE X11 window property. See
http://standards.freedesktop.org/wm-spec/ for more details. This
attribute has no effect on non-X11 platforms. \note Qt
attribute has no effect on non-X11 platforms. \b Note: Qt
automatically sets this attribute for QMenus added to a QMenuBar.
\value WA_X11NetWmWindowTypePopupMenu Adds _NET_WM_WINDOW_TYPE_POPUP_MENU
to the window's _NET_WM_WINDOW_TYPE X11 window property. See
http://standards.freedesktop.org/wm-spec/ for more details. This attribute
has no effect on non-X11 platforms. \note Qt automatically sets this
has no effect on non-X11 platforms. \b Note: Qt automatically sets this
attribute for QMenu.
\value WA_X11NetWmWindowTypeToolTip Adds _NET_WM_WINDOW_TYPE_TOOLTIP to the
window's _NET_WM_WINDOW_TYPE X11 window property. See
http://standards.freedesktop.org/wm-spec/ for more details. This attribute
has no effect on non-X11 platforms. \note Qt automatically sets this
has no effect on non-X11 platforms. \b Note: Qt automatically sets this
attribute for the Qt::ToolTip window type.
\value WA_X11NetWmWindowTypeNotification Adds
@ -1178,13 +1178,13 @@
\value WA_X11NetWmWindowTypeCombo Adds _NET_WM_WINDOW_TYPE_COMBO
to the window's _NET_WM_WINDOW_TYPE X11 window property. See
http://standards.freedesktop.org/wm-spec/ for more details. This attribute
has no effect on non-X11 platforms. \note Qt automatically sets this
has no effect on non-X11 platforms. \b Note: Qt automatically sets this
attribute for the QComboBox pop-up.
\value WA_X11NetWmWindowTypeDND Adds _NET_WM_WINDOW_TYPE_DND to
the window's _NET_WM_WINDOW_TYPE X11 window property. See
http://standards.freedesktop.org/wm-spec/ for more details. This attribute
has no effect on non-X11 platforms. \note Qt automatically sets this
has no effect on non-X11 platforms. \b Note: Qt automatically sets this
attribute on the feedback widget used during a drag.
\value WA_MacFrameworkScaled Enables resolution independence aware mode
@ -1255,7 +1255,7 @@
\value Key_Enter Typically located on the keypad.
\value Key_Insert
\value Key_Delete
\value Key_Pause The Pause/Break key (\note Not anything to do with pausing media)
\value Key_Pause The Pause/Break key (\b Note: Not related to pausing media)
\value Key_Print
\value Key_SysReq
\value Key_Clear
@ -1526,7 +1526,7 @@
\value Key_MediaPrevious
\value Key_MediaNext
\value Key_MediaRecord
\value Key_MediaPause A key setting the state of the media player to pause (\note not the pause/break key)
\value Key_MediaPause A key setting the state of the media player to pause (\b Note: not the pause/break key)
\value Key_MediaTogglePlayPause A key to toggle the play/pause state in the media player (rather than setting an absolute state)
\value Key_HomePage
\value Key_Favorites
@ -2868,7 +2868,7 @@
The keypad is used to implement a virtual cursor, unless
the device has an analog mouse type of input device (e.g. touchpad)
\note: in 4.6, cursor navigation is only implemented for Symbian OS.
\note In 4.6, cursor navigation is only implemented for Symbian OS.
On other platforms, it behaves as NavigationModeNone.
\sa QApplication::setNavigationMode()
\sa QApplication::navigationMode()

View File

@ -43,19 +43,19 @@
QT_BEGIN_NAMESPACE
void QAccessibleCache::insertElement(QAccessible::Id axid, QMacAccessibilityElement *element) const
void QAccessibleCache::insertElement(QAccessible::Id axid, QT_MANGLE_NAMESPACE(QMacAccessibilityElement) *element) const
{
cocoaElements[axid] = element;
}
void QAccessibleCache::removeCocoaElement(QAccessible::Id axid)
{
QMacAccessibilityElement *element = elementForId(axid);
QT_MANGLE_NAMESPACE(QMacAccessibilityElement) *element = elementForId(axid);
[element invalidate];
cocoaElements.remove(axid);
}
QMacAccessibilityElement *QAccessibleCache::elementForId(QAccessible::Id axid) const
QT_MANGLE_NAMESPACE(QMacAccessibilityElement) *QAccessibleCache::elementForId(QAccessible::Id axid) const
{
return cocoaElements.value(axid);
}

View File

@ -59,9 +59,7 @@
#include "qaccessible.h"
#ifdef Q_OS_MAC
Q_FORWARD_DECLARE_OBJC_CLASS(QMacAccessibilityElement);
#endif
Q_FORWARD_DECLARE_OBJC_CLASS(QT_MANGLE_NAMESPACE(QMacAccessibilityElement));
QT_BEGIN_NAMESPACE
@ -76,8 +74,8 @@ public:
void deleteInterface(QAccessible::Id id, QObject *obj = 0);
#ifdef Q_OS_MAC
QMacAccessibilityElement *elementForId(QAccessible::Id axid) const;
void insertElement(QAccessible::Id axid, QMacAccessibilityElement *element) const;
QT_MANGLE_NAMESPACE(QMacAccessibilityElement) *elementForId(QAccessible::Id axid) const;
void insertElement(QAccessible::Id axid, QT_MANGLE_NAMESPACE(QMacAccessibilityElement) *element) const;
#endif
private Q_SLOTS:
@ -91,7 +89,7 @@ private:
#ifdef Q_OS_MAC
void removeCocoaElement(QAccessible::Id axid);
mutable QHash<QAccessible::Id, QMacAccessibilityElement *> cocoaElements;
mutable QHash<QAccessible::Id, QT_MANGLE_NAMESPACE(QMacAccessibilityElement) *> cocoaElements;
#endif
friend class QAccessible;

View File

@ -2812,9 +2812,8 @@ bool QOpenGLTexture::hasFeature(Feature feature)
break;
case TextureBuffer:
supported = f.version() >= qMakePair(4, 3)
|| (ctx->hasExtension(QByteArrayLiteral("GL_ARB_texture_buffer_object"))
&& ctx->hasExtension(QByteArrayLiteral("GL_ARB_texture_buffer_range")));
supported = f.version() >= qMakePair(3, 0)
|| ctx->hasExtension(QByteArrayLiteral("GL_ARB_texture_buffer_object"));
break;
case StencilTexturing:

View File

@ -116,6 +116,8 @@ void QDnsLookupRunnable::query(const int requestType, const QByteArray &requestN
unsigned int size;
endpointPairs->get_Size(&size);
// endpoint pairs might contain duplicates so we temporarily store addresses in a QSet
QSet<QHostAddress> addresses;
for (unsigned int i = 0; i < size; ++i) {
ComPtr<IEndpointPair> endpointpair;
endpointPairs->GetAt(i, &endpointpair);
@ -133,9 +135,12 @@ void QDnsLookupRunnable::query(const int requestType, const QByteArray &requestN
remoteHost->get_CanonicalName(name.GetAddressOf());
UINT32 length;
PCWSTR rawString = name.GetRawBuffer(&length);
addresses.insert(QHostAddress(QString::fromWCharArray(rawString, length)));
}
foreach (const QHostAddress &address, addresses) {
QDnsHostAddressRecord record;
record.d->name = aceHostname;
record.d->value = QHostAddress(QString::fromWCharArray(rawString, length));
record.d->value = address;
reply->hostAddressRecords.append(record);
}
}

View File

@ -43,22 +43,25 @@
#include <QtCore/qglobal.h>
#include "qt_mac_p.h"
#import <Cocoa/Cocoa.h>
#import <AppKit/NSAccessibility.h>
#import <qaccessible.h>
Q_FORWARD_DECLARE_OBJC_CLASS(QMacAccessibilityElement);
@class QT_MANGLE_NAMESPACE(QMacAccessibilityElement);
@interface QMacAccessibilityElement : NSObject {
@interface QT_MANGLE_NAMESPACE(QMacAccessibilityElement) : NSObject {
NSString *role;
QAccessible::Id axid;
}
- (id)initWithId:(QAccessible::Id)anId;
+ (QMacAccessibilityElement *)elementWithId:(QAccessible::Id)anId;
+ (QT_MANGLE_NAMESPACE(QMacAccessibilityElement) *)elementWithId:(QAccessible::Id)anId;
@end
#endif
QT_NAMESPACE_ALIAS_OBJC_CLASS(QMacAccessibilityElement);
#endif

View File

@ -433,7 +433,7 @@ static void cleanupCocoaApplicationDelegate()
{
Q_UNUSED(replyEvent);
NSString *urlString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
QWindowSystemInterface::handleFileOpenEvent(QCFString::toQString(urlString));
QWindowSystemInterface::handleFileOpenEvent(QUrl(QCFString::toQString(urlString)));
}
- (void)appleEventQuit:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent

View File

@ -329,12 +329,13 @@ NSMenuItem *QCocoaMenuItem::sync()
[m_native setKeyEquivalentModifierMask:NSCommandKeyMask];
}
NSImage *img = nil;
if (!m_icon.isNull()) {
NSImage *img = qt_mac_create_nsimage(m_icon);
img = qt_mac_create_nsimage(m_icon);
[img setSize:NSMakeSize(16, 16)];
[m_native setImage: img];
[img release];
}
[m_native setImage:img];
[img release];
[m_native setState:m_checked ? NSOnState : NSOffState];
return m_native;

View File

@ -51,14 +51,15 @@
#include "qcocoaglcontext.h"
#endif
#include "qnsview.h"
#include "qt_mac_p.h"
QT_FORWARD_DECLARE_CLASS(QCocoaWindow)
@class QNSWindowHelper;
@class QT_MANGLE_NAMESPACE(QNSWindowHelper);
@protocol QNSWindowProtocol
@property (nonatomic, readonly) QNSWindowHelper *helper;
@property (nonatomic, readonly) QT_MANGLE_NAMESPACE(QNSWindowHelper) *helper;
- (void)superSendEvent:(NSEvent *)theEvent;
- (void)closeAndRelease;
@ -67,7 +68,7 @@ QT_FORWARD_DECLARE_CLASS(QCocoaWindow)
typedef NSWindow<QNSWindowProtocol> QCocoaNSWindow;
@interface QNSWindowHelper : NSObject
@interface QT_MANGLE_NAMESPACE(QNSWindowHelper) : NSObject
{
QCocoaNSWindow *_window;
QCocoaWindow *_platformWindow;
@ -86,7 +87,9 @@ typedef NSWindow<QNSWindowProtocol> QCocoaNSWindow;
@end
@interface QNSWindow : NSWindow<QNSWindowProtocol>
QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSWindowHelper);
@interface QT_MANGLE_NAMESPACE(QNSWindow) : NSWindow<QNSWindowProtocol>
{
QNSWindowHelper *_helper;
}
@ -99,7 +102,9 @@ typedef NSWindow<QNSWindowProtocol> QCocoaNSWindow;
@end
@interface QNSPanel : NSPanel<QNSWindowProtocol>
QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSWindow);
@interface QT_MANGLE_NAMESPACE(QNSPanel) : NSPanel<QNSWindowProtocol>
{
QNSWindowHelper *_helper;
}
@ -112,7 +117,9 @@ typedef NSWindow<QNSWindowProtocol> QCocoaNSWindow;
@end
@class QNSWindowDelegate;
QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSPanel);
@class QT_MANGLE_NAMESPACE(QNSWindowDelegate);
QT_BEGIN_NAMESPACE
// QCocoaWindow
@ -227,6 +234,7 @@ public:
void obscureWindow();
void updateExposedGeometry();
QWindow *childWindowAt(QPoint windowPoint);
bool shouldRefuseKeyWindowAndFirstResponder();
protected:
void recreateWindow(const QPlatformWindow *parentWindow);
QCocoaNSWindow *createNSWindow();
@ -267,6 +275,7 @@ public: // for QNSView
bool m_windowUnderMouse;
bool m_inConstructor;
bool m_inSetVisible;
#ifndef QT_NO_OPENGL
QCocoaGLContext *m_glContext;
#endif

View File

@ -239,6 +239,9 @@ static bool isMouseEvent(NSEvent *ev)
if (!pw || pw->m_isNSWindowChild)
return NO;
if (pw->shouldRefuseKeyWindowAndFirstResponder())
return NO;
// The default implementation returns NO for title-bar less windows,
// override and return yes here to make sure popup windows such as
// the combobox popup can become the key window.
@ -316,6 +319,9 @@ static bool isMouseEvent(NSEvent *ev)
if (!pw)
return NO;
if (pw->shouldRefuseKeyWindowAndFirstResponder())
return NO;
// Only tool or dialog windows should become key:
Qt::WindowType type = pw->window()->type();
if (type == Qt::Tool || type == Qt::Dialog)
@ -368,6 +374,7 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw)
, m_windowModality(Qt::NonModal)
, m_windowUnderMouse(false)
, m_inConstructor(true)
, m_inSetVisible(false)
#ifndef QT_NO_OPENGL
, m_glContext(0)
#endif
@ -616,6 +623,8 @@ void QCocoaWindow::setVisible(bool visible)
if (m_isNSWindowChild && m_hiddenByClipping)
return;
m_inSetVisible = true;
QCocoaAutoReleasePool pool;
QCocoaWindow *parentCocoaWindow = 0;
if (window()->transientParent())
@ -755,6 +764,8 @@ void QCocoaWindow::setVisible(bool visible)
[parentCocoaWindow->m_nsWindow setStyleMask:[parentCocoaWindow->m_nsWindow styleMask] | NSResizableWindowMask];
}
}
m_inSetVisible = false;
}
NSInteger QCocoaWindow::windowLevel(Qt::WindowFlags flags)
@ -1784,6 +1795,23 @@ QWindow *QCocoaWindow::childWindowAt(QPoint windowPoint)
return targetWindow;
}
bool QCocoaWindow::shouldRefuseKeyWindowAndFirstResponder()
{
// This function speaks up if there's any reason
// to refuse key window or first responder state.
if (window()->flags() & Qt::WindowDoesNotAcceptFocus)
return true;
if (m_inSetVisible) {
QVariant showWithoutActivating = window()->property("_q_showWithoutActivating");
if (showWithoutActivating.isValid() && showWithoutActivating.toBool())
return true;
}
return false;
}
QMargins QCocoaWindow::frameMargins() const
{
NSRect frameW = [m_nsWindow frame];

View File

@ -65,6 +65,7 @@ Q_FORWARD_DECLARE_OBJC_CLASS(QNSViewMouseMoveHelper);
QWindow *m_window;
QCocoaWindow *m_platformWindow;
Qt::MouseButtons m_buttons;
Qt::MouseButtons m_frameStrutButtons;
QString m_composingText;
bool m_sendKeyEvent;
QStringList *currentCustomDragTypes;

View File

@ -142,6 +142,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil;
m_shouldInvalidateWindowShadow = false;
m_window = 0;
m_buttons = Qt::NoButton;
m_frameStrutButtons = Qt::NoButton;
m_sendKeyEvent = false;
m_subscribesForGlobalFrameNotifications = false;
#ifndef QT_NO_OPENGL
@ -603,7 +604,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil;
- (BOOL)acceptsFirstResponder
{
if (m_window->flags() & Qt::WindowDoesNotAcceptFocus)
if (m_platformWindow->shouldRefuseKeyWindowAndFirstResponder())
return NO;
if (m_window->flags() & Qt::WindowTransparentForInput)
return NO;
@ -661,6 +662,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil;
- (void)resetMouseButtons
{
m_buttons = Qt::NoButton;
m_frameStrutButtons = Qt::NoButton;
}
- (void)handleMouseEvent:(NSEvent *)theEvent
@ -693,22 +695,22 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil;
NSEventType ty = [theEvent type];
switch (ty) {
case NSLeftMouseDown:
m_buttons |= Qt::LeftButton;
m_frameStrutButtons |= Qt::LeftButton;
break;
case NSLeftMouseUp:
m_buttons &= ~Qt::LeftButton;
m_frameStrutButtons &= ~Qt::LeftButton;
break;
case NSRightMouseDown:
m_buttons |= Qt::RightButton;
m_frameStrutButtons |= Qt::RightButton;
break;
case NSRightMouseUp:
m_buttons &= ~Qt::RightButton;
m_frameStrutButtons &= ~Qt::RightButton;
break;
case NSOtherMouseDown:
m_buttons |= cocoaButton2QtButton([theEvent buttonNumber]);
m_frameStrutButtons |= cocoaButton2QtButton([theEvent buttonNumber]);
break;
case NSOtherMouseUp:
m_buttons &= ~cocoaButton2QtButton([theEvent buttonNumber]);
m_frameStrutButtons &= ~cocoaButton2QtButton([theEvent buttonNumber]);
default:
break;
}
@ -726,7 +728,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil;
QPoint qtScreenPoint = QPoint(screenPoint.x, qt_mac_flipYCoordinate(screenPoint.y));
ulong timestamp = [theEvent timestamp] * 1000;
QWindowSystemInterface::handleFrameStrutMouseEvent(m_window, timestamp, qtWindowPoint, qtScreenPoint, m_buttons);
QWindowSystemInterface::handleFrameStrutMouseEvent(m_window, timestamp, qtWindowPoint, qtScreenPoint, m_frameStrutButtons);
}
- (void)mouseDown:(NSEvent *)theEvent

View File

@ -46,7 +46,7 @@
#include "qcocoawindow.h"
@interface QNSWindowDelegate : NSObject <NSWindowDelegate>
@interface QT_MANGLE_NAMESPACE(QNSWindowDelegate) : NSObject <NSWindowDelegate>
{
QCocoaWindow *m_cocoaWindow;
}
@ -62,4 +62,6 @@
@end
QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSWindowDelegate);
#endif // QNSWINDOWDELEGATE_H

View File

@ -286,6 +286,18 @@ Qt::ScreenOrientation QQnxScreen::orientation() const
return orient;
}
QWindow *QQnxScreen::topLevelAt(const QPoint &point) const
{
QListIterator<QQnxWindow*> it(m_childWindows);
it.toBack();
while (it.hasPrevious()) {
QWindow *win = it.previous()->window();
if (win->geometry().contains(point))
return win;
}
return 0;
}
/*!
Check if the supplied angles are perpendicular to each other.
*/
@ -767,17 +779,4 @@ void QQnxScreen::setRootWindow(QQnxWindow *window)
m_rootWindow = window;
}
QWindow * QQnxScreen::topMostChildWindow() const
{
if (!m_childWindows.isEmpty()) {
// We're picking up the last window of the list here
// because this list is ordered by stacking order.
// Last window is effectively the one on top.
return m_childWindows.last()->window();
}
return 0;
}
QT_END_NAMESPACE

View File

@ -73,6 +73,8 @@ public:
Qt::ScreenOrientation nativeOrientation() const;
Qt::ScreenOrientation orientation() const;
QWindow *topLevelAt(const QPoint &point) const;
bool isPrimaryScreen() const { return m_primaryScreen; }
int rotation() const { return m_currentRotation; }
@ -124,8 +126,6 @@ private:
void addMultimediaWindow(const QByteArray &id, screen_window_t window);
void removeOverlayOrUnderlayWindow(screen_window_t window);
QWindow *topMostChildWindow() const;
screen_context_t m_screenContext;
screen_display_t m_display;
QQnxWindow *m_rootWindow;

View File

@ -502,13 +502,11 @@ HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_indexInParent(long *indexIn
if (!indexInParent)
return E_INVALIDARG;
QAccessibleInterface *par = accessible->parent();
if (!par) {
*indexInParent = -1;
*indexInParent = par ? par->indexOfChild(accessible) : -1;
if (*indexInParent < 0) {
qCWarning(lcQpaAccessibility) << "index in parent invalid:" << accessible << "parent:" << par;
return S_FALSE;
}
int indexOfChild = par->indexOfChild(accessible);
Q_ASSERT(indexOfChild >= 0);
*indexInParent = indexOfChild;
return S_OK;
}

View File

@ -86,8 +86,10 @@
#define HWND_MESSAGE 0
#endif
// Real Value would be 0x40000000, but if we pass this to Windows Embedded Compact
// he blits it wrongly, so lets not do any harm and define it to 0
#ifndef CAPTUREBLT
#define CAPTUREBLT (DWORD)0x40000000
#define CAPTUREBLT (DWORD)0x0
#endif
#define SW_SHOWMINIMIZED SW_MINIMIZE

View File

@ -251,14 +251,13 @@ void QXcbConnection::xi2Select(xcb_window_t window)
XIEventMask mask;
mask.mask_len = sizeof(bitMask);
mask.mask = xiBitMask;
// Enable each touchscreen
foreach (XInput2DeviceData *dev, m_touchDevices) {
mask.deviceid = dev->xiDeviceInfo->deviceid;
if (!m_touchDevices.isEmpty()) {
mask.deviceid = XIAllMasterDevices;
Status result = XISelectEvents(xDisplay, window, &mask, 1);
// If we have XInput >= 2.2 and successfully enable a touchscreen, then
// it will provide touch only. In most other cases, there will be
// emulated mouse events from the driver. If not, then Qt must do its
// own mouse emulation to enable interaction with mouse-oriented QWidgets.
// If we select for touch events on the master pointer, XInput2
// will not synthesize mouse events. This means Qt must do it,
// which is also preferable, since Qt can control better when
// to do so.
if (m_xi2Minor >= 2 && result == Success)
has_touch_without_mouse_emulation = true;
}
@ -272,10 +271,10 @@ void QXcbConnection::xi2Select(xcb_window_t window)
// similar handlers useless and we have no intention to infect
// all the pure xcb code with Xlib-based XI2.
if (!m_tabletData.isEmpty()) {
unsigned int tabletBitMask = bitMask;
unsigned int tabletBitMask;
unsigned char *xiTabletBitMask = reinterpret_cast<unsigned char *>(&tabletBitMask);
QVector<XIEventMask> xiEventMask(m_tabletData.count());
tabletBitMask |= XI_ButtonPressMask;
tabletBitMask = XI_ButtonPressMask;
tabletBitMask |= XI_ButtonReleaseMask;
tabletBitMask |= XI_MotionMask;
tabletBitMask |= XI_PropertyEventMask;
@ -294,24 +293,18 @@ void QXcbConnection::xi2Select(xcb_window_t window)
// Enable each scroll device
if (!m_scrollingDevices.isEmpty()) {
QVector<XIEventMask> xiEventMask(m_scrollingDevices.size());
unsigned int scrollBitMask = 0;
unsigned int scrollBitMask;
unsigned char *xiScrollBitMask = reinterpret_cast<unsigned char *>(&scrollBitMask);
scrollBitMask = XI_MotionMask;
scrollBitMask |= XI_ButtonReleaseMask;
bitMask |= XI_MotionMask;
bitMask |= XI_ButtonReleaseMask;
int i=0;
Q_FOREACH (const ScrollingDevice& scrollingDevice, m_scrollingDevices) {
if (tabletDevices.contains(scrollingDevice.deviceId))
continue; // All necessary events are already captured.
xiEventMask[i].deviceid = scrollingDevice.deviceId;
if (m_touchDevices.contains(scrollingDevice.deviceId)) {
xiEventMask[i].mask_len = sizeof(bitMask);
xiEventMask[i].mask = xiBitMask;
} else {
xiEventMask[i].mask_len = sizeof(scrollBitMask);
xiEventMask[i].mask = xiScrollBitMask;
}
xiEventMask[i].mask_len = sizeof(scrollBitMask);
xiEventMask[i].mask = xiScrollBitMask;
i++;
}
XISelectEvents(xDisplay, window, xiEventMask.data(), i);
@ -458,7 +451,7 @@ void QXcbConnection::xi2HandleEvent(xcb_ge_event_t *event)
fixed1616ToReal(xiDeviceEvent->root_x), fixed1616ToReal(xiDeviceEvent->root_y) );
if (QXcbWindow *platformWindow = platformWindowFromId(xiDeviceEvent->event)) {
XInput2DeviceData *dev = deviceForId(xiEvent->deviceid);
XInput2DeviceData *dev = deviceForId(xiDeviceEvent->sourceid);
Q_ASSERT(dev);
const bool firstTouch = m_touchPoints.isEmpty();
if (xiEvent->evtype == XI_TouchBegin) {
@ -563,22 +556,6 @@ void QXcbConnection::xi2HandleEvent(xcb_ge_event_t *event)
qDebug() << " touchpoint " << touchPoint.id << " state " << touchPoint.state << " pos norm " << touchPoint.normalPosition <<
" area " << touchPoint.area << " pressure " << touchPoint.pressure;
QWindowSystemInterface::handleTouchEvent(platformWindow->window(), xiEvent->time, dev->qtTouchDevice, m_touchPoints.values());
if (has_touch_without_mouse_emulation) {
// We need to grab the touch event to prevent mouse emulation.
if (xiEvent->evtype == XI_TouchBegin) {
XIEventMask xieventmask;
unsigned int bitMask = 0;
unsigned char *xiBitMask = reinterpret_cast<unsigned char *>(&bitMask);
xieventmask.deviceid = xiEvent->deviceid;
xieventmask.mask = xiBitMask;
xieventmask.mask_len = sizeof(bitMask);
bitMask |= XI_TouchBeginMask;
bitMask |= XI_TouchUpdateMask;
bitMask |= XI_TouchEndMask;
XIGrabDevice(static_cast<Display *>(m_xlib_display), xiEvent->deviceid, platformWindow->winId(), xiEvent->time, None, GrabModeAsync, GrabModeAsync, true, &xieventmask);
} else if (xiEvent->evtype == XI_TouchEnd)
XIUngrabDevice(static_cast<Display *>(m_xlib_display), xiEvent->deviceid, xiEvent->time);
}
if (touchPoint.state == Qt::TouchPointReleased)
// If a touchpoint was released, we can forget it, because the ID won't be reused.
m_touchPoints.remove(touchPoint.id);

View File

@ -1347,6 +1347,7 @@ void QXcbWindow::setWindowTitle(const QString &title)
8,
ba.length(),
ba.constData()));
xcb_flush(xcb_connection());
}
void QXcbWindow::setWindowIcon(const QIcon &icon)

View File

@ -1411,6 +1411,10 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
win->setProperty(propertyName, q->property(propertyName));
}
#ifdef Q_OS_OSX
if (q->testAttribute(Qt::WA_ShowWithoutActivating))
win->setProperty("_q_showWithoutActivating", QVariant(true));
#endif
win->setFlags(data.window_flags);
fixPosIncludesFrame();
if (q->testAttribute(Qt::WA_Moved)

View File

@ -100,13 +100,14 @@
QT_USE_NAMESPACE
@interface NotificationReceiver : NSObject {
@interface QT_MANGLE_NAMESPACE(NotificationReceiver) : NSObject {
QMacStylePrivate *mPrivate;
}
- (id)initWithPrivate:(QMacStylePrivate *)priv;
- (void)scrollBarStyleDidChange:(NSNotification *)notification;
@end
QT_NAMESPACE_ALIAS_OBJC_CLASS(NotificationReceiver);
@implementation NotificationReceiver
- (id)initWithPrivate:(QMacStylePrivate *)priv
@ -4045,11 +4046,20 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
}
break;
case CE_FocusFrame: {
int xOff = proxy()->pixelMetric(PM_FocusFrameHMargin, opt, w) + 1;
int yOff = proxy()->pixelMetric(PM_FocusFrameVMargin, opt, w) + 1;
HIRect hirect = CGRectMake(xOff+opt->rect.x(), yOff+opt->rect.y(), opt->rect.width() - 2 * xOff,
opt->rect.height() - 2 * yOff);
HIThemeDrawFocusRect(&hirect, true, QMacCGContext(p), kHIThemeOrientationNormal);
int xOff = proxy()->pixelMetric(PM_FocusFrameHMargin, opt, w);
int yOff = proxy()->pixelMetric(PM_FocusFrameVMargin, opt, w);
NSRect rect = NSMakeRect(xOff+opt->rect.x(), yOff+opt->rect.y(), opt->rect.width() - 2 * xOff,
opt->rect.height() - 2 * yOff);
CGContextSaveGState(cg);
[NSGraphicsContext setCurrentContext:[NSGraphicsContext
graphicsContextWithGraphicsPort:(CGContextRef)cg flipped:NO]];
[NSGraphicsContext saveGraphicsState];
NSSetFocusRingStyle(NSFocusRingOnly);
NSBezierPath *focusFramePath = [NSBezierPath bezierPathWithRect:rect];
[focusFramePath setClip]; // Clear clip path to avoid artifacts when rendering the cursor at zero pos
[focusFramePath fill];
[NSGraphicsContext restoreGraphicsState];
CGContextRestoreGState(cg);
break; }
case CE_MenuItem:
case CE_MenuEmptyArea:

View File

@ -309,12 +309,13 @@ void tst_QDebug::textStreamModifiers() const
void tst_QDebug::defaultMessagehandler() const
{
MessageHandlerSetter mhs(0);
QtMessageHandler defaultMessageHandler1 = qInstallMessageHandler((QtMessageHandler)0);
QtMessageHandler defaultMessageHandler2 = qInstallMessageHandler(myMessageHandler);
MessageHandlerSetter mhs(0); // set 0, should set default handler
QtMessageHandler defaultMessageHandler1 = qInstallMessageHandler((QtMessageHandler)0); // set 0, should set and return default handler
QVERIFY(defaultMessageHandler1);
QtMessageHandler defaultMessageHandler2 = qInstallMessageHandler(myMessageHandler); // set myMessageHandler and return default handler
bool same = (*defaultMessageHandler1 == *defaultMessageHandler2);
QVERIFY(same);
QtMessageHandler messageHandler = qInstallMessageHandler((QtMessageHandler)0);
QtMessageHandler messageHandler = qInstallMessageHandler((QtMessageHandler)0); // set 0, should set default and return myMessageHandler
same = (*messageHandler == *myMessageHandler);
QVERIFY(same);
}

View File

@ -193,6 +193,9 @@ void tst_QIODevice::unget()
{
#if defined(Q_OS_WINCE) && defined(WINCE_EMULATOR_TEST)
QSKIP("Networking tests in a WinCE emulator are unstable");
#endif
#if defined(Q_OS_MAC)
QSKIP("The unget network test is unstable on Mac. See QTBUG-39983.");
#endif
QBuffer buffer;
buffer.open(QBuffer::ReadWrite);

View File

@ -371,6 +371,9 @@ void tst_QThreadPool::expiryTimeout()
void tst_QThreadPool::expiryTimeoutRace() // QTBUG-3786
{
#ifdef Q_OS_WIN
QSKIP("This test is unstable on Windows. See QTBUG-3786.");
#endif
ExpiryTimeoutTask task;
QThreadPool threadPool;

View File

@ -1389,10 +1389,23 @@ void tst_QLocale::toDateTime()
}
#ifdef Q_OS_MAC
// Format number string according to system locale settings.
// Expected in format is US "1,234.56".
QString systemLocaleFormatNumber(const QString &numberString)
{
QLocale locale = QLocale::system();
QString numberStringCopy = numberString;
return numberStringCopy.replace(QChar(','), QChar('G'))
.replace(QChar('.'), QChar('D'))
.replace(QChar('G'), locale.groupSeparator())
.replace(QChar('D'), locale.decimalPoint());
}
void tst_QLocale::macDefaultLocale()
{
QLocale locale = QLocale::system();
if (locale.name() != QLatin1String("en_US"))
QSKIP("This test only tests for en_US");
@ -1404,20 +1417,20 @@ void tst_QLocale::macDefaultLocale()
QCOMPARE(locale.toString(invalidDate, QLocale::NarrowFormat), QString());
QCOMPARE(locale.toString(invalidTime, QLocale::LongFormat), QString());
QCOMPARE(locale.toString(invalidDate, QLocale::LongFormat), QString());
QCOMPARE(locale.decimalPoint(), QChar('.'));
QCOMPARE(locale.groupSeparator(), QChar(','));
QCOMPARE(locale.dateFormat(QLocale::ShortFormat), QString("M/d/yy"));
QCOMPARE(locale.dateFormat(QLocale::LongFormat), QString("MMMM d, yyyy"));
QCOMPARE(locale.timeFormat(QLocale::ShortFormat), QString("h:mm AP"));
QCOMPARE(locale.timeFormat(QLocale::LongFormat), QString("h:mm:ss AP t"));
// On OS X the decimal point and group separator are configurable
// independently of the locale. Verify that they have one of the
// allowed values and are not the same.
QVERIFY(locale.decimalPoint() == QChar('.') || locale.decimalPoint() == QChar(','));
QVERIFY(locale.groupSeparator() == QChar(',')
|| locale.groupSeparator() == QChar('.')
|| locale.groupSeparator() == QChar('\xA0') // no-breaking space
|| locale.groupSeparator() == QChar('\'')
|| locale.groupSeparator() == QChar());
QVERIFY(locale.decimalPoint() != locale.groupSeparator());
// make sure we are using the system to parse them
QCOMPARE(locale.toString(1234.56), QString("1,234.56"));
QCOMPARE(locale.toString(QDate(1974, 12, 1), QLocale::ShortFormat), QString("12/1/74"));
QCOMPARE(locale.toString(QDate(1974, 12, 1), QLocale::NarrowFormat), locale.toString(QDate(1974, 12, 1), QLocale::ShortFormat));
QCOMPARE(locale.toString(QDate(1974, 12, 1), QLocale::LongFormat), QString("December 1, 1974"));
QCOMPARE(locale.toString(QTime(1,2,3), QLocale::ShortFormat), QString("1:02 AM"));
QCOMPARE(locale.toString(QTime(1,2,3), QLocale::NarrowFormat), locale.toString(QTime(1,2,3), QLocale::ShortFormat));
QCOMPARE(locale.toString(1234.56), systemLocaleFormatNumber(QString("1,234.56")));
QTime currentTime = QTime::currentTime();
QTime utcTime = QDateTime::currentDateTime().toUTC().time();
@ -1433,35 +1446,38 @@ void tst_QLocale::macDefaultLocale()
const QString timeString = locale.toString(QTime(1,2,3), QLocale::LongFormat);
QVERIFY(timeString.contains(QString("1:02:03")));
// System Preferences->Language & Text, Region Tab, should choose "United States" for Region field
QCOMPARE(locale.toCurrencyString(qulonglong(1234)), QString("$1,234.00"));
QCOMPARE(locale.toCurrencyString(qlonglong(-1234)), QString("($1,234.00)"));
QCOMPARE(locale.toCurrencyString(double(1234.56)), QString("$1,234.56"));
QCOMPARE(locale.toCurrencyString(double(-1234.56)), QString("($1,234.56)"));
// To run this test make sure "Curreny" is US Dollar in System Preferences->Language & Region->Advanced.
if (locale.currencySymbol() == QString("$")) {
QCOMPARE(locale.toCurrencyString(qulonglong(1234)), systemLocaleFormatNumber(QString("$1,234.00")));
QCOMPARE(locale.toCurrencyString(qlonglong(-1234)), systemLocaleFormatNumber(QString("($1,234.00)")));
QCOMPARE(locale.toCurrencyString(double(1234.56)), systemLocaleFormatNumber(QString("$1,234.56")));
QCOMPARE(locale.toCurrencyString(double(-1234.56)), systemLocaleFormatNumber(QString("($1,234.56)")));
}
// Depending on the configured time zone, the time string might not
// contain a GMT specifier. (Sometimes it just names the zone, like "CEST")
if (timeString.contains(QString("GMT"))) {
QString expectedGMTSpecifier("GMT");
QString expectedGMTSpecifierBase("GMT");
if (diff >= 0)
expectedGMTSpecifier.append("+");
expectedGMTSpecifierBase.append("+");
else
expectedGMTSpecifier.append("-");
if (qAbs(diff) < 10)
expectedGMTSpecifier.append(QString("0%1").arg(qAbs(diff)));
else
expectedGMTSpecifier.append(QString("%1").arg(qAbs(diff)));
QVERIFY2(timeString.contains(expectedGMTSpecifier), qPrintable(
QString("timeString `%1', expectedGMTSpecifier `%2'")
expectedGMTSpecifierBase.append("-");
QString expectedGMTSpecifier = expectedGMTSpecifierBase + QString("%1").arg(qAbs(diff));
QString expectedGMTSpecifierZeroExtended = expectedGMTSpecifierBase + QString("0%1").arg(qAbs(diff));
QVERIFY2(timeString.contains(expectedGMTSpecifier)
|| timeString.contains(expectedGMTSpecifierZeroExtended),
qPrintable(QString("timeString `%1', expectedGMTSpecifier `%2' or `%3'")
.arg(timeString)
.arg(expectedGMTSpecifier)
.arg(expectedGMTSpecifierZeroExtended)
));
}
QCOMPARE(locale.dayName(1), QString("Monday"));
QCOMPARE(locale.dayName(7), QString("Sunday"));
QCOMPARE(locale.monthName(1), QString("January"));
QCOMPARE(locale.monthName(12), QString("December"));
QCOMPARE(locale.firstDayOfWeek(), Qt::Sunday);
QCOMPARE(locale.quoteString("string"), QString::fromUtf8("\xe2\x80\x9c" "string" "\xe2\x80\x9d"));
QCOMPARE(locale.quoteString("string", QLocale::AlternateQuotation), QString::fromUtf8("\xe2\x80\x98" "string" "\xe2\x80\x99"));

View File

@ -829,6 +829,10 @@ private:
*/
void tst_QLocalSocket::processConnection()
{
#ifdef Q_OS_MAC
QSKIP("The processConnection test is unstable on Mac. See QTBUG-39986.");
#endif
#ifdef Q_OS_WIN
const QString exeSuffix = QStringLiteral(".exe");
#else

View File

@ -576,6 +576,9 @@ protected:
#ifndef QT_NO_PROCESS
void tst_QTcpServer::addressReusable()
{
#ifdef Q_OS_LINUX
QSKIP("The addressReusable test is unstable on Linux. See QTBUG-39985.");
#endif
QFETCH_GLOBAL(bool, setProxy);
if (setProxy) {
#ifndef QT_NO_NETWORKPROXY

View File

@ -1470,7 +1470,8 @@ void tst_QWidget::mapFromAndTo()
subWindow2->setGeometry(75, 75, 100, 100);
subSubWindow->setGeometry(10, 10, 10, 10);
#if !defined (Q_OS_WINCE) //still no proper minimizing
#if !defined(Q_OS_WINCE) && !defined(Q_OS_QNX) \
|| (defined(Q_OS_BLACKBERRY) && !defined(Q_OS_BLACKBERRY_TABLET))
//update visibility
if (windowMinimized) {
if (!windowHidden) {
@ -1833,17 +1834,19 @@ void tst_QWidget::windowState()
{
if (m_platform == QStringLiteral("xcb"))
QSKIP("X11: Many window managers do not support window state properly, which causes this test to fail.");
#ifdef Q_OS_WINCE_WM
QPoint pos(500, 500);
QPoint pos;
QSize size(200, 200);
if (qt_wince_is_smartphone()) { //small screen
pos = QPoint(10,10);
size = QSize(100,100);
}
#else
const QPoint pos(500, 500);
const QSize size(200, 200);
if (QGuiApplicationPrivate::platformIntegration()->defaultWindowState(Qt::Widget)
== Qt::WindowFullScreen) {
size = QGuiApplication::primaryScreen()->size();
} else {
pos = QPoint(10, 10);
#ifdef Q_OS_WINCE_WM
if (qt_wince_is_smartphone()) { //small screen
size = QSize(100,100);
#endif
}
QWidget widget1;
widget1.move(pos);
@ -1865,7 +1868,7 @@ void tst_QWidget::windowState()
VERIFY_STATE(Qt::WindowMaximized);
QCOMPARE(widget1.windowHandle()->windowState(), Qt::WindowMaximized);
widget1.show();
widget1.setVisible(true);
QTest::qWait(100);
VERIFY_STATE(Qt::WindowMaximized);
QCOMPARE(widget1.windowHandle()->windowState(), Qt::WindowMaximized);
@ -2444,7 +2447,7 @@ void tst_QWidget::normalGeometry()
QCOMPARE(child->normalGeometry(), QRect());
parent.setGeometry(100, 100, 200, 200);
parent.show();
parent.showNormal();
QVERIFY(QTest::qWaitForWindowExposed(&parent));
QApplication::processEvents();
@ -2547,7 +2550,7 @@ void tst_QWidget::setGeometry()
QRect cr(50,50,50,50);
tlw.setGeometry(tr);
child.setGeometry(cr);
tlw.show();
tlw.showNormal();
QTest::qWait(50);
QCOMPARE(tlw.geometry().size(), tr.size());
QCOMPARE(child.geometry(), cr);
@ -2557,7 +2560,7 @@ void tst_QWidget::setGeometry()
tr.moveTopLeft(QApplication::desktop()->availableGeometry().topLeft());
tlw.setGeometry(tr);
QCOMPARE(tlw.geometry(), tr);
tlw.show();
tlw.showNormal();
QTest::qWait(50);
if (tlw.frameGeometry() != tlw.geometry())
QSKIP("Your window manager is too broken for this test");
@ -3015,7 +3018,7 @@ void tst_QWidget::saveRestoreGeometry()
QWidget widget;
widget.move(position);
widget.resize(size);
widget.show();
widget.showNormal();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
QApplication::processEvents();
@ -3042,7 +3045,7 @@ void tst_QWidget::saveRestoreGeometry()
QVERIFY(widget.restoreGeometry(garbage) == false);
QVERIFY(widget.restoreGeometry(savedGeometry));
widget.show();
widget.showNormal();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
QApplication::processEvents();
@ -3057,7 +3060,7 @@ void tst_QWidget::saveRestoreGeometry()
QWidget widget;
widget.move(position);
widget.resize(size);
widget.show();
widget.showNormal();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
QTRY_COMPARE(widget.geometry().size(), size);
@ -3179,7 +3182,7 @@ void tst_QWidget::restoreVersion1Geometry()
QCOMPARE(widget.pos(), expectedPosition);
QCOMPARE(widget.size(), expectedSize);
}
widget.show();
widget.showNormal();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
QTest::qWait(100);
@ -3237,14 +3240,14 @@ void tst_QWidget::widgetAt()
w2->setGeometry(50,50, 160, 100);
w2->setObjectName(QLatin1String("w2"));
w2->setWindowTitle(w2->objectName());
w1->show();
w1->showNormal();
QVERIFY(QTest::qWaitForWindowExposed(w1.data()));
qApp->processEvents();
QWidget *wr;
QTRY_VERIFY((wr = QApplication::widgetAt(100, 100)));
QCOMPARE(wr->objectName(), QString("w1"));
w2->show();
w2->showNormal();
QVERIFY(QTest::qWaitForWindowExposed(w2.data()));
qApp->processEvents();
qApp->processEvents();
@ -3263,7 +3266,7 @@ void tst_QWidget::widgetAt()
QWidget *w3 = new QWidget(w2.data());
w3->setGeometry(10,10,50,50);
w3->setObjectName("w3");
w3->show();
w3->showNormal();
qApp->processEvents();
QTRY_VERIFY((wr = QApplication::widgetAt(100,100)) && wr->objectName() == QString("w3"));
@ -3271,6 +3274,11 @@ void tst_QWidget::widgetAt()
qApp->processEvents();
QTRY_VERIFY((wr = QApplication::widgetAt(100, 100)) && wr->objectName() == QString("w2"));
if (!QGuiApplicationPrivate::platformIntegration()
->hasCapability(QPlatformIntegration::WindowMasks)) {
QSKIP("Platform does not support WindowMasks");
}
QRegion rgn = QRect(QPoint(0,0), w2->size());
QPoint point = w2->mapFromGlobal(QPoint(100,100));
rgn -= QRect(point, QSize(1,1));
@ -3708,7 +3716,7 @@ void tst_QWidget::setMinimumSize()
#ifndef Q_OS_WINCE
QSize nonDefaultSize = defaultSize + QSize(5,5);
w.setMinimumSize(nonDefaultSize);
w.show();
w.showNormal();
QTest::qWait(50);
QVERIFY(w.height() >= nonDefaultSize.height());
QVERIFY(w.width() >= nonDefaultSize.width());
@ -3759,7 +3767,7 @@ void tst_QWidget::setFixedSize()
QVERIFY(!w.testAttribute(Qt::WA_Resized));
w.setFixedSize(defaultSize + QSize(150, 150));
w.show();
w.showNormal();
QTest::qWait(50);
if (m_platform == QStringLiteral("xcb"))
QSKIP("QTBUG-26424");
@ -4292,7 +4300,7 @@ void tst_QWidget::scroll()
updateWidget.resize(w, h);
updateWidget.reset();
updateWidget.move(QGuiApplication::primaryScreen()->geometry().center() - QPoint(250, 250));
updateWidget.show();
updateWidget.showNormal();
qApp->setActiveWindow(&updateWidget);
QVERIFY(QTest::qWaitForWindowActive(&updateWidget));
QVERIFY(updateWidget.numPaintEvents > 0);
@ -4495,7 +4503,7 @@ void tst_QWidget::setWindowGeometry()
widget.setWindowFlags(Qt::WindowFlags(windowFlags));
widget.setGeometry(rect);
widget.show();
widget.showNormal();
if (rect.isValid())
QVERIFY(QTest::qWaitForWindowExposed(&widget));
QTRY_COMPARE(widget.geometry(), rect);
@ -4543,7 +4551,7 @@ void tst_QWidget::setWindowGeometry()
if (windowFlags != 0)
widget.setWindowFlags(Qt::WindowFlags(windowFlags));
widget.show();
widget.showNormal();
if (rect.isValid())
QVERIFY(QTest::qWaitForWindowExposed(&widget));
widget.setGeometry(rect);
@ -4657,7 +4665,7 @@ void tst_QWidget::windowMoveResize()
widget.move(rect.topLeft());
widget.resize(rect.size());
widget.show();
widget.showNormal();
QTest::qWait(10);
QTRY_COMPARE(widget.pos(), rect.topLeft());
@ -4737,7 +4745,7 @@ void tst_QWidget::windowMoveResize()
if (windowFlags != 0)
widget.setWindowFlags(Qt::WindowFlags(windowFlags));
widget.show();
widget.showNormal();
if (rect.isValid())
QVERIFY(QTest::qWaitForWindowExposed(&widget));
QApplication::processEvents();
@ -4981,7 +4989,7 @@ void tst_QWidget::moveChild()
#ifndef QT_NO_CURSOR // Try to make sure the cursor is not in a taskbar area to prevent tooltips or window highlighting
QCursor::setPos(parent.geometry().topRight() + QPoint(50 , 50));
#endif
parent.show();
parent.showNormal();
QVERIFY(QTest::qWaitForWindowExposed(&parent));
QTest::qWait(30);
@ -5136,6 +5144,7 @@ void tst_QWidget::multipleToplevelFocusCheck()
w2.resize(200,200);
w2.show();
QVERIFY(QTest::qWaitForWindowExposed(&w2));
QTest::qWait(50);
QApplication::setActiveWindow(&w1);
w1.activateWindow();
@ -5922,16 +5931,15 @@ void tst_QWidget::childEvents()
QCoreApplication::postEvent(&widget, new QEvent(QEvent::Type(QEvent::User + 1)));
widget.show();
widget.showNormal();
expected =
EventRecorder::EventList()
<< qMakePair(&widget, QEvent::WinIdChange)
<< qMakePair(&widget, QEvent::Polish)
<< qMakePair(&widget, QEvent::WinIdChange)
<< qMakePair(&widget, QEvent::Move)
<< qMakePair(&widget, QEvent::Resize)
<< qMakePair(&widget, QEvent::Show);
expected << qMakePair(&widget, QEvent::ShowToParent);
<< qMakePair(&widget, QEvent::Show)
<< qMakePair(&widget, QEvent::ShowToParent);
QVERIFY2(spy.eventList() == expected,
EventRecorder::msgEventListMismatch(expected, spy.eventList()).constData());
@ -5941,12 +5949,11 @@ void tst_QWidget::childEvents()
expected =
EventRecorder::EventList()
<< qMakePair(&widget, QEvent::PolishRequest)
<< qMakePair(&widget, QEvent::Type(QEvent::User + 1));
#ifdef Q_OS_MAC
expected << qMakePair(&widget, QEvent::UpdateLater);
<< qMakePair(&widget, QEvent::Type(QEvent::User + 1))
#if defined(Q_OS_OSX) || defined(Q_OS_QNX)
<< qMakePair(&widget, QEvent::UpdateLater)
#endif
expected << qMakePair(&widget, QEvent::UpdateRequest);
<< qMakePair(&widget, QEvent::UpdateRequest);
if (m_platform == QStringLiteral("windows") || m_platform == QStringLiteral("xcb"))
QEXPECT_FAIL("", EventRecorder::msgExpectFailQtBug26424(expected, spy.eventList()).constData(), Continue);
@ -6012,18 +6019,17 @@ void tst_QWidget::childEvents()
QCOMPARE(spy.eventList(), expected);
spy.clear();
widget.show();
widget.showNormal();
expected =
EventRecorder::EventList()
<< qMakePair(&widget, QEvent::WinIdChange)
<< qMakePair(&widget, QEvent::Polish)
<< qMakePair(&widget, QEvent::ChildPolished)
<< qMakePair(&widget, QEvent::ChildPolished)
<< qMakePair(&widget, QEvent::WinIdChange)
<< qMakePair(&widget, QEvent::Move)
<< qMakePair(&widget, QEvent::Resize)
<< qMakePair(&widget, QEvent::Show);
expected << qMakePair(&widget, QEvent::ShowToParent);
<< qMakePair(&widget, QEvent::Show)
<< qMakePair(&widget, QEvent::ShowToParent);
QVERIFY2(spy.eventList() == expected,
EventRecorder::msgEventListMismatch(expected, spy.eventList()).constData());
@ -6034,12 +6040,11 @@ void tst_QWidget::childEvents()
EventRecorder::EventList()
<< qMakePair(&widget, QEvent::PolishRequest)
<< qMakePair(&widget, QEvent::Type(QEvent::User + 1))
<< qMakePair(&widget, QEvent::Type(QEvent::User + 2));
#ifdef Q_OS_MAC
expected << qMakePair(&widget, QEvent::UpdateLater);
<< qMakePair(&widget, QEvent::Type(QEvent::User + 2))
#if defined(Q_OS_OSX) || defined(Q_OS_QNX)
<< qMakePair(&widget, QEvent::UpdateLater)
#endif
expected << qMakePair(&widget, QEvent::UpdateRequest);
<< qMakePair(&widget, QEvent::UpdateRequest);
if (m_platform == QStringLiteral("windows") || m_platform == QStringLiteral("xcb"))
QEXPECT_FAIL("", EventRecorder::msgExpectFailQtBug26424(expected, spy.eventList()).constData(), Continue);
@ -6108,17 +6113,17 @@ void tst_QWidget::childEvents()
QCOMPARE(spy.eventList(), expected);
spy.clear();
widget.show();
widget.showNormal();
expected =
EventRecorder::EventList()
<< qMakePair(&widget, QEvent::WinIdChange)
<< qMakePair(&widget, QEvent::Polish)
<< qMakePair(&widget, QEvent::ChildPolished)
<< qMakePair(&widget, QEvent::WinIdChange)
<< qMakePair(&widget, QEvent::Move)
<< qMakePair(&widget, QEvent::Resize)
<< qMakePair(&widget, QEvent::Show);
<< qMakePair(&widget, QEvent::Show)
<< qMakePair(&widget, QEvent::ShowToParent);
expected << qMakePair(&widget, QEvent::ShowToParent);
QVERIFY2(spy.eventList() == expected,
EventRecorder::msgEventListMismatch(expected, spy.eventList()).constData());
spy.clear();
@ -6128,12 +6133,11 @@ void tst_QWidget::childEvents()
EventRecorder::EventList()
<< qMakePair(&widget, QEvent::PolishRequest)
<< qMakePair(&widget, QEvent::Type(QEvent::User + 1))
<< qMakePair(&widget, QEvent::Type(QEvent::User + 2));
#ifdef Q_OS_MAC
expected << qMakePair(&widget, QEvent::UpdateLater);
<< qMakePair(&widget, QEvent::Type(QEvent::User + 2))
#if defined(Q_OS_OSX) || defined(Q_OS_QNX)
<< qMakePair(&widget, QEvent::UpdateLater)
#endif
expected << qMakePair(&widget, QEvent::UpdateRequest);
<< qMakePair(&widget, QEvent::UpdateRequest);
if (m_platform == QStringLiteral("windows") || m_platform == QStringLiteral("xcb"))
QEXPECT_FAIL("", EventRecorder::msgExpectFailQtBug26424(expected, spy.eventList()).constData(), Continue);
@ -6296,7 +6300,7 @@ void tst_QWidget::renderInvisible()
QFont f;
f.setStyleStrategy(QFont::NoAntialias);
calendar->setFont(f);
calendar->show();
calendar->showNormal();
QVERIFY(QTest::qWaitForWindowExposed(calendar.data()));
// Create a dummy focus widget to get rid of focus rect in reference image.
@ -7161,7 +7165,7 @@ void tst_QWidget::moveWindowInShowEvent()
QCOMPARE(widget.pos(), initial);
// show it
widget.show();
widget.showNormal();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
QTest::qWait(100);
// it should have moved
@ -7246,6 +7250,9 @@ void tst_QWidget::hideOpaqueChildWhileHidden()
#if !defined(Q_OS_WINCE)
void tst_QWidget::updateWhileMinimized()
{
#if defined(Q_OS_QNX) && (!defined(Q_OS_BLACKBERRY) || defined(Q_OS_BLACKBERRY_TABLET))
QSKIP("Platform does not support showMinimized()");
#endif
UpdateWidget widget;
// Filter out activation change and focus events to avoid update() calls in QWidget.
widget.updateOnActivationChangeAndFocusIn = false;
@ -7796,6 +7803,9 @@ void tst_QWidget::doubleRepaint()
// Minmize: Should not trigger a repaint.
widget.showMinimized();
QTest::qWait(10);
#if defined(Q_OS_QNX) && (!defined(Q_OS_BLACKBERRY) || defined(Q_OS_BLACKBERRY_TABLET))
QEXPECT_FAIL("", "Platform does not support showMinimized()", Continue);
#endif
QCOMPARE(widget.numPaintEvents, 0);
widget.numPaintEvents = 0;
@ -9062,7 +9072,7 @@ void tst_QWidget::rectOutsideCoordinatesLimit_task144779()
bigWidget->setPalette(palette);
bigWidget->setAutoFillBackground(true);
main.show();
main.showNormal();
QVERIFY(QTest::qWaitForWindowExposed(&main));
QPixmap correct(main.size());
@ -10258,7 +10268,7 @@ void tst_QWidget::resizeStaticContentsChildWidget_QTBUG35282()
childWidget.setAttribute(Qt::WA_OpaquePaintEvent);
childWidget.setGeometry(250, 250, 500, 500);
widget.show();
widget.showNormal();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
QVERIFY(childWidget.numPaintEvents == 0);
childWidget.reset();