#include <libempathy/empathy-contact-factory.h>
#include <libempathy/empathy-contact.h>
#include <libempathy/empathy-message.h>
-#include <libempathy/empathy-debug.h>
+#include <libempathy/empathy-dispatcher.h>
#include <libempathy/empathy-utils.h>
#include <libempathy-gtk/empathy-images.h>
#include "empathy-chat-window.h"
#include "empathy-about-dialog.h"
-#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EMPATHY_TYPE_CHAT_WINDOW, EmpathyChatWindowPriv))
-
-#define DEBUG_DOMAIN "ChatWindow"
+#define DEBUG_FLAG EMPATHY_DEBUG_CHAT
+#include <libempathy/empathy-debug.h>
-struct _EmpathyChatWindowPriv {
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyChatWindow)
+typedef struct {
EmpathyChat *current_chat;
GList *chats;
GList *chats_new_msg;
GtkWidget *menu_help_contents;
GtkWidget *menu_help_about;
-};
+} EmpathyChatWindowPriv;
static GList *chat_windows = NULL;
name = chat_window_get_chat_name (priv->current_chat);
n_chats = g_list_length (priv->chats);
- empathy_debug (DEBUG_DOMAIN, "Update window");
+ DEBUG ("Update window");
/* Update menu */
gtk_widget_set_sensitive (priv->menu_tabs_next, !last_page);
subject = empathy_chat_get_subject (chat);
remote_contact = empathy_chat_get_remote_contact (chat);
- empathy_debug (DEBUG_DOMAIN, "Updating chat tab, name=%s, subject=%s, "
- "remote_contact=%p", name, subject, remote_contact);
+ DEBUG ("Updating chat tab, name=%s, subject=%s, remote_contact=%p",
+ name, subject, remote_contact);
/* Update tab image */
if (g_list_find (priv->chats_new_msg, chat)) {
smiley, -1);
}
+static void
+chat_window_conv_activate_cb (GtkWidget *menuitem,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv = GET_PRIV (window);
+ GtkWidget *submenu = NULL;
+
+ submenu = empathy_chat_get_contact_menu (priv->current_chat);
+ if (submenu) {
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (priv->menu_conv_contact),
+ submenu);
+ gtk_widget_show (priv->menu_conv_contact);
+ gtk_widget_show (submenu);
+ } else {
+ gtk_widget_hide (priv->menu_conv_contact);
+ }
+}
+
static void
chat_window_clear_activate_cb (GtkWidget *menuitem,
EmpathyChatWindow *window)
{
- EmpathyChatWindowPriv *priv;
-
- priv = GET_PRIV (window);
+ EmpathyChatWindowPriv *priv = GET_PRIV (window);
empathy_chat_clear (priv->current_chat);
}
GdkEvent *event,
EmpathyChatWindow *window)
{
- EmpathyChatWindowPriv *priv;
- GList *list;
- GList *l;
-
- priv = GET_PRIV (window);
-
- empathy_debug (DEBUG_DOMAIN, "Delete event received");
+ EmpathyChatWindowPriv *priv = GET_PRIV (window);
- list = g_list_copy (priv->chats);
+ DEBUG ("Delete event received");
- for (l = list; l; l = l->next) {
- empathy_chat_window_remove_chat (window, l->data);
+ g_object_ref (window);
+ while (priv->chats) {
+ empathy_chat_window_remove_chat (window, priv->chats->data);
}
-
- g_list_free (list);
+ g_object_unref (window);
return TRUE;
}
priv = GET_PRIV (window);
- empathy_debug (DEBUG_DOMAIN, "Turning %s urgency hint",
- urgent ? "on" : "off");
+ DEBUG ("Turning %s urgency hint", urgent ? "on" : "off");
gtk_window_set_urgency_hint (GTK_WINDOW (priv->dialog), urgent);
}
new_window = empathy_chat_window_new ();
priv = GET_PRIV (new_window);
- empathy_debug (DEBUG_DOMAIN, "Detach hook called");
+ DEBUG ("Detach hook called");
empathy_chat_window_move_chat (window, new_window, chat);
EmpathyChat *chat;
GtkWidget *child;
- empathy_debug (DEBUG_DOMAIN, "Page switched");
+ DEBUG ("Page switched");
priv = GET_PRIV (window);
* it, so we return here and in "page-added".
*/
if (priv->dnd_same_window) {
- empathy_debug (DEBUG_DOMAIN, "Page added (back to the same window)");
+ DEBUG ("Page added (back to the same window)");
priv->dnd_same_window = FALSE;
return;
}
- empathy_debug (DEBUG_DOMAIN, "Page added");
+ DEBUG ("Page added");
/* Get chat object */
chat = EMPATHY_CHAT (child);
* it, so we return here and in "page-added".
*/
if (priv->dnd_same_window) {
- empathy_debug (DEBUG_DOMAIN, "Page removed (and will be readded to same window)");
+ DEBUG ("Page removed (and will be readded to same window)");
return;
}
- empathy_debug (DEBUG_DOMAIN, "Page removed");
+ DEBUG ("Page removed");
/* Get chat object */
chat = EMPATHY_CHAT (child);
{
EmpathyChatWindowPriv *priv;
- empathy_debug (DEBUG_DOMAIN, "Focus in event, updating title");
+ DEBUG ("Focus in event, updating title");
priv = GET_PRIV (window);
id = (const gchar*) selection->data;
- empathy_debug (DEBUG_DOMAIN, "DND contact from roster with id:'%s'", id);
+ DEBUG ("DND contact from roster with id:'%s'", id);
strv = g_strsplit (id, "/", 2);
account = mc_account_lookup (strv[0]);
chat = empathy_chat_window_find_chat (account, strv[1]);
if (!chat) {
- empathy_chat_with_contact_id (account, strv[2]);
+ empathy_dispatcher_chat_with_contact_id (account, strv[2]);
g_object_unref (account);
g_strfreev (strv);
return;
EmpathyChat **chat;
EmpathyChatWindow *old_window = NULL;
- empathy_debug (DEBUG_DOMAIN, "DND tab");
+ DEBUG ("DND tab");
chat = (void*) selection->data;
old_window = chat_window_find_chat (*chat);
priv = GET_PRIV (window);
if (old_window == window) {
- empathy_debug (DEBUG_DOMAIN, "DND tab (within same window)");
+ DEBUG ("DND tab (within same window)");
priv->dnd_same_window = TRUE;
gtk_drag_finish (context, TRUE, FALSE, time);
return;
*/
gtk_drag_finish (context, TRUE, FALSE, time);
} else {
- empathy_debug (DEBUG_DOMAIN, "DND from unknown source");
+ DEBUG ("DND from unknown source");
gtk_drag_finish (context, FALSE, FALSE, time);
}
}
window = EMPATHY_CHAT_WINDOW (object);
priv = GET_PRIV (window);
- empathy_debug (DEBUG_DOMAIN, "Finalized: %p", object);
+ DEBUG ("Finalized: %p", object);
if (priv->save_geometry_id != 0) {
g_source_remove (priv->save_geometry_id);
static void
empathy_chat_window_init (EmpathyChatWindow *window)
{
- EmpathyChatWindowPriv *priv;
- GladeXML *glade;
- GtkAccelGroup *accel_group;
- GClosure *closure;
- GtkWidget *menu_conv;
- GtkWidget *menu;
- gint i;
- GtkWidget *chat_vbox;
- gchar *filename;
-
- priv = GET_PRIV (window);
-
+ GladeXML *glade;
+ GtkAccelGroup *accel_group;
+ GClosure *closure;
+ GtkWidget *menu_conv;
+ GtkWidget *menu;
+ gint i;
+ GtkWidget *chat_vbox;
+ gchar *filename;
+ EmpathyChatWindowPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (window,
+ EMPATHY_TYPE_CHAT_WINDOW, EmpathyChatWindowPriv);
+
+ window->priv = priv;
filename = empathy_file_lookup ("empathy-chat-window.glade", "src");
glade = empathy_glade_get_file (filename,
"chat_window",
empathy_glade_connect (glade,
window,
"chat_window", "configure-event", chat_window_configure_event_cb,
+ "menu_conv", "activate", chat_window_conv_activate_cb,
"menu_conv_clear", "activate", chat_window_clear_activate_cb,
"menu_conv_close", "activate", chat_window_close_activate_cb,
"menu_edit", "activate", chat_window_edit_activate_cb,
gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (priv->notebook), child,
TRUE, TRUE, GTK_PACK_START);
- empathy_debug (DEBUG_DOMAIN,
- "Chat added (%d references)",
- G_OBJECT (chat)->ref_count);
+ DEBUG ("Chat added (%d references)", G_OBJECT (chat)->ref_count);
}
void
GTK_WIDGET (chat));
gtk_notebook_remove_page (GTK_NOTEBOOK (priv->notebook), position);
- empathy_debug (DEBUG_DOMAIN,
- "Chat removed (%d references)",
- G_OBJECT (chat)->ref_count - 1);
+ DEBUG ("Chat removed (%d references)", G_OBJECT (chat)->ref_count - 1);
g_object_unref (chat);
}
widget = GTK_WIDGET (chat);
- empathy_debug (DEBUG_DOMAIN,
- "Chat moving with widget:%p (%d references)",
- widget,
- G_OBJECT (widget)->ref_count);
+ DEBUG ("Chat moving with widget:%p (%d references)", widget,
+ G_OBJECT (widget)->ref_count);
/* We reference here to make sure we don't loose the widget
* and the EmpathyChat object during the move.