diff options
author | James Booth <boothj5@gmail.com> | 2015-01-11 23:04:22 +0000 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2015-01-11 23:04:22 +0000 |
commit | 13f0166aa04bce5e64803900d8554c92b6f3c667 (patch) | |
tree | 220f1afb5f143b89886b18c24ec75c918606a9f1 /src/ui | |
parent | c16871d143a00eeb04d40e7b4ab20590b8ae93c6 (diff) | |
download | profani-tty-13f0166aa04bce5e64803900d8554c92b6f3c667.tar.gz |
Only show UI events for chat states when in session
Diffstat (limited to 'src/ui')
-rw-r--r-- | src/ui/core.c | 45 | ||||
-rw-r--r-- | src/ui/ui.h | 4 |
2 files changed, 30 insertions, 19 deletions
diff --git a/src/ui/core.c b/src/ui/core.c index d9cb2d8e..cc3dc167 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -280,10 +280,11 @@ ui_chat_win_exists(const char * const barejid) } void -ui_contact_typing(const char * const barejid) +ui_contact_typing(const char * const barejid, const char * const resource) { ProfChatWin *chatwin = wins_get_chat(barejid); ProfWin *window = (ProfWin*) chatwin; + ChatSession *session = chat_session_get(barejid); if (prefs_get_boolean(PREF_INTYPE)) { // no chat window for user @@ -294,8 +295,8 @@ ui_contact_typing(const char * const barejid) } else if (!wins_is_current(window)) { cons_show_typing(barejid); - // in chat window with user - } else { + // in chat window with user, no session or session with resource + } else if (!session || (session && g_strcmp0(session->resource, resource) == 0)) { title_bar_set_typing(TRUE); int num = wins_get_num(window); @@ -1272,26 +1273,36 @@ ui_print_system_msg_from_recipient(const char * const barejid, const char *messa } void -ui_recipient_gone(const char * const barejid) +ui_recipient_gone(const char * const barejid, const char * const resource) { if (barejid == NULL) return; + if (resource == NULL) + return; - const char * display_usr = NULL; - PContact contact = roster_get_contact(barejid); - if (contact != NULL) { - if (p_contact_name(contact) != NULL) { - display_usr = p_contact_name(contact); - } else { - display_usr = barejid; + gboolean show_message = TRUE; + + ProfChatWin *chatwin = wins_get_chat(barejid); + if (chatwin) { + ChatSession *session = chat_session_get(barejid); + if (session && g_strcmp0(session->resource, resource) != 0) { + show_message = FALSE; } - } else { - display_usr = barejid; - } + if (show_message) { + const char * display_usr = NULL; + PContact contact = roster_get_contact(barejid); + if (contact != NULL) { + if (p_contact_name(contact) != NULL) { + display_usr = p_contact_name(contact); + } else { + display_usr = barejid; + } + } else { + display_usr = barejid; + } - ProfWin *window = (ProfWin*)wins_get_chat(barejid); - if (window != NULL) { - win_save_vprint(window, '!', NULL, 0, THEME_GONE, "", "<- %s has left the conversation.", display_usr); + win_save_vprint((ProfWin*)chatwin, '!', NULL, 0, THEME_GONE, "", "<- %s has left the conversation.", display_usr); + } } } diff --git a/src/ui/ui.h b/src/ui/ui.h index 0971f4f5..4d64342a 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -115,12 +115,12 @@ char * ui_ask_password(void); void ui_handle_stanza(const char * const msg); // ui events -void ui_contact_typing(const char * const from); +void ui_contact_typing(const char * const barejid, const char * const resource); void ui_incoming_msg(const char * const from, const char * const resource, const char * const message, GTimeVal *tv_stamp); void ui_incoming_private_msg(const char * const fulljid, const char * const message, GTimeVal *tv_stamp); void ui_disconnected(void); -void ui_recipient_gone(const char * const barejid); +void ui_recipient_gone(const char * const barejid, const char * const resource); void ui_outgoing_chat_msg(const char * const from, const char * const barejid, const char * const message); |