diff -ur everybuddy/modules/msn/libmsn/libmsn.h everybuddy-colin/modules/msn/libmsn/libmsn.h --- everybuddy/modules/msn/libmsn/libmsn.h Thu Apr 11 02:36:26 2002 +++ everybuddy-colin/modules/msn/libmsn/libmsn.h Wed Apr 10 16:41:33 2002 @@ -91,7 +91,7 @@ typedef enum SERVER_EVENT { MSN_RNG, MSN_MSG, MSN_ILN, MSN_NLN, MSN_FLN, MSN_OUT, MSN_AUTH, MSN_MAIL, - MSN_NUM_EVENTS + MSN_TYP, MSN_NUM_EVENTS } ServerEvent; /* diff -ur everybuddy/modules/msn/libmsn/msn_commands.c everybuddy-colin/modules/msn/libmsn/msn_commands.c --- everybuddy/modules/msn/libmsn/msn_commands.c Thu Apr 11 02:36:30 2002 +++ everybuddy-colin/modules/msn/libmsn/msn_commands.c Wed Apr 10 16:44:34 2002 @@ -620,6 +620,9 @@ char *typingUser = strstr(mimeInfo, "TypingUser: ") + strlen("TypingUser: "); if (typingUser != NULL) { fprintf(stderr, "LIBMSN> %s is typing a message\n", typingUser); + if (msn_event[MSN_TYP] != NULL) + (*msn_event[MSN_TYP])(typingUser); + } } /*else { diff -ur everybuddy/modules/msn/msn.c everybuddy-colin/modules/msn/msn.c --- everybuddy/modules/msn/msn.c Thu Apr 11 02:36:23 2002 +++ everybuddy-colin/modules/msn/msn.c Thu Apr 11 01:51:17 2002 @@ -216,6 +216,7 @@ void MSNMail(void *data); void MSNStatusChange(void *data); void MSNAuthRequest(void *data); +void MSNTyping(char *data); void MSNLogout(void *data); static int is_setting_state = 0; @@ -731,6 +732,7 @@ MSN_RegisterCallback(MSN_AUTH, MSNAuthRequest); MSN_RegisterCallback(MSN_OUT, MSNLogout); MSN_RegisterCallback(MSN_MAIL, MSNMail); + MSN_RegisterCallback(MSN_TYP, MSNTyping); } /* @@ -771,6 +773,7 @@ } eb_parse_incomming_message(msn_local_account, sender, im->msg); + eb_update_status(msn_local_account, sender, FALSE); } /* @@ -901,4 +904,22 @@ } is_setting_state = 0; +} + +/* +** Name: MSNTyping +** Purpose: This function allows displaying "user is typing..." in message +** window status bar +** Input: data - Name of the typing user +** Output: none +*/ + +void MSNTyping(char *data) +{ + eb_account *sender = NULL; + + sender = find_account_by_handle(data, SERVICE_INFO.protocol_id); + if (sender != NULL) { + eb_update_status(msn_local_account, sender, TRUE); + } } diff -ur everybuddy/modules/msn2/msn.C everybuddy-colin/modules/msn2/msn.C --- everybuddy/modules/msn2/msn.C Wed Apr 10 16:59:10 2002 +++ everybuddy-colin/modules/msn2/msn.C Thu Apr 11 02:19:48 2002 @@ -46,7 +46,7 @@ #include "msn_core.h" #include "msn_bittybits.h" #include "message_parse.h" - +#include "chat_window.h" /************************************************************************************* * Begin Module Code ************************************************************************************/ @@ -799,6 +799,9 @@ eb_parse_incomming_message(ela, sender, msg); printf("--- Message from %s (%s):\n%s\n", friendlyname, username, msg); + if(sender != NULL) + eb_update_status(ela, sender, FALSE); + } void ext_IM_failed(msnconn * conn) @@ -810,7 +813,10 @@ void ext_typing_user(msnconn * conn, char * username, char * friendlyname) { + eb_account * ea = find_account_by_handle(username, SERVICE_INFO.protocol_id); printf("\t%s (%s) is typing...\n", friendlyname, username); + if(ea != NULL) + eb_update_status(msn_local_account, ea, TRUE); } diff -ur everybuddy/src/chat_window.c everybuddy-colin/src/chat_window.c --- everybuddy/src/chat_window.c Thu Apr 11 02:37:10 2002 +++ everybuddy-colin/src/chat_window.c Thu Apr 11 02:24:08 2002 @@ -1497,6 +1497,11 @@ GTK_SIGNAL_FUNC(close_win), cw); } + + cw->status_label = gtk_label_new(" "); + gtk_box_pack_start(GTK_BOX(hbox), cw->status_label, FALSE, FALSE, 0); + gtk_widget_show(cw->status_label); + gtk_box_pack_end(GTK_BOX(hbox), toolbar, FALSE, FALSE, 0); gtk_widget_show(toolbar); @@ -2006,3 +2011,21 @@ } +void eb_chat_window_display_status(eb_local_account * account, + eb_account * remote, + gboolean message) +{ + struct contact * remote_contact = find_contact_by_handle(remote->handle); + char * tmp = NULL; + + if(remote_contact->chatwindow != NULL) + { + if (message == TRUE) + tmp = g_strdup_printf("%s typing...", remote_contact->nick); + else + tmp = g_strdup_printf(" "); + gtk_label_set_text( remote_contact->chatwindow->status_label, + tmp ); + g_free(tmp); + } +} diff -ur everybuddy/src/chat_window.h everybuddy-colin/src/chat_window.h --- everybuddy/src/chat_window.h Thu Apr 11 02:37:10 2002 +++ everybuddy-colin/src/chat_window.h Thu Apr 11 01:50:53 2002 @@ -40,7 +40,8 @@ GtkWidget * entry; GtkWidget *sound_button; GtkWidget *allow_button; - + GtkWidget *status_label; + gboolean sound_enabled; gboolean send_enabled; gboolean first_enabled; @@ -77,6 +78,9 @@ void eb_chat_window_display_remote_message( eb_local_account * account, eb_account * remote, gchar * message ); +void eb_chat_window_display_status( eb_local_account * account, + eb_account * remote, + gboolean message ); void eb_chat_window_display_contact( struct contact * remote_contact ); void eb_chat_window_display_account( eb_account * remote_account ); diff -ur everybuddy/src/message_parse.c everybuddy-colin/src/message_parse.c --- everybuddy/src/message_parse.c Thu Apr 11 02:37:37 2002 +++ everybuddy-colin/src/message_parse.c Thu Apr 11 01:51:00 2002 @@ -428,3 +428,9 @@ } } +void eb_update_status( eb_local_account * account, + eb_account * remote, + gboolean message ) +{ + eb_chat_window_display_status( account, remote, message ); +} diff -ur everybuddy/src/message_parse.h everybuddy-colin/src/message_parse.h --- everybuddy/src/message_parse.h Thu Apr 11 02:37:37 2002 +++ everybuddy-colin/src/message_parse.h Thu Apr 11 01:51:04 2002 @@ -39,8 +39,12 @@ eb_account * remote, gchar * message ); +void eb_update_status( eb_local_account * account, + eb_account * remote, + gboolean message ); #ifdef __cplusplus } /* extern "C" */ #endif + extern char filename[1024]; #endif