]> git.0d.be Git - empathy.git/commitdiff
Confirmation dialog on remove contact/group. Fixes bug #519946 (Bruno Dusausoy).
authorXavier Claessens <xclaesse@src.gnome.org>
Fri, 14 Mar 2008 13:05:49 +0000 (13:05 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Fri, 14 Mar 2008 13:05:49 +0000 (13:05 +0000)
svn path=/trunk/; revision=794

libempathy-gtk/empathy-contact-list-view.c

index 3e659b08cacc13b7a3e191b44c54436e4cdddb9a..7b01e2ce2b8bfef6d2af526ebc6ea29af1c40024 100644 (file)
@@ -21,6 +21,7 @@
  * Authors: Mikael Hallendal <micke@imendio.com>
  *          Martyn Russell <martyn@imendio.com>
  *          Xavier Claessens <xclaesse@gmail.com>
+ *          Bruno Dusausoy <bdusauso@beeznest.net>
  */
 
 #include "config.h"
@@ -184,6 +185,9 @@ static void        contact_list_view_action_cb                 (GtkAction
                                                                EmpathyContactListView      *view);
 static void        contact_list_view_voip_activated            (EmpathyContactListView      *view,
                                                                EmpathyContact              *contact);
+static gboolean           contact_list_view_remove_dialog_show         (GtkWindow                  *parent,
+                                                               const gchar                 *window_title, 
+                                                               const gchar                 *text);
 
 enum {
        PROP_0,
@@ -1463,12 +1467,20 @@ contact_list_view_action_cb (GtkAction             *action,
                empathy_contact_information_dialog_show (contact, parent, TRUE, FALSE);
        }
        else if (contact && strcmp (name, "Remove") == 0) {
-               /* FIXME: Ask for confirmation */
                EmpathyContactList *list;
+               gchar *text; 
+               
+               text = g_strdup_printf (_("Do you really want to remove the contact '%s' ?"),
+                                       empathy_contact_get_name (contact));
+                                               
+               /* TRUE if user wants to remove the contact. FALSE otherwise.*/
+               if (contact_list_view_remove_dialog_show (parent, _("Removing contact"), text)) {
+                       list = empathy_contact_list_store_get_list_iface (priv->store);
+                       empathy_contact_list_remove (list, contact, 
+                                               _("Sorry, I don't want you in my contact list anymore."));
+               }
 
-               list = empathy_contact_list_store_get_list_iface (priv->store);
-               empathy_contact_list_remove (list, contact,
-                                            _("Sorry, I don't want you in my contact list anymore."));
+               g_free (text);
        }
        else if (contact && strcmp (name, "Invite") == 0) {
        }
@@ -1484,9 +1496,16 @@ contact_list_view_action_cb (GtkAction             *action,
        }
        else if (group && strcmp (name, "Remove") == 0) {
                EmpathyContactList *list;
+               gchar *text; 
+               
+               text = g_strdup_printf (_("Do you really want to remove the group '%s' ?"), group);
+               
+               if (contact_list_view_remove_dialog_show (parent, _("Removing group"), text)) {
+                       list = empathy_contact_list_store_get_list_iface (priv->store);
+                       empathy_contact_list_remove_group (list, group);
+               }
 
-               list = empathy_contact_list_store_get_list_iface (priv->store);
-               empathy_contact_list_remove_group (list, group);
+               g_free (text);
        }
 
        g_free (group);
@@ -1495,6 +1514,38 @@ contact_list_view_action_cb (GtkAction             *action,
        }
 }
 
+static gboolean
+contact_list_view_remove_dialog_show (GtkWindow *parent, 
+                                     const gchar *window_title, 
+                                     const gchar *text)
+{
+       GtkWidget *dialog, *label, *image, *hbox;
+       gboolean res;
+       
+       dialog = gtk_dialog_new_with_buttons (window_title, parent,
+                                               GTK_DIALOG_MODAL,
+                                               GTK_STOCK_DELETE, GTK_RESPONSE_YES,
+                                               GTK_STOCK_CANCEL, GTK_RESPONSE_NO,
+                                               NULL);
+       gtk_dialog_set_has_separator (GTK_DIALOG(dialog), FALSE);
+        
+       label = gtk_label_new (text);
+       image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
+        
+       hbox = gtk_hbox_new (FALSE, 5);
+       gtk_container_set_border_width (GTK_CONTAINER(hbox), 5);
+       gtk_box_pack_start_defaults (GTK_BOX(hbox), image);
+       gtk_box_pack_start_defaults (GTK_BOX(hbox), label);
+        
+       gtk_box_pack_start_defaults (GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox);
+       gtk_widget_show_all (dialog);
+        
+       res = gtk_dialog_run (GTK_DIALOG (dialog));
+
+       gtk_widget_destroy (dialog);
+       return (res == GTK_RESPONSE_YES);
+}
+
 static void
 contact_list_view_voip_activated (EmpathyContactListView *view,
                                  EmpathyContact         *contact)