diff --git a/src/event/server_events.c b/src/event/server_events.c index bfd8bdb3..bee0e949 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -485,8 +485,9 @@ sv_ev_room_occupant_offline(const char *const room, const char *const nick, muc_roster_remove(room, nick); char *muc_status_pref = prefs_get_string(PREF_STATUSES_MUC); - if (g_strcmp0(muc_status_pref, "none") != 0) { - mucwin_occupant_offline(room, nick); + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin && (g_strcmp0(muc_status_pref, "none") != 0)) { + mucwin_occupant_offline(mucwin, nick); } prefs_free_string(muc_status_pref); occupantswin_occupants(room); diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 5edc6a8d..f8bf77e2 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -232,14 +232,12 @@ mucwin_roster(ProfMucWin *mucwin, GList *roster, const char *const presence) } void -mucwin_occupant_offline(const char *const roomjid, const char *const nick) +mucwin_occupant_offline(ProfMucWin *mucwin, const char *const nick) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window == NULL) { - log_error("Received offline presence for room participant %s, but no window open for %s.", nick, roomjid); - } else { - win_vprint(window, '!', 0, NULL, 0, THEME_OFFLINE, "", "<- %s has left the room.", nick); - } + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + win_vprint(window, '!', 0, NULL, 0, THEME_OFFLINE, "", "<- %s has left the room.", nick); } void diff --git a/src/ui/ui.h b/src/ui/ui.h index 61cf8745..6b225679 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -188,7 +188,7 @@ void mucwin_occupant_kicked(const char *const roomjid, const char *const nick, c void mucwin_occupant_banned(const char *const roomjid, const char *const nick, const char *const actor, const char *const reason); void mucwin_broadcast(const char *const roomjid, const char *const message); -void mucwin_occupant_offline(const char *const roomjid, const char *const nick); +void mucwin_occupant_offline(ProfMucWin *mucwin, const char *const nick); void mucwin_occupant_online(const char *const roomjid, const char *const nick, const char *const roles, const char *const affiliation, const char *const show, const char *const status); void mucwin_occupant_nick_change(const char *const roomjid, const char *const old_nick, const char *const nick); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 5609b3a9..b92aeca9 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -227,7 +227,7 @@ void mucwin_occupant_banned(const char * const roomjid, const char * const nick, void ui_leave_room(const char * const roomjid) {} void mucwin_broadcast(const char * const roomjid, const char * const message) {} -void mucwin_occupant_offline(const char * const roomjid, const char * const nick) {} +void mucwin_occupant_offline(ProfMucWin *mucwin, const char * const nick) {} void mucwin_occupant_online(const char * const roomjid, const char * const nick, const char * const roles, const char * const affiliation, const char * const show, const char * const status) {} void mucwin_occupant_nick_change(const char * const roomjid,