summaryrefslogtreecommitdiffstats
path: root/src/platformsupport/themes
diff options
context:
space:
mode:
Diffstat (limited to 'src/platformsupport/themes')
-rw-r--r--src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp10
-rw-r--r--src/platformsupport/themes/genericunix/dbustray/qdbustraytypes.cpp22
2 files changed, 20 insertions, 12 deletions
diff --git a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp
index ca740f967e..b4b1fcaba7 100644
--- a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp
+++ b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp
@@ -53,6 +53,7 @@
#include <qrect.h>
#include <qloggingcategory.h>
#include <qstandardpaths.h>
+#include <qfileinfo.h>
#include <qdir.h>
#include <qmetaobject.h>
#include <qpa/qplatformintegration.h>
@@ -71,8 +72,12 @@ Q_LOGGING_CATEGORY(qLcTray, "qt.qpa.tray")
static QString iconTempPath()
{
QString tempPath = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation);
- if (!tempPath.isEmpty())
+ if (!tempPath.isEmpty()) {
+ QString flatpakId = qEnvironmentVariable("FLATPAK_ID");
+ if (!flatpakId.isEmpty() && QFileInfo::exists(QLatin1String("/.flatpak-info")))
+ tempPath += QLatin1String("/app/") + flatpakId;
return tempPath;
+ }
tempPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation);
@@ -213,10 +218,9 @@ QTemporaryFile *QDBusTrayIcon::tempIcon(const QIcon &icon)
}
if (!necessary)
return nullptr;
- qreal dpr = qGuiApp->devicePixelRatio();
QTemporaryFile *ret = new QTemporaryFile(tempFileTemplate(), this);
ret->open();
- icon.pixmap(QSize(22 * dpr, 22 * dpr)).save(ret);
+ icon.pixmap(QSize(22, 22)).save(ret);
ret->close();
return ret;
}
diff --git a/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes.cpp b/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes.cpp
index fc49fcbea9..5edde31119 100644
--- a/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes.cpp
+++ b/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes.cpp
@@ -46,6 +46,7 @@
#include <QDBusMetaType>
#include <QImage>
#include <QIcon>
+#include <QIconEngine>
#include <QImage>
#include <QPixmap>
#include <QDebug>
@@ -53,7 +54,8 @@
#include <QPainter>
#include <QGuiApplication>
#include <qpa/qplatformmenu.h>
-#include "qdbusplatformmenu_p.h"
+#include <private/qdbusplatformmenu_p.h>
+#include <private/qicon_p.h>
QT_BEGIN_NAMESPACE
@@ -64,35 +66,37 @@ static const int IconNormalMediumSize = 64;
QXdgDBusImageVector iconToQXdgDBusImageVector(const QIcon &icon)
{
QXdgDBusImageVector ret;
- QList<QSize> sizes = icon.availableSizes();
+ if (icon.isNull())
+ return ret;
+ QIconEngine *engine = const_cast<QIcon &>(icon).data_ptr()->engine;
+ QList<QSize> sizes = engine->availableSizes(QIcon::Normal, QIcon::Off);
// Omit any size larger than 64 px, to save D-Bus bandwidth;
// ensure that 22px or smaller exists, because it's a common size;
// and ensure that something between 22px and 64px exists, for better scaling to other sizes.
bool hasSmallIcon = false;
bool hasMediumIcon = false;
- qreal dpr = qGuiApp->devicePixelRatio();
QList<QSize> toRemove;
Q_FOREACH (const QSize &size, sizes) {
int maxSize = qMax(size.width(), size.height());
- if (maxSize <= IconNormalSmallSize * dpr)
+ if (maxSize <= IconNormalSmallSize)
hasSmallIcon = true;
- else if (maxSize <= IconNormalMediumSize * dpr)
+ else if (maxSize <= IconNormalMediumSize)
hasMediumIcon = true;
- else if (maxSize > IconSizeLimit * dpr)
+ else if (maxSize > IconSizeLimit)
toRemove << size;
}
Q_FOREACH (const QSize &size, toRemove)
sizes.removeOne(size);
if (!hasSmallIcon)
- sizes.append(QSize(IconNormalSmallSize * dpr, IconNormalSmallSize * dpr));
+ sizes.append(QSize(IconNormalSmallSize, IconNormalSmallSize));
if (!hasMediumIcon)
- sizes.append(QSize(IconNormalMediumSize * dpr, IconNormalMediumSize * dpr));
+ sizes.append(QSize(IconNormalMediumSize, IconNormalMediumSize));
ret.reserve(sizes.size());
foreach (QSize size, sizes) {
// Protocol specifies ARGB32 format in network byte order
- QImage im = icon.pixmap(size).toImage().convertToFormat(QImage::Format_ARGB32);
+ QImage im = engine->pixmap(size, QIcon::Normal, QIcon::Off).toImage().convertToFormat(QImage::Format_ARGB32);
// letterbox if necessary to make it square
if (im.height() != im.width()) {
int maxSize = qMax(im.width(), im.height());