diff --git a/src/command/commands.c b/src/command/commands.c index a7deb17a..fd7523fa 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -1663,7 +1663,7 @@ cmd_join(gchar **args, struct cmd_help_t help) if (!muc_room_is_active(room)) { presence_join_room(room, nick, passwd); } - ui_room_join(room); + ui_room_join(room, TRUE); muc_remove_invite(room); jid_destroy(room_arg); diff --git a/src/server_events.c b/src/server_events.c index 566d460b..93481b9a 100644 --- a/src/server_events.c +++ b/src/server_events.c @@ -502,5 +502,6 @@ handle_autoping_cancel(void) void handle_bookmark_autojoin(char *jid) { - ui_room_join(jid); + ui_room_join(jid, FALSE); + muc_remove_invite(jid); } diff --git a/src/ui/core.c b/src/ui/core.c index 569425f9..9c7d321f 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -1219,7 +1219,7 @@ _ui_outgoing_msg(const char * const from, const char * const to, } static void -_ui_room_join(char *room) +_ui_room_join(char *room, gboolean focus) { ProfWin *window = wins_get_by_recipient(room); int num = 0; @@ -1230,7 +1230,12 @@ _ui_room_join(char *room) } num = wins_get_num(window); - ui_switch_win(num); + + if (focus) { + ui_switch_win(num); + } else { + status_bar_active(num); + } } static void diff --git a/src/ui/ui.h b/src/ui/ui.h index a528b390..e1cbc28f 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -100,7 +100,7 @@ void (*ui_disconnected)(void); void (*ui_recipient_gone)(const char * const barejid); void (*ui_outgoing_msg)(const char * const from, const char * const to, const char * const message); -void (*ui_room_join)(char *room); +void (*ui_room_join)(char *room, gboolean focus); void (*ui_room_roster)(const char * const room, GList *roster, const char * const presence); void (*ui_room_history)(const char * const room_jid, const char * const nick, GTimeVal tv_stamp, const char * const message); diff --git a/tests/test_cmd_join.c b/tests/test_cmd_join.c index d07cd5f0..b23515ba 100644 --- a/tests/test_cmd_join.c +++ b/tests/test_cmd_join.c @@ -109,7 +109,7 @@ void cmd_join_uses_account_mucservice_when_no_service_specified(void **state) mock_presence_join_room(); presence_join_room_expect(expected_room, nick, NULL); - ui_room_join_expect(expected_room); + ui_room_join_expect(expected_room, TRUE); gboolean result = cmd_join(args, *help); assert_true(result); @@ -136,7 +136,7 @@ void cmd_join_uses_supplied_nick(void **state) mock_presence_join_room(); presence_join_room_expect(room, nick, NULL); - ui_room_join_expect(room); + ui_room_join_expect(room, TRUE); gboolean result = cmd_join(args, *help); assert_true(result); @@ -163,7 +163,7 @@ void cmd_join_uses_account_nick_when_not_supplied(void **state) mock_presence_join_room(); presence_join_room_expect(room, account_nick, NULL); - ui_room_join_expect(room); + ui_room_join_expect(room, TRUE); gboolean result = cmd_join(args, *help); assert_true(result); @@ -193,7 +193,7 @@ void cmd_join_uses_password_when_supplied(void **state) mock_presence_join_room(); presence_join_room_expect(expected_room, account_nick, password); - ui_room_join_expect(expected_room); + ui_room_join_expect(expected_room, TRUE); gboolean result = cmd_join(args, *help); assert_true(result); diff --git a/tests/ui/mock_ui.c b/tests/ui/mock_ui.c index 94f8e3c3..16e66436 100644 --- a/tests/ui/mock_ui.c +++ b/tests/ui/mock_ui.c @@ -166,9 +166,10 @@ gboolean _mock_ui_current_win_is_otr(void) } static -void _mock_ui_room_join(char *room) +void _mock_ui_room_join(char *room, gboolean focus) { check_expected(room); + check_expected(focus); } static @@ -433,10 +434,11 @@ ui_current_win_is_otr_returns(gboolean result) } void -ui_room_join_expect(char *room) +ui_room_join_expect(char *room, gboolean focus) { ui_room_join = _mock_ui_room_join; expect_string(_mock_ui_room_join, room, room); + expect_value(_mock_ui_room_join, focus, focus); } void diff --git a/tests/ui/mock_ui.h b/tests/ui/mock_ui.h index 5b984615..d16fad48 100644 --- a/tests/ui/mock_ui.h +++ b/tests/ui/mock_ui.h @@ -59,7 +59,7 @@ void ui_current_print_line_expect(char *message); void ui_current_win_is_otr_returns(gboolean result); -void ui_room_join_expect(char *room); +void ui_room_join_expect(char *room, gboolean focus); void mock_cons_show_roster(void); void cons_show_roster_expect(GSList *list);