[empathy: 18/35] Factor out common blocking confirmation dialog



commit 9cf8d924a615ead7f3e74644d0b9d39532645649
Author: Danielle Madeley <danielle madeley collabora co uk>
Date:   Fri Feb 11 13:31:26 2011 +1100

    Factor out common blocking confirmation dialog

 libempathy-gtk/empathy-contact-dialogs.c |   43 ++++++++++++++++++++++++++++++
 libempathy-gtk/empathy-contact-dialogs.h |    3 ++
 libempathy-gtk/empathy-contact-menu.c    |   33 +++++------------------
 3 files changed, 53 insertions(+), 26 deletions(-)
---
diff --git a/libempathy-gtk/empathy-contact-dialogs.c b/libempathy-gtk/empathy-contact-dialogs.c
index 15f344b..11b608b 100644
--- a/libempathy-gtk/empathy-contact-dialogs.c
+++ b/libempathy-gtk/empathy-contact-dialogs.c
@@ -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;
+}
diff --git a/libempathy-gtk/empathy-contact-dialogs.h b/libempathy-gtk/empathy-contact-dialogs.h
index 8c3ffc6..7dc1db1 100644
--- a/libempathy-gtk/empathy-contact-dialogs.h
+++ b/libempathy-gtk/empathy-contact-dialogs.h
@@ -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
 
diff --git a/libempathy-gtk/empathy-contact-menu.c b/libempathy-gtk/empathy-contact-menu.c
index e03444a..64825b4 100644
--- a/libempathy-gtk/empathy-contact-menu.c
+++ b/libempathy-gtk/empathy-contact-menu.c
@@ -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 *



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]