diff options
author | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2011-02-10 10:19:35 +0800 |
---|---|---|
committer | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2011-02-10 10:19:35 +0800 |
commit | 9b421ab4f0806be9bfb841286fa991204aaa4780 (patch) | |
tree | e2c3c04c6b1fa075adb48c4c7fe0e8bc69b0caee | |
parent | be7fff958c4327450dcc170e6387cdc2a284f065 (diff) | |
download | gsoc2013-empathy-9b421ab4f0806be9bfb841286fa991204aaa4780.tar gsoc2013-empathy-9b421ab4f0806be9bfb841286fa991204aaa4780.tar.gz gsoc2013-empathy-9b421ab4f0806be9bfb841286fa991204aaa4780.tar.bz2 gsoc2013-empathy-9b421ab4f0806be9bfb841286fa991204aaa4780.tar.lz gsoc2013-empathy-9b421ab4f0806be9bfb841286fa991204aaa4780.tar.xz gsoc2013-empathy-9b421ab4f0806be9bfb841286fa991204aaa4780.tar.zst gsoc2013-empathy-9b421ab4f0806be9bfb841286fa991204aaa4780.zip |
Add a confirmation dialog when you block a contact from the Contact menu
-rw-r--r-- | libempathy-gtk/empathy-contact-menu.c | 43 | ||||
-rw-r--r-- | src/empathy-chat-window.c | 4 |
2 files changed, 46 insertions, 1 deletions
diff --git a/libempathy-gtk/empathy-contact-menu.c b/libempathy-gtk/empathy-contact-menu.c index da5d61a8c..156d82e3c 100644 --- a/libempathy-gtk/empathy-contact-menu.c +++ b/libempathy-gtk/empathy-contact-menu.c @@ -231,15 +231,57 @@ static void empathy_contact_block_menu_item_toggled (GtkCheckMenuItem *item, EmpathyContact *contact) { + static guint block_signal = 0; EmpathyContactManager *manager; gboolean blocked; + 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; + + /* 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; + } + empathy_contact_list_set_blocked (EMPATHY_CONTACT_LIST (manager), contact, blocked); + /* update the toggle with the blocked status */ + block_signal++; + gtk_check_menu_item_set_active (item, blocked); + block_signal--; + +finally: g_object_unref (manager); } @@ -269,7 +311,6 @@ empathy_contact_block_menu_item_new (EmpathyContact *contact) } 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); diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c index 0455642f8..f8a89a101 100644 --- a/src/empathy-chat-window.c +++ b/src/empathy-chat-window.c @@ -403,6 +403,10 @@ chat_window_contact_menu_update (EmpathyChatWindowPriv *priv, if (orig_submenu == NULL || !gtk_widget_get_visible (orig_submenu)) { submenu = empathy_chat_get_contact_menu (priv->current_chat); + + /* gtk_menu_attach_to_widget() doesn't behave nicely here */ + g_object_set_data (G_OBJECT (submenu), "window", priv->dialog); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu), submenu); gtk_widget_show (menu); } else { |