about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2012-11-08 22:39:38 +0000
committerJames Booth <boothj5@gmail.com>2012-11-08 22:39:38 +0000
commita775d1829171206955b40d5c9900aaccc954b7bb (patch)
tree9457cf0e51c709faf9f7dc35d99dc746b23d15a0 /src
parent76149e1f31c8f659475f0eb2b76d850a640e21fc (diff)
downloadprofani-tty-a775d1829171206955b40d5c9900aaccc954b7bb.tar.gz
Continue to send chat states when no viewing chat window
Diffstat (limited to 'src')
-rw-r--r--src/input_win.c34
-rw-r--r--src/ui.h2
-rw-r--r--src/windows.c42
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 <ncurses/ncurses.h>
 #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"
@@ -263,6 +264,47 @@ win_remind(void)
 }
 
 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)
 {