summaryrefslogtreecommitdiffstats
path: root/src/platformsupport
diff options
context:
space:
mode:
Diffstat (limited to 'src/platformsupport')
-rw-r--r--src/platformsupport/dbusmenu/qdbusmenutypes.cpp37
-rw-r--r--src/platformsupport/dbusmenu/qdbusmenutypes_p.h1
-rw-r--r--src/platformsupport/dbusmenu/qdbusplatformmenu.cpp12
-rw-r--r--src/platformsupport/dbusmenu/qdbusplatformmenu_p.h7
-rw-r--r--src/platformsupport/dbustray/qdbustrayicon.cpp16
-rw-r--r--src/platformsupport/dbustray/qdbustrayicon_p.h4
-rw-r--r--src/platformsupport/dbustray/qstatusnotifieritemadaptor.cpp15
-rw-r--r--src/platformsupport/fontdatabases/basic/basic.pri7
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp25
-rw-r--r--src/platformsupport/input/libinput/qlibinputtouch.cpp26
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;
}
}