]> git.0d.be Git - empathy.git/commitdiff
Add 'Block Contact' to empathy-contact-menu
authorDanielle Madeley <danielle.madeley@collabora.co.uk>
Wed, 9 Feb 2011 02:05:20 +0000 (13:05 +1100)
committerChandni Verma <chandniverma2112@gmail.com>
Tue, 8 Mar 2011 01:01:20 +0000 (06:31 +0530)
libempathy-gtk/empathy-chat.c
libempathy-gtk/empathy-contact-menu.c
libempathy-gtk/empathy-contact-menu.h

index 72e906079c1fd13887affc038d39d5abb80959f6..b696963ac95c5371736e4b2c26b08cf3a8be5885 100644 (file)
@@ -3590,7 +3590,8 @@ empathy_chat_get_contact_menu (EmpathyChat *chat)
                menu = empathy_contact_menu_new (priv->remote_contact,
                                                 EMPATHY_CONTACT_FEATURE_CALL |
                                                 EMPATHY_CONTACT_FEATURE_LOG |
-                                                EMPATHY_CONTACT_FEATURE_INFO);
+                                                EMPATHY_CONTACT_FEATURE_INFO |
+                                                EMPATHY_CONTACT_FEATURE_BLOCK);
        }
 
        return menu;
index 3bf4157466076404de3a1fbce04e26a535f29928..03e0db3aa948f4f553ec1ce345da7ebf1651ec27 100644 (file)
@@ -40,6 +40,8 @@
 #include "empathy-ui-utils.h"
 #include "empathy-share-my-desktop.h"
 
+static GtkWidget *empathy_contact_block_menu_item_new (EmpathyContact *);
+
 GtkWidget *
 empathy_contact_menu_new (EmpathyContact             *contact,
                          EmpathyContactFeatureFlags  features)
@@ -139,6 +141,19 @@ empathy_contact_menu_new (EmpathyContact             *contact,
                gtk_widget_show (item);
        }
 
+       /* Separator & Block */
+       if (features & EMPATHY_CONTACT_FEATURE_BLOCK &&
+           (item = empathy_contact_block_menu_item_new (contact)) != NULL) {
+               GtkWidget *sep;
+
+               sep = gtk_separator_menu_item_new ();
+               gtk_menu_shell_append (shell, sep);
+               gtk_widget_show (sep);
+
+               gtk_menu_shell_append (shell, item);
+               gtk_widget_show (item);
+       }
+
        return menu;
 }
 
@@ -213,6 +228,62 @@ empathy_contact_add_menu_item_new (EmpathyContact *contact)
        return item;
 }
 
+static void
+empathy_contact_block_menu_item_toggled (GtkCheckMenuItem *item,
+                                        EmpathyContact   *contact)
+{
+       EmpathyContactManager *manager;
+       gboolean blocked;
+
+       manager = empathy_contact_manager_dup_singleton ();
+       blocked = gtk_check_menu_item_get_active (item);
+
+       empathy_contact_list_set_blocked (EMPATHY_CONTACT_LIST (manager),
+                                         contact, blocked);
+
+       g_object_unref (manager);
+}
+
+static GtkWidget *
+empathy_contact_block_menu_item_new (EmpathyContact *contact)
+{
+       GtkWidget *item;
+       EmpathyContactManager *manager;
+       TpConnection *connection;
+       EmpathyContactListFlags flags;
+       gboolean blocked;
+
+       g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
+
+       if (!empathy_contact_manager_initialized ()) {
+               return NULL;
+       }
+
+       manager = empathy_contact_manager_dup_singleton ();
+       connection = empathy_contact_get_connection (contact);
+
+       flags = empathy_contact_manager_get_flags_for_connection (manager,
+                       connection);
+
+       if (!(flags & EMPATHY_CONTACT_LIST_CAN_BLOCK)) {
+               return NULL;
+       }
+
+       item = gtk_check_menu_item_new_with_mnemonic (_("_Block Contact"));
+       /* FIXME: this doesn't always get updated immediately */
+       blocked = empathy_contact_list_get_blocked (
+                       EMPATHY_CONTACT_LIST (manager),
+                       contact);
+
+       gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), blocked);
+
+       g_signal_connect (item, "toggled",
+                       G_CALLBACK (empathy_contact_block_menu_item_toggled),
+                       contact);
+
+       return item;
+}
+
 static void
 empathy_contact_chat_menu_item_activated (GtkMenuItem *item,
        EmpathyContact *contact)
index 2e02474204862b3c5f5db04ee68a360f4d8db52c..35d6479e6cf865634c83a9ae5f2e54b191a77b1d 100644 (file)
@@ -37,7 +37,8 @@ typedef enum {
        EMPATHY_CONTACT_FEATURE_INFO = 1 << 4,
        EMPATHY_CONTACT_FEATURE_FAVOURITE = 1 << 5,
        EMPATHY_CONTACT_FEATURE_FT = 1 << 6,
-       EMPATHY_CONTACT_FEATURE_ALL = (1 << 7) - 1,
+       EMPATHY_CONTACT_FEATURE_BLOCK = 1 << 7,
+       EMPATHY_CONTACT_FEATURE_ALL = (1 << 8) - 1,
 } EmpathyContactFeatureFlags;
 
 GtkWidget * empathy_contact_menu_new           (EmpathyContact             *contact,