mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-01 07:05:48 +00:00
fix: notification tips label and context menu
Add notification settings action. Notification tips label will display notification count. Log: fix notification tips label and context menu
This commit is contained in:
parent
263e5a4358
commit
01e2377d86
@ -23,6 +23,7 @@ DCORE_USE_NAMESPACE;
|
||||
Notification::Notification(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, m_icon(QIcon::fromTheme("notification"))
|
||||
, m_notificationCount(0)
|
||||
, m_dbus(nullptr)
|
||||
, m_dndMode(false)
|
||||
{
|
||||
@ -36,10 +37,10 @@ Notification::Notification(QWidget *parent)
|
||||
QDBusReply<QDBusVariant> dnd = m_dbus->call(QLatin1String("GetSystemInfo"), QVariant::fromValue(0u));
|
||||
if (!dnd.isValid()) {
|
||||
qCWarning(qLcPluginNotification) << dnd.error();
|
||||
return ;
|
||||
} else {
|
||||
m_dndMode = dnd.value().variant().toBool();
|
||||
refreshIcon();
|
||||
}
|
||||
m_dndMode = dnd.value().variant().toBool();
|
||||
refreshIcon();
|
||||
QDBusConnection::sessionBus().connect("org.deepin.dde.Notification1",
|
||||
"/org/deepin/dde/Notification1",
|
||||
"org.deepin.dde.Notification1",
|
||||
@ -47,6 +48,19 @@ Notification::Notification(QWidget *parent)
|
||||
this,
|
||||
SLOT(onSystemInfoChanged(quint32,QDBusVariant))
|
||||
);
|
||||
auto recordCountVariant = m_dbus->property("recordCount");
|
||||
if (!recordCountVariant.isValid()) {
|
||||
qCWarning(qLcPluginNotification) << dnd.error();
|
||||
} else {
|
||||
setNotificationCount(recordCountVariant.toUInt());
|
||||
}
|
||||
QDBusConnection::sessionBus().connect("org.deepin.dde.Notification1",
|
||||
"/org/deepin/dde/Notification1",
|
||||
"org.deepin.dde.Notification1",
|
||||
"recordCountChanged",
|
||||
this,
|
||||
SLOT(setNotificationCount(uint))
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
@ -57,7 +71,7 @@ QIcon Notification::icon() const
|
||||
|
||||
void Notification::refreshIcon()
|
||||
{
|
||||
m_icon = QIcon::fromTheme(m_dndMode ? "notification-off" : "notification");
|
||||
m_icon = QIcon::fromTheme(dndMode() ? "notification-off" : "notification");
|
||||
Q_EMIT iconRefreshed();
|
||||
}
|
||||
|
||||
@ -73,6 +87,11 @@ void Notification::setDndMode(bool dnd)
|
||||
}
|
||||
}
|
||||
|
||||
uint Notification::notificationCount() const
|
||||
{
|
||||
return m_notificationCount;
|
||||
}
|
||||
|
||||
void Notification::paintEvent(QPaintEvent *e)
|
||||
{
|
||||
Q_UNUSED(e)
|
||||
@ -88,3 +107,12 @@ void Notification::onSystemInfoChanged(quint32 info, QDBusVariant value)
|
||||
Q_EMIT dndModeChanged(m_dndMode);
|
||||
}
|
||||
}
|
||||
|
||||
void Notification::setNotificationCount(uint count)
|
||||
{
|
||||
if (m_notificationCount == count) {
|
||||
return;
|
||||
}
|
||||
m_notificationCount = count;
|
||||
Q_EMIT this->notificationCountChanged(count);
|
||||
}
|
||||
|
@ -15,28 +15,35 @@ class Notification : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(bool dndMode READ dndMode WRITE setDndMode NOTIFY dndModeChanged)
|
||||
Q_PROPERTY(uint notificationCount READ notificationCount NOTIFY notificationCountChanged)
|
||||
|
||||
public:
|
||||
explicit Notification(QWidget *parent = nullptr);
|
||||
QIcon icon() const;
|
||||
|
||||
bool dndMode() const;
|
||||
void setDndMode(bool dnd);
|
||||
uint notificationCount() const;
|
||||
|
||||
Q_SIGNALS:
|
||||
void iconRefreshed();
|
||||
void dndModeChanged(bool dnd);
|
||||
void notificationCountChanged(uint count);
|
||||
|
||||
public Q_SLOTS:
|
||||
void refreshIcon();
|
||||
|
||||
private Q_SLOTS:
|
||||
void onSystemInfoChanged(quint32 info, QDBusVariant value);
|
||||
void setNotificationCount(uint count);
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *e) override;
|
||||
|
||||
private:
|
||||
QIcon m_icon;
|
||||
uint m_notificationCount;
|
||||
QScopedPointer<QDBusInterface> m_dbus;
|
||||
bool m_dndMode;
|
||||
};
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include "notificationplugin.h"
|
||||
|
||||
#include <DGuiApplicationHelper>
|
||||
#include <DDBusSender>
|
||||
|
||||
#include <QIcon>
|
||||
#include <QSettings>
|
||||
@ -11,8 +12,9 @@
|
||||
|
||||
Q_LOGGING_CATEGORY(qLcPluginNotification, "dock.plugin.notification")
|
||||
|
||||
#define PLUGIN_STATE_KEY "enable"
|
||||
#define TOGGLE_DND "toggle-dnd"
|
||||
#define PLUGIN_STATE_KEY "enable"
|
||||
#define TOGGLE_DND "toggle-dnd"
|
||||
#define NOTIFICATION_SETTINGS "notification-settings"
|
||||
|
||||
DGUI_USE_NAMESPACE
|
||||
using namespace Dock;
|
||||
@ -23,7 +25,7 @@ NotificationPlugin::NotificationPlugin(QObject *parent)
|
||||
, m_notification(nullptr)
|
||||
, m_tipsLabel(new TipsWidget)
|
||||
{
|
||||
m_tipsLabel->setText(tr("Notification"));
|
||||
m_tipsLabel->setText(tr("No messages"));
|
||||
m_tipsLabel->setVisible(false);
|
||||
m_tipsLabel->setAccessibleName("Notification");
|
||||
m_tipsLabel->setObjectName("NotificationTipsLabel");
|
||||
@ -72,14 +74,19 @@ const QString NotificationPlugin::itemContextMenu(const QString &itemKey)
|
||||
QList<QVariant> items;
|
||||
QMap<QString, QVariant> toggleDnd;
|
||||
toggleDnd["itemId"] = TOGGLE_DND;
|
||||
toggleDnd["itemText"] = tr("Do Not Disturb");
|
||||
toggleDnd["isCheckable"] = true;
|
||||
toggleDnd["itemText"] = toggleDndText();
|
||||
toggleDnd["isCheckable"] = false;
|
||||
toggleDnd["isActive"] = true;
|
||||
toggleDnd["checked"] = m_notification->dndMode();
|
||||
items.push_back(toggleDnd);
|
||||
QMap<QString, QVariant> notificationSettings;
|
||||
notificationSettings["itemId"] = NOTIFICATION_SETTINGS;
|
||||
notificationSettings["itemText"] = tr("Notification settings");
|
||||
notificationSettings["isCheckable"] = false;
|
||||
notificationSettings["isActive"] = true;
|
||||
items.push_back(notificationSettings);
|
||||
QMap<QString, QVariant> menu;
|
||||
menu["items"] = items;
|
||||
menu["checkableMenu"] = true;
|
||||
menu["checkableMenu"] = false;
|
||||
menu["singleCheck"] = false;
|
||||
return QJsonDocument::fromVariant(menu).toJson();
|
||||
}
|
||||
@ -87,8 +94,15 @@ const QString NotificationPlugin::itemContextMenu(const QString &itemKey)
|
||||
void NotificationPlugin::invokedMenuItem(const QString &itemKey, const QString &menuId, const bool checked)
|
||||
{
|
||||
Q_UNUSED(itemKey)
|
||||
Q_UNUSED(checked)
|
||||
if (menuId == TOGGLE_DND) {
|
||||
m_notification->setDndMode(checked);
|
||||
m_notification->setDndMode(!m_notification->dndMode());
|
||||
} else if (menuId == NOTIFICATION_SETTINGS) {
|
||||
DDBusSender().service("org.deepin.dde.ControlCenter1")
|
||||
.path("/org/deepin/dde/ControlCenter1")
|
||||
.interface("org.deepin.dde.ControlCenter1")
|
||||
.method("ShowPage")
|
||||
.arg(QString("notification")).call();
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,6 +139,7 @@ void NotificationPlugin::loadPlugin()
|
||||
m_pluginLoaded = true;
|
||||
m_notification.reset(new Notification);
|
||||
connect(m_notification.data(), &Notification::iconRefreshed, this, [this]() { m_proxyInter->itemUpdate(this, pluginName()); });
|
||||
connect(m_notification.data(), &Notification::notificationCountChanged, this, &NotificationPlugin::updateTipsText);
|
||||
m_proxyInter->itemAdded(this, pluginName());
|
||||
}
|
||||
|
||||
@ -142,6 +157,24 @@ void NotificationPlugin::refreshPluginItemsVisible()
|
||||
}
|
||||
}
|
||||
|
||||
void NotificationPlugin::updateTipsText(uint notificationCount)
|
||||
{
|
||||
if (notificationCount == 0) {
|
||||
m_tipsLabel->setText(tr("No messages"));
|
||||
} else {
|
||||
m_tipsLabel->setText(QString("%1 %2").arg(notificationCount).arg(tr("Notifications")));
|
||||
}
|
||||
}
|
||||
|
||||
QString NotificationPlugin::toggleDndText() const
|
||||
{
|
||||
if (m_notification->dndMode()) {
|
||||
return tr("Turn off DND mode");
|
||||
} else {
|
||||
return tr("Turn on DND mode");
|
||||
}
|
||||
}
|
||||
|
||||
void NotificationPlugin::refreshIcon(const QString &itemKey)
|
||||
{
|
||||
Q_UNUSED(itemKey)
|
||||
|
@ -43,6 +43,8 @@ public:
|
||||
private:
|
||||
void loadPlugin();
|
||||
void refreshPluginItemsVisible();
|
||||
void updateTipsText(uint notificationCount);
|
||||
QString toggleDndText() const;
|
||||
|
||||
private:
|
||||
bool m_pluginLoaded;
|
||||
|
@ -336,8 +336,24 @@
|
||||
<translation>Notification</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do Not Disturb</source>
|
||||
<translation>Do Not Disturb</translation>
|
||||
<source>No messages</source>
|
||||
<translation>No messages</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Notification settings</source>
|
||||
<translation>Notification settings</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Notifications</source>
|
||||
<translation>Notifications</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Turn off DND mode</source>
|
||||
<translation>Turn off DND mode</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Turn on DND mode</source>
|
||||
<translation>Turn on DND mode</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -308,8 +308,24 @@
|
||||
<translation>Notification</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do Not Disturb</source>
|
||||
<translation>Do Not Disturb</translation>
|
||||
<source>No messages</source>
|
||||
<translation>No messages</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Notification settings</source>
|
||||
<translation>Notification settings</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Notifications</source>
|
||||
<translation>Notifications</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Turn off DND mode</source>
|
||||
<translation>Turn off DND mode</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Turn on DND mode</source>
|
||||
<translation>Turn on DND mode</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -336,8 +336,24 @@
|
||||
<translation>通知</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do Not Disturb</source>
|
||||
<translation>勿扰模式</translation>
|
||||
<source>No messages</source>
|
||||
<translation>暂无新消息</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Notification settings</source>
|
||||
<translation>通知设置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Notifications</source>
|
||||
<translation>条通知</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Turn off DND mode</source>
|
||||
<translation>关闭勿扰模式</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Turn on DND mode</source>
|
||||
<translation>开启勿扰模式</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
Loading…
x
Reference in New Issue
Block a user