You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lxqt-notificationd-packaging/src/notifyd.cpp

149 lines
4.3 KiB

/* BEGIN_COMMON_COPYRIGHT_HEADER
* (c)LGPL2+
*
* LXQt - a lightweight, Qt based, desktop toolset
* http://lxqt.org
*
* Copyright: 2012 Razor team
* Authors:
* Alec Moskvin <alecm@gmx.com>
* Petr Vanek <petr@scribus.info>
*
* This program or library is free software; you can redistribute it
* and/or modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General
* Public License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA
*
* END_COMMON_COPYRIGHT_HEADER */
#include "notifyd.h"
#include <QDebug>
/*
* Implementation of class Notifyd
*/
Notifyd::Notifyd(QObject* parent)
: QObject(parent),
mId(0)
{
m_area = new NotificationArea();
m_settings = new LXQt::Settings("notifications");
reloadSettings();
connect(this, &Notifyd::notificationAdded,
m_area->layout(), &NotificationLayout::addNotification);
connect(this, &Notifyd::notificationClosed,
m_area->layout(), &NotificationLayout::removeNotification);
// feedback for original caller
connect(m_area->layout(), &NotificationLayout::notificationClosed,
this, &Notifyd::NotificationClosed);
connect(m_area->layout(), &NotificationLayout::actionInvoked,
this, &Notifyd::ActionInvoked);
connect(m_settings, &LXQt::Settings::settingsChanged,
this, &Notifyd::reloadSettings);
}
Notifyd::~Notifyd()
{
m_area->deleteLater();
}
void Notifyd::CloseNotification(uint id)
{
emit notificationClosed(id, 3);
}
QStringList Notifyd::GetCapabilities()
{
QStringList caps;
caps
<< "actions"
// << "action-icons"
<< "body"
<< "body-hyperlinks"
<< "body-images"
<< "body-markup"
// << "icon-multi"
// << "icon-static"
<< "persistence"
// << "sound"
;
return caps;
}
QString Notifyd::GetServerInformation(QString& vendor,
QString& version,
QString& spec_version)
{
spec_version = QString("1.2");
version = QString(LXQT_VERSION);
vendor = QString("lxqt.org");
return QString("lxqt-notificationd");
}
uint Notifyd::Notify(const QString& app_name,
uint replaces_id,
const QString& app_icon,
const QString& summary,
const QString& body,
const QStringList& actions,
const QVariantMap& hints,
int expire_timeout
)
{
uint ret;
if (replaces_id == 0)
{
mId++;
ret = mId;
}
else
ret = replaces_id;
#if 0
qDebug() << QString("Notify(\n"
" app_name = %1\n"
" replaces_id = %2\n"
" app_icon = %3\n"
" summary = %4\n"
" body = %5\n"
).arg(app_name, QString::number(replaces_id), app_icon, summary, body)
<< " actions =" << actions << endl
<< " hints =" << hints << endl
<< QString(" expire_timeout = %1\n) => %2").arg(QString::number(expire_timeout), QString::number(mId));
#endif
// handling the "server decides" timeout
if (expire_timeout == -1) {
expire_timeout = m_serverTimeout;
expire_timeout *= 1000;
}
emit notificationAdded(ret, app_name, summary, body, app_icon, expire_timeout, actions, hints);
return ret;
}
void Notifyd::reloadSettings()
{
m_serverTimeout = m_settings->value("server_decides", 10).toInt();
m_area->setSettings(
m_settings->value("placement", "bottom-right").toString().toLower(),
m_settings->value("width", 300).toInt(),
m_settings->value("spacing", 6).toInt());
}