[empathy] Determine if the contact is not in the Contact List and add a menu item as appropriate
- From: Davyd Madeley <davyd src gnome org>
- To: svn-commits-list gnome org
- Subject: [empathy] Determine if the contact is not in the Contact List and add a menu item as appropriate
- Date: Wed, 15 Jul 2009 10:14:34 +0000 (UTC)
commit fac3f031d33d41237ec86e810ffad81cd63c6ec3
Author: Davyd Madeley <davyd madeley id au>
Date: Tue Feb 24 14:34:26 2009 +0900
Determine if the contact is not in the Contact List and add a menu item as appropriate
libempathy-gtk/empathy-contact-menu.c | 43 +++++++++++++++++++++++++++++++++
libempathy-gtk/empathy-contact-menu.h | 1 +
2 files changed, 44 insertions(+), 0 deletions(-)
---
diff --git a/libempathy-gtk/empathy-contact-menu.c b/libempathy-gtk/empathy-contact-menu.c
index f6d1ca1..9969f3d 100644
--- a/libempathy-gtk/empathy-contact-menu.c
+++ b/libempathy-gtk/empathy-contact-menu.c
@@ -28,6 +28,7 @@
#include <libempathy/empathy-call-factory.h>
#include <libempathy/empathy-log-manager.h>
+#include <libempathy/empathy-contact-manager.h>
#include <libempathy/empathy-dispatcher.h>
#include <libempathy/empathy-utils.h>
#include <libempathy/empathy-chatroom-manager.h>
@@ -56,6 +57,13 @@ empathy_contact_menu_new (EmpathyContact *contact,
menu = gtk_menu_new ();
shell = GTK_MENU_SHELL (menu);
+ /* Add Contact */
+ item = empathy_contact_add_menu_item_new (contact);
+ if (item) {
+ gtk_menu_shell_append (shell, item);
+ gtk_widget_show (item);
+ }
+
/* Chat */
if (features & EMPATHY_CONTACT_FEATURE_CHAT) {
item = empathy_contact_chat_menu_item_new (contact);
@@ -124,6 +132,41 @@ empathy_contact_chat_menu_item_activated (GtkMenuItem *item,
empathy_dispatcher_chat_with_contact (contact, NULL, NULL);
}
+GtkWidget *
+empathy_contact_add_menu_item_new (EmpathyContact *contact)
+{
+ GtkWidget *item;
+ GtkWidget *image;
+ EmpathyContactManager *manager;
+ GList *l, *members;
+ gboolean found = FALSE;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
+
+ manager = empathy_contact_manager_dup_singleton ();
+ members = empathy_contact_list_get_members (EMPATHY_CONTACT_LIST (manager));
+ for (l = members; l; l = l->next) {
+ if (!found && empathy_contact_equal (l->data, contact)) {
+ found = TRUE;
+ /* we keep iterating so that we don't leak contact
+ * refs */
+ }
+
+ g_object_unref (l->data);
+ }
+ g_list_free (members);
+
+ if (found) return NULL;
+
+ item = gtk_image_menu_item_new_with_mnemonic (_("_Add Contact..."));
+ image = gtk_image_new_from_icon_name (GTK_STOCK_ADD,
+ GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+
+ /* FIXME - callback */
+
+ return item;
+}
GtkWidget *
empathy_contact_chat_menu_item_new (EmpathyContact *contact)
diff --git a/libempathy-gtk/empathy-contact-menu.h b/libempathy-gtk/empathy-contact-menu.h
index 262ec96..1c40d0e 100644
--- a/libempathy-gtk/empathy-contact-menu.h
+++ b/libempathy-gtk/empathy-contact-menu.h
@@ -40,6 +40,7 @@ typedef enum {
GtkWidget * empathy_contact_menu_new (EmpathyContact *contact,
EmpathyContactFeatureFlags features);
+GtkWidget * empathy_contact_add_menu_item_new (EmpathyContact *contact);
GtkWidget * empathy_contact_chat_menu_item_new (EmpathyContact *contact);
GtkWidget * empathy_contact_audio_call_menu_item_new (EmpathyContact *contact);
GtkWidget * empathy_contact_video_call_menu_item_new (EmpathyContact *contact);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]