diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2015-03-31 18:47:56 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2015-04-01 09:10:26 +0200 |
commit | 0e6ee136c91432d4ceeeda64e5a5fa88231398d4 (patch) | |
tree | 6060e002af2900007895f6efa757989dd4c190c9 /src/platformsupport | |
parent | 418869d9158ea5cd998ba30778b0b7173b48161b (diff) | |
parent | 17294c5e4d15d5776f6e414b03671a4a9ed4993d (diff) |
Merge remote-tracking branch 'origin/5.5' into dev
Conflicts:
src/testlib/qtestblacklist.cpp
src/widgets/accessible/qaccessiblewidgets.cpp
Change-Id: If032adb9296428f62384ed835dbf41ee7a0b886c
Diffstat (limited to 'src/platformsupport')
10 files changed, 86 insertions, 64 deletions
diff --git a/src/platformsupport/dbusmenu/qdbusmenutypes.cpp b/src/platformsupport/dbusmenu/qdbusmenutypes.cpp index cacc9817de..73957eacfe 100644 --- a/src/platformsupport/dbusmenu/qdbusmenutypes.cpp +++ b/src/platformsupport/dbusmenu/qdbusmenutypes.cpp @@ -87,26 +87,32 @@ uint QDBusMenuLayoutItem::populate(int id, int depth, const QStringList &propert m_properties.insert(QLatin1String("children-display"), QLatin1String("submenu")); Q_FOREACH (const QDBusPlatformMenu *menu, QDBusPlatformMenu::topLevelMenus()) { if (menu) - Q_FOREACH (const QDBusPlatformMenuItem *item, menu->items()) { - QDBusMenuLayoutItem child; - child.populate(item, depth - 1, propertyNames); - m_children << child; - } + populate(menu, depth, propertyNames); } - } else { - // TODO insert menu properties (name-value pairs) + return 1; // revision } - QDBusPlatformMenu *menu = QDBusPlatformMenu::byId(id); - if (depth != 0 && menu) { - Q_FOREACH (QDBusPlatformMenuItem *item, menu->items()) { - QDBusMenuLayoutItem child; - child.populate(item, depth - 1, propertyNames); - m_children << child; - } + + const QDBusPlatformMenu *menu = QDBusPlatformMenu::byId(id); + if (!menu) { + QDBusPlatformMenuItem *item = QDBusPlatformMenuItem::byId(id); + if (item) + menu = static_cast<const QDBusPlatformMenu *>(item->menu()); } + if (depth != 0 && menu) + populate(menu, depth, propertyNames); if (menu) return menu->revision(); - return 1; + + return 1; // revision +} + +void QDBusMenuLayoutItem::populate(const QDBusPlatformMenu *menu, int depth, const QStringList &propertyNames) +{ + Q_FOREACH (QDBusPlatformMenuItem *item, menu->items()) { + QDBusMenuLayoutItem child; + child.populate(item, depth - 1, propertyNames); + m_children << child; + } } void QDBusMenuLayoutItem::populate(const QDBusPlatformMenuItem *item, int depth, const QStringList &propertyNames) @@ -116,7 +122,6 @@ void QDBusMenuLayoutItem::populate(const QDBusPlatformMenuItem *item, int depth, m_id = item->dbusID(); QDBusMenuItem proxy(item); m_properties = proxy.m_properties; - // TODO populate m_children } const QDBusArgument &operator<<(QDBusArgument &arg, const QDBusMenuLayoutItem &item) diff --git a/src/platformsupport/dbusmenu/qdbusmenutypes_p.h b/src/platformsupport/dbusmenu/qdbusmenutypes_p.h index c42aef0b69..28d16b32d5 100644 --- a/src/platformsupport/dbusmenu/qdbusmenutypes_p.h +++ b/src/platformsupport/dbusmenu/qdbusmenutypes_p.h @@ -82,6 +82,7 @@ class QDBusMenuLayoutItem { public: uint populate(int id, int depth, const QStringList &propertyNames); + void populate(const QDBusPlatformMenu *menu, int depth, const QStringList &propertyNames); void populate(const QDBusPlatformMenuItem *item, int depth, const QStringList &propertyNames); int m_id; diff --git a/src/platformsupport/dbusmenu/qdbusplatformmenu.cpp b/src/platformsupport/dbusmenu/qdbusplatformmenu.cpp index 581daf97ac..93c822cefb 100644 --- a/src/platformsupport/dbusmenu/qdbusplatformmenu.cpp +++ b/src/platformsupport/dbusmenu/qdbusplatformmenu.cpp @@ -43,6 +43,7 @@ Q_LOGGING_CATEGORY(qLcMenu, "qt.qpa.menu") static int nextDBusID = 1; QHash<int, QDBusPlatformMenu *> menusByID; QHash<int, QDBusPlatformMenuItem *> menuItemsByID; +QList<QDBusPlatformMenu *> QDBusPlatformMenu::m_topLevelMenus; QDBusPlatformMenuItem::QDBusPlatformMenuItem(quintptr tag) : m_tag(tag ? tag : reinterpret_cast<quintptr>(this)) // QMenu will overwrite this later @@ -144,6 +145,8 @@ QDBusPlatformMenu::QDBusPlatformMenu(quintptr tag) , m_revision(0) { menusByID.insert(m_dbusID, this); + // Assume it's top-level until we find out otherwise + m_topLevelMenus << this; } QDBusPlatformMenu::~QDBusPlatformMenu() @@ -162,6 +165,9 @@ void QDBusPlatformMenu::insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMen else m_items.insert(idx, item); m_itemsByTag.insert(item->tag(), item); + // If a menu is found as a submenu under an item, we know that it's not a top-level menu. + if (item->menu()) + m_topLevelMenus.removeOne(const_cast<QDBusPlatformMenu *>(static_cast<const QDBusPlatformMenu *>(item->menu()))); } void QDBusPlatformMenu::removeMenuItem(QPlatformMenuItem *menuItem) @@ -188,12 +194,6 @@ QDBusPlatformMenu *QDBusPlatformMenu::byId(int id) return menusByID[id]; } -QList<QDBusPlatformMenu *> QDBusPlatformMenu::topLevelMenus() -{ - // TODO just the top-level menus, not all menus - return menusByID.values(); -} - void QDBusPlatformMenu::emitUpdated() { emit updated(++m_revision, m_dbusID); diff --git a/src/platformsupport/dbusmenu/qdbusplatformmenu_p.h b/src/platformsupport/dbusmenu/qdbusplatformmenu_p.h index c211a75419..2519533e32 100644 --- a/src/platformsupport/dbusmenu/qdbusplatformmenu_p.h +++ b/src/platformsupport/dbusmenu/qdbusplatformmenu_p.h @@ -133,6 +133,8 @@ public: void setFont(const QFont &font) Q_DECL_OVERRIDE { Q_UNUSED(font); } void setMenuType(MenuType type) Q_DECL_OVERRIDE { Q_UNUSED(type); } + int dbusID() const { return m_dbusID; } + void showPopup(const QWindow *parentWindow, const QRect &targetRect, const QPlatformMenuItem *item) Q_DECL_OVERRIDE { Q_UNUSED(parentWindow); @@ -152,9 +154,9 @@ public: bool operator==(const QDBusPlatformMenu& other) { return m_tag == other.m_tag; } static QDBusPlatformMenu* byId(int id); - static QList<QDBusPlatformMenu *> topLevelMenus(); + static QList<QDBusPlatformMenu *> topLevelMenus() { return m_topLevelMenus; } - uint revision() { return m_revision; } + uint revision() const { return m_revision; } void emitUpdated(); @@ -173,6 +175,7 @@ private: uint m_revision; QHash<quintptr, QDBusPlatformMenuItem *> m_itemsByTag; QList<QDBusPlatformMenuItem *> m_items; + static QList<QDBusPlatformMenu *> m_topLevelMenus; }; QT_END_NAMESPACE diff --git a/src/platformsupport/dbustray/qdbustrayicon.cpp b/src/platformsupport/dbustray/qdbustrayicon.cpp index 61849024da..fed8d219d9 100644 --- a/src/platformsupport/dbustray/qdbustrayicon.cpp +++ b/src/platformsupport/dbustray/qdbustrayicon.cpp @@ -115,12 +115,6 @@ void QDBusTrayIcon::cleanup() m_registered = false; } -void QDBusTrayIcon::activate(int x, int y) -{ - qCDebug(qLcTray) << x << y; - setStatus(QStringLiteral("Active")); -} - void QDBusTrayIcon::attentionTimerExpired() { m_messageTitle = QString(); @@ -191,9 +185,10 @@ void QDBusTrayIcon::updateToolTip(const QString &tooltip) QPlatformMenu *QDBusTrayIcon::createMenu() const { qCDebug(qLcTray); + QDBusPlatformMenu *ret = new QDBusPlatformMenu(); if (!m_menu) - const_cast<QDBusTrayIcon *>(this)->m_menu = new QDBusPlatformMenu(); - return m_menu; + const_cast<QDBusTrayIcon *>(this)->m_menu = ret; + return ret; } void QDBusTrayIcon::updateMenu(QPlatformMenu * menu) @@ -212,11 +207,6 @@ void QDBusTrayIcon::updateMenu(QPlatformMenu * menu) m_menu->emitUpdated(); } -void QDBusTrayIcon::contextMenu(int x, int y) -{ - qCDebug(qLcTray) << x << y; -} - void QDBusTrayIcon::showMessage(const QString &title, const QString &msg, const QIcon &icon, QPlatformSystemTrayIcon::MessageIcon iconType, int msecs) { diff --git a/src/platformsupport/dbustray/qdbustrayicon_p.h b/src/platformsupport/dbustray/qdbustrayicon_p.h index 78dfae7c02..34a89c9018 100644 --- a/src/platformsupport/dbustray/qdbustrayicon_p.h +++ b/src/platformsupport/dbustray/qdbustrayicon_p.h @@ -113,10 +113,6 @@ public: QDBusPlatformMenu *menu() { return m_menu; } -public Q_SLOTS: - void activate(int x, int y); - void contextMenu(int x, int y); - signals: void categoryChanged(); void statusChanged(QString arg); diff --git a/src/platformsupport/dbustray/qstatusnotifieritemadaptor.cpp b/src/platformsupport/dbustray/qstatusnotifieritemadaptor.cpp index 540e2f011d..36212e9b61 100644 --- a/src/platformsupport/dbustray/qstatusnotifieritemadaptor.cpp +++ b/src/platformsupport/dbustray/qstatusnotifieritemadaptor.cpp @@ -50,6 +50,7 @@ QT_BEGIN_NAMESPACE Q_DECLARE_LOGGING_CATEGORY(qLcMenu) +Q_DECLARE_LOGGING_CATEGORY(qLcTray) QStatusNotifierItemAdaptor::QStatusNotifierItemAdaptor(QDBusTrayIcon *parent) : QDBusAbstractAdaptor(parent), m_trayIcon(parent) @@ -151,22 +152,26 @@ QXdgDBusToolTipStruct QStatusNotifierItemAdaptor::toolTip() const void QStatusNotifierItemAdaptor::Activate(int x, int y) { - m_trayIcon->activate(x, y); + qCDebug(qLcTray) << x << y; + emit m_trayIcon->activated(QPlatformSystemTrayIcon::Trigger); } void QStatusNotifierItemAdaptor::ContextMenu(int x, int y) { - m_trayIcon->contextMenu(x, y); + qCDebug(qLcTray) << x << y; + emit m_trayIcon->activated(QPlatformSystemTrayIcon::Context); } -void QStatusNotifierItemAdaptor::Scroll(int, const QString &) +void QStatusNotifierItemAdaptor::Scroll(int w, const QString &s) { + qCDebug(qLcTray) << w << s; // unsupported } -void QStatusNotifierItemAdaptor::SecondaryActivate(int, int) +void QStatusNotifierItemAdaptor::SecondaryActivate(int x, int y) { - // unsupported + qCDebug(qLcTray) << x << y; + emit m_trayIcon->activated(QPlatformSystemTrayIcon::MiddleClick); } QT_END_NAMESPACE diff --git a/src/platformsupport/fontdatabases/basic/basic.pri b/src/platformsupport/fontdatabases/basic/basic.pri index c09ea4eed5..d70b3b6a1a 100644 --- a/src/platformsupport/fontdatabases/basic/basic.pri +++ b/src/platformsupport/fontdatabases/basic/basic.pri @@ -10,9 +10,4 @@ SOURCES += \ CONFIG += opentype -contains(QT_CONFIG, freetype) { - include($$QT_SOURCE_TREE/src/3rdparty/freetype.pri) -} else:contains(QT_CONFIG, system-freetype) { - # pull in the proper freetype2 include directory - include($$QT_SOURCE_TREE/config.tests/unix/freetype/freetype.pri) -} +include($$QT_SOURCE_TREE/src/3rdparty/freetype_dependency.pri) diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp index bd22a8fce5..112bb8e0a6 100644 --- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -218,7 +218,30 @@ static const char *specialLanguages[] = { "hmd", // Miao "sa", // Sharada "srb", // SoraSompeng - "doi" // Takri + "doi", // Takri + "lez", // CaucasianAlbanian + "bsq", // BassaVah + "fr", // Duployan + "sq", // Elbasan + "sa", // Grantha + "hnj", // PahawhHmong + "sd", // Khojki + "lab", // LinearA + "hi", // Mahajani + "xmn", // Manichaean + "men", // MendeKikakui + "mr", // Modi + "mru", // Mro + "xna", // OldNorthArabian + "arc", // Nabataean + "arc", // Palmyrene + "ctd", // PauCinHau + "kv", // OldPermic + "pal", // PsalterPahlavi + "sa", // Siddham + "sd", // Khudawadi + "mai", // Tirhuta + "hoc" // WarangCiti }; Q_STATIC_ASSERT(sizeof(specialLanguages) / sizeof(const char *) == QChar::ScriptCount); diff --git a/src/platformsupport/input/libinput/qlibinputtouch.cpp b/src/platformsupport/input/libinput/qlibinputtouch.cpp index 72cafb0ff7..c3eb8eac87 100644 --- a/src/platformsupport/input/libinput/qlibinputtouch.cpp +++ b/src/platformsupport/input/libinput/qlibinputtouch.cpp @@ -147,18 +147,22 @@ void QLibInputTouch::processTouchCancel(libinput_event_touch *e) void QLibInputTouch::processTouchFrame(libinput_event_touch *e) { DeviceState *state = deviceState(e); - if (state->m_touchDevice && !state->m_points.isEmpty()) { - QWindowSystemInterface::handleTouchEvent(Q_NULLPTR, state->m_touchDevice, state->m_points, - QGuiApplication::keyboardModifiers()); - for (int i = 0; i < state->m_points.count(); ++i) { - QWindowSystemInterface::TouchPoint &tp(state->m_points[i]); - if (tp.state == Qt::TouchPointReleased) - state->m_points.removeAt(i--); - else if (tp.state == Qt::TouchPointPressed) - tp.state = Qt::TouchPointStationary; - } - } else { + if (!state->m_touchDevice) { qWarning("TouchFrame without registered device"); + return; + } + if (state->m_points.isEmpty()) + return; + + QWindowSystemInterface::handleTouchEvent(Q_NULLPTR, state->m_touchDevice, state->m_points, + QGuiApplication::keyboardModifiers()); + + for (int i = 0; i < state->m_points.count(); ++i) { + QWindowSystemInterface::TouchPoint &tp(state->m_points[i]); + if (tp.state == Qt::TouchPointReleased) + state->m_points.removeAt(i--); + else if (tp.state == Qt::TouchPointPressed) + tp.state = Qt::TouchPointStationary; } } |