summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/widgets/widgets/imageviewer/imageviewer.cpp2
-rw-r--r--src/corelib/tools/qcommandlineparser.cpp8
-rw-r--r--src/gui/painting/qimagescale.cpp53
-rw-r--r--src/gui/text/qfontengine_ft.cpp2
-rw-r--r--src/network/ssl/qasn1element.cpp52
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp45
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.cpp25
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.h6
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.cpp9
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.h3
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.cpp5
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.h7
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection_xi2.cpp4
-rw-r--r--src/tools/qdoc/htmlgenerator.cpp4
-rw-r--r--src/tools/qdoc/node.cpp12
-rw-r--r--src/tools/qdoc/puredocparser.cpp4
-rw-r--r--src/tools/qdoc/qdocdatabase.cpp4
-rw-r--r--src/tools/qdoc/tree.cpp8
-rw-r--r--tests/auto/widgets/kernel/qtooltip/tst_qtooltip.cpp62
19 files changed, 198 insertions, 117 deletions
diff --git a/examples/widgets/widgets/imageviewer/imageviewer.cpp b/examples/widgets/widgets/imageviewer/imageviewer.cpp
index c32f21e7f3..0b8513f090 100644
--- a/examples/widgets/widgets/imageviewer/imageviewer.cpp
+++ b/examples/widgets/widgets/imageviewer/imageviewer.cpp
@@ -107,7 +107,7 @@ void ImageViewer::open()
mimeTypeFilters.sort();
const QStringList picturesLocations = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation);
QFileDialog dialog(this, tr("Open File"),
- picturesLocations.isEmpty() ? QDir::currentPath() : picturesLocations.first());
+ picturesLocations.isEmpty() ? QDir::currentPath() : picturesLocations.last());
dialog.setAcceptMode(QFileDialog::AcceptOpen);
dialog.setMimeTypeFilters(mimeTypeFilters);
dialog.selectMimeTypeFilter("image/jpeg");
diff --git a/src/corelib/tools/qcommandlineparser.cpp b/src/corelib/tools/qcommandlineparser.cpp
index 21bc14a272..0814921a58 100644
--- a/src/corelib/tools/qcommandlineparser.cpp
+++ b/src/corelib/tools/qcommandlineparser.cpp
@@ -115,8 +115,8 @@ public:
QStringList QCommandLineParserPrivate::aliases(const QString &optionName) const
{
- const NameHash_t::const_iterator it = nameHash.find(optionName);
- if (it == nameHash.end()) {
+ const NameHash_t::const_iterator it = nameHash.constFind(optionName);
+ if (it == nameHash.cend()) {
qWarning("QCommandLineParser: option not defined: \"%s\"", qPrintable(optionName));
return QStringList();
}
@@ -806,8 +806,8 @@ QString QCommandLineParser::value(const QString &optionName) const
QStringList QCommandLineParser::values(const QString &optionName) const
{
d->checkParsed("values");
- const NameHash_t::const_iterator it = d->nameHash.find(optionName);
- if (it != d->nameHash.end()) {
+ const NameHash_t::const_iterator it = d->nameHash.constFind(optionName);
+ if (it != d->nameHash.cend()) {
const int optionOffset = *it;
QStringList values = d->optionValuesHash.value(optionOffset);
if (values.isEmpty())
diff --git a/src/gui/painting/qimagescale.cpp b/src/gui/painting/qimagescale.cpp
index 9b4eabc552..867c64c5e0 100644
--- a/src/gui/painting/qimagescale.cpp
+++ b/src/gui/painting/qimagescale.cpp
@@ -77,6 +77,8 @@ QT_BEGIN_NAMESPACE
*
* Changes include formatting, namespaces and other C++'ings, removal of old
* #ifdef'ed code, and removal of unneeded border calculation code.
+ * Later the code has been refactored and an SSE4.1 optimizated path have been
+ * added instead of the removed MMX assembler.
*
* Imlib2 is (C) Carsten Haitzler and various contributors. The MMX code
* is by Willem Monsuwe <willem@stack.nl>. All other modifications are
@@ -100,13 +102,13 @@ using namespace QImageScale;
//
const unsigned int** QImageScale::qimageCalcYPoints(const unsigned int *src,
- int sw, int sh, int dh)
+ int sw, int sh, int dh)
{
const unsigned int **p;
int j = 0, rv = 0;
qint64 val, inc;
- if(dh < 0){
+ if (dh < 0) {
dh = -dh;
rv = 1;
}
@@ -134,7 +136,7 @@ int* QImageScale::qimageCalcXPoints(int sw, int dw)
int *p, j = 0, rv = 0;
qint64 val, inc;
- if(dw < 0){
+ if (dw < 0) {
dw = -dw;
rv = 1;
}
@@ -155,25 +157,23 @@ int* QImageScale::qimageCalcXPoints(int sw, int dw)
p[dw - i - 1] = tmp;
}
}
- return(p);
+ return p;
}
int* QImageScale::qimageCalcApoints(int s, int d, int up)
{
int *p, j = 0, rv = 0;
- if(d < 0){
+ if (d < 0) {
rv = 1;
d = -d;
}
p = new int[d];
- /* scaling up */
- if(up){
- qint64 val, inc;
-
- val = 0x8000 * s / d - 0x8000;
- inc = (((qint64)s) << 16) / d;
+ if (up) {
+ /* scaling up */
+ qint64 val = 0x8000 * s / d - 0x8000;
+ qint64 inc = (((qint64)s) << 16) / d;
for (int i = 0; i < d; i++) {
int pos = val >> 16;
if (pos < 0)
@@ -184,9 +184,8 @@ int* QImageScale::qimageCalcApoints(int s, int d, int up)
p[j++] = (val >> 8) - ((val >> 8) & 0xffffff00);
val += inc;
}
- }
- /* scaling down */
- else {
+ } else {
+ /* scaling down */
qint64 val = 0;
qint64 inc = (((qint64)s) << 16) / d;
int Cp = (((d << 14) + s - 1) / s);
@@ -197,7 +196,7 @@ int* QImageScale::qimageCalcApoints(int s, int d, int up)
val += inc;
}
}
- if(rv){
+ if (rv) {
int tmp;
for (int i = d / 2; --i >= 0; ) {
tmp = p[i];
@@ -210,7 +209,7 @@ int* QImageScale::qimageCalcApoints(int s, int d, int up)
QImageScaleInfo* QImageScale::qimageFreeScaleInfo(QImageScaleInfo *isi)
{
- if(isi){
+ if (isi) {
delete[] isi->xpoints;
delete[] isi->ypoints;
delete[] isi->xapoints;
@@ -231,28 +230,28 @@ QImageScaleInfo* QImageScale::qimageCalcScaleInfo(const QImage &img,
sch = dh * qlonglong(img.height()) / sh;
isi = new QImageScaleInfo;
- if(!isi)
+ if (!isi)
return 0;
memset(isi, 0, sizeof(QImageScaleInfo));
isi->xup_yup = (qAbs(dw) >= sw) + ((qAbs(dh) >= sh) << 1);
isi->xpoints = qimageCalcXPoints(img.width(), scw);
- if(!isi->xpoints)
- return(qimageFreeScaleInfo(isi));
+ if (!isi->xpoints)
+ return qimageFreeScaleInfo(isi);
isi->ypoints = qimageCalcYPoints((const unsigned int *)img.scanLine(0),
img.bytesPerLine() / 4, img.height(), sch);
if (!isi->ypoints)
- return(qimageFreeScaleInfo(isi));
- if(aa) {
+ return qimageFreeScaleInfo(isi);
+ if (aa) {
isi->xapoints = qimageCalcApoints(img.width(), scw, isi->xup_yup & 1);
- if(!isi->xapoints)
- return(qimageFreeScaleInfo(isi));
+ if (!isi->xapoints)
+ return qimageFreeScaleInfo(isi);
isi->yapoints = qimageCalcApoints(img.height(), sch, isi->xup_yup & 2);
- if(!isi->yapoints)
- return(qimageFreeScaleInfo(isi));
+ if (!isi->yapoints)
+ return qimageFreeScaleInfo(isi);
}
- return(isi);
+ return isi;
}
@@ -326,7 +325,7 @@ static void qt_qimageScaleAARGBA(QImageScaleInfo *isi, unsigned int *dest,
int dh, int dow, int sow)
{
/* scaling up both ways */
- if (isi->xup_yup == 3){
+ if (isi->xup_yup == 3) {
qt_qimageScaleAARGBA_up_xy(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow);
}
/* if we're scaling down vertically */
diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp
index 931c71dc63..37be0afccf 100644
--- a/src/gui/text/qfontengine_ft.cpp
+++ b/src/gui/text/qfontengine_ft.cpp
@@ -115,7 +115,7 @@ public:
QtFreetypeData::~QtFreetypeData()
{
- for (QHash<QFontEngine::FaceId, QFreetypeFace *>::ConstIterator iter = faces.begin(); iter != faces.end(); ++iter)
+ for (QHash<QFontEngine::FaceId, QFreetypeFace *>::ConstIterator iter = faces.cbegin(); iter != faces.cend(); ++iter)
iter.value()->cleanup();
faces.clear();
FT_Done_FreeType(library);
diff --git a/src/network/ssl/qasn1element.cpp b/src/network/ssl/qasn1element.cpp
index 95c360e7af..82807aec6e 100644
--- a/src/network/ssl/qasn1element.cpp
+++ b/src/network/ssl/qasn1element.cpp
@@ -46,32 +46,32 @@ static OidNameMap createOidMap()
{
OidNameMap oids;
// used by unit tests
- oids.insert(oids.end(), QByteArrayLiteral("0.9.2342.19200300.100.1.5"), QByteArrayLiteral("favouriteDrink"));
- oids.insert(oids.end(), QByteArrayLiteral("1.2.840.113549.1.9.1"), QByteArrayLiteral("emailAddress"));
- oids.insert(oids.end(), QByteArrayLiteral("1.3.6.1.5.5.7.1.1"), QByteArrayLiteral("authorityInfoAccess"));
- oids.insert(oids.end(), QByteArrayLiteral("1.3.6.1.5.5.7.48.1"), QByteArrayLiteral("OCSP"));
- oids.insert(oids.end(), QByteArrayLiteral("1.3.6.1.5.5.7.48.2"), QByteArrayLiteral("caIssuers"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.29.14"), QByteArrayLiteral("subjectKeyIdentifier"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.29.15"), QByteArrayLiteral("keyUsage"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.29.17"), QByteArrayLiteral("subjectAltName"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.29.19"), QByteArrayLiteral("basicConstraints"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.29.35"), QByteArrayLiteral("authorityKeyIdentifier"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.4.10"), QByteArrayLiteral("O"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.4.11"), QByteArrayLiteral("OU"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.4.12"), QByteArrayLiteral("title"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.4.13"), QByteArrayLiteral("description"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.4.17"), QByteArrayLiteral("postalCode"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.4.3"), QByteArrayLiteral("CN"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.4.4"), QByteArrayLiteral("SN"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.4.41"), QByteArrayLiteral("name"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.4.42"), QByteArrayLiteral("GN"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.4.43"), QByteArrayLiteral("initials"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.4.46"), QByteArrayLiteral("dnQualifier"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.4.5"), QByteArrayLiteral("serialNumber"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.4.6"), QByteArrayLiteral("C"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.4.7"), QByteArrayLiteral("L"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.4.8"), QByteArrayLiteral("ST"));
- oids.insert(oids.end(), QByteArrayLiteral("2.5.4.9"), QByteArrayLiteral("street"));
+ oids.insert(oids.cend(), QByteArrayLiteral("0.9.2342.19200300.100.1.5"), QByteArrayLiteral("favouriteDrink"));
+ oids.insert(oids.cend(), QByteArrayLiteral("1.2.840.113549.1.9.1"), QByteArrayLiteral("emailAddress"));
+ oids.insert(oids.cend(), QByteArrayLiteral("1.3.6.1.5.5.7.1.1"), QByteArrayLiteral("authorityInfoAccess"));
+ oids.insert(oids.cend(), QByteArrayLiteral("1.3.6.1.5.5.7.48.1"), QByteArrayLiteral("OCSP"));
+ oids.insert(oids.cend(), QByteArrayLiteral("1.3.6.1.5.5.7.48.2"), QByteArrayLiteral("caIssuers"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.29.14"), QByteArrayLiteral("subjectKeyIdentifier"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.29.15"), QByteArrayLiteral("keyUsage"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.29.17"), QByteArrayLiteral("subjectAltName"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.29.19"), QByteArrayLiteral("basicConstraints"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.29.35"), QByteArrayLiteral("authorityKeyIdentifier"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.4.10"), QByteArrayLiteral("O"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.4.11"), QByteArrayLiteral("OU"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.4.12"), QByteArrayLiteral("title"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.4.13"), QByteArrayLiteral("description"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.4.17"), QByteArrayLiteral("postalCode"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.4.3"), QByteArrayLiteral("CN"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.4.4"), QByteArrayLiteral("SN"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.4.41"), QByteArrayLiteral("name"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.4.42"), QByteArrayLiteral("GN"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.4.43"), QByteArrayLiteral("initials"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.4.46"), QByteArrayLiteral("dnQualifier"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.4.5"), QByteArrayLiteral("serialNumber"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.4.6"), QByteArrayLiteral("C"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.4.7"), QByteArrayLiteral("L"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.4.8"), QByteArrayLiteral("ST"));
+ oids.insert(oids.cend(), QByteArrayLiteral("2.5.4.9"), QByteArrayLiteral("street"));
return oids;
}
Q_GLOBAL_STATIC_WITH_ARGS(OidNameMap, oidNameMap, (createOidMap()))
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp
index cd92c49ff1..fe47c947b4 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp
@@ -1,5 +1,6 @@
/****************************************************************************
**
+** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
@@ -87,8 +88,11 @@ QEglFSKmsCursor::QEglFSKmsCursor(QEglFSKmsScreen *screen)
QEglFSKmsCursor::~QEglFSKmsCursor()
{
- drmModeSetCursor(m_screen->device()->fd(), m_screen->output().crtc_id, 0, 0, 0);
- drmModeMoveCursor(m_screen->device()->fd(), m_screen->output().crtc_id, 0, 0);
+ Q_FOREACH (QPlatformScreen *screen, m_screen->virtualSiblings()) {
+ QEglFSKmsScreen *kmsScreen = static_cast<QEglFSKmsScreen *>(screen);
+ drmModeSetCursor(kmsScreen->device()->fd(), kmsScreen->output().crtc_id, 0, 0, 0);
+ drmModeMoveCursor(kmsScreen->device()->fd(), kmsScreen->output().crtc_id, 0, 0);
+ }
gbm_bo_destroy(m_bo);
m_bo = Q_NULLPTR;
@@ -143,10 +147,15 @@ void QEglFSKmsCursor::changeCursor(QCursor *windowCursor, QWindow *window)
gbm_bo_write(m_bo, cursorImage.constBits(), cursorImage.byteCount());
uint32_t handle = gbm_bo_get_handle(m_bo).u32;
- int status = drmModeSetCursor(m_screen->device()->fd(), m_screen->output().crtc_id, handle,
- m_cursorSize.width(), m_cursorSize.height());
- if (status != 0)
- qWarning("Could not set cursor: %d", status);
+
+ Q_FOREACH (QPlatformScreen *screen, m_screen->virtualSiblings()) {
+ QEglFSKmsScreen *kmsScreen = static_cast<QEglFSKmsScreen *>(screen);
+
+ int status = drmModeSetCursor(kmsScreen->device()->fd(), kmsScreen->output().crtc_id, handle,
+ m_cursorSize.width(), m_cursorSize.height());
+ if (status != 0)
+ qWarning("Could not set cursor on screen %s: %d", kmsScreen->name().toLatin1().constData(), status);
+ }
}
#endif // QT_NO_CURSOR
@@ -157,12 +166,17 @@ QPoint QEglFSKmsCursor::pos() const
void QEglFSKmsCursor::setPos(const QPoint &pos)
{
- QPoint adjustedPos = pos - m_cursorImage.hotspot();
- int ret = drmModeMoveCursor(m_screen->device()->fd(), m_screen->output().crtc_id, adjustedPos.x(), adjustedPos.y());
- if (ret == 0) {
- m_pos = pos;
- } else {
- qWarning("Failed to move cursor: %d", ret);
+ Q_FOREACH (QPlatformScreen *screen, m_screen->virtualSiblings()) {
+ QEglFSKmsScreen *kmsScreen = static_cast<QEglFSKmsScreen *>(screen);
+ QPoint origin = kmsScreen->geometry().topLeft();
+ QPoint localPos = pos - origin;
+ QPoint adjustedPos = localPos - m_cursorImage.hotspot();
+
+ int ret = drmModeMoveCursor(kmsScreen->device()->fd(), kmsScreen->output().crtc_id, adjustedPos.x(), adjustedPos.y());
+ if (ret == 0)
+ m_pos = pos;
+ else
+ qWarning("Failed to move cursor on screen %s: %d", kmsScreen->name().toLatin1().constData(), ret);
}
}
@@ -176,8 +190,11 @@ void QEglFSKmsCursor::initCursorAtlas()
QFile file(QString::fromUtf8(json));
if (!file.open(QFile::ReadOnly)) {
- drmModeSetCursor(m_screen->device()->fd(), m_screen->output().crtc_id, 0, 0, 0);
- drmModeMoveCursor(m_screen->device()->fd(), m_screen->output().crtc_id, 0, 0);
+ Q_FOREACH (QPlatformScreen *screen, m_screen->virtualSiblings()) {
+ QEglFSKmsScreen *kmsScreen = static_cast<QEglFSKmsScreen *>(screen);
+ drmModeSetCursor(kmsScreen->device()->fd(), kmsScreen->output().crtc_id, 0, 0, 0);
+ drmModeMoveCursor(kmsScreen->device()->fd(), kmsScreen->output().crtc_id, 0, 0);
+ }
m_visible = false;
return;
}
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.cpp
index bafe1e3324..18a66e34f5 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.cpp
@@ -1,5 +1,6 @@
/****************************************************************************
**
+** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
@@ -308,6 +309,7 @@ QEglFSKmsDevice::QEglFSKmsDevice(QEglFSKmsIntegration *integration, const QStrin
, m_gbm_device(Q_NULLPTR)
, m_crtc_allocator(0)
, m_connector_allocator(0)
+ , m_globalCursor(Q_NULLPTR)
{
}
@@ -347,6 +349,10 @@ void QEglFSKmsDevice::close()
qt_safe_close(m_dri_fd);
m_dri_fd = -1;
}
+
+ if (m_globalCursor)
+ m_globalCursor->deleteLater();
+ m_globalCursor = Q_NULLPTR;
}
void QEglFSKmsDevice::createScreens()
@@ -357,6 +363,8 @@ void QEglFSKmsDevice::createScreens()
return;
}
+ QEglFSKmsScreen *primaryScreen = Q_NULLPTR;
+ QList<QPlatformScreen *> siblings;
QPoint pos(0, 0);
QEglFSIntegration *integration = static_cast<QEglFSIntegration *>(QGuiApplicationPrivate::platformIntegration());
@@ -369,12 +377,24 @@ void QEglFSKmsDevice::createScreens()
if (screen) {
integration->addScreen(screen);
pos.rx() += screen->geometry().width();
+ siblings << screen;
+
+ if (!primaryScreen)
+ primaryScreen = screen;
}
drmModeFreeConnector(connector);
}
drmModeFreeResources(resources);
+
+ if (!m_integration->separateScreens()) {
+ Q_FOREACH (QPlatformScreen *screen, siblings)
+ static_cast<QEglFSKmsScreen *>(screen)->setVirtualSiblings(siblings);
+
+ if (primaryScreen)
+ m_globalCursor = new QEglFSKmsCursor(primaryScreen);
+ }
}
gbm_device *QEglFSKmsDevice::device() const
@@ -387,6 +407,11 @@ int QEglFSKmsDevice::fd() const
return m_dri_fd;
}
+QPlatformCursor *QEglFSKmsDevice::globalCursor() const
+{
+ return m_globalCursor;
+}
+
void QEglFSKmsDevice::handleDrmEvent()
{
drmEventContext drmEvent = {
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.h
index 29a1332c9a..23fca934e5 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.h
@@ -1,5 +1,6 @@
/****************************************************************************
**
+** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
@@ -34,6 +35,7 @@
#ifndef QEGLFSKMSDEVICE_H
#define QEGLFSKMSDEVICE_H
+#include "qeglfskmscursor.h"
#include "qeglfskmsintegration.h"
#include <xf86drm.h>
@@ -57,6 +59,8 @@ public:
gbm_device *device() const;
int fd() const;
+ QPlatformCursor *globalCursor() const;
+
void handleDrmEvent();
private:
@@ -70,6 +74,8 @@ private:
quint32 m_crtc_allocator;
quint32 m_connector_allocator;
+ QEglFSKmsCursor *m_globalCursor;
+
int crtcForConnector(drmModeResPtr resources, drmModeConnectorPtr connector);
QEglFSKmsScreen *screenForConnector(drmModeResPtr resources, drmModeConnectorPtr connector, QPoint pos);
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.cpp
index 7bb932cf00..45224ccb87 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.cpp
@@ -1,5 +1,6 @@
/****************************************************************************
**
+** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
@@ -60,6 +61,7 @@ QEglFSKmsIntegration::QEglFSKmsIntegration()
: m_device(Q_NULLPTR)
, m_hwCursor(true)
, m_pbuffers(false)
+ , m_separateScreens(false)
{}
void QEglFSKmsIntegration::platformInit()
@@ -203,6 +205,11 @@ bool QEglFSKmsIntegration::hwCursor() const
return m_hwCursor;
}
+bool QEglFSKmsIntegration::separateScreens() const
+{
+ return m_separateScreens;
+}
+
QMap<QString, QVariantMap> QEglFSKmsIntegration::outputSettings() const
{
return m_outputSettings;
@@ -235,6 +242,7 @@ void QEglFSKmsIntegration::loadConfig()
m_hwCursor = object.value(QStringLiteral("hwcursor")).toBool(m_hwCursor);
m_pbuffers = object.value(QStringLiteral("pbuffers")).toBool(m_pbuffers);
m_devicePath = object.value(QStringLiteral("device")).toString();
+ m_separateScreens = object.value(QStringLiteral("separateScreens")).toBool(m_separateScreens);
const QJsonArray outputs = object.value(QStringLiteral("outputs")).toArray();
for (int i = 0; i < outputs.size(); i++) {
@@ -254,6 +262,7 @@ void QEglFSKmsIntegration::loadConfig()
qCDebug(qLcEglfsKmsDebug) << "Configuration:\n"
<< "\thwcursor:" << m_hwCursor << "\n"
<< "\tpbuffers:" << m_pbuffers << "\n"
+ << "\tseparateScreens:" << m_separateScreens << "\n"
<< "\toutputs:" << m_outputSettings;
}
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.h
index 9a160d2570..edb6906a4b 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.h
@@ -1,5 +1,6 @@
/****************************************************************************
**
+** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
@@ -65,6 +66,7 @@ public:
bool supportsPBuffers() const Q_DECL_OVERRIDE;
bool hwCursor() const;
+ bool separateScreens() const;
QMap<QString, QVariantMap> outputSettings() const;
private:
@@ -73,6 +75,7 @@ private:
QEglFSKmsDevice *m_device;
bool m_hwCursor;
bool m_pbuffers;
+ bool m_separateScreens;
QString m_devicePath;
QMap<QString, QVariantMap> m_outputSettings;
};
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.cpp
index a27819d1dd..5e49c224a0 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.cpp
@@ -1,5 +1,6 @@
/****************************************************************************
**
+** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
@@ -120,6 +121,7 @@ QEglFSKmsScreen::QEglFSKmsScreen(QEglFSKmsIntegration *integration,
, m_cursor(Q_NULLPTR)
, m_interruptHandler(new QEglFSKmsInterruptHandler(this))
{
+ m_siblings << this;
}
QEglFSKmsScreen::~QEglFSKmsScreen()
@@ -185,6 +187,9 @@ QString QEglFSKmsScreen::name() const
QPlatformCursor *QEglFSKmsScreen::cursor() const
{
if (m_integration->hwCursor()) {
+ if (!m_integration->separateScreens())
+ return m_device->globalCursor();
+
if (m_cursor.isNull()) {
QEglFSKmsScreen *that = const_cast<QEglFSKmsScreen *>(this);
that->m_cursor.reset(new QEglFSKmsCursor(that));
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.h
index 16521c7fe0..4c1b0d02ad 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.h
@@ -1,5 +1,6 @@
/****************************************************************************
**
+** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
@@ -85,6 +86,10 @@ public:
qreal refreshRate() const Q_DECL_OVERRIDE;
+ QList<QPlatformScreen *> virtualSiblings() const Q_DECL_OVERRIDE { return m_siblings; }
+ void setVirtualSiblings(QList<QPlatformScreen *> sl) { m_siblings = sl; }
+
+ QEglFSKmsIntegration *integration() const { return m_integration; }
QEglFSKmsDevice *device() const { return m_device; }
gbm_surface *surface() const { return m_gbm_surface; }
@@ -110,6 +115,8 @@ private:
QPoint m_pos;
QScopedPointer<QEglFSKmsCursor> m_cursor;
+ QList<QPlatformScreen *> m_siblings;
+
struct FrameBuffer {
FrameBuffer() : fb(0) {}
uint32_t fb;
diff --git a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
index 0e8a162a7d..c7784ddb48 100644
--- a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
+++ b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
@@ -364,8 +364,8 @@ void QXcbConnection::xi2Select(xcb_window_t window)
XInput2TouchDeviceData *QXcbConnection::touchDeviceForId(int id)
{
XInput2TouchDeviceData *dev = Q_NULLPTR;
- QHash<int, XInput2TouchDeviceData*>::const_iterator devIt = m_touchDevices.find(id);
- if ( devIt != m_touchDevices.end() ) {
+ QHash<int, XInput2TouchDeviceData*>::const_iterator devIt = m_touchDevices.constFind(id);
+ if (devIt != m_touchDevices.cend()) {
dev = devIt.value();
} else {
int nrDevices = 0;
diff --git a/src/tools/qdoc/htmlgenerator.cpp b/src/tools/qdoc/htmlgenerator.cpp
index 8d84019ab5..b340883c12 100644
--- a/src/tools/qdoc/htmlgenerator.cpp
+++ b/src/tools/qdoc/htmlgenerator.cpp
@@ -2199,7 +2199,7 @@ void HtmlGenerator::generateRequisites(InnerNode *inner, CodeMarker *marker)
out() << "<div class=\"table\"><table class=\"alignedsummary\">\n";
QStringList::ConstIterator i;
- for (i = requisiteorder.begin(); i != requisiteorder.constEnd(); ++i) {
+ for (i = requisiteorder.constBegin(); i != requisiteorder.constEnd(); ++i) {
if (requisites.contains(*i)) {
out() << "<tr>"
@@ -2319,7 +2319,7 @@ void HtmlGenerator::generateQmlRequisites(QmlTypeNode *qcn, CodeMarker *marker)
out() << "<div class=\"table\"><table class=\"alignedsummary\">\n";
QStringList::ConstIterator i;
- for (i = requisiteorder.begin(); i != requisiteorder.constEnd(); ++i) {
+ for (i = requisiteorder.constBegin(); i != requisiteorder.constEnd(); ++i) {
if (requisites.contains(*i)) {
out() << "<tr>"
diff --git a/src/tools/qdoc/node.cpp b/src/tools/qdoc/node.cpp
index 230ce50df8..37bc0c5fef 100644
--- a/src/tools/qdoc/node.cpp
+++ b/src/tools/qdoc/node.cpp
@@ -2763,8 +2763,8 @@ bool CollectionNode::hasNamespaces() const
bool CollectionNode::hasClasses() const
{
if (!members_.isEmpty()) {
- NodeList::const_iterator i = members_.begin();
- while (i != members_.end()) {
+ NodeList::const_iterator i = members_.cbegin();
+ while (i != members_.cend()) {
if ((*i)->isClass())
return true;
++i;
@@ -2780,8 +2780,8 @@ bool CollectionNode::hasClasses() const
void CollectionNode::getMemberNamespaces(NodeMap& out)
{
out.clear();
- NodeList::const_iterator i = members_.begin();
- while (i != members_.end()) {
+ NodeList::const_iterator i = members_.cbegin();
+ while (i != members_.cend()) {
if ((*i)->isNamespace())
out.insert((*i)->name(),(*i));
++i;
@@ -2795,8 +2795,8 @@ void CollectionNode::getMemberNamespaces(NodeMap& out)
void CollectionNode::getMemberClasses(NodeMap& out)
{
out.clear();
- NodeList::const_iterator i = members_.begin();
- while (i != members_.end()) {
+ NodeList::const_iterator i = members_.cbegin();
+ while (i != members_.cend()) {
if ((*i)->isClass())
out.insert((*i)->name(),(*i));
++i;
diff --git a/src/tools/qdoc/puredocparser.cpp b/src/tools/qdoc/puredocparser.cpp
index 7029431460..e47460efb2 100644
--- a/src/tools/qdoc/puredocparser.cpp
+++ b/src/tools/qdoc/puredocparser.cpp
@@ -188,8 +188,8 @@ bool PureDocParser::processQdocComments()
topics.insert(i+1,"and");
doc.location().warning(tr("Multiple topic commands found in comment: %1").arg(topics));
}
- ArgList::ConstIterator a = args.begin();
- while (a != args.end()) {
+ ArgList::ConstIterator a = args.cbegin();
+ while (a != args.cend()) {
Doc nodeDoc = doc;
Node* node = processTopicCommand(nodeDoc,topic,*a);
if (node != 0) {
diff --git a/src/tools/qdoc/qdocdatabase.cpp b/src/tools/qdoc/qdocdatabase.cpp
index f1afb92eff..bf84fa8335 100644
--- a/src/tools/qdoc/qdocdatabase.cpp
+++ b/src/tools/qdoc/qdocdatabase.cpp
@@ -1549,8 +1549,8 @@ void QDocDatabase::mergeCollections(Node::Genus genus, CNMap& cnm, const Node* r
foreach (Tree* t, searchOrder()) {
CNMap* m = t->getCollectionMap(genus);
if (m && !m->isEmpty()) {
- CNMap::const_iterator i = m->begin();
- while (i != m->end()) {
+ CNMap::const_iterator i = m->cbegin();
+ while (i != m->cend()) {
if (!i.value()->isInternal())
cnmm.insert(i.key(), i.value());
++i;
diff --git a/src/tools/qdoc/tree.cpp b/src/tools/qdoc/tree.cpp
index 420396e51c..1b0aba1a0c 100644
--- a/src/tools/qdoc/tree.cpp
+++ b/src/tools/qdoc/tree.cpp
@@ -1222,8 +1222,8 @@ CollectionNode* Tree::getCollection(const QString& name, Node::Genus genus)
{
CNMap* m = getCollectionMap(genus);
if (m) {
- CNMap::const_iterator i = m->find(name);
- if (i != m->end())
+ CNMap::const_iterator i = m->constFind(name);
+ if (i != m->cend())
return i.value();
}
return 0;
@@ -1249,8 +1249,8 @@ CollectionNode* Tree::findCollection(const QString& name, Node::Genus genus)
CNMap* m = getCollectionMap(genus);
if (!m) // error
return 0;
- CNMap::const_iterator i = m->find(name);
- if (i != m->end())
+ CNMap::const_iterator i = m->constFind(name);
+ if (i != m->cend())
return i.value();
Node::Type t = Node::NoType;
switch (genus) {
diff --git a/tests/auto/widgets/kernel/qtooltip/tst_qtooltip.cpp b/tests/auto/widgets/kernel/qtooltip/tst_qtooltip.cpp
index ebd99be786..0de9e188a0 100644
--- a/tests/auto/widgets/kernel/qtooltip/tst_qtooltip.cpp
+++ b/tests/auto/widgets/kernel/qtooltip/tst_qtooltip.cpp
@@ -34,30 +34,32 @@
#include <QtTest/QtTest>
#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qscreen.h>
class tst_QToolTip : public QObject
{
Q_OBJECT
-public:
- tst_QToolTip() {}
- virtual ~tst_QToolTip() {}
-
-public slots:
- void initTestCase() {}
- void cleanupTestCase() {}
- void init() {}
- void cleanup() {}
-
private slots:
-
- // task-specific tests below me
+ void init();
+ void cleanup();
void task183679_data();
void task183679();
void whatsThis();
void setPalette();
};
+void tst_QToolTip::init()
+{
+ QVERIFY(!QToolTip::isVisible());
+}
+
+void tst_QToolTip::cleanup()
+{
+ QTRY_VERIFY(QApplication::topLevelWidgets().isEmpty());
+}
+
class Widget_task183679 : public QWidget
{
Q_OBJECT
@@ -100,12 +102,14 @@ void tst_QToolTip::task183679()
#endif
Widget_task183679 widget;
+ widget.move(QGuiApplication::primaryScreen()->availableGeometry().topLeft() + QPoint(50, 50));
+ widget.setWindowTitle(QLatin1String(QTest::currentTestFunction())
+ + QLatin1Char(' ') + QLatin1String(QTest::currentDataTag()));
widget.show();
QApplication::setActiveWindow(&widget);
QVERIFY(QTest::qWaitForWindowActive(&widget));
widget.showDelayedToolTip(100);
- QTest::qWait(300);
QTRY_VERIFY(QToolTip::isVisible());
QTest::keyPress(&widget, key);
@@ -116,26 +120,31 @@ void tst_QToolTip::task183679()
QTest::qWait(1500);
QCOMPARE(QToolTip::isVisible(), visible);
+ if (visible)
+ QToolTip::hideText();
}
-#include <QWhatsThis>
+static QWidget *findWhatsThat()
+{
+ foreach (QWidget *widget, QApplication::topLevelWidgets()) {
+ if (widget->inherits("QWhatsThat"))
+ return widget;
+ }
+ return Q_NULLPTR;
+}
void tst_QToolTip::whatsThis()
{
qApp->setStyleSheet( "QWidget { font-size: 72px; }" );
- QWhatsThis::showText(QPoint(0,0), "THis is text");
- QTest::qWait(400);
- QWidget *whatsthis = 0;
- foreach (QWidget *widget, QApplication::topLevelWidgets()) {
- if (widget->inherits("QWhatsThat")) {
- whatsthis = widget;
- break;
- }
- }
- QVERIFY(whatsthis);
+ QWhatsThis::showText(QPoint(0, 0), "This is text");
+
+ QWidget *whatsthis = Q_NULLPTR;
+ QTRY_VERIFY( (whatsthis = findWhatsThat()) );
QVERIFY(whatsthis->isVisible());
- QVERIFY(whatsthis->height() > 100); // Test QTBUG-2416
- qApp->setStyleSheet("");
+ const int whatsThisHeight = whatsthis->height();
+ qApp->setStyleSheet(QString());
+ QWhatsThis::hideText();
+ QVERIFY2(whatsThisHeight > 100, QByteArray::number(whatsThisHeight)); // Test QTBUG-2416
}
@@ -167,6 +176,7 @@ void tst_QToolTip::setPalette()
newPalette.setColor(QPalette::ToolTipText, Qt::blue);
QToolTip::setPalette(newPalette);
QCOMPARE(toolTip->palette(), newPalette);
+ QToolTip::hideText();
}
QTEST_MAIN(tst_QToolTip)