From a775d1829171206955b40d5c9900aaccc954b7bb Mon Sep 17 00:00:00 2001 From: James Booth Date: Thu, 8 Nov 2012 22:39:38 +0000 Subject: [PATCH] Continue to send chat states when no viewing chat window --- src/input_win.c | 34 ++++------------------------------ src/ui.h | 2 ++ src/windows.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 30 deletions(-) diff --git a/src/input_win.c b/src/input_win.c index eb7ebe19..f04faba3 100644 --- a/src/input_win.c +++ b/src/input_win.c @@ -51,7 +51,6 @@ #include #endif -#include "chat_session.h" #include "common.h" #include "command.h" #include "contact_list.h" @@ -145,37 +144,12 @@ inp_get_char(int *ch, char *input, int *size) } if (prefs_get_states()) { - - // if not got char, and in chat window, flag as no activity - // send inactive or gone, depending how long inactive if (*ch == ERR) { - if (win_in_chat() && !win_in_groupchat()) { - char *recipient = win_get_recipient(); - chat_session_no_activity(recipient); - - if (chat_session_is_gone(recipient) && - !chat_session_get_sent(recipient)) { - jabber_send_gone(recipient); - } else if (chat_session_is_inactive(recipient) && - !chat_session_get_sent(recipient)) { - jabber_send_inactive(recipient); - } else if (prefs_get_outtype() && - chat_session_is_paused(recipient) && - !chat_session_get_sent(recipient)) { - jabber_send_paused(recipient); - } - } + win_no_activity(); } - - // if got char and in chat window, chat session active - if (prefs_get_outtype() && (*ch != ERR) && win_in_chat() && - !win_in_groupchat() && !in_command && _printable(*ch)) { - char *recipient = win_get_recipient(); - chat_session_set_composing(recipient); - if (!chat_session_get_sent(recipient) || - chat_session_is_paused(recipient)) { - jabber_send_composing(recipient); - } + if (prefs_get_outtype() && (*ch != ERR) && !in_command + && _printable(*ch)) { + win_activity(); } } diff --git a/src/ui.h b/src/ui.h index 333dd3ee..84583553 100644 --- a/src/ui.h +++ b/src/ui.h @@ -103,6 +103,8 @@ void win_disconnected(void); void win_show(const char * const msg); void win_bad_show(const char * const msg); void win_remind(void); +void win_activity(void); +void win_no_activity(void); void win_join_chat(const char * const room_jid, const char * const nick); void win_show_room_roster(const char * const room); diff --git a/src/windows.c b/src/windows.c index 3007e3ab..95445676 100644 --- a/src/windows.c +++ b/src/windows.c @@ -37,6 +37,7 @@ #endif #include "chat_log.h" +#include "chat_session.h" #include "command.h" #include "contact.h" #include "contact_list.h" @@ -262,6 +263,47 @@ win_remind(void) #endif } +void +win_activity(void) +{ + if (win_in_chat() && !win_in_groupchat()) { + char *recipient = win_get_recipient(); + chat_session_set_composing(recipient); + if (!chat_session_get_sent(recipient) || + chat_session_is_paused(recipient)) { + jabber_send_composing(recipient); + } + } +} + +void +win_no_activity(void) +{ + int i; + + // loop through regular chat windows and update states + for (i = 1; i < NUM_WINS; i++) { + if ((strcmp(_wins[i].from, "") != 0) && + (!room_is_active(_wins[i].from))) { + char *recipient = _wins[i].from; + chat_session_no_activity(recipient); + + if (chat_session_is_gone(recipient) && + !chat_session_get_sent(recipient)) { + jabber_send_gone(recipient); + } else if (chat_session_is_inactive(recipient) && + !chat_session_get_sent(recipient)) { + jabber_send_inactive(recipient); + } else if (prefs_get_outtype() && + chat_session_is_paused(recipient) && + !chat_session_get_sent(recipient)) { + jabber_send_paused(recipient); + } + } + } + +} + void win_show_incomming_msg(const char * const from, const char * const message, GTimeVal *tv_stamp)