# HG changeset patch # User Nathan Walp # Date 1067577267 0 # Node ID d60e1629ffde3af854bd7f3144f90c0c38983c69 # Parent 8a3b768f847282e74cb05c72f30625aff1226773 [gaim-migrate @ 7994] now when you try to IM someone in a jabber chat, it'll actually get there committer: Tailor Script diff -r 8a3b768f8472 -r d60e1629ffde src/gtkconv.c --- a/src/gtkconv.c Fri Oct 31 03:02:48 2003 +0000 +++ b/src/gtkconv.c Fri Oct 31 05:14:27 2003 +0000 @@ -1043,22 +1043,43 @@ } static void -menu_chat_im_cb(GtkWidget *w, GaimConversation *conv) +chat_do_im(GaimConversation *conv, const char *who) { - const char *who; + GaimPluginProtocolInfo *prpl_info = NULL; + char *real_who; GaimConversation *conv2; GaimAccount *account; - who = g_object_get_data(G_OBJECT(w), "user_data"); - account = gaim_conversation_get_account(conv); - conv2 = gaim_find_conversation_with_account(who, account); + if(account && account->gc) + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl); + + if(prpl_info && prpl_info->get_cb_real_name) + real_who = prpl_info->get_cb_real_name(account->gc, + gaim_conv_chat_get_id(GAIM_CONV_CHAT(conv)), who); + else + real_who = g_strdup(who); + + if(!real_who) + return; + + conv2 = gaim_find_conversation_with_account(real_who, account); if (conv2 != NULL) gaim_conv_window_show(gaim_conversation_get_window(conv2)); else - conv2 = gaim_conversation_new(GAIM_CONV_IM, account, who); + conv2 = gaim_conversation_new(GAIM_CONV_IM, account, real_who); + + g_free(real_who); +} + +static void +menu_chat_im_cb(GtkWidget *w, GaimConversation *conv) +{ + const char *who = g_object_get_data(G_OBJECT(w), "user_data"); + + chat_do_im(conv, who); } static void @@ -1169,14 +1190,8 @@ if (*who == '+') who++; if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) { - GaimConversation *c; - - if ((c = gaim_find_conversation_with_account(who, account)) == NULL) - c = gaim_conversation_new(GAIM_CONV_IM, account, who); - else - gaim_conversation_set_account(c, account); - } - else if (event->button == 3 && event->type == GDK_BUTTON_PRESS) { + chat_do_im(conv, who); + } else if (event->button == 3 && event->type == GDK_BUTTON_PRESS) { static GtkWidget *menu = NULL; GtkWidget *button; diff -r 8a3b768f8472 -r d60e1629ffde src/protocols/jabber/chat.c --- a/src/protocols/jabber/chat.c Fri Oct 31 03:02:48 2003 +0000 +++ b/src/protocols/jabber/chat.c Fri Oct 31 05:14:27 2003 +0000 @@ -268,3 +268,15 @@ return FALSE; } +char *jabber_chat_buddy_real_name(GaimConnection *gc, int id, const char *who) +{ + JabberStream *js = gc->proto_data; + JabberChat *chat; + + chat = jabber_chat_find_by_id(js, id); + + if(!chat) + return NULL; + + return g_strdup_printf("%s@%s/%s", chat->room, chat->server, who); +} diff -r 8a3b768f8472 -r d60e1629ffde src/protocols/jabber/chat.h --- a/src/protocols/jabber/chat.h Fri Oct 31 03:02:48 2003 +0000 +++ b/src/protocols/jabber/chat.h Fri Oct 31 05:14:27 2003 +0000 @@ -52,5 +52,7 @@ void jabber_chat_invite(GaimConnection *gc, int id, const char *message, const char *name); void jabber_chat_leave(GaimConnection *gc, int id); +char *jabber_chat_buddy_real_name(GaimConnection *gc, int id, const char *who); + #endif /* _GAIM_JABBER_CHAT_H_ */ diff -r 8a3b768f8472 -r d60e1629ffde src/protocols/jabber/jabber.c --- a/src/protocols/jabber/jabber.c Fri Oct 31 03:02:48 2003 +0000 +++ b/src/protocols/jabber/jabber.c Fri Oct 31 05:14:27 2003 +0000 @@ -1086,7 +1086,10 @@ jabber_roster_group_rename, NULL, NULL, /* convo_closed */ /* XXX: thread_ids */ - jabber_normalize /* normalize */ + jabber_normalize, + NULL, /* set_buddy_icon */ + NULL, /* remove_group */ + jabber_chat_buddy_real_name }; static GaimPluginInfo info = diff -r 8a3b768f8472 -r d60e1629ffde src/prpl.h --- a/src/prpl.h Fri Oct 31 03:02:48 2003 +0000 +++ b/src/prpl.h Fri Oct 31 05:14:27 2003 +0000 @@ -311,6 +311,8 @@ void (*set_buddy_icon)(GaimConnection *, const char *filename); void (*remove_group)(GaimConnection *gc, const char *group); + + char *(*get_cb_real_name)(GaimConnection *gc, int id, const char *who); }; #define GAIM_IS_PROTOCOL_PLUGIN(plugin) \