From 385336c10b0026025d4cd3a32d0a9b1bc521469a Mon Sep 17 00:00:00 2001 From: James Booth Date: Sat, 14 Mar 2015 22:59:49 +0000 Subject: Don't switch window on sent carbon --- src/server_events.c | 2 +- src/ui/core.c | 42 ++++++++++++++++++++++++++++++++++++++++++ src/ui/ui.h | 2 ++ tests/ui/stub_ui.c | 2 ++ 4 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/server_events.c b/src/server_events.c index b0a9b1e3..fc115d95 100644 --- a/src/server_events.c +++ b/src/server_events.c @@ -310,7 +310,7 @@ handle_incoming_private_message(char *fulljid, char *message) void handle_carbon(char *barejid, char *message){ - ui_outgoing_chat_msg("me", barejid, message); + ui_outgoing_chat_msg_carbon("me", barejid, message); } void diff --git a/src/ui/core.c b/src/ui/core.c index b9f526cc..967a379f 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -1451,6 +1451,48 @@ ui_outgoing_chat_msg(const char * const from, const char * const barejid, ui_switch_win(num); } +void +ui_outgoing_chat_msg_carbon(const char * const from, const char * const barejid, + const char * const message) +{ + PContact contact = roster_get_contact(barejid); + ProfWin *window = (ProfWin*)wins_get_chat(barejid); + int num = 0; + + // create new window + if (window == NULL) { + window = wins_new_chat(barejid); +#ifdef HAVE_LIBOTR + ProfChatWin *chatwin = (ProfChatWin*)window; + if (otr_is_secure(barejid)) { + chatwin->is_otr = TRUE; + } +#endif + num = wins_get_num(window); + + if (prefs_get_boolean(PREF_CHLOG) && prefs_get_boolean(PREF_HISTORY)) { + _win_show_history(num, barejid); + } + + if (contact != NULL) { + if (strcmp(p_contact_presence(contact), "offline") == 0) { + const char *show = p_contact_presence(contact); + const char *status = p_contact_status(contact); + win_show_status_string(window, barejid, show, status, NULL, "--", "offline"); + } + } + + // use existing window + } else { + num = wins_get_num(window); + } + ProfChatWin *chatwin = (ProfChatWin*)window; + chat_state_active(chatwin->state); + + win_save_print(window, '-', NULL, 0, THEME_TEXT_ME, from, message); + status_bar_active(num); +} + void ui_outgoing_private_msg(const char * const from, const char * const fulljid, const char * const message) diff --git a/src/ui/ui.h b/src/ui/ui.h index a0408503..c7ffda83 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -122,6 +122,8 @@ 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); +void ui_outgoing_chat_msg_carbon(const char * const from, const char * const barejid, + const char * const message); void ui_outgoing_private_msg(const char * const from, const char * const fulljid, const char * const message); diff --git a/tests/ui/stub_ui.c b/tests/ui/stub_ui.c index 1a0f650d..eb700856 100644 --- a/tests/ui/stub_ui.c +++ b/tests/ui/stub_ui.c @@ -201,6 +201,8 @@ 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) {} +void ui_outgoing_chat_msg_carbon(const char * const from, const char * const barejid, + const char * const message) {} void ui_outgoing_private_msg(const char * const from, const char * const fulljid, const char * const message) {} -- cgit 1.4.1-2-gfad0