void BuddyListContact::ContactContextMenu::removeResponseHandler( CppConsUI::MessageDialog& /*activator*/, CppConsUI::AbstractDialog::ResponseType response) { if (response != CppConsUI::AbstractDialog::RESPONSE_OK) return; // based on gtkdialogs.c:pidgin_dialogs_remove_contact_cb() PurpleContact *contact = parent_contact->getPurpleContact(); PurpleBlistNode *cnode = PURPLE_BLIST_NODE(contact); PurpleGroup *group = purple_contact_get_group(contact); for (PurpleBlistNode *bnode = purple_blist_node_get_first_child(cnode); bnode; bnode = purple_blist_node_get_sibling_next(bnode)) { PurpleBuddy *buddy = PURPLE_BUDDY(bnode); PurpleAccount *account = purple_buddy_get_account(buddy); if (purple_account_is_connected(account)) purple_account_remove_buddy(account, buddy, group); } /* Close the context menu before the contact is deleted because its deletion * can lead to destruction of this object. */ close(); purple_blist_remove_contact(contact); }
QuetzalContact *QuetzalAccount::createContact(const QString &id) { PurpleContact *pc = purple_contact_new(); purple_blist_add_contact(pc, NULL, NULL); PurpleBuddy *buddy = purple_buddy_new(m_account, id.toUtf8().constData(), 0); purple_blist_add_buddy(buddy, pc, purple_contact_get_group(pc), NULL); return m_contacts.value(id); }
BuddyListContact::ContactContextMenu::ContactContextMenu( BuddyListContact& parent_contact_) : ContextMenu(parent_contact_), parent_contact(&parent_contact_) { appendExtendedMenu(); if (parent_contact->isCollapsed()) appendItem(_("Expand"), sigc::bind(sigc::mem_fun(this, &ContactContextMenu::onExpandRequest), true)); else appendItem(_("Collapse"), sigc::bind(sigc::mem_fun(this, &ContactContextMenu::onExpandRequest), false)); appendItem(_("Information..."), sigc::mem_fun(this, &ContactContextMenu::onInformation)); appendItem(_("Alias..."), sigc::mem_fun(this, &ContactContextMenu::onChangeAlias)); appendItem(_("Delete..."), sigc::mem_fun(this, &ContactContextMenu::onRemove)); CppConsUI::MenuWindow *groups = new CppConsUI::MenuWindow(*this, AUTOSIZE, AUTOSIZE); for (PurpleBlistNode *node = purple_blist_get_root(); node; node = purple_blist_node_get_sibling_next(node)) { if (!PURPLE_BLIST_NODE_IS_GROUP(node)) continue; PurpleGroup *group = PURPLE_GROUP(node); CppConsUI::Button *button = groups->appendItem( purple_group_get_name(group), sigc::bind(sigc::mem_fun(this, &ContactContextMenu::onMoveTo), group)); if (purple_contact_get_group(parent_contact->getPurpleContact()) == group) button->grabFocus(); } appendSubMenu(_("Move to..."), *groups); }