From d3b3c309fa9f7bafda0a9b13b82aab90dbc5f52d Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Wed, 13 Feb 2019 20:04:05 +0100 Subject: [PATCH] Create systray tooltip workaround for KDE --- data/data.qrc | 5 +- data/{misc => html}/oauthsuccess.html | 0 data/html/playing-tooltip-plain.html | 8 +++ .../playing-tooltip-table.html} | 0 src/core/qtsystemtrayicon.cpp | 62 +++++++++++++------ src/core/qtsystemtrayicon.h | 11 +++- src/internet/localredirectserver.cpp | 2 +- 7 files changed, 62 insertions(+), 26 deletions(-) rename data/{misc => html}/oauthsuccess.html (100%) create mode 100644 data/html/playing-tooltip-plain.html rename data/{misc/playing-tooltip.html => html/playing-tooltip-table.html} (100%) diff --git a/data/data.qrc b/data/data.qrc index 844c519e..d6ab1e56 100644 --- a/data/data.qrc +++ b/data/data.qrc @@ -6,8 +6,9 @@ schema/schema-3.sql schema/device-schema.sql style/strawberry.css - misc/playing-tooltip.html - misc/oauthsuccess.html + html/playing-tooltip-plain.html + html/playing-tooltip-table.html + html/oauthsuccess.html pictures/strawberry.png pictures/strawberry-faded.png pictures/nomusic.png diff --git a/data/misc/oauthsuccess.html b/data/html/oauthsuccess.html similarity index 100% rename from data/misc/oauthsuccess.html rename to data/html/oauthsuccess.html diff --git a/data/html/playing-tooltip-plain.html b/data/html/playing-tooltip-plain.html new file mode 100644 index 00000000..1e893ec6 --- /dev/null +++ b/data/html/playing-tooltip-plain.html @@ -0,0 +1,8 @@ +

%appName

+

+%image
+%titleKey: %titleValue
+%artistKey: %artistValue
+%albumKey: %albumValue
+%lengthKey: %lengthValue
+

diff --git a/data/misc/playing-tooltip.html b/data/html/playing-tooltip-table.html similarity index 100% rename from data/misc/playing-tooltip.html rename to data/html/playing-tooltip-table.html diff --git a/src/core/qtsystemtrayicon.cpp b/src/core/qtsystemtrayicon.cpp index 12233898..93c08220 100644 --- a/src/core/qtsystemtrayicon.cpp +++ b/src/core/qtsystemtrayicon.cpp @@ -26,14 +26,18 @@ #include #include #include +#include #include #include #include #include #include +#include "core/logging.h" + #include "song.h" #include "iconloader.h" +#include "utilities.h" #include "systemtrayicon.h" #include "qtsystemtrayicon.h" @@ -53,18 +57,29 @@ QtSystemTrayIcon::QtSystemTrayIcon(QObject *parent) action_stop_after_this_track_(nullptr), action_mute_(nullptr) { + app_name_[0] = app_name_[0].toUpper(); + tray_->setIcon(normal_icon_); tray_->installEventFilter(this); ClearNowPlaying(); - QFile pattern_file(":/misc/playing-tooltip.html"); +#ifndef Q_OS_WIN + de_ = Utilities::DesktopEnvironment().toLower(); + QFile pattern_file; + if (de_ == "kde") { + pattern_file.setFileName(":/html/playing-tooltip-plain.html"); + } + else { + pattern_file.setFileName(":/html/playing-tooltip-table.html"); + } pattern_file.open(QIODevice::ReadOnly); pattern_ = QString::fromLatin1(pattern_file.readAll()); + pattern_file.close(); + +#endif connect(tray_, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), SLOT(Clicked(QSystemTrayIcon::ActivationReason))); - app_name_[0] = app_name_[0].toUpper(); - } QtSystemTrayIcon::~QtSystemTrayIcon() { @@ -223,36 +238,43 @@ void QtSystemTrayIcon::SetNowPlaying(const Song &song, const QString &image_path #ifdef Q_OS_WIN // Windows doesn't support HTML in tooltips, so just show something basic tray_->setToolTip(song.PrettyTitleWithArtist()); - return; -#endif +#else int columns = image_path == nullptr ? 1 : 2; - QString clone = pattern_; + QString tooltip(pattern_); - clone.replace("%columns" , QString::number(columns)); - clone.replace("%appName" , app_name_); + tooltip.replace("%columns" , QString::number(columns)); + tooltip.replace("%appName" , app_name_); - clone.replace("%titleKey" , tr("Title") % ":"); - clone.replace("%titleValue" , song.PrettyTitle().toHtmlEscaped()); - clone.replace("%artistKey" , tr("Artist") % ":"); - clone.replace("%artistValue", song.artist().toHtmlEscaped()); - clone.replace("%albumKey" , tr("Album") % ":"); - clone.replace("%albumValue" , song.album().toHtmlEscaped()); + tooltip.replace("%titleKey" , tr("Title") % ":"); + tooltip.replace("%titleValue" , song.PrettyTitle().toHtmlEscaped()); + tooltip.replace("%artistKey" , tr("Artist") % ":"); + tooltip.replace("%artistValue", song.artist().toHtmlEscaped()); + tooltip.replace("%albumKey" , tr("Album") % ":"); + tooltip.replace("%albumValue" , song.album().toHtmlEscaped()); - clone.replace("%lengthKey" , tr("Length") % ":"); - clone.replace("%lengthValue", song.PrettyLength().toHtmlEscaped()); + tooltip.replace("%lengthKey" , tr("Length") % ":"); + tooltip.replace("%lengthValue", song.PrettyLength().toHtmlEscaped()); - if(columns == 2) { + if (columns == 2) { QString final_path = image_path.startsWith("file://") ? image_path.mid(7) : image_path; - clone.replace("%image", " "); + if (de_ == "kde") { + tooltip.replace("%image", ""); + } + else { + tooltip.replace("%image", " "); + } } else { - clone.replace("%image", ""); + tooltip.replace("%image", ""); + tooltip.replace("%image", ""); } // TODO: we should also repaint this - tray_->setToolTip(clone); + tray_->setToolTip(tooltip); + +#endif } diff --git a/src/core/qtsystemtrayicon.h b/src/core/qtsystemtrayicon.h index 1333deee..d53c5be6 100644 --- a/src/core/qtsystemtrayicon.h +++ b/src/core/qtsystemtrayicon.h @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -55,7 +56,7 @@ class QtSystemTrayIcon : public SystemTrayIcon { void SetNowPlaying(const Song &song, const QString &image_path); void ClearNowPlaying(); -protected: + protected: // SystemTrayIcon void UpdateIcon(); void SetPaused(); @@ -66,10 +67,10 @@ protected: // QObject bool eventFilter(QObject *, QEvent *); -private slots: + private slots: void Clicked(QSystemTrayIcon::ActivationReason); -private: + private: QSystemTrayIcon *tray_; QMenu *menu_; QString app_name_; @@ -82,7 +83,11 @@ private: QAction *action_stop_after_this_track_; QAction *action_mute_; +#ifndef Q_OS_WIN + QString de_; QString pattern_; +#endif + }; #endif // QTSYSTEMTRAYICON_H diff --git a/src/internet/localredirectserver.cpp b/src/internet/localredirectserver.cpp index ae1cb8ad..054039a1 100644 --- a/src/internet/localredirectserver.cpp +++ b/src/internet/localredirectserver.cpp @@ -68,7 +68,7 @@ void LocalRedirectServer::ReadyRead(QTcpSocket* socket, QByteArray buffer) { void LocalRedirectServer::WriteTemplate(QTcpSocket* socket) const { - QFile page_file(":/misc/oauthsuccess.html"); + QFile page_file(":/html/oauthsuccess.html"); page_file.open(QIODevice::ReadOnly); QString page_data = QString::fromUtf8(page_file.readAll());