Skip to content
Snippets Groups Projects
Verified Commit d116deed authored by Nicolas Werner's avatar Nicolas Werner
Browse files

Allow clicking notifications on Windows

parent 68114427
No related branches found
No related tags found
No related merge requests found
......@@ -16,6 +16,7 @@ build-windows:
variables:
APPVEYOR_REPO_BRANCH: "${CI_COMMIT_REF_NAME}"
APPVEYOR_REPO_COMMIT: "${CI_COMMIT_SHORT_SHA}"
CMAKE_BUILD_PARALLEL_LEVEL: 8
before_script:
- mkdir -p hunter
- Move-Item -Path hunter -Destination C:/hunter
......
......@@ -26,7 +26,7 @@
uap10:RuntimeBehavior="packagedClassicApp"
uap10:TrustLevel="mediumIL">
<uap:VisualElements DisplayName="Nheko" Description="Matrix client written in Qt" Square150x150Logo="nheko.png"
Square44x44Logo="nheko.png" BackgroundColor="#ffffff00" />
Square44x44Logo="nheko.png" BackgroundColor="transparent" />
<Extensions>
<uap:Extension Category="windows.protocol">
<uap:Protocol Name="matrix">
......
......@@ -93,7 +93,9 @@ public:
#if defined(Q_OS_WINDOWS)
private:
void systemPostNotification(const QString &line1,
void systemPostNotification(const QString &roomid,
const QString &eventid,
const QString &line1,
const QString &line2,
const QString &iconPath,
const QString &bodyImagePath);
......
......@@ -21,10 +21,21 @@ using namespace WinToastLib;
class CustomHandler : public IWinToastHandler
{
public:
void toastActivated() const {}
CustomHandler(NotificationsManager *manager_, const QString &roomid_, const QString &eventid_)
: manager(manager_)
, roomid(roomid_)
, eventid(eventid_)
{
}
void toastActivated() const { manager->notificationClicked(roomid, eventid); }
void toastActivated(int) const {}
void toastFailed() const { std::wcout << L"Error showing current toast" << std::endl; }
void toastDismissed(WinToastDismissalReason) const {}
NotificationsManager *manager;
QString roomid;
QString eventid;
};
namespace {
......@@ -53,6 +64,8 @@ NotificationsManager::postNotification(const mtx::responses::Notification &notif
const QImage &icon)
{
const auto room_name = QString::fromStdString(cache::singleRoomInfo(notification.room_id).name);
auto roomid = QString::fromStdString(notification.room_id);
auto eventid = QString::fromStdString(mtx::accessors::event_id(notification.event));
auto formatNotification = [this, notification] {
const auto template_ = getMessageTemplate(notification);
......@@ -75,19 +88,24 @@ NotificationsManager::postNotification(const mtx::responses::Notification &notif
QString::fromStdString(mtx::accessors::url(notification.event))
.remove(QStringLiteral("mxc://")),
QSize(200, 80),
[this, room_name, formatNotification, iconPath](QString, QSize, QImage, QString imgPath) {
[this, roomid, eventid, room_name, formatNotification, iconPath](
QString, QSize, QImage, QString imgPath) {
if (imgPath.isEmpty())
systemPostNotification(room_name, formatNotification, iconPath, "");
systemPostNotification(
roomid, eventid, room_name, formatNotification, iconPath, "");
else
systemPostNotification(room_name, formatNotification, iconPath, imgPath);
systemPostNotification(
roomid, eventid, room_name, formatNotification, iconPath, imgPath);
});
} else {
systemPostNotification(room_name, formatNotification, iconPath, "");
systemPostNotification(roomid, eventid, room_name, formatNotification, iconPath, "");
}
}
void
NotificationsManager::systemPostNotification(const QString &line1,
NotificationsManager::systemPostNotification(const QString &roomid,
const QString &eventid,
const QString &line1,
const QString &line2,
const QString &iconPath,
const QString &bodyImagePath)
......@@ -106,7 +124,7 @@ NotificationsManager::systemPostNotification(const QString &line1,
templ.setAudioPath(WinToastTemplate::IM);
WinToast::instance()->showToast(templ, new CustomHandler());
WinToast::instance()->showToast(templ, new CustomHandler(this, roomid, eventid));
}
// clang-format off
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment