]> git.0d.be Git - empathy.git/commitdiff
Factor out common blocking confirmation dialog
authorDanielle Madeley <danielle.madeley@collabora.co.uk>
Fri, 11 Feb 2011 02:31:26 +0000 (13:31 +1100)
committerChandni Verma <chandniverma2112@gmail.com>
Tue, 8 Mar 2011 04:04:56 +0000 (09:34 +0530)
libempathy-gtk/empathy-contact-dialogs.c
libempathy-gtk/empathy-contact-dialogs.h
libempathy-gtk/empathy-contact-menu.c

index 15f344bb8da9c11034f1d1a70be026c117f1e4e3..11b608bef051beeed665e896d91b7137bcf5b376 100644 (file)
@@ -17,6 +17,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  *
  * Authors: Xavier Claessens <xclaesse@gmail.com>
+ *          Danielle Madeley <danielle.madeley@collabora.co.uk>
  */
 
 #include <config.h>
@@ -487,3 +488,45 @@ empathy_new_contact_dialog_show_with_contact (GtkWindow *parent,
        gtk_widget_show (dialog);
 }
 
+/**
+ * empathy_block_contact_dialog_show:
+ * @parent: the parent of this dialog (or %NULL)
+ * @contact: the contact for this dialog
+ * @abusive: a pointer to store the value of the abusive contact check box
+ *  (or %NULL)
+ *
+ * Returns: %TRUE if the user wishes to block the contact
+ */
+gboolean
+empathy_block_contact_dialog_show (GtkWindow      *parent,
+                                  EmpathyContact *contact,
+                                  gboolean       *abusive)
+{
+       GtkWidget *dialog;
+       int res;
+
+       dialog = gtk_message_dialog_new (parent,
+                       GTK_DIALOG_MODAL,
+                       GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
+                       _("Block %s?"),
+                       empathy_contact_get_id (contact));
+
+       gtk_message_dialog_format_secondary_text (
+                       GTK_MESSAGE_DIALOG (dialog),
+                       _("Are you sure you want to block the contact %s?"),
+                       empathy_contact_get_id (contact));
+       gtk_dialog_add_buttons (GTK_DIALOG (dialog),
+                       GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                       _("_Block"), GTK_RESPONSE_REJECT,
+                       NULL);
+
+       /* FIXME: support reporting abusive contacts */
+
+       res = gtk_dialog_run (GTK_DIALOG (dialog));
+       gtk_widget_destroy (dialog);
+
+       if (abusive != NULL)
+               *abusive = FALSE;
+
+       return res == GTK_RESPONSE_REJECT;
+}
index 8c3ffc6c19cc9e097cecf7e90310f1eb25083e71..7dc1db10fe2dea18b35e865023edce983a77c1dc 100644 (file)
@@ -39,6 +39,9 @@ void empathy_contact_personal_dialog_show    (GtkWindow      *parent);
 void empathy_new_contact_dialog_show         (GtkWindow     *parent);
 void empathy_new_contact_dialog_show_with_contact (GtkWindow     *parent,
                                                    EmpathyContact *contact);
+gboolean empathy_block_contact_dialog_show (GtkWindow      *parent,
+                                           EmpathyContact *contact,
+                                           gboolean       *abusive);
 
 G_END_DECLS
 
index e03444ac965489e53c9e2d7c69bde345f0b7f419..64825b43cc96697abd4f583ff1e208294f8d5e99 100644 (file)
@@ -239,51 +239,32 @@ empathy_contact_block_menu_item_toggled (GtkCheckMenuItem *item,
        if (block_signal > 0)
                return;
 
-       manager = empathy_contact_manager_dup_singleton ();
        blocked = gtk_check_menu_item_get_active (item);
 
        if (blocked) {
                /* confirm the user really wishes to block the contact */
-               int res;
-               GtkWidget *parent, *dialog;
+               GtkWidget *parent;
 
                /* gtk_menu_get_attach_widget() doesn't behave properly here
                 * for some reason */
                parent = g_object_get_data (
                        G_OBJECT (gtk_widget_get_parent (GTK_WIDGET (item))),
                        "window");
-               dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
-                               GTK_DIALOG_MODAL,
-                               GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
-                               _("Block %s?"),
-                               empathy_contact_get_id (contact));
-
-               gtk_message_dialog_format_secondary_text (
-                       GTK_MESSAGE_DIALOG (dialog),
-                       _("Are you sure you want to block the contact %s?"),
-                       empathy_contact_get_id (contact));
-               gtk_dialog_add_buttons (GTK_DIALOG (dialog),
-                               GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-                               _("Block"), GTK_RESPONSE_REJECT,
-                               NULL);
-
-               res = gtk_dialog_run (GTK_DIALOG (dialog));
-               gtk_widget_destroy (dialog);
-
-               if (res != GTK_RESPONSE_REJECT)
-                       goto finally;
+
+               if (!empathy_block_contact_dialog_show (GTK_WINDOW (parent),
+                                       contact, NULL))
+                       return;
        }
 
+       manager = empathy_contact_manager_dup_singleton ();
        empathy_contact_list_set_blocked (EMPATHY_CONTACT_LIST (manager),
                                          contact, blocked);
+       g_object_unref (manager);
 
        /* update the toggle with the blocked status */
        block_signal++;
        gtk_check_menu_item_set_active (item, blocked);
        block_signal--;
-
-finally:
-       g_object_unref (manager);
 }
 
 static GtkWidget *