-
Notifications
You must be signed in to change notification settings - Fork 0
/
trayicon.cpp
78 lines (69 loc) · 3.03 KB
/
trayicon.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/*
* fortuner
* Copyright (C) 2017 Juhani Numminen <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "trayicon.h"
#include <utility> // for std::move
#include <QApplication>
#include <QIcon>
#include <QIODevice>
#include <QMessageBox>
#include <QProcess>
#include "config.h"
Fortuner::TrayIcon::TrayIcon(QStringList fortuneArguments, QWidget* parent)
: QSystemTrayIcon{qApp->windowIcon(), parent}
, fortuneArgs{std::move(fortuneArguments)}
{
setToolTip(tr("Fortuner"));
#ifndef Q_OS_MACOS
// On macOS, left and right clicking a system tray icon have the same effect
connect(this, &QSystemTrayIcon::activated,
this, &Fortuner::TrayIcon::showFortune);
#endif
contextMenu.addAction(icon(), tr("Show a fortune"), [this]() {
showFortune(QSystemTrayIcon::ActivationReason::Unknown);
});
contextMenu.addSeparator();
contextMenu.addAction(QIcon::fromTheme("help-about"), tr("About Fortuner…"), []() {
QMessageBox::about(nullptr, tr("About Fortuner"),
tr("<div style='text-align:center'>"
"<p><span style='font-size:35pt'>Fortuner</span><br>"
"Version %1</p>"
"<p>Fortuner shows fortunes as notifications.</p>"
"<p><a href='https://github.com/jnumm/fortuner'>Homepage</a></p>"
"<p style='font-size:small'>Copyright © Juhani Numminen 2017.<br>"
"Distributed under the terms of GPLv3+.</p>"
"</div>").arg(FORTUNER_VERSION));
});
contextMenu.addAction(QIcon::fromTheme("application-exit"), tr("Quit"), qApp, &QApplication::quit);
setContextMenu(&contextMenu);
}
void Fortuner::TrayIcon::showFortune(QSystemTrayIcon::ActivationReason reason) {
if (reason == QSystemTrayIcon::ActivationReason::Context)
return;
QProcess fortune;
fortune.start("fortune", fortuneArgs, QIODevice::ReadOnly);
if (fortune.waitForFinished()) {
showMessage(tr("Fortuner"),
fortune.readAll().replace('<', "<").append("–––"),
QSystemTrayIcon::MessageIcon::NoIcon);
} else {
QMessageBox::critical(nullptr, tr("Fortuner: fortune failed"),
tr("<p>Could not execute <tt>fortune</tt>.<br> Try to install "
"package <tt>fortune</tt> or <tt>fortune-mod</tt>.</p> "
"<p>Error output:</p>") + fortune.errorString());
}
}