static void chatroom_manager_chat_invalidated_cb (EmpathyTpChat *chat, guint domain, gint code, gchar *message, gpointer manager) { EmpathyChatroomManagerPriv *priv = GET_PRIV (manager); GList *l; for (l = priv->chatrooms; l; l = l->next) { EmpathyChatroom *chatroom = l->data; if (empathy_chatroom_get_tp_chat (chatroom) != chat) continue; empathy_chatroom_set_tp_chat (chatroom, NULL); if (!empathy_chatroom_is_favorite (chatroom)) { /* Remove the chatroom from the list, unless it's in the list of * favourites.. * FIXME this policy should probably not be in libempathy */ chatroom_manager_remove_link (manager, l); } break; } }
GtkWidget * empathy_contact_invite_menu_item_new (EmpathyContact *contact) { GtkWidget *item; GtkWidget *image; GtkWidget *room_item; EmpathyChatroomManager *mgr; GList *rooms, *l; GtkWidget *submenu = NULL; g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL); item = gtk_image_menu_item_new_with_mnemonic (_("_Invite to Chat Room")); image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_GROUP_MESSAGE, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image); if (empathy_contact_is_user (contact)) { gtk_widget_set_sensitive (item, FALSE); gtk_widget_show (image); return item; } mgr = empathy_chatroom_manager_dup_singleton (NULL); rooms = empathy_chatroom_manager_get_chatrooms (mgr, empathy_contact_get_account (contact)); for (l = rooms; l != NULL; l = g_list_next (l)) { EmpathyChatroom *chatroom = l->data; if (empathy_chatroom_get_tp_chat (chatroom) != NULL) { if (G_UNLIKELY (submenu == NULL)) submenu = gtk_menu_new (); room_item = create_room_sub_menu (contact, chatroom); gtk_menu_shell_append ((GtkMenuShell *) submenu, room_item); gtk_widget_show (room_item); } } if (submenu) { gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), submenu); } else { gtk_widget_set_sensitive (item, FALSE); } gtk_widget_show (image); g_object_unref (mgr); g_list_free (rooms); return item; }
static void room_sub_menu_activate_cb (GtkWidget *item, RoomSubMenuData *data) { EmpathyTpChat *chat; chat = empathy_chatroom_get_tp_chat (data->chatroom); if (chat == NULL) { /* channel was invalidated. Ignoring */ return; } /* send invitation */ empathy_contact_list_add (EMPATHY_CONTACT_LIST (chat), data->contact, _("Inviting you to this room")); }