#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"
} 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 },
};
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",
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);
/* 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);
* 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,
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);
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);
}
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));*/
}
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
chat_window_room_set_topic_activate_cb (GtkWidget *menuitem,
GossipChatWindow *window)
{
-/*FIXME
GossipChatWindowPriv *priv;
priv = GET_PRIV (window);
group_chat = GOSSIP_GROUP_CHAT (priv->current_chat);
gossip_group_chat_set_topic (group_chat);
- }*/
+ }
}
static void
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
chat_window_room_add_activate_cb (GtkWidget *menuitem,
GossipChatWindow *window)
{
-/* FIXME:
GossipChatWindowPriv *priv;
- GossipGroupChat *group_chat;
GossipChatroomManager *manager;
GossipChatroom *chatroom;
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
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;
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) {
}
/* 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
* 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;
}
GossipChat *
-gossip_chat_window_find_chat_by_id (const gchar *id)
+gossip_chat_window_find_chat (McAccount *account,
+ const gchar *id)
{
GList *l;
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;
}
}