summaryrefslogtreecommitdiffstats
path: root/src/platformsupport/dbustray/qdbustraytypes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/platformsupport/dbustray/qdbustraytypes.cpp')
-rw-r--r--src/platformsupport/dbustray/qdbustraytypes.cpp37
1 files changed, 30 insertions, 7 deletions
diff --git a/src/platformsupport/dbustray/qdbustraytypes.cpp b/src/platformsupport/dbustray/qdbustraytypes.cpp
index 0ca6669508..5100f8ee2c 100644
--- a/src/platformsupport/dbustray/qdbustraytypes.cpp
+++ b/src/platformsupport/dbustray/qdbustraytypes.cpp
@@ -32,20 +32,47 @@
**
****************************************************************************/
+#ifndef QT_NO_SYSTEMTRAYICON
+
#include "qdbustraytypes_p.h"
#include <QDBusConnection>
+#include <QDBusMetaType>
#include <QImage>
#include <QIcon>
#include <QImage>
#include <QPixmap>
#include <QDebug>
#include <QtEndian>
+#include <qpa/qplatformmenu.h>
+#include "qdbusplatformmenu_p.h"
+
+QT_BEGIN_NAMESPACE
+
+static const int IconSizeLimit = 32;
+static const int IconNormalSmallSize = 22;
QXdgDBusImageVector iconToQXdgDBusImageVector(const QIcon &icon)
{
QXdgDBusImageVector ret;
- foreach (QSize size, icon.availableSizes()) {
+ QList<QSize> sizes = icon.availableSizes();
+
+ // Omit any size larger than 32 px, to save D-Bus bandwidth;
+ // and ensure that 22px or smaller exists, because it's a common size.
+ bool hasSmallIcon = false;
+ QList<QSize> toRemove;
+ Q_FOREACH (const QSize &size, sizes) {
+ if (size.width() <= IconNormalSmallSize)
+ hasSmallIcon = true;
+ else if (size.width() > IconSizeLimit)
+ toRemove << size;
+ }
+ Q_FOREACH (const QSize &size, toRemove)
+ sizes.removeOne(size);
+ if (!hasSmallIcon)
+ sizes.append(QSize(IconNormalSmallSize, IconNormalSmallSize));
+
+ foreach (QSize size, sizes) {
QXdgDBusImageStruct kim;
kim.width = size.width();
kim.height = size.height();
@@ -155,9 +182,5 @@ const QDBusArgument &operator>>(const QDBusArgument &argument, QXdgDBusToolTipSt
return argument;
}
-void registerDBusTrayTypes()
-{
- qDBusRegisterMetaType<QXdgDBusImageStruct>();
- qDBusRegisterMetaType<QXdgDBusImageVector>();
- qDBusRegisterMetaType<QXdgDBusToolTipStruct>();
-}
+QT_END_NAMESPACE
+#endif // QT_NO_SYSTEMTRAYICON