From 8ec4a9e6e134b56787b99e1cda41ae22c03d35a3 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Apr 02 2014 18:04:42 +0000 Subject: 4.8.6-0.1.rc1 - 4.8.6-rc1 - qt-aarch64.patch still needs some love --- diff --git a/.gitignore b/.gitignore index fd17f83..cbb3360 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ /hi128-app-qt4-logo.png /hi48-app-qt4-logo.png -/qt-everywhere-opensource-src-4.8.4.tar.gz /qt-everywhere-opensource-src-4.8.5.tar.gz +/qt-everywhere-opensource-src-4.8.6-rc1.tar.gz diff --git a/0147-Disallow-deep-or-widely-nested-entity-references.patch b/0147-Disallow-deep-or-widely-nested-entity-references.patch deleted file mode 100644 index 4e609d9..0000000 --- a/0147-Disallow-deep-or-widely-nested-entity-references.patch +++ /dev/null @@ -1,124 +0,0 @@ -From 512a1ce0698d370c313bb561bbf078935fa0342e Mon Sep 17 00:00:00 2001 -From: Mitch Curtis -Date: Thu, 7 Nov 2013 09:36:29 +0100 -Subject: [PATCH 147/192] Disallow deep or widely nested entity references. - -Nested references with a depth of 2 or greater will fail. References -that partially expand to greater than 1024 characters will also fail. - -This is a backport of 46a8885ae486e238a39efa5119c2714f328b08e4. - -Change-Id: I0c2e1fa13d6ccb5f88641dae2ed3f28bfdeaf609 -Reviewed-by: Richard J. Moore -Reviewed-by: Lars Knoll ---- - src/xml/sax/qxml.cpp | 51 +++++++++++++++++++ - .../auto/qxmlsimplereader/tst_qxmlsimplereader.cpp | 58 ++++++++++++++++++++++ - .../xmldocs/1-levels-nested-dtd.xml | 12 +++++ - .../xmldocs/2-levels-nested-dtd.xml | 13 +++++ - .../internal-entity-polynomial-attribute.xml | 13 +++++ - 5 files changed, 147 insertions(+) - create mode 100644 tests/auto/qxmlsimplereader/xmldocs/1-levels-nested-dtd.xml - create mode 100644 tests/auto/qxmlsimplereader/xmldocs/2-levels-nested-dtd.xml - create mode 100644 tests/auto/qxmlsimplereader/xmldocs/internal-entity-polynomial-attribute.xml - -diff --git a/src/xml/sax/qxml.cpp b/src/xml/sax/qxml.cpp -index a1777c5..3904632 100644 ---- a/src/xml/sax/qxml.cpp -+++ b/src/xml/sax/qxml.cpp -@@ -424,6 +424,10 @@ private: - int stringValueLen; - QString emptyStr; - -+ // The limit to the amount of times the DTD parsing functions can be called -+ // for the DTD currently being parsed. -+ int dtdRecursionLimit; -+ - const QString &string(); - void stringClear(); - void stringAddC(QChar); -@@ -492,6 +496,7 @@ private: - void unexpectedEof(ParseFunction where, int state); - void parseFailed(ParseFunction where, int state); - void pushParseState(ParseFunction function, int state); -+ bool isPartiallyExpandedEntityValueTooLarge(QString *errorMessage); - - Q_DECLARE_PUBLIC(QXmlSimpleReader) - QXmlSimpleReader *q_ptr; -@@ -2759,6 +2764,7 @@ QXmlSimpleReaderPrivate::QXmlSimpleReaderPrivate(QXmlSimpleReader *reader) - useNamespacePrefixes = false; - reportWhitespaceCharData = true; - reportEntities = false; -+ dtdRecursionLimit = 2; - } - - QXmlSimpleReaderPrivate::~QXmlSimpleReaderPrivate() -@@ -5018,6 +5024,11 @@ bool QXmlSimpleReaderPrivate::parseDoctype() - } - break; - case Mup: -+ if (dtdRecursionLimit > 0 && parameterEntities.size() > dtdRecursionLimit) { -+ reportParseError(QString::fromLatin1( -+ "DTD parsing exceeded recursion limit of %1.").arg(dtdRecursionLimit)); -+ return false; -+ } - if (!parseMarkupdecl()) { - parseFailed(&QXmlSimpleReaderPrivate::parseDoctype, state); - return false; -@@ -6627,6 +6638,37 @@ bool QXmlSimpleReaderPrivate::parseChoiceSeq() - return false; - } - -+bool QXmlSimpleReaderPrivate::isPartiallyExpandedEntityValueTooLarge(QString *errorMessage) -+{ -+ const QString value = string(); -+ QMap referencedEntityCounts; -+ foreach (QString entityName, entities.keys()) { -+ for (int i = 0; i < value.size() && i != -1; ) { -+ i = value.indexOf(entityName, i); -+ if (i != -1) { -+ // The entityName we're currently trying to find -+ // was matched in this string; increase our count. -+ ++referencedEntityCounts[entityName]; -+ i += entityName.size(); -+ } -+ } -+ } -+ -+ foreach (QString entityName, referencedEntityCounts.keys()) { -+ const int timesReferenced = referencedEntityCounts[entityName]; -+ const QString entityValue = entities[entityName]; -+ if (entityValue.size() * timesReferenced > 1024) { -+ if (errorMessage) { -+ *errorMessage = QString::fromLatin1("The XML entity \"%1\"" -+ "expands too a string that is too large to process when " -+ "referencing \"%2\" %3 times.").arg(entityName).arg(entityName).arg(timesReferenced); -+ } -+ return true; -+ } -+ } -+ return false; -+} -+ - /* - Parse a EntityDecl [70]. - -@@ -6721,6 +6763,15 @@ bool QXmlSimpleReaderPrivate::parseEntityDecl() - switch (state) { - case EValue: - if ( !entityExist(name())) { -+ QString errorMessage; -+ if (isPartiallyExpandedEntityValueTooLarge(&errorMessage)) { -+ // The entity at entityName is entityValue.size() characters -+ // long in its unexpanded form, and was mentioned timesReferenced times, -+ // resulting in a string that would be greater than 1024 characters. -+ reportParseError(errorMessage); -+ return false; -+ } -+ - entities.insert(name(), string()); - if (declHnd) { - if (!declHnd->internalEntityDecl(name(), string())) { --- -1.8.4.2 - diff --git a/0162-Fully-expand-entities-to-ensure-deep-or-widely-neste.patch b/0162-Fully-expand-entities-to-ensure-deep-or-widely-neste.patch deleted file mode 100644 index 89fb81e..0000000 --- a/0162-Fully-expand-entities-to-ensure-deep-or-widely-neste.patch +++ /dev/null @@ -1,128 +0,0 @@ -From cecceb0cdd87482124a73ecf537f3445d68be13e Mon Sep 17 00:00:00 2001 -From: Mitch Curtis -Date: Tue, 12 Nov 2013 13:44:56 +0100 -Subject: [PATCH 162/192] Fully expand entities to ensure deep or widely nested - ones fail parsing - -With 512a1ce0698d370c313bb561bbf078935fa0342e, we failed when parsing -entities whose partially expanded size was greater than 1024 -characters. That was not enough, so now we fully expand all entities. - -This is a backport of f1053d94f59f053ce4acad9320df14f1fbe4faac. - -Change-Id: I41dd6f4525c63e82fd320a22d19248169627f7e0 -Reviewed-by: Richard J. Moore ---- - src/xml/sax/qxml.cpp | 61 +++++++++++++--------- - .../auto/qxmlsimplereader/tst_qxmlsimplereader.cpp | 2 +- - 2 files changed, 37 insertions(+), 26 deletions(-) - -diff --git a/src/xml/sax/qxml.cpp b/src/xml/sax/qxml.cpp -index 3904632..befa801 100644 ---- a/src/xml/sax/qxml.cpp -+++ b/src/xml/sax/qxml.cpp -@@ -426,7 +426,9 @@ private: - - // The limit to the amount of times the DTD parsing functions can be called - // for the DTD currently being parsed. -- int dtdRecursionLimit; -+ static const int dtdRecursionLimit = 2; -+ // The maximum amount of characters an entity value may contain, after expansion. -+ static const int entityCharacterLimit = 1024; - - const QString &string(); - void stringClear(); -@@ -496,7 +498,7 @@ private: - void unexpectedEof(ParseFunction where, int state); - void parseFailed(ParseFunction where, int state); - void pushParseState(ParseFunction function, int state); -- bool isPartiallyExpandedEntityValueTooLarge(QString *errorMessage); -+ bool isExpandedEntityValueTooLarge(QString *errorMessage); - - Q_DECLARE_PUBLIC(QXmlSimpleReader) - QXmlSimpleReader *q_ptr; -@@ -2764,7 +2766,6 @@ QXmlSimpleReaderPrivate::QXmlSimpleReaderPrivate(QXmlSimpleReader *reader) - useNamespacePrefixes = false; - reportWhitespaceCharData = true; - reportEntities = false; -- dtdRecursionLimit = 2; - } - - QXmlSimpleReaderPrivate::~QXmlSimpleReaderPrivate() -@@ -6638,30 +6639,43 @@ bool QXmlSimpleReaderPrivate::parseChoiceSeq() - return false; - } - --bool QXmlSimpleReaderPrivate::isPartiallyExpandedEntityValueTooLarge(QString *errorMessage) -+bool QXmlSimpleReaderPrivate::isExpandedEntityValueTooLarge(QString *errorMessage) - { -- const QString value = string(); -- QMap referencedEntityCounts; -- foreach (QString entityName, entities.keys()) { -- for (int i = 0; i < value.size() && i != -1; ) { -- i = value.indexOf(entityName, i); -- if (i != -1) { -- // The entityName we're currently trying to find -- // was matched in this string; increase our count. -- ++referencedEntityCounts[entityName]; -- i += entityName.size(); -+ QMap literalEntitySizes; -+ // The entity at (QMap) times. -+ QMap > referencesToOtherEntities; -+ QMap expandedSizes; -+ -+ // For every entity, check how many times all entity names were referenced in its value. -+ foreach (QString toSearch, entities.keys()) { -+ // The amount of characters that weren't entity names, but literals, like 'X'. -+ QString leftOvers = entities.value(toSearch); -+ // How many times was entityName referenced by toSearch? -+ foreach (QString entityName, entities.keys()) { -+ for (int i = 0; i < leftOvers.size() && i != -1; ) { -+ i = leftOvers.indexOf(QString::fromLatin1("&%1;").arg(entityName), i); -+ if (i != -1) { -+ leftOvers.remove(i, entityName.size() + 2); -+ // The entityName we're currently trying to find was matched in this string; increase our count. -+ ++referencesToOtherEntities[toSearch][entityName]; -+ } - } - } -+ literalEntitySizes[toSearch] = leftOvers.size(); - } - -- foreach (QString entityName, referencedEntityCounts.keys()) { -- const int timesReferenced = referencedEntityCounts[entityName]; -- const QString entityValue = entities[entityName]; -- if (entityValue.size() * timesReferenced > 1024) { -+ foreach (QString entity, referencesToOtherEntities.keys()) { -+ expandedSizes[entity] = literalEntitySizes[entity]; -+ foreach (QString referenceTo, referencesToOtherEntities.value(entity).keys()) { -+ const int references = referencesToOtherEntities.value(entity).value(referenceTo); -+ // The total size of an entity's value is the expanded size of all of its referenced entities, plus its literal size. -+ expandedSizes[entity] += expandedSizes[referenceTo] * references + literalEntitySizes[referenceTo] * references; -+ } -+ -+ if (expandedSizes[entity] > entityCharacterLimit) { - if (errorMessage) { -- *errorMessage = QString::fromLatin1("The XML entity \"%1\"" -- "expands too a string that is too large to process when " -- "referencing \"%2\" %3 times.").arg(entityName).arg(entityName).arg(timesReferenced); -+ *errorMessage = QString::fromLatin1("The XML entity \"%1\" expands too a string that is too large to process (%2 characters > %3)."); -+ *errorMessage = (*errorMessage).arg(entity).arg(expandedSizes[entity]).arg(entityCharacterLimit); - } - return true; - } -@@ -6764,10 +6778,7 @@ bool QXmlSimpleReaderPrivate::parseEntityDecl() - case EValue: - if ( !entityExist(name())) { - QString errorMessage; -- if (isPartiallyExpandedEntityValueTooLarge(&errorMessage)) { -- // The entity at entityName is entityValue.size() characters -- // long in its unexpanded form, and was mentioned timesReferenced times, -- // resulting in a string that would be greater than 1024 characters. -+ if (isExpandedEntityValueTooLarge(&errorMessage)) { - reportParseError(errorMessage); - return false; - } --- -1.8.4.2 - diff --git a/QTBUG-15319-fix-shortcuts-with-secondary-Xkb-layout.patch b/QTBUG-15319-fix-shortcuts-with-secondary-Xkb-layout.patch deleted file mode 100644 index 000e399..0000000 --- a/QTBUG-15319-fix-shortcuts-with-secondary-Xkb-layout.patch +++ /dev/null @@ -1,34 +0,0 @@ -From f45cdeda88796830b3fe71aff7ceb1919d00400d Mon Sep 17 00:00:00 2001 -From: Aurelien Lourot -Date: Thu, 10 Jan 2013 22:28:37 +0100 -Subject: [PATCH] QTBUG-15319: fix shortcuts with secondary Xkb layout. - -Change-Id: Iadb89137ec017b9dcd4d1588fd582ea46a9d7cc1 -Reviewed-by: Aurelien -Reviewed-by: David Faure (KDE) -Reviewed-by: Lars Knoll ---- - src/gui/kernel/qkeymapper_x11.cpp | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/src/gui/kernel/qkeymapper_x11.cpp b/src/gui/kernel/qkeymapper_x11.cpp -index 7daa41d..005ff3f 100644 ---- a/src/gui/kernel/qkeymapper_x11.cpp -+++ b/src/gui/kernel/qkeymapper_x11.cpp -@@ -282,9 +282,12 @@ QList QKeyMapperPrivate::possibleKeysXKB(QKeyEvent *event) - - // first, translate key only using lock modifiers (there are no Qt equivalents for these, so we must - // always use them when determining the baseKeySym) -+ // Note: the Xkb group to be used for the conversion keycode->keysym has to be given to -+ // XkbLookupKeySym(). This information is contained in the bits 8 to 15 of xmodifiers. -+ // See https://bugreports.qt-project.org/browse/QTBUG-15319 . - KeySym baseKeySym; - uint consumedModifiers; -- if (!XkbLookupKeySym(X11->display, xkeycode, (xmodifiers & (LockMask | qt_num_lock_mask)), -+ if (!XkbLookupKeySym(X11->display, xkeycode, (xmodifiers & (0xff00 | LockMask | qt_num_lock_mask)), - &consumedModifiers, &baseKeySym)) - return QList(); - --- -1.8.3.1 - diff --git a/kubuntu_14_systemtrayicon.diff b/kubuntu_14_systemtrayicon.diff deleted file mode 100644 index 83f8b0a..0000000 --- a/kubuntu_14_systemtrayicon.diff +++ /dev/null @@ -1,1474 +0,0 @@ -Description: Introduce a plugin system for QSystemTrayIcon. - Designed to be used with sni-qt (https://launchpad.net/sni-qt) -Author: agateau@kde.org -Forwarded: no - -Introduce a plugin system for QSystemTrayIcon. Designed to be used with sni-qt -(https://launchpad.net/sni-qt) ---- - examples/desktop/systray/window.cpp | 40 ++ - examples/desktop/systray/window.h | 6 - src/gui/util/qabstractsystemtrayiconsys.cpp | 65 +++ - src/gui/util/qabstractsystemtrayiconsys_p.h | 106 ++++++ - src/gui/util/qsystemtrayicon.cpp | 6 - src/gui/util/qsystemtrayicon_p.h | 85 ++--- - src/gui/util/qsystemtrayicon_x11.cpp | 356 ++++----------------- - src/gui/util/qxembedsystemtrayicon_x11.cpp | 469 ++++++++++++++++++++++++++++ - src/gui/util/qxembedsystemtrayicon_x11_p.h | 104 ++++++ - src/gui/util/util.pri | 7 - 10 files changed, 916 insertions(+), 328 deletions(-) - ---- a/examples/desktop/systray/window.cpp -+++ b/examples/desktop/systray/window.cpp -@@ -158,15 +158,23 @@ - iconComboBox->addItem(QIcon(":/images/bad.svg"), tr("Bad")); - iconComboBox->addItem(QIcon(":/images/heart.svg"), tr("Heart")); - iconComboBox->addItem(QIcon(":/images/trash.svg"), tr("Trash")); -+ iconComboBox->addItem(QIcon::fromTheme("system-file-manager"), tr("File Manager")); - - showIconCheckBox = new QCheckBox(tr("Show icon")); - showIconCheckBox->setChecked(true); - -+#if defined(Q_WS_X11) -+ jitToolTipCheckBox = new QCheckBox(tr("Just In Time Tooltip")); -+#endif -+ - QHBoxLayout *iconLayout = new QHBoxLayout; - iconLayout->addWidget(iconLabel); - iconLayout->addWidget(iconComboBox); - iconLayout->addStretch(); - iconLayout->addWidget(showIconCheckBox); -+#if defined(Q_WS_X11) -+ iconLayout->addWidget(jitToolTipCheckBox); -+#endif - iconGroupBox->setLayout(iconLayout); - } - -@@ -254,5 +262,37 @@ - trayIconMenu->addAction(quitAction); - - trayIcon = new QSystemTrayIcon(this); -+ QByteArray category = qgetenv("SNI_CATEGORY"); -+ if (!category.isEmpty()) { -+ trayIcon->setProperty("_qt_sni_category", QString::fromLocal8Bit(category)); -+ } - trayIcon->setContextMenu(trayIconMenu); -+ -+#if defined(Q_WS_X11) -+ trayIcon->installEventFilter(this); -+#endif -+} -+ -+#if defined(Q_WS_X11) -+bool Window::eventFilter(QObject *, QEvent *event) -+{ -+ switch(event->type()) { -+ case QEvent::ToolTip: -+ if (jitToolTipCheckBox->isChecked()) { -+ QString timeString = QTime::currentTime().toString(); -+ trayIcon->setToolTip(tr("Current Time: %1").arg(timeString)); -+ } -+ break; -+ case QEvent::Wheel: { -+ QWheelEvent *wheelEvent = static_cast(event); -+ int delta = wheelEvent->delta() > 0 ? 1 : -1; -+ int index = (iconComboBox->currentIndex() + delta) % iconComboBox->count(); -+ iconComboBox->setCurrentIndex(index); -+ break; -+ } -+ default: -+ break; -+ } -+ return false; - } -+#endif ---- a/examples/desktop/systray/window.h -+++ b/examples/desktop/systray/window.h -@@ -69,6 +69,9 @@ - - protected: - void closeEvent(QCloseEvent *event); -+#if defined(Q_WS_X11) -+ bool eventFilter(QObject *object, QEvent *event); -+#endif - - private slots: - void setIcon(int index); -@@ -86,6 +89,9 @@ - QLabel *iconLabel; - QComboBox *iconComboBox; - QCheckBox *showIconCheckBox; -+#if defined(Q_WS_X11) -+ QCheckBox *jitToolTipCheckBox; -+#endif - - QGroupBox *messageGroupBox; - QLabel *typeLabel; ---- /dev/null -+++ b/src/gui/util/qabstractsystemtrayiconsys.cpp -@@ -0,0 +1,65 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -+** All rights reserved. -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** This file is part of the QtGui module of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** GNU Lesser General Public License Usage -+** 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, Nokia gives you certain additional -+** rights. These rights are described in the Nokia 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. -+** -+** Other Usage -+** Alternatively, this file may be used in accordance with the terms and -+** conditions contained in a signed written agreement between you and Nokia. -+** -+** -+** -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+#ifndef QT_NO_SYSTEMTRAYICON -+ -+#include "qabstractsystemtrayiconsys_p.h" -+ -+ -+QSystemTrayIconSysFactoryInterface::QSystemTrayIconSysFactoryInterface() -+{ -+} -+ -+///////////////////////////////////////////////// -+QAbstractSystemTrayIconSys::QAbstractSystemTrayIconSys(QSystemTrayIcon *icon) -+: trayIcon(icon) -+{ -+} -+ -+QAbstractSystemTrayIconSys::~QAbstractSystemTrayIconSys() -+{ -+} -+ -+void QAbstractSystemTrayIconSys::sendActivated(QSystemTrayIcon::ActivationReason reason) -+{ -+ qtsystray_sendActivated(trayIcon, reason); -+} -+ -+#endif ---- /dev/null -+++ b/src/gui/util/qabstractsystemtrayiconsys_p.h -@@ -0,0 +1,106 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -+** All rights reserved. -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** This file is part of the QtGui module of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** GNU Lesser General Public License Usage -+** 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, Nokia gives you certain additional -+** rights. These rights are described in the Nokia 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. -+** -+** Other Usage -+** Alternatively, this file may be used in accordance with the terms and -+** conditions contained in a signed written agreement between you and Nokia. -+** -+** -+** -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+#ifndef QABSTRACTSYSTEMTRAYICONSYS_P_H -+#define QABSTRACTSYSTEMTRAYICONSYS_P_H -+ -+// -+// W A R N I N G -+// ------------- -+// -+// This file is not part of the Qt API. It exists for the convenience -+// of a number of Qt sources files. This header file may change from -+// version to version without notice, or even be removed. -+// -+// We mean it. -+// -+ -+#ifndef QT_NO_SYSTEMTRAYICON -+ -+#include -+#include -+ -+class QAbstractSystemTrayIconSys; -+ -+class Q_GUI_EXPORT QSystemTrayIconSysFactoryInterface : public QObject, public QFactoryInterface -+{ -+ Q_OBJECT -+public: -+ QSystemTrayIconSysFactoryInterface(); -+ virtual QAbstractSystemTrayIconSys * create(QSystemTrayIcon *) = 0; -+ virtual bool isAvailable() const = 0; -+ -+ // \reimp -+ virtual QStringList keys() const { return QStringList() << QLatin1String("default"); } -+ -+Q_SIGNALS: -+ void availableChanged(bool); -+}; -+ -+#define QSystemTrayIconSysFactoryInterface_iid "com.nokia.qt.QSystemTrayIconSysFactoryInterface" -+Q_DECLARE_INTERFACE(QSystemTrayIconSysFactoryInterface, QSystemTrayIconSysFactoryInterface_iid) -+ -+class QRect; -+ -+class Q_GUI_EXPORT QAbstractSystemTrayIconSys -+{ -+public: -+ QAbstractSystemTrayIconSys(QSystemTrayIcon *icon); -+ virtual ~QAbstractSystemTrayIconSys(); -+ -+ virtual QRect geometry() const = 0; -+ virtual void updateVisibility() = 0; -+ virtual void updateIcon() = 0; -+ virtual void updateToolTip() = 0; -+ virtual void updateMenu() = 0; -+ virtual void showMessage(const QString &title, const QString &message, -+ QSystemTrayIcon::MessageIcon icon, int msecs) = 0; -+ -+ void sendActivated(QSystemTrayIcon::ActivationReason); -+ -+protected: -+ QSystemTrayIcon *trayIcon; -+}; -+ -+#endif // QT_NO_SYSTEMTRAYICON -+ -+#endif // QABSTRACTSYSTEMTRAYICONSYS_P_H -+ ---- a/src/gui/util/qsystemtrayicon.cpp -+++ b/src/gui/util/qsystemtrayicon.cpp -@@ -287,12 +287,6 @@ - */ - bool QSystemTrayIcon::event(QEvent *e) - { --#if defined(Q_WS_X11) -- if (e->type() == QEvent::ToolTip) { -- Q_D(QSystemTrayIcon); -- return d->sys->deliverToolTipEvent(e); -- } --#endif - return QObject::event(e); - } - ---- a/src/gui/util/qsystemtrayicon_p.h -+++ b/src/gui/util/qsystemtrayicon_p.h -@@ -62,10 +62,17 @@ - #include "QtGui/qpixmap.h" - #include "QtCore/qstring.h" - #include "QtCore/qpointer.h" -+#if defined(Q_WS_X11) -+#include "QtCore/qset.h" -+#endif - - QT_BEGIN_NAMESPACE - -+#if defined(Q_WS_X11) -+class QAbstractSystemTrayIconSys; -+#else - class QSystemTrayIconSys; -+#endif - class QToolButton; - class QLabel; - -@@ -75,6 +82,9 @@ - - public: - QSystemTrayIconPrivate() : sys(0), visible(false) { } -+ #if defined(Q_WS_X11) -+ ~QSystemTrayIconPrivate(); -+ #endif - - void install_sys(); - void remove_sys(); -@@ -90,7 +100,11 @@ - QPointer menu; - QIcon icon; - QString toolTip; -+ #if defined(Q_WS_X11) -+ QAbstractSystemTrayIconSys *sys; -+ #else - QSystemTrayIconSys *sys; -+ #endif - bool visible; - }; - -@@ -123,60 +137,37 @@ - }; - - #if defined(Q_WS_X11) --QT_BEGIN_INCLUDE_NAMESPACE --#include --#include --#include --#include --QT_END_INCLUDE_NAMESPACE -+class QSystemTrayIconSysFactoryInterface; - --class QSystemTrayIconSys : public QWidget -+/** -+ * This class acts as a composite QSystemTrayIconSysFactory: It can create -+ * instances of QAbstractSystemTrayIconSys* using either a plugin or the -+ * builtin factory and will cause QSystemTrayIconPrivate to recreate their -+ * 'sys' instances if the plugin availability changes. -+ */ -+class QSystemTrayIconSysFactory : public QObject - { -- friend class QSystemTrayIconPrivate; -- -+ Q_OBJECT - public: -- QSystemTrayIconSys(QSystemTrayIcon *q); -- ~QSystemTrayIconSys(); -- enum { -- SYSTEM_TRAY_REQUEST_DOCK = 0, -- SYSTEM_TRAY_BEGIN_MESSAGE = 1, -- SYSTEM_TRAY_CANCEL_MESSAGE =2 -- }; -- -- void addToTray(); -- void updateIcon(); -- XVisualInfo* getSysTrayVisualInfo(); -- -- // QObject::event is public but QWidget's ::event() re-implementation -- // is protected ;( -- inline bool deliverToolTipEvent(QEvent *e) -- { return QWidget::event(e); } -- -- static Window sysTrayWindow; -- static QList trayIcons; -- static QCoreApplication::EventFilter oldEventFilter; -- static bool sysTrayTracker(void *message, long *result); -- static Window locateSystemTray(); -- static Atom sysTraySelection; -- static XVisualInfo sysTrayVisual; -+ QSystemTrayIconSysFactory(); -+ void registerSystemTrayIconPrivate(QSystemTrayIconPrivate *iconPrivate); -+ void unregisterSystemTrayIconPrivate(QSystemTrayIconPrivate *iconPrivate); - --protected: -- void paintEvent(QPaintEvent *pe); -- void resizeEvent(QResizeEvent *re); -- bool x11Event(XEvent *event); -- void mousePressEvent(QMouseEvent *event); -- void mouseDoubleClickEvent(QMouseEvent *event); --#ifndef QT_NO_WHEELEVENT -- void wheelEvent(QWheelEvent *event); --#endif -- bool event(QEvent *e); -+ QAbstractSystemTrayIconSys *create(QSystemTrayIcon *) const; -+ -+ bool isAvailable() const; -+ -+private Q_SLOTS: -+ void refreshTrayIconPrivates(); - - private: -- QPixmap background; -- QSystemTrayIcon *q; -- Colormap colormap; -+ QSystemTrayIconSysFactoryInterface *factory() const; -+ void loadPluginFactory(); -+ -+ QSystemTrayIconSysFactoryInterface *pluginFactory; -+ QSet trayIconPrivates; - }; --#endif // Q_WS_X11 -+#endif - - QT_END_NAMESPACE - ---- a/src/gui/util/qsystemtrayicon_x11.cpp -+++ b/src/gui/util/qsystemtrayicon_x11.cpp -@@ -1,6 +1,6 @@ - /**************************************************************************** - ** --** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). - ** Contact: http://www.qt-project.org/legal - ** - ** This file is part of the QtGui module of the Qt Toolkit. -@@ -38,311 +38,122 @@ - ** $QT_END_LICENSE$ - ** - ****************************************************************************/ -+#ifndef QT_NO_SYSTEMTRAYICON -+ -+#include - --#include "private/qt_x11_p.h" --#include "qlabel.h" --#include "qx11info_x11.h" --#include "qpainter.h" --#include "qpixmap.h" --#include "qbitmap.h" --#include "qevent.h" --#include "qapplication.h" --#include "qlist.h" --#include "qmenu.h" --#include "qtimer.h" - #include "qsystemtrayicon_p.h" --#include "qpaintengine.h" -+#include "qabstractsystemtrayiconsys_p.h" -+#include "qcoreapplication.h" -+#include "qxembedsystemtrayicon_x11_p.h" - --#ifndef QT_NO_SYSTEMTRAYICON - QT_BEGIN_NAMESPACE - --Window QSystemTrayIconSys::sysTrayWindow = XNone; --QList QSystemTrayIconSys::trayIcons; --QCoreApplication::EventFilter QSystemTrayIconSys::oldEventFilter = 0; --Atom QSystemTrayIconSys::sysTraySelection = XNone; --XVisualInfo QSystemTrayIconSys::sysTrayVisual = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -- --// Locate the system tray --Window QSystemTrayIconSys::locateSystemTray() --{ -- Display *display = QX11Info::display(); -- if (sysTraySelection == XNone) { -- int screen = QX11Info::appScreen(); -- QString net_sys_tray = QString::fromLatin1("_NET_SYSTEM_TRAY_S%1").arg(screen); -- sysTraySelection = XInternAtom(display, net_sys_tray.toLatin1(), False); -- } -- -- return XGetSelectionOwner(QX11Info::display(), sysTraySelection); --} -+Q_GLOBAL_STATIC(QSystemTrayIconSysFactory, qt_guiSystemTrayIconSysFactory) - --XVisualInfo* QSystemTrayIconSys::getSysTrayVisualInfo() -+QSystemTrayIconSysFactory::QSystemTrayIconSysFactory() -+: pluginFactory(0) - { -- Display *display = QX11Info::display(); -- -- if (!sysTrayVisual.visual) { -- Window win = locateSystemTray(); -- if (win != XNone) { -- Atom actual_type; -- int actual_format; -- ulong nitems, bytes_remaining; -- uchar *data = 0; -- int result = XGetWindowProperty(display, win, ATOM(_NET_SYSTEM_TRAY_VISUAL), 0, 1, -- False, XA_VISUALID, &actual_type, -- &actual_format, &nitems, &bytes_remaining, &data); -- VisualID vid = 0; -- if (result == Success && data && actual_type == XA_VISUALID && actual_format == 32 && -- nitems == 1 && bytes_remaining == 0) -- vid = *(VisualID*)data; -- if (data) -- XFree(data); -- if (vid == 0) -- return 0; -- -- uint mask = VisualIDMask; -- XVisualInfo *vi, rvi; -- int count; -- rvi.visualid = vid; -- vi = XGetVisualInfo(display, mask, &rvi, &count); -- if (vi) { -- sysTrayVisual = vi[0]; -- XFree((char*)vi); -- } -- if (sysTrayVisual.depth != 32) -- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); -- } -- } -- -- return sysTrayVisual.visual ? &sysTrayVisual : 0; - } - --bool QSystemTrayIconSys::sysTrayTracker(void *message, long *result) -+void QSystemTrayIconSysFactory::loadPluginFactory() - { -- bool retval = false; -- if (QSystemTrayIconSys::oldEventFilter) -- retval = QSystemTrayIconSys::oldEventFilter(message, result); -- -- if (trayIcons.isEmpty()) -- return retval; -- -- Display *display = QX11Info::display(); -- XEvent *ev = (XEvent *)message; -- if (ev->type == DestroyNotify && ev->xany.window == sysTrayWindow) { -- sysTrayWindow = locateSystemTray(); -- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); -- for (int i = 0; i < trayIcons.count(); i++) { -- if (sysTrayWindow == XNone) { -- QBalloonTip::hideBalloon(); -- trayIcons[i]->hide(); // still no luck -- trayIcons[i]->destroy(); -- trayIcons[i]->create(); -- } else -- trayIcons[i]->addToTray(); // add it to the new tray -- } -- retval = true; -- } else if (ev->type == ClientMessage && sysTrayWindow == XNone) { -- static Atom manager_atom = XInternAtom(display, "MANAGER", False); -- XClientMessageEvent *cm = (XClientMessageEvent *)message; -- if ((cm->message_type == manager_atom) && ((Atom)cm->data.l[1] == sysTraySelection)) { -- sysTrayWindow = cm->data.l[2]; -- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); -- XSelectInput(display, sysTrayWindow, StructureNotifyMask); -- for (int i = 0; i < trayIcons.count(); i++) { -- trayIcons[i]->addToTray(); -- } -- retval = true; -- } -- } else if (ev->type == PropertyNotify && ev->xproperty.atom == ATOM(_NET_SYSTEM_TRAY_VISUAL) && -- ev->xproperty.window == sysTrayWindow) { -- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); -- for (int i = 0; i < trayIcons.count(); i++) { -- trayIcons[i]->addToTray(); -- } -- } -- -- return retval; --} -- --QSystemTrayIconSys::QSystemTrayIconSys(QSystemTrayIcon *q) -- : QWidget(0, Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint), -- q(q), colormap(0) --{ -- setAttribute(Qt::WA_AlwaysShowToolTips); -- setAttribute(Qt::WA_QuitOnClose, false); -- setAttribute(Qt::WA_NoSystemBackground, true); -- setAttribute(Qt::WA_PaintOnScreen); -- -- static bool eventFilterAdded = false; -- Display *display = QX11Info::display(); -- if (!eventFilterAdded) { -- oldEventFilter = qApp->setEventFilter(sysTrayTracker); -- eventFilterAdded = true; -- Window root = QX11Info::appRootWindow(); -- XWindowAttributes attr; -- XGetWindowAttributes(display, root, &attr); -- if ((attr.your_event_mask & StructureNotifyMask) != StructureNotifyMask) { -- (void) QApplication::desktop(); // lame trick to ensure our event mask is not overridden -- XSelectInput(display, root, attr.your_event_mask | StructureNotifyMask); // for MANAGER selection -- } -+ if (pluginFactory) { -+ return; - } -- if (trayIcons.isEmpty()) { -- sysTrayWindow = locateSystemTray(); -- if (sysTrayWindow != XNone) -- XSelectInput(display, sysTrayWindow, StructureNotifyMask); // track tray events -+#ifndef QT_NO_LIBRARY -+ QFactoryLoader loader(QSystemTrayIconSysFactoryInterface_iid, QLatin1String("/systemtrayicon")); -+ pluginFactory = qobject_cast(loader.instance(QLatin1String("default"))); -+ if (pluginFactory) { -+ // Set parent to ensure factory destructor is called when application -+ // is closed -+ pluginFactory->setParent(QCoreApplication::instance()); -+ connect(pluginFactory, SIGNAL(availableChanged(bool)), SLOT(refreshTrayIconPrivates())); - } -- trayIcons.append(this); -- setMouseTracking(true); --#ifndef QT_NO_TOOLTIP -- setToolTip(q->toolTip()); --#endif -- if (sysTrayWindow != XNone) -- addToTray(); -+#endif // QT_NO_LIBRARY - } - --QSystemTrayIconSys::~QSystemTrayIconSys() -+QSystemTrayIconSysFactoryInterface *QSystemTrayIconSysFactory::factory() const - { -- trayIcons.removeAt(trayIcons.indexOf(this)); -- Display *display = QX11Info::display(); -- if (trayIcons.isEmpty()) { -- if (sysTrayWindow == XNone) -- return; -- if (display) -- XSelectInput(display, sysTrayWindow, 0); // stop tracking the tray -- sysTrayWindow = XNone; -+ if (!pluginFactory) { -+ const_cast(this)->loadPluginFactory(); - } -- if (colormap) -- XFreeColormap(display, colormap); -+ if (pluginFactory && pluginFactory->isAvailable()) { -+ return pluginFactory; -+ } -+ static QXEmbedSystemTrayIconSysFactory def; -+ return def.isAvailable() ? &def : 0; - } - --void QSystemTrayIconSys::addToTray() -+void QSystemTrayIconSysFactory::refreshTrayIconPrivates() - { -- Q_ASSERT(sysTrayWindow != XNone); -- Display *display = QX11Info::display(); -- -- XVisualInfo *vi = getSysTrayVisualInfo(); -- if (vi && vi->visual) { -- Window root = RootWindow(display, vi->screen); -- Window p = root; -- if (QWidget *pw = parentWidget()) -- p = pw->effectiveWinId(); -- colormap = XCreateColormap(display, root, vi->visual, AllocNone); -- XSetWindowAttributes wsa; -- wsa.background_pixmap = 0; -- wsa.colormap = colormap; -- wsa.background_pixel = 0; -- wsa.border_pixel = 0; -- Window wid = XCreateWindow(display, p, -1, -1, 1, 1, -- 0, vi->depth, InputOutput, vi->visual, -- CWBackPixmap|CWBackPixel|CWBorderPixel|CWColormap, &wsa); -- create(wid); -- } else { -- XSetWindowBackgroundPixmap(display, winId(), ParentRelative); -- } -- -- // GNOME, NET WM Specification -- static Atom netwm_tray_atom = XInternAtom(display, "_NET_SYSTEM_TRAY_OPCODE", False); -- long l[5] = { CurrentTime, SYSTEM_TRAY_REQUEST_DOCK, static_cast(winId()), 0, 0 }; -- XEvent ev; -- memset(&ev, 0, sizeof(ev)); -- ev.xclient.type = ClientMessage; -- ev.xclient.window = sysTrayWindow; -- ev.xclient.message_type = netwm_tray_atom; -- ev.xclient.format = 32; -- memcpy((char *)&ev.xclient.data, (const char *) l, sizeof(l)); -- XSendEvent(display, sysTrayWindow, False, 0, &ev); -- setMinimumSize(22, 22); // required at least on GNOME --} -- --void QSystemTrayIconSys::updateIcon() --{ -- update(); --} -- --void QSystemTrayIconSys::resizeEvent(QResizeEvent *re) --{ -- QWidget::resizeEvent(re); -- updateIcon(); --} -- --void QSystemTrayIconSys::paintEvent(QPaintEvent*) --{ -- QPainter p(this); -- if (!getSysTrayVisualInfo()) { -- const QRegion oldSystemClip = p.paintEngine()->systemClip(); -- const QRect clearedRect = oldSystemClip.boundingRect(); -- XClearArea(QX11Info::display(), winId(), clearedRect.x(), clearedRect.y(), -- clearedRect.width(), clearedRect.height(), False); -- QPaintEngine *pe = p.paintEngine(); -- pe->setSystemClip(clearedRect); -- q->icon().paint(&p, rect()); -- pe->setSystemClip(oldSystemClip); -- } else { -- p.setCompositionMode(QPainter::CompositionMode_Source); -- p.fillRect(rect(), Qt::transparent); -- p.setCompositionMode(QPainter::CompositionMode_SourceOver); -- q->icon().paint(&p, rect()); -+ Q_FOREACH(QSystemTrayIconPrivate *trayIconPrivate, trayIconPrivates) { -+ if (trayIconPrivate->sys) { -+ delete trayIconPrivate->sys; -+ trayIconPrivate->sys = 0; -+ } -+ // When visible is true, sys is usually not 0 but it can be 0 if the -+ // call to install_sys() failed. -+ if (trayIconPrivate->visible) { -+ trayIconPrivate->install_sys(); -+ } - } - } - --void QSystemTrayIconSys::mousePressEvent(QMouseEvent *ev) -+void QSystemTrayIconSysFactory::registerSystemTrayIconPrivate(QSystemTrayIconPrivate* trayIconPrivate) - { -- QPoint globalPos = ev->globalPos(); -- if (ev->button() == Qt::RightButton && q->contextMenu()) -- q->contextMenu()->popup(globalPos); -- -- if (QBalloonTip::isBalloonVisible()) { -- emit q->messageClicked(); -- QBalloonTip::hideBalloon(); -- } -- -- if (ev->button() == Qt::LeftButton) -- emit q->activated(QSystemTrayIcon::Trigger); -- else if (ev->button() == Qt::RightButton) -- emit q->activated(QSystemTrayIcon::Context); -- else if (ev->button() == Qt::MidButton) -- emit q->activated(QSystemTrayIcon::MiddleClick); -+ trayIconPrivates.insert(trayIconPrivate); - } - --void QSystemTrayIconSys::mouseDoubleClickEvent(QMouseEvent *ev) -+void QSystemTrayIconSysFactory::unregisterSystemTrayIconPrivate(QSystemTrayIconPrivate* trayIconPrivate) - { -- if (ev->button() == Qt::LeftButton) -- emit q->activated(QSystemTrayIcon::DoubleClick); -+ trayIconPrivates.remove(trayIconPrivate); - } - --#ifndef QT_NO_WHEELEVENT --void QSystemTrayIconSys::wheelEvent(QWheelEvent *e) -+QAbstractSystemTrayIconSys *QSystemTrayIconSysFactory::create(QSystemTrayIcon *trayIcon) const - { -- QApplication::sendEvent(q, e); -+ QSystemTrayIconSysFactoryInterface *f = factory(); -+ if (!f) { -+ qWarning("No systemtrayicon available"); -+ return 0; -+ } -+ return f->create(trayIcon); - } --#endif - --bool QSystemTrayIconSys::event(QEvent *e) -+bool QSystemTrayIconSysFactory::isAvailable() const - { -- if (e->type() == QEvent::ToolTip) { -- return QApplication::sendEvent(q, e); -- } -- return QWidget::event(e); -+ return factory(); - } - --bool QSystemTrayIconSys::x11Event(XEvent *event) -+//////////////////////////////////////////////// -+QSystemTrayIconPrivate::~QSystemTrayIconPrivate() - { -- if (event->type == ReparentNotify) -- show(); -- return QWidget::x11Event(event); -+ qt_guiSystemTrayIconSysFactory()->unregisterSystemTrayIconPrivate(this); -+ delete sys; - } - --//////////////////////////////////////////////////////////////////////////// - void QSystemTrayIconPrivate::install_sys() - { - Q_Q(QSystemTrayIcon); -- if (!sys) -- sys = new QSystemTrayIconSys(q); -+ if (!sys) { -+ // Register ourself even if create() fails: our "sys" will get created -+ // later by refreshTrayIconPrivates() if a systemtray becomes -+ // available. This situation can happen for applications which are -+ // started at login time, while the desktop itself is starting up. -+ qt_guiSystemTrayIconSysFactory()->registerSystemTrayIconPrivate(this); -+ sys = qt_guiSystemTrayIconSysFactory()->create(q); -+ if (!sys) { -+ return; -+ } -+ } -+ sys->updateVisibility(); - } - - QRect QSystemTrayIconPrivate::geometry_sys() const - { -- if (!sys) -- return QRect(); -- return QRect(sys->mapToGlobal(QPoint(0, 0)), sys->size()); -+ if (!sys || !visible) -+ return QRect(); -+ return sys->geometry(); - } - - void QSystemTrayIconPrivate::remove_sys() -@@ -350,35 +161,35 @@ - if (!sys) - return; - QBalloonTip::hideBalloon(); -- sys->hide(); // this should do the trick, but... -- delete sys; // wm may resize system tray only for DestroyEvents -- sys = 0; -+ sys->updateVisibility(); - } - - void QSystemTrayIconPrivate::updateIcon_sys() - { -- if (!sys) -+ if (!sys || !visible) - return; - sys->updateIcon(); - } - - void QSystemTrayIconPrivate::updateMenu_sys() - { -- -+ if (!sys || !visible) -+ return; -+ sys->updateMenu(); - } - - void QSystemTrayIconPrivate::updateToolTip_sys() - { -- if (!sys) -+ if (!sys || !visible) - return; - #ifndef QT_NO_TOOLTIP -- sys->setToolTip(toolTip); -+ sys->updateToolTip(); - #endif - } - - bool QSystemTrayIconPrivate::isSystemTrayAvailable_sys() - { -- return QSystemTrayIconSys::locateSystemTray() != XNone; -+ return qt_guiSystemTrayIconSysFactory()->isAvailable(); - } - - bool QSystemTrayIconPrivate::supportsMessages_sys() -@@ -389,12 +200,9 @@ - void QSystemTrayIconPrivate::showMessage_sys(const QString &message, const QString &title, - QSystemTrayIcon::MessageIcon icon, int msecs) - { -- if (!sys) -+ if (!sys || !visible) - return; -- QPoint g = sys->mapToGlobal(QPoint(0, 0)); -- QBalloonTip::showBalloon(icon, message, title, sys->q, -- QPoint(g.x() + sys->width()/2, g.y() + sys->height()/2), -- msecs); -+ sys->showMessage(message, title, icon, msecs); - } - - QT_END_NAMESPACE ---- /dev/null -+++ b/src/gui/util/qxembedsystemtrayicon_x11.cpp -@@ -0,0 +1,469 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -+** All rights reserved. -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** This file is part of the QtGui module of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** GNU Lesser General Public License Usage -+** 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, Nokia gives you certain additional -+** rights. These rights are described in the Nokia 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. -+** -+** Other Usage -+** Alternatively, this file may be used in accordance with the terms and -+** conditions contained in a signed written agreement between you and Nokia. -+** -+** -+** -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+#include "qxembedsystemtrayicon_x11_p.h" -+ -+#ifndef QT_NO_SYSTEMTRAYICON -+ -+#include "private/qt_x11_p.h" -+#include "qapplication.h" -+#include "qevent.h" -+#include "qlist.h" -+#include "qmenu.h" -+#include "qpainter.h" -+#include "qpaintengine.h" -+#include "qsystemtrayicon_p.h" -+#include "qx11info_x11.h" -+ -+QT_BEGIN_INCLUDE_NAMESPACE -+#include -+#include -+#include -+#include -+QT_END_INCLUDE_NAMESPACE -+ -+QT_BEGIN_NAMESPACE -+ -+class QSystemTrayIconWidget : public QWidget -+{ -+public: -+ QSystemTrayIconWidget(QSystemTrayIcon *q, QXEmbedSystemTrayIconSys *s); -+ ~QSystemTrayIconWidget(); -+ -+ static Window locateSystemTray(); -+ -+protected: -+ void paintEvent(QPaintEvent *pe); -+ void resizeEvent(QResizeEvent *re); -+ bool x11Event(XEvent *event); -+ void mousePressEvent(QMouseEvent *event); -+ void mouseDoubleClickEvent(QMouseEvent *event); -+#ifndef QT_NO_WHEELEVENT -+ void wheelEvent(QWheelEvent *event); -+#endif -+ bool event(QEvent *e); -+ -+private: -+ enum { -+ SYSTEM_TRAY_REQUEST_DOCK = 0, -+ SYSTEM_TRAY_BEGIN_MESSAGE = 1, -+ SYSTEM_TRAY_CANCEL_MESSAGE =2 -+ }; -+ -+ void addToTray(); -+ static XVisualInfo* getSysTrayVisualInfo(); -+ -+ static Window sysTrayWindow; -+ static QList trayIcons; -+ static QCoreApplication::EventFilter oldEventFilter; -+ static bool sysTrayTracker(void *message, long *result); -+ static Atom sysTraySelection; -+ static XVisualInfo sysTrayVisual; -+ -+ QSystemTrayIcon *q; -+ QXEmbedSystemTrayIconSys *sys; -+ Colormap colormap; -+}; -+ -+Window QSystemTrayIconWidget::sysTrayWindow = XNone; -+QList QSystemTrayIconWidget::trayIcons; -+QCoreApplication::EventFilter QSystemTrayIconWidget::oldEventFilter = 0; -+Atom QSystemTrayIconWidget::sysTraySelection = XNone; -+XVisualInfo QSystemTrayIconWidget::sysTrayVisual = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -+ -+QSystemTrayIconWidget::QSystemTrayIconWidget(QSystemTrayIcon* q, QXEmbedSystemTrayIconSys* sys) -+: QWidget(0, Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint) -+, q(q) -+, sys(sys) -+, colormap(0) -+{ -+ setAttribute(Qt::WA_AlwaysShowToolTips); -+ setAttribute(Qt::WA_QuitOnClose, false); -+ setAttribute(Qt::WA_NoSystemBackground, true); -+ setAttribute(Qt::WA_PaintOnScreen); -+ setMouseTracking(true); -+#ifndef QT_NO_TOOLTIP -+ setToolTip(q->toolTip()); -+#endif -+ -+ static bool eventFilterAdded = false; -+ Display *display = QX11Info::display(); -+ if (!eventFilterAdded) { -+ oldEventFilter = qApp->setEventFilter(sysTrayTracker); -+ eventFilterAdded = true; -+ Window root = QX11Info::appRootWindow(); -+ XWindowAttributes attr; -+ XGetWindowAttributes(display, root, &attr); -+ if ((attr.your_event_mask & StructureNotifyMask) != StructureNotifyMask) { -+ (void) QApplication::desktop(); // lame trick to ensure our event mask is not overridden -+ XSelectInput(display, root, attr.your_event_mask | StructureNotifyMask); // for MANAGER selection -+ } -+ } -+ if (trayIcons.isEmpty()) { -+ sysTrayWindow = locateSystemTray(); -+ if (sysTrayWindow != XNone) -+ XSelectInput(display, sysTrayWindow, StructureNotifyMask); // track tray events -+ } -+ trayIcons.append(this); -+ if (sysTrayWindow != XNone) -+ addToTray(); -+} -+ -+QSystemTrayIconWidget::~QSystemTrayIconWidget() -+{ -+ trayIcons.removeAt(trayIcons.indexOf(this)); -+ Display *display = QX11Info::display(); -+ if (trayIcons.isEmpty()) { -+ if (sysTrayWindow == XNone) -+ return; -+ if (display) -+ XSelectInput(display, sysTrayWindow, 0); // stop tracking the tray -+ sysTrayWindow = XNone; -+ } -+ if (colormap) -+ XFreeColormap(display, colormap); -+} -+ -+void QSystemTrayIconWidget::resizeEvent(QResizeEvent *re) -+{ -+ QWidget::resizeEvent(re); -+ update(); -+} -+ -+void QSystemTrayIconWidget::paintEvent(QPaintEvent*) -+{ -+ QPainter p(this); -+ if (!getSysTrayVisualInfo()) { -+ const QRegion oldSystemClip = p.paintEngine()->systemClip(); -+ const QRect clearedRect = oldSystemClip.boundingRect(); -+ XClearArea(QX11Info::display(), winId(), clearedRect.x(), clearedRect.y(), -+ clearedRect.width(), clearedRect.height(), False); -+ QPaintEngine *pe = p.paintEngine(); -+ pe->setSystemClip(clearedRect); -+ q->icon().paint(&p, rect()); -+ pe->setSystemClip(oldSystemClip); -+ } else { -+ p.setCompositionMode(QPainter::CompositionMode_Source); -+ p.fillRect(rect(), Qt::transparent); -+ p.setCompositionMode(QPainter::CompositionMode_SourceOver); -+ q->icon().paint(&p, rect()); -+ } -+} -+ -+void QSystemTrayIconWidget::mousePressEvent(QMouseEvent *ev) -+{ -+ QPoint globalPos = ev->globalPos(); -+ if (ev->button() == Qt::RightButton && q->contextMenu()) -+ q->contextMenu()->popup(globalPos); -+ -+ if (QBalloonTip::isBalloonVisible()) { -+ QMetaObject::invokeMethod(q, "messageClicked"); -+ QBalloonTip::hideBalloon(); -+ } -+ -+ if (ev->button() == Qt::LeftButton) -+ qtsystray_sendActivated(q, QSystemTrayIcon::Trigger); -+ else if (ev->button() == Qt::RightButton) -+ qtsystray_sendActivated(q, QSystemTrayIcon::Context); -+ else if (ev->button() == Qt::MidButton) -+ qtsystray_sendActivated(q, QSystemTrayIcon::MiddleClick); -+} -+ -+void QSystemTrayIconWidget::mouseDoubleClickEvent(QMouseEvent *ev) -+{ -+ if (ev->button() == Qt::LeftButton) -+ qtsystray_sendActivated(q, QSystemTrayIcon::DoubleClick); -+} -+ -+#ifndef QT_NO_WHEELEVENT -+void QSystemTrayIconWidget::wheelEvent(QWheelEvent *e) -+{ -+ sys->sendWheelEventToTrayIcon(e->delta(), e->orientation()); -+} -+#endif -+ -+bool QSystemTrayIconWidget::event(QEvent *e) -+{ -+ if (e->type() == QEvent::ToolTip) { -+ sys->sendToolTipEventToTrayIcon(); -+ } -+ return QWidget::event(e); -+} -+ -+bool QSystemTrayIconWidget::x11Event(XEvent *event) -+{ -+ if (event->type == ReparentNotify) -+ show(); -+ return QWidget::x11Event(event); -+} -+ -+// Locate the system tray -+Window QSystemTrayIconWidget::locateSystemTray() -+{ -+ Display *display = QX11Info::display(); -+ if (sysTraySelection == XNone) { -+ int screen = QX11Info::appScreen(); -+ QString net_sys_tray = QString::fromLatin1("_NET_SYSTEM_TRAY_S%1").arg(screen); -+ sysTraySelection = XInternAtom(display, net_sys_tray.toLatin1(), False); -+ } -+ -+ return XGetSelectionOwner(QX11Info::display(), sysTraySelection); -+} -+ -+XVisualInfo* QSystemTrayIconWidget::getSysTrayVisualInfo() -+{ -+ Display *display = QX11Info::display(); -+ -+ if (!sysTrayVisual.visual) { -+ Window win = locateSystemTray(); -+ if (win != XNone) { -+ Atom actual_type; -+ int actual_format; -+ ulong nitems, bytes_remaining; -+ uchar *data = 0; -+ int result = XGetWindowProperty(display, win, ATOM(_NET_SYSTEM_TRAY_VISUAL), 0, 1, -+ False, XA_VISUALID, &actual_type, -+ &actual_format, &nitems, &bytes_remaining, &data); -+ VisualID vid = 0; -+ if (result == Success && data && actual_type == XA_VISUALID && actual_format == 32 && -+ nitems == 1 && bytes_remaining == 0) -+ vid = *(VisualID*)data; -+ if (data) -+ XFree(data); -+ if (vid == 0) -+ return 0; -+ -+ uint mask = VisualIDMask; -+ XVisualInfo *vi, rvi; -+ int count; -+ rvi.visualid = vid; -+ vi = XGetVisualInfo(display, mask, &rvi, &count); -+ if (vi) { -+ sysTrayVisual = vi[0]; -+ XFree((char*)vi); -+ } -+ if (sysTrayVisual.depth != 32) -+ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); -+ } -+ } -+ -+ return sysTrayVisual.visual ? &sysTrayVisual : 0; -+} -+ -+bool QSystemTrayIconWidget::sysTrayTracker(void *message, long *result) -+{ -+ bool retval = false; -+ if (QSystemTrayIconWidget::oldEventFilter) -+ retval = QSystemTrayIconWidget::oldEventFilter(message, result); -+ -+ if (trayIcons.isEmpty()) -+ return retval; -+ -+ Display *display = QX11Info::display(); -+ XEvent *ev = (XEvent *)message; -+ if (ev->type == DestroyNotify && ev->xany.window == sysTrayWindow) { -+ sysTrayWindow = locateSystemTray(); -+ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); -+ for (int i = 0; i < trayIcons.count(); i++) { -+ if (sysTrayWindow == XNone) { -+ QBalloonTip::hideBalloon(); -+ trayIcons[i]->hide(); // still no luck -+ trayIcons[i]->destroy(); -+ trayIcons[i]->create(); -+ } else -+ trayIcons[i]->addToTray(); // add it to the new tray -+ } -+ retval = true; -+ } else if (ev->type == ClientMessage && sysTrayWindow == XNone) { -+ static Atom manager_atom = XInternAtom(display, "MANAGER", False); -+ XClientMessageEvent *cm = (XClientMessageEvent *)message; -+ if ((cm->message_type == manager_atom) && ((Atom)cm->data.l[1] == sysTraySelection)) { -+ sysTrayWindow = cm->data.l[2]; -+ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); -+ XSelectInput(display, sysTrayWindow, StructureNotifyMask); -+ for (int i = 0; i < trayIcons.count(); i++) { -+ trayIcons[i]->addToTray(); -+ } -+ retval = true; -+ } -+ } else if (ev->type == PropertyNotify && ev->xproperty.atom == ATOM(_NET_SYSTEM_TRAY_VISUAL) && -+ ev->xproperty.window == sysTrayWindow) { -+ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); -+ for (int i = 0; i < trayIcons.count(); i++) { -+ trayIcons[i]->addToTray(); -+ } -+ } -+ -+ return retval; -+} -+ -+void QSystemTrayIconWidget::addToTray() -+{ -+ Q_ASSERT(sysTrayWindow != XNone); -+ Display *display = QX11Info::display(); -+ -+ XVisualInfo *vi = getSysTrayVisualInfo(); -+ if (vi && vi->visual) { -+ Window root = RootWindow(display, vi->screen); -+ Window p = root; -+ if (QWidget *pw = parentWidget()) -+ p = pw->effectiveWinId(); -+ colormap = XCreateColormap(display, root, vi->visual, AllocNone); -+ XSetWindowAttributes wsa; -+ wsa.background_pixmap = 0; -+ wsa.colormap = colormap; -+ wsa.background_pixel = 0; -+ wsa.border_pixel = 0; -+ Window wid = XCreateWindow(display, p, -1, -1, 1, 1, -+ 0, vi->depth, InputOutput, vi->visual, -+ CWBackPixmap|CWBackPixel|CWBorderPixel|CWColormap, &wsa); -+ create(wid); -+ } else { -+ XSetWindowBackgroundPixmap(display, winId(), ParentRelative); -+ } -+ -+ // GNOME, NET WM Specification -+ static Atom netwm_tray_atom = XInternAtom(display, "_NET_SYSTEM_TRAY_OPCODE", False); -+ long l[5] = { CurrentTime, SYSTEM_TRAY_REQUEST_DOCK, static_cast(winId()), 0, 0 }; -+ XEvent ev; -+ memset(&ev, 0, sizeof(ev)); -+ ev.xclient.type = ClientMessage; -+ ev.xclient.window = sysTrayWindow; -+ ev.xclient.message_type = netwm_tray_atom; -+ ev.xclient.format = 32; -+ memcpy((char *)&ev.xclient.data, (const char *) l, sizeof(l)); -+ XSendEvent(display, sysTrayWindow, False, 0, &ev); -+ setMinimumSize(22, 22); // required at least on GNOME -+} -+ -+//////////////////////////////////////////////////////////////////////////// -+QXEmbedSystemTrayIconSys::QXEmbedSystemTrayIconSys(QSystemTrayIcon *q) -+: QAbstractSystemTrayIconSys(q) -+, widget(0) -+{ -+} -+ -+QXEmbedSystemTrayIconSys::~QXEmbedSystemTrayIconSys() -+{ -+ delete widget; -+} -+ -+QRect QXEmbedSystemTrayIconSys::geometry() const -+{ -+ if (!widget) -+ return QRect(); -+ return QRect(widget->mapToGlobal(QPoint(0, 0)), widget->size()); -+} -+ -+void QXEmbedSystemTrayIconSys::updateIcon() -+{ -+ if (!widget) -+ return; -+ widget->update(); -+} -+ -+void QXEmbedSystemTrayIconSys::updateToolTip() -+{ -+ if (!widget) -+ return; -+ widget->setToolTip(trayIcon->toolTip()); -+} -+ -+void QXEmbedSystemTrayIconSys::showMessage(const QString &message, const QString &title, -+ QSystemTrayIcon::MessageIcon icon, int msecs) -+{ -+ if (!widget) -+ return; -+ QPoint point = geometry().center(); -+ QBalloonTip::showBalloon(icon, message, title, trayIcon, point, msecs); -+} -+ -+void QXEmbedSystemTrayIconSys::updateVisibility() -+{ -+ bool visible = trayIcon->isVisible(); -+ if (visible && !widget) -+ widget = new QSystemTrayIconWidget(trayIcon, this); -+ else if (!visible && widget) { -+ delete widget; -+ widget = 0; -+ } -+} -+ -+void QXEmbedSystemTrayIconSys::sendToolTipEventToTrayIcon() -+{ -+#ifndef QT_NO_TOOLTIP -+ // Pass the event through QSystemTrayIcon so that it gets a chance to -+ // update the tooltip, then asks widget to show the tooltip -+ Q_ASSERT(widget); -+ QPoint globalPos = QCursor::pos(); -+ QPoint pos = widget->mapFromGlobal(globalPos); -+ QHelpEvent event(QEvent::ToolTip, pos, globalPos); -+ QApplication::sendEvent(trayIcon, &event); -+#endif -+} -+ -+void QXEmbedSystemTrayIconSys::sendWheelEventToTrayIcon(int delta, Qt::Orientation orientation) -+{ -+#ifndef QT_NO_WHEELEVENT -+ Q_ASSERT(widget); -+ QPoint globalPos = QCursor::pos(); -+ QPoint pos = widget->mapFromGlobal(globalPos); -+ QWheelEvent event(pos, globalPos, delta, Qt::NoButton, Qt::NoModifier, orientation); -+ QApplication::sendEvent(trayIcon, &event); -+#endif -+} -+ -+void QXEmbedSystemTrayIconSys::updateMenu() -+{ -+} -+ -+///////////////////////////////////////////////////////////// -+QAbstractSystemTrayIconSys * QXEmbedSystemTrayIconSysFactory::create(QSystemTrayIcon *icon) -+{ -+ return new QXEmbedSystemTrayIconSys(icon); -+} -+ -+bool QXEmbedSystemTrayIconSysFactory::isAvailable() const -+{ -+ return QSystemTrayIconWidget::locateSystemTray() != XNone; -+} -+ -+QT_END_NAMESPACE -+#endif //QT_NO_SYSTEMTRAYICON ---- /dev/null -+++ b/src/gui/util/qxembedsystemtrayicon_x11_p.h -@@ -0,0 +1,104 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -+** All rights reserved. -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** This file is part of the QtGui module of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** GNU Lesser General Public License Usage -+** 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, Nokia gives you certain additional -+** rights. These rights are described in the Nokia 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. -+** -+** Other Usage -+** Alternatively, this file may be used in accordance with the terms and -+** conditions contained in a signed written agreement between you and Nokia. -+** -+** -+** -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+#ifndef QXEMBEDSYSTEMTRAYICON_X11_P_H -+#define QXEMBEDSYSTEMTRAYICON_X11_P_H -+ -+// -+// W A R N I N G -+// ------------- -+// -+// This file is not part of the Qt API. It exists for the convenience -+// of a number of Qt sources files. This header file may change from -+// version to version without notice, or even be removed. -+// -+// We mean it. -+// -+ -+#ifndef QT_NO_SYSTEMTRAYICON -+ -+#include "qabstractsystemtrayiconsys_p.h" -+ -+QT_BEGIN_NAMESPACE -+ -+class QSystemTrayIconWidget; -+ -+class QXEmbedSystemTrayIconSys : public QAbstractSystemTrayIconSys -+{ -+public: -+ QXEmbedSystemTrayIconSys(QSystemTrayIcon *); -+ ~QXEmbedSystemTrayIconSys(); -+ -+ QRect geometry() const; -+ -+ void updateVisibility(); -+ -+ void updateIcon(); -+ -+ void updateToolTip(); -+ -+ void updateMenu(); -+ -+ void showMessage(const QString &message, const QString &title, -+ QSystemTrayIcon::MessageIcon icon, int msecs); -+ -+private: -+ friend class QSystemTrayIconWidget; -+ QSystemTrayIconWidget *widget; -+ -+ void sendToolTipEventToTrayIcon(); -+ -+ void sendWheelEventToTrayIcon(int delta, Qt::Orientation orientation); -+}; -+ -+struct QXEmbedSystemTrayIconSysFactory : public QSystemTrayIconSysFactoryInterface -+{ -+ QAbstractSystemTrayIconSys * create(QSystemTrayIcon *trayIcon); -+ bool isAvailable() const; -+}; -+ -+ -+QT_END_NAMESPACE -+ -+#endif // QT_NO_SYSTEMTRAYICON -+ -+#endif // QXEMBEDSYSTEMTRAYICON_X11_P_H -+ ---- a/src/gui/util/util.pri -+++ b/src/gui/util/util.pri -@@ -29,8 +29,13 @@ - } - - unix:x11 { -+ HEADERS += \ -+ util/qabstractsystemtrayiconsys_p.h \ -+ util/qxembedsystemtrayicon_x11_p.h - SOURCES += \ -- util/qsystemtrayicon_x11.cpp -+ util/qabstractsystemtrayiconsys.cpp \ -+ util/qsystemtrayicon_x11.cpp \ -+ util/qxembedsystemtrayicon_x11.cpp - } - - embedded|qpa { diff --git a/qt-4.8-poll.patch b/qt-4.8-poll.patch index 3c99ccf..aed363c 100644 --- a/qt-4.8-poll.patch +++ b/qt-4.8-poll.patch @@ -1,7 +1,8 @@ ---- a/src/corelib/io/qprocess_unix.cpp -+++ a/src/corelib/io/qprocess_unix.cpp -@@ -139,13 +139,6 @@ static void qt_sa_sigchld_handler(int signum) - oldAction(signum); +diff -up qt-everywhere-opensource-src-4.8.6/src/corelib/io/qprocess_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/corelib/io/qprocess_unix.cpp +--- qt-everywhere-opensource-src-4.8.6/src/corelib/io/qprocess_unix.cpp.poll 2014-03-30 15:36:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/corelib/io/qprocess_unix.cpp 2014-03-31 18:04:05.958260978 -0500 +@@ -158,13 +158,6 @@ static void qt_sa_sigchld_sigaction(int + } } -static inline void add_fd(int &nfds, int fd, fd_set *fdset) @@ -14,7 +15,7 @@ struct QProcessInfo { QProcess *process; int deathPipe; -@@ -231,9 +224,9 @@ QProcessManager::~QProcessManager() +@@ -256,9 +249,9 @@ QProcessManager::~QProcessManager() void QProcessManager::run() { forever { @@ -27,7 +28,7 @@ #if defined (QPROCESS_DEBUG) qDebug() << "QProcessManager::run() waiting for children to die"; -@@ -242,8 +235,8 @@ void QProcessManager::run() +@@ -267,8 +260,8 @@ void QProcessManager::run() // block forever, or until activity is detected on the dead child // pipe. the only other peers are the SIGCHLD signal handler, and the // QProcessManager destructor. @@ -38,7 +39,7 @@ if (errno == EINTR) continue; break; -@@ -992,17 +985,6 @@ void QProcessPrivate::killProcess() +@@ -1027,17 +1020,6 @@ void QProcessPrivate::killProcess() ::kill(pid_t(pid), SIGKILL); } @@ -56,7 +57,7 @@ /* Returns the difference between msecs and elapsed. If msecs is -1, however, -1 is returned. -@@ -1025,10 +1007,10 @@ bool QProcessPrivate::waitForStarted(int msecs) +@@ -1060,10 +1042,10 @@ bool QProcessPrivate::waitForStarted(int childStartedPipe[0]); #endif @@ -71,7 +72,7 @@ processError = QProcess::Timedout; q->setErrorString(QProcess::tr("Process operation timed out")); #if defined (QPROCESS_DEBUG) -@@ -1044,6 +1026,47 @@ bool QProcessPrivate::waitForStarted(int msecs) +@@ -1079,6 +1061,47 @@ bool QProcessPrivate::waitForStarted(int return startedEmitted; } @@ -119,7 +120,7 @@ bool QProcessPrivate::waitForReadyRead(int msecs) { Q_Q(QProcess); -@@ -1055,28 +1078,9 @@ bool QProcessPrivate::waitForReadyRead(int msecs) +@@ -1090,28 +1113,9 @@ bool QProcessPrivate::waitForReadyRead(i stopWatch.start(); forever { @@ -150,7 +151,7 @@ if (ret < 0) { break; } -@@ -1086,18 +1090,18 @@ bool QProcessPrivate::waitForReadyRead(int msecs) +@@ -1121,18 +1125,18 @@ bool QProcessPrivate::waitForReadyRead(i return false; } @@ -172,7 +173,7 @@ bool canRead = _q_canReadStandardError(); if (processChannel == QProcess::StandardError && canRead) readyReadEmitted = true; -@@ -1105,13 +1109,13 @@ bool QProcessPrivate::waitForReadyRead(int msecs) +@@ -1140,13 +1144,13 @@ bool QProcessPrivate::waitForReadyRead(i if (readyReadEmitted) return true; @@ -189,7 +190,7 @@ } return false; } -@@ -1127,29 +1131,9 @@ bool QProcessPrivate::waitForBytesWritten(int msecs) +@@ -1162,29 +1166,9 @@ bool QProcessPrivate::waitForBytesWritte stopWatch.start(); while (!writeBuffer.isEmpty()) { @@ -221,7 +222,7 @@ if (ret < 0) { break; } -@@ -1160,24 +1144,24 @@ bool QProcessPrivate::waitForBytesWritten(int msecs) +@@ -1195,24 +1179,24 @@ bool QProcessPrivate::waitForBytesWritte return false; } @@ -254,7 +255,7 @@ } return false; -@@ -1194,29 +1178,9 @@ bool QProcessPrivate::waitForFinished(int msecs) +@@ -1229,29 +1213,9 @@ bool QProcessPrivate::waitForFinished(in stopWatch.start(); forever { @@ -286,7 +287,7 @@ if (ret < 0) { break; } -@@ -1226,20 +1190,20 @@ bool QProcessPrivate::waitForFinished(int msecs) +@@ -1261,20 +1225,20 @@ bool QProcessPrivate::waitForFinished(in return false; } @@ -312,7 +313,7 @@ if (_q_processDied()) return true; } -@@ -1249,10 +1213,10 @@ bool QProcessPrivate::waitForFinished(int msecs) +@@ -1284,10 +1248,10 @@ bool QProcessPrivate::waitForFinished(in bool QProcessPrivate::waitForWrite(int msecs) { @@ -327,9 +328,10 @@ } void QProcessPrivate::findExitCode() ---- a/src/corelib/kernel/qcore_unix.cpp -+++ a/src/corelib/kernel/qcore_unix.cpp -@@ -103,4 +103,165 @@ int qt_safe_select(int nfds, fd_set *fdread, fd_set *fdwrite, fd_set *fdexcept, +diff -up qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix.cpp +--- qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix.cpp.poll 2014-03-30 15:36:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix.cpp 2014-03-31 18:01:59.369715403 -0500 +@@ -99,4 +99,165 @@ int qt_safe_select(int nfds, fd_set *fdr } } @@ -495,9 +497,10 @@ +#endif + QT_END_NAMESPACE ---- a/src/corelib/kernel/qcore_unix_p.h -+++ a/src/corelib/kernel/qcore_unix_p.h -@@ -316,9 +316,42 @@ static inline pid_t qt_safe_waitpid(pid_t pid, int *status, int options) +diff -up qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix_p.h.poll qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix_p.h +--- qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix_p.h.poll 2014-03-30 15:36:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix_p.h 2014-03-31 18:01:59.370715392 -0500 +@@ -345,9 +345,42 @@ static inline pid_t qt_safe_waitpid(pid_ timeval qt_gettime(); // in qelapsedtimer_mac.cpp or qtimestamp_unix.cpp @@ -540,9 +543,10 @@ // according to X/OPEN we have to define semun ourselves // we use prefix as on some systems sem.h will have it struct semid_ds; ---- a/src/network/socket/qlocalserver_unix.cpp -+++ a/src/network/socket/qlocalserver_unix.cpp -@@ -208,16 +208,11 @@ void QLocalServerPrivate::_q_onNewConnection() +diff -up qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalserver_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalserver_unix.cpp +--- qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalserver_unix.cpp.poll 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalserver_unix.cpp 2014-03-31 18:01:59.370715392 -0500 +@@ -208,16 +208,11 @@ void QLocalServerPrivate::_q_onNewConnec void QLocalServerPrivate::waitForNewConnection(int msec, bool *timedOut) { @@ -563,9 +567,10 @@ if (-1 == result) { setError(QLatin1String("QLocalServer::waitForNewConnection")); closeServer(); ---- a/src/network/socket/qlocalsocket_unix.cpp -+++ a/src/network/socket/qlocalsocket_unix.cpp -@@ -56,10 +56,6 @@ +diff -up qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalsocket_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalsocket_unix.cpp +--- qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalsocket_unix.cpp.poll 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalsocket_unix.cpp 2014-03-31 18:01:59.370715392 -0500 +@@ -56,10 +56,6 @@ #include #include @@ -576,7 +581,7 @@ #define QT_CONNECT_TIMEOUT 30000 QT_BEGIN_NAMESPACE -@@ -520,32 +516,17 @@ bool QLocalSocket::waitForConnected(int msec) +@@ -520,32 +516,17 @@ bool QLocalSocket::waitForConnected(int if (state() != ConnectingState) return (state() == ConnectedState); @@ -615,7 +620,7 @@ if (-1 == result && errno != EINTR) { d->errorOccurred( QLocalSocket::UnknownSocketError, QLatin1String("QLocalSocket::waitForConnected")); -@@ -553,6 +534,11 @@ bool QLocalSocket::waitForConnected(int msec) +@@ -553,6 +534,11 @@ bool QLocalSocket::waitForConnected(int } if (result > 0) d->_q_connectToSocket(); @@ -627,9 +632,10 @@ } return (state() == ConnectedState); ---- a/src/network/socket/qnativesocketengine_unix.cpp -+++ a/src/network/socket/qnativesocketengine_unix.cpp -@@ -1090,48 +1090,40 @@ qint64 QNativeSocketEnginePrivate::nativeRead(char *data, qint64 maxSize) +diff -up qt-everywhere-opensource-src-4.8.6/src/network/socket/qnativesocketengine_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/network/socket/qnativesocketengine_unix.cpp +--- qt-everywhere-opensource-src-4.8.6/src/network/socket/qnativesocketengine_unix.cpp.poll 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/network/socket/qnativesocketengine_unix.cpp 2014-03-31 18:01:59.371715381 -0500 +@@ -1068,48 +1068,40 @@ qint64 QNativeSocketEnginePrivate::nativ int QNativeSocketEnginePrivate::nativeSelect(int timeout, bool selectForRead) const { @@ -704,9 +710,10 @@ return ret; } ---- a/src/qt3support/network/q3socketdevice_unix.cpp -+++ a/src/qt3support/network/q3socketdevice_unix.cpp -@@ -68,6 +68,7 @@ static inline int qt_socket_socket(int domain, int type, int protocol) +diff -up qt-everywhere-opensource-src-4.8.6/src/qt3support/network/q3socketdevice_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/qt3support/network/q3socketdevice_unix.cpp +--- qt-everywhere-opensource-src-4.8.6/src/qt3support/network/q3socketdevice_unix.cpp.poll 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/qt3support/network/q3socketdevice_unix.cpp 2014-03-31 18:01:59.371715381 -0500 +@@ -68,6 +68,7 @@ static inline int qt_socket_socket(int d #endif #include "q3socketdevice.h" @@ -714,7 +721,7 @@ #ifndef QT_NO_NETWORK -@@ -588,19 +589,10 @@ Q_LONG Q3SocketDevice::waitForMore( int msecs, bool *timeout ) const +@@ -588,19 +589,10 @@ Q_LONG Q3SocketDevice::waitForMore( int { if ( !isValid() ) return -1; @@ -737,8 +744,9 @@ if ( rv < 0 ) return -1; ---- a/src/qt3support/other/q3process_unix.cpp -+++ a/src/qt3support/other/q3process_unix.cpp +diff -up qt-everywhere-opensource-src-4.8.6/src/qt3support/other/q3process_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/qt3support/other/q3process_unix.cpp +--- qt-everywhere-opensource-src-4.8.6/src/qt3support/other/q3process_unix.cpp.poll 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/qt3support/other/q3process_unix.cpp 2014-03-31 18:01:59.372715370 -0500 @@ -981,13 +981,10 @@ bool Q3Process::isRunning() const // On heavy processing, the socket notifier for the sigchild might not // have found time to fire yet. diff --git a/qt-aarch64.patch b/qt-aarch64.patch index d4817c7..599a518 100644 --- a/qt-aarch64.patch +++ b/qt-aarch64.patch @@ -1,187 +1,51 @@ -Index: b/configure -=================================================================== ---- a/configure -+++ b/configure -@@ -2808,6 +2811,9 @@ - *86_64) - PLATFORM=qws/linux-x86_64-g++ - ;; -+ aarch64) -+ PLATFORM=linux-g++-aarch64 -+ ;; - *) - PLATFORM=qws/linux-generic-g++ - ;; -@@ -3246,6 +3192,12 @@ - echo " ARM (arm)" - fi - CFG_HOST_ARCH=arm -+ ;; -+ *:*:aarch64*) -+ if [ "$OPT_VERBOSE" = "yes" ]; then -+ echo " AArch64 (aarch64)" -+ fi -+ CFG_HOST_ARCH=aarch64 - ;; - Linux:*:sparc*) - if [ "$OPT_VERBOSE" = "yes" ]; then -diff --git a/include/QtCore/qatomic_aarch64.h b/include/QtCore/qatomic_aarch64.h -new file mode 100644 -index 0000000..2049aec ---- /dev/null -+++ b/include/QtCore/qatomic_aarch64.h +diff -up qt-everywhere-opensource-src-4.8.6/include/QtCore/headers.pri.aarch64 qt-everywhere-opensource-src-4.8.6/include/QtCore/headers.pri +--- qt-everywhere-opensource-src-4.8.6/include/QtCore/headers.pri.aarch64 2014-03-30 15:36:46.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/include/QtCore/headers.pri 2014-04-02 09:25:21.348386845 -0500 +@@ -1,3 +1,3 @@ +-SYNCQT.HEADER_FILES = ../corelib/statemachine/qabstractstate.h ../corelib/statemachine/qabstracttransition.h ../corelib/statemachine/qeventtransition.h ../corelib/statemachine/qfinalstate.h ../corelib/statemachine/qhistorystate.h ../corelib/statemachine/qsignaltransition.h ../corelib/statemachine/qstate.h ../corelib/statemachine/qstatemachine.h ../corelib/arch/qatomic_alpha.h ../corelib/arch/qatomic_arch.h ../corelib/arch/qatomic_arm.h ../corelib/arch/qatomic_armv5.h ../corelib/arch/qatomic_armv6.h ../corelib/arch/qatomic_armv7.h ../corelib/arch/qatomic_avr32.h ../corelib/arch/qatomic_bfin.h ../corelib/arch/qatomic_bootstrap.h ../corelib/arch/qatomic_generic.h ../corelib/arch/qatomic_i386.h ../corelib/arch/qatomic_ia64.h ../corelib/arch/qatomic_integrity.h ../corelib/arch/qatomic_m68k.h ../corelib/arch/qatomic_macosx.h ../corelib/arch/qatomic_mips.h ../corelib/arch/qatomic_parisc.h ../corelib/arch/qatomic_powerpc.h ../corelib/arch/qatomic_s390.h ../corelib/arch/qatomic_sh.h ../corelib/arch/qatomic_sh4a.h ../corelib/arch/qatomic_sparc.h ../corelib/arch/qatomic_symbian.h ../corelib/arch/qatomic_vxworks.h ../corelib/arch/qatomic_windows.h ../corelib/arch/qatomic_windowsce.h ../corelib/arch/qatomic_x86_64.h ../corelib/thread/qatomic.h ../corelib/thread/qbasicatomic.h ../corelib/thread/qmutex.h ../corelib/thread/qreadwritelock.h ../corelib/thread/qsemaphore.h ../corelib/thread/qthread.h ../corelib/thread/qthreadstorage.h ../corelib/thread/qwaitcondition.h ../corelib/xml/qxmlstream.h ../corelib/concurrent/qfuture.h ../corelib/concurrent/qfutureinterface.h ../corelib/concurrent/qfuturesynchronizer.h ../corelib/concurrent/qfuturewatcher.h ../corelib/concurrent/qrunnable.h ../corelib/concurrent/qtconcurrentcompilertest.h ../corelib/concurrent/qtconcurrentexception.h ../corelib/concurrent/qtconcurrentfilter.h ../corelib/concurrent/qtconcurrentfilterkernel.h ../corelib/concurrent/qtconcurrentfunctionwrappers.h ../corelib/concurrent/qtconcurrentiteratekernel.h ../corelib/concurrent/qtconcurrentmap.h ../corelib/concurrent/qtconcurrentmapkernel.h ../corelib/concurrent/qtconcurrentmedian.h ../corelib/concurrent/qtconcurrentreducekernel.h ../corelib/concurrent/qtconcurrentresultstore.h ../corelib/concurrent/qtconcurrentrun.h ../corelib/concurrent/qtconcurrentrunbase.h ../corelib/concurrent/qtconcurrentstoredfunctioncall.h ../corelib/concurrent/qtconcurrentthreadengine.h ../corelib/concurrent/qthreadpool.h ../corelib/kernel/qabstracteventdispatcher.h ../corelib/kernel/qabstractitemmodel.h ../corelib/kernel/qbasictimer.h ../corelib/kernel/qcoreapplication.h ../corelib/kernel/qcoreevent.h ../corelib/kernel/qeventloop.h ../corelib/kernel/qfunctions_nacl.h ../corelib/kernel/qfunctions_vxworks.h ../corelib/kernel/qfunctions_wince.h ../corelib/kernel/qmath.h ../corelib/kernel/qmetaobject.h ../corelib/kernel/qmetatype.h ../corelib/kernel/qmimedata.h ../corelib/kernel/qobject.h ../corelib/kernel/qobjectcleanuphandler.h ../corelib/kernel/qobjectdefs.h ../corelib/kernel/qpointer.h ../corelib/kernel/qsharedmemory.h ../corelib/kernel/qsignalmapper.h ../corelib/kernel/qsocketnotifier.h ../corelib/kernel/qsystemsemaphore.h ../corelib/kernel/qtimer.h ../corelib/kernel/qtranslator.h ../corelib/kernel/qvariant.h ../corelib/plugin/qfactoryinterface.h ../corelib/plugin/qlibrary.h ../corelib/plugin/qplugin.h ../corelib/plugin/qpluginloader.h ../corelib/plugin/quuid.h ../corelib/global/qconfig-dist.h ../corelib/global/qconfig-large.h ../corelib/global/qconfig-medium.h ../corelib/global/qconfig-minimal.h ../corelib/global/qconfig-nacl.h ../corelib/global/qconfig-small.h ../corelib/global/qendian.h ../corelib/global/qfeatures.h ../corelib/global/qglobal.h ../corelib/global/qlibraryinfo.h ../corelib/global/qnamespace.h ../corelib/global/qnumeric.h ../corelib/global/qt_windows.h ../corelib/global/qconfig.h ../corelib/codecs/qtextcodec.h ../corelib/codecs/qtextcodecplugin.h ../corelib/io/qabstractfileengine.h ../corelib/io/qbuffer.h ../corelib/io/qdatastream.h ../corelib/io/qdebug.h ../corelib/io/qdir.h ../corelib/io/qdiriterator.h ../corelib/io/qfile.h ../corelib/io/qfileinfo.h ../corelib/io/qfilesystemwatcher.h ../corelib/io/qfsfileengine.h ../corelib/io/qiodevice.h ../corelib/io/qprocess.h ../corelib/io/qresource.h ../corelib/io/qsettings.h ../corelib/io/qtemporaryfile.h ../corelib/io/qtextstream.h ../corelib/io/qurl.h ../corelib/animation/qabstractanimation.h ../corelib/animation/qanimationgroup.h ../corelib/animation/qparallelanimationgroup.h ../corelib/animation/qpauseanimation.h ../corelib/animation/qpropertyanimation.h ../corelib/animation/qsequentialanimationgroup.h ../corelib/animation/qvariantanimation.h ../corelib/tools/qalgorithms.h ../corelib/tools/qbitarray.h ../corelib/tools/qbytearray.h ../corelib/tools/qbytearraymatcher.h ../corelib/tools/qcache.h ../corelib/tools/qchar.h ../corelib/tools/qcontainerfwd.h ../corelib/tools/qcontiguouscache.h ../corelib/tools/qcryptographichash.h ../corelib/tools/qdatetime.h ../corelib/tools/qeasingcurve.h ../corelib/tools/qelapsedtimer.h ../corelib/tools/qhash.h ../corelib/tools/qiterator.h ../corelib/tools/qline.h ../corelib/tools/qlinkedlist.h ../corelib/tools/qlist.h ../corelib/tools/qlocale.h ../corelib/tools/qlocale_blackberry.h ../corelib/tools/qmap.h ../corelib/tools/qmargins.h ../corelib/tools/qpair.h ../corelib/tools/qpoint.h ../corelib/tools/qqueue.h ../corelib/tools/qrect.h ../corelib/tools/qregexp.h ../corelib/tools/qscopedpointer.h ../corelib/tools/qscopedvaluerollback.h ../corelib/tools/qset.h ../corelib/tools/qshareddata.h ../corelib/tools/qsharedpointer.h ../corelib/tools/qsharedpointer_impl.h ../corelib/tools/qsize.h ../corelib/tools/qstack.h ../corelib/tools/qstring.h ../corelib/tools/qstringbuilder.h ../corelib/tools/qstringlist.h ../corelib/tools/qstringmatcher.h ../corelib/tools/qtextboundaryfinder.h ../corelib/tools/qtimeline.h ../corelib/tools/qvarlengtharray.h ../corelib/tools/qvector.h ../../include/QtCore/QtCore ++SYNCQT.HEADER_FILES = ../corelib/statemachine/qabstractstate.h ../corelib/statemachine/qabstracttransition.h ../corelib/statemachine/qeventtransition.h ../corelib/statemachine/qfinalstate.h ../corelib/statemachine/qhistorystate.h ../corelib/statemachine/qsignaltransition.h ../corelib/statemachine/qstate.h ../corelib/statemachine/qstatemachine.h ../corelib/arch/qatomic_aarch64.h ../corelib/arch/qatomic_alpha.h ../corelib/arch/qatomic_arch.h ../corelib/arch/qatomic_arm.h ../corelib/arch/qatomic_armv5.h ../corelib/arch/qatomic_armv6.h ../corelib/arch/qatomic_armv7.h ../corelib/arch/qatomic_avr32.h ../corelib/arch/qatomic_bfin.h ../corelib/arch/qatomic_bootstrap.h ../corelib/arch/qatomic_generic.h ../corelib/arch/qatomic_i386.h ../corelib/arch/qatomic_ia64.h ../corelib/arch/qatomic_integrity.h ../corelib/arch/qatomic_m68k.h ../corelib/arch/qatomic_macosx.h ../corelib/arch/qatomic_mips.h ../corelib/arch/qatomic_parisc.h ../corelib/arch/qatomic_powerpc.h ../corelib/arch/qatomic_s390.h ../corelib/arch/qatomic_sh.h ../corelib/arch/qatomic_sh4a.h ../corelib/arch/qatomic_sparc.h ../corelib/arch/qatomic_symbian.h ../corelib/arch/qatomic_vxworks.h ../corelib/arch/qatomic_windows.h ../corelib/arch/qatomic_windowsce.h ../corelib/arch/qatomic_x86_64.h ../corelib/thread/qatomic.h ../corelib/thread/qbasicatomic.h ../corelib/thread/qmutex.h ../corelib/thread/qreadwritelock.h ../corelib/thread/qsemaphore.h ../corelib/thread/qthread.h ../corelib/thread/qthreadstorage.h ../corelib/thread/qwaitcondition.h ../corelib/xml/qxmlstream.h ../corelib/concurrent/qfuture.h ../corelib/concurrent/qfutureinterface.h ../corelib/concurrent/qfuturesynchronizer.h ../corelib/concurrent/qfuturewatcher.h ../corelib/concurrent/qrunnable.h ../corelib/concurrent/qtconcurrentcompilertest.h ../corelib/concurrent/qtconcurrentexception.h ../corelib/concurrent/qtconcurrentfilter.h ../corelib/concurrent/qtconcurrentfilterkernel.h ../corelib/concurrent/qtconcurrentfunctionwrappers.h ../corelib/concurrent/qtconcurrentiteratekernel.h ../corelib/concurrent/qtconcurrentmap.h ../corelib/concurrent/qtconcurrentmapkernel.h ../corelib/concurrent/qtconcurrentmedian.h ../corelib/concurrent/qtconcurrentreducekernel.h ../corelib/concurrent/qtconcurrentresultstore.h ../corelib/concurrent/qtconcurrentrun.h ../corelib/concurrent/qtconcurrentrunbase.h ../corelib/concurrent/qtconcurrentstoredfunctioncall.h ../corelib/concurrent/qtconcurrentthreadengine.h ../corelib/concurrent/qthreadpool.h ../corelib/kernel/qabstracteventdispatcher.h ../corelib/kernel/qabstractitemmodel.h ../corelib/kernel/qbasictimer.h ../corelib/kernel/qcoreapplication.h ../corelib/kernel/qcoreevent.h ../corelib/kernel/qeventloop.h ../corelib/kernel/qfunctions_nacl.h ../corelib/kernel/qfunctions_vxworks.h ../corelib/kernel/qfunctions_wince.h ../corelib/kernel/qmath.h ../corelib/kernel/qmetaobject.h ../corelib/kernel/qmetatype.h ../corelib/kernel/qmimedata.h ../corelib/kernel/qobject.h ../corelib/kernel/qobjectcleanuphandler.h ../corelib/kernel/qobjectdefs.h ../corelib/kernel/qpointer.h ../corelib/kernel/qsharedmemory.h ../corelib/kernel/qsignalmapper.h ../corelib/kernel/qsocketnotifier.h ../corelib/kernel/qsystemsemaphore.h ../corelib/kernel/qtimer.h ../corelib/kernel/qtranslator.h ../corelib/kernel/qvariant.h ../corelib/plugin/qfactoryinterface.h ../corelib/plugin/qlibrary.h ../corelib/plugin/qplugin.h ../corelib/plugin/qpluginloader.h ../corelib/plugin/quuid.h ../corelib/global/qconfig-dist.h ../corelib/global/qconfig-large.h ../corelib/global/qconfig-medium.h ../corelib/global/qconfig-minimal.h ../corelib/global/qconfig-nacl.h ../corelib/global/qconfig-small.h ../corelib/global/qendian.h ../corelib/global/qfeatures.h ../corelib/global/qglobal.h ../corelib/global/qlibraryinfo.h ../corelib/global/qnamespace.h ../corelib/global/qnumeric.h ../corelib/global/qt_windows.h ../corelib/global/qconfig.h ../corelib/codecs/qtextcodec.h ../corelib/codecs/qtextcodecplugin.h ../corelib/io/qabstractfileengine.h ../corelib/io/qbuffer.h ../corelib/io/qdatastream.h ../corelib/io/qdebug.h ../corelib/io/qdir.h ../corelib/io/qdiriterator.h ../corelib/io/qfile.h ../corelib/io/qfileinfo.h ../corelib/io/qfilesystemwatcher.h ../corelib/io/qfsfileengine.h ../corelib/io/qiodevice.h ../corelib/io/qprocess.h ../corelib/io/qresource.h ../corelib/io/qsettings.h ../corelib/io/qtemporaryfile.h ../corelib/io/qtextstream.h ../corelib/io/qurl.h ../corelib/animation/qabstractanimation.h ../corelib/animation/qanimationgroup.h ../corelib/animation/qparallelanimationgroup.h ../corelib/animation/qpauseanimation.h ../corelib/animation/qpropertyanimation.h ../corelib/animation/qsequentialanimationgroup.h ../corelib/animation/qvariantanimation.h ../corelib/tools/qalgorithms.h ../corelib/tools/qbitarray.h ../corelib/tools/qbytearray.h ../corelib/tools/qbytearraymatcher.h ../corelib/tools/qcache.h ../corelib/tools/qchar.h ../corelib/tools/qcontainerfwd.h ../corelib/tools/qcontiguouscache.h ../corelib/tools/qcryptographichash.h ../corelib/tools/qdatetime.h ../corelib/tools/qeasingcurve.h ../corelib/tools/qelapsedtimer.h ../corelib/tools/qhash.h ../corelib/tools/qiterator.h ../corelib/tools/qline.h ../corelib/tools/qlinkedlist.h ../corelib/tools/qlist.h ../corelib/tools/qlocale.h ../corelib/tools/qlocale_blackberry.h ../corelib/tools/qmap.h ../corelib/tools/qmargins.h ../corelib/tools/qpair.h ../corelib/tools/qpoint.h ../corelib/tools/qqueue.h ../corelib/tools/qrect.h ../corelib/tools/qregexp.h ../corelib/tools/qscopedpointer.h ../corelib/tools/qscopedvaluerollback.h ../corelib/tools/qset.h ../corelib/tools/qshareddata.h ../corelib/tools/qsharedpointer.h ../corelib/tools/qsharedpointer_impl.h ../corelib/tools/qsize.h ../corelib/tools/qstack.h ../corelib/tools/qstring.h ../corelib/tools/qstringbuilder.h ../corelib/tools/qstringlist.h ../corelib/tools/qstringmatcher.h ../corelib/tools/qtextboundaryfinder.h ../corelib/tools/qtimeline.h ../corelib/tools/qvarlengtharray.h ../corelib/tools/qvector.h ../../include/QtCore/QtCore + SYNCQT.HEADER_CLASSES = ../../include/QtCore/QAbstractState ../../include/QtCore/QAbstractTransition ../../include/QtCore/QEventTransition ../../include/QtCore/QFinalState ../../include/QtCore/QHistoryState ../../include/QtCore/QSignalTransition ../../include/QtCore/QState ../../include/QtCore/QStateMachine ../../include/QtCore/QAtomicInt ../../include/QtCore/QAtomicPointer ../../include/QtCore/QBasicAtomicInt ../../include/QtCore/QBasicAtomicPointer ../../include/QtCore/QMutex ../../include/QtCore/QMutexLocker ../../include/QtCore/QMutexData ../../include/QtCore/QReadWriteLock ../../include/QtCore/QReadLocker ../../include/QtCore/QWriteLocker ../../include/QtCore/QSemaphore ../../include/QtCore/QThread ../../include/QtCore/QThreadStorageData ../../include/QtCore/QThreadStorage ../../include/QtCore/QWaitCondition ../../include/QtCore/QXmlStreamStringRef ../../include/QtCore/QXmlStreamAttribute ../../include/QtCore/QXmlStreamAttributes ../../include/QtCore/QXmlStreamNamespaceDeclaration ../../include/QtCore/QXmlStreamNamespaceDeclarations ../../include/QtCore/QXmlStreamNotationDeclaration ../../include/QtCore/QXmlStreamNotationDeclarations ../../include/QtCore/QXmlStreamEntityDeclaration ../../include/QtCore/QXmlStreamEntityDeclarations ../../include/QtCore/QXmlStreamEntityResolver ../../include/QtCore/QXmlStreamReader ../../include/QtCore/QXmlStreamWriter ../../include/QtCore/QFuture ../../include/QtCore/QFutureIterator ../../include/QtCore/QMutableFutureIterator ../../include/QtCore/QFutureInterfaceBase ../../include/QtCore/QFutureInterface ../../include/QtCore/QFutureSynchronizer ../../include/QtCore/QFutureWatcherBase ../../include/QtCore/QFutureWatcher ../../include/QtCore/QRunnable ../../include/QtCore/QtConcurrentFilter ../../include/QtCore/QtConcurrentMap ../../include/QtCore/QtConcurrentRun ../../include/QtCore/QThreadPool ../../include/QtCore/QAbstractEventDispatcher ../../include/QtCore/QModelIndex ../../include/QtCore/QPersistentModelIndex ../../include/QtCore/QModelIndexList ../../include/QtCore/QAbstractItemModel ../../include/QtCore/QAbstractTableModel ../../include/QtCore/QAbstractListModel ../../include/QtCore/QBasicTimer ../../include/QtCore/QCoreApplication ../../include/QtCore/QtCleanUpFunction ../../include/QtCore/QEvent ../../include/QtCore/QTimerEvent ../../include/QtCore/QChildEvent ../../include/QtCore/QCustomEvent ../../include/QtCore/QDynamicPropertyChangeEvent ../../include/QtCore/QEventLoop ../../include/QtCore/QMetaMethod ../../include/QtCore/QMetaEnum ../../include/QtCore/QMetaProperty ../../include/QtCore/QMetaClassInfo ../../include/QtCore/QMetaType ../../include/QtCore/QMetaTypeId ../../include/QtCore/QMetaTypeId2 ../../include/QtCore/QMimeData ../../include/QtCore/QObjectList ../../include/QtCore/QObjectData ../../include/QtCore/QObject ../../include/QtCore/QObjectUserData ../../include/QtCore/QObjectCleanupHandler ../../include/QtCore/QGenericArgument ../../include/QtCore/QGenericReturnArgument ../../include/QtCore/QArgument ../../include/QtCore/QReturnArgument ../../include/QtCore/QMetaObject ../../include/QtCore/QMetaObjectAccessor ../../include/QtCore/QMetaObjectExtraData ../../include/QtCore/QPointer ../../include/QtCore/QSharedMemory ../../include/QtCore/QSignalMapper ../../include/QtCore/QSocketNotifier ../../include/QtCore/QSystemSemaphore ../../include/QtCore/QTimer ../../include/QtCore/QTranslator ../../include/QtCore/QVariant ../../include/QtCore/QVariantList ../../include/QtCore/QVariantMap ../../include/QtCore/QVariantHash ../../include/QtCore/QVariantComparisonHelper ../../include/QtCore/QFactoryInterface ../../include/QtCore/QLibrary ../../include/QtCore/QtPlugin ../../include/QtCore/QtPluginInstanceFunction ../../include/QtCore/QPluginLoader ../../include/QtCore/QUuid ../../include/QtCore/QtEndian ../../include/QtCore/QtGlobal ../../include/QtCore/QIntegerForSize ../../include/QtCore/QNoImplicitBoolCast ../../include/QtCore/Q_INT8 ../../include/QtCore/Q_UINT8 ../../include/QtCore/Q_INT16 ../../include/QtCore/Q_UINT16 ../../include/QtCore/Q_INT32 ../../include/QtCore/Q_UINT32 ../../include/QtCore/Q_INT64 ../../include/QtCore/Q_UINT64 ../../include/QtCore/Q_LLONG ../../include/QtCore/Q_ULLONG ../../include/QtCore/Q_LONG ../../include/QtCore/Q_ULONG ../../include/QtCore/QSysInfo ../../include/QtCore/QtMsgHandler ../../include/QtCore/QGlobalStatic ../../include/QtCore/QGlobalStaticDeleter ../../include/QtCore/QBool ../../include/QtCore/QTypeInfo ../../include/QtCore/QFlag ../../include/QtCore/QIncompatibleFlag ../../include/QtCore/QFlags ../../include/QtCore/QForeachContainer ../../include/QtCore/QForeachContainerBase ../../include/QtCore/QLibraryInfo ../../include/QtCore/Qt ../../include/QtCore/QInternal ../../include/QtCore/QCOORD ../../include/QtCore/QtConfig ../../include/QtCore/QTextCodec ../../include/QtCore/QTextEncoder ../../include/QtCore/QTextDecoder ../../include/QtCore/QTextCodecFactoryInterface ../../include/QtCore/QTextCodecPlugin ../../include/QtCore/QAbstractFileEngine ../../include/QtCore/QAbstractFileEngineHandler ../../include/QtCore/QAbstractFileEngineIterator ../../include/QtCore/QBuffer ../../include/QtCore/QDataStream ../../include/QtCore/QtDebug ../../include/QtCore/QDebug ../../include/QtCore/QNoDebug ../../include/QtCore/QDir ../../include/QtCore/QDirIterator ../../include/QtCore/QFile ../../include/QtCore/QFileInfo ../../include/QtCore/QFileInfoList ../../include/QtCore/QFileInfoListIterator ../../include/QtCore/QFileSystemWatcher ../../include/QtCore/QFSFileEngine ../../include/QtCore/QIODevice ../../include/QtCore/Q_PID ../../include/QtCore/QProcessEnvironment ../../include/QtCore/QProcess ../../include/QtCore/QResource ../../include/QtCore/QSettings ../../include/QtCore/QTemporaryFile ../../include/QtCore/QTextStream ../../include/QtCore/QTextStreamFunction ../../include/QtCore/QTextStreamManipulator ../../include/QtCore/QTS ../../include/QtCore/QTextIStream ../../include/QtCore/QTextOStream ../../include/QtCore/QUrl ../../include/QtCore/QAbstractAnimation ../../include/QtCore/QAnimationDriver ../../include/QtCore/QAnimationGroup ../../include/QtCore/QParallelAnimationGroup ../../include/QtCore/QPauseAnimation ../../include/QtCore/QPropertyAnimation ../../include/QtCore/QSequentialAnimationGroup ../../include/QtCore/QVariantAnimation ../../include/QtCore/QtAlgorithms ../../include/QtCore/QBitArray ../../include/QtCore/QBitRef ../../include/QtCore/QByteArray ../../include/QtCore/QByteRef ../../include/QtCore/QByteArrayMatcher ../../include/QtCore/QCache ../../include/QtCore/QLatin1Char ../../include/QtCore/QChar ../../include/QtCore/QtContainerFwd ../../include/QtCore/QContiguousCacheData ../../include/QtCore/QContiguousCacheTypedData ../../include/QtCore/QContiguousCache ../../include/QtCore/QCryptographicHash ../../include/QtCore/QDate ../../include/QtCore/QTime ../../include/QtCore/QDateTime ../../include/QtCore/QEasingCurve ../../include/QtCore/QElapsedTimer ../../include/QtCore/QHashData ../../include/QtCore/QHashDummyValue ../../include/QtCore/QHashDummyNode ../../include/QtCore/QHashNode ../../include/QtCore/QHash ../../include/QtCore/QMultiHash ../../include/QtCore/QHashIterator ../../include/QtCore/QMutableHashIterator ../../include/QtCore/QLine ../../include/QtCore/QLineF ../../include/QtCore/QLinkedListData ../../include/QtCore/QLinkedListNode ../../include/QtCore/QLinkedList ../../include/QtCore/QLinkedListIterator ../../include/QtCore/QMutableLinkedListIterator ../../include/QtCore/QListData ../../include/QtCore/QList ../../include/QtCore/QListIterator ../../include/QtCore/QMutableListIterator ../../include/QtCore/QSystemLocale ../../include/QtCore/QLocale ../../include/QtCore/QBBSystemLocaleData ../../include/QtCore/QMapData ../../include/QtCore/QMapNode ../../include/QtCore/QMapPayloadNode ../../include/QtCore/QMap ../../include/QtCore/QMultiMap ../../include/QtCore/QMapIterator ../../include/QtCore/QMutableMapIterator ../../include/QtCore/QMargins ../../include/QtCore/QPair ../../include/QtCore/QPoint ../../include/QtCore/QPointF ../../include/QtCore/QQueue ../../include/QtCore/QRect ../../include/QtCore/QRectF ../../include/QtCore/QRegExp ../../include/QtCore/QScopedPointerDeleter ../../include/QtCore/QScopedPointerArrayDeleter ../../include/QtCore/QScopedPointerPodDeleter ../../include/QtCore/QScopedPointer ../../include/QtCore/QScopedArrayPointer ../../include/QtCore/QScopedValueRollback ../../include/QtCore/QSet ../../include/QtCore/QSetIterator ../../include/QtCore/QMutableSetIterator ../../include/QtCore/QSharedData ../../include/QtCore/QSharedDataPointer ../../include/QtCore/QExplicitlySharedDataPointer ../../include/QtCore/QSharedPointer ../../include/QtCore/QWeakPointer ../../include/QtCore/QSize ../../include/QtCore/QSizeF ../../include/QtCore/QStack ../../include/QtCore/QStdWString ../../include/QtCore/QString ../../include/QtCore/QLatin1String ../../include/QtCore/QCharRef ../../include/QtCore/QConstString ../../include/QtCore/QStringRef ../../include/QtCore/QLatin1Literal ../../include/QtCore/QAbstractConcatenable ../../include/QtCore/QConcatenable ../../include/QtCore/QStringBuilder ../../include/QtCore/QStringListIterator ../../include/QtCore/QMutableStringListIterator ../../include/QtCore/QStringList ../../include/QtCore/QStringMatcher ../../include/QtCore/QTextBoundaryFinder ../../include/QtCore/QTimeLine ../../include/QtCore/QVarLengthArray ../../include/QtCore/QVectorData ../../include/QtCore/QVectorTypedData ../../include/QtCore/QVector ../../include/QtCore/QVectorIterator ../../include/QtCore/QMutableVectorIterator + SYNCQT.PRIVATE_HEADER_FILES = ../corelib/statemachine/qabstractstate_p.h ../corelib/statemachine/qabstracttransition_p.h ../corelib/statemachine/qeventtransition_p.h ../corelib/statemachine/qhistorystate_p.h ../corelib/statemachine/qsignaleventgenerator_p.h ../corelib/statemachine/qsignaltransition_p.h ../corelib/statemachine/qstate_p.h ../corelib/statemachine/qstatemachine_p.h ../corelib/thread/qmutex_p.h ../corelib/thread/qmutexpool_p.h ../corelib/thread/qorderedmutexlocker_p.h ../corelib/thread/qreadwritelock_p.h ../corelib/thread/qthread_p.h ../corelib/xml/qxmlstream_p.h ../corelib/xml/qxmlutils_p.h ../corelib/concurrent/qfutureinterface_p.h ../corelib/concurrent/qfuturewatcher_p.h ../corelib/concurrent/qthreadpool_p.h ../corelib/kernel/qabstracteventdispatcher_p.h ../corelib/kernel/qabstractitemmodel_p.h ../corelib/kernel/qcore_mac_p.h ../corelib/kernel/qcore_symbian_p.h ../corelib/kernel/qcore_unix_p.h ../corelib/kernel/qcoreapplication_p.h ../corelib/kernel/qcorecmdlineargs_p.h ../corelib/kernel/qcoreglobaldata_p.h ../corelib/kernel/qcrashhandler_p.h ../corelib/kernel/qeventdispatcher_blackberry_p.h ../corelib/kernel/qeventdispatcher_glib_p.h ../corelib/kernel/qeventdispatcher_symbian_p.h ../corelib/kernel/qeventdispatcher_unix_p.h ../corelib/kernel/qeventdispatcher_win_p.h ../corelib/kernel/qfunctions_p.h ../corelib/kernel/qmetaobject_p.h ../corelib/kernel/qobject_p.h ../corelib/kernel/qsharedmemory_p.h ../corelib/kernel/qsystemerror_p.h ../corelib/kernel/qsystemsemaphore_p.h ../corelib/kernel/qtranslator_p.h ../corelib/kernel/qvariant_p.h ../corelib/kernel/qwineventnotifier_p.h ../corelib/plugin/qelfparser_p.h ../corelib/plugin/qfactoryloader_p.h ../corelib/plugin/qlibrary_p.h ../corelib/plugin/qsystemlibrary_p.h ../corelib/global/qnumeric_p.h ../corelib/global/qt_pch.h ../corelib/codecs/qfontlaocodec_p.h ../corelib/codecs/qiconvcodec_p.h ../corelib/codecs/qisciicodec_p.h ../corelib/codecs/qlatincodec_p.h ../corelib/codecs/qsimplecodec_p.h ../corelib/codecs/qtextcodec_p.h ../corelib/codecs/qtsciicodec_p.h ../corelib/codecs/qutfcodec_p.h ../corelib/io/qabstractfileengine_p.h ../corelib/io/qdatastream_p.h ../corelib/io/qdataurl_p.h ../corelib/io/qdir_p.h ../corelib/io/qfile_p.h ../corelib/io/qfileinfo_p.h ../corelib/io/qfilesystemengine_p.h ../corelib/io/qfilesystementry_p.h ../corelib/io/qfilesystemiterator_p.h ../corelib/io/qfilesystemmetadata_p.h ../corelib/io/qfilesystemwatcher_dnotify_p.h ../corelib/io/qfilesystemwatcher_fsevents_p.h ../corelib/io/qfilesystemwatcher_inotify_p.h ../corelib/io/qfilesystemwatcher_kqueue_p.h ../corelib/io/qfilesystemwatcher_p.h ../corelib/io/qfilesystemwatcher_symbian_p.h ../corelib/io/qfilesystemwatcher_win_p.h ../corelib/io/qfsfileengine_iterator_p.h ../corelib/io/qfsfileengine_p.h ../corelib/io/qiodevice_p.h ../corelib/io/qnoncontiguousbytedevice_p.h ../corelib/io/qprocess_p.h ../corelib/io/qresource_iterator_p.h ../corelib/io/qresource_p.h ../corelib/io/qsettings_p.h ../corelib/io/qtldurl_p.h ../corelib/io/qurltlds_p.h ../corelib/io/qwindowspipewriter_p.h ../corelib/animation/qabstractanimation_p.h ../corelib/animation/qanimationgroup_p.h ../corelib/animation/qparallelanimationgroup_p.h ../corelib/animation/qpropertyanimation_p.h ../corelib/animation/qsequentialanimationgroup_p.h ../corelib/animation/qvariantanimation_p.h ../corelib/tools/qbytedata_p.h ../corelib/tools/qdatetime_p.h ../corelib/tools/qharfbuzz_p.h ../corelib/tools/qlocale_data_p.h ../corelib/tools/qlocale_p.h ../corelib/tools/qlocale_tools_p.h ../corelib/tools/qpodlist_p.h ../corelib/tools/qringbuffer_p.h ../corelib/tools/qscopedpointer_p.h ../corelib/tools/qsimd_p.h ../corelib/tools/qtools_p.h ../corelib/tools/qunicodetables_p.h +diff -up qt-everywhere-opensource-src-4.8.6/include/QtCore/qatomic_aarch64.h.aarch64 qt-everywhere-opensource-src-4.8.6/include/QtCore/qatomic_aarch64.h +--- qt-everywhere-opensource-src-4.8.6/include/QtCore/qatomic_aarch64.h.aarch64 2014-04-02 09:25:21.348386845 -0500 ++++ qt-everywhere-opensource-src-4.8.6/include/QtCore/qatomic_aarch64.h 2014-04-02 09:25:21.348386845 -0500 @@ -0,0 +1 @@ +#include "../../src/corelib/arch/qatomic_aarch64.h" -Index: b/mkspecs/linux-g++-aarch64/qmake.conf -=================================================================== ---- /dev/null -+++ b/mkspecs/linux-g++-aarch64/qmake.conf -@@ -0,0 +1,28 @@ -+# -+# qmake configuration for linux-g++ -+# -+# Written for GNU/Linux platforms that have both lib and lib64 directories, -+# like the AMD Opteron. -+# -+ -+MAKEFILE_GENERATOR = UNIX -+TARGET_PLATFORM = unix -+TEMPLATE = app -+CONFIG += qt warn_on release incremental link_prl gdb_dwarf_index -+QT += core gui -+QMAKE_INCREMENTAL_STYLE = sublib -+ -+QMAKE_CFLAGS = -fpermissive -+QMAKE_LFLAGS = -+ -+QMAKE_CFLAGS_RELEASE += -O2 -+ -+include(../common/linux.conf) -+include(../common/gcc-base-unix.conf) -+include(../common/g++-unix.conf) -+ -+ -+QMAKE_LIBDIR_X11 = /usr/X11R6/lib64 -+QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib64 -+ -+load(qt_config) -Index: b/mkspecs/linux-g++-aarch64/qplatformdefs.h -=================================================================== ---- /dev/null -+++ b/mkspecs/linux-g++-aarch64/qplatformdefs.h -@@ -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" -=================================================================== -Index: b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h -=================================================================== ---- a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h -+++ b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h -@@ -238,6 +238,11 @@ - - #endif +diff -up qt-everywhere-opensource-src-4.8.6/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri.aarch64 qt-everywhere-opensource-src-4.8.6/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri +--- qt-everywhere-opensource-src-4.8.6/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri.aarch64 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri 2014-04-02 09:31:08.593674300 -0500 +@@ -66,6 +66,12 @@ contains(JAVASCRIPTCORE_JIT,no) { + } + } -+/* CPU(AARCH64) - AArch64 */ -+#if defined(__aarch64__) -+#define WTF_CPU_AARCH64 1 -+#endif ++# Hack around AARCH64 fail wrt JSValue.h ++equals(QT_ARCH, aarch64) { ++ message("JavaScriptCore aarch64 hack: -fpermissive") ++ QMAKE_CXXFLAGS += -fpermissive ++} + - #define WTF_ARM_ARCH_AT_LEAST(N) (CPU(ARM) && WTF_ARM_ARCH_VERSION >= N) - - /* Set WTF_ARM_ARCH_VERSION */ -@@ -885,7 +890,7 @@ - #endif - - #if !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64) --#if (CPU(X86_64) && (OS(UNIX) || OS(WINDOWS) || OS(SOLARIS) || OS(HPUX))) || (CPU(IA64) && !CPU(IA64_32)) || CPU(ALPHA) || CPU(AIX64) || CPU(SPARC64) || CPU(S390X) -+#if (CPU(X86_64) && (OS(UNIX) || OS(WINDOWS) || OS(SOLARIS) || OS(HPUX))) || (CPU(IA64) && !CPU(IA64_32)) || CPU(ALPHA) || CPU(AIX64) || CPU(SPARC64) || CPU(S390X) || CPU(AARCH64) - #define WTF_USE_JSVALUE64 1 - #elif CPU(ARM) || CPU(PPC64) - #define WTF_USE_JSVALUE32 1 -Index: b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h -=================================================================== ---- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h -+++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h -@@ -365,10 +365,15 @@ - - #endif /* ARM */ - --#if CPU(ARM) || CPU(MIPS) || CPU(SH4) -+#if CPU(ARM) || CPU(MIPS) || CPU(SH4) || CPU(AARCH64) - #define WTF_CPU_NEEDS_ALIGNED_ACCESS 1 - #endif + wince* { + INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty/ce-compat + SOURCES += $$QT_SOURCE_TREE/src/3rdparty/ce-compat/ce_time.c +diff -up qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri.aarch64 qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri +--- qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri.aarch64 2014-03-30 15:36:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri 2014-04-02 09:30:51.136861108 -0500 +@@ -63,6 +63,12 @@ contains (CONFIG, text_breaking_with_icu + DEFINES += WTF_USE_QT_ICU_TEXT_BREAKING=1 + } -+/* CPU(AARCH64) - Aarch64 */ -+#if defined(__aarch64__) -+#define WTF_CPU_AARCH64 1 -+#endif ++# Hack around AARCH64 fail wrt JSValue.h ++equals(QT_ARCH, aarch64) { ++ message("JavaScriptCore aarch64 hack: -fpermissive") ++ QMAKE_CXXFLAGS += -fpermissive ++} + - /* ==== OS() - underlying operating system; only to be used for mandated low-level services like - virtual memory, not to choose a GUI toolkit ==== */ - -@@ -998,7 +1003,8 @@ - || CPU(ALPHA) \ - || CPU(SPARC64) \ - || CPU(S390X) \ -- || CPU(PPC64) -+ || CPU(PPC64) \ -+ || CPU(AARCH64) - #define WTF_USE_JSVALUE64 1 - #else - #define WTF_USE_JSVALUE32_64 1 -diff --git a/include/QtCore/headers.pri b/include/QtCore/headers.pri -index bc9a645..c97e17e 100644 ---- a/include/QtCore/headers.pri -+++ b/include/QtCore/headers.pri -@@ -1,3 +1,3 @@ --SYNCQT.HEADER_FILES = ../corelib/statemachine/qabstractstate.h ../corelib/statemachine/qabstracttransition.h ../corelib/statemachine/qeventtransition.h ../corelib/statemachine/qfinalstate.h ../corelib/statemachine/qhistorystate.h ../corelib/statemachine/qsignaltransition.h ../corelib/statemachine/qstate.h ../corelib/statemachine/qstatemachine.h ../corelib/arch/qatomic_alpha.h ../corelib/arch/qatomic_arch.h ../corelib/arch/qatomic_arm.h ../corelib/arch/qatomic_armv5.h ../corelib/arch/qatomic_armv6.h ../corelib/arch/qatomic_armv7.h ../corelib/arch/qatomic_avr32.h ../corelib/arch/qatomic_bfin.h ../corelib/arch/qatomic_bootstrap.h ../corelib/arch/qatomic_generic.h ../corelib/arch/qatomic_i386.h ../corelib/arch/qatomic_ia64.h ../corelib/arch/qatomic_integrity.h ../corelib/arch/qatomic_macosx.h ../corelib/arch/qatomic_mips.h ../corelib/arch/qatomic_parisc.h ../corelib/arch/qatomic_powerpc.h ../corelib/arch/qatomic_s390.h ../corelib/arch/qatomic_sh.h ../corelib/arch/qatomic_sh4a.h ../corelib/arch/qatomic_sparc.h ../corelib/arch/qatomic_symbian.h ../corelib/arch/qatomic_vxworks.h ../corelib/arch/qatomic_windows.h ../corelib/arch/qatomic_windowsce.h ../corelib/arch/qatomic_x86_64.h ../corelib/thread/qatomic.h ../corelib/thread/qbasicatomic.h ../corelib/thread/qmutex.h ../corelib/thread/qreadwritelock.h ../corelib/thread/qsemaphore.h ../corelib/thread/qthread.h ../corelib/thread/qthreadstorage.h ../corelib/thread/qwaitcondition.h ../corelib/xml/qxmlstream.h ../corelib/concurrent/qfuture.h ../corelib/concurrent/qfutureinterface.h ../corelib/concurrent/qfuturesynchronizer.h ../corelib/concurrent/qfuturewatcher.h ../corelib/concurrent/qrunnable.h ../corelib/concurrent/qtconcurrentcompilertest.h ../corelib/concurrent/qtconcurrentexception.h ../corelib/concurrent/qtconcurrentfilter.h ../corelib/concurrent/qtconcurrentfilterkernel.h ../corelib/concurrent/qtconcurrentfunctionwrappers.h ../corelib/concurrent/qtconcurrentiteratekernel.h ../corelib/concurrent/qtconcurrentmap.h ../corelib/concurrent/qtconcurrentmapkernel.h ../corelib/concurrent/qtconcurrentmedian.h ../corelib/concurrent/qtconcurrentreducekernel.h ../corelib/concurrent/qtconcurrentresultstore.h ../corelib/concurrent/qtconcurrentrun.h ../corelib/concurrent/qtconcurrentrunbase.h ../corelib/concurrent/qtconcurrentstoredfunctioncall.h ../corelib/concurrent/qtconcurrentthreadengine.h ../corelib/concurrent/qthreadpool.h ../corelib/kernel/qabstracteventdispatcher.h ../corelib/kernel/qabstractitemmodel.h ../corelib/kernel/qbasictimer.h ../corelib/kernel/qcoreapplication.h ../corelib/kernel/qcoreevent.h ../corelib/kernel/qeventloop.h ../corelib/kernel/qfunctions_nacl.h ../corelib/kernel/qfunctions_vxworks.h ../corelib/kernel/qfunctions_wince.h ../corelib/kernel/qmath.h ../corelib/kernel/qmetaobject.h ../corelib/kernel/qmetatype.h ../corelib/kernel/qmimedata.h ../corelib/kernel/qobject.h ../corelib/kernel/qobjectcleanuphandler.h ../corelib/kernel/qobjectdefs.h ../corelib/kernel/qpointer.h ../corelib/kernel/qsharedmemory.h ../corelib/kernel/qsignalmapper.h ../corelib/kernel/qsocketnotifier.h ../corelib/kernel/qsystemsemaphore.h ../corelib/kernel/qtimer.h ../corelib/kernel/qtranslator.h ../corelib/kernel/qvariant.h ../corelib/plugin/qfactoryinterface.h ../corelib/plugin/qlibrary.h ../corelib/plugin/qplugin.h ../corelib/plugin/qpluginloader.h ../corelib/plugin/quuid.h ../corelib/global/qconfig-dist.h ../corelib/global/qconfig-large.h ../corelib/global/qconfig-medium.h ../corelib/global/qconfig-minimal.h ../corelib/global/qconfig-nacl.h ../corelib/global/qconfig-small.h ../corelib/global/qendian.h ../corelib/global/qfeatures.h ../corelib/global/qglobal.h ../corelib/global/qlibraryinfo.h ../corelib/global/qnamespace.h ../corelib/global/qnumeric.h ../corelib/global/qt_windows.h ../corelib/global/qconfig.h ../corelib/codecs/qtextcodec.h ../corelib/codecs/qtextcodecplugin.h ../corelib/io/qabstractfileengine.h ../corelib/io/qbuffer.h ../corelib/io/qdatastream.h ../corelib/io/qdebug.h ../corelib/io/qdir.h ../corelib/io/qdiriterator.h ../corelib/io/qfile.h ../corelib/io/qfileinfo.h ../corelib/io/qfilesystemwatcher.h ../corelib/io/qfsfileengine.h ../corelib/io/qiodevice.h ../corelib/io/qprocess.h ../corelib/io/qresource.h ../corelib/io/qsettings.h ../corelib/io/qtemporaryfile.h ../corelib/io/qtextstream.h ../corelib/io/qurl.h ../corelib/animation/qabstractanimation.h ../corelib/animation/qanimationgroup.h ../corelib/animation/qparallelanimationgroup.h ../corelib/animation/qpauseanimation.h ../corelib/animation/qpropertyanimation.h ../corelib/animation/qsequentialanimationgroup.h ../corelib/animation/qvariantanimation.h ../corelib/tools/qalgorithms.h ../corelib/tools/qbitarray.h ../corelib/tools/qbytearray.h ../corelib/tools/qbytearraymatcher.h ../corelib/tools/qcache.h ../corelib/tools/qchar.h ../corelib/tools/qcontainerfwd.h ../corelib/tools/qcontiguouscache.h ../corelib/tools/qcryptographichash.h ../corelib/tools/qdatetime.h ../corelib/tools/qeasingcurve.h ../corelib/tools/qelapsedtimer.h ../corelib/tools/qhash.h ../corelib/tools/qiterator.h ../corelib/tools/qline.h ../corelib/tools/qlinkedlist.h ../corelib/tools/qlist.h ../corelib/tools/qlocale.h ../corelib/tools/qlocale_blackberry.h ../corelib/tools/qmap.h ../corelib/tools/qmargins.h ../corelib/tools/qpair.h ../corelib/tools/qpoint.h ../corelib/tools/qqueue.h ../corelib/tools/qrect.h ../corelib/tools/qregexp.h ../corelib/tools/qscopedpointer.h ../corelib/tools/qscopedvaluerollback.h ../corelib/tools/qset.h ../corelib/tools/qshareddata.h ../corelib/tools/qsharedpointer.h ../corelib/tools/qsharedpointer_impl.h ../corelib/tools/qsize.h ../corelib/tools/qstack.h ../corelib/tools/qstring.h ../corelib/tools/qstringbuilder.h ../corelib/tools/qstringlist.h ../corelib/tools/qstringmatcher.h ../corelib/tools/qtextboundaryfinder.h ../corelib/tools/qtimeline.h ../corelib/tools/qvarlengtharray.h ../corelib/tools/qvector.h ../../include/QtCore/QtCore -+SYNCQT.HEADER_FILES = ../corelib/statemachine/qabstractstate.h ../corelib/statemachine/qabstracttransition.h ../corelib/statemachine/qeventtransition.h ../corelib/statemachine/qfinalstate.h ../corelib/statemachine/qhistorystate.h ../corelib/statemachine/qsignaltransition.h ../corelib/statemachine/qstate.h ../corelib/statemachine/qstatemachine.h ../corelib/arch/qatomic_aarch64.h ../corelib/arch/qatomic_alpha.h ../corelib/arch/qatomic_arch.h ../corelib/arch/qatomic_arm.h ../corelib/arch/qatomic_armv5.h ../corelib/arch/qatomic_armv6.h ../corelib/arch/qatomic_armv7.h ../corelib/arch/qatomic_avr32.h ../corelib/arch/qatomic_bfin.h ../corelib/arch/qatomic_bootstrap.h ../corelib/arch/qatomic_generic.h ../corelib/arch/qatomic_i386.h ../corelib/arch/qatomic_ia64.h ../corelib/arch/qatomic_integrity.h ../corelib/arch/qatomic_macosx.h ../corelib/arch/qatomic_mips.h ../corelib/arch/qatomic_parisc.h ../corelib/arch/qatomic_powerpc.h ../corelib/arch/qatomic_s390.h ../corelib/arch/qatomic_sh.h ../corelib/arch/qatomic_sh4a.h ../corelib/arch/qatomic_sparc.h ../corelib/arch/qatomic_symbian.h ../corelib/arch/qatomic_vxworks.h ../corelib/arch/qatomic_windows.h ../corelib/arch/qatomic_windowsce.h ../corelib/arch/qatomic_x86_64.h ../corelib/thread/qatomic.h ../corelib/thread/qbasicatomic.h ../corelib/thread/qmutex.h ../corelib/thread/qreadwritelock.h ../corelib/thread/qsemaphore.h ../corelib/thread/qthread.h ../corelib/thread/qthreadstorage.h ../corelib/thread/qwaitcondition.h ../corelib/xml/qxmlstream.h ../corelib/concurrent/qfuture.h ../corelib/concurrent/qfutureinterface.h ../corelib/concurrent/qfuturesynchronizer.h ../corelib/concurrent/qfuturewatcher.h ../corelib/concurrent/qrunnable.h ../corelib/concurrent/qtconcurrentcompilertest.h ../corelib/concurrent/qtconcurrentexception.h ../corelib/concurrent/qtconcurrentfilter.h ../corelib/concurrent/qtconcurrentfilterkernel.h ../corelib/concurrent/qtconcurrentfunctionwrappers.h ../corelib/concurrent/qtconcurrentiteratekernel.h ../corelib/concurrent/qtconcurrentmap.h ../corelib/concurrent/qtconcurrentmapkernel.h ../corelib/concurrent/qtconcurrentmedian.h ../corelib/concurrent/qtconcurrentreducekernel.h ../corelib/concurrent/qtconcurrentresultstore.h ../corelib/concurrent/qtconcurrentrun.h ../corelib/concurrent/qtconcurrentrunbase.h ../corelib/concurrent/qtconcurrentstoredfunctioncall.h ../corelib/concurrent/qtconcurrentthreadengine.h ../corelib/concurrent/qthreadpool.h ../corelib/kernel/qabstracteventdispatcher.h ../corelib/kernel/qabstractitemmodel.h ../corelib/kernel/qbasictimer.h ../corelib/kernel/qcoreapplication.h ../corelib/kernel/qcoreevent.h ../corelib/kernel/qeventloop.h ../corelib/kernel/qfunctions_nacl.h ../corelib/kernel/qfunctions_vxworks.h ../corelib/kernel/qfunctions_wince.h ../corelib/kernel/qmath.h ../corelib/kernel/qmetaobject.h ../corelib/kernel/qmetatype.h ../corelib/kernel/qmimedata.h ../corelib/kernel/qobject.h ../corelib/kernel/qobjectcleanuphandler.h ../corelib/kernel/qobjectdefs.h ../corelib/kernel/qpointer.h ../corelib/kernel/qsharedmemory.h ../corelib/kernel/qsignalmapper.h ../corelib/kernel/qsocketnotifier.h ../corelib/kernel/qsystemsemaphore.h ../corelib/kernel/qtimer.h ../corelib/kernel/qtranslator.h ../corelib/kernel/qvariant.h ../corelib/plugin/qfactoryinterface.h ../corelib/plugin/qlibrary.h ../corelib/plugin/qplugin.h ../corelib/plugin/qpluginloader.h ../corelib/plugin/quuid.h ../corelib/global/qconfig-dist.h ../corelib/global/qconfig-large.h ../corelib/global/qconfig-medium.h ../corelib/global/qconfig-minimal.h ../corelib/global/qconfig-nacl.h ../corelib/global/qconfig-small.h ../corelib/global/qendian.h ../corelib/global/qfeatures.h ../corelib/global/qglobal.h ../corelib/global/qlibraryinfo.h ../corelib/global/qnamespace.h ../corelib/global/qnumeric.h ../corelib/global/qt_windows.h ../corelib/global/qconfig.h ../corelib/codecs/qtextcodec.h ../corelib/codecs/qtextcodecplugin.h ../corelib/io/qabstractfileengine.h ../corelib/io/qbuffer.h ../corelib/io/qdatastream.h ../corelib/io/qdebug.h ../corelib/io/qdir.h ../corelib/io/qdiriterator.h ../corelib/io/qfile.h ../corelib/io/qfileinfo.h ../corelib/io/qfilesystemwatcher.h ../corelib/io/qfsfileengine.h ../corelib/io/qiodevice.h ../corelib/io/qprocess.h ../corelib/io/qresource.h ../corelib/io/qsettings.h ../corelib/io/qtemporaryfile.h ../corelib/io/qtextstream.h ../corelib/io/qurl.h ../corelib/animation/qabstractanimation.h ../corelib/animation/qanimationgroup.h ../corelib/animation/qparallelanimationgroup.h ../corelib/animation/qpauseanimation.h ../corelib/animation/qpropertyanimation.h ../corelib/animation/qsequentialanimationgroup.h ../corelib/animation/qvariantanimation.h ../corelib/tools/qalgorithms.h ../corelib/tools/qbitarray.h ../corelib/tools/qbytearray.h ../corelib/tools/qbytearraymatcher.h ../corelib/tools/qcache.h ../corelib/tools/qchar.h ../corelib/tools/qcontainerfwd.h ../corelib/tools/qcontiguouscache.h ../corelib/tools/qcryptographichash.h ../corelib/tools/qdatetime.h ../corelib/tools/qeasingcurve.h ../corelib/tools/qelapsedtimer.h ../corelib/tools/qhash.h ../corelib/tools/qiterator.h ../corelib/tools/qline.h ../corelib/tools/qlinkedlist.h ../corelib/tools/qlist.h ../corelib/tools/qlocale.h ../corelib/tools/qlocale_blackberry.h ../corelib/tools/qmap.h ../corelib/tools/qmargins.h ../corelib/tools/qpair.h ../corelib/tools/qpoint.h ../corelib/tools/qqueue.h ../corelib/tools/qrect.h ../corelib/tools/qregexp.h ../corelib/tools/qscopedpointer.h ../corelib/tools/qscopedvaluerollback.h ../corelib/tools/qset.h ../corelib/tools/qshareddata.h ../corelib/tools/qsharedpointer.h ../corelib/tools/qsharedpointer_impl.h ../corelib/tools/qsize.h ../corelib/tools/qstack.h ../corelib/tools/qstring.h ../corelib/tools/qstringbuilder.h ../corelib/tools/qstringlist.h ../corelib/tools/qstringmatcher.h ../corelib/tools/qtextboundaryfinder.h ../corelib/tools/qtimeline.h ../corelib/tools/qvarlengtharray.h ../corelib/tools/qvector.h ../../include/QtCore/QtCore - SYNCQT.HEADER_CLASSES = ../../include/QtCore/QAbstractState ../../include/QtCore/QAbstractTransition ../../include/QtCore/QEventTransition ../../include/QtCore/QFinalState ../../include/QtCore/QHistoryState ../../include/QtCore/QSignalTransition ../../include/QtCore/QState ../../include/QtCore/QStateMachine ../../include/QtCore/QAtomicInt ../../include/QtCore/QAtomicPointer ../../include/QtCore/QBasicAtomicInt ../../include/QtCore/QBasicAtomicPointer ../../include/QtCore/QMutex ../../include/QtCore/QMutexLocker ../../include/QtCore/QMutexData ../../include/QtCore/QReadWriteLock ../../include/QtCore/QReadLocker ../../include/QtCore/QWriteLocker ../../include/QtCore/QSemaphore ../../include/QtCore/QThread ../../include/QtCore/QThreadStorageData ../../include/QtCore/QThreadStorage ../../include/QtCore/QWaitCondition ../../include/QtCore/QXmlStreamStringRef ../../include/QtCore/QXmlStreamAttribute ../../include/QtCore/QXmlStreamAttributes ../../include/QtCore/QXmlStreamNamespaceDeclaration ../../include/QtCore/QXmlStreamNamespaceDeclarations ../../include/QtCore/QXmlStreamNotationDeclaration ../../include/QtCore/QXmlStreamNotationDeclarations ../../include/QtCore/QXmlStreamEntityDeclaration ../../include/QtCore/QXmlStreamEntityDeclarations ../../include/QtCore/QXmlStreamEntityResolver ../../include/QtCore/QXmlStreamReader ../../include/QtCore/QXmlStreamWriter ../../include/QtCore/QFuture ../../include/QtCore/QFutureIterator ../../include/QtCore/QMutableFutureIterator ../../include/QtCore/QFutureInterfaceBase ../../include/QtCore/QFutureInterface ../../include/QtCore/QFutureSynchronizer ../../include/QtCore/QFutureWatcherBase ../../include/QtCore/QFutureWatcher ../../include/QtCore/QRunnable ../../include/QtCore/QtConcurrentFilter ../../include/QtCore/QtConcurrentMap ../../include/QtCore/QtConcurrentRun ../../include/QtCore/QThreadPool ../../include/QtCore/QAbstractEventDispatcher ../../include/QtCore/QModelIndex ../../include/QtCore/QPersistentModelIndex ../../include/QtCore/QModelIndexList ../../include/QtCore/QAbstractItemModel ../../include/QtCore/QAbstractTableModel ../../include/QtCore/QAbstractListModel ../../include/QtCore/QBasicTimer ../../include/QtCore/QCoreApplication ../../include/QtCore/QtCleanUpFunction ../../include/QtCore/QEvent ../../include/QtCore/QTimerEvent ../../include/QtCore/QChildEvent ../../include/QtCore/QCustomEvent ../../include/QtCore/QDynamicPropertyChangeEvent ../../include/QtCore/QEventLoop ../../include/QtCore/QMetaMethod ../../include/QtCore/QMetaEnum ../../include/QtCore/QMetaProperty ../../include/QtCore/QMetaClassInfo ../../include/QtCore/QMetaType ../../include/QtCore/QMetaTypeId ../../include/QtCore/QMetaTypeId2 ../../include/QtCore/QMimeData ../../include/QtCore/QObjectList ../../include/QtCore/QObjectData ../../include/QtCore/QObject ../../include/QtCore/QObjectUserData ../../include/QtCore/QObjectCleanupHandler ../../include/QtCore/QGenericArgument ../../include/QtCore/QGenericReturnArgument ../../include/QtCore/QArgument ../../include/QtCore/QReturnArgument ../../include/QtCore/QMetaObject ../../include/QtCore/QMetaObjectAccessor ../../include/QtCore/QMetaObjectExtraData ../../include/QtCore/QPointer ../../include/QtCore/QSharedMemory ../../include/QtCore/QSignalMapper ../../include/QtCore/QSocketNotifier ../../include/QtCore/QSystemSemaphore ../../include/QtCore/QTimer ../../include/QtCore/QTranslator ../../include/QtCore/QVariant ../../include/QtCore/QVariantList ../../include/QtCore/QVariantMap ../../include/QtCore/QVariantHash ../../include/QtCore/QVariantComparisonHelper ../../include/QtCore/QFactoryInterface ../../include/QtCore/QLibrary ../../include/QtCore/QtPlugin ../../include/QtCore/QtPluginInstanceFunction ../../include/QtCore/QPluginLoader ../../include/QtCore/QUuid ../../include/QtCore/QtEndian ../../include/QtCore/QtGlobal ../../include/QtCore/QIntegerForSize ../../include/QtCore/QNoImplicitBoolCast ../../include/QtCore/Q_INT8 ../../include/QtCore/Q_UINT8 ../../include/QtCore/Q_INT16 ../../include/QtCore/Q_UINT16 ../../include/QtCore/Q_INT32 ../../include/QtCore/Q_UINT32 ../../include/QtCore/Q_INT64 ../../include/QtCore/Q_UINT64 ../../include/QtCore/Q_LLONG ../../include/QtCore/Q_ULLONG ../../include/QtCore/Q_LONG ../../include/QtCore/Q_ULONG ../../include/QtCore/QSysInfo ../../include/QtCore/QtMsgHandler ../../include/QtCore/QGlobalStatic ../../include/QtCore/QGlobalStaticDeleter ../../include/QtCore/QBool ../../include/QtCore/QTypeInfo ../../include/QtCore/QFlag ../../include/QtCore/QIncompatibleFlag ../../include/QtCore/QFlags ../../include/QtCore/QForeachContainer ../../include/QtCore/QForeachContainerBase ../../include/QtCore/QLibraryInfo ../../include/QtCore/Qt ../../include/QtCore/QInternal ../../include/QtCore/QCOORD ../../include/QtCore/QtConfig ../../include/QtCore/QTextCodec ../../include/QtCore/QTextEncoder ../../include/QtCore/QTextDecoder ../../include/QtCore/QTextCodecFactoryInterface ../../include/QtCore/QTextCodecPlugin ../../include/QtCore/QAbstractFileEngine ../../include/QtCore/QAbstractFileEngineHandler ../../include/QtCore/QAbstractFileEngineIterator ../../include/QtCore/QBuffer ../../include/QtCore/QDataStream ../../include/QtCore/QtDebug ../../include/QtCore/QDebug ../../include/QtCore/QNoDebug ../../include/QtCore/QDir ../../include/QtCore/QDirIterator ../../include/QtCore/QFile ../../include/QtCore/QFileInfo ../../include/QtCore/QFileInfoList ../../include/QtCore/QFileInfoListIterator ../../include/QtCore/QFileSystemWatcher ../../include/QtCore/QFSFileEngine ../../include/QtCore/QIODevice ../../include/QtCore/Q_PID ../../include/QtCore/QProcessEnvironment ../../include/QtCore/QProcess ../../include/QtCore/QResource ../../include/QtCore/QSettings ../../include/QtCore/QTemporaryFile ../../include/QtCore/QTextStream ../../include/QtCore/QTextStreamFunction ../../include/QtCore/QTextStreamManipulator ../../include/QtCore/QTS ../../include/QtCore/QTextIStream ../../include/QtCore/QTextOStream ../../include/QtCore/QUrl ../../include/QtCore/QAbstractAnimation ../../include/QtCore/QAnimationDriver ../../include/QtCore/QAnimationGroup ../../include/QtCore/QParallelAnimationGroup ../../include/QtCore/QPauseAnimation ../../include/QtCore/QPropertyAnimation ../../include/QtCore/QSequentialAnimationGroup ../../include/QtCore/QVariantAnimation ../../include/QtCore/QtAlgorithms ../../include/QtCore/QBitArray ../../include/QtCore/QBitRef ../../include/QtCore/QByteArray ../../include/QtCore/QByteRef ../../include/QtCore/QByteArrayMatcher ../../include/QtCore/QCache ../../include/QtCore/QLatin1Char ../../include/QtCore/QChar ../../include/QtCore/QtContainerFwd ../../include/QtCore/QContiguousCacheData ../../include/QtCore/QContiguousCacheTypedData ../../include/QtCore/QContiguousCache ../../include/QtCore/QCryptographicHash ../../include/QtCore/QDate ../../include/QtCore/QTime ../../include/QtCore/QDateTime ../../include/QtCore/QEasingCurve ../../include/QtCore/QElapsedTimer ../../include/QtCore/QHashData ../../include/QtCore/QHashDummyValue ../../include/QtCore/QHashDummyNode ../../include/QtCore/QHashNode ../../include/QtCore/QHash ../../include/QtCore/QMultiHash ../../include/QtCore/QHashIterator ../../include/QtCore/QMutableHashIterator ../../include/QtCore/QLine ../../include/QtCore/QLineF ../../include/QtCore/QLinkedListData ../../include/QtCore/QLinkedListNode ../../include/QtCore/QLinkedList ../../include/QtCore/QLinkedListIterator ../../include/QtCore/QMutableLinkedListIterator ../../include/QtCore/QListData ../../include/QtCore/QList ../../include/QtCore/QListIterator ../../include/QtCore/QMutableListIterator ../../include/QtCore/QSystemLocale ../../include/QtCore/QLocale ../../include/QtCore/QBBSystemLocaleData ../../include/QtCore/QMapData ../../include/QtCore/QMapNode ../../include/QtCore/QMapPayloadNode ../../include/QtCore/QMap ../../include/QtCore/QMultiMap ../../include/QtCore/QMapIterator ../../include/QtCore/QMutableMapIterator ../../include/QtCore/QMargins ../../include/QtCore/QPair ../../include/QtCore/QPoint ../../include/QtCore/QPointF ../../include/QtCore/QQueue ../../include/QtCore/QRect ../../include/QtCore/QRectF ../../include/QtCore/QRegExp ../../include/QtCore/QScopedPointerDeleter ../../include/QtCore/QScopedPointerArrayDeleter ../../include/QtCore/QScopedPointerPodDeleter ../../include/QtCore/QScopedPointer ../../include/QtCore/QScopedArrayPointer ../../include/QtCore/QScopedValueRollback ../../include/QtCore/QSet ../../include/QtCore/QSetIterator ../../include/QtCore/QMutableSetIterator ../../include/QtCore/QSharedData ../../include/QtCore/QSharedDataPointer ../../include/QtCore/QExplicitlySharedDataPointer ../../include/QtCore/QSharedPointer ../../include/QtCore/QWeakPointer ../../include/QtCore/QSize ../../include/QtCore/QSizeF ../../include/QtCore/QStack ../../include/QtCore/QStdWString ../../include/QtCore/QString ../../include/QtCore/QLatin1String ../../include/QtCore/QCharRef ../../include/QtCore/QConstString ../../include/QtCore/QStringRef ../../include/QtCore/QLatin1Literal ../../include/QtCore/QAbstractConcatenable ../../include/QtCore/QConcatenable ../../include/QtCore/QStringBuilder ../../include/QtCore/QStringListIterator ../../include/QtCore/QMutableStringListIterator ../../include/QtCore/QStringList ../../include/QtCore/QStringMatcher ../../include/QtCore/QTextBoundaryFinder ../../include/QtCore/QTimeLine ../../include/QtCore/QVarLengthArray ../../include/QtCore/QVectorData ../../include/QtCore/QVectorTypedData ../../include/QtCore/QVector ../../include/QtCore/QVectorIterator ../../include/QtCore/QMutableVectorIterator - SYNCQT.PRIVATE_HEADER_FILES = ../corelib/statemachine/qabstractstate_p.h ../corelib/statemachine/qabstracttransition_p.h ../corelib/statemachine/qeventtransition_p.h ../corelib/statemachine/qhistorystate_p.h ../corelib/statemachine/qsignaleventgenerator_p.h ../corelib/statemachine/qsignaltransition_p.h ../corelib/statemachine/qstate_p.h ../corelib/statemachine/qstatemachine_p.h ../corelib/thread/qmutex_p.h ../corelib/thread/qmutexpool_p.h ../corelib/thread/qorderedmutexlocker_p.h ../corelib/thread/qreadwritelock_p.h ../corelib/thread/qthread_p.h ../corelib/xml/qxmlstream_p.h ../corelib/xml/qxmlutils_p.h ../corelib/concurrent/qfutureinterface_p.h ../corelib/concurrent/qfuturewatcher_p.h ../corelib/concurrent/qthreadpool_p.h ../corelib/kernel/qabstracteventdispatcher_p.h ../corelib/kernel/qabstractitemmodel_p.h ../corelib/kernel/qcore_mac_p.h ../corelib/kernel/qcore_symbian_p.h ../corelib/kernel/qcore_unix_p.h ../corelib/kernel/qcoreapplication_p.h ../corelib/kernel/qcorecmdlineargs_p.h ../corelib/kernel/qcoreglobaldata_p.h ../corelib/kernel/qcrashhandler_p.h ../corelib/kernel/qeventdispatcher_blackberry_p.h ../corelib/kernel/qeventdispatcher_glib_p.h ../corelib/kernel/qeventdispatcher_symbian_p.h ../corelib/kernel/qeventdispatcher_unix_p.h ../corelib/kernel/qeventdispatcher_win_p.h ../corelib/kernel/qfunctions_p.h ../corelib/kernel/qmetaobject_p.h ../corelib/kernel/qobject_p.h ../corelib/kernel/qsharedmemory_p.h ../corelib/kernel/qsystemerror_p.h ../corelib/kernel/qsystemsemaphore_p.h ../corelib/kernel/qtranslator_p.h ../corelib/kernel/qvariant_p.h ../corelib/kernel/qwineventnotifier_p.h ../corelib/plugin/qelfparser_p.h ../corelib/plugin/qfactoryloader_p.h ../corelib/plugin/qlibrary_p.h ../corelib/plugin/qsystemlibrary_p.h ../corelib/global/qnumeric_p.h ../corelib/global/qt_pch.h ../corelib/codecs/qfontlaocodec_p.h ../corelib/codecs/qiconvcodec_p.h ../corelib/codecs/qisciicodec_p.h ../corelib/codecs/qlatincodec_p.h ../corelib/codecs/qsimplecodec_p.h ../corelib/codecs/qtextcodec_p.h ../corelib/codecs/qtsciicodec_p.h ../corelib/codecs/qutfcodec_p.h ../corelib/io/qabstractfileengine_p.h ../corelib/io/qdatastream_p.h ../corelib/io/qdataurl_p.h ../corelib/io/qdir_p.h ../corelib/io/qfile_p.h ../corelib/io/qfileinfo_p.h ../corelib/io/qfilesystemengine_p.h ../corelib/io/qfilesystementry_p.h ../corelib/io/qfilesystemiterator_p.h ../corelib/io/qfilesystemmetadata_p.h ../corelib/io/qfilesystemwatcher_dnotify_p.h ../corelib/io/qfilesystemwatcher_fsevents_p.h ../corelib/io/qfilesystemwatcher_inotify_p.h ../corelib/io/qfilesystemwatcher_kqueue_p.h ../corelib/io/qfilesystemwatcher_p.h ../corelib/io/qfilesystemwatcher_symbian_p.h ../corelib/io/qfilesystemwatcher_win_p.h ../corelib/io/qfsfileengine_iterator_p.h ../corelib/io/qfsfileengine_p.h ../corelib/io/qiodevice_p.h ../corelib/io/qnoncontiguousbytedevice_p.h ../corelib/io/qprocess_p.h ../corelib/io/qresource_iterator_p.h ../corelib/io/qresource_p.h ../corelib/io/qsettings_p.h ../corelib/io/qtldurl_p.h ../corelib/io/qurltlds_p.h ../corelib/io/qwindowspipewriter_p.h ../corelib/animation/qabstractanimation_p.h ../corelib/animation/qanimationgroup_p.h ../corelib/animation/qparallelanimationgroup_p.h ../corelib/animation/qpropertyanimation_p.h ../corelib/animation/qsequentialanimationgroup_p.h ../corelib/animation/qvariantanimation_p.h ../corelib/tools/qbytedata_p.h ../corelib/tools/qdatetime_p.h ../corelib/tools/qharfbuzz_p.h ../corelib/tools/qlocale_data_p.h ../corelib/tools/qlocale_p.h ../corelib/tools/qlocale_tools_p.h ../corelib/tools/qpodlist_p.h ../corelib/tools/qringbuffer_p.h ../corelib/tools/qscopedpointer_p.h ../corelib/tools/qsimd_p.h ../corelib/tools/qtools_p.h ../corelib/tools/qunicodetables_p.h -Index: b/src/corelib/arch/aarch64/qatomic_aarch64.cpp -=================================================================== ---- /dev/null -+++ b/src/corelib/arch/aarch64/qatomic_aarch64.cpp + wince* { + INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty/ce-compat + INCLUDEPATH += $$PWD/../JavaScriptCore/os-win32 +diff -up qt-everywhere-opensource-src-4.8.6/src/corelib/arch/aarch64/qatomic_aarch64.cpp.aarch64 qt-everywhere-opensource-src-4.8.6/src/corelib/arch/aarch64/qatomic_aarch64.cpp +--- qt-everywhere-opensource-src-4.8.6/src/corelib/arch/aarch64/qatomic_aarch64.cpp.aarch64 2014-04-02 09:25:21.349386835 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/corelib/arch/aarch64/qatomic_aarch64.cpp 2014-04-02 09:25:21.349386835 -0500 @@ -0,0 +1,70 @@ +/**************************************************************************** +** @@ -253,11 +117,10 @@ Index: b/src/corelib/arch/aarch64/qatomic_aarch64.cpp +} + +QT_END_NAMESPACE -Index: b/src/corelib/arch/arch.pri -=================================================================== ---- a/src/corelib/arch/arch.pri -+++ b/src/corelib/arch/arch.pri -@@ -31,7 +31,9 @@ +diff -up qt-everywhere-opensource-src-4.8.6/src/corelib/arch/arch.pri.aarch64 qt-everywhere-opensource-src-4.8.6/src/corelib/arch/arch.pri +--- qt-everywhere-opensource-src-4.8.6/src/corelib/arch/arch.pri.aarch64 2014-03-30 15:36:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/corelib/arch/arch.pri 2014-04-02 09:25:21.349386835 -0500 +@@ -31,7 +31,9 @@ integrity:HEADERS += arch/qatomic_integr arch/qatomic_s390.h \ arch/qatomic_x86_64.h \ arch/qatomic_sh.h \ @@ -268,10 +131,9 @@ Index: b/src/corelib/arch/arch.pri QT_ARCH_CPP = $$QT_SOURCE_TREE/src/corelib/arch/$$QT_ARCH DEPENDPATH += $$QT_ARCH_CPP -Index: b/src/corelib/arch/qatomic_aarch64.h -=================================================================== ---- /dev/null -+++ b/src/corelib/arch/qatomic_aarch64.h +diff -up qt-everywhere-opensource-src-4.8.6/src/corelib/arch/qatomic_aarch64.h.aarch64 qt-everywhere-opensource-src-4.8.6/src/corelib/arch/qatomic_aarch64.h +--- qt-everywhere-opensource-src-4.8.6/src/corelib/arch/qatomic_aarch64.h.aarch64 2014-04-02 09:25:21.350386824 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/corelib/arch/qatomic_aarch64.h 2014-04-02 09:25:21.350386824 -0500 @@ -0,0 +1,335 @@ +/**************************************************************************** +** @@ -608,11 +470,10 @@ Index: b/src/corelib/arch/qatomic_aarch64.h +QT_END_HEADER + +#endif // QATOMIC_AARCH64_H -Index: b/src/corelib/arch/qatomic_arch.h -=================================================================== ---- a/src/corelib/arch/qatomic_arch.h -+++ b/src/corelib/arch/qatomic_arch.h -@@ -92,6 +92,8 @@ +diff -up qt-everywhere-opensource-src-4.8.6/src/corelib/arch/qatomic_arch.h.aarch64 qt-everywhere-opensource-src-4.8.6/src/corelib/arch/qatomic_arch.h +--- qt-everywhere-opensource-src-4.8.6/src/corelib/arch/qatomic_arch.h.aarch64 2014-03-30 15:36:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/corelib/arch/qatomic_arch.h 2014-04-02 09:25:21.350386824 -0500 +@@ -94,6 +94,8 @@ QT_BEGIN_HEADER # include "QtCore/qatomic_sh4a.h" #elif defined(QT_ARCH_NACL) # include "QtCore/qatomic_generic.h" @@ -621,31 +482,3 @@ Index: b/src/corelib/arch/qatomic_arch.h #else # error "Qt has not been ported to this architecture" #endif -Index: b/src/corelib/io/qfilesystemwatcher_inotify.cpp -=================================================================== ---- a/src/corelib/io/qfilesystemwatcher_inotify.cpp -+++ b/src/corelib/io/qfilesystemwatcher_inotify.cpp -@@ -138,6 +138,11 @@ - # define __NR_inotify_add_watch 285 - # define __NR_inotify_rm_watch 286 - # define __NR_inotify_init1 328 -+#elif defined (__aarch64__) -+# define __NR_inotify_init1 26 -+# define __NR_inotify_add_watch 27 -+# define __NR_inotify_rm_watch 28 -+// no inotify_init for aarch64 - #else - # error "This architecture is not supported. Please talk to qt-bugs@trolltech.com" - #endif -@@ -155,7 +160,11 @@ - - static inline int inotify_init() - { -+#ifdef __NR_inotify_init - return syscall(__NR_inotify_init); -+#else -+ return syscall(__NR_inotify_init1, 0); -+#endif - } - - static inline int inotify_add_watch(int fd, const char *name, __u32 mask) diff --git a/qt-everywhere-opensource-src-4.8.0-beta1-s390.patch b/qt-everywhere-opensource-src-4.8.0-beta1-s390.patch deleted file mode 100644 index 5f0bbf8..0000000 --- a/qt-everywhere-opensource-src-4.8.0-beta1-s390.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.0/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h.s390 qt-everywhere-opensource-src-4.8.0/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h ---- qt-everywhere-opensource-src-4.8.0/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h.s390 2011-07-28 11:12:48.000000000 +0200 -+++ qt-everywhere-opensource-src-4.8.0/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h 2011-07-28 11:13:56.000000000 +0200 -@@ -189,6 +189,18 @@ - #define WTF_CPU_SPARC 1 - #endif - -+/* CPU(S390X) - S390 64-bit */ -+#if defined(__s390x__) -+#define WTF_CPU_S390X 1 -+#define WTF_CPU_BIG_ENDIAN 1 -+#endif -+ -+/* CPU(S390) - S390 32-bit */ -+#if defined(__s390__) -+#define WTF_CPU_S390 1 -+#define WTF_CPU_BIG_ENDIAN 1 -+#endif -+ - /* CPU(X86) - i386 / x86 32-bit */ - #if defined(__i386__) \ - || defined(i386) \ -@@ -873,7 +885,7 @@ - #endif - - #if !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64) --#if (CPU(X86_64) && (OS(UNIX) || OS(WINDOWS) || OS(SOLARIS) || OS(HPUX))) || (CPU(IA64) && !CPU(IA64_32)) || CPU(ALPHA) || CPU(AIX64) || CPU(SPARC64) -+#if (CPU(X86_64) && (OS(UNIX) || OS(WINDOWS) || OS(SOLARIS) || OS(HPUX))) || (CPU(IA64) && !CPU(IA64_32)) || CPU(ALPHA) || CPU(AIX64) || CPU(SPARC64) || CPU(S390X) - #define WTF_USE_JSVALUE64 1 - #elif CPU(ARM) || CPU(PPC64) - #define WTF_USE_JSVALUE32 1 diff --git a/qt-everywhere-opensource-src-4.8.0-ld-gold.patch b/qt-everywhere-opensource-src-4.8.0-ld-gold.patch deleted file mode 100644 index 0e3897e..0000000 --- a/qt-everywhere-opensource-src-4.8.0-ld-gold.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.0/src/3rdparty/webkit/Source/common.pri.me qt-everywhere-opensource-src-4.8.0/src/3rdparty/webkit/Source/common.pri ---- qt-everywhere-opensource-src-4.8.0/src/3rdparty/webkit/Source/common.pri.me 2012-01-24 13:05:50.460890750 +0100 -+++ qt-everywhere-opensource-src-4.8.0/src/3rdparty/webkit/Source/common.pri 2012-01-24 13:19:08.836799974 +0100 -@@ -3,12 +3,12 @@ - contains(JAVASCRIPTCORE_JIT,yes): DEFINES+=ENABLE_JIT=1 - contains(JAVASCRIPTCORE_JIT,no): DEFINES+=ENABLE_JIT=0 - --linux-g++ { --isEmpty($$(SBOX_DPKG_INST_ARCH)):exists(/usr/bin/ld.gold) { -- message(Using gold linker) -- QMAKE_LFLAGS+=-fuse-ld=gold --} --} -+#linux-g++ { -+#isEmpty($$(SBOX_DPKG_INST_ARCH)):exists(/usr/bin/ld.gold) { -+# message(Using gold linker) -+# QMAKE_LFLAGS+=-fuse-ld=gold -+#} -+#} - - # We use this flag on production branches - # See https://bugs.webkit.org/show_bug.cgi?id=60824 diff --git a/qt-everywhere-opensource-src-4.8.1-qtgahandle.patch b/qt-everywhere-opensource-src-4.8.1-qtgahandle.patch deleted file mode 100644 index 64ffef3..0000000 --- a/qt-everywhere-opensource-src-4.8.1-qtgahandle.patch +++ /dev/null @@ -1,53 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.cpp.me qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.cpp ---- qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.cpp.me 2012-03-30 21:54:59.921331145 +0200 -+++ qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.cpp 2012-03-30 21:58:14.516042067 +0200 -@@ -41,6 +41,7 @@ - - #include "qtgafile.h" - -+#include - #include - #include - #include -@@ -264,3 +265,16 @@ QImage QTgaFile::readImage() - // TODO: add processing of TGA extension information - ie TGA 2.0 files - return im; - } -+/** -+ * Checks if device contains a valid tga image, *without* changing device -+ * position. -+ */ -+bool QTgaFile::canRead(QIODevice *device) -+{ -+ QByteArray header = device->peek(HeaderSize); -+ if (header.size() < HeaderSize) -+ return false; -+ QBuffer buffer(&header); -+ QTgaFile tga(&buffer); -+ return tga.isValid(); -+} -diff -up qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.h.me qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.h ---- qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.h.me 2012-03-30 21:58:39.670023189 +0200 -+++ qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.h 2012-03-30 21:59:06.202317384 +0200 -@@ -93,6 +93,8 @@ public: - inline QSize size() const; - inline Compression compression() const; - -+ static bool canRead(QIODevice *device); -+ - private: - static inline quint16 littleEndianInt(const unsigned char *d); - -diff -up qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgahandler.cpp.me qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgahandler.cpp ---- qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgahandler.cpp.me 2012-03-30 21:59:17.373303356 +0200 -+++ qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgahandler.cpp 2012-03-30 22:00:13.817226439 +0200 -@@ -77,8 +77,7 @@ bool QTgaHandler::canRead(QIODevice *dev - qWarning("QTgaHandler::canRead() called with no device"); - return false; - } -- QTgaFile tga(device); -- return tga.isValid(); -+ return QTgaFile::canRead(device); - } - - bool QTgaHandler::read(QImage *image) diff --git a/qt-everywhere-opensource-src-4.8.5-QTBUG-35460.patch b/qt-everywhere-opensource-src-4.8.5-QTBUG-35460.patch deleted file mode 100644 index e0f4bc8..0000000 --- a/qt-everywhere-opensource-src-4.8.5-QTBUG-35460.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -ur qt-everywhere-opensource-src-4.8.5-CVE-2013-4549/src/xml/sax/qxml.cpp qt-everywhere-opensource-src-4.8.5-QTBUG-35460/src/xml/sax/qxml.cpp ---- qt-everywhere-opensource-src-4.8.5-CVE-2013-4549/src/xml/sax/qxml.cpp 2013-12-05 19:23:33.000000000 +0100 -+++ qt-everywhere-opensource-src-4.8.5-QTBUG-35460/src/xml/sax/qxml.cpp 2014-01-13 20:15:11.000000000 +0100 -@@ -6674,7 +6674,7 @@ - - if (expandedSizes[entity] > entityCharacterLimit) { - if (errorMessage) { -- *errorMessage = QString::fromLatin1("The XML entity \"%1\" expands too a string that is too large to process (%2 characters > %3)."); -+ *errorMessage = QString::fromLatin1("The XML entity \"%1\" expands to a string that is too large to process (%2 characters > %3)."); - *errorMessage = (*errorMessage).arg(entity).arg(expandedSizes[entity]).arg(entityCharacterLimit); - } - return true; diff --git a/qt-everywhere-opensource-src-4.8.6-s390.patch b/qt-everywhere-opensource-src-4.8.6-s390.patch new file mode 100644 index 0000000..5098c08 --- /dev/null +++ b/qt-everywhere-opensource-src-4.8.6-s390.patch @@ -0,0 +1,31 @@ +diff -up qt-everywhere-opensource-src-4.8.6/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h.s390 qt-everywhere-opensource-src-4.8.6/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h +--- qt-everywhere-opensource-src-4.8.6/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h.s390 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h 2014-03-31 17:59:16.846465899 -0500 +@@ -189,6 +189,18 @@ + #define WTF_CPU_SPARC 1 + #endif + ++/* CPU(S390X) - S390 64-bit */ ++#if defined(__s390x__) ++#define WTF_CPU_S390X 1 ++#define WTF_CPU_BIG_ENDIAN 1 ++#endif ++ ++/* CPU(S390) - S390 32-bit */ ++#if defined(__s390__) ++#define WTF_CPU_S390 1 ++#define WTF_CPU_BIG_ENDIAN 1 ++#endif ++ + /* CPU(X86) - i386 / x86 32-bit */ + #if defined(__i386__) \ + || defined(i386) \ +@@ -903,7 +915,7 @@ + #endif + + #if !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64) +-#if (CPU(X86_64) && (OS(UNIX) || OS(WINDOWS) || OS(SOLARIS) || OS(HPUX))) || (CPU(IA64) && !CPU(IA64_32)) || CPU(ALPHA) || CPU(AIX64) || CPU(SPARC64) || CPU(MIPS64) || CPU(AARCH64) ++#if (CPU(X86_64) && (OS(UNIX) || OS(WINDOWS) || OS(SOLARIS) || OS(HPUX))) || (CPU(IA64) && !CPU(IA64_32)) || CPU(ALPHA) || CPU(AIX64) || CPU(SPARC64) || CPU(MIPS64) || CPU(AARCH64) || CPU(S390X) + #define WTF_USE_JSVALUE64 1 + #elif CPU(ARM) || CPU(PPC64) + #define WTF_USE_JSVALUE32 1 diff --git a/qt-everywhere-opensource-src-4.8.6-systemtrayicon.patch b/qt-everywhere-opensource-src-4.8.6-systemtrayicon.patch new file mode 100644 index 0000000..60749d3 --- /dev/null +++ b/qt-everywhere-opensource-src-4.8.6-systemtrayicon.patch @@ -0,0 +1,1456 @@ +diff -up qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.cpp.systemtrayicon qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.cpp +--- qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.cpp.systemtrayicon 2014-03-30 15:36:45.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.cpp 2014-03-31 18:16:39.707974934 -0500 +@@ -158,15 +158,23 @@ void Window::createIconGroupBox() + iconComboBox->addItem(QIcon(":/images/bad.svg"), tr("Bad")); + iconComboBox->addItem(QIcon(":/images/heart.svg"), tr("Heart")); + iconComboBox->addItem(QIcon(":/images/trash.svg"), tr("Trash")); ++ iconComboBox->addItem(QIcon::fromTheme("system-file-manager"), tr("File Manager")); + + showIconCheckBox = new QCheckBox(tr("Show icon")); + showIconCheckBox->setChecked(true); + ++#if defined(Q_WS_X11) ++ jitToolTipCheckBox = new QCheckBox(tr("Just In Time Tooltip")); ++#endif ++ + QHBoxLayout *iconLayout = new QHBoxLayout; + iconLayout->addWidget(iconLabel); + iconLayout->addWidget(iconComboBox); + iconLayout->addStretch(); + iconLayout->addWidget(showIconCheckBox); ++#if defined(Q_WS_X11) ++ iconLayout->addWidget(jitToolTipCheckBox); ++#endif + iconGroupBox->setLayout(iconLayout); + } + +@@ -254,5 +262,37 @@ void Window::createTrayIcon() + trayIconMenu->addAction(quitAction); + + trayIcon = new QSystemTrayIcon(this); ++ QByteArray category = qgetenv("SNI_CATEGORY"); ++ if (!category.isEmpty()) { ++ trayIcon->setProperty("_qt_sni_category", QString::fromLocal8Bit(category)); ++ } + trayIcon->setContextMenu(trayIconMenu); ++ ++#if defined(Q_WS_X11) ++ trayIcon->installEventFilter(this); ++#endif ++} ++ ++#if defined(Q_WS_X11) ++bool Window::eventFilter(QObject *, QEvent *event) ++{ ++ switch(event->type()) { ++ case QEvent::ToolTip: ++ if (jitToolTipCheckBox->isChecked()) { ++ QString timeString = QTime::currentTime().toString(); ++ trayIcon->setToolTip(tr("Current Time: %1").arg(timeString)); ++ } ++ break; ++ case QEvent::Wheel: { ++ QWheelEvent *wheelEvent = static_cast(event); ++ int delta = wheelEvent->delta() > 0 ? 1 : -1; ++ int index = (iconComboBox->currentIndex() + delta) % iconComboBox->count(); ++ iconComboBox->setCurrentIndex(index); ++ break; ++ } ++ default: ++ break; ++ } ++ return false; + } ++#endif +diff -up qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.h.systemtrayicon qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.h +--- qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.h.systemtrayicon 2014-03-30 15:36:45.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.h 2014-03-31 18:16:39.707974934 -0500 +@@ -69,6 +69,9 @@ public: + + protected: + void closeEvent(QCloseEvent *event); ++#if defined(Q_WS_X11) ++ bool eventFilter(QObject *object, QEvent *event); ++#endif + + private slots: + void setIcon(int index); +@@ -86,6 +89,9 @@ private: + QLabel *iconLabel; + QComboBox *iconComboBox; + QCheckBox *showIconCheckBox; ++#if defined(Q_WS_X11) ++ QCheckBox *jitToolTipCheckBox; ++#endif + + QGroupBox *messageGroupBox; + QLabel *typeLabel; +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys.cpp.systemtrayicon qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys.cpp +--- qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys.cpp.systemtrayicon 2014-03-31 18:16:39.707974934 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys.cpp 2014-03-31 18:16:39.707974934 -0500 +@@ -0,0 +1,65 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtGui module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** GNU Lesser General Public License Usage ++** 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, Nokia gives you certain additional ++** rights. These rights are described in the Nokia 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. ++** ++** Other Usage ++** Alternatively, this file may be used in accordance with the terms and ++** conditions contained in a signed written agreement between you and Nokia. ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++#ifndef QT_NO_SYSTEMTRAYICON ++ ++#include "qabstractsystemtrayiconsys_p.h" ++ ++ ++QSystemTrayIconSysFactoryInterface::QSystemTrayIconSysFactoryInterface() ++{ ++} ++ ++///////////////////////////////////////////////// ++QAbstractSystemTrayIconSys::QAbstractSystemTrayIconSys(QSystemTrayIcon *icon) ++: trayIcon(icon) ++{ ++} ++ ++QAbstractSystemTrayIconSys::~QAbstractSystemTrayIconSys() ++{ ++} ++ ++void QAbstractSystemTrayIconSys::sendActivated(QSystemTrayIcon::ActivationReason reason) ++{ ++ qtsystray_sendActivated(trayIcon, reason); ++} ++ ++#endif +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys_p.h.systemtrayicon qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys_p.h +--- qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys_p.h.systemtrayicon 2014-03-31 18:16:39.708974924 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys_p.h 2014-03-31 18:16:39.708974924 -0500 +@@ -0,0 +1,106 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtGui module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** GNU Lesser General Public License Usage ++** 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, Nokia gives you certain additional ++** rights. These rights are described in the Nokia 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. ++** ++** Other Usage ++** Alternatively, this file may be used in accordance with the terms and ++** conditions contained in a signed written agreement between you and Nokia. ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#ifndef QABSTRACTSYSTEMTRAYICONSYS_P_H ++#define QABSTRACTSYSTEMTRAYICONSYS_P_H ++ ++// ++// W A R N I N G ++// ------------- ++// ++// This file is not part of the Qt API. It exists for the convenience ++// of a number of Qt sources files. This header file may change from ++// version to version without notice, or even be removed. ++// ++// We mean it. ++// ++ ++#ifndef QT_NO_SYSTEMTRAYICON ++ ++#include ++#include ++ ++class QAbstractSystemTrayIconSys; ++ ++class Q_GUI_EXPORT QSystemTrayIconSysFactoryInterface : public QObject, public QFactoryInterface ++{ ++ Q_OBJECT ++public: ++ QSystemTrayIconSysFactoryInterface(); ++ virtual QAbstractSystemTrayIconSys * create(QSystemTrayIcon *) = 0; ++ virtual bool isAvailable() const = 0; ++ ++ // \reimp ++ virtual QStringList keys() const { return QStringList() << QLatin1String("default"); } ++ ++Q_SIGNALS: ++ void availableChanged(bool); ++}; ++ ++#define QSystemTrayIconSysFactoryInterface_iid "com.nokia.qt.QSystemTrayIconSysFactoryInterface" ++Q_DECLARE_INTERFACE(QSystemTrayIconSysFactoryInterface, QSystemTrayIconSysFactoryInterface_iid) ++ ++class QRect; ++ ++class Q_GUI_EXPORT QAbstractSystemTrayIconSys ++{ ++public: ++ QAbstractSystemTrayIconSys(QSystemTrayIcon *icon); ++ virtual ~QAbstractSystemTrayIconSys(); ++ ++ virtual QRect geometry() const = 0; ++ virtual void updateVisibility() = 0; ++ virtual void updateIcon() = 0; ++ virtual void updateToolTip() = 0; ++ virtual void updateMenu() = 0; ++ virtual void showMessage(const QString &title, const QString &message, ++ QSystemTrayIcon::MessageIcon icon, int msecs) = 0; ++ ++ void sendActivated(QSystemTrayIcon::ActivationReason); ++ ++protected: ++ QSystemTrayIcon *trayIcon; ++}; ++ ++#endif // QT_NO_SYSTEMTRAYICON ++ ++#endif // QABSTRACTSYSTEMTRAYICONSYS_P_H ++ +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon.cpp.systemtrayicon qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon.cpp +--- qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon.cpp.systemtrayicon 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon.cpp 2014-03-31 18:16:39.708974924 -0500 +@@ -287,12 +287,6 @@ bool QSystemTrayIcon::isVisible() const + */ + bool QSystemTrayIcon::event(QEvent *e) + { +-#if defined(Q_WS_X11) +- if (e->type() == QEvent::ToolTip) { +- Q_D(QSystemTrayIcon); +- return d->sys->deliverToolTipEvent(e); +- } +-#endif + return QObject::event(e); + } + +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_p.h.systemtrayicon qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_p.h +--- qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_p.h.systemtrayicon 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_p.h 2014-03-31 18:16:39.708974924 -0500 +@@ -62,10 +62,17 @@ + #include "QtGui/qpixmap.h" + #include "QtCore/qstring.h" + #include "QtCore/qpointer.h" ++#if defined(Q_WS_X11) ++#include "QtCore/qset.h" ++#endif + + QT_BEGIN_NAMESPACE + ++#if defined(Q_WS_X11) ++class QAbstractSystemTrayIconSys; ++#else + class QSystemTrayIconSys; ++#endif + class QToolButton; + class QLabel; + +@@ -75,6 +82,9 @@ class QSystemTrayIconPrivate : public QO + + public: + QSystemTrayIconPrivate() : sys(0), visible(false) { } ++ #if defined(Q_WS_X11) ++ ~QSystemTrayIconPrivate(); ++ #endif + + void install_sys(); + void remove_sys(); +@@ -90,7 +100,11 @@ public: + QPointer menu; + QIcon icon; + QString toolTip; ++ #if defined(Q_WS_X11) ++ QAbstractSystemTrayIconSys *sys; ++ #else + QSystemTrayIconSys *sys; ++ #endif + bool visible; + }; + +@@ -123,60 +137,37 @@ private: + }; + + #if defined(Q_WS_X11) +-QT_BEGIN_INCLUDE_NAMESPACE +-#include +-#include +-#include +-#include +-QT_END_INCLUDE_NAMESPACE ++class QSystemTrayIconSysFactoryInterface; + +-class QSystemTrayIconSys : public QWidget ++/** ++ * This class acts as a composite QSystemTrayIconSysFactory: It can create ++ * instances of QAbstractSystemTrayIconSys* using either a plugin or the ++ * builtin factory and will cause QSystemTrayIconPrivate to recreate their ++ * 'sys' instances if the plugin availability changes. ++ */ ++class QSystemTrayIconSysFactory : public QObject + { +- friend class QSystemTrayIconPrivate; +- ++ Q_OBJECT + public: +- QSystemTrayIconSys(QSystemTrayIcon *q); +- ~QSystemTrayIconSys(); +- enum { +- SYSTEM_TRAY_REQUEST_DOCK = 0, +- SYSTEM_TRAY_BEGIN_MESSAGE = 1, +- SYSTEM_TRAY_CANCEL_MESSAGE =2 +- }; +- +- void addToTray(); +- void updateIcon(); +- XVisualInfo* getSysTrayVisualInfo(); +- +- // QObject::event is public but QWidget's ::event() re-implementation +- // is protected ;( +- inline bool deliverToolTipEvent(QEvent *e) +- { return QWidget::event(e); } +- +- static Window sysTrayWindow; +- static QList trayIcons; +- static QCoreApplication::EventFilter oldEventFilter; +- static bool sysTrayTracker(void *message, long *result); +- static Window locateSystemTray(); +- static Atom sysTraySelection; +- static XVisualInfo sysTrayVisual; ++ QSystemTrayIconSysFactory(); ++ void registerSystemTrayIconPrivate(QSystemTrayIconPrivate *iconPrivate); ++ void unregisterSystemTrayIconPrivate(QSystemTrayIconPrivate *iconPrivate); + +-protected: +- void paintEvent(QPaintEvent *pe); +- void resizeEvent(QResizeEvent *re); +- bool x11Event(XEvent *event); +- void mousePressEvent(QMouseEvent *event); +- void mouseDoubleClickEvent(QMouseEvent *event); +-#ifndef QT_NO_WHEELEVENT +- void wheelEvent(QWheelEvent *event); +-#endif +- bool event(QEvent *e); ++ QAbstractSystemTrayIconSys *create(QSystemTrayIcon *) const; ++ ++ bool isAvailable() const; ++ ++private Q_SLOTS: ++ void refreshTrayIconPrivates(); + + private: +- QPixmap background; +- QSystemTrayIcon *q; +- Colormap colormap; ++ QSystemTrayIconSysFactoryInterface *factory() const; ++ void loadPluginFactory(); ++ ++ QSystemTrayIconSysFactoryInterface *pluginFactory; ++ QSet trayIconPrivates; + }; +-#endif // Q_WS_X11 ++#endif + + QT_END_NAMESPACE + +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_x11.cpp.systemtrayicon qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_x11.cpp +--- qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_x11.cpp.systemtrayicon 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_x11.cpp 2014-03-31 18:16:39.709974914 -0500 +@@ -38,311 +38,122 @@ + ** $QT_END_LICENSE$ + ** + ****************************************************************************/ ++#ifndef QT_NO_SYSTEMTRAYICON ++ ++#include + +-#include "private/qt_x11_p.h" +-#include "qlabel.h" +-#include "qx11info_x11.h" +-#include "qpainter.h" +-#include "qpixmap.h" +-#include "qbitmap.h" +-#include "qevent.h" +-#include "qapplication.h" +-#include "qlist.h" +-#include "qmenu.h" +-#include "qtimer.h" + #include "qsystemtrayicon_p.h" +-#include "qpaintengine.h" ++#include "qabstractsystemtrayiconsys_p.h" ++#include "qcoreapplication.h" ++#include "qxembedsystemtrayicon_x11_p.h" + +-#ifndef QT_NO_SYSTEMTRAYICON + QT_BEGIN_NAMESPACE + +-Window QSystemTrayIconSys::sysTrayWindow = XNone; +-QList QSystemTrayIconSys::trayIcons; +-QCoreApplication::EventFilter QSystemTrayIconSys::oldEventFilter = 0; +-Atom QSystemTrayIconSys::sysTraySelection = XNone; +-XVisualInfo QSystemTrayIconSys::sysTrayVisual = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +- +-// Locate the system tray +-Window QSystemTrayIconSys::locateSystemTray() +-{ +- Display *display = QX11Info::display(); +- if (sysTraySelection == XNone) { +- int screen = QX11Info::appScreen(); +- QString net_sys_tray = QString::fromLatin1("_NET_SYSTEM_TRAY_S%1").arg(screen); +- sysTraySelection = XInternAtom(display, net_sys_tray.toLatin1(), False); +- } +- +- return XGetSelectionOwner(QX11Info::display(), sysTraySelection); +-} ++Q_GLOBAL_STATIC(QSystemTrayIconSysFactory, qt_guiSystemTrayIconSysFactory) + +-XVisualInfo* QSystemTrayIconSys::getSysTrayVisualInfo() ++QSystemTrayIconSysFactory::QSystemTrayIconSysFactory() ++: pluginFactory(0) + { +- Display *display = QX11Info::display(); +- +- if (!sysTrayVisual.visual) { +- Window win = locateSystemTray(); +- if (win != XNone) { +- Atom actual_type; +- int actual_format; +- ulong nitems, bytes_remaining; +- uchar *data = 0; +- int result = XGetWindowProperty(display, win, ATOM(_NET_SYSTEM_TRAY_VISUAL), 0, 1, +- False, XA_VISUALID, &actual_type, +- &actual_format, &nitems, &bytes_remaining, &data); +- VisualID vid = 0; +- if (result == Success && data && actual_type == XA_VISUALID && actual_format == 32 && +- nitems == 1 && bytes_remaining == 0) +- vid = *(VisualID*)data; +- if (data) +- XFree(data); +- if (vid == 0) +- return 0; +- +- uint mask = VisualIDMask; +- XVisualInfo *vi, rvi; +- int count; +- rvi.visualid = vid; +- vi = XGetVisualInfo(display, mask, &rvi, &count); +- if (vi) { +- sysTrayVisual = vi[0]; +- XFree((char*)vi); +- } +- if (sysTrayVisual.depth != 32) +- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); +- } +- } +- +- return sysTrayVisual.visual ? &sysTrayVisual : 0; + } + +-bool QSystemTrayIconSys::sysTrayTracker(void *message, long *result) ++void QSystemTrayIconSysFactory::loadPluginFactory() + { +- bool retval = false; +- if (QSystemTrayIconSys::oldEventFilter) +- retval = QSystemTrayIconSys::oldEventFilter(message, result); +- +- if (trayIcons.isEmpty()) +- return retval; +- +- Display *display = QX11Info::display(); +- XEvent *ev = (XEvent *)message; +- if (ev->type == DestroyNotify && ev->xany.window == sysTrayWindow) { +- sysTrayWindow = locateSystemTray(); +- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); +- for (int i = 0; i < trayIcons.count(); i++) { +- if (sysTrayWindow == XNone) { +- QBalloonTip::hideBalloon(); +- trayIcons[i]->hide(); // still no luck +- trayIcons[i]->destroy(); +- trayIcons[i]->create(); +- } else +- trayIcons[i]->addToTray(); // add it to the new tray +- } +- retval = true; +- } else if (ev->type == ClientMessage && sysTrayWindow == XNone) { +- static Atom manager_atom = XInternAtom(display, "MANAGER", False); +- XClientMessageEvent *cm = (XClientMessageEvent *)message; +- if ((cm->message_type == manager_atom) && ((Atom)cm->data.l[1] == sysTraySelection)) { +- sysTrayWindow = cm->data.l[2]; +- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); +- XSelectInput(display, sysTrayWindow, StructureNotifyMask); +- for (int i = 0; i < trayIcons.count(); i++) { +- trayIcons[i]->addToTray(); +- } +- retval = true; +- } +- } else if (ev->type == PropertyNotify && ev->xproperty.atom == ATOM(_NET_SYSTEM_TRAY_VISUAL) && +- ev->xproperty.window == sysTrayWindow) { +- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); +- for (int i = 0; i < trayIcons.count(); i++) { +- trayIcons[i]->addToTray(); +- } +- } +- +- return retval; +-} +- +-QSystemTrayIconSys::QSystemTrayIconSys(QSystemTrayIcon *q) +- : QWidget(0, Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint), +- q(q), colormap(0) +-{ +- setAttribute(Qt::WA_AlwaysShowToolTips); +- setAttribute(Qt::WA_QuitOnClose, false); +- setAttribute(Qt::WA_NoSystemBackground, true); +- setAttribute(Qt::WA_PaintOnScreen); +- +- static bool eventFilterAdded = false; +- Display *display = QX11Info::display(); +- if (!eventFilterAdded) { +- oldEventFilter = qApp->setEventFilter(sysTrayTracker); +- eventFilterAdded = true; +- Window root = QX11Info::appRootWindow(); +- XWindowAttributes attr; +- XGetWindowAttributes(display, root, &attr); +- if ((attr.your_event_mask & StructureNotifyMask) != StructureNotifyMask) { +- (void) QApplication::desktop(); // lame trick to ensure our event mask is not overridden +- XSelectInput(display, root, attr.your_event_mask | StructureNotifyMask); // for MANAGER selection +- } ++ if (pluginFactory) { ++ return; + } +- if (trayIcons.isEmpty()) { +- sysTrayWindow = locateSystemTray(); +- if (sysTrayWindow != XNone) +- XSelectInput(display, sysTrayWindow, StructureNotifyMask); // track tray events ++#ifndef QT_NO_LIBRARY ++ QFactoryLoader loader(QSystemTrayIconSysFactoryInterface_iid, QLatin1String("/systemtrayicon")); ++ pluginFactory = qobject_cast(loader.instance(QLatin1String("default"))); ++ if (pluginFactory) { ++ // Set parent to ensure factory destructor is called when application ++ // is closed ++ pluginFactory->setParent(QCoreApplication::instance()); ++ connect(pluginFactory, SIGNAL(availableChanged(bool)), SLOT(refreshTrayIconPrivates())); + } +- trayIcons.append(this); +- setMouseTracking(true); +-#ifndef QT_NO_TOOLTIP +- setToolTip(q->toolTip()); +-#endif +- if (sysTrayWindow != XNone) +- addToTray(); ++#endif // QT_NO_LIBRARY + } + +-QSystemTrayIconSys::~QSystemTrayIconSys() ++QSystemTrayIconSysFactoryInterface *QSystemTrayIconSysFactory::factory() const + { +- trayIcons.removeAt(trayIcons.indexOf(this)); +- Display *display = QX11Info::display(); +- if (trayIcons.isEmpty()) { +- if (sysTrayWindow == XNone) +- return; +- if (display) +- XSelectInput(display, sysTrayWindow, 0); // stop tracking the tray +- sysTrayWindow = XNone; ++ if (!pluginFactory) { ++ const_cast(this)->loadPluginFactory(); + } +- if (colormap) +- XFreeColormap(display, colormap); ++ if (pluginFactory && pluginFactory->isAvailable()) { ++ return pluginFactory; ++ } ++ static QXEmbedSystemTrayIconSysFactory def; ++ return def.isAvailable() ? &def : 0; + } + +-void QSystemTrayIconSys::addToTray() ++void QSystemTrayIconSysFactory::refreshTrayIconPrivates() + { +- Q_ASSERT(sysTrayWindow != XNone); +- Display *display = QX11Info::display(); +- +- XVisualInfo *vi = getSysTrayVisualInfo(); +- if (vi && vi->visual) { +- Window root = RootWindow(display, vi->screen); +- Window p = root; +- if (QWidget *pw = parentWidget()) +- p = pw->effectiveWinId(); +- colormap = XCreateColormap(display, root, vi->visual, AllocNone); +- XSetWindowAttributes wsa; +- wsa.background_pixmap = 0; +- wsa.colormap = colormap; +- wsa.background_pixel = 0; +- wsa.border_pixel = 0; +- Window wid = XCreateWindow(display, p, -1, -1, 1, 1, +- 0, vi->depth, InputOutput, vi->visual, +- CWBackPixmap|CWBackPixel|CWBorderPixel|CWColormap, &wsa); +- create(wid); +- } else { +- XSetWindowBackgroundPixmap(display, winId(), ParentRelative); +- } +- +- // GNOME, NET WM Specification +- static Atom netwm_tray_atom = XInternAtom(display, "_NET_SYSTEM_TRAY_OPCODE", False); +- long l[5] = { CurrentTime, SYSTEM_TRAY_REQUEST_DOCK, static_cast(winId()), 0, 0 }; +- XEvent ev; +- memset(&ev, 0, sizeof(ev)); +- ev.xclient.type = ClientMessage; +- ev.xclient.window = sysTrayWindow; +- ev.xclient.message_type = netwm_tray_atom; +- ev.xclient.format = 32; +- memcpy((char *)&ev.xclient.data, (const char *) l, sizeof(l)); +- XSendEvent(display, sysTrayWindow, False, 0, &ev); +- setMinimumSize(22, 22); // required at least on GNOME +-} +- +-void QSystemTrayIconSys::updateIcon() +-{ +- update(); +-} +- +-void QSystemTrayIconSys::resizeEvent(QResizeEvent *re) +-{ +- QWidget::resizeEvent(re); +- updateIcon(); +-} +- +-void QSystemTrayIconSys::paintEvent(QPaintEvent*) +-{ +- QPainter p(this); +- if (!getSysTrayVisualInfo()) { +- const QRegion oldSystemClip = p.paintEngine()->systemClip(); +- const QRect clearedRect = oldSystemClip.boundingRect(); +- XClearArea(QX11Info::display(), winId(), clearedRect.x(), clearedRect.y(), +- clearedRect.width(), clearedRect.height(), False); +- QPaintEngine *pe = p.paintEngine(); +- pe->setSystemClip(clearedRect); +- q->icon().paint(&p, rect()); +- pe->setSystemClip(oldSystemClip); +- } else { +- p.setCompositionMode(QPainter::CompositionMode_Source); +- p.fillRect(rect(), Qt::transparent); +- p.setCompositionMode(QPainter::CompositionMode_SourceOver); +- q->icon().paint(&p, rect()); ++ Q_FOREACH(QSystemTrayIconPrivate *trayIconPrivate, trayIconPrivates) { ++ if (trayIconPrivate->sys) { ++ delete trayIconPrivate->sys; ++ trayIconPrivate->sys = 0; ++ } ++ // When visible is true, sys is usually not 0 but it can be 0 if the ++ // call to install_sys() failed. ++ if (trayIconPrivate->visible) { ++ trayIconPrivate->install_sys(); ++ } + } + } + +-void QSystemTrayIconSys::mousePressEvent(QMouseEvent *ev) ++void QSystemTrayIconSysFactory::registerSystemTrayIconPrivate(QSystemTrayIconPrivate* trayIconPrivate) + { +- QPoint globalPos = ev->globalPos(); +- if (ev->button() == Qt::RightButton && q->contextMenu()) +- q->contextMenu()->popup(globalPos); +- +- if (QBalloonTip::isBalloonVisible()) { +- emit q->messageClicked(); +- QBalloonTip::hideBalloon(); +- } +- +- if (ev->button() == Qt::LeftButton) +- emit q->activated(QSystemTrayIcon::Trigger); +- else if (ev->button() == Qt::RightButton) +- emit q->activated(QSystemTrayIcon::Context); +- else if (ev->button() == Qt::MidButton) +- emit q->activated(QSystemTrayIcon::MiddleClick); ++ trayIconPrivates.insert(trayIconPrivate); + } + +-void QSystemTrayIconSys::mouseDoubleClickEvent(QMouseEvent *ev) ++void QSystemTrayIconSysFactory::unregisterSystemTrayIconPrivate(QSystemTrayIconPrivate* trayIconPrivate) + { +- if (ev->button() == Qt::LeftButton) +- emit q->activated(QSystemTrayIcon::DoubleClick); ++ trayIconPrivates.remove(trayIconPrivate); + } + +-#ifndef QT_NO_WHEELEVENT +-void QSystemTrayIconSys::wheelEvent(QWheelEvent *e) ++QAbstractSystemTrayIconSys *QSystemTrayIconSysFactory::create(QSystemTrayIcon *trayIcon) const + { +- QApplication::sendEvent(q, e); ++ QSystemTrayIconSysFactoryInterface *f = factory(); ++ if (!f) { ++ qWarning("No systemtrayicon available"); ++ return 0; ++ } ++ return f->create(trayIcon); + } +-#endif + +-bool QSystemTrayIconSys::event(QEvent *e) ++bool QSystemTrayIconSysFactory::isAvailable() const + { +- if (e->type() == QEvent::ToolTip) { +- return QApplication::sendEvent(q, e); +- } +- return QWidget::event(e); ++ return factory(); + } + +-bool QSystemTrayIconSys::x11Event(XEvent *event) ++//////////////////////////////////////////////// ++QSystemTrayIconPrivate::~QSystemTrayIconPrivate() + { +- if (event->type == ReparentNotify) +- show(); +- return QWidget::x11Event(event); ++ qt_guiSystemTrayIconSysFactory()->unregisterSystemTrayIconPrivate(this); ++ delete sys; + } + +-//////////////////////////////////////////////////////////////////////////// + void QSystemTrayIconPrivate::install_sys() + { + Q_Q(QSystemTrayIcon); +- if (!sys) +- sys = new QSystemTrayIconSys(q); ++ if (!sys) { ++ // Register ourself even if create() fails: our "sys" will get created ++ // later by refreshTrayIconPrivates() if a systemtray becomes ++ // available. This situation can happen for applications which are ++ // started at login time, while the desktop itself is starting up. ++ qt_guiSystemTrayIconSysFactory()->registerSystemTrayIconPrivate(this); ++ sys = qt_guiSystemTrayIconSysFactory()->create(q); ++ if (!sys) { ++ return; ++ } ++ } ++ sys->updateVisibility(); + } + + QRect QSystemTrayIconPrivate::geometry_sys() const + { +- if (!sys) +- return QRect(); +- return QRect(sys->mapToGlobal(QPoint(0, 0)), sys->size()); ++ if (!sys || !visible) ++ return QRect(); ++ return sys->geometry(); + } + + void QSystemTrayIconPrivate::remove_sys() +@@ -350,35 +161,35 @@ void QSystemTrayIconPrivate::remove_sys( + if (!sys) + return; + QBalloonTip::hideBalloon(); +- sys->hide(); // this should do the trick, but... +- delete sys; // wm may resize system tray only for DestroyEvents +- sys = 0; ++ sys->updateVisibility(); + } + + void QSystemTrayIconPrivate::updateIcon_sys() + { +- if (!sys) ++ if (!sys || !visible) + return; + sys->updateIcon(); + } + + void QSystemTrayIconPrivate::updateMenu_sys() + { +- ++ if (!sys || !visible) ++ return; ++ sys->updateMenu(); + } + + void QSystemTrayIconPrivate::updateToolTip_sys() + { +- if (!sys) ++ if (!sys || !visible) + return; + #ifndef QT_NO_TOOLTIP +- sys->setToolTip(toolTip); ++ sys->updateToolTip(); + #endif + } + + bool QSystemTrayIconPrivate::isSystemTrayAvailable_sys() + { +- return QSystemTrayIconSys::locateSystemTray() != XNone; ++ return qt_guiSystemTrayIconSysFactory()->isAvailable(); + } + + bool QSystemTrayIconPrivate::supportsMessages_sys() +@@ -389,12 +200,9 @@ bool QSystemTrayIconPrivate::supportsMes + void QSystemTrayIconPrivate::showMessage_sys(const QString &message, const QString &title, + QSystemTrayIcon::MessageIcon icon, int msecs) + { +- if (!sys) ++ if (!sys || !visible) + return; +- QPoint g = sys->mapToGlobal(QPoint(0, 0)); +- QBalloonTip::showBalloon(icon, message, title, sys->q, +- QPoint(g.x() + sys->width()/2, g.y() + sys->height()/2), +- msecs); ++ sys->showMessage(message, title, icon, msecs); + } + + QT_END_NAMESPACE +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11.cpp.systemtrayicon qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11.cpp +--- qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11.cpp.systemtrayicon 2014-03-31 18:16:39.709974914 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11.cpp 2014-03-31 18:16:39.709974914 -0500 +@@ -0,0 +1,469 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtGui module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** GNU Lesser General Public License Usage ++** 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, Nokia gives you certain additional ++** rights. These rights are described in the Nokia 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. ++** ++** Other Usage ++** Alternatively, this file may be used in accordance with the terms and ++** conditions contained in a signed written agreement between you and Nokia. ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++#include "qxembedsystemtrayicon_x11_p.h" ++ ++#ifndef QT_NO_SYSTEMTRAYICON ++ ++#include "private/qt_x11_p.h" ++#include "qapplication.h" ++#include "qevent.h" ++#include "qlist.h" ++#include "qmenu.h" ++#include "qpainter.h" ++#include "qpaintengine.h" ++#include "qsystemtrayicon_p.h" ++#include "qx11info_x11.h" ++ ++QT_BEGIN_INCLUDE_NAMESPACE ++#include ++#include ++#include ++#include ++QT_END_INCLUDE_NAMESPACE ++ ++QT_BEGIN_NAMESPACE ++ ++class QSystemTrayIconWidget : public QWidget ++{ ++public: ++ QSystemTrayIconWidget(QSystemTrayIcon *q, QXEmbedSystemTrayIconSys *s); ++ ~QSystemTrayIconWidget(); ++ ++ static Window locateSystemTray(); ++ ++protected: ++ void paintEvent(QPaintEvent *pe); ++ void resizeEvent(QResizeEvent *re); ++ bool x11Event(XEvent *event); ++ void mousePressEvent(QMouseEvent *event); ++ void mouseDoubleClickEvent(QMouseEvent *event); ++#ifndef QT_NO_WHEELEVENT ++ void wheelEvent(QWheelEvent *event); ++#endif ++ bool event(QEvent *e); ++ ++private: ++ enum { ++ SYSTEM_TRAY_REQUEST_DOCK = 0, ++ SYSTEM_TRAY_BEGIN_MESSAGE = 1, ++ SYSTEM_TRAY_CANCEL_MESSAGE =2 ++ }; ++ ++ void addToTray(); ++ static XVisualInfo* getSysTrayVisualInfo(); ++ ++ static Window sysTrayWindow; ++ static QList trayIcons; ++ static QCoreApplication::EventFilter oldEventFilter; ++ static bool sysTrayTracker(void *message, long *result); ++ static Atom sysTraySelection; ++ static XVisualInfo sysTrayVisual; ++ ++ QSystemTrayIcon *q; ++ QXEmbedSystemTrayIconSys *sys; ++ Colormap colormap; ++}; ++ ++Window QSystemTrayIconWidget::sysTrayWindow = XNone; ++QList QSystemTrayIconWidget::trayIcons; ++QCoreApplication::EventFilter QSystemTrayIconWidget::oldEventFilter = 0; ++Atom QSystemTrayIconWidget::sysTraySelection = XNone; ++XVisualInfo QSystemTrayIconWidget::sysTrayVisual = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; ++ ++QSystemTrayIconWidget::QSystemTrayIconWidget(QSystemTrayIcon* q, QXEmbedSystemTrayIconSys* sys) ++: QWidget(0, Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint) ++, q(q) ++, sys(sys) ++, colormap(0) ++{ ++ setAttribute(Qt::WA_AlwaysShowToolTips); ++ setAttribute(Qt::WA_QuitOnClose, false); ++ setAttribute(Qt::WA_NoSystemBackground, true); ++ setAttribute(Qt::WA_PaintOnScreen); ++ setMouseTracking(true); ++#ifndef QT_NO_TOOLTIP ++ setToolTip(q->toolTip()); ++#endif ++ ++ static bool eventFilterAdded = false; ++ Display *display = QX11Info::display(); ++ if (!eventFilterAdded) { ++ oldEventFilter = qApp->setEventFilter(sysTrayTracker); ++ eventFilterAdded = true; ++ Window root = QX11Info::appRootWindow(); ++ XWindowAttributes attr; ++ XGetWindowAttributes(display, root, &attr); ++ if ((attr.your_event_mask & StructureNotifyMask) != StructureNotifyMask) { ++ (void) QApplication::desktop(); // lame trick to ensure our event mask is not overridden ++ XSelectInput(display, root, attr.your_event_mask | StructureNotifyMask); // for MANAGER selection ++ } ++ } ++ if (trayIcons.isEmpty()) { ++ sysTrayWindow = locateSystemTray(); ++ if (sysTrayWindow != XNone) ++ XSelectInput(display, sysTrayWindow, StructureNotifyMask); // track tray events ++ } ++ trayIcons.append(this); ++ if (sysTrayWindow != XNone) ++ addToTray(); ++} ++ ++QSystemTrayIconWidget::~QSystemTrayIconWidget() ++{ ++ trayIcons.removeAt(trayIcons.indexOf(this)); ++ Display *display = QX11Info::display(); ++ if (trayIcons.isEmpty()) { ++ if (sysTrayWindow == XNone) ++ return; ++ if (display) ++ XSelectInput(display, sysTrayWindow, 0); // stop tracking the tray ++ sysTrayWindow = XNone; ++ } ++ if (colormap) ++ XFreeColormap(display, colormap); ++} ++ ++void QSystemTrayIconWidget::resizeEvent(QResizeEvent *re) ++{ ++ QWidget::resizeEvent(re); ++ update(); ++} ++ ++void QSystemTrayIconWidget::paintEvent(QPaintEvent*) ++{ ++ QPainter p(this); ++ if (!getSysTrayVisualInfo()) { ++ const QRegion oldSystemClip = p.paintEngine()->systemClip(); ++ const QRect clearedRect = oldSystemClip.boundingRect(); ++ XClearArea(QX11Info::display(), winId(), clearedRect.x(), clearedRect.y(), ++ clearedRect.width(), clearedRect.height(), False); ++ QPaintEngine *pe = p.paintEngine(); ++ pe->setSystemClip(clearedRect); ++ q->icon().paint(&p, rect()); ++ pe->setSystemClip(oldSystemClip); ++ } else { ++ p.setCompositionMode(QPainter::CompositionMode_Source); ++ p.fillRect(rect(), Qt::transparent); ++ p.setCompositionMode(QPainter::CompositionMode_SourceOver); ++ q->icon().paint(&p, rect()); ++ } ++} ++ ++void QSystemTrayIconWidget::mousePressEvent(QMouseEvent *ev) ++{ ++ QPoint globalPos = ev->globalPos(); ++ if (ev->button() == Qt::RightButton && q->contextMenu()) ++ q->contextMenu()->popup(globalPos); ++ ++ if (QBalloonTip::isBalloonVisible()) { ++ QMetaObject::invokeMethod(q, "messageClicked"); ++ QBalloonTip::hideBalloon(); ++ } ++ ++ if (ev->button() == Qt::LeftButton) ++ qtsystray_sendActivated(q, QSystemTrayIcon::Trigger); ++ else if (ev->button() == Qt::RightButton) ++ qtsystray_sendActivated(q, QSystemTrayIcon::Context); ++ else if (ev->button() == Qt::MidButton) ++ qtsystray_sendActivated(q, QSystemTrayIcon::MiddleClick); ++} ++ ++void QSystemTrayIconWidget::mouseDoubleClickEvent(QMouseEvent *ev) ++{ ++ if (ev->button() == Qt::LeftButton) ++ qtsystray_sendActivated(q, QSystemTrayIcon::DoubleClick); ++} ++ ++#ifndef QT_NO_WHEELEVENT ++void QSystemTrayIconWidget::wheelEvent(QWheelEvent *e) ++{ ++ sys->sendWheelEventToTrayIcon(e->delta(), e->orientation()); ++} ++#endif ++ ++bool QSystemTrayIconWidget::event(QEvent *e) ++{ ++ if (e->type() == QEvent::ToolTip) { ++ sys->sendToolTipEventToTrayIcon(); ++ } ++ return QWidget::event(e); ++} ++ ++bool QSystemTrayIconWidget::x11Event(XEvent *event) ++{ ++ if (event->type == ReparentNotify) ++ show(); ++ return QWidget::x11Event(event); ++} ++ ++// Locate the system tray ++Window QSystemTrayIconWidget::locateSystemTray() ++{ ++ Display *display = QX11Info::display(); ++ if (sysTraySelection == XNone) { ++ int screen = QX11Info::appScreen(); ++ QString net_sys_tray = QString::fromLatin1("_NET_SYSTEM_TRAY_S%1").arg(screen); ++ sysTraySelection = XInternAtom(display, net_sys_tray.toLatin1(), False); ++ } ++ ++ return XGetSelectionOwner(QX11Info::display(), sysTraySelection); ++} ++ ++XVisualInfo* QSystemTrayIconWidget::getSysTrayVisualInfo() ++{ ++ Display *display = QX11Info::display(); ++ ++ if (!sysTrayVisual.visual) { ++ Window win = locateSystemTray(); ++ if (win != XNone) { ++ Atom actual_type; ++ int actual_format; ++ ulong nitems, bytes_remaining; ++ uchar *data = 0; ++ int result = XGetWindowProperty(display, win, ATOM(_NET_SYSTEM_TRAY_VISUAL), 0, 1, ++ False, XA_VISUALID, &actual_type, ++ &actual_format, &nitems, &bytes_remaining, &data); ++ VisualID vid = 0; ++ if (result == Success && data && actual_type == XA_VISUALID && actual_format == 32 && ++ nitems == 1 && bytes_remaining == 0) ++ vid = *(VisualID*)data; ++ if (data) ++ XFree(data); ++ if (vid == 0) ++ return 0; ++ ++ uint mask = VisualIDMask; ++ XVisualInfo *vi, rvi; ++ int count; ++ rvi.visualid = vid; ++ vi = XGetVisualInfo(display, mask, &rvi, &count); ++ if (vi) { ++ sysTrayVisual = vi[0]; ++ XFree((char*)vi); ++ } ++ if (sysTrayVisual.depth != 32) ++ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); ++ } ++ } ++ ++ return sysTrayVisual.visual ? &sysTrayVisual : 0; ++} ++ ++bool QSystemTrayIconWidget::sysTrayTracker(void *message, long *result) ++{ ++ bool retval = false; ++ if (QSystemTrayIconWidget::oldEventFilter) ++ retval = QSystemTrayIconWidget::oldEventFilter(message, result); ++ ++ if (trayIcons.isEmpty()) ++ return retval; ++ ++ Display *display = QX11Info::display(); ++ XEvent *ev = (XEvent *)message; ++ if (ev->type == DestroyNotify && ev->xany.window == sysTrayWindow) { ++ sysTrayWindow = locateSystemTray(); ++ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); ++ for (int i = 0; i < trayIcons.count(); i++) { ++ if (sysTrayWindow == XNone) { ++ QBalloonTip::hideBalloon(); ++ trayIcons[i]->hide(); // still no luck ++ trayIcons[i]->destroy(); ++ trayIcons[i]->create(); ++ } else ++ trayIcons[i]->addToTray(); // add it to the new tray ++ } ++ retval = true; ++ } else if (ev->type == ClientMessage && sysTrayWindow == XNone) { ++ static Atom manager_atom = XInternAtom(display, "MANAGER", False); ++ XClientMessageEvent *cm = (XClientMessageEvent *)message; ++ if ((cm->message_type == manager_atom) && ((Atom)cm->data.l[1] == sysTraySelection)) { ++ sysTrayWindow = cm->data.l[2]; ++ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); ++ XSelectInput(display, sysTrayWindow, StructureNotifyMask); ++ for (int i = 0; i < trayIcons.count(); i++) { ++ trayIcons[i]->addToTray(); ++ } ++ retval = true; ++ } ++ } else if (ev->type == PropertyNotify && ev->xproperty.atom == ATOM(_NET_SYSTEM_TRAY_VISUAL) && ++ ev->xproperty.window == sysTrayWindow) { ++ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); ++ for (int i = 0; i < trayIcons.count(); i++) { ++ trayIcons[i]->addToTray(); ++ } ++ } ++ ++ return retval; ++} ++ ++void QSystemTrayIconWidget::addToTray() ++{ ++ Q_ASSERT(sysTrayWindow != XNone); ++ Display *display = QX11Info::display(); ++ ++ XVisualInfo *vi = getSysTrayVisualInfo(); ++ if (vi && vi->visual) { ++ Window root = RootWindow(display, vi->screen); ++ Window p = root; ++ if (QWidget *pw = parentWidget()) ++ p = pw->effectiveWinId(); ++ colormap = XCreateColormap(display, root, vi->visual, AllocNone); ++ XSetWindowAttributes wsa; ++ wsa.background_pixmap = 0; ++ wsa.colormap = colormap; ++ wsa.background_pixel = 0; ++ wsa.border_pixel = 0; ++ Window wid = XCreateWindow(display, p, -1, -1, 1, 1, ++ 0, vi->depth, InputOutput, vi->visual, ++ CWBackPixmap|CWBackPixel|CWBorderPixel|CWColormap, &wsa); ++ create(wid); ++ } else { ++ XSetWindowBackgroundPixmap(display, winId(), ParentRelative); ++ } ++ ++ // GNOME, NET WM Specification ++ static Atom netwm_tray_atom = XInternAtom(display, "_NET_SYSTEM_TRAY_OPCODE", False); ++ long l[5] = { CurrentTime, SYSTEM_TRAY_REQUEST_DOCK, static_cast(winId()), 0, 0 }; ++ XEvent ev; ++ memset(&ev, 0, sizeof(ev)); ++ ev.xclient.type = ClientMessage; ++ ev.xclient.window = sysTrayWindow; ++ ev.xclient.message_type = netwm_tray_atom; ++ ev.xclient.format = 32; ++ memcpy((char *)&ev.xclient.data, (const char *) l, sizeof(l)); ++ XSendEvent(display, sysTrayWindow, False, 0, &ev); ++ setMinimumSize(22, 22); // required at least on GNOME ++} ++ ++//////////////////////////////////////////////////////////////////////////// ++QXEmbedSystemTrayIconSys::QXEmbedSystemTrayIconSys(QSystemTrayIcon *q) ++: QAbstractSystemTrayIconSys(q) ++, widget(0) ++{ ++} ++ ++QXEmbedSystemTrayIconSys::~QXEmbedSystemTrayIconSys() ++{ ++ delete widget; ++} ++ ++QRect QXEmbedSystemTrayIconSys::geometry() const ++{ ++ if (!widget) ++ return QRect(); ++ return QRect(widget->mapToGlobal(QPoint(0, 0)), widget->size()); ++} ++ ++void QXEmbedSystemTrayIconSys::updateIcon() ++{ ++ if (!widget) ++ return; ++ widget->update(); ++} ++ ++void QXEmbedSystemTrayIconSys::updateToolTip() ++{ ++ if (!widget) ++ return; ++ widget->setToolTip(trayIcon->toolTip()); ++} ++ ++void QXEmbedSystemTrayIconSys::showMessage(const QString &message, const QString &title, ++ QSystemTrayIcon::MessageIcon icon, int msecs) ++{ ++ if (!widget) ++ return; ++ QPoint point = geometry().center(); ++ QBalloonTip::showBalloon(icon, message, title, trayIcon, point, msecs); ++} ++ ++void QXEmbedSystemTrayIconSys::updateVisibility() ++{ ++ bool visible = trayIcon->isVisible(); ++ if (visible && !widget) ++ widget = new QSystemTrayIconWidget(trayIcon, this); ++ else if (!visible && widget) { ++ delete widget; ++ widget = 0; ++ } ++} ++ ++void QXEmbedSystemTrayIconSys::sendToolTipEventToTrayIcon() ++{ ++#ifndef QT_NO_TOOLTIP ++ // Pass the event through QSystemTrayIcon so that it gets a chance to ++ // update the tooltip, then asks widget to show the tooltip ++ Q_ASSERT(widget); ++ QPoint globalPos = QCursor::pos(); ++ QPoint pos = widget->mapFromGlobal(globalPos); ++ QHelpEvent event(QEvent::ToolTip, pos, globalPos); ++ QApplication::sendEvent(trayIcon, &event); ++#endif ++} ++ ++void QXEmbedSystemTrayIconSys::sendWheelEventToTrayIcon(int delta, Qt::Orientation orientation) ++{ ++#ifndef QT_NO_WHEELEVENT ++ Q_ASSERT(widget); ++ QPoint globalPos = QCursor::pos(); ++ QPoint pos = widget->mapFromGlobal(globalPos); ++ QWheelEvent event(pos, globalPos, delta, Qt::NoButton, Qt::NoModifier, orientation); ++ QApplication::sendEvent(trayIcon, &event); ++#endif ++} ++ ++void QXEmbedSystemTrayIconSys::updateMenu() ++{ ++} ++ ++///////////////////////////////////////////////////////////// ++QAbstractSystemTrayIconSys * QXEmbedSystemTrayIconSysFactory::create(QSystemTrayIcon *icon) ++{ ++ return new QXEmbedSystemTrayIconSys(icon); ++} ++ ++bool QXEmbedSystemTrayIconSysFactory::isAvailable() const ++{ ++ return QSystemTrayIconWidget::locateSystemTray() != XNone; ++} ++ ++QT_END_NAMESPACE ++#endif //QT_NO_SYSTEMTRAYICON +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11_p.h.systemtrayicon qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11_p.h +--- qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11_p.h.systemtrayicon 2014-03-31 18:16:39.709974914 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11_p.h 2014-03-31 18:16:39.709974914 -0500 +@@ -0,0 +1,104 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtGui module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** GNU Lesser General Public License Usage ++** 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, Nokia gives you certain additional ++** rights. These rights are described in the Nokia 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. ++** ++** Other Usage ++** Alternatively, this file may be used in accordance with the terms and ++** conditions contained in a signed written agreement between you and Nokia. ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#ifndef QXEMBEDSYSTEMTRAYICON_X11_P_H ++#define QXEMBEDSYSTEMTRAYICON_X11_P_H ++ ++// ++// W A R N I N G ++// ------------- ++// ++// This file is not part of the Qt API. It exists for the convenience ++// of a number of Qt sources files. This header file may change from ++// version to version without notice, or even be removed. ++// ++// We mean it. ++// ++ ++#ifndef QT_NO_SYSTEMTRAYICON ++ ++#include "qabstractsystemtrayiconsys_p.h" ++ ++QT_BEGIN_NAMESPACE ++ ++class QSystemTrayIconWidget; ++ ++class QXEmbedSystemTrayIconSys : public QAbstractSystemTrayIconSys ++{ ++public: ++ QXEmbedSystemTrayIconSys(QSystemTrayIcon *); ++ ~QXEmbedSystemTrayIconSys(); ++ ++ QRect geometry() const; ++ ++ void updateVisibility(); ++ ++ void updateIcon(); ++ ++ void updateToolTip(); ++ ++ void updateMenu(); ++ ++ void showMessage(const QString &message, const QString &title, ++ QSystemTrayIcon::MessageIcon icon, int msecs); ++ ++private: ++ friend class QSystemTrayIconWidget; ++ QSystemTrayIconWidget *widget; ++ ++ void sendToolTipEventToTrayIcon(); ++ ++ void sendWheelEventToTrayIcon(int delta, Qt::Orientation orientation); ++}; ++ ++struct QXEmbedSystemTrayIconSysFactory : public QSystemTrayIconSysFactoryInterface ++{ ++ QAbstractSystemTrayIconSys * create(QSystemTrayIcon *trayIcon); ++ bool isAvailable() const; ++}; ++ ++ ++QT_END_NAMESPACE ++ ++#endif // QT_NO_SYSTEMTRAYICON ++ ++#endif // QXEMBEDSYSTEMTRAYICON_X11_P_H ++ +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/util/util.pri.systemtrayicon qt-everywhere-opensource-src-4.8.6/src/gui/util/util.pri +--- qt-everywhere-opensource-src-4.8.6/src/gui/util/util.pri.systemtrayicon 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/util.pri 2014-03-31 18:16:39.710974903 -0500 +@@ -29,8 +29,13 @@ wince* { + } + + unix:x11 { ++ HEADERS += \ ++ util/qabstractsystemtrayiconsys_p.h \ ++ util/qxembedsystemtrayicon_x11_p.h + SOURCES += \ +- util/qsystemtrayicon_x11.cpp ++ util/qabstractsystemtrayiconsys.cpp \ ++ util/qsystemtrayicon_x11.cpp \ ++ util/qxembedsystemtrayicon_x11.cpp + } + + embedded|qpa { diff --git a/qt.spec b/qt.spec index 0b715ba..3900480 100644 --- a/qt.spec +++ b/qt.spec @@ -21,18 +21,20 @@ # support qtchooser %define qtchooser 1 +%define pre rc1 + Summary: Qt toolkit Name: qt Epoch: 1 -Version: 4.8.5 -Release: 24%{?dist} +Version: 4.8.6 +Release: 0.1.%{pre}%{?dist} # See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details License: (LGPLv2 with exceptions or GPLv3 with exceptions) and ASL 2.0 and BSD and FTL and MIT Group: System Environment/Libraries Url: http://qt-project.org/ %if 0%{?pre:1} -Source0: http://download.qt-project.org/snapshots/qt/4.8/%{version}-%{pre}/qt-everywhere-opensource-src-%{version}-%{pre}.tar.gz +Source0: http://download.qt-project.org/development_releases/qt/4.8/%{version}-%{pre}/qt-everywhere-opensource-src-%{version}-%{pre}.tar.gz %else Source0: http://download.qt-project.org/official_releases/qt/4.8/%{version}/qt-everywhere-opensource-src-%{version}.tar.gz %endif @@ -101,7 +103,7 @@ Patch64: qt-everywhere-opensource-src-4.8.5-QTBUG-14467.patch Patch65: qt-everywhere-opensource-src-4.8.0-tp-qtreeview-kpackagekit-crash.patch # fix the outdated standalone copy of JavaScriptCore -Patch67: qt-everywhere-opensource-src-4.8.0-beta1-s390.patch +Patch67: qt-everywhere-opensource-src-4.8.6-s390.patch # https://bugs.webkit.org/show_bug.cgi?id=63941 # -Wall + -Werror = fail @@ -123,9 +125,6 @@ Patch76: qt-everywhere-opensource-src-4.8.0-s390-atomic.patch # don't spam in release/no_debug mode if libicu is not present at runtime Patch77: qt-everywhere-opensource-src-4.8.3-icu_no_debug.patch -# gcc doesn't support flag -fuse-ld=gold -Patch80: qt-everywhere-opensource-src-4.8.0-ld-gold.patch - # https://bugzilla.redhat.com/show_bug.cgi?id=810500 Patch81: qt-everywhere-opensource-src-4.8.2--assistant-crash.patch @@ -141,23 +140,14 @@ Patch83: qt-4.8-poll.patch # fix QTBUG-35459 (too low entityCharacterLimit=1024 for CVE-2013-4549) Patch84: qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch -# fix QTBUG-35460 (error message for CVE-2013-4549 is misspelled) -Patch85: qt-everywhere-opensource-src-4.8.5-QTBUG-35460.patch - # systemtrayicon plugin support (for appindicators) -Patch86: kubuntu_14_systemtrayicon.diff +Patch86: qt-everywhere-opensource-src-4.8.6-systemtrayicon.patch # upstream patches -# http://codereview.qt-project.org/#change,22006 -Patch100: qt-everywhere-opensource-src-4.8.1-qtgahandle.patch # backported from Qt5 (essentially) # http://bugzilla.redhat.com/702493 # https://bugreports.qt-project.org/browse/QTBUG-5545 Patch102: qt-everywhere-opensource-src-4.8.5-qgtkstyle_disable_gtk_theme_check.patch -# revert fix for QTBUG-15319, fixes regression QTBUG-32908 -# http://bugzilla.redhat.com/968367 -# https://bugreports.qt-project.org/browse/QTBUG-32908 -Patch103: QTBUG-15319-fix-shortcuts-with-secondary-Xkb-layout.patch # workaround for MOC issues with Boost headers (#756395) # https://bugreports.qt-project.org/browse/QTBUG-22829 Patch113: qt-everywhere-opensource-src-4.8.5-QTBUG-22829.patch @@ -168,12 +158,6 @@ Patch180: qt-aarch64.patch Patch181: qt-everywhere-opensource-src-4.8-ppc64le_support.patch ## upstream git -# related prereq patch to 0162 below -Patch1147: 0147-Disallow-deep-or-widely-nested-entity-references.patch -# CVE-2013-4549 -# http://lists.qt-project.org/pipermail/announce/2013-December/000036.html -# https://codereview.qt-project.org/#change,71010 -Patch1162: 0162-Fully-expand-entities-to-ensure-deep-or-widely-neste.patch ## security patches @@ -529,26 +513,20 @@ rm -fv mkspecs/linux-g++*/qmake.conf.multilib-optflags %patch74 -p1 -b .tds_no_strict_aliasing %patch76 -p1 -b .s390-atomic %patch77 -p1 -b .icu_no_debug -%patch80 -p1 -b .ld.gold %patch81 -p1 -b .assistant-crash %patch82 -p1 -b .QTBUG-4862 %patch83 -p1 -b .poll # upstream patches -%patch100 -p1 -b .QTgaHandler %patch102 -p1 -b .qgtkstyle_disable_gtk_theme_check -%patch103 -p1 -R -b .QTBUG-15319 %patch113 -p1 -b .QTBUG-22829 %patch180 -p1 -b .aarch64 %patch181 -p1 -b .ppc64le # security fixes -%patch1147 -p1 -b .0147 -%patch1162 -p1 -b .0162 # regression fixes for the security fixes %patch84 -p1 -b .QTBUG-35459 -%patch85 -p1 -b .QTBUG-35460 %patch86 -p1 -b .systemtrayicon # drop -fexceptions from $RPM_OPT_FLAGS @@ -562,15 +540,10 @@ RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS | sed 's|-fexceptions||g'` %endif # https://bugzilla.redhat.com/478481 -%ifarch x86_64 +%ifarch x86_64 aarch64 %define platform linux-g++ %endif -# qt mkspecs makes assumptions about CFLAGS where it should distro defaults -%ifarch aarch64 -%define platform linux-g++-aarch64 -%endif - sed -i -e "s|-O2|$RPM_OPT_FLAGS|g" \ mkspecs/%{platform}/qmake.conf @@ -907,7 +880,8 @@ rm -frv %{buildroot}%{_qt4_prefix}/tests/ %find_lang assistant --with-qt --without-mo %find_lang qt_help --with-qt --without-mo %find_lang qtconfig --with-qt --without-mo -cat assistant.lang qt_help.lang qtconfig.lang >qt-x11.lang +%find_lang qtscript --with-qt --without-mo +cat assistant.lang qt_help.lang qtconfig.lang qtscript.lang >qt-x11.lang %find_lang designer --with-qt --without-mo %find_lang linguist --with-qt --without-mo @@ -1246,6 +1220,10 @@ fi %changelog +* Tue Apr 01 2014 Rex Dieter +- 4.8.6-0.1.rc1 +- 4.8.6-rc1 + * Wed Mar 26 2014 Rex Dieter 4.8.5-24 - support ppc64le arch (#1081216) diff --git a/sources b/sources index 13d7584..808ee22 100644 --- a/sources +++ b/sources @@ -1,3 +1 @@ -d9f511e4b51983b4e10eb58b320416d5 hi128-app-qt4-logo.png -6dcc0672ff9e60a6b83f95c5f42bec5b hi48-app-qt4-logo.png -1864987bdbb2f58f8ae8b350dfdbe133 qt-everywhere-opensource-src-4.8.5.tar.gz +f5a9181d916abf83345915ed31dcaccc qt-everywhere-opensource-src-4.8.6-rc1.tar.gz