]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/gossip-chat-window.c
Fix warning when selecting all accounts.
[empathy.git] / libempathy-gtk / gossip-chat-window.c
index fb112379be827e5b2e5dd958408ae64bb6b07625..6979e450ece63581cda34b0192292d7d4c4c92a9 100644 (file)
 #include <glade/glade.h>
 #include <glib/gi18n.h>
 
+#include <libempathy/empathy-contact-manager.h>
+#include <libempathy/empathy-contact-list.h>
+#include <libempathy/gossip-chatroom-manager.h>
 #include <libempathy/gossip-contact.h>
 #include <libempathy/gossip-debug.h>
 #include <libempathy/gossip-message.h>
 #include <libempathy/gossip-conf.h>
+#include <libempathy/gossip-utils.h>
 
 #include "gossip-chat-window.h"
 #include "empathy-images.h"
 //#include "gossip-chat-invite.h"
 //#include "gossip-contact-info-dialog.h"
 //#include "gossip-log-window.h"
-//#include "gossip-new-chatroom-dialog.h"
+#include "gossip-new-chatroom-dialog.h"
 #include "gossip-preferences.h"
 #include "gossip-private-chat.h"
+#include "gossip-group-chat.h"
 //#include "gossip-sound.h"
 #include "gossip-ui-utils.h"
 
@@ -228,7 +233,7 @@ typedef enum {
 } DndDragType;
 
 static const GtkTargetEntry drag_types_dest[] = {
-       { "text/contact-id", GTK_TARGET_SAME_APP, DND_DRAG_TYPE_CONTACT_ID },
+       { "text/contact-id", 0, DND_DRAG_TYPE_CONTACT_ID },
        { "GTK_NOTEBOOK_TAB", GTK_TARGET_SAME_APP, DND_DRAG_TYPE_TAB },
 };
 
@@ -271,8 +276,7 @@ gossip_chat_window_init (GossipChatWindow *window)
 
        priv = GET_PRIV (window);
 
-       priv->tooltips = g_object_ref (gtk_tooltips_new ());
-       gtk_object_sink (GTK_OBJECT (priv->tooltips));
+       priv->tooltips = g_object_ref_sink (gtk_tooltips_new ());
 
        glade = gossip_glade_get_file ("gossip-chat.glade",
                                       "chat_window",
@@ -759,16 +763,12 @@ chat_window_update_menu (GossipChatWindow *window)
        is_connected = gossip_chat_is_connected (priv->current_chat);
 
        if (gossip_chat_is_group_chat (priv->current_chat)) {
-#if 0
-FIXME:
                GossipGroupChat       *group_chat;
-               GossipChatroomManager *manager;
                GossipChatroom        *chatroom;
-               GossipChatroomId       id;
-               gboolean               saved;
+               GossipChatroomManager *manager;
+               gboolean               show_contacts;
 
                group_chat = GOSSIP_GROUP_CHAT (priv->current_chat);
-               chatroom = gossip_group_chat_get_chatroom (group_chat);
 
                /* Show / Hide widgets */
                gtk_widget_show (priv->menu_room);
@@ -780,11 +780,13 @@ FIXME:
                /* Can we add this room to our favourites and are we
                 * connected to the room?
                 */
-               manager = gossip_app_get_chatroom_manager ();
-               id = gossip_chatroom_get_id (chatroom);
-               saved = gossip_chatroom_manager_find (manager, id) != NULL;
+               manager = gossip_chatroom_manager_new ();
+               chatroom = gossip_chatroom_manager_find (manager,
+                                                        priv->current_chat->account,
+                                                        gossip_chat_get_id (priv->current_chat));
+               g_object_unref (manager);
 
-               gtk_widget_set_sensitive (priv->menu_room_add, !saved);
+               gtk_widget_set_sensitive (priv->menu_room_add, chatroom == NULL);
                gtk_widget_set_sensitive (priv->menu_conv_insert_smiley, is_connected);
                gtk_widget_set_sensitive (priv->menu_room_join_new, is_connected);
                gtk_widget_set_sensitive (priv->menu_room_invite, is_connected);
@@ -795,7 +797,7 @@ FIXME:
                 * with 2 or more group chat windows where showing
                 * contacts doesn't do anything.
                 */
-               show_contacts = gossip_chat_get_show_contacts (priv->current_chat);
+               show_contacts = gossip_group_chat_get_show_contacts (group_chat);
 
                g_signal_handlers_block_by_func (priv->menu_room_show_contacts,
                                                 chat_window_show_contacts_toggled_cb,
@@ -808,15 +810,17 @@ FIXME:
                g_signal_handlers_unblock_by_func (priv->menu_room_show_contacts,
                                                   chat_window_show_contacts_toggled_cb,
                                                   window);
-#endif
        } else {
+               GossipPrivateChat  *chat;
                GossipSubscription  subscription;
                GossipContact      *contact;
 
+               chat = GOSSIP_PRIVATE_CHAT (priv->current_chat);
+
                /* Show / Hide widgets */
                gtk_widget_hide (priv->menu_room);
 
-               contact = gossip_chat_get_contact (priv->current_chat);
+               contact = gossip_private_chat_get_contact (chat);
                subscription = gossip_contact_get_subscription (contact);
                if (!(subscription & GOSSIP_SUBSCRIPTION_FROM)) {
                        gtk_widget_show (priv->menu_conv_add_contact);
@@ -872,11 +876,11 @@ chat_window_add_contact_activate_cb (GtkWidget        *menuitem,
                                     GossipChatWindow *window)
 {
        GossipChatWindowPriv *priv;
-       GossipContact        *contact;
+       //GossipContact        *contact;
 
        priv = GET_PRIV (window);
 
-       contact = gossip_chat_get_contact (priv->current_chat);
+       //contact = gossip_chat_get_contact (priv->current_chat);
 
        // FIXME: gossip_add_contact_dialog_show (NULL, contact);
 }
@@ -911,13 +915,13 @@ chat_window_info_activate_cb (GtkWidget        *menuitem,
                              GossipChatWindow *window)
 {
        GossipChatWindowPriv *priv;
-       GossipContact        *contact;
+       //GossipContact        *contact;
 
        priv = GET_PRIV (window);
-
+/*FIXME:
        contact = gossip_chat_get_contact (priv->current_chat);
 
-/*FIXME:       gossip_contact_info_dialog_show (contact,
+       gossip_contact_info_dialog_show (contact,
                                         GTK_WINDOW (priv->dialog));*/
 }
 
@@ -1007,7 +1011,7 @@ chat_window_show_contacts_toggled_cb (GtkWidget        *menuitem,
        g_return_if_fail (priv->current_chat != NULL);
 
        show = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (priv->menu_room_show_contacts));
-       gossip_chat_set_show_contacts (priv->current_chat, show);
+       gossip_group_chat_set_show_contacts (GOSSIP_GROUP_CHAT (priv->current_chat), show);
 }
 
 static void
@@ -1027,7 +1031,6 @@ static void
 chat_window_room_set_topic_activate_cb (GtkWidget        *menuitem,
                                        GossipChatWindow *window)
 {
-/*FIXME
        GossipChatWindowPriv *priv;
        
        priv = GET_PRIV (window);
@@ -1037,7 +1040,7 @@ chat_window_room_set_topic_activate_cb (GtkWidget        *menuitem,
 
                group_chat = GOSSIP_GROUP_CHAT (priv->current_chat);
                gossip_group_chat_set_topic (group_chat);
-       }*/
+       }
 }
 
 static void
@@ -1048,7 +1051,7 @@ chat_window_room_join_new_activate_cb (GtkWidget        *menuitem,
 
        priv = GET_PRIV (window);
 
-       // FIXME: gossip_new_chatroom_dialog_show (GTK_WINDOW (priv->dialog));
+       gossip_new_chatroom_dialog_show (GTK_WINDOW (priv->dialog));
 }
 
 static void
@@ -1078,9 +1081,7 @@ static void
 chat_window_room_add_activate_cb (GtkWidget        *menuitem,
                                  GossipChatWindow *window)
 {
-/* FIXME:
        GossipChatWindowPriv  *priv;
-       GossipGroupChat       *group_chat;
        GossipChatroomManager *manager;
        GossipChatroom        *chatroom;
 
@@ -1092,16 +1093,17 @@ chat_window_room_add_activate_cb (GtkWidget        *menuitem,
                return;
        }
 
-       group_chat = GOSSIP_GROUP_CHAT (priv->current_chat);
-       chatroom = gossip_group_chat_get_chatroom (group_chat);
-       gossip_chatroom_set_favourite (chatroom, TRUE);
+       chatroom = gossip_chatroom_new_full (priv->current_chat->account,
+                                            gossip_chat_get_id (priv->current_chat),
+                                            gossip_chat_get_name (priv->current_chat),
+                                            FALSE);
 
-       manager = gossip_app_get_chatroom_manager ();
+       manager = gossip_chatroom_manager_new ();
        gossip_chatroom_manager_add (manager, chatroom);
-       gossip_chatroom_manager_store (manager);
-
        chat_window_update_menu (window);
-*/
+
+       g_object_unref (chatroom);
+       g_object_unref (manager);
 }
 
 static void
@@ -1588,14 +1590,14 @@ chat_window_drag_data_received (GtkWidget        *widget,
                                guint             time,
                                GossipChatWindow *window)
 {
+       /* FIXME: DnD of contact do not seems to work... */
        if (info == DND_DRAG_TYPE_CONTACT_ID) {
-#if 0
-FIXME:
-               GossipChatManager *manager;
-               GossipContact     *contact;
-               GossipChat        *chat;
-               GossipChatWindow  *old_window;
-               const gchar       *id = NULL;
+               EmpathyContactManager *manager;
+               GossipContact         *contact;
+               GossipChat            *chat;
+               GossipChatWindow      *old_window;
+               McAccount             *account;
+               const gchar           *id = NULL;
 
                if (selection) {
                        id = (const gchar*) selection->data;
@@ -1603,14 +1605,17 @@ FIXME:
 
                gossip_debug (DEBUG_DOMAIN, "DND contact from roster with id:'%s'", id);
                
-               contact = gossip_session_find_contact (gossip_app_get_session (), id);
+               manager = empathy_contact_manager_new ();
+               contact = empathy_contact_list_find (EMPATHY_CONTACT_LIST (manager), id);
+               g_object_unref (manager);
+
                if (!contact) {
                        gossip_debug (DEBUG_DOMAIN, "DND contact from roster not found");
                        return;
                }
                
-               manager = gossip_app_get_chat_manager ();
-               chat = GOSSIP_CHAT (gossip_chat_manager_get_chat (manager, contact));
+               account = gossip_contact_get_account (contact);
+               chat = gossip_chat_window_find_chat (account, id);
                old_window = gossip_chat_get_window (chat);
                
                if (old_window) {
@@ -1625,7 +1630,7 @@ FIXME:
                }
                
                /* Added to take care of any outstanding chat events */
-               gossip_chat_manager_show_chat (manager, contact);
+               gossip_chat_present (chat);
 
                /* We should return TRUE to remove the data when doing
                 * GDK_ACTION_MOVE, but we don't here otherwise it has
@@ -1633,7 +1638,6 @@ FIXME:
                 * anyway with add_chat() and remove_chat().
                 */
                gtk_drag_finish (context, TRUE, FALSE, time);
-#endif
        }
        else if (info == DND_DRAG_TYPE_TAB) {
                GossipChat        *chat = NULL;
@@ -1876,7 +1880,8 @@ gossip_chat_window_has_focus (GossipChatWindow *window)
 }
 
 GossipChat *
-gossip_chat_window_find_chat_by_id (const gchar *id)
+gossip_chat_window_find_chat (McAccount   *account,
+                             const gchar *id)
 {
        GList *l;
 
@@ -1893,7 +1898,8 @@ gossip_chat_window_find_chat_by_id (const gchar *id)
 
                        chat = ll->data;
 
-                       if (strcmp (id, gossip_chat_get_id (chat)) == 0) {
+                       if (gossip_account_equal (account, chat->account) &&
+                           strcmp (id, gossip_chat_get_id (chat)) == 0) {
                                return chat;
                        }
                }