[SCM] ktp-kded-integration-module packaging branch, master, updated. debian/15.12.1-2-382-gbd961c2
Maximiliano Curia
maxy at moszumanska.debian.org
Sat May 28 00:13:09 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-kded-module.git;a=commitdiff;h=03b27c6
The following commit has been merged in the master branch:
commit 03b27c65d8ff081c00f65fdf88200599bbf7d35e
Author: Dario Freddi <dario.freddi at collabora.com>
Date: Fri Nov 25 01:12:50 2011 +0100
Port away from staticness, and use the menus and actions properly. Also, set the relevant states
---
contact-request-handler.cpp | 115 +++++++++++++++++++++++++++-----------------
contact-request-handler.h | 9 ++--
2 files changed, 77 insertions(+), 47 deletions(-)
diff --git a/contact-request-handler.cpp b/contact-request-handler.cpp
index 906bc75..505b2b4 100644
--- a/contact-request-handler.cpp
+++ b/contact-request-handler.cpp
@@ -41,8 +41,6 @@ bool kde_tp_filter_contacts_by_publication_status(const Tp::ContactPtr &contact)
ContactRequestHandler::ContactRequestHandler(const Tp::AccountManagerPtr& am, QObject *parent)
: QObject(parent)
{
- m_notifierMenu = new KMenu(0);
- m_notifierMenu->addTitle(i18nc("Context menu title", "Received contact requests"));
m_accountManager = am;
connect(m_accountManager.data(), SIGNAL(newAccount(Tp::AccountPtr)),
this, SLOT(onNewAccountAdded(Tp::AccountPtr)));
@@ -52,6 +50,9 @@ ContactRequestHandler::ContactRequestHandler(const Tp::AccountManagerPtr& am, QO
Q_FOREACH(const Tp::AccountPtr &account, accounts) {
onNewAccountAdded(account);
}
+
+ m_noContactsAction = new KAction(i18n("No pending contact requests at the moment"), this);
+ m_noContactsAction->setEnabled(false);
}
ContactRequestHandler::~ContactRequestHandler()
@@ -149,7 +150,7 @@ void ContactRequestHandler::onPresencePublicationRequested(const Tp::Contacts& c
m_pendingContacts.insert(contact->id(), contact);
- createMenus();
+ updateMenus();
}
if (op) {
@@ -159,37 +160,33 @@ void ContactRequestHandler::onPresencePublicationRequested(const Tp::Contacts& c
}
}
-K_GLOBAL_STATIC(QWeakPointer<KStatusNotifierItem>, s_notifierItem)
-
-//static
-QSharedPointer<KStatusNotifierItem> ContactRequestHandler::getNotifierItem()
+void ContactRequestHandler::updateNotifierItemTooltip()
{
- QSharedPointer<KStatusNotifierItem> notifierItem = s_notifierItem->toStrongRef();
- if (!notifierItem) {
- notifierItem = QSharedPointer<KStatusNotifierItem>(new KStatusNotifierItem);
- notifierItem->setCategory(KStatusNotifierItem::Communications);
- notifierItem->setStatus(KStatusNotifierItem::NeedsAttention);
- notifierItem->setIconByName(QLatin1String("user-identity"));
- notifierItem->setAttentionIconByName(QLatin1String("list-add-user"));
- notifierItem->setStandardActionsEnabled(false);
- notifierItem->setProperty("contact_requests_count", 0U);
- *s_notifierItem = notifierItem;
- }
+ if (!m_menuItems.size()) {
+ // Set passive
+ m_notifierItem.data()->setStatus(KStatusNotifierItem::Passive);
+ // Add the usual "nothing" action, if needed
+ if (!m_notifierMenu->actions().contains(m_noContactsAction)) {
+ m_notifierMenu->addAction(m_noContactsAction);
+ }
- return notifierItem;
-}
+ m_notifierItem.data()->setToolTip(QLatin1String("list-add-user"),
+ i18n("No incoming contact requests"),
+ QString());
+ } else {
+ // Set active
+ m_notifierItem.data()->setStatus(KStatusNotifierItem::Active);
+ // Remove the "nothing" action, if needed
+ if (m_notifierMenu->actions().contains(m_noContactsAction)) {
+ m_notifierMenu->removeAction(m_noContactsAction);
+ }
-void ContactRequestHandler::updateNotifierItemTooltip()
-{
- QVariant requestsCount = m_notifierItem->property("contact_requests_count");
- requestsCount = QVariant(requestsCount.toUInt() + 1);
- m_notifierItem->setProperty("contact_requests_count", requestsCount);
-
- m_notifierItem->setToolTip(QLatin1String("list-add-user"),
- i18np("You have 1 incoming contact request",
- "You have %1 incoming contact requests",
- requestsCount.toUInt()),
- QString());
+ m_notifierItem.data()->setToolTip(QLatin1String("list-add-user"),
+ i18np("You have 1 incoming contact request",
+ "You have %1 incoming contact requests",
+ m_menuItems.size()),
+ QString());
+ }
}
void ContactRequestHandler::onContactRequestApproved()
@@ -207,14 +204,17 @@ void ContactRequestHandler::onContactRequestApproved()
// contact->manager()->requestPresenceSubscription(QList< Tp::ContactPtr >() << contact);
//}
m_pendingContacts.remove(contactId);
- createMenus();
+ updateMenus();
}
}
}
void ContactRequestHandler::onContactRequestDenied()
{
-QString contactId = qobject_cast<KAction*>(sender())->data().toString();
+ QString contactId = qobject_cast<KAction*>(sender())->data().toString();
+
+ // Disable the action in the meanwhile
+ m_menuItems.value(contactId)->setEnabled(false);
if (!contactId.isEmpty()) {
Tp::ContactPtr contact = m_pendingContacts.value(contactId);
@@ -227,22 +227,36 @@ QString contactId = qobject_cast<KAction*>(sender())->data().toString();
}
}
-void ContactRequestHandler::createMenus()
+void ContactRequestHandler::updateMenus()
{
- m_notifierItem = getNotifierItem();
+ if (m_notifierItem.isNull()) {
+ m_notifierItem = new KStatusNotifierItem(QLatin1String("telepathy_kde_contact_requests"), this);
+ m_notifierItem.data()->setCategory(KStatusNotifierItem::Communications);
+ m_notifierItem.data()->setStatus(KStatusNotifierItem::NeedsAttention);
+ m_notifierItem.data()->setIconByName(QLatin1String("user-identity"));
+ m_notifierItem.data()->setAttentionIconByName(QLatin1String("list-add-user"));
+ m_notifierItem.data()->setStandardActionsEnabled(false);
+
+ m_notifierMenu = new KMenu(0);
+ m_notifierMenu->addTitle(i18nc("Context menu title", "Received contact requests"));
+
+ m_notifierItem.data()->setContextMenu(m_notifierMenu);
+ }
kDebug() << m_pendingContacts.keys();
- m_notifierMenu->clear();
- m_notifierItem->setContextMenu(new KMenu());
-
QHash<QString, Tp::ContactPtr>::const_iterator i;
for (i = m_pendingContacts.constBegin(); i != m_pendingContacts.constEnd(); ++i) {
+ if (m_menuItems.contains(i.key())) {
+ // Skip
+ continue;
+ }
+
kDebug();
Tp::ContactPtr contact = i.value();
KMenu *contactMenu = new KMenu(m_notifierMenu);
- contactMenu->setTitle(i18n("Request from %1", contact->id()));
+ contactMenu->setTitle(i18n("Request from %1", contact->alias()));
contactMenu->setObjectName(contact->id());
KAction *menuAction;
@@ -252,22 +266,35 @@ void ContactRequestHandler::createMenus()
contactMenu->addTitle(contact->alias());
}
menuAction = new KAction(KIcon(QLatin1String("dialog-ok-apply")), i18n("Approve"), contactMenu);
+ menuAction->setData(i.key());
connect(menuAction, SIGNAL(triggered()),
this, SLOT(onContactRequestApproved()));
- menuAction->setData(contact->id());
contactMenu->addAction(menuAction);
menuAction = new KAction(KIcon(QLatin1String("dialog-close")), i18n("Deny"), contactMenu);
- menuAction->setData(contact->id());
-
+ menuAction->setData(i.key());
connect(menuAction, SIGNAL(triggered()),
this, SLOT(onContactRequestDenied()));
contactMenu->addAction(menuAction);
m_notifierMenu->addMenu(contactMenu);
+ m_menuItems.insert(i.key(), contactMenu);
}
- m_notifierItem->setContextMenu(m_notifierMenu);
+
+ QHash<QString, KMenu*>::iterator j = m_menuItems.begin();
+ while (j != m_menuItems.end()) {
+ if (m_pendingContacts.contains(j.key())) {
+ // Skip
+ ++j;
+ continue;
+ }
+
+ // Remove
+ m_notifierMenu->removeAction(j.value()->menuAction());
+ j = m_menuItems.erase(j);
+ }
+
updateNotifierItemTooltip();
}
-#include "contact-request-handler.moc"
\ No newline at end of file
+#include "contact-request-handler.moc"
diff --git a/contact-request-handler.h b/contact-request-handler.h
index b863c49..f3ada98 100644
--- a/contact-request-handler.h
+++ b/contact-request-handler.h
@@ -30,6 +30,7 @@
#include <KNotification>
class KMenu;
+class KAction;
class ContactRequestHandler : public QObject
{
Q_OBJECT
@@ -46,20 +47,22 @@ public Q_SLOTS:
void onAccountsPresenceStatusFiltered();
void onPresencePublicationRequested(const Tp::Contacts& contacts);
void onConnectionChanged(const Tp::ConnectionPtr& connection);
- void createMenus();
+ void updateMenus();
void onContactRequestApproved();
void onContactRequestDenied();
private:
- static QSharedPointer<KStatusNotifierItem> getNotifierItem();
+ KStatusNotifierItem *notifierItem();
void updateNotifierItemTooltip();
QWeakPointer<KNotification> m_notification;
- QSharedPointer<KStatusNotifierItem> m_notifierItem;
+ QWeakPointer<KStatusNotifierItem> m_notifierItem;
Tp::AccountManagerPtr m_accountManager;
KMenu *m_notifierMenu;
QHash<QString, Tp::ContactPtr> m_pendingContacts;
+ QHash<QString, KMenu*> m_menuItems;
+ KAction *m_noContactsAction;
};
#endif // CONTACT_REQUEST_HANDLER_H
--
ktp-kded-integration-module packaging
More information about the pkg-kde-commits
mailing list